Module: ActiveRecord::Calculations

Defined in:
lib/datasource/adapters/active_record.rb

Instance Method Summary collapse

Instance Method Details

#pluck_hash(*column_names) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/datasource/adapters/active_record.rb', line 6

def pluck_hash(*column_names)
  column_names.map! do |column_name|
    if column_name.is_a?(Symbol) && attribute_alias?(column_name)
      attribute_alias(column_name)
    else
      column_name.to_s
    end
  end

  if has_include?(column_names.first)
    construct_relation_for_association_calculations.pluck(*column_names)
  else
    relation = spawn
    relation.select_values = column_names.map { |cn|
      columns_hash.key?(cn) ? arel_table[cn] : cn
    }
    result = klass.connection.select_all(relation.arel, nil, bind_values)
    columns = result.columns.map do |key|
      klass.column_types.fetch(key) {
        result.column_types.fetch(key) { result.identity_type }
      }
    end

    result.rows.map do |values|
      {}.tap do |hash|
        values.zip(columns, result.columns).each do |v|
          single_attr_hash = { v[2] => v[0] }
          hash[v[2]] = v[1].type_cast klass.initialize_attributes(single_attr_hash).values.first
        end
      end
    end
  end
end