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
|