27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/db2_query/core.rb', line 27
def query(*query_args)
if query_args.first.is_a?(Symbol)
query_name, body = query_args
body_lambda = if body.is_a?(Proc)
-> args { body.call(args << { query_name: query_name }) }
elsif body.is_a?(String)
definition = definitions.lookup_query(query_name, body.strip)
-> args { exec_query_result(definition, args) }
else
raise Db2Query::QueryMethodError.new
end
singleton_class.define_method(query_name) do |*args|
body_lambda.call(args)
end
elsif query_args.first.is_a?(String)
sql, args = [query_args.first.strip, query_args.drop(1)]
definition = Query.new.tap do |d|
d.define_sql(sql)
d.define_args(args)
end
connection.raw_query(definition.db2_spec_sql, definition.args)
else
raise Db2Query::Error, "Wrong query implementation"
end
end
|