Sha256: 0fd7599e7023bd60488e3bae9e892efb5241488ef15900644d1ff239fa110861
Contents?: true
Size: 1.37 KB
Versions: 1
Compression:
Stored size: 1.37 KB
Contents
# rubocop:disable Metrics/MethodLength module Simple module SQL module Reflection extend self extend Forwardable delegate [:ask, :all, :records, :record] => ::Simple::SQL def tables(schema: "public") select = if schema == "public" "table_name AS name, *" else "table_schema || '.' || table_name AS name, *" end records = ::Simple::SQL.records <<~SQL, schema SELECT #{select} FROM information_schema.tables WHERE table_schema=$1 SQL records_by_attr(records, :name) end def columns(table_name) schema, table_name = parse_table_name(table_name) records = ::Simple::SQL.records <<~SQL, schema, table_name SELECT column_name AS name, * FROM information_schema.columns WHERE table_schema=$1 AND table_name=$2 SQL records_by_attr(records, :column_name) end private def parse_table_name(table_name) p1, p2 = table_name.split(".", 2) if p2 [p1, p2] else ["public", p1] end end def records_by_attr(records, attr) records.inject({}) do |hsh, record| hsh.update record[attr] => OpenStruct.new(record) end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
simple-sql-0.2.7 | lib/simple/sql/reflection.rb |