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

📄 dbtuproutines.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
📖 第 1 页 / 共 3 页
字号:
  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, &not_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 + -