From 5c28e85ef0aff280abf3d4450fd35ce6bc20fb2c Mon Sep 17 00:00:00 2001 From: Tobias Bielohlawek Date: Fri, 2 Oct 2009 11:39:15 +0200 Subject: [PATCH] fixed bug where join statement was merge casesensitive --- activerecord/lib/active_record/base.rb | 3 ++- activerecord/test/cases/base_test.rb | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletions(-) diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index e554e41..3b82d0b 100755 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -1739,7 +1739,8 @@ module ActiveRecord #:nodoc: end join end - joins.flatten.map{|j| j.strip}.uniq + # see http://stackoverflow.com/questions/1103327/how-to-uniq-an-array-case-insensitive + joins.flatten.inject(Hash.new){ |hash,j| j = j.strip; hash[j.upcase] = j; hash}.values else joins.collect{|j| safe_to_array(j)}.flatten.uniq end diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb index b2969bf..4becc7f 100755 --- a/activerecord/test/cases/base_test.rb +++ b/activerecord/test/cases/base_test.rb @@ -2236,6 +2236,13 @@ class BasicsTest < ActiveRecord::TestCase assert !Minimalistic.new.freeze.dup.frozen? end + def test_merge_joins_case_insensitive + join1 = "JOIN mascot ON mascot.company_id = company.id" + join2 = "join mascot on mascot.company_id = company.id" + statement = Company.scoped(:joins => join1).scoped(:joins => join2).scope(:find) + assert_equal [join1], statement[:joins] + end + protected def with_env_tz(new_tz = 'US/Eastern') old_tz, ENV['TZ'] = ENV['TZ'], new_tz -- 1.6.4