Module: Sequel::Postgres::AdapterMethods
- Included in:
- Adapter
- Defined in:
- lib/sequel_core/adapters/shared/postgres.rb
Overview
Methods shared by adapter/connection instances.
Constant Summary collapse
- SELECT_CURRVAL =
"SELECT currval('%s')".freeze
- SELECT_CUSTOM_SEQUENCE =
<<-end_sql SELECT CASE WHEN split_part(def.adsrc, '''', 2) ~ '.' THEN substr(split_part(def.adsrc, '''', 2), strpos(split_part(def.adsrc, '''', 2), '.')+1) ELSE split_part(def.adsrc, '''', 2) END FROM pg_class t JOIN pg_namespace name ON (t.relnamespace = name.oid) JOIN pg_attribute attr ON (t.oid = attrelid) JOIN pg_attrdef def ON (adrelid = attrelid AND adnum = attnum) JOIN pg_constraint cons ON (conrelid = adrelid AND adnum = conkey[1]) WHERE t.oid = '%s'::regclass AND cons.contype = 'p' AND def.adsrc ~* 'nextval' end_sql
- SELECT_PK =
<<-end_sql SELECT pg_attribute.attname FROM pg_class, pg_attribute, pg_index WHERE pg_class.oid = pg_attribute.attrelid AND pg_class.oid = pg_index.indrelid AND pg_index.indkey[0] = pg_attribute.attnum AND pg_index.indisprimary = 't' AND pg_class.relname = '%s' end_sql
- SELECT_SERIAL_SEQUENCE =
<<-end_sql SELECT seq.relname FROM pg_class seq, pg_attribute attr, pg_depend dep, pg_namespace name, pg_constraint cons WHERE seq.oid = dep.objid AND seq.relnamespace = name.oid AND seq.relkind = 'S' AND attr.attrelid = dep.refobjid AND attr.attnum = dep.refobjsubid AND attr.attrelid = cons.conrelid AND attr.attnum = cons.conkey[1] AND cons.contype = 'p' AND dep.refobjid = '%s'::regclass end_sql
Instance Attribute Summary collapse
-
#db ⇒ Object
writeonly
Sets the attribute db.
-
#transaction_depth ⇒ Object
Depth of the current transaction on this connection, used to implement multi-level transactions with savepoints.
Instance Method Summary collapse
-
#last_insert_id(sequence) ⇒ Object
Get the last inserted value for the given sequence.
-
#primary_key(table) ⇒ Object
Get the primary key for the given table.
-
#sequence(table) ⇒ Object
Get the primary key and sequence for the given table.
Instance Attribute Details
#db=(value) ⇒ Object (writeonly)
Sets the attribute db
9 10 11 |
# File 'lib/sequel_core/adapters/shared/postgres.rb', line 9 def db=(value) @db = value end |
#transaction_depth ⇒ Object
Depth of the current transaction on this connection, used to implement multi-level transactions with savepoints.
54 55 56 |
# File 'lib/sequel_core/adapters/shared/postgres.rb', line 54 def transaction_depth @transaction_depth end |
Instance Method Details
#last_insert_id(sequence) ⇒ Object
Get the last inserted value for the given sequence.
57 58 59 60 61 62 63 64 |
# File 'lib/sequel_core/adapters/shared/postgres.rb', line 57 def last_insert_id(sequence) sql = SELECT_CURRVAL % sequence @db.log_info(sql) execute(sql) do |r| val = single_value(r) return val.to_i if val end end |
#primary_key(table) ⇒ Object
Get the primary key for the given table.
83 84 85 86 87 88 89 |
# File 'lib/sequel_core/adapters/shared/postgres.rb', line 83 def primary_key(table) sql = SELECT_PK % table @db.log_info(sql) execute(sql) do |r| return single_value(r) end end |
#sequence(table) ⇒ Object
Get the primary key and sequence for the given table.
67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/sequel_core/adapters/shared/postgres.rb', line 67 def sequence(table) sql = SELECT_SERIAL_SEQUENCE % table @db.log_info(sql) execute(sql) do |r| seq = single_value(r) return seq if seq end sql = SELECT_CUSTOM_SEQUENCE % table @db.log_info(sql) execute(sql) do |r| return single_value(r) end end |