Sha256: c5184be8e25ccc24157b43947e9156288e5097fd7f8835a65d871ea909c9fa71

Contents?: true

Size: 1.29 KB

Versions: 14

Compression:

Stored size: 1.29 KB

Contents

module Dexter
  class Query
    attr_reader :statement, :fingerprint, :plans
    attr_writer :tables
    attr_accessor :missing_tables, :new_cost, :total_time, :calls, :indexes, :suggest_index, :pass1_indexes, :pass2_indexes, :pass3_indexes, :candidate_tables, :tables_from_views

    def initialize(statement, fingerprint = nil)
      @statement = statement
      unless fingerprint
        fingerprint = PgQuery.fingerprint(statement) rescue "unknown"
      end
      @fingerprint = fingerprint
      @plans = []
      @tables_from_views = []
    end

    def tables
      @tables ||= begin
        parse ? parse.tables : []
      rescue => e
        # possible pg_query bug
        $stderr.puts "Error extracting tables. Please report to https://github.com/ankane/dexter/issues"
        $stderr.puts "#{e.class.name}: #{e.message}"
        $stderr.puts statement
        []
      end
    end

    def tree
      parse.tree
    end

    def explainable?
      plans.any?
    end

    def costs
      plans.map { |plan| plan["Total Cost"] }
    end

    def initial_cost
      costs[0]
    end

    def high_cost?
      initial_cost && initial_cost >= 100
    end

    private

    def parse
      unless defined?(@parse)
        @parse = PgQuery.parse(statement) rescue nil
      end
      @parse
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
pgdexter-0.5.1 lib/dexter/query.rb
pgdexter-0.5.0 lib/dexter/query.rb
pgdexter-0.4.3 lib/dexter/query.rb
pgdexter-0.4.2 lib/dexter/query.rb
pgdexter-0.4.1 lib/dexter/query.rb
pgdexter-0.4.0 lib/dexter/query.rb
pgdexter-0.3.10 lib/dexter/query.rb
pgdexter-0.3.9 lib/dexter/query.rb
pgdexter-0.3.8 lib/dexter/query.rb
pgdexter-0.3.7 lib/dexter/query.rb
pgdexter-0.3.6 lib/dexter/query.rb
pgdexter-0.3.5 lib/dexter/query.rb
pgdexter-0.3.4 lib/dexter/query.rb
pgdexter-0.3.3 lib/dexter/query.rb