module InventoryRefresh::SaveCollection::Saver::SqlHelper

Public Instance Methods

build_multi_selection_query(hashes) click to toggle source

Builds a multiselection conditions like (table1.a = a1 AND table2.b = b1) OR (table1.a = a2 AND table2.b = b2)

@param hashes [Array<Hash>] data we want to use for the query @return [String] condition usable in .where of an ActiveRecord relation

# File lib/inventory_refresh/save_collection/saver/sql_helper.rb, line 34
def build_multi_selection_query(hashes)
  inventory_collection.build_multi_selection_condition(hashes, unique_index_columns)
end
get_connection() click to toggle source

@return [ActiveRecord::ConnectionAdapters::AbstractAdapter] ActiveRecord connection

# File lib/inventory_refresh/save_collection/saver/sql_helper.rb, line 26
def get_connection
  ActiveRecord::Base.connection
end
pg_type_cast(value, sql_type) click to toggle source

Returns a type casted value in format needed by PostgreSQL

@param value [Object] value we want to quote @param sql_type [String] PostgreSQL column type @return [String] type casted value in format needed by PostgreSQL

# File lib/inventory_refresh/save_collection/saver/sql_helper.rb, line 76
def pg_type_cast(value, sql_type)
  if sql_type.nil?
    value
  else
    "#{value}::#{sql_type}"
  end
end
quote(connection, value, name = nil, type_cast_for_pg = nil) click to toggle source

Quotes a value. For update query, the value also needs to be explicitly casted, which we can do by type_cast_for_pg param set to true.

@param connection [ActiveRecord::ConnectionAdapters::AbstractAdapter] ActiveRecord connection @param value [Object] value we want to quote @param name [Symbol] name of the column @param type_cast_for_pg [Boolean] true if we want to also cast the quoted value @return [String] quoted and based on type_cast_for_pg param also casted value

# File lib/inventory_refresh/save_collection/saver/sql_helper.rb, line 46
def quote(connection, value, name = nil, type_cast_for_pg = nil)
  # TODO(lsmola) needed only because UPDATE FROM VALUES needs a specific PG typecasting, remove when fixed in PG
  if type_cast_for_pg
    quote_and_pg_type_cast(connection, value, name)
  else
    connection.quote(value)
  end
rescue TypeError => e
  logger.error("Can't quote value: #{value}, of :#{name} and #{inventory_collection}")
  raise e
end
quote_and_pg_type_cast(connection, value, name) click to toggle source

Quotes and type casts the value.

@param connection [ActiveRecord::ConnectionAdapters::AbstractAdapter] ActiveRecord connection @param value [Object] value we want to quote @param name [Symbol] name of the column @return [String] quoted and casted value

# File lib/inventory_refresh/save_collection/saver/sql_helper.rb, line 64
def quote_and_pg_type_cast(connection, value, name)
  pg_type_cast(
    connection.quote(value),
    pg_types[name]
  )
end
quote_column_name(key) click to toggle source

Returns quoted column name @param key [Symbol] key that is column name @returns [String] quoted column name

# File lib/inventory_refresh/save_collection/saver/sql_helper.rb, line 21
def quote_column_name(key)
  get_connection.quote_column_name(key)
end