mirror of
https://github.com/MariaDB/server.git
synced 2025-08-05 13:16:09 +03:00
bug#10669 - ndb read wo/ get value
add dummy getvalue ndb/src/ndbapi/NdbOperationExec.cpp: Add dummy get value of NDB$FRAGMENT if dirty read wo/ get values ndb/test/ndbapi/testNdbApi.cpp: Test scans as well
This commit is contained in:
@@ -104,8 +104,9 @@ NdbOperation::prepareSend(Uint32 aTC_ConnectPtr, Uint64 aTransId)
|
|||||||
{
|
{
|
||||||
Uint32 tTransId1, tTransId2;
|
Uint32 tTransId1, tTransId2;
|
||||||
Uint32 tReqInfo;
|
Uint32 tReqInfo;
|
||||||
Uint32 tInterpretInd = theInterpretIndicator;
|
Uint8 tInterpretInd = theInterpretIndicator;
|
||||||
|
Uint8 tDirtyIndicator = theDirtyIndicator;
|
||||||
|
Uint32 tTotalCurrAI_Len = theTotalCurrAI_Len;
|
||||||
theErrorLine = 0;
|
theErrorLine = 0;
|
||||||
|
|
||||||
if (tInterpretInd != 1) {
|
if (tInterpretInd != 1) {
|
||||||
@@ -123,7 +124,13 @@ NdbOperation::prepareSend(Uint32 aTC_ConnectPtr, Uint64 aTransId)
|
|||||||
if (tStatus != GetValue) {
|
if (tStatus != GetValue) {
|
||||||
setErrorCodeAbort(4116);
|
setErrorCodeAbort(4116);
|
||||||
return -1;
|
return -1;
|
||||||
}//if
|
}
|
||||||
|
else if(unlikely(tDirtyIndicator && tTotalCurrAI_Len == 0))
|
||||||
|
{
|
||||||
|
getValue(NdbDictionary::Column::FRAGMENT);
|
||||||
|
tTotalCurrAI_Len = theTotalCurrAI_Len;
|
||||||
|
assert(theTotalCurrAI_Len);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
setErrorCodeAbort(4005);
|
setErrorCodeAbort(4005);
|
||||||
return -1;
|
return -1;
|
||||||
@@ -140,7 +147,6 @@ NdbOperation::prepareSend(Uint32 aTC_ConnectPtr, Uint64 aTransId)
|
|||||||
//-------------------------------------------------------------
|
//-------------------------------------------------------------
|
||||||
TcKeyReq * const tcKeyReq = CAST_PTR(TcKeyReq, theTCREQ->getDataPtrSend());
|
TcKeyReq * const tcKeyReq = CAST_PTR(TcKeyReq, theTCREQ->getDataPtrSend());
|
||||||
|
|
||||||
Uint32 tTotalCurrAI_Len = theTotalCurrAI_Len;
|
|
||||||
Uint32 tTableId = m_currentTable->m_tableId;
|
Uint32 tTableId = m_currentTable->m_tableId;
|
||||||
Uint32 tSchemaVersion = m_currentTable->m_version;
|
Uint32 tSchemaVersion = m_currentTable->m_version;
|
||||||
|
|
||||||
@@ -188,7 +194,6 @@ NdbOperation::prepareSend(Uint32 aTC_ConnectPtr, Uint64 aTransId)
|
|||||||
tcKeyReq->setStartFlag(tReqInfo, tStartIndicator);
|
tcKeyReq->setStartFlag(tReqInfo, tStartIndicator);
|
||||||
tcKeyReq->setInterpretedFlag(tReqInfo, tInterpretIndicator);
|
tcKeyReq->setInterpretedFlag(tReqInfo, tInterpretIndicator);
|
||||||
|
|
||||||
Uint8 tDirtyIndicator = theDirtyIndicator;
|
|
||||||
OperationType tOperationType = theOperationType;
|
OperationType tOperationType = theOperationType;
|
||||||
Uint32 tTupKeyLen = theTupKeyLen;
|
Uint32 tTupKeyLen = theTupKeyLen;
|
||||||
Uint8 abortOption =
|
Uint8 abortOption =
|
||||||
|
@@ -884,25 +884,16 @@ int runReadWithoutGetValue(NDBT_Context* ctx, NDBT_Step* step){
|
|||||||
|
|
||||||
HugoOperations hugoOps(*pTab);
|
HugoOperations hugoOps(*pTab);
|
||||||
|
|
||||||
Ndb* pNdb = new Ndb(&ctx->m_cluster_connection, "TEST_DB");
|
Ndb* pNdb = GETNDB(step);
|
||||||
if (pNdb == NULL){
|
Uint32 lm;
|
||||||
ndbout << "pNdb == NULL" << endl;
|
|
||||||
return NDBT_FAILED;
|
|
||||||
}
|
|
||||||
if (pNdb->init()){
|
|
||||||
ERR(pNdb->getNdbError());
|
|
||||||
delete pNdb;
|
|
||||||
return NDBT_FAILED;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(Uint32 cm= 0; cm < 2; cm++)
|
for(Uint32 cm= 0; cm < 2; cm++)
|
||||||
{
|
{
|
||||||
for(Uint32 lm= 0; lm <= NdbOperation::LM_CommittedRead; lm++)
|
for(lm= 0; lm <= NdbOperation::LM_CommittedRead; lm++)
|
||||||
{
|
{
|
||||||
NdbConnection* pCon = pNdb->startTransaction();
|
NdbConnection* pCon = pNdb->startTransaction();
|
||||||
if (pCon == NULL){
|
if (pCon == NULL){
|
||||||
pNdb->closeTransaction(pCon);
|
pNdb->closeTransaction(pCon);
|
||||||
delete pNdb;
|
|
||||||
return NDBT_FAILED;
|
return NDBT_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -910,14 +901,12 @@ int runReadWithoutGetValue(NDBT_Context* ctx, NDBT_Step* step){
|
|||||||
if (pOp == NULL){
|
if (pOp == NULL){
|
||||||
ERR(pCon->getNdbError());
|
ERR(pCon->getNdbError());
|
||||||
pNdb->closeTransaction(pCon);
|
pNdb->closeTransaction(pCon);
|
||||||
delete pNdb;
|
|
||||||
return NDBT_FAILED;
|
return NDBT_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pOp->readTuple((NdbOperation::LockMode)lm) != 0){
|
if (pOp->readTuple((NdbOperation::LockMode)lm) != 0){
|
||||||
pNdb->closeTransaction(pCon);
|
pNdb->closeTransaction(pCon);
|
||||||
ERR(pOp->getNdbError());
|
ERR(pOp->getNdbError());
|
||||||
delete pNdb;
|
|
||||||
return NDBT_FAILED;
|
return NDBT_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -926,7 +915,6 @@ int runReadWithoutGetValue(NDBT_Context* ctx, NDBT_Step* step){
|
|||||||
if(hugoOps.equalForAttr(pOp, a, 1) != 0){
|
if(hugoOps.equalForAttr(pOp, a, 1) != 0){
|
||||||
ERR(pCon->getNdbError());
|
ERR(pCon->getNdbError());
|
||||||
pNdb->closeTransaction(pCon);
|
pNdb->closeTransaction(pCon);
|
||||||
delete pNdb;
|
|
||||||
return NDBT_FAILED;
|
return NDBT_FAILED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -946,7 +934,51 @@ int runReadWithoutGetValue(NDBT_Context* ctx, NDBT_Step* step){
|
|||||||
pNdb->closeTransaction(pCon);
|
pNdb->closeTransaction(pCon);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
delete pNdb;
|
|
||||||
|
/**
|
||||||
|
* Now test scans
|
||||||
|
*/
|
||||||
|
for(lm= 0; lm <= NdbOperation::LM_CommittedRead; lm++)
|
||||||
|
{
|
||||||
|
NdbConnection* pCon = pNdb->startTransaction();
|
||||||
|
if (pCon == NULL){
|
||||||
|
pNdb->closeTransaction(pCon);
|
||||||
|
return NDBT_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
NdbScanOperation* pOp = pCon->getNdbScanOperation(pTab->getName());
|
||||||
|
if (pOp == NULL){
|
||||||
|
ERR(pCon->getNdbError());
|
||||||
|
pNdb->closeTransaction(pCon);
|
||||||
|
return NDBT_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
NdbResultSet *rs;
|
||||||
|
if ((rs = pOp->readTuples((NdbOperation::LockMode)lm)) == 0){
|
||||||
|
pNdb->closeTransaction(pCon);
|
||||||
|
ERR(pOp->getNdbError());
|
||||||
|
return NDBT_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Dont' call any getValues
|
||||||
|
|
||||||
|
// Execute should work
|
||||||
|
int check = pCon->execute(NoCommit);
|
||||||
|
if (check == 0){
|
||||||
|
ndbout << "execute worked" << endl;
|
||||||
|
} else {
|
||||||
|
ERR(pCon->getNdbError());
|
||||||
|
result = NDBT_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
int res;
|
||||||
|
while((res = rs->nextResult()) == 0);
|
||||||
|
pNdb->closeTransaction(pCon);
|
||||||
|
|
||||||
|
if(res != 1)
|
||||||
|
result = NDBT_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user