Project

General

Profile

Bug #12093

Fix in-memory buffer state when a multi-statement transaction rollbacks.

Added by Teodor Gorghe 6 days ago. Updated 6 days ago.

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.

Also available in: Atom PDF