lib/simple/sql/reflection.rb in simple-sql-0.4.22 vs lib/simple/sql/reflection.rb in simple-sql-0.4.23
- old
+ new
@@ -44,10 +44,17 @@
SQL
records_by_attr(recs, :name)
end
def column_info(table_name)
+ @column_info ||= {}
+ @column_info[table_name] ||= _column_info(table_name)
+ end
+
+ private
+
+ def _column_info(table_name)
schema, table_name = parse_table_name(table_name)
recs = all <<~SQL, schema, table_name, into: Hash
SELECT
column_name AS name,
*
@@ -56,12 +63,10 @@
SQL
records_by_attr(recs, :column_name)
end
- private
-
def parse_table_name(table_name)
p1, p2 = table_name.split(".", 2)
if p2
[p1, p2]
else
@@ -72,9 +77,27 @@
def records_by_attr(records, attr)
records.inject({}) do |hsh, record|
record.reject! { |_k, v| v.nil? }
hsh.update record[attr] => OpenStruct.new(record)
end
+ end
+
+ public
+
+ def lookup_pg_class(oid)
+ @pg_classes ||= {}
+ @pg_classes[oid] ||= _lookup_pg_class(oid)
+ end
+
+ private
+
+ def _lookup_pg_class(oid)
+ ::Simple::SQL.ask <<~SQL, oid
+ SELECT nspname AS schema, relname AS host_table
+ FROM pg_class
+ JOIN pg_namespace ON pg_namespace.oid=pg_class.relnamespace
+ WHERE pg_class.oid=$1
+ SQL
end
end
end
end