Bug #12093
Fix in-memory buffer state when a multi-statement transaction rollbacks.
Status:
New
Priority:
Normal
Assignee:
-
Target version:
-
Start date:
Due date:
% Done:
0%
billable:
No
vendor_id:
GCD
case_num:
version_reported:
version_resolved:
reviewer:
production:
No
env_name:
topics:
History
#1 Updated by Teodor Gorghe 6 days ago
Testcase:
/* A failed ASSIGN inside a transaction is undone: every field gets back its value from before the statement. */ define temp-table tt1 field k as integer field f1 as character index ik is unique primary k. create tt1. tt1.k = 1. release tt1. /* the key the ASSIGN below duplicates */ create tt1. assign tt1.k = 9 tt1.f1 = "orig". release tt1. do transaction: find tt1 where tt1.k = 9 exclusive-lock. assign tt1.f1 = "1" tt1.f1 = "2" tt1.k = 1 no-error. /* error 132 when the ASSIGN ends */ message "error" error-status:get-number(1) "f1" tt1.f1 "k" tt1.k. end. find tt1 where tt1.k = 9 no-lock no-error. message "committed: found" available(tt1) "f1" (if available tt1 then tt1.f1 else "-").
| Inside the transaction | Committed | |
|---|---|---|
| OE | error 132 f1 orig k 9 | found yes f1 orig |
| trunk | error 132 f1 2 k 1 | found yes f1 2 |
#3 Updated by Teodor Gorghe 6 days ago
That is a deferred task from #11995 since there is more work to do from previous code review, for example, making sure the implementation works great on this case, buffer-copy, fast copy, records came from session cache, incomplete records, etc.
#4 Updated by Teodor Gorghe 6 days ago
Created task branch 12093a and committed revision 16819:
- Multi-statement assign rollback work from #11995.