Repository navigation
Conversation
This branch has not been deployed
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.
Calling
DBInterface.transactioninside a transaction started with SQL currently sends anotherSTART TRANSACTION, which commits the caller's earlier work. A later caller rollback cannot undo those rows. Use the server transaction status after draining pending results to choose a savepoint for an existing transaction. Nested helper calls and preparedexecutemanythen compose without committing their enclosing scope.Keep the connection locked and restore its previous task owner. If rollback or savepoint cleanup fails, close the uncertain session and report both the original and cleanup errors. Reuse the existing connection token sequence for reserved
_mysqljl_savepoint names; no new dependency, export or connection field.MySQL statements that implicitly commit, including table creation in
MySQL.load, and explicit transaction controls inside the callback remain outside this guarantee. The docs state those boundaries.Validation:
Real MySQL 8.4.11 reproduces three failures on pristine main on both Julia 1.10.12 and 1.13.0; the same six controls pass with the fix. The permanent public workflow covers manual/implicit outer transactions, three-level nesting, caught inner errors, prepared-batch rollback and caller rollback.
Full minimum-version suite: 2,267 assertions, including MySQL 8.4 and MariaDB 11.4 live workflows and lifecycle soak. Current protocol suite: 1,900 assertions. Heavy unrelated scan-performance gates were disabled. Strict documentation and independent Astra source review pass.
The actual safe-trim executable passes seven runtime controls with code generation disabled, including nested transactions and failed rollback cleanup. Runtime-schema column materialization remains outside that fixture's supported subset.
Eight matched warm-cost processes retain exactly the same allocations for ordinary top-level transactions on both runtimes: 704/832 bytes for empty/ping callbacks on current, 864/1,024 on minimum. Local timing remains within the paired variation. Separate first-use controls show a 5–13 ms increase per new callback shape, primarily compilation; this is a correctness/composition change, not a speedup claim.
Hosted CI at
49acd08: all 15 applicable checks green, including Docker integration and all platform/version lanes; 2 scheduled-only gates skipped.Co-authored by Codex