Performance: cache/reload arel relation when possible to speed up things.
This commit is contained in:
parent
5123a2359b
commit
ca1e62f142
|
@ -2602,7 +2602,7 @@ module ActiveRecord #:nodoc:
|
|||
# be made (since they can't be persisted).
|
||||
def destroy
|
||||
unless new_record?
|
||||
arel_table.where(arel_table[self.class.primary_key].eq(id)).delete
|
||||
arel_table(true).where(arel_table[self.class.primary_key].eq(id)).delete
|
||||
end
|
||||
|
||||
freeze
|
||||
|
@ -2904,7 +2904,7 @@ module ActiveRecord #:nodoc:
|
|||
def update(attribute_names = @attributes.keys)
|
||||
attributes_with_values = arel_attributes_values(false, false, attribute_names)
|
||||
return 0 if attributes_with_values.empty?
|
||||
arel_table.where(arel_table[self.class.primary_key].eq(id)).update(attributes_with_values)
|
||||
arel_table(true).where(arel_table[self.class.primary_key].eq(id)).update(attributes_with_values)
|
||||
end
|
||||
|
||||
# Creates a record with values matching those of the instance attributes
|
||||
|
@ -2991,8 +2991,9 @@ module ActiveRecord #:nodoc:
|
|||
default
|
||||
end
|
||||
|
||||
def arel_table
|
||||
@arel_table = Arel::Table.new(self.class.table_name)
|
||||
def arel_table(reload = nil)
|
||||
@arel_table = Relation.new(self, self.class.table_name) if reload || @arel_table.nil?
|
||||
@arel_table
|
||||
end
|
||||
|
||||
# Returns a copy of the attributes hash where all the values have been safely quoted for use in
|
||||
|
|
|
@ -89,7 +89,7 @@ module ActiveRecord
|
|||
attribute_names.uniq!
|
||||
|
||||
begin
|
||||
affected_rows = arel_table.where(
|
||||
affected_rows = arel_table(true).where(
|
||||
arel_table[self.class.primary_key].eq(quoted_id).and(
|
||||
arel_table[self.class.locking_column].eq(quote_value(previous_value))
|
||||
)
|
||||
|
@ -116,7 +116,7 @@ module ActiveRecord
|
|||
lock_col = self.class.locking_column
|
||||
previous_value = send(lock_col).to_i
|
||||
|
||||
affected_rows = arel_table.where(
|
||||
affected_rows = arel_table(true).where(
|
||||
arel_table[self.class.primary_key].eq(quoted_id).and(
|
||||
arel_table[self.class.locking_column].eq(quote_value(previous_value))
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue