⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbtuproutines.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
📖 第 1 页 / 共 3 页
字号:
boolDbtup::readFixedSizeTHOneWordNULLable(Uint32* outBuffer,                                      AttributeHeader* ahOut,                                      Uint32  attrDescriptor,                                      Uint32  attrDes2){  if (!nullFlagCheck(attrDes2)) {    ljam();    return readFixedSizeTHOneWordNotNULL(outBuffer,                                         ahOut,                                         attrDescriptor,                                         attrDes2);  } else {    ljam();    ahOut->setNULL();    return true;  }//if}//Dbtup::readFixedSizeTHOneWordNULLable()boolDbtup::readFixedSizeTHTwoWordNULLable(Uint32* outBuffer,                                      AttributeHeader* ahOut,                                      Uint32  attrDescriptor,                                      Uint32  attrDes2){  if (!nullFlagCheck(attrDes2)) {    ljam();    return readFixedSizeTHTwoWordNotNULL(outBuffer,                                         ahOut,                                         attrDescriptor,                                         attrDes2);  } else {    ljam();    ahOut->setNULL();    return true;  }//if}//Dbtup::readFixedSizeTHTwoWordNULLable()boolDbtup::readFixedSizeTHManyWordNULLable(Uint32* outBuffer,                                       AttributeHeader* ahOut,                                       Uint32  attrDescriptor,                                       Uint32  attrDes2){  if (!nullFlagCheck(attrDes2)) {    ljam();    return readFixedSizeTHManyWordNotNULL(outBuffer,                                          ahOut,                                          attrDescriptor,                                          attrDes2);  } else {    ljam();    ahOut->setNULL();    return true;  }//if}//Dbtup::readFixedSizeTHManyWordNULLable()boolDbtup::readFixedSizeTHZeroWordNULLable(Uint32* outBuffer,                                       AttributeHeader* ahOut,                                       Uint32  attrDescriptor,                                       Uint32  attrDes2){  ljam();  if (nullFlagCheck(attrDes2)) {    ljam();    ahOut->setNULL();  }//if  return true;}//Dbtup::readFixedSizeTHZeroWordNULLable()boolDbtup::nullFlagCheck(Uint32  attrDes2){  Tablerec* const regTabPtr = tabptr.p;  Uint32 nullFlagOffsetInTuple = AttributeOffset::getNullFlagOffset(attrDes2);  ndbrequire(nullFlagOffsetInTuple < regTabPtr->tupNullWords);  nullFlagOffsetInTuple += regTabPtr->tupNullIndex;  ndbrequire(nullFlagOffsetInTuple < tCheckOffset);  return (AttributeOffset::isNULL(tTupleHeader[nullFlagOffsetInTuple], attrDes2));}//Dbtup::nullFlagCheck()boolDbtup::readVariableSizedAttr(Uint32* outBuffer,                             AttributeHeader* ahOut,                             Uint32  attrDescriptor,                             Uint32  attrDes2){  ljam();  terrorCode = ZVAR_SIZED_NOT_SUPPORTED;  return false;}//Dbtup::readVariableSizedAttr()boolDbtup::readVarSizeUnlimitedNotNULL(Uint32* outBuffer,                                   AttributeHeader* ahOut,                                   Uint32  attrDescriptor,                                   Uint32  attrDes2){  ljam();  terrorCode = ZVAR_SIZED_NOT_SUPPORTED;  return false;}//Dbtup::readVarSizeUnlimitedNotNULL()boolDbtup::readVarSizeUnlimitedNULLable(Uint32* outBuffer,                                    AttributeHeader* ahOut,                                    Uint32  attrDescriptor,                                    Uint32  attrDes2){  ljam();  terrorCode = ZVAR_SIZED_NOT_SUPPORTED;  return false;}//Dbtup::readVarSizeUnlimitedNULLable()boolDbtup::readBigVarSizeNotNULL(Uint32* outBuffer,                             AttributeHeader* ahOut,                             Uint32  attrDescriptor,                             Uint32  attrDes2){  ljam();  terrorCode = ZVAR_SIZED_NOT_SUPPORTED;  return false;}//Dbtup::readBigVarSizeNotNULL()boolDbtup::readBigVarSizeNULLable(Uint32* outBuffer,                             AttributeHeader* ahOut,                             Uint32  attrDescriptor,                             Uint32  attrDes2){  ljam();  terrorCode = ZVAR_SIZED_NOT_SUPPORTED;  return false;}//Dbtup::readBigVarSizeNULLable()boolDbtup::readSmallVarSizeNotNULL(Uint32* outBuffer,                               AttributeHeader* ahOut,                               Uint32  attrDescriptor,                               Uint32  attrDes2){  ljam();  terrorCode = ZVAR_SIZED_NOT_SUPPORTED;  return false;}//Dbtup::readSmallVarSizeNotNULL()boolDbtup::readSmallVarSizeNULLable(Uint32* outBuffer,                                AttributeHeader* ahOut,                                Uint32  attrDescriptor,                                Uint32  attrDes2){  ljam();  terrorCode = ZVAR_SIZED_NOT_SUPPORTED;  return false;}//Dbtup::readSmallVarSizeNULLable()boolDbtup::readDynFixedSize(Uint32* outBuffer,                        AttributeHeader* ahOut,                        Uint32  attrDescriptor,                        Uint32  attrDes2){  ljam();  terrorCode = ZVAR_SIZED_NOT_SUPPORTED;  return false;}//Dbtup::readDynFixedSize()boolDbtup::readDynVarSizeUnlimited(Uint32* outBuffer,                               AttributeHeader* ahOut,                               Uint32  attrDescriptor,                               Uint32  attrDes2){  ljam();  terrorCode = ZVAR_SIZED_NOT_SUPPORTED;  return false;}//Dbtup::readDynVarSizeUnlimited()boolDbtup::readDynBigVarSize(Uint32* outBuffer,                         AttributeHeader* ahOut,                         Uint32  attrDescriptor,                         Uint32  attrDes2){  ljam();  terrorCode = ZVAR_SIZED_NOT_SUPPORTED;  return false;}//Dbtup::readDynBigVarSize()boolDbtup::readDynSmallVarSize(Uint32* outBuffer,                           AttributeHeader* ahOut,                           Uint32  attrDescriptor,                           Uint32  attrDes2){  ljam();  terrorCode = ZVAR_SIZED_NOT_SUPPORTED;  return false;}//Dbtup::readDynSmallVarSize()/* ---------------------------------------------------------------------- *//*       THIS ROUTINE IS USED TO UPDATE A NUMBER OF ATTRIBUTES. IT IS     *//*       USED BY THE INSERT ROUTINE, THE UPDATE ROUTINE AND IT CAN BE     *//*       CALLED SEVERAL TIMES FROM THE INTERPRETER.                       */// In addition to the parameters used in the call it also relies on the// following variables set-up properly.//// pagep.p        Page record pointer// fragptr.p      Fragment record pointer// operPtr.p      Operation record pointer// tabptr.p       Table record pointer/* ---------------------------------------------------------------------- */int Dbtup::updateAttributes(Page* const pagePtr,                            Uint32 tupHeadOffset,                            Uint32* inBuffer,                            Uint32 inBufLen){  Tablerec* const regTabPtr =  tabptr.p;  Operationrec* const regOperPtr = operPtr.p;  Uint32 numAttributes = regTabPtr->noOfAttr;  Uint32 attrDescriptorStart = regTabPtr->tabDescriptor;  ndbrequire(attrDescriptorStart + (numAttributes << ZAD_LOG_SIZE) <= cnoOfTabDescrRec);  tCheckOffset = regTabPtr->tupheadsize;  tTupleHeader = &pagePtr->pageWord[tupHeadOffset];  Uint32 inBufIndex = 0;  tInBufIndex = 0;  tInBufLen = inBufLen;  ndbrequire(tupHeadOffset + tCheckOffset <= ZWORDS_ON_PAGE);  while (inBufIndex < inBufLen) {    AttributeHeader ahIn(inBuffer[inBufIndex]);    Uint32 attributeId = ahIn.getAttributeId();    Uint32 attrDescriptorIndex = attrDescriptorStart + (attributeId << ZAD_LOG_SIZE);    if (attributeId < numAttributes) {      Uint32 attrDescriptor = tableDescriptor[attrDescriptorIndex].tabDescr;      Uint32 attributeOffset = tableDescriptor[attrDescriptorIndex + 1].tabDescr;      if ((AttributeDescriptor::getPrimaryKey(attrDescriptor)) &&          (regOperPtr->optype != ZINSERT)) {        if (checkUpdateOfPrimaryKey(&inBuffer[inBufIndex], regTabPtr)) {          ljam();          terrorCode = ZTRY_UPDATE_PRIMARY_KEY;          return -1;        }//if      }//if      UpdateFunction f = regTabPtr->updateFunctionArray[attributeId];      ljam();      regOperPtr->changeMask.set(attributeId);      if ((this->*f)(inBuffer,                     attrDescriptor,                     attributeOffset)) {        inBufIndex = tInBufIndex;        continue;      } else {        ljam();        return -1;      }//if    } else {      ljam();      terrorCode = ZATTRIBUTE_ID_ERROR;      return -1;    }//if  }//while  return 0;}//Dbtup::updateAttributes()boolDbtup::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);  Uint32 attrDescriptor = tableDescriptor[attrDescriptorIndex].tabDescr;  Uint32 attributeOffset = tableDescriptor[attrDescriptorIndex + 1].tabDescr;  Uint32 xfrmBuffer[1 + MAX_KEY_SIZE_IN_WORDS * MAX_XFRM_MULTIPLY];  Uint32 charsetFlag = AttributeOffset::getCharsetFlag(attributeOffset);  if (charsetFlag) {    Uint32 csIndex = AttributeOffset::getCharsetPos(attributeOffset);    CHARSET_INFO* cs = regTabPtr->charsetArray[csIndex];    Uint32 srcPos = 0;    Uint32 dstPos = 0;    xfrm_attr(attrDescriptor, cs, &updateBuffer[1], srcPos,              &xfrmBuffer[1], dstPos, MAX_KEY_SIZE_IN_WORDS * MAX_XFRM_MULTIPLY);    ahIn.setDataSize(dstPos);    xfrmBuffer[0] = ahIn.m_value;    updateBuffer = xfrmBuffer;  }  ReadFunction f = regTabPtr->readFunctionArray[attributeId];  AttributeHeader::init(&attributeHeader, attributeId, 0);  tOutBufIndex = 0;  tMaxRead = MAX_KEY_SIZE_IN_WORDS;  bool tmp = tXfrmFlag;  tXfrmFlag = true;  ndbrequire((this->*f)(&keyReadBuffer[0], ahOut, attrDescriptor, attributeOffset));  tXfrmFlag = tmp;  ndbrequire(tOutBufIndex == ahOut->getDataSize());  if (ahIn.getDataSize() != ahOut->getDataSize()) {    ljam();    return true;  }//if  if (memcmp(&keyReadBuffer[0], &updateBuffer[1], tOutBufIndex << 2) != 0) {    ljam();    return true;  }//if  return false;}//Dbtup::checkUpdateOfPrimaryKey()#if 0void Dbtup::checkPages(Fragrecord* const regFragPtr){  Uint32 noPages = getNoOfPages(regFragPtr);  for (Uint32 i = 0; i < noPages ; i++) {    PagePtr pagePtr;    pagePtr.i = getRealpid(regFragPtr, i);    ptrCheckGuard(pagePtr, cnoOfPage, page);    ndbrequire(pagePtr.p->pageWord[1] != (RNIL - 1));  }}#endifboolDbtup::updateFixedSizeTHOneWordNotNULL(Uint32* inBuffer,                                       Uint32  attrDescriptor,                                       Uint32  attrDes2){  Uint32 indexBuf = tInBufIndex;  Uint32 inBufLen = tInBufLen;  Uint32 updateOffset = AttributeOffset::getOffset(attrDes2);  AttributeHeader ahIn(inBuffer[indexBuf]);  Uint32 nullIndicator = ahIn.isNULL();  Uint32 newIndex = indexBuf + 2;  ndbrequire(updateOffset < tCheckOffset);  if (newIndex <= inBufLen) {    Uint32 updateWord = inBuffer[indexBuf + 1];    if (!nullIndicator) {      ljam();      tInBufIndex = newIndex;      tTupleHeader[updateOffset] = updateWord;      return true;    } else {      ljam();      terrorCode = ZNOT_NULL_ATTR;      return false;    }//if  } else {    ljam();    terrorCode = ZAI_INCONSISTENCY_ERROR;    return false;  }//if  return true;}//Dbtup::updateFixedSizeTHOneWordNotNULL()boolDbtup::updateFixedSizeTHTwoWordNotNULL(Uint32* inBuffer,                                       Uint32  attrDescriptor,                                       Uint32  attrDes2){  Uint32 indexBuf = tInBufIndex;  Uint32 inBufLen = tInBufLen;  Uint32 updateOffset = AttributeOffset::getOffset(attrDes2);  AttributeHeader ahIn(inBuffer[indexBuf]);  Uint32 nullIndicator = ahIn.isNULL();  Uint32 newIndex = indexBuf + 3;  ndbrequire((updateOffset + 1) < tCheckOffset);  if (newIndex <= inBufLen) {    Uint32 updateWord1 = inBuffer[indexBuf + 1];    Uint32 updateWord2 = inBuffer[indexBuf + 2];    if (!nullIndicator) {      ljam();      tInBufIndex = newIndex;      tTupleHeader[updateOffset] = updateWord1;      tTupleHeader[updateOffset + 1] = updateWord2;      return true;    } else {      ljam();      terrorCode = ZNOT_NULL_ATTR;      return false;    }//if  } else {    ljam();    terrorCode = ZAI_INCONSISTENCY_ERROR;    return false;  }//if}//Dbtup::updateFixedSizeTHTwoWordNotNULL()boolDbtup::updateFixedSizeTHManyWordNotNULL(Uint32* inBuffer,                                        Uint32  attrDescriptor,                                        Uint32  attrDes2){  Uint32 indexBuf = tInBufIndex;  Uint32 inBufLen = tInBufLen;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -