66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
# File 'lib/nativepluck.rb', line 66
def nativepluck(*columns, **opts)
raise ArgumentError.new('No columns to pluck were provided') if columns.size == 0
begin
Nativepluck.set_pg_native_casters
sql = "
SELECT #{columns.join(',')}
FROM #{self.table_name}
#{"GROUP BY #{opts[:group].zip.map { |i| i.join(' ') }.join(',')}" if opts[:group]}
#{"ORDER BY #{opts[:order].zip.map { |i| i.join(' ') }.join(',')}" if opts[:order]}
#{"LIMIT #{opts[:limit]}" if opts[:limit]}
#{"OFFSET #{opts[:offset]}" if opts[:offset]}
"
results = ActiveRecord::Base.connection.raw_connection.async_exec(sql)
puts "#{__method__} sql = #{sql}" if opts[:verbose]
results.nfields == 1 ? out = results.column_values(0) : out = results.values
ensure
results.try(:clear)
Nativepluck.return_original_casters
end
return out
end
|