summaryrefslogtreecommitdiff
path: root/ndb/tools/select_count.cpp
diff options
context:
space:
mode:
authorunknown <tomas@poseidon.ndb.mysql.com>2004-06-03 18:25:46 +0000
committerunknown <tomas@poseidon.ndb.mysql.com>2004-06-03 18:25:46 +0000
commit25d66d30fa9681be3eaa25e7ef1b0f6cb87d8997 (patch)
treec3976a177e78be65149611ef9a02e6baa1c9d4d9 /ndb/tools/select_count.cpp
parent06f230b2b9400a07b171b52a1c09ada9990352f7 (diff)
downloadmariadb-git-25d66d30fa9681be3eaa25e7ef1b0f6cb87d8997.tar.gz
ndb make updates
ndb/src/common/portlib/NdbCondition.c: Rename: ndb/src/common/portlib/unix/NdbCondition.c -> ndb/src/common/portlib/NdbCondition.c ndb/src/common/portlib/NdbDaemon.c: Rename: ndb/src/common/portlib/unix/NdbDaemon.c -> ndb/src/common/portlib/NdbDaemon.c ndb/src/common/portlib/NdbEnv.c: Rename: ndb/src/common/portlib/unix/NdbEnv.c -> ndb/src/common/portlib/NdbEnv.c ndb/src/common/portlib/NdbHost.c: Rename: ndb/src/common/portlib/unix/NdbHost.c -> ndb/src/common/portlib/NdbHost.c ndb/src/common/portlib/NdbMem.c: Rename: ndb/src/common/portlib/unix/NdbMem.c -> ndb/src/common/portlib/NdbMem.c ndb/src/common/portlib/NdbMutex.c: Rename: ndb/src/common/portlib/unix/NdbMutex.c -> ndb/src/common/portlib/NdbMutex.c ndb/src/common/portlib/NdbSleep.c: Rename: ndb/src/common/portlib/unix/NdbSleep.c -> ndb/src/common/portlib/NdbSleep.c ndb/src/common/portlib/NdbTCP.c: Rename: ndb/src/common/portlib/unix/NdbTCP.c -> ndb/src/common/portlib/NdbTCP.c ndb/src/common/portlib/NdbThread.c: Rename: ndb/src/common/portlib/unix/NdbThread.c -> ndb/src/common/portlib/NdbThread.c ndb/src/common/portlib/NdbTick.c: Rename: ndb/src/common/portlib/unix/NdbTick.c -> ndb/src/common/portlib/NdbTick.c BitKeeper/deleted/.del-Makefile.am~4d9c81a4353f3ee8: Delete: ndb/src/common/portlib/unix/Makefile.am ndb/src/common/portlib/old_dirs/unix/Makefile_old: mvdir ndb/src/common/portlib/old_dirs/win32/Makefile: mvdir ndb/src/common/portlib/old_dirs/win32/NdbCondition.c: mvdir ndb/src/common/portlib/old_dirs/win32/NdbDaemon.c: mvdir ndb/src/common/portlib/old_dirs/win32/NdbEnv.c: mvdir ndb/src/common/portlib/old_dirs/win32/NdbHost.c: mvdir ndb/src/common/portlib/old_dirs/win32/NdbMem.c: mvdir ndb/src/common/portlib/old_dirs/win32/NdbMutex.c: mvdir ndb/src/common/portlib/old_dirs/win32/NdbSleep.c: mvdir ndb/src/common/portlib/old_dirs/win32/NdbTCP.c: mvdir ndb/src/common/portlib/old_dirs/win32/NdbThread.c: mvdir ndb/src/common/portlib/old_dirs/win32/NdbTick.c: mvdir ndb/src/common/portlib/old_dirs/ose/Makefile: mvdir ndb/src/common/portlib/old_dirs/ose/NdbCondition.c: mvdir ndb/src/common/portlib/old_dirs/ose/NdbConditionOSE.h: mvdir ndb/src/common/portlib/old_dirs/ose/NdbEnv.c: mvdir ndb/src/common/portlib/old_dirs/ose/NdbHost.c: mvdir ndb/src/common/portlib/old_dirs/ose/NdbMem.c: mvdir ndb/src/common/portlib/old_dirs/ose/NdbMem_SoftOse.cpp: mvdir ndb/src/common/portlib/old_dirs/ose/NdbMutex.c: mvdir ndb/src/common/portlib/old_dirs/ose/NdbOut.cpp: mvdir ndb/src/common/portlib/old_dirs/ose/NdbSleep.c: mvdir ndb/src/common/portlib/old_dirs/ose/NdbTCP.c: mvdir ndb/src/common/portlib/old_dirs/ose/NdbThread.c: mvdir ndb/src/common/portlib/old_dirs/ose/NdbTick.c: mvdir ndb/src/common/portlib/memtest.c: Rename: ndb/src/common/portlib/memtest/memtest.c -> ndb/src/common/portlib/memtest.c ndb/src/common/portlib/munmaptest.cpp: Rename: ndb/src/common/portlib/memtest/munmaptest/munmaptest.cpp -> ndb/src/common/portlib/munmaptest.cpp ndb/src/common/portlib/mmslist.cpp: Rename: ndb/src/common/portlib/mmstest/mmslist.cpp -> ndb/src/common/portlib/mmslist.cpp ndb/src/common/portlib/mmstest.cpp: Rename: ndb/src/common/portlib/mmstest/mmstest.cpp -> ndb/src/common/portlib/mmstest.cpp ndb/src/common/portlib/old_dirs/memtest/Makefile: mvdir ndb/src/common/portlib/old_dirs/memtest/munmaptest/Makefile: mvdir ndb/src/common/portlib/NdbPortLibTest.cpp: Rename: ndb/src/common/portlib/test/NdbPortLibTest.cpp -> ndb/src/common/portlib/NdbPortLibTest.cpp ndb/src/common/portlib/old_dirs/test/Makefile: mvdir
Diffstat (limited to 'ndb/tools/select_count.cpp')
-rw-r--r--ndb/tools/select_count.cpp115
1 files changed, 112 insertions, 3 deletions
diff --git a/ndb/tools/select_count.cpp b/ndb/tools/select_count.cpp
index b1513ad4135..cae91feb378 100644
--- a/ndb/tools/select_count.cpp
+++ b/ndb/tools/select_count.cpp
@@ -26,6 +26,12 @@
#include <getarg.h>
#include <UtilTransactions.hpp>
+static int
+select_count(Ndb* pNdb, const NdbDictionary::Table* pTab,
+ int parallelism,
+ int* count_rows,
+ UtilTransactions::ScanLock lock,
+ NdbConnection* pBuddyTrans=0);
int main(int argc, const char** argv){
const char* _dbname = "TEST_DB";
@@ -75,9 +81,8 @@ int main(int argc, const char** argv){
}
int rows = 0;
- UtilTransactions utilTrans(*pTab);
- if (utilTrans.selectCount(&MyNdb, _parallelism, &rows,
- (UtilTransactions::ScanLock)_lock) != 0){
+ if (select_count(&MyNdb, pTab, _parallelism, &rows,
+ (UtilTransactions::ScanLock)_lock) != 0){
return NDBT_ProgramExit(NDBT_FAILED);
}
@@ -86,5 +91,109 @@ int main(int argc, const char** argv){
return NDBT_ProgramExit(NDBT_OK);
}
+int
+select_count(Ndb* pNdb, const NdbDictionary::Table* pTab,
+ int parallelism,
+ int* count_rows,
+ UtilTransactions::ScanLock lock,
+ NdbConnection* pBuddyTrans){
+
+ int retryAttempt = 0;
+ const int retryMax = 100;
+ int check;
+ NdbConnection *pTrans;
+ NdbOperation *pOp;
+
+ while (true){
+
+ if (retryAttempt >= retryMax){
+ g_info << "ERROR: has retried this operation " << retryAttempt
+ << " times, failing!" << endl;
+ return NDBT_FAILED;
+ }
+
+ pTrans = pNdb->hupp(pBuddyTrans);
+ if (pTrans == NULL) {
+ const NdbError err = pNdb->getNdbError();
+
+ if (err.status == NdbError::TemporaryError){
+ NdbSleep_MilliSleep(50);
+ retryAttempt++;
+ continue;
+ }
+ ERR(err);
+ return NDBT_FAILED;
+ }
+ pOp = pTrans->getNdbOperation(pTab->getName());
+ if (pOp == NULL) {
+ ERR(pTrans->getNdbError());
+ pNdb->closeTransaction(pTrans);
+ return NDBT_FAILED;
+ }
+
+ switch(lock){
+ case UtilTransactions::SL_ReadHold:
+ check = pOp->openScanReadHoldLock(parallelism);
+ break;
+ case UtilTransactions::SL_Exclusive:
+ check = pOp->openScanExclusive(parallelism);
+ break;
+ case UtilTransactions::SL_Read:
+ default:
+ check = pOp->openScanRead(parallelism);
+ }
+
+ if( check == -1 ) {
+ ERR(pTrans->getNdbError());
+ pNdb->closeTransaction(pTrans);
+ return NDBT_FAILED;
+ }
+
+ check = pOp->interpret_exit_ok();
+ if( check == -1 ) {
+ ERR(pTrans->getNdbError());
+ pNdb->closeTransaction(pTrans);
+ return NDBT_FAILED;
+ }
+
+ check = pTrans->executeScan();
+ if( check == -1 ) {
+ ERR(pTrans->getNdbError());
+ pNdb->closeTransaction(pTrans);
+ return NDBT_FAILED;
+ }
+
+ int eof;
+ int rows = 0;
+ eof = pTrans->nextScanResult();
+
+ while(eof == 0){
+ rows++;
+ eof = pTrans->nextScanResult();
+ }
+ if (eof == -1) {
+ const NdbError err = pTrans->getNdbError();
+
+ if (err.status == NdbError::TemporaryError){
+ pNdb->closeTransaction(pTrans);
+ NdbSleep_MilliSleep(50);
+ retryAttempt++;
+ continue;
+ }
+ ERR(err);
+ pNdb->closeTransaction(pTrans);
+ return NDBT_FAILED;
+ }
+
+ pNdb->closeTransaction(pTrans);
+
+ if (count_rows != NULL){
+ *count_rows = rows;
+ }
+
+ return NDBT_OK;
+ }
+ return NDBT_FAILED;
+}