Class: Sparkql::ExpressionState
- Inherits:
-
Object
- Object
- Sparkql::ExpressionState
- Defined in:
- lib/sparkql/expression_state.rb
Overview
Custom fields need to add a table join to the customfieldsearch table when AND’d together, but not when they are OR’d or nested. This class maintains the state for all custom field expressions lets the parser know when to do either.
Instance Method Summary collapse
-
#initialize ⇒ ExpressionState
constructor
A new instance of ExpressionState.
- #needs_join? ⇒ Boolean
- #push(expression) ⇒ Object
Constructor Details
#initialize ⇒ ExpressionState
Returns a new instance of ExpressionState.
6 7 8 9 10 |
# File 'lib/sparkql/expression_state.rb', line 6 def initialize @expressions = {0=>[]} @last_conjunction = "And" # always start with a join @block_group = 0 end |
Instance Method Details
#needs_join? ⇒ Boolean
19 20 21 |
# File 'lib/sparkql/expression_state.rb', line 19 def needs_join? return @expressions[@block_group].size == 1 || ["Not", "And"].include?(@last_conjunction) end |
#push(expression) ⇒ Object
12 13 14 15 16 17 |
# File 'lib/sparkql/expression_state.rb', line 12 def push(expression) @block_group = expression[:block_group] @expressions[@block_group] ||= [] @expressions[@block_group] << expression @last_conjunction = expression[:conjunction] end |