Class: Sparkql::ExpressionState

Inherits:
Object
  • Object
show all
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

Constructor Details

#initializeExpressionState

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

Returns:

  • (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