Class: Simple::SQL::Inserter

Inherits:
Object
  • Object
show all
Defined in:
lib/simple/sql/insert.rb

Constant Summary collapse

SQL =
::Simple::SQL
@@inserters =
{}

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(table_name:, columns:) ⇒ Inserter

  • table_name - the name of the table

  • columns - name of columns, as Array or Array



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/simple/sql/insert.rb', line 36

def initialize(table_name:, columns:)
  @columns = columns

  cols = []
  vals = []

  cols += columns
  vals += columns.each_with_index.map { |_, idx| "$#{idx + 1}" }

  timestamp_columns = SQL::Reflection.timestamp_columns(table_name) - columns.map(&:to_s)

  cols += timestamp_columns
  vals += timestamp_columns.map { "now()" }

  @sql = "INSERT INTO #{table_name} (#{cols.join(',')}) VALUES(#{vals.join(',')}) RETURNING id"
end

Class Method Details

.create(table_name:, columns:) ⇒ Object



28
29
30
# File 'lib/simple/sql/insert.rb', line 28

def self.create(table_name:, columns:)
  @@inserters[[table_name, columns]] ||= new(table_name: table_name, columns: columns)
end

Instance Method Details

#insert(records:) ⇒ Object



53
54
55
56
57
58
59
# File 'lib/simple/sql/insert.rb', line 53

def insert(records:)
  SQL.transaction do
    records.map do |record|
      SQL.ask @sql, *record.values_at(*@columns)
    end
  end
end