diff options
author | unknown <pekka@mysql.com> | 2004-11-03 20:21:56 +0100 |
---|---|---|
committer | unknown <pekka@mysql.com> | 2004-11-03 20:21:56 +0100 |
commit | 35ded492637a44584dafda0a7b76dd209b6e8c69 (patch) | |
tree | cabc4b874755bffb1572539bbbbb4a940175e625 /ndb/src/ndbapi | |
parent | dc1e7edb7fdd5b8d8273110e5d8cba34ae1b4f95 (diff) | |
download | mariadb-git-35ded492637a44584dafda0a7b76dd209b6e8c69.tar.gz |
NDB blobs - try to handle insert-update-delete under autocommit=0
ndb/src/ndbapi/ndberror.c:
826 error text
mysql-test/r/ndb_blob.result:
result displayed error
mysql-test/t/ndb_blob.test:
result displayed error
ndb/src/ndbapi/NdbBlob.cpp:
update head+inline earlier
ndb/src/ndbapi/NdbOperationExec.cpp:
blob IgnoreError bug
ndb/test/ndbapi/testBlobs.cpp:
tried to set non-nullable to null, causing a complex abort case
ndb/src/ndbapi/NdbConnection.cpp:
prepared ops CAN be left in complex abort
Diffstat (limited to 'ndb/src/ndbapi')
-rw-r--r-- | ndb/src/ndbapi/NdbBlob.cpp | 12 | ||||
-rw-r--r-- | ndb/src/ndbapi/NdbConnection.cpp | 5 | ||||
-rw-r--r-- | ndb/src/ndbapi/NdbOperationExec.cpp | 2 | ||||
-rw-r--r-- | ndb/src/ndbapi/ndberror.c | 2 |
4 files changed, 19 insertions, 2 deletions
diff --git a/ndb/src/ndbapi/NdbBlob.cpp b/ndb/src/ndbapi/NdbBlob.cpp index 9d21304939a..53c0a0e07f9 100644 --- a/ndb/src/ndbapi/NdbBlob.cpp +++ b/ndb/src/ndbapi/NdbBlob.cpp @@ -1428,6 +1428,18 @@ NdbBlob::postExecute(ExecType anExecType) if (invokeActiveHook() == -1) return -1; } + if (anExecType == NoCommit && theHeadInlineUpdateFlag) { + NdbOperation* tOp = theNdbCon->getNdbOperation(theTable); + if (tOp == NULL || + tOp->updateTuple() == -1 || + setTableKeyValue(tOp) == -1 || + setHeadInlineValue(tOp) == -1) { + setErrorCode(ErrAbort); + return -1; + } + tOp->m_abortOption = AbortOnError; + DBG("added op to update head+inline"); + } DBG("postExecute [out]"); return 0; } diff --git a/ndb/src/ndbapi/NdbConnection.cpp b/ndb/src/ndbapi/NdbConnection.cpp index c21a85fd24d..4f6468eb4ae 100644 --- a/ndb/src/ndbapi/NdbConnection.cpp +++ b/ndb/src/ndbapi/NdbConnection.cpp @@ -340,7 +340,12 @@ NdbConnection::execute(ExecType aTypeOfExec, if (executeNoBlobs(tExecType, abortOption, forceSend) == -1) ret = -1; +#ifndef VM_TRACE + // can happen in complex abort cases + theFirstOpInList = theLastOpInList = NULL; +#else assert(theFirstOpInList == NULL && theLastOpInList == NULL); +#endif { NdbOperation* tOp = theCompletedFirstOp; diff --git a/ndb/src/ndbapi/NdbOperationExec.cpp b/ndb/src/ndbapi/NdbOperationExec.cpp index 6d7a3817e04..13664794dcd 100644 --- a/ndb/src/ndbapi/NdbOperationExec.cpp +++ b/ndb/src/ndbapi/NdbOperationExec.cpp @@ -552,7 +552,7 @@ NdbOperation::receiveTCKEYREF( NdbApiSignal* aSignal) theNdbCon->theReturnStatus = NdbConnection::ReturnFailure; theError.code = aSignal->readData(4); - theNdbCon->setOperationErrorCodeAbort(aSignal->readData(4), ao); + theNdbCon->setOperationErrorCodeAbort(aSignal->readData(4), m_abortOption); if(theOperationType != ReadRequest || !theSimpleIndicator) // not simple read return theNdbCon->OpCompleteFailure(ao, m_abortOption != IgnoreError); diff --git a/ndb/src/ndbapi/ndberror.c b/ndb/src/ndbapi/ndberror.c index 20661b89517..17a80082023 100644 --- a/ndb/src/ndbapi/ndberror.c +++ b/ndb/src/ndbapi/ndberror.c @@ -150,7 +150,7 @@ ErrorBundle ErrorCodes[] = { { 623, IS, "623" }, { 624, IS, "624" }, { 625, IS, "Out of memory in Ndb Kernel, index part" }, - { 826, IS, "826" }, + { 826, IS, "Too many tables and attributes (increase MaxNoOfAttributes)" }, { 827, IS, "Out of memory in Ndb Kernel, data part" }, { 832, IS, "832" }, |