Sha256: 66c4d89b8ebfb6f10ea2fb9939cdae248b3763c328fd35fa07f90da8b579dabc

Contents?: true

Size: 1.5 KB

Versions: 1

Compression:

Stored size: 1.5 KB

Contents

class SQLTree::Token

  attr_accessor :literal

  def initialize(literal)
    @literal = literal
  end
  
  def ==(other)
    other.class == self.class && @literal == other.literal
  end
  
  alias :eql? :==
  
  def inspect
    literal
  end
  
  # Token types
  
  class Value < SQLTree::Token
  end
  
  class Variable < SQLTree::Token::Value
  end
  
  class String < SQLTree::Token::Value
  end
  
  class Number < SQLTree::Token::Value
  end  
  
  class Keyword < SQLTree::Token
    def inspect
      ":#{literal.downcase}"
    end    
  end

  class Operator < SQLTree::Token
    def inspect
      OPERATORS[literal].inspect
    end
  end

  LPAREN = Class.new(SQLTree::Token).new('(')
  RPAREN = Class.new(SQLTree::Token).new(')')
  DOT    = Class.new(SQLTree::Token).new('.')  
  COMMA  = Class.new(SQLTree::Token).new(',')    
  
  KEYWORDS = %w{select from where group having order distinct left right inner outer join and or not as}
  KEYWORDS.each do |kw|
    self.const_set(kw.upcase, Class.new(SQLTree::Token::Keyword).new(kw.upcase))
  end
  
  ARITHMETHIC_OPERATORS = { '+' => :plus, '-' => :minus, '*' => :multiply, '/' => :divide, '%' => :modulo }
  LOGICAL_OPERATORS     = { '=' => :eq, '!=' => :ne, '<>' => :ne, '>' => :gt, '<' => :lt, '>=' => :gte, '<=' => :lte }

  OPERATORS = ARITHMETHIC_OPERATORS.merge(LOGICAL_OPERATORS)
  OPERATORS.each do |literal, symbol|
    self.const_set(symbol.to_s.upcase, Class.new(SQLTree::Token::Operator).new(literal)) unless self.const_defined?(symbol.to_s.upcase)
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
wvanbergen-sql_tree-0.0.1 lib/sql_tree/token.rb