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