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).
|
# be made (since they can't be persisted).
|
||||||
def destroy
|
def destroy
|
||||||
unless new_record?
|
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
|
end
|
||||||
|
|
||||||
freeze
|
freeze
|
||||||
|
@ -2904,7 +2904,7 @@ module ActiveRecord #:nodoc:
|
||||||
def update(attribute_names = @attributes.keys)
|
def update(attribute_names = @attributes.keys)
|
||||||
attributes_with_values = arel_attributes_values(false, false, attribute_names)
|
attributes_with_values = arel_attributes_values(false, false, attribute_names)
|
||||||
return 0 if attributes_with_values.empty?
|
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
|
end
|
||||||
|
|
||||||
# Creates a record with values matching those of the instance attributes
|
# Creates a record with values matching those of the instance attributes
|
||||||
|
@ -2991,8 +2991,9 @@ module ActiveRecord #:nodoc:
|
||||||
default
|
default
|
||||||
end
|
end
|
||||||
|
|
||||||
def arel_table
|
def arel_table(reload = nil)
|
||||||
@arel_table = Arel::Table.new(self.class.table_name)
|
@arel_table = Relation.new(self, self.class.table_name) if reload || @arel_table.nil?
|
||||||
|
@arel_table
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns a copy of the attributes hash where all the values have been safely quoted for use in
|
# 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!
|
attribute_names.uniq!
|
||||||
|
|
||||||
begin
|
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.primary_key].eq(quoted_id).and(
|
||||||
arel_table[self.class.locking_column].eq(quote_value(previous_value))
|
arel_table[self.class.locking_column].eq(quote_value(previous_value))
|
||||||
)
|
)
|
||||||
|
@ -116,7 +116,7 @@ module ActiveRecord
|
||||||
lock_col = self.class.locking_column
|
lock_col = self.class.locking_column
|
||||||
previous_value = send(lock_col).to_i
|
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.primary_key].eq(quoted_id).and(
|
||||||
arel_table[self.class.locking_column].eq(quote_value(previous_value))
|
arel_table[self.class.locking_column].eq(quote_value(previous_value))
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue