Method: Db2Query::Core::ClassMethods#query

Defined in:
lib/db2_query/core.rb

#query(*query_args) ⇒ Object Also known as: define



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