Commit eac727b5 authored by unknown's avatar unknown
Browse files

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).


ndb/src/ndbapi/NdbConnection.cpp:
  In NdbConnection::execute - returning 4350 instead of correct error.
  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 8fddb973
Loading
Loading
Loading
Loading
+24 −2
Original line number Diff line number Diff line
@@ -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;
	      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;
      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);
}