Class: ActiveRecord::ConnectionAdapters::SQLite3Adapter

Inherits:
Object
  • Object
show all
Defined in:
lib/composite_primary_keys/connection_adapters/sqlite3_adapter.rb

Instance Method Summary collapse

Instance Method Details

#join_to_update(update, select, key) ⇒ Object Also known as: join_to_delete



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/composite_primary_keys/connection_adapters/sqlite3_adapter.rb', line 4

def join_to_update(update, select, key)
  if key.is_a?(::CompositePrimaryKeys::CompositeKeys)
    subselect = subquery_for(key, select)
    subselect_aliased = Arel::Nodes::TableAlias.new(subselect, 'cpk_inner')
    cpk_subselect = Arel::SelectManager.new(subselect_aliased)
    cpk_subselect.project('*')
    key.each do |a_key|
      where_expr = subselect_aliased[a_key.name].eq(update.ast.relation[a_key.name])
      cpk_subselect.where(where_expr)
    end
    where_clause = Arel::Nodes::SqlLiteral.new("EXISTS (#{cpk_subselect.to_sql})")
    update.where(where_clause)
  else
    super
  end
end