We don't need additional type casting for locking updates

Part of the larger refactoring to remove type casting from Arel. We can
inform it that we already have the right type by wrapping the value in
an `Arel::Nodes::Quoted`. This commit can be reverted when we have
removed type casting from Arel in Rail 5.1
This commit is contained in:
Sean Griffin 2014-12-26 17:17:01 -07:00
parent a61a85683a
commit 796574c92c
1 changed files with 11 additions and 3 deletions

View File

@ -80,10 +80,18 @@ module ActiveRecord
begin
relation = self.class.unscoped
stmt = relation.where(
relation.table[self.class.primary_key].eq(id).and(
relation.table[lock_col].eq(self.class.quote_value(previous_lock_value, column_for_attribute(lock_col)))
# FIXME: Remove the Arel::Nodes::Quoted when we remove type casting
# from Arel (Rails 5.1)
quoted_lock_value = Arel::Nodes::Quoted.new(
self.class.quote_value(
previous_lock_value,
column_for_attribute(lock_col),
)
)
quoted_id = Arel::Nodes::Quoted.new(id)
stmt = relation.where(
relation.table[self.class.primary_key].eq(quoted_id).and(
relation.table[lock_col].eq(quoted_lock_value))
).arel.compile_update(
arel_attributes_with_values_for_update(attribute_names),
self.class.primary_key