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