class Upsert::MergeFunction::Mysql2_Client

@private

Public Instance Methods

execute(row) click to toggle source
# File lib/upsert/merge_function/Mysql2_Client.rb, line 14
def execute(row)
  first_try = true
  begin
    connection.execute sql(row)
  rescue Mysql2::Error => e
    if e.message =~ /PROCEDURE.*does not exist/i
      if first_try
        Upsert.logger.info %{[upsert] Function #{name.inspect} went missing, trying to recreate}
        first_try = false
        create!
        retry
      else
        Upsert.logger.info %{[upsert] Failed to create function #{name.inspect} for some reason}
        raise e
      end
    else
      raise e
    end
  end
end
sql(row) click to toggle source
# File lib/upsert/merge_function/Mysql2_Client.rb, line 9
def sql(row)
  quoted_params = (row.selector.values + row.setter.values).map { |v| connection.quote_value v }
  %{CALL #{name}(#{quoted_params.join(', ')})}
end