Class: DDQL::LookupOperator

Inherits:
AggOperator show all
Defined in:
lib/ddql/lookup_operator.rb

Instance Attribute Summary

Attributes inherited from Operator

#associativity, #name, #precedence, #return_type, #symbol, #type

Instance Method Summary collapse

Methods inherited from AggOperator

#as_agg, #as_left_op_right

Methods inherited from Operator

#any_type?, #boolean?, #comparison?, #complex_comparison?, #infix?, #left?, #math?, #pattern, #postfix?, #prefix?, #register, #right?, #simple_comparison?, #type?

Constructor Details

#initializeLookupOperator

Returns a new instance of LookupOperator.



5
6
7
# File 'lib/ddql/lookup_operator.rb', line 5

def initialize
  super("LOOKUP BY", "Lookup", type: :infix, return_type: :string)
end

Instance Method Details

#parse(parser, _token, expression: nil) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/ddql/lookup_operator.rb', line 9

def parse(parser, _token, expression: nil)
  precedence      = self.precedence
  precedence     -= 1 if right?
  next_expression = parser.parse(precedence: precedence)

  foreign_value_factor = expression[:factor]
  foreign_key_factor = (next_expression.delete(:left) || next_expression)[:factor]
  {
    op_lookup_by: {
      foreign_key: {factor: foreign_key_factor},
      foreign_value: {factor: foreign_value_factor},
    },
  }
end