class Db2Query::Definitions

Attributes

types[RW]
types_map[RW]

Public Class Methods

new(types_map) click to toggle source
# File lib/db2_query/definitions.rb, line 7
def initialize(types_map)
  @types_map = types_map
  describe
  initialize_types
end

Public Instance Methods

describe() click to toggle source
# File lib/db2_query/definitions.rb, line 13
def describe
  raise Db2Query::Error, "Please describe query definitions at #{self.class.name}"
end
lookup(query_name) click to toggle source
# File lib/db2_query/definitions.rb, line 27
def lookup(query_name)
  queries.fetch(query_name)
rescue
  raise Db2Query::QueryDefinitionError.new(name, query_name)
end
lookup_query(*args) click to toggle source
# File lib/db2_query/definitions.rb, line 33
def lookup_query(*args)
  query_name, sql = query_definitions(args)
  lookup(query_name).tap do |query|
    query.define_sql(sql)
  end
end
queries() click to toggle source
# File lib/db2_query/definitions.rb, line 17
def queries
  @queries ||= {}
end
query_definition(query_name) { |definition| ... } click to toggle source
# File lib/db2_query/definitions.rb, line 21
def query_definition(query_name, &block)
  definition = Query.new(query_name)
  yield definition
  queries[query_name] = definition
end

Private Instance Methods

data_type_instance(column_definition) click to toggle source
# File lib/db2_query/definitions.rb, line 55
def data_type_instance(column_definition)
  data_type, options = column_definition
  klass = @types_map.fetch(data_type)
  new_data_type(klass, options)
rescue
  raise Db2Query::Error, "Not supported `#{data_type}` data type"
end
fetch_query_name(args) click to toggle source
# File lib/db2_query/definitions.rb, line 63
def fetch_query_name(args)
  placeholder = args.pop
  placeholder.fetch(:query_name)
rescue
  raise Db2Query::ImplementationError.new
end
initialize_types() click to toggle source
# File lib/db2_query/definitions.rb, line 41
def initialize_types
  queries.each do |query_name, definition|
    definition.columns.each do |column, col_def|
      definition.types.store(column, data_type_instance(col_def))
    end
  end
end
new_data_type(klass, options) click to toggle source
# File lib/db2_query/definitions.rb, line 49
def new_data_type(klass, options)
  options.nil? ? klass.new : klass.new(**options)
rescue Exception => e
  raise Db2Query::Error, e.message
end
query_definitions(args) click to toggle source
# File lib/db2_query/definitions.rb, line 70
def query_definitions(args)
  case args.first
  when Array
    query_name = fetch_query_name(args.first)
    [query_name, args.last]
  else args
  end
end