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
20
21
22
23
24
25
26
# File 'lib/composite_primary_keys/connection_adapters/abstract_mysql_adapter.rb', line 4

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

  # Materialize subquery by adding distinct
  # to work with MySQL 5.7.6 which sets optimizer_switch='derived_merge=on'
  subselect.distinct unless select.limit || select.offset || select.orders.any?

  # CPK
  if key.is_a?(Array)
    key_names = key.map(&:name).map {|key_name| Arel.sql(key_name)}
    Arel::SelectManager.new(subselect.as("__active_record_temp")).project(key_names)
  else
    key_name = quote_column_name(key.name)
    Arel::SelectManager.new(subselect.as("__active_record_temp")).project(Arel.sql(key_name))
  end

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

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