Class: ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter

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

Instance Method Summary collapse

Instance Method Details

#subquery_for(key, select) ⇒ Object



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

def subquery_for(key, select)
  subsubselect = select.clone
  subsubselect.projections = [key]

  # Materialize subquery by adding distinct

  # to work with MySQL 5.7.6 which sets optimizer_switch='derived_merge=on'

  subsubselect.distinct unless select.limit || select.offset || select.orders.any?

  subselect = Arel::SelectManager.new(select.engine)

  # CPK

  #subselect.project Arel.sql(key.name)

  subselect.project Arel.sql(Array(key).map(&:name).join(', '))

  subselect.from subsubselect.as('__active_record_temp')
end