Module: InventoryRefresh::SaveCollection::Saver::SqlHelper

Extended by:
ActiveSupport::Concern
Includes:
Logging
Included in:
Base
Defined in:
lib/inventory_refresh/save_collection/saver/sql_helper.rb

Instance Method Summary collapse

Methods included from Logging

#logger

Instance Method Details

#build_multi_selection_query(hashes) ⇒ String

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



37
38
39
# File 'lib/inventory_refresh/save_collection/saver/sql_helper.rb', line 37

def build_multi_selection_query(hashes)
  inventory_collection.build_multi_selection_condition(hashes, unique_index_columns)
end

#get_connectionActiveRecord::ConnectionAdapters::AbstractAdapter



29
30
31
# File 'lib/inventory_refresh/save_collection/saver/sql_helper.rb', line 29

def get_connection
  ActiveRecord::Base.connection
end

#pg_type_cast(value, sql_type) ⇒ String

Returns a type casted value in format needed by PostgreSQL



79
80
81
82
83
84
85
# File 'lib/inventory_refresh/save_collection/saver/sql_helper.rb', line 79

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) ⇒ String

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.



49
50
51
52
53
54
55
56
57
58
59
# File 'lib/inventory_refresh/save_collection/saver/sql_helper.rb', line 49

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) ⇒ String

Quotes and type casts the value.



67
68
69
70
71
72
# File 'lib/inventory_refresh/save_collection/saver/sql_helper.rb', line 67

def quote_and_pg_type_cast(connection, value, name)
  pg_type_cast(
    connection.quote(value),
    pg_types[name]
  )
end

#quote_column_name(key) ⇒ Object

Returns quoted column name



24
25
26
# File 'lib/inventory_refresh/save_collection/saver/sql_helper.rb', line 24

def quote_column_name(key)
  get_connection.quote_column_name(key)
end