Merge loke.(none):/home/knielsen/devel/bug31761
into loke.(none):/home/knielsen/devel/mysql-5.0-ndb ndb/include/kernel/AttributeHeader.hpp: Auto merged ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp: Auto merged ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp: Auto merged ndb/src/kernel/blocks/dbutil/DbUtil.cpp: Auto merged ndb/src/ndbapi/NdbOperationDefine.cpp: SCCS merged
This commit is contained in:
commit
fd1730f4fe
@ -41,8 +41,7 @@ public:
|
||||
STATIC_CONST( FRAGMENT_MEMORY= 0xFFF9 );
|
||||
|
||||
/** Initialize AttributeHeader at location aHeaderPtr */
|
||||
static AttributeHeader& init(void* aHeaderPtr, Uint32 anAttributeId,
|
||||
Uint32 aDataSize);
|
||||
static void init(Uint32* aHeaderPtr, Uint32 anAttributeId, Uint32 aDataSize);
|
||||
|
||||
/** Returns size of AttributeHeader (usually one or two words) */
|
||||
Uint32 getHeaderSize() const; // In 32-bit words
|
||||
@ -100,10 +99,11 @@ public:
|
||||
*/
|
||||
|
||||
inline
|
||||
AttributeHeader& AttributeHeader::init(void* aHeaderPtr, Uint32 anAttributeId,
|
||||
Uint32 aDataSize)
|
||||
void AttributeHeader::init(Uint32* aHeaderPtr, Uint32 anAttributeId,
|
||||
Uint32 aDataSize)
|
||||
{
|
||||
return * new (aHeaderPtr) AttributeHeader(anAttributeId, aDataSize);
|
||||
AttributeHeader ah(anAttributeId, aDataSize);
|
||||
*aHeaderPtr = ah.m_value;
|
||||
}
|
||||
|
||||
inline
|
||||
|
@ -1577,8 +1577,8 @@ int Dbtup::interpreterNextLab(Signal* signal,
|
||||
Uint32 TdataForUpdate[3];
|
||||
Uint32 Tlen;
|
||||
|
||||
AttributeHeader& ah = AttributeHeader::init(&TdataForUpdate[0],
|
||||
TattrId, TattrNoOfWords);
|
||||
AttributeHeader ah(TattrId, TattrNoOfWords);
|
||||
TdataForUpdate[0] = ah.m_value;
|
||||
TdataForUpdate[1] = TregMemBuffer[theRegister + 2];
|
||||
TdataForUpdate[2] = TregMemBuffer[theRegister + 3];
|
||||
Tlen = TattrNoOfWords + 1;
|
||||
@ -1594,6 +1594,7 @@ int Dbtup::interpreterNextLab(Signal* signal,
|
||||
// Write a NULL value into the attribute
|
||||
/* --------------------------------------------------------- */
|
||||
ah.setNULL();
|
||||
TdataForUpdate[0] = ah.m_value;
|
||||
Tlen = 1;
|
||||
}//if
|
||||
int TnoDataRW= updateAttributes(pagePtr,
|
||||
|
@ -676,8 +676,6 @@ bool
|
||||
Dbtup::checkUpdateOfPrimaryKey(Uint32* updateBuffer, Tablerec* const regTabPtr)
|
||||
{
|
||||
Uint32 keyReadBuffer[MAX_KEY_SIZE_IN_WORDS];
|
||||
Uint32 attributeHeader;
|
||||
AttributeHeader* ahOut = (AttributeHeader*)&attributeHeader;
|
||||
AttributeHeader ahIn(*updateBuffer);
|
||||
Uint32 attributeId = ahIn.getAttributeId();
|
||||
Uint32 attrDescriptorIndex = regTabPtr->tabDescriptor + (attributeId << ZAD_LOG_SIZE);
|
||||
@ -700,16 +698,17 @@ Dbtup::checkUpdateOfPrimaryKey(Uint32* updateBuffer, Tablerec* const regTabPtr)
|
||||
|
||||
ReadFunction f = regTabPtr->readFunctionArray[attributeId];
|
||||
|
||||
AttributeHeader::init(&attributeHeader, attributeId, 0);
|
||||
AttributeHeader attributeHeader(attributeId, 0);
|
||||
tOutBufIndex = 0;
|
||||
tMaxRead = MAX_KEY_SIZE_IN_WORDS;
|
||||
|
||||
bool tmp = tXfrmFlag;
|
||||
tXfrmFlag = true;
|
||||
ndbrequire((this->*f)(&keyReadBuffer[0], ahOut, attrDescriptor, attributeOffset));
|
||||
ndbrequire((this->*f)(&keyReadBuffer[0], &attributeHeader, attrDescriptor,
|
||||
attributeOffset));
|
||||
tXfrmFlag = tmp;
|
||||
ndbrequire(tOutBufIndex == ahOut->getDataSize());
|
||||
if (ahIn.getDataSize() != ahOut->getDataSize()) {
|
||||
ndbrequire(tOutBufIndex == attributeHeader.getDataSize());
|
||||
if (ahIn.getDataSize() != attributeHeader.getDataSize()) {
|
||||
ljam();
|
||||
return true;
|
||||
}//if
|
||||
|
@ -1168,9 +1168,7 @@ DbUtil::prepareOperation(Signal* signal, PreparePtr prepPtr)
|
||||
/**************************************************************
|
||||
* Attribute found - store in mapping (AttributeId, Position)
|
||||
**************************************************************/
|
||||
AttributeHeader & attrMap =
|
||||
AttributeHeader::init(attrMappingIt.data,
|
||||
attrDesc.AttributeId, // 1. Store AttrId
|
||||
AttributeHeader attrMap(attrDesc.AttributeId, // 1. Store AttrId
|
||||
0);
|
||||
|
||||
if (attrDesc.AttributeKeyFlag) {
|
||||
@ -1199,6 +1197,7 @@ DbUtil::prepareOperation(Signal* signal, PreparePtr prepPtr)
|
||||
return;
|
||||
}
|
||||
}
|
||||
*(attrMappingIt.data) = attrMap.m_value;
|
||||
#if 0
|
||||
ndbout << "BEFORE: attrLength: " << attrLength << endl;
|
||||
#endif
|
||||
|
@ -392,9 +392,8 @@ NdbOperation::getValue_impl(const NdbColumnImpl* tAttrInfo, char* aValue)
|
||||
return NULL;
|
||||
}//if
|
||||
}//if
|
||||
Uint32 ah;
|
||||
AttributeHeader::init(&ah, tAttrInfo->m_attrId, 0);
|
||||
if (insertATTRINFO(ah) != -1) {
|
||||
AttributeHeader ah(tAttrInfo->m_attrId, 0);
|
||||
if (insertATTRINFO(ah.m_value) != -1) {
|
||||
// Insert Attribute Id into ATTRINFO part.
|
||||
|
||||
/************************************************************************
|
||||
@ -525,12 +524,11 @@ NdbOperation::setValue( const NdbColumnImpl* tAttrInfo,
|
||||
|
||||
tAttrId = tAttrInfo->m_attrId;
|
||||
const char *aValue = aValuePassed;
|
||||
Uint32 ahValue;
|
||||
if (aValue == NULL) {
|
||||
if (tAttrInfo->m_nullable) {
|
||||
AttributeHeader& ah = AttributeHeader::init(&ahValue, tAttrId, 0);
|
||||
AttributeHeader ah(tAttrId, 0);
|
||||
ah.setNULL();
|
||||
insertATTRINFO(ahValue);
|
||||
insertATTRINFO(ah.m_value);
|
||||
// Insert Attribute Id with the value
|
||||
// NULL into ATTRINFO part.
|
||||
DBUG_RETURN(0);
|
||||
@ -563,8 +561,8 @@ NdbOperation::setValue( const NdbColumnImpl* tAttrInfo,
|
||||
}//if
|
||||
const Uint32 totalSizeInWords = (sizeInBytes + 3)/4; // Including bits in last word
|
||||
const Uint32 sizeInWords = sizeInBytes / 4; // Excluding bits in last word
|
||||
(void) AttributeHeader::init(&ahValue, tAttrId, totalSizeInWords);
|
||||
insertATTRINFO( ahValue );
|
||||
AttributeHeader ah(tAttrId, totalSizeInWords);
|
||||
insertATTRINFO( ah.m_value );
|
||||
|
||||
/***********************************************************************
|
||||
* Check if the pointer of the value passed is aligned on a 4 byte boundary.
|
||||
|
Loading…
x
Reference in New Issue
Block a user