summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <jonas@perch.ndb.mysql.com>2007-05-07 13:48:27 +0200
committerunknown <jonas@perch.ndb.mysql.com>2007-05-07 13:48:27 +0200
commita33d5e1755c9b6dc6839632240adf3454fa959f8 (patch)
treece68002538323f0f65c37c69a0f1aef78db6fc04
parent764e010e8cfd408c1e23fa5f1973b51c01c36a7d (diff)
downloadmariadb-git-a33d5e1755c9b6dc6839632240adf3454fa959f8.tar.gz
ndb - bug#28276
Fix DeleteRead in multi-operation Dont use setup_read, as it will (correctly) find that tuple is deleted storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp: Fix multi-op DeleteRead storage/ndb/test/ndbapi/testBasic.cpp: Fix multi-op DeleteRead
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp21
-rw-r--r--storage/ndb/test/ndbapi/testBasic.cpp36
2 files changed, 36 insertions, 21 deletions
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp
index 69b2d6d116e..c657feb6f95 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp
@@ -1491,6 +1491,7 @@ int Dbtup::handleDeleteReq(Signal* signal,
goto error;
}
memcpy(dst, org, regTabPtr->total_rec_size << 2);
+ req_struct->m_tuple_ptr = (Tuple_header*)dst;
}
else
{
@@ -1528,18 +1529,18 @@ int Dbtup::handleDeleteReq(Signal* signal,
return 0;
}
- if (setup_read(req_struct, regOperPtr, regFragPtr, regTabPtr, disk))
+ if (regTabPtr->need_expand(disk))
+ prepare_read(req_struct, regTabPtr, disk);
+
+ Uint32 RlogSize;
+ int ret= handleReadReq(signal, regOperPtr, regTabPtr, req_struct);
+ if (ret == 0 && (RlogSize= req_struct->log_size))
{
- Uint32 RlogSize;
- int ret= handleReadReq(signal, regOperPtr, regTabPtr, req_struct);
- if (ret == 0 && (RlogSize= req_struct->log_size))
- {
- jam();
- sendLogAttrinfo(signal, RlogSize, regOperPtr);
- }
- return ret;
+ jam();
+ sendLogAttrinfo(signal, RlogSize, regOperPtr);
}
-
+ return ret;
+
error:
tupkeyErrorLab(signal);
return -1;
diff --git a/storage/ndb/test/ndbapi/testBasic.cpp b/storage/ndb/test/ndbapi/testBasic.cpp
index 44c3d023169..838ab8a1997 100644
--- a/storage/ndb/test/ndbapi/testBasic.cpp
+++ b/storage/ndb/test/ndbapi/testBasic.cpp
@@ -1290,17 +1290,7 @@ runDeleteRead(NDBT_Context* ctx, NDBT_Step* step){
NdbTransaction* pTrans = pNdb->startTransaction();
NdbOperation* pOp = pTrans->getNdbOperation(tab->getName());
pOp->deleteTuple();
- for(a = 0; a<tab->getNoOfColumns(); a++)
- {
- if (tab->getColumn(a)->getPrimaryKey() == true)
- {
- if(tmp.equalForAttr(pOp, a, 0) != 0)
- {
- ERR(pTrans->getNdbError());
- return NDBT_FAILED;
- }
- }
- }
+ tmp.equalForRow(pOp, loops);
// Define attributes to read
for(a = 0; a<tab->getNoOfColumns(); a++)
@@ -1313,6 +1303,30 @@ runDeleteRead(NDBT_Context* ctx, NDBT_Step* step){
pTrans->execute(Commit);
pTrans->close();
+
+ pTrans = pNdb->startTransaction();
+ pOp = pTrans->getNdbOperation(tab->getName());
+ pOp->insertTuple();
+ tmp.setValues(pOp, loops, 0);
+
+ pOp = pTrans->getNdbOperation(tab->getName());
+ pOp->deleteTuple();
+ tmp.equalForRow(pOp, loops);
+ for(a = 0; a<tab->getNoOfColumns(); a++)
+ {
+ if((row.attributeStore(a) = pOp->getValue(tab->getColumn(a)->getName())) == 0)
+ {
+ ERR(pTrans->getNdbError());
+ return NDBT_FAILED;
+ }
+ }
+ if (pTrans->execute(Commit) != 0)
+ {
+ ERR(pTrans->getNdbError());
+ return NDBT_FAILED;
+ }
+
+ pTrans->close();
}
return NDBT_OK;