From fbebdb0c091c37b0bc75ab774d187d8bc8795bd2 Mon Sep 17 00:00:00 2001
From: Frederick Cheung <frederick.cheung@gmail.com>
Date: Fri, 2 May 2008 00:00:42 +0100
Subject: Ensure correct record is returned when preloading has_one where more
 than one row exists

Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#73 state:closed]
---
 activerecord/test/cases/associations/eager_test.rb | 4 ++++
 activerecord/test/models/post.rb                   | 2 ++
 2 files changed, 6 insertions(+)

(limited to 'activerecord/test')

diff --git a/activerecord/test/cases/associations/eager_test.rb b/activerecord/test/cases/associations/eager_test.rb
index 546ed80894..67b57ceb42 100644
--- a/activerecord/test/cases/associations/eager_test.rb
+++ b/activerecord/test/cases/associations/eager_test.rb
@@ -29,6 +29,10 @@ class EagerAssociationTest < ActiveRecord::TestCase
     post = Post.find(:first, :include => :comments, :conditions => "posts.title = 'Welcome to the weblog'")
     assert_equal 2, post.comments.size
     assert post.comments.include?(comments(:greetings))
+
+    posts = Post.find(:all, :include => :last_comment)
+    post = posts.find { |p| p.id == 1 }
+    assert_equal Post.find(1).last_comment, post.last_comment
   end
 
   def test_loading_conditions_with_or
diff --git a/activerecord/test/models/post.rb b/activerecord/test/models/post.rb
index 22c5a645b8..d9101706b5 100644
--- a/activerecord/test/models/post.rb
+++ b/activerecord/test/models/post.rb
@@ -9,6 +9,8 @@ class Post < ActiveRecord::Base
 
   belongs_to :author_with_posts, :class_name => "Author", :foreign_key => :author_id, :include => :posts
 
+  has_one :last_comment, :class_name => 'Comment', :order => 'id desc'
+
   has_many   :comments, :order => "body" do
     def find_most_recent
       find(:first, :order => "id DESC")
-- 
cgit v1.2.3


From 8ded457b1b31b157d6fe89b553749579e5ac4a27 Mon Sep 17 00:00:00 2001
From: John Devine <johnjdevine@gmail.com>
Date: Sat, 3 May 2008 22:49:18 -0500
Subject: Added logic to associations.rb to make sure select_for_limited_ids

includes joins that are needed to reach tables listed in the :order
or :conditions options if they are not joined directly to the main
active_record table.

Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#109 state:resolved]
---
 activerecord/test/cases/finder_test.rb | 9 +++++++++
 1 file changed, 9 insertions(+)

(limited to 'activerecord/test')

diff --git a/activerecord/test/cases/finder_test.rb b/activerecord/test/cases/finder_test.rb
index b7f87fe6e8..2acfe9b387 100644
--- a/activerecord/test/cases/finder_test.rb
+++ b/activerecord/test/cases/finder_test.rb
@@ -8,6 +8,7 @@ require 'models/entrant'
 require 'models/developer'
 require 'models/post'
 require 'models/customer'
+require 'models/job'
 
 class FinderTest < ActiveRecord::TestCase
   fixtures :companies, :topics, :entrants, :developers, :developers_projects, :posts, :comments, :accounts, :authors, :customers
@@ -857,6 +858,14 @@ class FinderTest < ActiveRecord::TestCase
       Company.connection.select_rows("SELECT id, name FROM companies WHERE id IN (1,2,3) ORDER BY id").map! {|i| i.map! {|j| j.to_s unless j.nil?}}
   end
 
+  def test_find_with_order_on_included_associations_with_construct_finder_sql_for_association_limiting_and_is_distinct
+    assert_equal 2, Post.find(:all,:include=>{:authors=>:author_address},:order=>' author_addresses.id DESC ', :limit=>2).size
+
+    assert_equal 3, Post.find(:all,:include=>{:author=>:author_address,:authors=>:author_address},
+                              :order=>' author_addresses_authors.id DESC ', :limit=>3).size
+  end
+
+
   protected
     def bind(statement, *vars)
       if vars.first.is_a?(Hash)
-- 
cgit v1.2.3