Loading ndb/src/kernel/blocks/dbacc/DbaccMain.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -4849,16 +4849,16 @@ Uint32 Dbacc::executeNextOperation(Signal* signal) else if(operationRecPtr.p->operation == ZWRITE) { jam(); operationRecPtr.p->operation = ZINSERT; operationRecPtr.p->operation = ZUPDATE; if (operationRecPtr.p->prevParallelQue != RNIL) { OperationrecPtr prevOpPtr; jam(); prevOpPtr.i = operationRecPtr.p->prevParallelQue; ptrCheckGuard(prevOpPtr, coprecsize, operationrec); if (prevOpPtr.p->operation != ZDELETE) if (prevOpPtr.p->operation == ZDELETE) { jam(); operationRecPtr.p->operation = ZUPDATE; operationRecPtr.p->operation = ZINSERT; } } } Loading ndb/test/include/HugoOperations.hpp +4 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,10 @@ public: int numRecords = 1, int updatesValue = 0); int pkWritePartialRecord(Ndb*, int recordNo, int numRecords = 1); int pkReadRecord(Ndb*, int recordNo, int numRecords = 1, Loading ndb/test/ndbapi/testNdbApi.cpp +25 −3 Original line number Diff line number Diff line Loading @@ -1037,7 +1037,7 @@ int runCheckGetNdbErrorOperation(NDBT_Context* ctx, NDBT_Step* step){ return result; } #define C2(x) { int _x= (x); if(_x == 0) return NDBT_FAILED; } #define C2(x) { int _x= (x); if(_x == 0){ ndbout << "line: " << __LINE__ << endl; return NDBT_FAILED;} } int runBug_11133(NDBT_Context* ctx, NDBT_Step* step){ int result = NDBT_OK; Loading @@ -1046,7 +1046,6 @@ int runBug_11133(NDBT_Context* ctx, NDBT_Step* step){ HugoOperations hugoOps(*pTab); Ndb* pNdb = GETNDB(step); C2(hugoOps.startTransaction(pNdb) == 0); C2(hugoOps.pkInsertRecord(pNdb, 0, 1) == 0); C2(hugoOps.execute_NoCommit(pNdb) == 0); Loading Loading @@ -1098,7 +1097,7 @@ int runBug_11133(NDBT_Context* ctx, NDBT_Step* step){ C2(hugoOps.pkInsertRecord(pNdb, 0, 1) == 0); C2(hugoOps.execute_NoCommit(pNdb) == 0); C2(hugoOps2.startTransaction(&ndb2) == 0); C2(hugoOps2.pkWriteRecord(&ndb2, 0, 1) == 0); C2(hugoOps2.pkWritePartialRecord(&ndb2, 0) == 0); C2(hugoOps2.execute_async(&ndb2, NdbTransaction::NoCommit) == 0); C2(hugoOps.execute_Commit(pNdb) == 0); C2(hugoOps2.wait_async(&ndb2) == 0); Loading @@ -1113,6 +1112,29 @@ int runBug_11133(NDBT_Context* ctx, NDBT_Step* step){ C2(hugoOps2.execute_async(&ndb2, NdbTransaction::NoCommit) == 0); C2(hugoOps.execute_Commit(pNdb) == 0); C2(hugoOps2.wait_async(&ndb2) == 0); C2(hugoOps2.execute_Commit(pNdb) == 0); C2(hugoOps.closeTransaction(pNdb) == 0); C2(hugoOps2.closeTransaction(&ndb2) == 0); C2(hugoOps.startTransaction(pNdb) == 0); C2(hugoOps.pkUpdateRecord(pNdb, 0, 1) == 0); C2(hugoOps.execute_NoCommit(pNdb) == 0); C2(hugoOps2.startTransaction(&ndb2) == 0); C2(hugoOps2.pkWritePartialRecord(&ndb2, 0) == 0); C2(hugoOps2.execute_async(&ndb2, NdbTransaction::NoCommit) == 0); C2(hugoOps.execute_Commit(pNdb) == 0); C2(hugoOps2.wait_async(&ndb2) == 0); C2(hugoOps.closeTransaction(pNdb) == 0); C2(hugoOps2.closeTransaction(&ndb2) == 0); C2(hugoOps.startTransaction(pNdb) == 0); C2(hugoOps.pkDeleteRecord(pNdb, 0, 1) == 0); C2(hugoOps.execute_NoCommit(pNdb) == 0); C2(hugoOps2.startTransaction(&ndb2) == 0); C2(hugoOps2.pkWritePartialRecord(&ndb2, 0) == 0); C2(hugoOps2.execute_async(&ndb2, NdbTransaction::NoCommit) == 0); C2(hugoOps.execute_Commit(pNdb) == 0); C2(hugoOps2.wait_async(&ndb2) != 0); C2(hugoOps.closeTransaction(pNdb) == 0); C2(hugoOps2.closeTransaction(&ndb2) == 0); Loading ndb/test/src/HugoOperations.cpp +41 −1 Original line number Diff line number Diff line Loading @@ -267,6 +267,37 @@ int HugoOperations::pkWriteRecord(Ndb* pNdb, return NDBT_OK; } int HugoOperations::pkWritePartialRecord(Ndb* pNdb, int recordNo, int numRecords){ int a, check; for(int r=0; r < numRecords; r++){ NdbOperation* pOp = pTrans->getNdbOperation(tab.getName()); if (pOp == NULL) { ERR(pTrans->getNdbError()); return NDBT_FAILED; } check = pOp->writeTuple(); if( check == -1 ) { ERR(pTrans->getNdbError()); return NDBT_FAILED; } // Define primary keys for(a = 0; a<tab.getNoOfColumns(); a++){ if (tab.getColumn(a)->getPrimaryKey() == true){ if(equalForAttr(pOp, a, r+recordNo) != 0){ ERR(pTrans->getNdbError()); return NDBT_FAILED; } } } } return NDBT_OK; } int HugoOperations::pkDeleteRecord(Ndb* pNdb, int recordNo, int numRecords){ Loading Loading @@ -419,7 +450,14 @@ HugoOperations::callback(int res, NdbTransaction* pCon) { assert(pCon == pTrans); m_async_reply= 1; m_async_return= res; if(res) { m_async_return = pCon->getNdbError().code; } else { m_async_return = 0; } } int Loading @@ -444,6 +482,8 @@ HugoOperations::wait_async(Ndb* pNdb, int timeout) if(m_async_reply) { if(m_async_return) ndbout << "ERROR: " << pNdb->getNdbError(m_async_return) << endl; return m_async_return; } ndbout_c("wait returned nothing..."); Loading Loading
ndb/src/kernel/blocks/dbacc/DbaccMain.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -4849,16 +4849,16 @@ Uint32 Dbacc::executeNextOperation(Signal* signal) else if(operationRecPtr.p->operation == ZWRITE) { jam(); operationRecPtr.p->operation = ZINSERT; operationRecPtr.p->operation = ZUPDATE; if (operationRecPtr.p->prevParallelQue != RNIL) { OperationrecPtr prevOpPtr; jam(); prevOpPtr.i = operationRecPtr.p->prevParallelQue; ptrCheckGuard(prevOpPtr, coprecsize, operationrec); if (prevOpPtr.p->operation != ZDELETE) if (prevOpPtr.p->operation == ZDELETE) { jam(); operationRecPtr.p->operation = ZUPDATE; operationRecPtr.p->operation = ZINSERT; } } } Loading
ndb/test/include/HugoOperations.hpp +4 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,10 @@ public: int numRecords = 1, int updatesValue = 0); int pkWritePartialRecord(Ndb*, int recordNo, int numRecords = 1); int pkReadRecord(Ndb*, int recordNo, int numRecords = 1, Loading
ndb/test/ndbapi/testNdbApi.cpp +25 −3 Original line number Diff line number Diff line Loading @@ -1037,7 +1037,7 @@ int runCheckGetNdbErrorOperation(NDBT_Context* ctx, NDBT_Step* step){ return result; } #define C2(x) { int _x= (x); if(_x == 0) return NDBT_FAILED; } #define C2(x) { int _x= (x); if(_x == 0){ ndbout << "line: " << __LINE__ << endl; return NDBT_FAILED;} } int runBug_11133(NDBT_Context* ctx, NDBT_Step* step){ int result = NDBT_OK; Loading @@ -1046,7 +1046,6 @@ int runBug_11133(NDBT_Context* ctx, NDBT_Step* step){ HugoOperations hugoOps(*pTab); Ndb* pNdb = GETNDB(step); C2(hugoOps.startTransaction(pNdb) == 0); C2(hugoOps.pkInsertRecord(pNdb, 0, 1) == 0); C2(hugoOps.execute_NoCommit(pNdb) == 0); Loading Loading @@ -1098,7 +1097,7 @@ int runBug_11133(NDBT_Context* ctx, NDBT_Step* step){ C2(hugoOps.pkInsertRecord(pNdb, 0, 1) == 0); C2(hugoOps.execute_NoCommit(pNdb) == 0); C2(hugoOps2.startTransaction(&ndb2) == 0); C2(hugoOps2.pkWriteRecord(&ndb2, 0, 1) == 0); C2(hugoOps2.pkWritePartialRecord(&ndb2, 0) == 0); C2(hugoOps2.execute_async(&ndb2, NdbTransaction::NoCommit) == 0); C2(hugoOps.execute_Commit(pNdb) == 0); C2(hugoOps2.wait_async(&ndb2) == 0); Loading @@ -1113,6 +1112,29 @@ int runBug_11133(NDBT_Context* ctx, NDBT_Step* step){ C2(hugoOps2.execute_async(&ndb2, NdbTransaction::NoCommit) == 0); C2(hugoOps.execute_Commit(pNdb) == 0); C2(hugoOps2.wait_async(&ndb2) == 0); C2(hugoOps2.execute_Commit(pNdb) == 0); C2(hugoOps.closeTransaction(pNdb) == 0); C2(hugoOps2.closeTransaction(&ndb2) == 0); C2(hugoOps.startTransaction(pNdb) == 0); C2(hugoOps.pkUpdateRecord(pNdb, 0, 1) == 0); C2(hugoOps.execute_NoCommit(pNdb) == 0); C2(hugoOps2.startTransaction(&ndb2) == 0); C2(hugoOps2.pkWritePartialRecord(&ndb2, 0) == 0); C2(hugoOps2.execute_async(&ndb2, NdbTransaction::NoCommit) == 0); C2(hugoOps.execute_Commit(pNdb) == 0); C2(hugoOps2.wait_async(&ndb2) == 0); C2(hugoOps.closeTransaction(pNdb) == 0); C2(hugoOps2.closeTransaction(&ndb2) == 0); C2(hugoOps.startTransaction(pNdb) == 0); C2(hugoOps.pkDeleteRecord(pNdb, 0, 1) == 0); C2(hugoOps.execute_NoCommit(pNdb) == 0); C2(hugoOps2.startTransaction(&ndb2) == 0); C2(hugoOps2.pkWritePartialRecord(&ndb2, 0) == 0); C2(hugoOps2.execute_async(&ndb2, NdbTransaction::NoCommit) == 0); C2(hugoOps.execute_Commit(pNdb) == 0); C2(hugoOps2.wait_async(&ndb2) != 0); C2(hugoOps.closeTransaction(pNdb) == 0); C2(hugoOps2.closeTransaction(&ndb2) == 0); Loading
ndb/test/src/HugoOperations.cpp +41 −1 Original line number Diff line number Diff line Loading @@ -267,6 +267,37 @@ int HugoOperations::pkWriteRecord(Ndb* pNdb, return NDBT_OK; } int HugoOperations::pkWritePartialRecord(Ndb* pNdb, int recordNo, int numRecords){ int a, check; for(int r=0; r < numRecords; r++){ NdbOperation* pOp = pTrans->getNdbOperation(tab.getName()); if (pOp == NULL) { ERR(pTrans->getNdbError()); return NDBT_FAILED; } check = pOp->writeTuple(); if( check == -1 ) { ERR(pTrans->getNdbError()); return NDBT_FAILED; } // Define primary keys for(a = 0; a<tab.getNoOfColumns(); a++){ if (tab.getColumn(a)->getPrimaryKey() == true){ if(equalForAttr(pOp, a, r+recordNo) != 0){ ERR(pTrans->getNdbError()); return NDBT_FAILED; } } } } return NDBT_OK; } int HugoOperations::pkDeleteRecord(Ndb* pNdb, int recordNo, int numRecords){ Loading Loading @@ -419,7 +450,14 @@ HugoOperations::callback(int res, NdbTransaction* pCon) { assert(pCon == pTrans); m_async_reply= 1; m_async_return= res; if(res) { m_async_return = pCon->getNdbError().code; } else { m_async_return = 0; } } int Loading @@ -444,6 +482,8 @@ HugoOperations::wait_async(Ndb* pNdb, int timeout) if(m_async_reply) { if(m_async_return) ndbout << "ERROR: " << pNdb->getNdbError(m_async_return) << endl; return m_async_return; } ndbout_c("wait returned nothing..."); Loading