activerecord: Extract primary key constraints hash to a method #41427
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
cc @rafaelfranca
Extract the primary key constraints hash, used for the WHERE scope to update or delete a record, into a method. This is just a small step towards supporting a composite primary key, where we would want constraints on all primary key columns.
Context
We have a use case for using a composite primary key for performance reasons, which isn't actually supported in rails at the moment. Specifically, we use a parent record id along with the actual id to keep the associated records together for efficient querying (e.g.
(parent_id, id)
).We can use
self.primary_key = :id
in the model to make most things work, along with a secondary(id)
index. However, that will end up taking gap locks in the innodb mysql engine when there is only an equality constraint onid
, causing unnecessary lock contention.