From 44743bed5568b3065e4f9da7972e3ea1d0d9e728 Mon Sep 17 00:00:00 2001 From: Bryan Helmkamp Date: Sun, 17 May 2009 16:14:28 -0400 Subject: joining across engines in either direction Conflicts: spec/arel/engines/memory/integration/joins/cross_engine_spec.rb --- lib/arel/algebra/relations/operations/join.rb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'lib/arel/algebra') diff --git a/lib/arel/algebra/relations/operations/join.rb b/lib/arel/algebra/relations/operations/join.rb index 695f360b51..02a8fa629d 100644 --- a/lib/arel/algebra/relations/operations/join.rb +++ b/lib/arel/algebra/relations/operations/join.rb @@ -2,7 +2,7 @@ module Arel class Join < Relation attributes :relation1, :relation2, :predicates deriving :== - delegate :engine, :name, :to => :relation1 + delegate :name, :to => :relation1 hash_on :relation1 def initialize(relation1, relation2 = Nil.instance, *predicates) @@ -31,6 +31,10 @@ module Arel def join? true end + + def engine + relation1.engine != relation2.engine ? Memory::Engine.new : relation1.engine + end end class InnerJoin < Join; end @@ -39,6 +43,10 @@ module Arel def attributes relation1.externalize.attributes end + + def engine + relation1.engine + end end class Relation -- cgit v1.2.3