lib/sql_tree/node/join.rb in sql_tree-0.1.0 vs lib/sql_tree/node/join.rb in sql_tree-0.1.1

- old
+ new

@@ -1,19 +1,21 @@ module SQLTree::Node class Join < Base - attr_accessor :join_type, :table_reference, :join_expression + leaf :join_type + child :table_reference + child :join_expression def initialize(values = {}) values.each { |key, value| self.send(:"#{key}=", value) } end - def to_sql + def to_sql(options = {}) join_sql = join_type ? "#{join_type.to_s.upcase} " : "" - join_sql << "JOIN #{table_reference.to_sql} " - join_sql << "ON #{join_expression.to_sql}" + join_sql << "JOIN #{table_reference.to_sql(options)} " + join_sql << "ON #{join_expression.to_sql(options)}" join_sql end def table table_reference.table @@ -24,27 +26,21 @@ end def self.parse(tokens) join = self.new - if tokens.peek == SQLTree::Token::FULL + if SQLTree::Token::FULL === tokens.peek join.join_type = :outer tokens.consume(SQLTree::Token::FULL, SQLTree::Token::OUTER) - elsif [SQLTree::Token::OUTER, SQLTree::Token::INNER, SQLTree::Token::LEFT, SQLTree::Token::RIGHT].include?(tokens.peek) + elsif [SQLTree::Token::OUTER, SQLTree::Token::INNER, SQLTree::Token::LEFT, SQLTree::Token::RIGHT].include?(tokens.peek.class) join.join_type = tokens.next.literal.downcase.to_sym end - tokens.consume(SQLTree::Token::JOIN) join.table_reference = SQLTree::Node::TableReference.parse(tokens) tokens.consume(SQLTree::Token::ON) join.join_expression = SQLTree::Node::Expression.parse(tokens) return join - end - - def ==(other) - other.table = self.table && other.table_alias == self.table_alias && - other.join_type == self.join_type && other.join_expression == self.join_expression end end end