From 9f9b32544dd7711c41a31651e57f32a9b379e1d7 Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Tue, 7 Sep 2010 15:10:27 -0700 Subject: getting better on joins --- lib/arel/select_manager.rb | 10 ++++++++++ lib/arel/visitors/dot.rb | 7 +++++++ 2 files changed, 17 insertions(+) (limited to 'lib') diff --git a/lib/arel/select_manager.rb b/lib/arel/select_manager.rb index c8cd37b9fa..b574253b05 100644 --- a/lib/arel/select_manager.rb +++ b/lib/arel/select_manager.rb @@ -18,6 +18,16 @@ module Arel self end + def join relation, klass = Nodes::InnerJoin + case relation + when String, Nodes::SqlLiteral + raise if relation.blank? + from Nodes::StringJoin.new(@ctx.froms.pop, relation) + else + from klass.new(@ctx.froms.pop, relation, nil) + end + end + def project *projections # FIXME: converting these to SQLLiterals is probably not good, but # rails tests require it. diff --git a/lib/arel/visitors/dot.rb b/lib/arel/visitors/dot.rb index f66dfd8a54..73fcddca84 100644 --- a/lib/arel/visitors/dot.rb +++ b/lib/arel/visitors/dot.rb @@ -28,6 +28,12 @@ module Arel end private + def visit_Arel_Nodes_TableAlias o + visit_edge o, "name" + visit_edge o, "relation" + visit_edge o, "columns" + end + def visit_Arel_Nodes_Count o visit_edge o, "expressions" visit_edge o, "distinct" @@ -37,6 +43,7 @@ module Arel visit_edge o, "left" visit_edge o, "right" end + alias :visit_Arel_Nodes_InnerJoin :visit_Arel_Nodes_StringJoin def visit_Arel_Nodes_InsertStatement o visit_edge o, "relation" -- cgit v1.2.3