Module: Nativepluck::ClassMethods

Defined in:
lib/nativepluck.rb

Instance Method Summary collapse

Instance Method Details

#nativepluck(*columns, **opts) ⇒ Object

Raises:

  • (ArgumentError)


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