diff options
author | Emilio Tagua <miloops@gmail.com> | 2009-07-21 23:01:26 -0300 |
---|---|---|
committer | Emilio Tagua <miloops@gmail.com> | 2009-07-21 23:01:26 -0300 |
commit | ca1e62f14219da3990bb354d4a363dbe6fa13435 (patch) | |
tree | 4afad396b527834fc693f572e329acc32d45cdd0 /activerecord | |
parent | 5123a2359b964ba31c93296a36c9899564b537a8 (diff) | |
download | rails-ca1e62f14219da3990bb354d4a363dbe6fa13435.tar.gz rails-ca1e62f14219da3990bb354d4a363dbe6fa13435.tar.bz2 rails-ca1e62f14219da3990bb354d4a363dbe6fa13435.zip |
Performance: cache/reload arel relation when possible to speed up things.
Diffstat (limited to 'activerecord')
-rwxr-xr-x | activerecord/lib/active_record/base.rb | 9 | ||||
-rw-r--r-- | activerecord/lib/active_record/locking/optimistic.rb | 4 |
2 files changed, 7 insertions, 6 deletions
diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index 2375211577..7a34e345a2 100755 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -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 diff --git a/activerecord/lib/active_record/locking/optimistic.rb b/activerecord/lib/active_record/locking/optimistic.rb index bc22c2a511..4e833ec871 100644 --- a/activerecord/lib/active_record/locking/optimistic.rb +++ b/activerecord/lib/active_record/locking/optimistic.rb @@ -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)) ) |