aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
diff options
context:
space:
mode:
authorEmilio Tagua <miloops@gmail.com>2009-06-10 19:46:47 -0300
committerEmilio Tagua <miloops@gmail.com>2009-06-10 19:46:47 -0300
commitd127831d9e933abdfd85d1486481ee89a7a20dec (patch)
tree5834cd9eacfe64e4d499a8e34706592ec4567e74 /activerecord/lib
parentaf9f9dd02c5539df0f05cb92e0799dc9e0bc8d46 (diff)
parent71528c29215d74bd030ce5381aac37e8624bd506 (diff)
downloadrails-d127831d9e933abdfd85d1486481ee89a7a20dec.tar.gz
rails-d127831d9e933abdfd85d1486481ee89a7a20dec.tar.bz2
rails-d127831d9e933abdfd85d1486481ee89a7a20dec.zip
Merge branch 'update_all'
Diffstat (limited to 'activerecord/lib')
-rwxr-xr-xactiverecord/lib/active_record/base.rb38
1 files changed, 28 insertions, 10 deletions
diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb
index df0cce4bf3..48db9fb942 100755
--- a/activerecord/lib/active_record/base.rb
+++ b/activerecord/lib/active_record/base.rb
@@ -839,26 +839,44 @@ module ActiveRecord #:nodoc:
# # Update all books that match our conditions, but limit it to 5 ordered by date
# Book.update_all "author = 'David'", "title LIKE '%Rails%'", :order => 'created_at', :limit => 5
def update_all(updates, conditions = nil, options = {})
- sql = "UPDATE #{quoted_table_name} SET #{sanitize_sql_for_assignment(updates)} "
+ # sql = "UPDATE #{quoted_table_name} SET #{sanitize_sql_for_assignment(updates)} "
+ # scope = scope(:find)
+
+ # select_sql = ""
+ # add_conditions!(select_sql, conditions, scope)
+
+ # if options.has_key?(:limit) || (scope && scope[:limit])
+ # # Only take order from scope if limit is also provided by scope, this
+ # # is useful for updating a has_many association with a limit.
+ # add_order!(select_sql, options[:order], scope)
+
+ # add_limit!(select_sql, options, scope)
+ # sql.concat(connection.limited_update_conditions(select_sql, quoted_table_name, connection.quote_column_name(primary_key)))
+ # else
+ # add_order!(select_sql, options[:order], nil)
+ # sql.concat(select_sql)
+ # end
+ # p sql
+
+ # connection.update(sql, "#{name} Update")
scope = scope(:find)
- select_sql = ""
- add_conditions!(select_sql, conditions, scope)
+ arel = arel_table
+
+ if conditions = construct_conditions(conditions, scope)
+ arel = arel.where(Arel::SqlLiteral.new(conditions))
+ end
if options.has_key?(:limit) || (scope && scope[:limit])
# Only take order from scope if limit is also provided by scope, this
# is useful for updating a has_many association with a limit.
- add_order!(select_sql, options[:order], scope)
-
- add_limit!(select_sql, options, scope)
- sql.concat(connection.limited_update_conditions(select_sql, quoted_table_name, connection.quote_column_name(primary_key)))
+ arel = arel.order(construct_order(options[:order], scope)).take(construct_limit(options, scope))
else
- add_order!(select_sql, options[:order], nil)
- sql.concat(select_sql)
+ arel = arel.order(construct_order(options[:order], nil))
end
- connection.update(sql, "#{name} Update")
+ arel.update(sanitize_sql_for_assignment(updates))
end
# Destroys the records matching +conditions+ by instantiating each