Sha256: 3262b7da277c917fe9f7670f87178387f5c27528a9d53646cfcf3eca3f2e581d
Contents?: true
Size: 1.74 KB
Versions: 1
Compression:
Stored size: 1.74 KB
Contents
# frozen_string_literal: true module ROM module Plugins module Relation module SQL module Postgres # PG-specific extensions which adds `Relation#explain` method # # @api public module Explain # Show the execution plan # One of four different output formats are supported: plain text, XML, JSON, YAML # JSON format will be parsed and unwrapped automatically, plan in other formats # will be returned as a plain string. # Other options will be transparently added to the statement. # # @example # users.by_pk(1).explain(analyze: true, timing: false) # => Plan output # # @option :format [Symbol] Plan output format # # @return [Hash,String] # # @see https://www.postgresql.org/docs/current/static/sql-explain.html PostgreSQL docs # # @api public def explain(format: :text, **options) bool_options = options.map { "#{_1.to_s.upcase} #{!!_2}" } # rubocop:disable Style/DoubleNegation format_option = "FORMAT #{format.to_s.upcase}" explain_value = [format_option, *bool_options].join(', ') query = "EXPLAIN (#{explain_value}) #{dataset.sql}" rows = dataset.with_sql(query).map(:'QUERY PLAN') case format when :json rows[0][0]['Plan'] else rows.join("\n") end end end end end end end end ROM.plugins do adapter :sql do register :pg_explain, ROM::Plugins::Relation::SQL::Postgres::Explain, type: :relation end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rom-sql-3.7.0 | lib/rom/plugins/relation/sql/postgres/explain.rb |