aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/sql_type_metadata.rb
diff options
context:
space:
mode:
authorJean Boussier <jean.boussier@gmail.com>2019-04-05 14:45:05 +0200
committerJean Boussier <jean.boussier@gmail.com>2019-04-09 13:54:49 +0200
commit6f26e99cef4b6f20be8ef5cf7fee4b4755baaaec (patch)
tree823a7fd9cb13247da40b1387cc7dc7f4dd8496fd /activerecord/lib/active_record/connection_adapters/sql_type_metadata.rb
parentac786cd1f2c39ea4c9eefeb23ceaab8fe3b242ec (diff)
downloadrails-6f26e99cef4b6f20be8ef5cf7fee4b4755baaaec.tar.gz
rails-6f26e99cef4b6f20be8ef5cf7fee4b4755baaaec.tar.bz2
rails-6f26e99cef4b6f20be8ef5cf7fee4b4755baaaec.zip
Improve == and hash methods on various schema cache structs to be allocation free.
The previous implementation would allocate 2 arrays per comparisons. I tried relying on Struct, but they do allocate one Hash inside `Struct#hash`.
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/sql_type_metadata.rb')
-rw-r--r--activerecord/lib/active_record/connection_adapters/sql_type_metadata.rb19
1 files changed, 11 insertions, 8 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/sql_type_metadata.rb b/activerecord/lib/active_record/connection_adapters/sql_type_metadata.rb
index 8489bcbf1d..df28df7a7c 100644
--- a/activerecord/lib/active_record/connection_adapters/sql_type_metadata.rb
+++ b/activerecord/lib/active_record/connection_adapters/sql_type_metadata.rb
@@ -16,19 +16,22 @@ module ActiveRecord
def ==(other)
other.is_a?(SqlTypeMetadata) &&
- attributes_for_hash == other.attributes_for_hash
+ sql_type == other.sql_type &&
+ type == other.type &&
+ limit == other.limit &&
+ precision == other.precision &&
+ scale == other.scale
end
alias eql? ==
def hash
- attributes_for_hash.hash
+ SqlTypeMetadata.hash ^
+ sql_type.hash ^
+ type.hash ^
+ limit.hash ^
+ precision.hash >> 1 ^
+ scale.hash >> 2
end
-
- protected
-
- def attributes_for_hash
- [self.class, sql_type, type, limit, precision, scale]
- end
end
end
end