0.9.1 - #transaction may wrongly end enclosing transaction#19
Open
pilcrow wants to merge 1 commit intoRDBI:masterfrom
Open
0.9.1 - #transaction may wrongly end enclosing transaction#19pilcrow wants to merge 1 commit intoRDBI:masterfrom
pilcrow wants to merge 1 commit intoRDBI:masterfrom
Conversation
Previously, #transaction only checked to see that it was inside *any* tx
before ending (COMMIT/ROLLBACK) the open tx. However, the ability of users
to explicitly end a tx inside the block means that the #transaction block
might end in an enclosing tx wherein the implicit COMMIT/ROLLBACK behavior
intended for the *nested* transaction is incorrect.
Example:
dbh.transaction do |dbh| # tx depth 1
dbh.execute(STMT_1)
dbh.transaction do |dbh| # tx depth 2
dbh.execute(STMT_2)
dbh.commit # tx depth 1 (#rollback would do the same)
end # tx depth 0 (implicit COMMIT -- to early)
dbh.execute(STMT_3)
end # implicit COMMIT of STMT_3 ignored!
# explicit would have been ignored, too
|
Ok; I'm gonna need tests for this one, for sure. |
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.
Issue
rdbi-0.9.1
RDBI::Database#transactionmay incorrectly end the enclosing transaction at the conclusion of a nested transaction block, if the user has already explicitly COMMITted or ROLLBACKed the inner transaction.Presently,
#transaction, checks only to see that thedbhis within any transaction, so it cannot tell whether a block concludes in the same (possibly nested) transaction which it began.The impact is likely limited, as nested transaction support (SAVEPOINTs?) is not to my knowledge implemented in any supported backend.
Example
Presuming a database with nested transaction support:
# initial tx depth -> 0
Proposed Fix
This pull request simply has
#transactionremember its tx depth upon entry, and only#commitor#rollbackif the depth is as expected after leaving the user block.Tests
I have no tests for this fix.