aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/arel/relations/join.rb14
-rw-r--r--lib/arel/relations/relation.rb4
2 files changed, 6 insertions, 12 deletions
diff --git a/lib/arel/relations/join.rb b/lib/arel/relations/join.rb
index d5ec9d43bd..e5ca49c284 100644
--- a/lib/arel/relations/join.rb
+++ b/lib/arel/relations/join.rb
@@ -24,17 +24,9 @@ module Arel
end
def prefix_for(attribute)
- if relation1[attribute] && !relation2[attribute]
- externalize(relation1).prefix_for(attribute)
- elsif relation2[attribute] && !relation1[attribute]
- externalize(relation2).prefix_for(attribute)
- else
- if (attribute % relation1[attribute]).size < (attribute % relation2[attribute]).size
- externalize(relation1).prefix_for(attribute)
- else
- externalize(relation2).prefix_for(attribute)
- end
- end
+ externalize([relation1[attribute], relation2[attribute]].select { |a| a =~ attribute }.min do |a1, a2|
+ (attribute % a1).size <=> (attribute % a2).size
+ end.relation).prefix_for(attribute)
end
# TESTME: Not sure which scenario needs this method, was driven by failing tests in ActiveRecord
diff --git a/lib/arel/relations/relation.rb b/lib/arel/relations/relation.rb
index c8602d22e3..3bd40e8f6b 100644
--- a/lib/arel/relations/relation.rb
+++ b/lib/arel/relations/relation.rb
@@ -139,7 +139,9 @@ module Arel
end
def attribute_for_attribute(attribute)
- attributes.detect { |a| a =~ attribute }
+ attributes.select { |a| a =~ attribute }.min do |a1, a2|
+ (attribute % a1).size <=> (attribute % a2).size
+ end
end
end
include AttributeAccessors