class ViewData::PG::PrimaryKey::GetColumns
Public Class Methods
build(session: nil)
click to toggle source
# File lib/view_data/pg/primary_key/get_columns.rb, line 13 def self.build(session: nil) instance = new Session.configure(instance, session: session) ::Telemetry.configure(instance) instance end
call(table)
click to toggle source
# File lib/view_data/pg/primary_key/get_columns.rb, line 20 def self.call(table) instance = build() instance.(table) end
register_telemetry_sink(instance)
click to toggle source
# File lib/view_data/pg/primary_key/get_columns.rb, line 56 def self.register_telemetry_sink(instance) sink = Telemetry::Sink.new instance.telemetry.register(sink) sink end
Public Instance Methods
cache()
click to toggle source
# File lib/view_data/pg/primary_key/get_columns.rb, line 50 def cache @cache ||= Hash.new do |hash, table| hash[table] = query(table) end end
call(table)
click to toggle source
# File lib/view_data/pg/primary_key/get_columns.rb, line 25 def call(table) cache[table] end
query(table)
click to toggle source
# File lib/view_data/pg/primary_key/get_columns.rb, line 29 def query(table) result = session.execute(<<~SQL, [table]) SELECT TEXT(attr.attname) AS column_name FROM pg_index AS index JOIN pg_attribute AS attr ON attr.attrelid = index.indrelid AND attr.attnum = ANY(index.indkey) WHERE index.indrelid = $1::regclass AND index.indisprimary SQL columns = result.to_a.map do |hash| hash['column_name'] end telemetry.record(:columns_queried, Telemetry::Data.new(table, columns)) columns end