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

📄 dbtupfixalloc.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
📖 第 1 页 / 共 2 页
字号:
  regPagePtr->pageWord[ZFREELIST_HEADER_POS] = (startOfList << 16) + endOfList;}//Dbtup::convertThPage()void Dbtup::getEmptyPageTh(Fragrecord* const regFragPtr,                           Signal* signal,                           Page* const regPagePtr) {  if (isUndoLoggingNeeded(regFragPtr, regPagePtr->pageWord[ZPAGE_FRAG_PAGE_ID_POS])) {    cprAddUndoLogPageHeader(signal,                            regPagePtr,                            regFragPtr);  }//if  regPagePtr->pageWord[ZPAGE_NEXT_POS] = regFragPtr->thFreeFirst;  regPagePtr->pageWord[ZPAGE_STATE_POS] = ZTH_MM_FREE;  regFragPtr->thFreeFirst = regPagePtr->pageWord[ZPAGE_FRAG_PAGE_ID_POS];ndbrequire(regFragPtr->thFreeFirst != (RNIL -1));}//Dbtup::getEmptyPageTh()void Dbtup::getEmptyPageThCopy(Fragrecord* const regFragPtr,                               Signal* signal,                               Page* const regPagePtr) {  if (isUndoLoggingNeeded(regFragPtr, regPagePtr->pageWord[ZPAGE_FRAG_PAGE_ID_POS])) {    cprAddUndoLogPageHeader(signal,                            regPagePtr,                            regFragPtr);  }//if  regPagePtr->pageWord[ZPAGE_NEXT_POS] = regFragPtr->thFreeCopyFirst;  regPagePtr->pageWord[ZPAGE_STATE_POS] = ZTH_MM_FREE_COPY;  regFragPtr->thFreeCopyFirst = regPagePtr->pageWord[ZPAGE_FRAG_PAGE_ID_POS];  regFragPtr->noCopyPagesAlloc++;}//Dbtup::getEmptyPageThCopy()void Dbtup::getThAtPage(Fragrecord* const regFragPtr,                        Page* const regPagePtr,                        Signal* signal,                        Uint32& pageOffset) {  Uint32 freeListHeader = regPagePtr->pageWord[ZFREELIST_HEADER_POS];  Uint32 startTuple = freeListHeader >> 16;  Uint32 endTuple = freeListHeader & 0xffff;  pageOffset = startTuple;	/* START IS THE ONE ALLOCATED */  if (startTuple > 0) {   if (startTuple != endTuple) {/* ---------------------------------------------------------------- *//*       NOT THE LAST, SIMPLY RESHUFFLE POINTERS.                   *//* ---------------------------------------------------------------- */     ndbrequire(startTuple < ZWORDS_ON_PAGE);     startTuple = regPagePtr->pageWord[startTuple] & 0xffff;     regPagePtr->pageWord[ZFREELIST_HEADER_POS] = endTuple +                                                  (startTuple << 16);     return;   } else {/* ---------------------------------------------------------------- *//*       THIS WAS THE LAST TUPLE HEADER IN THIS PAGE. REMOVE IT FROM*//*       THE TUPLE HEADER FREE LIST OR TH COPY FREE LIST. ALSO SET  *//*       A PROPER PAGE STATE.                                       *//*                                                                  *//*       WE ALSO HAVE TO INSERT AN UNDO LOG ENTRY TO ENSURE PAGE    *//*       ARE MAINTAINED EVEN AFTER A SYSTEM CRASH.                  *//* ---------------------------------------------------------------- */     if (isUndoLoggingNeeded(regFragPtr,                             regPagePtr->pageWord[ZPAGE_FRAG_PAGE_ID_POS])) {       cprAddUndoLogPageHeader(signal,                               regPagePtr,                               regFragPtr);     }//if     if (regPagePtr->pageWord[ZPAGE_STATE_POS] == ZTH_MM_FREE) {       ljam();       regFragPtr->thFreeFirst = regPagePtr->pageWord[ZPAGE_NEXT_POS];       regPagePtr->pageWord[ZPAGE_STATE_POS] = ZTH_MM_FULL;     } else if (regPagePtr->pageWord[ZPAGE_STATE_POS] == ZTH_MM_FREE_COPY) {       ljam();       regFragPtr->thFreeCopyFirst = regPagePtr->pageWord[ZPAGE_NEXT_POS];       regPagePtr->pageWord[ZPAGE_STATE_POS] = ZTH_MM_FULL_COPY;     } else {       ndbrequire(false);     }//if     regPagePtr->pageWord[ZFREELIST_HEADER_POS] = 0;     regPagePtr->pageWord[ZPAGE_NEXT_POS] = RNIL;   }//if  } else {    ndbrequire(false);  }//if  return;}//Dbtup::getThAtPage()void Dbtup::getThAtPageSr(Page* const regPagePtr,                          Uint32& pageOffset) {  Uint32 freeListHeader = regPagePtr->pageWord[ZFREELIST_HEADER_POS];  Uint32 startTuple = freeListHeader >> 16;  Uint32 endTuple = freeListHeader & 0xffff;  ndbrequire(startTuple > 0);  pageOffset = startTuple;	/* START IS THE ONE ALLOCATED */  if (startTuple == endTuple) {    ljam();/* ---------------------------------------------------------------- *//*       THIS WAS THE LAST TUPLE HEADER IN THIS PAGE. SINCE WE ARE  *//*       UNDOING PAGE UPDATES WE SHALL NOT DO ANYTHING ABOUT THE    *//*       PAGE HEADER. THIS IS DONE BY SEPARATE LOG RECORDS.         *//* ---------------------------------------------------------------- */    regPagePtr->pageWord[ZFREELIST_HEADER_POS] = 0;  } else {    ljam();/* ---------------------------------------------------------------- *//*       NOT THE LAST, SIMPLY RESHUFFLE POINTERS.                   *//* ---------------------------------------------------------------- */    ndbrequire(startTuple < ZWORDS_ON_PAGE);    startTuple = regPagePtr->pageWord[startTuple] & 0xffff;	/* GET NEXT POINTER */    regPagePtr->pageWord[ZFREELIST_HEADER_POS] = endTuple + (startTuple << 16);  }//if}//Dbtup::getThAtPageSr()void Dbtup::freeTh(Fragrecord*  const regFragPtr,                   Tablerec* const regTabPtr,                   Signal* signal,                   Page*  const regPagePtr,                   Uint32 freePageOffset) {  Uint32 startOfList = regPagePtr->pageWord[ZFREELIST_HEADER_POS] >> 16;  Uint32 endOfList = regPagePtr->pageWord[ZFREELIST_HEADER_POS] & 0xffff;/* LINK THE NOW FREE TUPLE SPACE INTO BEGINNING OF FREE LIST OF OF THE PAGE *//* SET THE SIZE OF THE NEW FREE SPACE AND LINK TO THE OLD START OF FREELIST */  ndbrequire(freePageOffset < ZWORDS_ON_PAGE);  regPagePtr->pageWord[freePageOffset] = (regTabPtr->tupheadsize << 16) +                                          startOfList;  if (endOfList == 0) {    ljam();    ndbrequire(startOfList == 0);/* ---------------------------------------------------------------- *//*       THE PAGE WAS PREVIOUSLY FULL, NO EMPTY SPACE AT ALL.       *//*       THIS ENTRY WILL THEN BE BOTH THE START AND THE END OF THE  *//*       LIST. IT WILL ALSO BE PUT ON THE PROPER FREE LIST.         *//*                                                                  *//*       UPDATE OF NEXT POINTER AND PAGE STATE MUST BE LOGGED TO    *//*       THE UNDO LOG TO ENSURE THAT FREE LISTS ARE OK AFTER A      *//*       SYSTEM RESTART.                                            *//* ---------------------------------------------------------------- */    if (isUndoLoggingNeeded(regFragPtr, regPagePtr->pageWord[ZPAGE_FRAG_PAGE_ID_POS])) {      cprAddUndoLogPageHeader(signal,                              regPagePtr,                              regFragPtr);    }//if    regPagePtr->pageWord[ZFREELIST_HEADER_POS] = (freePageOffset << 16) + freePageOffset;    if (regPagePtr->pageWord[ZPAGE_STATE_POS] == ZTH_MM_FULL) {      ljam();      regPagePtr->pageWord[ZPAGE_NEXT_POS] = regFragPtr->thFreeFirst;      regFragPtr->thFreeFirst = regPagePtr->pageWord[ZPAGE_FRAG_PAGE_ID_POS];	      regPagePtr->pageWord[ZPAGE_STATE_POS] = ZTH_MM_FREE;    } else {      ndbrequire(regPagePtr->pageWord[ZPAGE_STATE_POS] == ZTH_MM_FULL_COPY);      ljam();      regPagePtr->pageWord[ZPAGE_NEXT_POS] = regFragPtr->thFreeCopyFirst;      regFragPtr->thFreeCopyFirst = regPagePtr->pageWord[ZPAGE_FRAG_PAGE_ID_POS];      regPagePtr->pageWord[ZPAGE_STATE_POS] = ZTH_MM_FREE_COPY;    }//if  } else {    ljam();    regPagePtr->pageWord[ZFREELIST_HEADER_POS] = (freePageOffset << 16) + endOfList;  }//if}//Dbtup::freeTh()void Dbtup::freeThSr(Tablerec* const regTabPtr,                     Page*  const regPagePtr,                     Uint32 freePageOffset) {/* ------------------------------------------------------------------------ *//* LINK THE NOW FREE TUPLE SPACE INTO BEGINNING OF FREE LIST OF OF THE PAGE *//* SET THE SIZE OF THE NEW FREE SPACE AND LINK TO THE OLD START OF FREELIST *//* ------------------------------------------------------------------------ */  Uint32 startOfList = regPagePtr->pageWord[ZFREELIST_HEADER_POS] >> 16;  Uint32 endOfList = regPagePtr->pageWord[ZFREELIST_HEADER_POS] & 0xffff;  ndbrequire(freePageOffset < ZWORDS_ON_PAGE);  regPagePtr->pageWord[freePageOffset] = (regTabPtr->tupheadsize << 16) + startOfList;  if (endOfList == 0) {    ljam();    ndbrequire(startOfList == 0);/* ---------------------------------------------------------------- *//*       THE PAGE WAS PREVIOUSLY FULL, NO EMPTY SPACE AT ALL.       *//*       THIS ENTRY WILL THEN BE BOTH THE START AND THE END OF THE  *//*       LIST. IT WILL ALSO BE PUT ON THE PROPER FREE LIST.         *//* ---------------------------------------------------------------- */    regPagePtr->pageWord[ZFREELIST_HEADER_POS] = (freePageOffset << 16) + freePageOffset;  } else {    ljam();    regPagePtr->pageWord[ZFREELIST_HEADER_POS] = (freePageOffset << 16) + endOfList;  }//if}//Dbtup::freeThSr()

⌨️ 快捷键说明

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