Class: Simple::SQL::Connection::Reflection
- Inherits:
-
Object
- Object
- Simple::SQL::Connection::Reflection
- Defined in:
- lib/simple/sql/connection/reflection.rb
Constant Summary collapse
- TIMESTAMP_COLUMN_NAMES =
%w(inserted_at created_at updated_at)
Instance Method Summary collapse
- #column_info(table_name) ⇒ Object
-
#column_types(table_name) ⇒ Object
returns a Hash of column_name => column_type.
- #columns(table_name) ⇒ Object
-
#initialize(connection) ⇒ Reflection
constructor
A new instance of Reflection.
- #looked_up_pg_classes ⇒ Object
- #lookup_pg_class(oid) ⇒ Object
- #primary_key_column(table_name) ⇒ Object
- #primary_key_columns(table_name) ⇒ Object
- #table_info(schema: "public") ⇒ Object
- #tables(schema: "public") ⇒ Object
-
#timestamp_columns(table_name) ⇒ Object
timestamp_columns are columns that will be set automatically after inserting or updating a record.
Constructor Details
#initialize(connection) ⇒ Reflection
Returns a new instance of Reflection.
15 16 17 |
# File 'lib/simple/sql/connection/reflection.rb', line 15 def initialize(connection) @connection = connection end |
Instance Method Details
#column_info(table_name) ⇒ Object
72 73 74 75 |
# File 'lib/simple/sql/connection/reflection.rb', line 72 def column_info(table_name) @column_info ||= {} @column_info[table_name] ||= _column_info(table_name) end |
#column_types(table_name) ⇒ Object
returns a Hash of column_name => column_type. Names are available both as Symbol and as String.
79 80 81 82 |
# File 'lib/simple/sql/connection/reflection.rb', line 79 def column_types(table_name) @column_types ||= {} @column_types[table_name] ||= _column_types(table_name) end |
#columns(table_name) ⇒ Object
68 69 70 |
# File 'lib/simple/sql/connection/reflection.rb', line 68 def columns(table_name) column_info(table_name).keys end |
#looked_up_pg_classes ⇒ Object
133 134 135 |
# File 'lib/simple/sql/connection/reflection.rb', line 133 def looked_up_pg_classes @looked_up_pg_classes ||= Hash.new { |hsh, key| hsh[key] = _lookup_pg_class(key) } end |
#lookup_pg_class(oid) ⇒ Object
137 138 139 |
# File 'lib/simple/sql/connection/reflection.rb', line 137 def lookup_pg_class(oid) looked_up_pg_classes[oid] end |
#primary_key_column(table_name) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/simple/sql/connection/reflection.rb', line 23 def primary_key_column(table_name) @primary_key_column ||= {} @primary_key_column[table_name] ||= begin pk_column, other = primary_key_columns(table_name) raise "#{table_name}: No support for combined primary keys" if other raise "#{table_name}: No primary key" if pk_column.nil? pk_column end end |
#primary_key_columns(table_name) ⇒ Object
35 36 37 38 |
# File 'lib/simple/sql/connection/reflection.rb', line 35 def primary_key_columns(table_name) @primary_key_columns ||= {} @primary_key_columns[table_name] ||= _primary_key_columns(table_name) end |
#table_info(schema: "public") ⇒ Object
84 85 86 87 88 89 90 91 |
# File 'lib/simple/sql/connection/reflection.rb', line 84 def table_info(schema: "public") recs = @connection.all " SELECT table_schema || '.' || table_name AS name, *\n FROM information_schema.tables\n WHERE table_schema=$1\n SQL\n records_by_attr(recs, :name)\nend\n", schema, into: Hash |
#tables(schema: "public") ⇒ Object
19 20 21 |
# File 'lib/simple/sql/connection/reflection.rb', line 19 def tables(schema: "public") table_info(schema: schema).keys end |
#timestamp_columns(table_name) ⇒ Object
timestamp_columns are columns that will be set automatically after inserting or updating a record. This includes:
-
inserted_at (for Ecto)
-
created_at (for ActiveRecord)
-
updated_at (for Ecto and ActiveRecord)
64 65 66 |
# File 'lib/simple/sql/connection/reflection.rb', line 64 def (table_name) columns(table_name) & TIMESTAMP_COLUMN_NAMES end |