method
prepare_update_statement
v8.1.1 -
Show latest stable
-
0 notes -
Class: SQLite
- 1.0.0
- 1.1.6
- 1.2.6
- 2.0.3
- 2.1.0
- 2.2.1
- 2.3.8
- 3.0.0
- 3.0.9
- 3.1.0
- 3.2.1
- 3.2.8
- 3.2.13
- 4.0.2
- 4.1.8
- 4.2.1
- 4.2.7
- 4.2.9
- 5.0.0.1
- 5.1.7
- 5.2.3
- 6.0.0
- 6.1.3.1
- 6.1.7.7
- 7.0.0
- 7.1.3.2
- 7.1.3.4
- 7.2.3
- 8.0.0
- 8.1.1 (0)
- What's this?
prepare_update_statement(o)
private
Hide source
# File activerecord/lib/arel/visitors/sqlite.rb, line 35 def prepare_update_statement(o) # Sqlite need to be built with the SQLITE_ENABLE_UPDATE_DELETE_LIMIT compile-time option # to support LIMIT/OFFSET/ORDER in UPDATE and DELETE statements. if o.key && has_join_sources?(o) && !has_group_by_and_having?(o) && !has_limit_or_offset_or_orders?(o) # Join clauses cannot reference the target table, so alias the # updated table, place the entire relation in the FROM clause, and # add a self-join (which requires the primary key) stmt = o.clone stmt.relation, stmt.wheres = o.relation.clone, o.wheres.clone stmt.relation.right = [stmt.relation.left, *stmt.relation.right] stmt.relation.left = stmt.relation.left.alias("__active_record_update_alias") Array.wrap(o.key).each do |key| stmt.wheres << key.eq(stmt.relation.left[key.name]) end stmt else super end end

