class Sparkql::ExpressionState

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.

Public Class Methods

new() click to toggle source
# File lib/sparkql/expression_state.rb, line 6
def initialize
  @expressions = {0=>[]}
  @last_conjunction = "And" # always start with a join
  @block_group = 0
end

Public Instance Methods

needs_join?() click to toggle source
# 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) click to toggle source
# 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