diff options
author | unknown <knielsen@ymer.(none)> | 2007-04-25 15:21:05 +0200 |
---|---|---|
committer | unknown <knielsen@ymer.(none)> | 2007-04-25 15:21:05 +0200 |
commit | 88a10dbaf3ee2d18bde586868863f8347275f552 (patch) | |
tree | b7072f91ad29695dea0496aa070a46e757a17972 /storage/ndb | |
parent | ca532914fde9c426721ddb9881a906b195cca739 (diff) | |
parent | 4ea948c5c959e3df11972236fabfea30e3d6fd0c (diff) | |
download | mariadb-git-88a10dbaf3ee2d18bde586868863f8347275f552.tar.gz |
Merge ymer.(none):/usr/local/mysql/mysql-5.1-telco-gca-bug28073
into ymer.(none):/usr/local/mysql/mysql-5.1-telco-gca
storage/ndb/test/run-test/daily-basic-tests.txt:
Auto merged
Diffstat (limited to 'storage/ndb')
-rw-r--r-- | storage/ndb/include/ndbapi/NdbTransaction.hpp | 8 | ||||
-rw-r--r-- | storage/ndb/src/ndbapi/NdbTransaction.cpp | 11 | ||||
-rw-r--r-- | storage/ndb/test/ndbapi/testNdbApi.cpp | 74 | ||||
-rw-r--r-- | storage/ndb/test/run-test/daily-basic-tests.txt | 4 |
4 files changed, 94 insertions, 3 deletions
diff --git a/storage/ndb/include/ndbapi/NdbTransaction.hpp b/storage/ndb/include/ndbapi/NdbTransaction.hpp index 7c5d02c209e..ffba6f8d34f 100644 --- a/storage/ndb/include/ndbapi/NdbTransaction.hpp +++ b/storage/ndb/include/ndbapi/NdbTransaction.hpp @@ -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 /** diff --git a/storage/ndb/src/ndbapi/NdbTransaction.cpp b/storage/ndb/src/ndbapi/NdbTransaction.cpp index 5e3738823d3..1930c9af1d5 100644 --- a/storage/ndb/src/ndbapi/NdbTransaction.cpp +++ b/storage/ndb/src/ndbapi/NdbTransaction.cpp @@ -697,6 +697,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); diff --git a/storage/ndb/test/ndbapi/testNdbApi.cpp b/storage/ndb/test/ndbapi/testNdbApi.cpp index 39a9c7656c0..77ee32d72ea 100644 --- a/storage/ndb/test/ndbapi/testNdbApi.cpp +++ b/storage/ndb/test/ndbapi/testNdbApi.cpp @@ -1249,6 +1249,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*>; @@ -1342,6 +1412,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){ diff --git a/storage/ndb/test/run-test/daily-basic-tests.txt b/storage/ndb/test/run-test/daily-basic-tests.txt index b1a19ae8b4c..3141e5e2c24 100644 --- a/storage/ndb/test/run-test/daily-basic-tests.txt +++ b/storage/ndb/test/run-test/daily-basic-tests.txt @@ -668,6 +668,10 @@ max-time: 500 cmd: testNdbApi args: -n Bug_WritePartialIgnoreError T1 +max-time: 500 +cmd: testNdbApi +args: -n ExecuteAsynch T1 + #max-time: 500 #cmd: testInterpreter #args: T1 |