module CryptKeeper::Helper::SQL

Private Instance Methods

escape_and_execute_sql(query, new_transaction: false) click to toggle source

Private: Sanitize an sql query and then execute it.

query - the sql query new_transaction - if the query should run inside a new transaction

Returns the ActiveRecord response.

# File lib/crypt_keeper/helper.rb, line 12
def escape_and_execute_sql(query, new_transaction: false)
  query = ::ActiveRecord::Base.send :sanitize_sql_array, query

  # force binary encoding to avoid "invalid byte sequence in UTF-8" errors
  # when we send binary AES keys (f.ex) to the database
  query = query.b if query.respond_to?(:b)

  if CryptKeeper.silence_logs?
    ::ActiveRecord::Base.logger.silence do
      execute_sql(query, new_transaction: new_transaction)
    end
  else
    execute_sql(query, new_transaction: new_transaction)
  end
end
execute_sql(query, new_transaction: false) click to toggle source

Private: Executes the query.

query - the sql query new_transaction - if the query should run inside a new transaction

Returns an Array.

# File lib/crypt_keeper/helper.rb, line 34
def execute_sql(query, new_transaction: false)
  if new_transaction
    ::ActiveRecord::Base.transaction(requires_new: true) do
      ::ActiveRecord::Base.connection.execute(query).first
    end
  else
    ::ActiveRecord::Base.connection.execute(query).first
  end
end