Module: ActiveRecord::ConnectionAdapters::Duckdb::DatabaseStatementsRails72
- Included in:
- ActiveRecord::ConnectionAdapters::DuckdbAdapter
- Defined in:
- lib/active_record/connection_adapters/duckdb/database_statements_rails72.rb
Instance Method Summary collapse
-
#exec_delete(sql, name = nil, binds = []) ⇒ Integer
(also: #exec_update)
Executes a DELETE statement and returns the number of affected rows.
-
#internal_exec_query(sql, name = 'SQL', binds = [], prepare: false, async: false, allow_retry: false) ⇒ ActiveRecord::Result
Executes a query and returns an ActiveRecord::Result.
Instance Method Details
#exec_delete(sql, name = nil, binds = []) ⇒ Integer Also known as: exec_update
Executes a DELETE statement and returns the number of affected rows. Rails 7.2's base class returns ActiveRecord::Result, but we need an integer. DuckDB's DELETE returns the count in the result set as rows[0].
45 46 47 48 |
# File 'lib/active_record/connection_adapters/duckdb/database_statements_rails72.rb', line 45 def exec_delete(sql, name = nil, binds = []) result = internal_exec_query(sql, name, binds) result.rows.first&.first || 0 end |
#internal_exec_query(sql, name = 'SQL', binds = [], prepare: false, async: false, allow_retry: false) ⇒ ActiveRecord::Result
Executes a query and returns an ActiveRecord::Result. Required for Rails 7.2 where the base class raises NotImplementedError.
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/active_record/connection_adapters/duckdb/database_statements_rails72.rb', line 20 def internal_exec_query(sql, name = 'SQL', binds = [], prepare: false, async: false, allow_retry: false) # Check for write queries on read-only connections (replica support) ensure_write_query_allowed(sql) casted_binds = type_casted_binds(binds) log(sql, name, binds, casted_binds, async:) do with_raw_connection(allow_retry:) do |conn| result = if casted_binds.empty? conn.query(sql) else conn.query(sql, *casted_binds) end cast_result(result) end end end |