From 07a611e02351b32100f19495a34ed46d01f195c1 Mon Sep 17 00:00:00 2001
From: Ryuta Kamizono <kamipo@gmail.com>
Date: Thu, 11 May 2017 12:44:05 +0900
Subject: Don't eager loading if unneeded for `FinderMethods#exists?`

Fixes #29025.
---
 activerecord/lib/active_record/relation.rb                | 3 +--
 activerecord/lib/active_record/relation/finder_methods.rb | 6 ++++--
 2 files changed, 5 insertions(+), 4 deletions(-)

(limited to 'activerecord/lib')

diff --git a/activerecord/lib/active_record/relation.rb b/activerecord/lib/active_record/relation.rb
index 5775eda5a5..333ad16e11 100644
--- a/activerecord/lib/active_record/relation.rb
+++ b/activerecord/lib/active_record/relation.rb
@@ -269,8 +269,7 @@ module ActiveRecord
     # Returns true if there are no records.
     def empty?
       return @records.empty? if loaded?
-
-      limit_value == 0 || !exists?
+      !exists?
     end
 
     # Returns true if there are no records.
diff --git a/activerecord/lib/active_record/relation/finder_methods.rb b/activerecord/lib/active_record/relation/finder_methods.rb
index a1459c87c6..1d661fa8ed 100644
--- a/activerecord/lib/active_record/relation/finder_methods.rb
+++ b/activerecord/lib/active_record/relation/finder_methods.rb
@@ -307,9 +307,11 @@ module ActiveRecord
         MSG
       end
 
-      return false if !conditions
+      return false if !conditions || limit_value == 0
+
+      relation = self unless eager_loading?
+      relation ||= apply_join_dependency(self, construct_join_dependency(eager_loading: false))
 
-      relation = apply_join_dependency(self, construct_join_dependency(eager_loading: false))
       return false if ActiveRecord::NullRelation === relation
 
       relation = construct_relation_for_exists(relation, conditions)
-- 
cgit v1.2.3