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)

Parameters:

  • hashes (Array<Hash>)

    data we want to use for the query

Returns:

  • (String)

    condition usable in .where of an ActiveRecord relation



34
35
36
# 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_connectionActiveRecord::ConnectionAdapters::AbstractAdapter

Returns ActiveRecord connection.

Returns:

  • (ActiveRecord::ConnectionAdapters::AbstractAdapter)

    ActiveRecord connection



26
27
28
# 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) ⇒ String

Returns a type casted value in format needed by PostgreSQL

Parameters:

  • value (Object)

    value we want to quote

  • sql_type (String)

    PostgreSQL column type

Returns:

  • (String)

    type casted value in format needed by PostgreSQL



76
77
78
79
80
81
82
# 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) ⇒ 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.

Parameters:

  • connection (ActiveRecord::ConnectionAdapters::AbstractAdapter)

    ActiveRecord connection

  • value (Object)

    value we want to quote

  • name (Symbol) (defaults to: nil)

    name of the column

  • type_cast_for_pg (Boolean) (defaults to: nil)

    true if we want to also cast the quoted value

Returns:

  • (String)

    quoted and based on type_cast_for_pg param also casted value



46
47
48
49
50
51
52
53
54
55
56
# 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) ⇒ String

Quotes and type casts the value.

Parameters:

  • connection (ActiveRecord::ConnectionAdapters::AbstractAdapter)

    ActiveRecord connection

  • value (Object)

    value we want to quote

  • name (Symbol)

    name of the column

Returns:

  • (String)

    quoted and casted value



64
65
66
67
68
69
# 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) ⇒ Object

Returns quoted column name

Parameters:

  • key (Symbol)

    key that is column name



21
22
23
# File 'lib/inventory_refresh/save_collection/saver/sql_helper.rb', line 21

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