summaryrefslogtreecommitdiff
path: root/storage/ndb
diff options
context:
space:
mode:
authorunknown <knielsen@ymer.(none)>2007-04-25 15:21:05 +0200
committerunknown <knielsen@ymer.(none)>2007-04-25 15:21:05 +0200
commit88a10dbaf3ee2d18bde586868863f8347275f552 (patch)
treeb7072f91ad29695dea0496aa070a46e757a17972 /storage/ndb
parentca532914fde9c426721ddb9881a906b195cca739 (diff)
parent4ea948c5c959e3df11972236fabfea30e3d6fd0c (diff)
downloadmariadb-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.hpp8
-rw-r--r--storage/ndb/src/ndbapi/NdbTransaction.cpp11
-rw-r--r--storage/ndb/test/ndbapi/testNdbApi.cpp74
-rw-r--r--storage/ndb/test/run-test/daily-basic-tests.txt4
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