From 9f8d2e5b14e5e133bd567ac8a8f8e298b78e8e54 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 21 Nov 2006 14:23:42 +0100 Subject: [PATCH] ndb - no bugs number 1) Make sure not to read uninitialized data in unique index code harmless (atleast before dynattr) 2) Dont update p_latest_trans_gci for dirty unique index lookup storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp: Make sure not to read uninitialized data in unique index code harmless (atleast before dynattr) storage/ndb/src/ndbapi/NdbTransaction.cpp: Dont update p_latest_trans_gci for dirty unique index lookup --- storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp | 12 ++++++++++++ storage/ndb/src/ndbapi/NdbTransaction.cpp | 6 ++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp index 0e1b251d8a5..3df9b8ec7c5 100644 --- a/storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp +++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp @@ -833,6 +833,15 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr, //-------------------------------------------------------------------- // Read Primary Key Values //-------------------------------------------------------------------- + Tuple_header *save0= req_struct->m_tuple_ptr; + if (regOperPtr->op_struct.op_type == ZDELETE && + !regOperPtr->is_first_operation()) + { + jam(); + req_struct->m_tuple_ptr= (Tuple_header*) + c_undo_buffer.get_ptr(&req_struct->prevOpPtr.p->m_copy_tuple_location); + } + if (regTabPtr->need_expand()) prepare_read(req_struct, regTabPtr, true); @@ -844,6 +853,9 @@ bool Dbtup::readTriggerInfo(TupTriggerData* const trigPtr, false); ndbrequire(ret != -1); noPrimKey= ret; + + req_struct->m_tuple_ptr = save0; + Uint32 numAttrsToRead; if ((regOperPtr->op_struct.op_type == ZUPDATE) && (trigPtr->sendOnlyChangedAttributes)) { diff --git a/storage/ndb/src/ndbapi/NdbTransaction.cpp b/storage/ndb/src/ndbapi/NdbTransaction.cpp index 0cbd67a38f6..c9414a41788 100644 --- a/storage/ndb/src/ndbapi/NdbTransaction.cpp +++ b/storage/ndb/src/ndbapi/NdbTransaction.cpp @@ -1970,8 +1970,10 @@ NdbTransaction::receiveTCINDXCONF(const TcIndxConf * indxConf, if (tCommitFlag == 1) { theCommitStatus = Committed; theGlobalCheckpointId = tGCI; - assert(tGCI); - *p_latest_trans_gci = tGCI; + if (tGCI) // Read(dirty) only transaction doesnt get GCI + { + *p_latest_trans_gci = tGCI; + } } else if ((tNoComp >= tNoSent) && (theLastExecOpInList->theCommitIndicator == 1)){ /**********************************************************************/