From 2431af1b7f731067cd01223b5e0fab3dc55ebea6 Mon Sep 17 00:00:00 2001 From: Emilio Tagua Date: Tue, 31 Aug 2010 13:19:06 -0300 Subject: [PATCH 1/3] Don't test conditional in iteration if it is not present just clone it. --- .../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 bb9cdaaefe3f8..de7e5c71318e6 100644 --- a/activerecord/lib/active_record/relation/query_methods.rb +++ b/activerecord/lib/active_record/relation/query_methods.rb @@ -11,40 +11,40 @@ module QueryMethods 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 @@ def where(opts, *rest) 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) From 87e50f104a27b6c6d1452839adef7c7350769071 Mon Sep 17 00:00:00 2001 From: Emilio Tagua Date: Tue, 31 Aug 2010 15:06:02 -0300 Subject: [PATCH 2/3] Improved conditionals usage to prevent calling methods. --- .../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 de7e5c71318e6..5549358fcd7b8 100644 --- a/activerecord/lib/active_record/relation/query_methods.rb +++ b/activerecord/lib/active_record/relation/query_methods.rb @@ -43,20 +43,31 @@ def reorder(*args) 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) From c11eec84821b9f88d928be77a9ed636384f2e699 Mon Sep 17 00:00:00 2001 From: Emilio Tagua Date: Tue, 31 Aug 2010 15:47:59 -0300 Subject: [PATCH 3/3] 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 5549358fcd7b8..979f8259cf60c 100644 --- a/activerecord/lib/active_record/relation/query_methods.rb +++ b/activerecord/lib/active_record/relation/query_methods.rb @@ -52,7 +52,7 @@ def joins(*args) 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