Module: ActiveRecord::Returning
- Defined in:
- lib/activerecord/returning.rb,
lib/activerecord/returning/errors.rb,
lib/activerecord/returning/version.rb,
lib/activerecord/returning/querying.rb,
lib/activerecord/returning/statement.rb,
lib/activerecord/returning/relation_methods.rb
Overview
UPDATE ... RETURNING and DELETE ... RETURNING for ActiveRecord::Relation.
Defined Under Namespace
Modules: Querying, RelationMethods Classes: Error, Statement, UnsupportedAdapter
Constant Summary collapse
- VERSION =
"0.1.0"
Class Method Summary collapse
-
.supported?(connection) ⇒ Boolean
Can this connection run UPDATE/DELETE ...
Class Method Details
.supported?(connection) ⇒ Boolean
Can this connection run UPDATE/DELETE ... RETURNING?
supports_update_returning? is the precise question, but it only exists on newer Rails. supports_insert_returning? is the closest stand-in, with one trap: MariaDB answers true to it (it has INSERT ... RETURNING since 10.5) while having no UPDATE ... RETURNING at all, so the MySQL family is ruled out explicitly.
The SQLite branch is for Rails 7.0, whose SQLite3 adapter predates the capability methods even though the database itself supports RETURNING. Version compares itself to a version string by parts; a plain string compare would read "3.4.0" as newer than "3.35.0".
25 26 27 28 29 30 31 32 33 |
# File 'lib/activerecord/returning.rb', line 25 def self.supported?(connection) return connection.supports_update_returning? if connection.respond_to?(:supports_update_returning?) adapter = connection.adapter_name.to_s return false if adapter.match?(/mysql|trilogy|mariadb/i) return true if connection.supports_insert_returning? adapter.match?(/sqlite/i) && connection.database_version >= "3.35.0" end |