Sha256: 337f8d929c9f0e29dde797ec9a330273d8a5f86186376c60dd0ca349495a72e3

Contents?: true

Size: 913 Bytes

Versions: 4

Compression:

Stored size: 913 Bytes

Contents

module ActiveRecord
  module ConnectionAdapters
    class AbstractMysqlAdapter < AbstractAdapter
      # MySQL is too stupid to create a temporary table for use subquery, so we have
      # to give it some prompting in the form of a subsubquery. Ugh!
      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)

        # subselect.project Arel.sql(key.name)
        arel_table = select.engine.arel_table
        subselect.project *key.name.map{|x| arel_table[x]}
        subselect.from subsubselect.as('__active_record_temp')
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
composite_primary_keys-8.1.6 lib/composite_primary_keys/connection_adapters/abstract_mysql_adapter.rb
composite_primary_keys-8.1.5 lib/composite_primary_keys/connection_adapters/abstract_mysql_adapter.rb
composite_primary_keys-8.1.4 lib/composite_primary_keys/connection_adapters/abstract_mysql_adapter.rb
composite_primary_keys-8.1.3 lib/composite_primary_keys/connection_adapters/abstract_mysql_adapter.rb