summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ndb/src/ndbapi/NdbScanOperation.cpp1
-rw-r--r--ndb/test/src/UtilTransactions.cpp161
2 files changed, 83 insertions, 79 deletions
diff --git a/ndb/src/ndbapi/NdbScanOperation.cpp b/ndb/src/ndbapi/NdbScanOperation.cpp
index ebca7922862..86c174c4545 100644
--- a/ndb/src/ndbapi/NdbScanOperation.cpp
+++ b/ndb/src/ndbapi/NdbScanOperation.cpp
@@ -674,7 +674,6 @@ void NdbScanOperation::closeScan()
if(m_api_receivers_count+m_conf_receivers_count){
// Send close scan
- ndbout_c("sending close %d %d", m_api_receivers_count, m_conf_receivers_count);
send_next_scan(0, true); // Close scan
}
diff --git a/ndb/test/src/UtilTransactions.cpp b/ndb/test/src/UtilTransactions.cpp
index 9f3f1d33587..506356dd140 100644
--- a/ndb/test/src/UtilTransactions.cpp
+++ b/ndb/test/src/UtilTransactions.cpp
@@ -1138,90 +1138,93 @@ UtilTransactions::readRowFromTableAndIndex(Ndb* pNdb,
*/
NdbIndexOperation* pIndexOp= NULL;
NdbIndexScanOperation *pScanOp= NULL;
- {
- void* pOpCheck= NULL;
- if (indexType == NdbDictionary::Index::UniqueHashIndex) {
- pOpCheck= pIndexOp= pTrans1->getNdbIndexOperation(indexName, tab.getName());
- } else {
- pOpCheck= pScanOp= pTrans1->getNdbIndexScanOperation(indexName, tab.getName());
- }
+ NdbOperation *pIOp= 0;
- if (pOpCheck == NULL) {
- ERR(pTrans1->getNdbError());
- goto close_all;
+ bool null_found= false;
+ for(a = 0; a<(int)pIndex->getNoOfColumns(); a++){
+ const NdbDictionary::Column * col = pIndex->getColumn(a);
+
+ if (row.attributeStore(col->getName())->isNULL())
+ {
+ null_found= true;
+ break;
}
}
-
+
+ const char * tabName= tab.getName();
+ if(!null_found)
{
- bool not_ok;
- if (pIndexOp) {
- not_ok = pIndexOp->readTuple() == -1;
+ if (indexType == NdbDictionary::Index::UniqueHashIndex) {
+ pIOp= pIndexOp= pTrans1->getNdbIndexOperation(indexName, tabName);
} else {
- not_ok = (cursor= pScanOp->readTuples()) == 0;
+ pIOp= pScanOp= pTrans1->getNdbIndexScanOperation(indexName, tabName);
}
-
- if( not_ok ) {
+
+ if (pIOp == NULL) {
ERR(pTrans1->getNdbError());
goto close_all;
}
- }
+
+ {
+ bool not_ok;
+ if (pIndexOp) {
+ not_ok = pIndexOp->readTuple() == -1;
+ } else {
+ not_ok = (cursor= pScanOp->readTuples()) == 0;
+ }
+
+ if( not_ok ) {
+ ERR(pTrans1->getNdbError());
+ goto close_all;
+ }
+ }
// Define primary keys for index
#if VERBOSE
- printf("SI: ");
+ printf("SI: ");
#endif
- for(a = 0; a<(int)pIndex->getNoOfColumns(); a++){
- const NdbDictionary::Column * col = pIndex->getColumn(a);
-
- int r;
- if (pIndexOp)
- r = pIndexOp->equal(col->getName(), row.attributeStore(col->getName())->aRef());
- else {
- // setBound not possible for null attributes
+ for(a = 0; a<(int)pIndex->getNoOfColumns(); a++){
+ const NdbDictionary::Column * col = pIndex->getColumn(a);
+
+ int r;
if ( !row.attributeStore(col->getName())->isNULL() ) {
- r = pScanOp->setBound(col->getName(),
- NdbIndexScanOperation::BoundEQ,
- row.attributeStore(col->getName())->aRef());
+ if(pIOp->equal(col->getName(),
+ row.attributeStore(col->getName())->aRef()) != 0){
+ ERR(pTrans1->getNdbError());
+ goto close_all;
+ }
}
- }
- if (r != 0){
- ERR(pTrans1->getNdbError());
- goto close_all;
- }
#if VERBOSE
- printf("%s = %d: ", col->getName(), row.attributeStore(a)->aRef());
+ printf("%s = %d: ", col->getName(), row.attributeStore(a)->aRef());
#endif
- }
+ }
#if VERBOSE
- printf("\n");
+ printf("\n");
#endif
-
- // Read all attributes
+
+ // Read all attributes
#if VERBOSE
- printf("Reading %u attributes: ", tab.getNoOfColumns());
+ printf("Reading %u attributes: ", tab.getNoOfColumns());
#endif
- for(a = 0; a<tab.getNoOfColumns(); a++){
- void* pCheck;
-
- if (pIndexOp)
- pCheck= indexRow.attributeStore(a)=
- pIndexOp->getValue(tab.getColumn(a)->getName());
- else
- pCheck= indexRow.attributeStore(a)=
- pScanOp->getValue(tab.getColumn(a)->getName());
-
- if(pCheck == NULL) {
- ERR(pTrans1->getNdbError());
- goto close_all;
- }
+ for(a = 0; a<tab.getNoOfColumns(); a++){
+ void* pCheck;
+
+ pCheck= indexRow.attributeStore(a)=
+ pIOp->getValue(tab.getColumn(a)->getName());
+
+ if(pCheck == NULL) {
+ ERR(pTrans1->getNdbError());
+ goto close_all;
+ }
#if VERBOSE
- printf("%s ", tab.getColumn(a)->getName());
+ printf("%s ", tab.getColumn(a)->getName());
#endif
+ }
}
#if VERBOSE
printf("\n");
#endif
-
+
check = pTrans1->execute(Commit);
if( check == -1 ) {
const NdbError err = pTrans1->getNdbError();
@@ -1238,41 +1241,43 @@ UtilTransactions::readRowFromTableAndIndex(Ndb* pNdb,
ndbout << "row: " << row.c_str().c_str() << endl;
goto close_all;
}
-
+
/**
* Compare the two rows
*/
- if (pScanOp) {
- if (cursor->nextResult() != 0){
- const NdbError err = pTrans1->getNdbError();
- ERR(err);
- ndbout << "Error when comparing records - index op next_result missing" << endl;
- ndbout << "row: " << row.c_str().c_str() << endl;
- goto close_all;
+ if(!null_found){
+ if (pScanOp) {
+ if (cursor->nextResult() != 0){
+ const NdbError err = pTrans1->getNdbError();
+ ERR(err);
+ ndbout << "Error when comparing records - index op next_result missing" << endl;
+ ndbout << "row: " << row.c_str().c_str() << endl;
+ goto close_all;
+ }
}
- }
- if (!(tabRow.c_str() == indexRow.c_str())){
- ndbout << "Error when comapring records" << endl;
- ndbout << " tabRow: \n" << tabRow.c_str().c_str() << endl;
- ndbout << " indexRow: \n" << indexRow.c_str().c_str() << endl;
- goto close_all;
- }
- if (pScanOp) {
- if (cursor->nextResult() == 0){
- ndbout << "Error when comparing records - index op next_result to many" << endl;
- ndbout << "row: " << row.c_str().c_str() << endl;
+ if (!(tabRow.c_str() == indexRow.c_str())){
+ ndbout << "Error when comapring records" << endl;
+ ndbout << " tabRow: \n" << tabRow.c_str().c_str() << endl;
+ ndbout << " indexRow: \n" << indexRow.c_str().c_str() << endl;
goto close_all;
}
+ if (pScanOp) {
+ if (cursor->nextResult() == 0){
+ ndbout << "Error when comparing records - index op next_result to many" << endl;
+ ndbout << "row: " << row.c_str().c_str() << endl;
+ goto close_all;
+ }
+ }
}
return_code= NDBT_OK;
goto close_all;
}
- close_all:
+close_all:
if (cursor)
cursor->close();
if (pTrans1)
pNdb->closeTransaction(pTrans1);
-
+
return return_code;
}