Class: SQLTree::Node::Expression::BinaryOperator

Inherits:
SQLTree::Node::Expression show all
Defined in:
lib/active_record/turntable/sql_tree_patch.rb

Class Method Summary collapse

Methods inherited from SQLTree::Node::Expression

parse_atomic

Methods inherited from Base

#quote_field_name

Class Method Details

.parse_rhs(tokens, precedence, operator = nil) ⇒ Object



227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
# File 'lib/active_record/turntable/sql_tree_patch.rb', line 227

def self.parse_rhs(tokens, precedence, operator = nil)
  if ['IN', 'NOT IN'].include?(operator)
    if SQLTree::Token::SELECT === tokens.peek(2)
      return SQLTree::Node::SubQuery.parse(tokens)
    else
      return List.parse(tokens)
    end
  elsif ['IS', 'IS NOT'].include?(operator)
    tokens.consume(SQLTree::Token::NULL)
    return SQLTree::Node::Expression::Value.new(nil)
  elsif ['BETWEEN'].include?(operator)
    expr = parse_atomic(tokens)
    operator = parse_operator(tokens)
    rhs      = parse_rhs(tokens, precedence, operator)
    expr     = self.new(:operator => operator, :lhs => expr, :rhs => rhs)
    return expr
  else
    return parse(tokens, precedence + 1)
  end
end