Commit bfd4b626 authored by stewart@mysql.com's avatar stewart@mysql.com

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).
parent 4b5ca926
...@@ -280,6 +280,7 @@ NdbConnection::execute(ExecType aTypeOfExec, ...@@ -280,6 +280,7 @@ NdbConnection::execute(ExecType aTypeOfExec,
AbortOption abortOption, AbortOption abortOption,
int forceSend) int forceSend)
{ {
NdbError savedError= theError;
DBUG_ENTER("NdbConnection::execute"); DBUG_ENTER("NdbConnection::execute");
DBUG_PRINT("enter", ("aTypeOfExec: %d, abortOption: %d", DBUG_PRINT("enter", ("aTypeOfExec: %d, abortOption: %d",
aTypeOfExec, abortOption)); aTypeOfExec, abortOption));
...@@ -309,7 +310,11 @@ NdbConnection::execute(ExecType aTypeOfExec, ...@@ -309,7 +310,11 @@ NdbConnection::execute(ExecType aTypeOfExec,
NdbBlob* tBlob = tPrepOp->theBlobList; NdbBlob* tBlob = tPrepOp->theBlobList;
while (tBlob != NULL) { while (tBlob != NULL) {
if (tBlob->preExecute(tExecType, batch) == -1) if (tBlob->preExecute(tExecType, batch) == -1)
{
ret = -1; ret = -1;
if(savedError.code==0)
savedError= theError;
}
tBlob = tBlob->theNext; tBlob = tBlob->theNext;
} }
if (batch) { if (batch) {
...@@ -338,7 +343,11 @@ NdbConnection::execute(ExecType aTypeOfExec, ...@@ -338,7 +343,11 @@ NdbConnection::execute(ExecType aTypeOfExec,
NdbBlob* tBlob = tOp->theBlobList; NdbBlob* tBlob = tOp->theBlobList;
while (tBlob != NULL) { while (tBlob != NULL) {
if (tBlob->preCommit() == -1) if (tBlob->preCommit() == -1)
ret = -1; {
ret = -1;
if(savedError.code==0)
savedError= theError;
}
tBlob = tBlob->theNext; tBlob = tBlob->theNext;
} }
} }
...@@ -360,7 +369,12 @@ NdbConnection::execute(ExecType aTypeOfExec, ...@@ -360,7 +369,12 @@ NdbConnection::execute(ExecType aTypeOfExec,
} }
if (executeNoBlobs(tExecType, abortOption, forceSend) == -1) if (executeNoBlobs(tExecType, abortOption, forceSend) == -1)
ret = -1; {
ret = -1;
if(savedError.code==0)
savedError= theError;
}
#ifdef ndb_api_crash_on_complex_blob_abort #ifdef ndb_api_crash_on_complex_blob_abort
assert(theFirstOpInList == NULL && theLastOpInList == NULL); assert(theFirstOpInList == NULL && theLastOpInList == NULL);
#else #else
...@@ -375,7 +389,11 @@ NdbConnection::execute(ExecType aTypeOfExec, ...@@ -375,7 +389,11 @@ NdbConnection::execute(ExecType aTypeOfExec,
while (tBlob != NULL) { while (tBlob != NULL) {
// may add new operations if batch // may add new operations if batch
if (tBlob->postExecute(tExecType) == -1) if (tBlob->postExecute(tExecType) == -1)
{
ret = -1; ret = -1;
if(savedError.code==0)
savedError= theError;
}
tBlob = tBlob->theNext; tBlob = tBlob->theNext;
} }
} }
...@@ -406,6 +424,10 @@ NdbConnection::execute(ExecType aTypeOfExec, ...@@ -406,6 +424,10 @@ NdbConnection::execute(ExecType aTypeOfExec,
ndbout << "completed ops: " << n << endl; ndbout << "completed ops: " << n << endl;
} }
#endif #endif
if(savedError.code!=0 && theError.code==4350) // Trans already aborted
theError= savedError;
DBUG_RETURN(ret); DBUG_RETURN(ret);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment