Module: ActiveRecord::ConnectionAdapters::DatabaseStatements
- Included in:
- AbstractAdapter
- Defined in:
- lib/active_record/connection_adapters/abstract/database_statements.rb
Instance Method Summary collapse
-
#add_limit!(sql, options) ⇒ Object
Alias for
add_limit_offset!
. -
#add_limit_offset!(sql, options) ⇒ Object
Appends
LIMIT
andOFFSET
options to an SQL statement, or some SQL fragment that has the same semantics as LIMIT and OFFSET. -
#add_lock!(sql, options) ⇒ Object
Appends a locking clause to an SQL statement.
-
#begin_db_transaction ⇒ Object
Begins the transaction (and turns off auto-committing).
- #case_sensitive_equality_operator ⇒ Object
-
#commit_db_transaction ⇒ Object
Commits the transaction (and turns on auto-committing).
- #default_sequence_name(table, column) ⇒ Object
-
#delete(sql, name = nil) ⇒ Object
Executes the delete statement and returns the number of rows affected.
- #empty_insert_statement(table_name) ⇒ Object
-
#execute(sql, name = nil) ⇒ Object
Executes the SQL statement in the context of this connection.
-
#insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil) ⇒ Object
Returns the last auto-generated ID from the affected table.
-
#insert_fixture(fixture, table_name) ⇒ Object
Inserts the given fixture into the table.
- #limited_update_conditions(where_sql, quoted_table_name, quoted_primary_key) ⇒ Object
-
#reset_sequence!(table, column, sequence = nil) ⇒ Object
Set the sequence to the max value of the table’s column.
-
#rollback_db_transaction ⇒ Object
Rolls back the transaction (and turns on auto-committing).
-
#select_all(sql, name = nil) ⇒ Object
Returns an array of record hashes with the column names as keys and column values as values.
-
#select_one(sql, name = nil) ⇒ Object
Returns a record hash with the column names as keys and column values as values.
-
#select_rows(sql, name = nil) ⇒ Object
Returns an array of arrays containing the field values.
-
#select_value(sql, name = nil) ⇒ Object
Returns a single value from a record.
-
#select_values(sql, name = nil) ⇒ Object
Returns an array of the values of the first column in a select: select_values(“SELECT id FROM companies LIMIT 3”) => [1,2,3].
-
#transaction(start_db_transaction = true) ⇒ Object
Wrap a block in a transaction.
-
#update(sql, name = nil) ⇒ Object
Executes the update statement and returns the number of rows affected.
Instance Method Details
#add_limit!(sql, options) ⇒ Object
Alias for add_limit_offset!
.
97 98 99 |
# File 'lib/active_record/connection_adapters/abstract/database_statements.rb', line 97 def add_limit!(sql, ) add_limit_offset!(sql, ) if end |
#add_limit_offset!(sql, options) ⇒ Object
Appends LIMIT
and OFFSET
options to an SQL statement, or some SQL fragment that has the same semantics as LIMIT and OFFSET.
options
must be a Hash which contains a :limit
option (required) and an :offset
option (optional).
This method modifies the sql
parameter.
Examples
add_limit_offset!('SELECT * FROM suppliers', {:limit => 10, :offset => 50})
generates
SELECT * FROM suppliers LIMIT 10 OFFSET 50
113 114 115 116 117 118 119 120 121 |
# File 'lib/active_record/connection_adapters/abstract/database_statements.rb', line 113 def add_limit_offset!(sql, ) if limit = [:limit] sql << " LIMIT #{sanitize_limit(limit)}" if offset = [:offset] sql << " OFFSET #{offset.to_i}" end end sql end |
#add_lock!(sql, options) ⇒ Object
Appends a locking clause to an SQL statement. This method modifies the sql
parameter.
# SELECT * FROM suppliers FOR UPDATE
add_lock! 'SELECT * FROM suppliers', :lock => true
add_lock! 'SELECT * FROM suppliers', :lock => ' FOR UPDATE'
128 129 130 131 132 133 |
# File 'lib/active_record/connection_adapters/abstract/database_statements.rb', line 128 def add_lock!(sql, ) case lock = [:lock] when true; sql << ' FOR UPDATE' when String; sql << " #{lock}" end end |
#begin_db_transaction ⇒ Object
Begins the transaction (and turns off auto-committing).
87 |
# File 'lib/active_record/connection_adapters/abstract/database_statements.rb', line 87 def begin_db_transaction() end |
#case_sensitive_equality_operator ⇒ Object
154 155 156 |
# File 'lib/active_record/connection_adapters/abstract/database_statements.rb', line 154 def case_sensitive_equality_operator "=" end |
#commit_db_transaction ⇒ Object
Commits the transaction (and turns on auto-committing).
90 |
# File 'lib/active_record/connection_adapters/abstract/database_statements.rb', line 90 def commit_db_transaction() end |
#default_sequence_name(table, column) ⇒ Object
135 136 137 |
# File 'lib/active_record/connection_adapters/abstract/database_statements.rb', line 135 def default_sequence_name(table, column) nil end |
#delete(sql, name = nil) ⇒ Object
Executes the delete statement and returns the number of rows affected.
53 54 55 |
# File 'lib/active_record/connection_adapters/abstract/database_statements.rb', line 53 def delete(sql, name = nil) delete_sql(sql, name) end |
#empty_insert_statement(table_name) ⇒ Object
150 151 152 |
# File 'lib/active_record/connection_adapters/abstract/database_statements.rb', line 150 def empty_insert_statement(table_name) "INSERT INTO #{quote_table_name(table_name)} VALUES(DEFAULT)" end |
#execute(sql, name = nil) ⇒ Object
Executes the SQL statement in the context of this connection.
38 39 40 |
# File 'lib/active_record/connection_adapters/abstract/database_statements.rb', line 38 def execute(sql, name = nil) raise NotImplementedError, "execute is an abstract method" end |
#insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil) ⇒ Object
Returns the last auto-generated ID from the affected table.
43 44 45 |
# File 'lib/active_record/connection_adapters/abstract/database_statements.rb', line 43 def insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil) insert_sql(sql, name, pk, id_value, sequence_name) end |
#insert_fixture(fixture, table_name) ⇒ Object
Inserts the given fixture into the table. Overridden in adapters that require something beyond a simple insert (eg. Oracle).
146 147 148 |
# File 'lib/active_record/connection_adapters/abstract/database_statements.rb', line 146 def insert_fixture(fixture, table_name) execute "INSERT INTO #{quote_table_name(table_name)} (#{fixture.key_list}) VALUES (#{fixture.value_list})", 'Fixture Insert' end |
#limited_update_conditions(where_sql, quoted_table_name, quoted_primary_key) ⇒ Object
158 159 160 |
# File 'lib/active_record/connection_adapters/abstract/database_statements.rb', line 158 def limited_update_conditions(where_sql, quoted_table_name, quoted_primary_key) "WHERE #{quoted_primary_key} IN (SELECT #{quoted_primary_key} FROM #{quoted_table_name} #{where_sql})" end |
#reset_sequence!(table, column, sequence = nil) ⇒ Object
Set the sequence to the max value of the table’s column.
140 141 142 |
# File 'lib/active_record/connection_adapters/abstract/database_statements.rb', line 140 def reset_sequence!(table, column, sequence = nil) # Do nothing by default. Implement for PostgreSQL, Oracle, ... end |
#rollback_db_transaction ⇒ Object
Rolls back the transaction (and turns on auto-committing). Must be done if the transaction block raises an exception or returns false.
94 |
# File 'lib/active_record/connection_adapters/abstract/database_statements.rb', line 94 def rollback_db_transaction() end |
#select_all(sql, name = nil) ⇒ Object
Returns an array of record hashes with the column names as keys and column values as values.
6 7 8 |
# File 'lib/active_record/connection_adapters/abstract/database_statements.rb', line 6 def select_all(sql, name = nil) select(sql, name) end |
#select_one(sql, name = nil) ⇒ Object
Returns a record hash with the column names as keys and column values as values.
12 13 14 15 |
# File 'lib/active_record/connection_adapters/abstract/database_statements.rb', line 12 def select_one(sql, name = nil) result = select_all(sql, name) result.first if result end |
#select_rows(sql, name = nil) ⇒ Object
Returns an array of arrays containing the field values. Order is the same as that returned by columns
.
33 34 35 |
# File 'lib/active_record/connection_adapters/abstract/database_statements.rb', line 33 def select_rows(sql, name = nil) raise NotImplementedError, "select_rows is an abstract method" end |
#select_value(sql, name = nil) ⇒ Object
Returns a single value from a record
18 19 20 21 22 |
# File 'lib/active_record/connection_adapters/abstract/database_statements.rb', line 18 def select_value(sql, name = nil) if result = select_one(sql, name) result.values.first end end |
#select_values(sql, name = nil) ⇒ Object
Returns an array of the values of the first column in a select:
select_values("SELECT id FROM companies LIMIT 3") => [1,2,3]
26 27 28 29 |
# File 'lib/active_record/connection_adapters/abstract/database_statements.rb', line 26 def select_values(sql, name = nil) result = select_rows(sql, name) result.map { |v| v[0] } end |
#transaction(start_db_transaction = true) ⇒ Object
Wrap a block in a transaction. Returns result of block.
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/active_record/connection_adapters/abstract/database_statements.rb', line 58 def transaction(start_db_transaction = true) transaction_open = false begin if block_given? if start_db_transaction begin_db_transaction transaction_open = true end yield end rescue Exception => database_transaction_rollback if transaction_open transaction_open = false rollback_db_transaction end raise unless database_transaction_rollback.is_a? ActiveRecord::Rollback end ensure if transaction_open begin commit_db_transaction rescue Exception => database_transaction_rollback rollback_db_transaction raise end end end |
#update(sql, name = nil) ⇒ Object
Executes the update statement and returns the number of rows affected.
48 49 50 |
# File 'lib/active_record/connection_adapters/abstract/database_statements.rb', line 48 def update(sql, name = nil) update_sql(sql, name) end |