module RubyPGExtras

Constants

DEFAULT_ARGS
NEW_PG_STAT_STATEMENTS
QUERIES
VERSION

Public Class Methods

connection() click to toggle source
# File lib/ruby-pg-extras.rb, line 112
def self.connection
  database_uri = URI.parse(database_url)

  @_connection ||= PG.connect(
    dbname: database_uri.path[1..-1],
    host: database_uri.host,
    port: database_uri.port,
    user: database_uri.user,
    password: database_uri.password
  )
end
database_url() click to toggle source
# File lib/ruby-pg-extras.rb, line 128
def self.database_url
  @@database_url || ENV.fetch("DATABASE_URL")
end
database_url=(value) click to toggle source
# File lib/ruby-pg-extras.rb, line 124
def self.database_url=(value)
  @@database_url = value
end
description_for(query_name:) click to toggle source
# File lib/ruby-pg-extras.rb, line 94
def self.description_for(query_name:)
  first_line = File.open(
    sql_path_for(query_name: query_name)
  ) { |f| f.readline }

  first_line[/\/\*(.*?)\*\//m, 1].strip
end
display_result(result, title:, in_format:) click to toggle source
# File lib/ruby-pg-extras.rb, line 69
def self.display_result(result, title:, in_format:)
  case in_format
  when :array
    result.values
  when :hash
    result.to_a
  when :raw
    result
  when :display_table
    headings = if result.count > 0
      result[0].keys
    else
      ["No results"]
    end

    puts Terminal::Table.new(
      title: title,
      headings: headings,
      rows: result.values
    )
  else
    raise "Invalid in_format option"
  end
end
run_query(query_name:, in_format:, args: {}) click to toggle source
# File lib/ruby-pg-extras.rb, line 44
def self.run_query(query_name:, in_format:, args: {})
  if %i(calls outliers).include?(query_name)
    pg_stat_statements_ver = RubyPGExtras.connection.exec("select installed_version from pg_available_extensions where name='pg_stat_statements'")
      .to_a[0].fetch("installed_version", nil)
    if pg_stat_statements_ver != nil
      if Gem::Version.new(pg_stat_statements_ver) < Gem::Version.new(NEW_PG_STAT_STATEMENTS)
        query_name = "#{query_name}_legacy".to_sym
      end
    end
  end

  sql = if (custom_args = DEFAULT_ARGS[query_name].merge(args)) != {}
    sql_for(query_name: query_name) % custom_args
  else
    sql_for(query_name: query_name)
  end
  result = connection.exec(sql)

  display_result(
    result,
    title: description_for(query_name: query_name),
    in_format: in_format
  )
end
sql_for(query_name:) click to toggle source
# File lib/ruby-pg-extras.rb, line 102
def self.sql_for(query_name:)
  File.read(
    sql_path_for(query_name: query_name)
  )
end
sql_path_for(query_name:) click to toggle source
# File lib/ruby-pg-extras.rb, line 108
def self.sql_path_for(query_name:)
  File.join(File.dirname(__FILE__), "/ruby-pg-extras/queries/#{query_name}.sql")
end