module Olaf::QueryDefinition
Attributes
sql_template[R]
variables[R]
Public Class Methods
included(base)
click to toggle source
# File lib/olaf/query_definition.rb, line 8 def self.included(base) base.extend(Olaf::QueryDefinition::ClassMethods) end
new(**variables)
click to toggle source
# File lib/olaf/query_definition.rb, line 12 def initialize(**variables) @variables = variables @sql_template = nil end
Public Instance Methods
==(other)
click to toggle source
# File lib/olaf/query_definition.rb, line 49 def ==(other) self.class == other.class && self.variables == other.variables end
defined_arguments()
click to toggle source
# File lib/olaf/query_definition.rb, line 53 def defined_arguments self.class.arguments.keys end
metadata()
click to toggle source
# File lib/olaf/query_definition.rb, line 41 def metadata { query_class: self.class.name, arguments: variables, sql_template: sql_template, } end
missing_arguments()
click to toggle source
# File lib/olaf/query_definition.rb, line 57 def missing_arguments defined_arguments - @variables.keys end
prepare()
click to toggle source
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
# 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_arguments()
click to toggle source
Every placeholder MUST be declared as an `argument` of the query.
# File lib/olaf/query_definition.rb, line 62 def undefined_arguments placeholders - defined_arguments end
unknown_arguments()
click to toggle source
Every `argument` declared in the query MUST have a placeholder in the SQL file.
# File lib/olaf/query_definition.rb, line 67 def unknown_arguments defined_arguments - placeholders end
Private Instance Methods
placeholders()
click to toggle source
Find placeholders in the SQL file.
# File lib/olaf/query_definition.rb, line 74 def placeholders @placeholders ||= @sql_template.scan(/[^:]:(\w+)/).flatten.map(&:to_sym).uniq end