feat: add Model withLockedRow()#10388
Open
memleakd wants to merge 3 commits into
Open
Conversation
- add withLockedRow() for running a callback with a row locked for update - bypass find callbacks for the locked reload while preserving normal callback behavior inside the callback - clean up model state when the locked lookup fails - document transaction, constraint, and driver-lock behavior - add focused unit and live model coverage Signed-off-by: memleakd <121398829+memleakd@users.noreply.github.com>
Signed-off-by: memleakd <121398829+memleakd@users.noreply.github.com>
Signed-off-by: memleakd <121398829+memleakd@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Description
This PR proposes adding
withLockedRow()toCodeIgniter\Model.It is a small helper for cases where we need to reload a single row inside a transaction, lock it for update, and then run some code with that locked row.
This gives users a clear path for single-row mutations that need a pessimistic lock, without having to remember to manually wrap
lockForUpdate()in a transaction each time. It does not add new lock behavior; it only scopes the existing transaction and lock APIs together.The method uses the existing
transaction()helper and Query BuilderlockForUpdate(), so it follows the same transaction and driver-specific locking behavior.A few details:
nullis returnedfalseis returnedwhere()andwithDeleted(), are appliedThis does not add new lock modes or special driver handling. Unsupported lock combinations still throw the same exceptions as
lockForUpdate().Checklist: