Loading ndb/include/ndbapi/NdbTransaction.hpp +5 −3 Original line number Diff line number Diff line Loading @@ -379,14 +379,16 @@ public: void executeAsynch(ExecType aTypeOfExec, NdbAsynchCallback aCallback, void* anyObject, AbortOption abortOption = AbortOnError); AbortOption abortOption = AbortOnError, int forceSend= 0); #ifndef DOXYGEN_SHOULD_SKIP_DEPRECATED void executeAsynch(::ExecType aTypeOfExec, NdbAsynchCallback aCallback, void* anyObject, ::AbortOption abortOption= ::AbortOnError) ::AbortOption abortOption= ::AbortOnError, int forceSend= 0) { executeAsynch((ExecType)aTypeOfExec, aCallback, anyObject, (AbortOption)abortOption); } (AbortOption)abortOption, forceSend); } #endif #endif /** Loading ndb/src/ndbapi/NdbTransaction.cpp +11 −0 Original line number Diff line number Diff line Loading @@ -694,6 +694,17 @@ NdbTransaction::executeAsynchPrepare( ExecType aTypeOfExec, DBUG_VOID_RETURN; }//NdbTransaction::executeAsynchPrepare() void NdbTransaction::executeAsynch(ExecType aTypeOfExec, NdbAsynchCallback aCallback, void* anyObject, AbortOption abortOption, int forceSend) { executeAsynchPrepare(aTypeOfExec, aCallback, anyObject, abortOption); theNdb->sendPreparedTransactions(forceSend); } void NdbTransaction::close() { theNdb->closeTransaction(this); Loading ndb/test/ndbapi/testNdbApi.cpp +74 −0 Original line number Diff line number Diff line Loading @@ -1234,6 +1234,76 @@ int runScan_4006(NDBT_Context* ctx, NDBT_Step* step){ return result; } static void testExecuteAsynchCallback(int res, NdbTransaction *con, void *data_ptr) { int *res_ptr= (int *)data_ptr; *res_ptr= res; } int runTestExecuteAsynch(NDBT_Context* ctx, NDBT_Step* step){ /* Test that NdbTransaction::executeAsynch() works (BUG#27495). */ int result = NDBT_OK; const NdbDictionary::Table* pTab = ctx->getTab(); Ndb* pNdb = new Ndb(&ctx->m_cluster_connection, "TEST_DB"); if (pNdb == NULL){ ndbout << "pNdb == NULL" << endl; return NDBT_FAILED; } if (pNdb->init(2048)){ ERR(pNdb->getNdbError()); delete pNdb; return NDBT_FAILED; } NdbConnection* pCon = pNdb->startTransaction(); if (pCon == NULL){ ERR(pNdb->getNdbError()); delete pNdb; return NDBT_FAILED; } NdbScanOperation* pOp = pCon->getNdbScanOperation(pTab->getName()); if (pOp == NULL){ ERR(pOp->getNdbError()); pNdb->closeTransaction(pCon); delete pNdb; return NDBT_FAILED; } if (pOp->readTuples() != 0){ ERR(pOp->getNdbError()); pNdb->closeTransaction(pCon); delete pNdb; return NDBT_FAILED; } if (pOp->getValue(NdbDictionary::Column::FRAGMENT) == 0){ ERR(pOp->getNdbError()); pNdb->closeTransaction(pCon); delete pNdb; return NDBT_FAILED; } int res= 42; pCon->executeAsynch(NoCommit, testExecuteAsynchCallback, &res); while(pNdb->pollNdb(100000) == 0) ; if (res != 0){ ERR(pCon->getNdbError()); ndbout << "Error returned from execute: " << res << endl; result= NDBT_FAILED; } pNdb->closeTransaction(pCon); delete pNdb; return result; } template class Vector<NdbScanOperation*>; Loading Loading @@ -1322,6 +1392,10 @@ TESTCASE("Scan_4006", INITIALIZER(runScan_4006); FINALIZER(runClearTable); } TESTCASE("ExecuteAsynch", "Check that executeAsync() works (BUG#27495)\n"){ INITIALIZER(runTestExecuteAsynch); } NDBT_TESTSUITE_END(testNdbApi); int main(int argc, const char** argv){ Loading ndb/test/run-test/daily-basic-tests.txt +4 −0 Original line number Diff line number Diff line Loading @@ -609,6 +609,10 @@ max-time: 500 cmd: testNdbApi args: -n Scan_4006 T1 max-time: 500 cmd: testNdbApi args: -n ExecuteAsynch T1 #max-time: 500 #cmd: testInterpreter #args: T1 Loading Loading
ndb/include/ndbapi/NdbTransaction.hpp +5 −3 Original line number Diff line number Diff line Loading @@ -379,14 +379,16 @@ public: void executeAsynch(ExecType aTypeOfExec, NdbAsynchCallback aCallback, void* anyObject, AbortOption abortOption = AbortOnError); AbortOption abortOption = AbortOnError, int forceSend= 0); #ifndef DOXYGEN_SHOULD_SKIP_DEPRECATED void executeAsynch(::ExecType aTypeOfExec, NdbAsynchCallback aCallback, void* anyObject, ::AbortOption abortOption= ::AbortOnError) ::AbortOption abortOption= ::AbortOnError, int forceSend= 0) { executeAsynch((ExecType)aTypeOfExec, aCallback, anyObject, (AbortOption)abortOption); } (AbortOption)abortOption, forceSend); } #endif #endif /** Loading
ndb/src/ndbapi/NdbTransaction.cpp +11 −0 Original line number Diff line number Diff line Loading @@ -694,6 +694,17 @@ NdbTransaction::executeAsynchPrepare( ExecType aTypeOfExec, DBUG_VOID_RETURN; }//NdbTransaction::executeAsynchPrepare() void NdbTransaction::executeAsynch(ExecType aTypeOfExec, NdbAsynchCallback aCallback, void* anyObject, AbortOption abortOption, int forceSend) { executeAsynchPrepare(aTypeOfExec, aCallback, anyObject, abortOption); theNdb->sendPreparedTransactions(forceSend); } void NdbTransaction::close() { theNdb->closeTransaction(this); Loading
ndb/test/ndbapi/testNdbApi.cpp +74 −0 Original line number Diff line number Diff line Loading @@ -1234,6 +1234,76 @@ int runScan_4006(NDBT_Context* ctx, NDBT_Step* step){ return result; } static void testExecuteAsynchCallback(int res, NdbTransaction *con, void *data_ptr) { int *res_ptr= (int *)data_ptr; *res_ptr= res; } int runTestExecuteAsynch(NDBT_Context* ctx, NDBT_Step* step){ /* Test that NdbTransaction::executeAsynch() works (BUG#27495). */ int result = NDBT_OK; const NdbDictionary::Table* pTab = ctx->getTab(); Ndb* pNdb = new Ndb(&ctx->m_cluster_connection, "TEST_DB"); if (pNdb == NULL){ ndbout << "pNdb == NULL" << endl; return NDBT_FAILED; } if (pNdb->init(2048)){ ERR(pNdb->getNdbError()); delete pNdb; return NDBT_FAILED; } NdbConnection* pCon = pNdb->startTransaction(); if (pCon == NULL){ ERR(pNdb->getNdbError()); delete pNdb; return NDBT_FAILED; } NdbScanOperation* pOp = pCon->getNdbScanOperation(pTab->getName()); if (pOp == NULL){ ERR(pOp->getNdbError()); pNdb->closeTransaction(pCon); delete pNdb; return NDBT_FAILED; } if (pOp->readTuples() != 0){ ERR(pOp->getNdbError()); pNdb->closeTransaction(pCon); delete pNdb; return NDBT_FAILED; } if (pOp->getValue(NdbDictionary::Column::FRAGMENT) == 0){ ERR(pOp->getNdbError()); pNdb->closeTransaction(pCon); delete pNdb; return NDBT_FAILED; } int res= 42; pCon->executeAsynch(NoCommit, testExecuteAsynchCallback, &res); while(pNdb->pollNdb(100000) == 0) ; if (res != 0){ ERR(pCon->getNdbError()); ndbout << "Error returned from execute: " << res << endl; result= NDBT_FAILED; } pNdb->closeTransaction(pCon); delete pNdb; return result; } template class Vector<NdbScanOperation*>; Loading Loading @@ -1322,6 +1392,10 @@ TESTCASE("Scan_4006", INITIALIZER(runScan_4006); FINALIZER(runClearTable); } TESTCASE("ExecuteAsynch", "Check that executeAsync() works (BUG#27495)\n"){ INITIALIZER(runTestExecuteAsynch); } NDBT_TESTSUITE_END(testNdbApi); int main(int argc, const char** argv){ Loading
ndb/test/run-test/daily-basic-tests.txt +4 −0 Original line number Diff line number Diff line Loading @@ -609,6 +609,10 @@ max-time: 500 cmd: testNdbApi args: -n Scan_4006 T1 max-time: 500 cmd: testNdbApi args: -n ExecuteAsynch T1 #max-time: 500 #cmd: testInterpreter #args: T1 Loading