From d4daf7bba7dda756ab4700016e9b4b31f6127a1e Mon Sep 17 00:00:00 2001 From: Michael Koziarski Date: Mon, 11 Feb 2008 02:50:58 +0000 Subject: Fix eager loading with pre-quoted table names. Closes #11046 [danielmorrison, Koz, Jeremy Kemper] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8856 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activerecord/lib/active_record/associations.rb | 4 ++-- activerecord/test/cases/associations/eager_test.rb | 24 ++++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/activerecord/lib/active_record/associations.rb b/activerecord/lib/active_record/associations.rb index cb17b6e483..3ff2d5db6b 100755 --- a/activerecord/lib/active_record/associations.rb +++ b/activerecord/lib/active_record/associations.rb @@ -1379,7 +1379,7 @@ module ActiveRecord end end return false unless conditions.any? - conditions.join(' ').scan(/([\.\w]+)\.\w+/).flatten.any? do |condition_table_name| + conditions.join(' ').scan(/([\.\w]+).?\./).flatten.any? do |condition_table_name| condition_table_name != table_name end end @@ -1388,7 +1388,7 @@ module ActiveRecord def include_eager_order?(options) order = options[:order] return false unless order - order.to_s.scan(/([\.\w]+)\.\w+/).flatten.any? do |order_table_name| + order.to_s.scan(/([\.\w]+).?\./).flatten.any? do |order_table_name| order_table_name != table_name end end diff --git a/activerecord/test/cases/associations/eager_test.rb b/activerecord/test/cases/associations/eager_test.rb index b606092d7e..c95099c146 100644 --- a/activerecord/test/cases/associations/eager_test.rb +++ b/activerecord/test/cases/associations/eager_test.rb @@ -119,6 +119,30 @@ class EagerAssociationTest < ActiveRecord::TestCase assert_equal [6,7,8], comments.collect { |c| c.id } end + def test_eager_association_loading_with_belongs_to_and_conditions_string_with_unquoted_table_name + assert_nothing_raised do + Comment.find(:all, :include => :post, :conditions => ['posts.id = ?',4]) + end + end + + def test_eager_association_loading_with_belongs_to_and_conditions_string_with_quoted_table_name + assert_nothing_raised do + Comment.find(:all, :include => :post, :conditions => ["#{Comment.connection.quote_table_name('posts.id')} = ?",4]) + end + end + + def test_eager_association_loading_with_belongs_to_and_order_string_with_unquoted_table_name + assert_nothing_raised do + Comment.find(:all, :include => :post, :order => 'posts.id') + end + end + + def test_eager_association_loading_with_belongs_to_and_order_string_with_quoted_table_name + assert_nothing_raised do + Comment.find(:all, :include => :post, :order => Comment.connection.quote_table_name('posts.id')) + end + end + def test_eager_association_loading_with_belongs_to_and_limit_and_multiple_associations posts = Post.find(:all, :include => [:author, :very_special_comment], :limit => 1, :order => 'posts.id') assert_equal 1, posts.length -- cgit v1.2.3