class SqlQueryExecutor::Query::Normalizers::OriginNormalizer

Constants

BINDING_OPERATORS
OPERATORS

Public Class Methods

execute(query) click to toggle source
# File lib/sql_query_executor/query/normalizers/origin_normalizer.rb, line 18
def self.execute(query)
  query_array = []

  query.each do |key, value|
    if value.is_a?(Array)
      query_array << hash_with_array_value(key, value)
    else
      query_array << normal_hash(key, value)
    end
  end


  query_array.join(" and ").gsub('!=', '<>')
end

Private Class Methods

hash_with_array_value(key, value) click to toggle source
# File lib/sql_query_executor/query/normalizers/origin_normalizer.rb, line 34
def self.hash_with_array_value(key, value)
  if BINDING_OPERATORS.include?(key)
    key = key.gsub('$', '')
    queries = []

    value.each do |hash|
      queries << execute(hash)
    end

    "(#{queries.join(" #{key.to_s} ")})"
  else
    value = value.first.is_a?(Numeric) ? value : value.map{ |v| "'#{v}'" }
    "#{key} in (#{value.join(',')})"
  end
end
normal_hash(key, value) click to toggle source
# File lib/sql_query_executor/query/normalizers/origin_normalizer.rb, line 50
def self.normal_hash(key, value)
  operator = '='

  if value.is_a?(Hash)
    operator = OPERATORS[value.keys.first] || operator

    value = convert_param(value.values.first)
  end

  value = convert_param(value)
  value.nil? ? "#{key} is null" : "#{key} #{operator} #{value}"
end