# File lib/baza/sql_queries/mysql_upsert_duplicate_key.rb, line 50 def primary_key_column_name @primary_key_column_name ||= table.columns(primarykey: true).first.name end
class Baza::SqlQueries::MysqlUpsertDuplicateKey
Public Class Methods
new(args)
click to toggle source
# File lib/baza/sql_queries/mysql_upsert_duplicate_key.rb, line 2 def initialize(args) @db = args.fetch(:db) @table_name = args.fetch(:table_name) @updates = StringCases.stringify_keys(args.fetch(:updates)) @terms = StringCases.stringify_keys(args.fetch(:terms)) @buffer = args[:buffer] @return_id = args[:return_id] end
Public Instance Methods
execute()
click to toggle source
# File lib/baza/sql_queries/mysql_upsert_duplicate_key.rb, line 31 def execute if @buffer @buffer.query(to_sql) else @db.query(to_sql) return @db.query(last_insert_sql).fetch.fetch(:id).to_i if @return_id end end
to_sql()
click to toggle source
# File lib/baza/sql_queries/mysql_upsert_duplicate_key.rb, line 11 def to_sql sql = insert_sql sql << " ON DUPLICATE KEY UPDATE" first = true if @return_id sql << " #{@db.quote_column(primary_key_column_name)} = LAST_INSERT_ID(#{@db.quote_column(primary_key_column_name)})" first = false end @updates.each do |key, value| sql << "," unless first first = false if first sql << " #{@db.quote_column(key)} = #{@db.quote_value(value)}" end sql end
Private Instance Methods
insert_sql()
click to toggle source
# File lib/baza/sql_queries/mysql_upsert_duplicate_key.rb, line 42 def insert_sql @db.insert(@table_name, @updates.merge(@terms), return_sql: true) end
last_insert_sql()
click to toggle source
# File lib/baza/sql_queries/mysql_upsert_duplicate_key.rb, line 54 def last_insert_sql "SELECT LAST_INSERT_ID() AS #{@db.quote_column("id")} FROM #{@db.quote_table(@table_name)}" end
primary_key_column_name()
click to toggle source
table()
click to toggle source
# File lib/baza/sql_queries/mysql_upsert_duplicate_key.rb, line 46 def table @table ||= @db.tables[@table_name.to_s] end