Class: DB::Model::Statement::Insert

Inherits:
Object
  • Object
show all
Defined in:
lib/db/model/statement/insert.rb

Instance Method Summary collapse

Constructor Details

#initialize(source, fields, values) ⇒ Insert

Returns a new instance of Insert.



27
28
29
30
31
# File 'lib/db/model/statement/insert.rb', line 27

def initialize(source, fields, values)
  @source = source
  @fields = fields
  @values = values
end

Instance Method Details

#call(context) ⇒ Object



49
50
51
52
53
54
55
56
57
58
# File 'lib/db/model/statement/insert.rb', line 49

def call(context)
  to_sql(context).call do |connection|
    result = connection.next_result
    keys = result.field_names.map(&:to_sym)
    
    result.each do |row|
      yield(keys.zip(row).to_h)
    end
  end
end

#to_a(context) ⇒ Object



60
61
62
63
64
65
66
67
68
69
# File 'lib/db/model/statement/insert.rb', line 60

def to_a(context)
  to_sql(context).call do |connection|
    result = connection.next_result
    keys = result.field_names.map(&:to_sym)
    
    result.map do |row|
      @source.new(context, keys.zip(row).to_h)
    end
  end
end

#to_sql(context) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/db/model/statement/insert.rb', line 33

def to_sql(context)
  statement = context.query("INSERT INTO")
  
  statement.identifier(@source.type)
  
  statement.clause("(")
  @fields.append_to(statement)
  statement.clause(") VALUES")
  
  @values.append_to(statement)
  
  statement.clause("RETURNING *")
  
  return statement
end