class Db2Query::Query

Attributes

columns[R]
keys[R]
query_name[R]
sql[R]
types[R]

Public Class Methods

new(query_name = nil) click to toggle source
# File lib/db2_query/query.rb, line 9
def initialize(query_name = nil)
  @columns = {}
  @query_name = query_name
  @sql_statement = nil
  @types = {}
end

Public Instance Methods

column_id() click to toggle source
# File lib/db2_query/query.rb, line 60
def column_id
  columns.fetch(:id, nil)
end
data_type(key) click to toggle source
# File lib/db2_query/query.rb, line 29
def data_type(key)
  column = column_from_key(key)
  types.fetch(column.to_sym)
rescue
  raise Db2Query::Error, "No column #{column} found at query: #{query_name} definitions"
end
define_args(args) click to toggle source
# File lib/db2_query/query.rb, line 49
def define_args(args)
  class_eval { attr_accessor "args" }
  send("args=", raw_query_args(args))
end
define_sql(sql) click to toggle source
# File lib/db2_query/query.rb, line 16
def define_sql(sql)
  @keys ||= new_keys(sql)
  @sql ||= sql.tr("$", "")
end
exec_query_arguments(args) click to toggle source
# File lib/db2_query/query.rb, line 71
def exec_query_arguments(args)
  [db2_spec_sql, binds(args), validated_args(args)]
end
length() click to toggle source
# File lib/db2_query/query.rb, line 36
def length
  columns.length
end
map_column(name, args) click to toggle source
# File lib/db2_query/query.rb, line 21
def map_column(name, args)
  @columns[name] = args
end
method_missing(method_name, *args, &block) click to toggle source
# File lib/db2_query/query.rb, line 25
def method_missing(method_name, *args, &block)
  map_column(method_name, args)
end
raw_query_args(args) click to toggle source
# File lib/db2_query/query.rb, line 40
def raw_query_args(args)
  case args
  when Array, Hash
    validated_args(args)
  else
    args
  end
end
sorted_args(args) click to toggle source
# File lib/db2_query/query.rb, line 54
def sorted_args(args)
  keys.map.with_index do |key, index|
    serialized_arg(args.is_a?(Hash) ? args[key] : args[index], key)
  end
end
validate_result_columns(result_columns) click to toggle source
# File lib/db2_query/query.rb, line 64
def validate_result_columns(result_columns)
  res_cols, def_cols = [result_columns.length, length]
  if res_cols != def_cols
    raise Db2Query::ColumnError.new(def_cols, res_cols)
  end
end
validate_select_query() click to toggle source
# File lib/db2_query/query.rb, line 75
def validate_select_query
  if iud_sql?
    raise Db2Query::Error, "Fetch queries are used for select statement query only."
  end
end

Private Instance Methods

binds(args) click to toggle source
# File lib/db2_query/query.rb, line 101
def binds(args)
  keys.map.with_index do |key, index|
    new_bind(key, args.first.is_a?(Hash)? args.first[key] : args[index])
  end
end
column_from_key(key) click to toggle source
# File lib/db2_query/query.rb, line 93
def column_from_key(key)
  "#{key}".split(".").last.downcase
end
new_bind(key, arg) click to toggle source
# File lib/db2_query/query.rb, line 97
def new_bind(key, arg)
  [Bind.new(column_from_key(key), arg), arg]
end
new_keys(raw_sql) click to toggle source
# File lib/db2_query/query.rb, line 85
def new_keys(raw_sql)
  raw_sql.scan(/\$\S+/).map { |key| key.gsub!(/[$=,)]/, "").to_sym }
end
serialized_arg(arg, key) click to toggle source
# File lib/db2_query/query.rb, line 89
def serialized_arg(arg, key)
  query_name.nil? ? arg : data_type(key).serialize(arg)
end
validate_arguments(given, expected) click to toggle source
# File lib/db2_query/query.rb, line 107
def validate_arguments(given, expected)
  raise Db2Query::ArgumentError.new(given, expected) unless given == expected
end
validated_args(args) click to toggle source
# File lib/db2_query/query.rb, line 111
def validated_args(args)
  args = args.first.is_a?(Hash) ? args.first : args
  validate_arguments(args.length, keys.length)
  sorted_args(args)
end