📄 dbtuproutines.cpp
字号:
Uint32 updateOffset = AttributeOffset::getOffset(attrDes2); Uint32 charsetFlag = AttributeOffset::getCharsetFlag(attrDes2); AttributeHeader ahIn(inBuffer[indexBuf]); Uint32 nullIndicator = ahIn.isNULL(); Uint32 noOfWords = AttributeDescriptor::getSizeInWords(attrDescriptor); Uint32 newIndex = indexBuf + noOfWords + 1; ndbrequire((updateOffset + noOfWords - 1) < tCheckOffset); if (newIndex <= inBufLen) { if (!nullIndicator) { ljam(); if (charsetFlag) { ljam(); Tablerec* regTabPtr = tabptr.p; Uint32 typeId = AttributeDescriptor::getType(attrDescriptor); Uint32 bytes = AttributeDescriptor::getSizeInBytes(attrDescriptor); Uint32 i = AttributeOffset::getCharsetPos(attrDes2); ndbrequire(i < regTabPtr->noOfCharsets); // not const in MySQL CHARSET_INFO* cs = regTabPtr->charsetArray[i]; int not_used; const char* ssrc = (const char*)&inBuffer[tInBufIndex + 1]; Uint32 lb, len; if (! NdbSqlUtil::get_var_length(typeId, ssrc, bytes, lb, len)) { ljam(); terrorCode = ZINVALID_CHAR_FORMAT; return false; } // fast fix bug#7340 if (typeId != NDB_TYPE_TEXT && (*cs->cset->well_formed_len)(cs, ssrc + lb, ssrc + lb + len, ZNIL, ¬_used) != len) { ljam(); terrorCode = ZINVALID_CHAR_FORMAT; return false; } } tInBufIndex = newIndex; MEMCOPY_NO_WORDS(&tTupleHeader[updateOffset], &inBuffer[indexBuf + 1], noOfWords); return true; } else { ljam(); terrorCode = ZNOT_NULL_ATTR; return false; }//if } else { ljam(); terrorCode = ZAI_INCONSISTENCY_ERROR; return false; }//if}//Dbtup::updateFixedSizeTHManyWordNotNULL()boolDbtup::updateFixedSizeTHManyWordNULLable(Uint32* inBuffer, Uint32 attrDescriptor, Uint32 attrDes2){ Tablerec* const regTabPtr = tabptr.p; AttributeHeader ahIn(inBuffer[tInBufIndex]); Uint32 nullIndicator = ahIn.isNULL(); Uint32 nullFlagOffset = AttributeOffset::getNullFlagOffset(attrDes2); Uint32 nullFlagBitOffset = AttributeOffset::getNullFlagBitOffset(attrDes2); Uint32 nullWordOffset = nullFlagOffset + regTabPtr->tupNullIndex; ndbrequire((nullFlagOffset < regTabPtr->tupNullWords) && (nullWordOffset < tCheckOffset)); Uint32 nullBits = tTupleHeader[nullWordOffset]; if (!nullIndicator) { nullBits &= (~(1 << nullFlagBitOffset)); ljam(); tTupleHeader[nullWordOffset] = nullBits; return updateFixedSizeTHManyWordNotNULL(inBuffer, attrDescriptor, attrDes2); } else { Uint32 newIndex = tInBufIndex + 1; if (newIndex <= tInBufLen) { nullBits |= (1 << nullFlagBitOffset); ljam(); tTupleHeader[nullWordOffset] = nullBits; tInBufIndex = newIndex; return true; } else { ljam(); terrorCode = ZAI_INCONSISTENCY_ERROR; return false; }//if }//if}//Dbtup::updateFixedSizeTHManyWordNULLable()boolDbtup::updateVariableSizedAttr(Uint32* inBuffer, Uint32 attrDescriptor, Uint32 attrDes2){ ljam(); terrorCode = ZVAR_SIZED_NOT_SUPPORTED; return false;}//Dbtup::updateVariableSizedAttr()boolDbtup::updateVarSizeUnlimitedNotNULL(Uint32* inBuffer, Uint32 attrDescriptor, Uint32 attrDes2){ ljam(); terrorCode = ZVAR_SIZED_NOT_SUPPORTED; return false;}//Dbtup::updateVarSizeUnlimitedNotNULL()boolDbtup::updateVarSizeUnlimitedNULLable(Uint32* inBuffer, Uint32 attrDescriptor, Uint32 attrDes2){ ljam(); terrorCode = ZVAR_SIZED_NOT_SUPPORTED; return false;}//Dbtup::updateVarSizeUnlimitedNULLable()boolDbtup::updateBigVarSizeNotNULL(Uint32* inBuffer, Uint32 attrDescriptor, Uint32 attrDes2){ ljam(); terrorCode = ZVAR_SIZED_NOT_SUPPORTED; return false;}//Dbtup::updateBigVarSizeNotNULL()boolDbtup::updateBigVarSizeNULLable(Uint32* inBuffer, Uint32 attrDescriptor, Uint32 attrDes2){ ljam(); terrorCode = ZVAR_SIZED_NOT_SUPPORTED; return false;}//Dbtup::updateBigVarSizeNULLable()boolDbtup::updateSmallVarSizeNotNULL(Uint32* inBuffer, Uint32 attrDescriptor, Uint32 attrDes2){ ljam(); terrorCode = ZVAR_SIZED_NOT_SUPPORTED; return false;}//Dbtup::updateSmallVarSizeNotNULL()boolDbtup::updateSmallVarSizeNULLable(Uint32* inBuffer, Uint32 attrDescriptor, Uint32 attrDes2){ ljam(); terrorCode = ZVAR_SIZED_NOT_SUPPORTED; return false;}//Dbtup::updateSmallVarSizeNULLable()boolDbtup::updateDynFixedSize(Uint32* inBuffer, Uint32 attrDescriptor, Uint32 attrDes2){ ljam(); terrorCode = ZVAR_SIZED_NOT_SUPPORTED; return false;}//Dbtup::updateDynFixedSize()boolDbtup::updateDynVarSizeUnlimited(Uint32* inBuffer, Uint32 attrDescriptor, Uint32 attrDes2){ ljam(); terrorCode = ZVAR_SIZED_NOT_SUPPORTED; return false;}//Dbtup::updateDynVarSizeUnlimited()boolDbtup::updateDynBigVarSize(Uint32* inBuffer, Uint32 attrDescriptor, Uint32 attrDes2){ ljam(); terrorCode = ZVAR_SIZED_NOT_SUPPORTED; return false;}//Dbtup::updateDynBigVarSize()boolDbtup::updateDynSmallVarSize(Uint32* inBuffer, Uint32 attrDescriptor, Uint32 attrDes2){ ljam(); terrorCode = ZVAR_SIZED_NOT_SUPPORTED; return false;}//Dbtup::updateDynSmallVarSize()Uint32 Dbtup::read_psuedo(Uint32 attrId, Uint32* outBuffer){ Uint32 tmp[sizeof(SignalHeader)+25]; Signal * signal = (Signal*)&tmp; switch(attrId){ case AttributeHeader::FRAGMENT: * outBuffer = operPtr.p->fragId >> 1; // remove "hash" bit return 1; case AttributeHeader::FRAGMENT_MEMORY: { Uint64 tmp = 0; tmp += fragptr.p->noOfPages; { /** * Each fragment is split into 2...get #pages from other as well */ Uint32 twin = fragptr.p->fragmentId ^ 1; FragrecordPtr twinPtr; getFragmentrec(twinPtr, twin, tabptr.p); ndbrequire(twinPtr.p != 0); tmp += twinPtr.p->noOfPages; } tmp *= 32768; memcpy(outBuffer,&tmp,8); } return 2; case AttributeHeader::ROW_SIZE: * outBuffer = tabptr.p->tupheadsize << 2; return 1; case AttributeHeader::ROW_COUNT: case AttributeHeader::COMMIT_COUNT: signal->theData[0] = operPtr.p->userpointer; signal->theData[1] = attrId; EXECUTE_DIRECT(DBLQH, GSN_READ_PSUEDO_REQ, signal, 2); outBuffer[0] = signal->theData[0]; outBuffer[1] = signal->theData[1]; return 2; case AttributeHeader::RANGE_NO: signal->theData[0] = operPtr.p->userpointer; signal->theData[1] = attrId; EXECUTE_DIRECT(DBLQH, GSN_READ_PSUEDO_REQ, signal, 2); outBuffer[0] = signal->theData[0]; return 1; default: return 0; }}boolDbtup::readBitsNotNULL(Uint32* outBuffer, AttributeHeader* ahOut, Uint32 attrDescriptor, Uint32 attrDes2){ Tablerec* const regTabPtr = tabptr.p; Uint32 pos = AttributeOffset::getNullFlagPos(attrDes2); Uint32 bitCount = AttributeDescriptor::getArraySize(attrDescriptor); Uint32 indexBuf = tOutBufIndex; Uint32 newIndexBuf = indexBuf + ((bitCount + 31) >> 5); Uint32 maxRead = tMaxRead; if (newIndexBuf <= maxRead) { ljam(); ahOut->setDataSize((bitCount + 31) >> 5); tOutBufIndex = newIndexBuf; BitmaskImpl::getField(regTabPtr->tupNullWords, tTupleHeader+regTabPtr->tupNullIndex, pos, bitCount, outBuffer+indexBuf); return true; } else { ljam(); terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR; return false; }//if}boolDbtup::readBitsNULLable(Uint32* outBuffer, AttributeHeader* ahOut, Uint32 attrDescriptor, Uint32 attrDes2){ Tablerec* const regTabPtr = tabptr.p; Uint32 pos = AttributeOffset::getNullFlagPos(attrDes2); Uint32 bitCount = AttributeDescriptor::getArraySize(attrDescriptor); Uint32 indexBuf = tOutBufIndex; Uint32 newIndexBuf = indexBuf + ((bitCount + 31) >> 5); Uint32 maxRead = tMaxRead; if(BitmaskImpl::get(regTabPtr->tupNullWords, tTupleHeader+regTabPtr->tupNullIndex, pos)) { ljam(); ahOut->setNULL(); return true; } if (newIndexBuf <= maxRead) { ljam(); ahOut->setDataSize((bitCount + 31) >> 5); tOutBufIndex = newIndexBuf; BitmaskImpl::getField(regTabPtr->tupNullWords, tTupleHeader+regTabPtr->tupNullIndex, pos+1, bitCount, outBuffer+indexBuf); return true; } else { ljam(); terrorCode = ZTRY_TO_READ_TOO_MUCH_ERROR; return false; }//if}boolDbtup::updateBitsNotNULL(Uint32* inBuffer, Uint32 attrDescriptor, Uint32 attrDes2){ Tablerec* const regTabPtr = tabptr.p; Uint32 indexBuf = tInBufIndex; Uint32 inBufLen = tInBufLen; AttributeHeader ahIn(inBuffer[indexBuf]); Uint32 nullIndicator = ahIn.isNULL(); Uint32 pos = AttributeOffset::getNullFlagPos(attrDes2); Uint32 bitCount = AttributeDescriptor::getArraySize(attrDescriptor); Uint32 newIndex = indexBuf + 1 + ((bitCount + 31) >> 5); if (newIndex <= inBufLen) { if (!nullIndicator) { BitmaskImpl::setField(regTabPtr->tupNullWords, tTupleHeader+regTabPtr->tupNullIndex, pos, bitCount, inBuffer+indexBuf+1); tInBufIndex = newIndex; return true; } else { ljam(); terrorCode = ZNOT_NULL_ATTR; return false; }//if } else { ljam(); terrorCode = ZAI_INCONSISTENCY_ERROR; return false; }//if return true;}boolDbtup::updateBitsNULLable(Uint32* inBuffer, Uint32 attrDescriptor, Uint32 attrDes2){ Tablerec* const regTabPtr = tabptr.p; AttributeHeader ahIn(inBuffer[tInBufIndex]); Uint32 indexBuf = tInBufIndex; Uint32 nullIndicator = ahIn.isNULL(); Uint32 pos = AttributeOffset::getNullFlagPos(attrDes2); Uint32 bitCount = AttributeDescriptor::getArraySize(attrDescriptor); if (!nullIndicator) { BitmaskImpl::clear(regTabPtr->tupNullWords, tTupleHeader+regTabPtr->tupNullIndex, pos); BitmaskImpl::setField(regTabPtr->tupNullWords, tTupleHeader+regTabPtr->tupNullIndex, pos+1, bitCount, inBuffer+indexBuf+1); Uint32 newIndex = indexBuf + 1 + ((bitCount + 31) >> 5); tInBufIndex = newIndex; return true; } else { Uint32 newIndex = tInBufIndex + 1; if (newIndex <= tInBufLen) { ljam(); BitmaskImpl::set(regTabPtr->tupNullWords, tTupleHeader+regTabPtr->tupNullIndex, pos); tInBufIndex = newIndex; return true; } else { ljam(); terrorCode = ZAI_INCONSISTENCY_ERROR; return false; }//if }//if}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -