From 2431af1b7f731067cd01223b5e0fab3dc55ebea6 Mon Sep 17 00:00:00 2001
From: Emilio Tagua <miloops@gmail.com>
Date: Tue, 31 Aug 2010 13:19:06 -0300
Subject: Don't test conditional in iteration if it is not present just clone
 it.

---
 .../lib/active_record/relation/query_methods.rb        | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/activerecord/lib/active_record/relation/query_methods.rb b/activerecord/lib/active_record/relation/query_methods.rb
index bb9cdaaefe..de7e5c7131 100644
--- a/activerecord/lib/active_record/relation/query_methods.rb
+++ b/activerecord/lib/active_record/relation/query_methods.rb
@@ -11,40 +11,40 @@ module ActiveRecord
 
     def includes(*args)
       args.reject! { |a| a.blank? }
-      clone.tap {|r| r.includes_values = (r.includes_values + args).flatten.uniq if args.present? }
+      args.present? ? clone.tap {|r| r.includes_values = (r.includes_values + args).flatten.uniq } : clone
     end
 
     def eager_load(*args)
-      clone.tap {|r| r.eager_load_values += args if args.present? }
+      args.present? ? clone.tap {|r| r.eager_load_values += args } : clone
     end
 
     def preload(*args)
-      clone.tap {|r| r.preload_values += args if args.present? }
+      args.present? ? clone.tap {|r| r.preload_values += args } : clone
     end
 
     def select(*args)
       if block_given?
         to_a.select {|*block_args| yield(*block_args) }
       else
-        clone.tap {|r| r.select_values += args if args.present? }
+        args.present? ? clone.tap {|r| r.select_values += args  } : clone
       end
     end
 
     def group(*args)
-      clone.tap {|r| r.group_values += args.flatten if args.present? }
+      args.present? ? clone.tap {|r| r.group_values += args.flatten  } : clone
     end
 
     def order(*args)
-      clone.tap {|r| r.order_values += args if args.present? }
+      args.present? ? clone.tap {|r| r.order_values += args  } : clone
     end
 
     def reorder(*args)
-      clone.tap {|r| r.order_values = args if args.present? }
+      args.present? ? clone.tap {|r| r.order_values = args  } : clone
     end
 
     def joins(*args)
       args.flatten!
-      clone.tap {|r| r.joins_values += args if args.present? }
+      args.present? ? clone.tap {|r| r.joins_values += args } : clone
     end
 
     def where(opts, *rest)
@@ -56,7 +56,7 @@ module ActiveRecord
 
     def having(*args)
       value = build_where(*args)
-      clone.tap {|r| r.having_values += Array.wrap(value) if value.present? }
+      value.present? ? clone.tap {|r| r.having_values += Array.wrap(value) } : clone
     end
 
     def limit(value = true)
-- 
cgit v1.2.3


From 87e50f104a27b6c6d1452839adef7c7350769071 Mon Sep 17 00:00:00 2001
From: Emilio Tagua <miloops@gmail.com>
Date: Tue, 31 Aug 2010 15:06:02 -0300
Subject: Improved conditionals usage to prevent calling methods.

---
 .../lib/active_record/relation/query_methods.rb    | 27 +++++++++++++++-------
 1 file changed, 19 insertions(+), 8 deletions(-)

diff --git a/activerecord/lib/active_record/relation/query_methods.rb b/activerecord/lib/active_record/relation/query_methods.rb
index de7e5c7131..5549358fcd 100644
--- a/activerecord/lib/active_record/relation/query_methods.rb
+++ b/activerecord/lib/active_record/relation/query_methods.rb
@@ -43,20 +43,31 @@ module ActiveRecord
     end
 
     def joins(*args)
-      args.flatten!
-      args.present? ? clone.tap {|r| r.joins_values += args } : clone
+      if args.present?
+        args.flatten!
+        clone.tap {|r| r.joins_values += args }
+      else
+        clone
+      end
     end
 
     def where(opts, *rest)
-      value = build_where(opts, rest)
-      copy = clone
-      copy.where_values += Array.wrap(value) if value
-      copy
+      if value = build_where(opts, rest)
+        copy = clone
+        copy.where_values += Array.wrap(value)
+        copy
+      else
+        clone
+      end
     end
 
     def having(*args)
-      value = build_where(*args)
-      value.present? ? clone.tap {|r| r.having_values += Array.wrap(value) } : clone
+      if args.present?
+        value = build_where(*args)
+        clone.tap {|r| r.having_values += Array.wrap(value) }
+      else
+        clone
+      end
     end
 
     def limit(value = true)
-- 
cgit v1.2.3


From c11eec84821b9f88d928be77a9ed636384f2e699 Mon Sep 17 00:00:00 2001
From: Emilio Tagua <miloops@gmail.com>
Date: Tue, 31 Aug 2010 15:47:59 -0300
Subject: Avoid calling build_where is no argument is given.

---
 activerecord/lib/active_record/relation/query_methods.rb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/activerecord/lib/active_record/relation/query_methods.rb b/activerecord/lib/active_record/relation/query_methods.rb
index 5549358fcd..979f8259cf 100644
--- a/activerecord/lib/active_record/relation/query_methods.rb
+++ b/activerecord/lib/active_record/relation/query_methods.rb
@@ -52,7 +52,7 @@ module ActiveRecord
     end
 
     def where(opts, *rest)
-      if value = build_where(opts, rest)
+      if opts.present? && value = build_where(opts, rest)
         copy = clone
         copy.where_values += Array.wrap(value)
         copy
-- 
cgit v1.2.3