提交 7352f8db 编写于 作者: S Sean Griffin 提交者: GitHub

Merge pull request #30550 from tgxworld/fix_memoization_preload

PERF: Partially recover some performance when preloading. 
......@@ -50,20 +50,14 @@ def associate_records_to_owner(owner, records)
end
def owner_keys
unless defined?(@owner_keys)
@owner_keys = owners.map do |owner|
owner[owner_key_name]
end
@owner_keys.uniq!
@owner_keys.compact!
end
@owner_keys
@owner_keys ||= owners_by_key.keys
end
def owners_by_key
unless defined?(@owners_by_key)
@owners_by_key = owners.each_with_object({}) do |owner, h|
h[convert_key(owner[owner_key_name])] = owner
key = convert_key(owner[owner_key_name])
h[key] = owner if key
end
end
@owners_by_key
......
......@@ -17,13 +17,15 @@ def to_key
# Returns the primary key value.
def id
sync_with_transaction_state
_read_attribute(self.class.primary_key) if self.class.primary_key
primary_key = self.class.primary_key
_read_attribute(primary_key) if primary_key
end
# Sets the primary key value.
def id=(value)
sync_with_transaction_state
_write_attribute(self.class.primary_key, value) if self.class.primary_key
primary_key = self.class.primary_key
_write_attribute(primary_key, value) if primary_key
end
# Queries the primary key value.
......
......@@ -58,8 +58,9 @@ def read_attribute(attr_name, &block)
attr_name.to_s
end
name = self.class.primary_key if name == "id".freeze && self.class.primary_key
sync_with_transaction_state if name == self.class.primary_key
primary_key = self.class.primary_key
name = primary_key if name == "id".freeze && primary_key
sync_with_transaction_state if name == primary_key
_read_attribute(name, &block)
end
......
......@@ -39,8 +39,9 @@ def write_attribute(attr_name, value)
attr_name.to_s
end
name = self.class.primary_key if name == "id".freeze && self.class.primary_key
sync_with_transaction_state if name == self.class.primary_key
primary_key = self.class.primary_key
name = primary_key if name == "id".freeze && primary_key
sync_with_transaction_state if name == primary_key
_write_attribute(name, value)
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册