Module: MultiInsert::QueryBuilder

Defined in:
lib/multi_insert/query_builder.rb

Class Method Summary collapse

Class Method Details

.insert(table, columns, values, opts = {}) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/multi_insert/query_builder.rb', line 5

def self.insert(table, columns, values, opts = {})
  ar = ActiveRecord::Base.connection

  opts.merge!({time: true})

  now = Time.now.to_s(:db) if opts[:time]
  table = ar.quote_table_name(table.to_s)

  # Format columns
  columns = columns + [:created_at, :updated_at] if opts[:time]
  columns = columns.map!{|c| ar.quote_column_name(c.to_s)}
  columns = join_params(columns)

  # Format values
  if opts[:time]
    values = values.map{|v| v + [now, now]}
  end
  values = values.map{|v| join_params(v.map{|vv| ar.quote(vv.to_s)})}.join(',')

  "INSERT INTO #{table} #{columns} VALUES #{values}"
end

.join_params(params) ⇒ Object



32
33
34
# File 'lib/multi_insert/query_builder.rb', line 32

def self.join_params(params)
  "(" + params.join(',') + ")"
end

.returning(columns) ⇒ Object



27
28
29
30
# File 'lib/multi_insert/query_builder.rb', line 27

def self.returning(columns)
  columns = columns.map{|c| ActiveRecord::Base.connection.quote_column_name(c.to_s)}.join(',')
  "RETURNING #{columns}"
end