class ROM::SQL::Commands::Create

SQL create command

@api public

Public Instance Methods

execute(tuples) click to toggle source

Inserts provided tuples into the database table

@api public

# File lib/rom/sql/commands/create.rb, line 24
def execute(tuples)
  insert_tuples = with_input_tuples(tuples) do |tuple|
    attributes = input[tuple]
    attributes.to_h
  end

  if insert_tuples.length > 1
    multi_insert(insert_tuples)
  else
    insert(insert_tuples)
  end
end

Private Instance Methods

finalize(tuples, *) click to toggle source

@api private

# File lib/rom/sql/commands/create.rb, line 40
def finalize(tuples, *)
  tuples.map { |t| relation.output_schema[t] }
end
insert(tuples) click to toggle source

Executes insert statement and returns inserted tuples

@api private

# File lib/rom/sql/commands/create.rb, line 47
def insert(tuples)
  pks = tuples.map { |tuple| relation.insert(tuple) }
  relation.where(relation.primary_key => pks).to_a
end
multi_insert(tuples) click to toggle source

Executes multi_insert statement and returns inserted tuples

@api private

# File lib/rom/sql/commands/create.rb, line 55
def multi_insert(tuples)
  pks = relation.multi_insert(tuples, return: :primary_key)
  relation.where(relation.primary_key => pks).to_a
end
with_input_tuples(tuples) { |tuple| ... } click to toggle source

Yields tuples for insertion or return an enumerator

@api private

# File lib/rom/sql/commands/create.rb, line 63
def with_input_tuples(tuples)
  input_tuples = Array([tuples]).flatten(1).map
  return input_tuples unless block_given?
  input_tuples.each { |tuple| yield(tuple) }
end