aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2010-09-07 15:10:27 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2010-09-07 15:10:27 -0700
commit9f9b32544dd7711c41a31651e57f32a9b379e1d7 (patch)
treead1021958a82e7c4137fa71c9de71f8c003e7f57 /lib
parent40f31b6f5e9f570f92a65a6654d6b00d70cd922f (diff)
downloadrails-9f9b32544dd7711c41a31651e57f32a9b379e1d7.tar.gz
rails-9f9b32544dd7711c41a31651e57f32a9b379e1d7.tar.bz2
rails-9f9b32544dd7711c41a31651e57f32a9b379e1d7.zip
getting better on joins
Diffstat (limited to 'lib')
-rw-r--r--lib/arel/select_manager.rb10
-rw-r--r--lib/arel/visitors/dot.rb7
2 files changed, 17 insertions, 0 deletions
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"