class MetadataExtractor

Public Class Methods

new(db_connection) click to toggle source
# File lib/metadata_extractor.rb, line 3
def initialize(db_connection)
  @db_connection = db_connection
end

Public Instance Methods

metadata() click to toggle source
# File lib/metadata_extractor.rb, line 7
def metadata
  {:schema => schemas, :db_name => db_name}
end

Private Instance Methods

oid(schema_name, table_name) click to toggle source
# File lib/metadata_extractor.rb, line 39
  def oid(schema_name, table_name)
    @db_connection.query("
select
  pg_class.oid as table_oid
  from pg_class
  join pg_namespace on pg_namespace.oid = pg_class.relnamespace
  where (relkind = 'r') and pg_namespace.nspname = '#{schema_name}' and pg_class.relname = '#{table_name}' ").to_a.map{|row| row['table_oid'] }.first
  end
schema_names() click to toggle source
# File lib/metadata_extractor.rb, line 22
def schema_names
  @db_connection.query("show search_path;").to_a.first['search_path'].split(/,/).delete_if{|value| value.match(/\$/) }
end
schemas() click to toggle source
# File lib/metadata_extractor.rb, line 13
def schemas
  toReturn = {}
  schema_names.each do |schema_name|
    toReturn[schema_name] = tables(schema_name)
  end
  
  toReturn
end
table(schema_name, table_name) click to toggle source
# File lib/metadata_extractor.rb, line 35
def table(schema_name, table_name) 
  {:oid => oid(schema_name, table_name), :columns => columns(schema_name, table_name)}
end
table_names(schema_name) click to toggle source
# File lib/metadata_extractor.rb, line 48
  def table_names(schema_name)
    @db_connection.query("
select
  pg_class.relname as table_name
  from pg_class
  join pg_namespace on pg_namespace.oid = pg_class.relnamespace
  where (relkind = 'r') and pg_namespace.nspname = '#{schema_name}' ").to_a.map{|row| row['table_name'] }
  end
tables(schema_name) click to toggle source
# File lib/metadata_extractor.rb, line 26
def tables(schema_name)
  to_return = {}
  table_names(schema_name).each do |table_name|
    to_return[table_name] = table(schema_name,table_name)
  end
  
  to_return
end