From 4c2c43478cf5f3bc028720b57b7736e13bd3f94d Mon Sep 17 00:00:00 2001 From: Clemens Kofler Date: Wed, 20 Aug 2008 00:19:12 +0200 Subject: [PATCH] Modified AR::Base methods add_conditions!, add_order! and add_group! to take full options hash like their siblings. --- activerecord/lib/active_record/associations.rb | 12 +++++----- activerecord/lib/active_record/base.rb | 29 ++++++++++++----------- activerecord/lib/active_record/calculations.rb | 2 +- 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/activerecord/lib/active_record/associations.rb b/activerecord/lib/active_record/associations.rb index b72fdb3..7254b71 100644 --- a/activerecord/lib/active_record/associations.rb +++ b/activerecord/lib/active_record/associations.rb @@ -1598,11 +1598,11 @@ module ActiveRecord sql << join_dependency.join_associations.collect{|join| join.association_join }.join add_joins!(sql, options, scope) - add_conditions!(sql, options[:conditions], scope) + add_conditions!(sql, options, scope) add_limited_ids_condition!(sql, options, join_dependency) if !using_limitable_reflections?(join_dependency.reflections) && ((scope && scope[:limit]) || options[:limit]) - add_group!(sql, options[:group], scope) - add_order!(sql, options[:order], scope) + add_group!(sql, options, scope) + add_order!(sql, options, scope) add_limit!(sql, options, scope) if using_limitable_reflections?(join_dependency.reflections) add_lock!(sql, options, scope) @@ -1656,13 +1656,13 @@ module ActiveRecord add_joins!(sql, options, scope) end - add_conditions!(sql, options[:conditions], scope) - add_group!(sql, options[:group], scope) + add_conditions!(sql, options, scope) + add_group!(sql, options, scope) if order && is_distinct connection.add_order_by_for_association_limiting!(sql, :order => order) else - add_order!(sql, options[:order], scope) + add_order!(sql, options, scope) end add_limit!(sql, options, scope) diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index 5357255..a2a933f 100644 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -772,10 +772,11 @@ module ActiveRecord #:nodoc: # Billing.update_all( "author = 'David'", "title LIKE '%Rails%'", # :order => 'created_at', :limit => 5 ) def update_all(updates, conditions = nil, options = {}) + options.reverse_merge!(:conditions => conditions) sql = "UPDATE #{quoted_table_name} SET #{sanitize_sql_for_assignment(updates)} " scope = scope(:find) - add_conditions!(sql, conditions, scope) - add_order!(sql, options[:order], nil) + add_conditions!(sql, options, scope) + add_order!(sql, options, nil) add_limit!(sql, options, nil) connection.update(sql, "#{name} Update") end @@ -815,7 +816,7 @@ module ActiveRecord #:nodoc: # associations or call your before_ or after_destroy callbacks, use the +destroy_all+ method instead. def delete_all(conditions = nil) sql = "DELETE FROM #{quoted_table_name} " - add_conditions!(sql, conditions, scope(:find)) + add_conditions!(sql, { :conditions => conditions }, scope(:find)) connection.delete(sql, "#{name} Delete all") end @@ -1515,10 +1516,10 @@ module ActiveRecord #:nodoc: sql << "FROM #{(scope && scope[:from]) || options[:from] || quoted_table_name} " add_joins!(sql, options, scope) - add_conditions!(sql, options[:conditions], scope) + add_conditions!(sql, options, scope) - add_group!(sql, options[:group], scope) - add_order!(sql, options[:order], scope) + add_group!(sql, options, scope) + add_order!(sql, options, scope) add_limit!(sql, options, scope) add_lock!(sql, options, scope) @@ -1542,20 +1543,20 @@ module ActiveRecord #:nodoc: end end - def add_order!(sql, order, scope = :auto) + def add_order!(sql, options, scope = :auto) scope = scope(:find) if :auto == scope scoped_order = scope[:order] if scope - if order - sql << " ORDER BY #{order}" + if options[:order] + sql << " ORDER BY #{options[:order]}" sql << ", #{scoped_order}" if scoped_order else sql << " ORDER BY #{scoped_order}" if scoped_order end end - def add_group!(sql, group, scope = :auto) - if group - sql << " GROUP BY #{group}" + def add_group!(sql, options, scope = :auto) + if options[:group] + sql << " GROUP BY #{options[:group]}" else scope = scope(:find) if :auto == scope if scope && (scoped_group = scope[:group]) @@ -1600,9 +1601,9 @@ module ActiveRecord #:nodoc: # Adds a sanitized version of +conditions+ to the +sql+ string. Note that the passed-in +sql+ string is changed. # The optional scope argument is for the current :find scope. - def add_conditions!(sql, conditions, scope = :auto) + def add_conditions!(sql, options, scope = :auto) scope = scope(:find) if :auto == scope - conditions = [conditions] + conditions = [options[:conditions]] conditions << scope[:conditions] if scope conditions << type_condition if finder_needs_type_condition? merged_conditions = merge_conditions(*conditions) diff --git a/activerecord/lib/active_record/calculations.rb b/activerecord/lib/active_record/calculations.rb index 246f87b..7a2bf1d 100644 --- a/activerecord/lib/active_record/calculations.rb +++ b/activerecord/lib/active_record/calculations.rb @@ -191,7 +191,7 @@ module ActiveRecord sql << join_dependency.join_associations.collect{|join| join.association_join }.join end add_joins!(sql, options, scope) - add_conditions!(sql, options[:conditions], scope) + add_conditions!(sql, options, scope) add_limited_ids_condition!(sql, options, join_dependency) if join_dependency && !using_limitable_reflections?(join_dependency.reflections) && ((scope && scope[:limit]) || options[:limit]) if options[:group] -- 1.5.2.4