BUG#11607 Incorrect error code returned on deletion

Save error on first failure.
    
At end of execute, if the current error is 4350 (transaction already aborted), restore
the original error (if there was one).
This commit is contained in:
stewart@mysql.com 2005-09-02 19:09:20 +10:00
parent 4b5ca92631
commit bfd4b626a1

View file

@ -280,6 +280,7 @@ NdbConnection::execute(ExecType aTypeOfExec,
AbortOption abortOption,
int forceSend)
{
NdbError savedError= theError;
DBUG_ENTER("NdbConnection::execute");
DBUG_PRINT("enter", ("aTypeOfExec: %d, abortOption: %d",
aTypeOfExec, abortOption));
@ -309,7 +310,11 @@ NdbConnection::execute(ExecType aTypeOfExec,
NdbBlob* tBlob = tPrepOp->theBlobList;
while (tBlob != NULL) {
if (tBlob->preExecute(tExecType, batch) == -1)
{
ret = -1;
if(savedError.code==0)
savedError= theError;
}
tBlob = tBlob->theNext;
}
if (batch) {
@ -338,7 +343,11 @@ NdbConnection::execute(ExecType aTypeOfExec,
NdbBlob* tBlob = tOp->theBlobList;
while (tBlob != NULL) {
if (tBlob->preCommit() == -1)
ret = -1;
{
ret = -1;
if(savedError.code==0)
savedError= theError;
}
tBlob = tBlob->theNext;
}
}
@ -360,7 +369,12 @@ NdbConnection::execute(ExecType aTypeOfExec,
}
if (executeNoBlobs(tExecType, abortOption, forceSend) == -1)
ret = -1;
{
ret = -1;
if(savedError.code==0)
savedError= theError;
}
#ifdef ndb_api_crash_on_complex_blob_abort
assert(theFirstOpInList == NULL && theLastOpInList == NULL);
#else
@ -375,7 +389,11 @@ NdbConnection::execute(ExecType aTypeOfExec,
while (tBlob != NULL) {
// may add new operations if batch
if (tBlob->postExecute(tExecType) == -1)
{
ret = -1;
if(savedError.code==0)
savedError= theError;
}
tBlob = tBlob->theNext;
}
}
@ -406,6 +424,10 @@ NdbConnection::execute(ExecType aTypeOfExec,
ndbout << "completed ops: " << n << endl;
}
#endif
if(savedError.code!=0 && theError.code==4350) // Trans already aborted
theError= savedError;
DBUG_RETURN(ret);
}