Module: Olaf::QueryDefinition

Defined in:
lib/olaf/query_definition.rb,
lib/olaf/query_definition/class_methods.rb

Defined Under Namespace

Modules: ClassMethods

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#sql_templateObject (readonly)

Returns the value of attribute sql_template.



6
7
8
# File 'lib/olaf/query_definition.rb', line 6

def sql_template
  @sql_template
end

#variablesObject (readonly)

Returns the value of attribute variables.



6
7
8
# File 'lib/olaf/query_definition.rb', line 6

def variables
  @variables
end

Class Method Details

.included(base) ⇒ Object



8
9
10
# File 'lib/olaf/query_definition.rb', line 8

def self.included(base)
  base.extend(Olaf::QueryDefinition::ClassMethods)
end

Instance Method Details

#==(other) ⇒ Object



49
50
51
# File 'lib/olaf/query_definition.rb', line 49

def ==(other)
  self.class == other.class && self.variables == other.variables
end

#defined_argumentsObject



53
54
55
# File 'lib/olaf/query_definition.rb', line 53

def defined_arguments
  self.class.arguments.keys
end

#initialize(**variables) ⇒ Object



12
13
14
15
# File 'lib/olaf/query_definition.rb', line 12

def initialize(**variables)
  @variables = variables
  @sql_template = nil
end

#metadataObject



41
42
43
44
45
46
47
# File 'lib/olaf/query_definition.rb', line 41

def 
  {
    query_class: self.class.name,
    arguments: variables,
    sql_template: sql_template,
  }
end

#missing_argumentsObject



57
58
59
# File 'lib/olaf/query_definition.rb', line 57

def missing_arguments
  defined_arguments - @variables.keys
end

#prepareObject

Loads the SQL template and validate all the arguments are defined AND present. The instance will be ready to be executed.

@return QueryDefinition instance

@raises Snowflake::UndefinedArgumentsError
@raises Snowflake::MissingArgumentsError


25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/olaf/query_definition.rb', line 25

def prepare
  @sql_template ||= File.read(self.class.template)

  raise UndefinedArgumentsError, self if undefined_arguments.any?
  raise MissingArgumentsError, self if missing_arguments.any?
  raise UnknownArgumentsError, self if unknown_arguments.any?

  literal_arguments = self.class.arguments.select { |_k, v| v[:literal] }.keys

  variables.slice(*literal_arguments).each do |placeholder, literal_value|
    @sql_template.gsub!(":#{placeholder}", literal_value)
  end

  self
end

#undefined_argumentsObject

Every placeholder MUST be declared as an ‘argument` of the query.



62
63
64
# File 'lib/olaf/query_definition.rb', line 62

def undefined_arguments
  placeholders - defined_arguments
end

#unknown_argumentsObject

Every ‘argument` declared in the query MUST have a placeholder in the SQL file.



67
68
69
# File 'lib/olaf/query_definition.rb', line 67

def unknown_arguments
  defined_arguments - placeholders
end