class Polo::SqlTranslator

Public Class Methods

new(object, configuration = Configuration.new) click to toggle source
# File lib/polo/sql_translator.rb, line 9
def initialize(object, configuration = Configuration.new)
  @record = object
  @configuration = configuration

  case @configuration.adapter
  when :mysql
    @adapter = Polo::Adapters::MySQL.new
  when :postgres
    @adapter = Polo::Adapters::Postgres.new
  else
    raise "Unknown SQL adapter: #{@configuration.adapter}"
  end
end

Public Instance Methods

inserts() click to toggle source
# File lib/polo/sql_translator.rb, line 37
def inserts
  records.map do |record|
    raw_sql(record)
  end
end
records() click to toggle source
# File lib/polo/sql_translator.rb, line 33
def records
  Array.wrap(@record)
end
to_sql() click to toggle source
# File lib/polo/sql_translator.rb, line 23
def to_sql
  case @configuration.on_duplicate_strategy
  when :ignore
    @adapter.ignore_transform(inserts, records)
  when :override
    @adapter.on_duplicate_key_update(inserts, records)
  else inserts
  end
end

Private Instance Methods

raw_sql(record) click to toggle source

Internal: Generates an insert SQL statement for a given record

It will make use of the InsertManager class from the Arel gem to generate insert statements

# File lib/polo/sql_translator.rb, line 50
def raw_sql(record)
  record.class.arel_table.create_insert.tap do |insert_manager|
    insert_manager.insert(insert_values(record))
  end.to_sql
end