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