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