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

📄 dbacc.hpp

📁 mysql-5.0.22.tar.gz源码包
💻 HPP
📖 第 1 页 / 共 4 页
字号:
/* Copyright (C) 2003 MySQL AB   This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 2 of the License, or   (at your option) any later version.   This program is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with this program; if not, write to the Free Software   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#ifndef DBACC_H#define DBACC_H#include <pc.hpp>#include <SimulatedBlock.hpp>// primary key is stored in TUP#include <Dbtup.hpp>#ifdef DBACC_C// Debug Macros#define dbgWord32(ptr, ind, val) /*#define dbgWord32(ptr, ind, val) \if(debug_jan){ \tmp_val = val; \switch(ind){ \case 1: strcpy(tmp_string, "ZPOS_PAGE_TYPE   "); \break; \case 2: strcpy(tmp_string, "ZPOS_NO_ELEM_IN_PAGE"); \break; \case 3: strcpy(tmp_string, "ZPOS_CHECKSUM    "); \break; \case 4: strcpy(tmp_string, "ZPOS_OVERFLOWREC  "); \break; \case 5: strcpy(tmp_string, "ZPOS_FREE_AREA_IN_PAGE"); \break; \case 6: strcpy(tmp_string, "ZPOS_LAST_INDEX   "); \break; \case 7: strcpy(tmp_string, "ZPOS_INSERT_INDEX  "); \break; \case 8: strcpy(tmp_string, "ZPOS_ARRAY_POS    "); \break; \case 9: strcpy(tmp_string, "ZPOS_NEXT_FREE_INDEX"); \break; \case 10: strcpy(tmp_string, "ZPOS_NEXT_PAGE   "); \break; \case 11: strcpy(tmp_string, "ZPOS_PREV_PAGE   "); \break; \default: sprintf(tmp_string, "%-20d", ind);\} \ndbout << "Ptr: " << ptr.p->word32 << " \tIndex: " << tmp_string << " \tValue: " << tmp_val << " \tLINE: " << __LINE__ << endl; \}\*/#define dbgUndoword(ptr, ind, val)// Constants/** ------------------------------------------------------------------------  *   THESE ARE CONSTANTS THAT ARE USED FOR DEFINING THE SIZE OF BUFFERS, THE *   SIZE OF PAGE HEADERS, THE NUMBER OF BUFFERS IN A PAGE AND A NUMBER OF  *   OTHER CONSTANTS WHICH ARE CHANGED WHEN THE BUFFER SIZE IS CHANGED.  * ----------------------------------------------------------------------- */#define ZHEAD_SIZE 32#define ZCON_HEAD_SIZE 2#define ZBUF_SIZE 28#define ZEMPTYLIST 72#define ZUP_LIMIT 14#define ZDOWN_LIMIT 12#define ZSHIFT_PLUS 5#define ZSHIFT_MINUS 2#define ZFREE_LIMIT 65#define ZNO_CONTAINERS 64#define ZELEM_HEAD_SIZE 1/* ------------------------------------------------------------------------- *//*  THESE CONSTANTS DEFINE THE USE OF THE PAGE HEADER IN THE INDEX PAGES.    *//* ------------------------------------------------------------------------- */#define ZPOS_PAGE_ID 0#define ZPOS_PAGE_TYPE 1#define ZPOS_PAGE_TYPE_BIT 14#define ZPOS_EMPTY_LIST 1#define ZPOS_ALLOC_CONTAINERS 2#define ZPOS_CHECKSUM 3#define ZPOS_OVERFLOWREC 4#define ZPOS_NO_ELEM_IN_PAGE 2#define ZPOS_FREE_AREA_IN_PAGE 5#define ZPOS_LAST_INDEX 6#define ZPOS_INSERT_INDEX 7#define ZPOS_ARRAY_POS 8#define ZPOS_NEXT_FREE_INDEX 9#define ZPOS_NEXT_PAGE 10#define ZPOS_PREV_PAGE 11#define ZNORMAL_PAGE_TYPE 0#define ZOVERFLOW_PAGE_TYPE 1#define ZDEFAULT_LIST 3#define ZWORDS_IN_PAGE 2048/* --------------------------------------------------------------------------------- *//*       CONSTANTS FOR THE ZERO PAGES                                                *//* --------------------------------------------------------------------------------- */#define ZPAGEZERO_PREV_UNDOP 8#define ZPAGEZERO_NO_OVER_PAGE 9#define ZPAGEZERO_TABID 10#define ZPAGEZERO_FRAGID0 11#define ZPAGEZERO_FRAGID1 12#define ZPAGEZERO_HASH_CHECK 13#define ZPAGEZERO_DIRSIZE 14#define ZPAGEZERO_EXPCOUNTER 15#define ZPAGEZERO_NEXT_UNDO_FILE 16#define ZPAGEZERO_SLACK 17#define ZPAGEZERO_NO_PAGES 18#define ZPAGEZERO_HASHCHECKBIT 19#define ZPAGEZERO_K 20#define ZPAGEZERO_LHFRAGBITS 21#define ZPAGEZERO_LHDIRBITS 22#define ZPAGEZERO_LOCALKEYLEN 23#define ZPAGEZERO_MAXP 24#define ZPAGEZERO_MAXLOADFACTOR 25#define ZPAGEZERO_MINLOADFACTOR 26#define ZPAGEZERO_MYFID 27#define ZPAGEZERO_LAST_OVER_INDEX 28#define ZPAGEZERO_P 29#define ZPAGEZERO_NO_OF_ELEMENTS 30#define ZPAGEZERO_ELEMENT_LENGTH 31#define ZPAGEZERO_KEY_LENGTH 32#define ZPAGEZERO_NODETYPE 33#define ZPAGEZERO_SLACK_CHECK 34/* --------------------------------------------------------------------------------- *//*       CONSTANTS IN ALPHABETICAL ORDER                                             *//* --------------------------------------------------------------------------------- */#define ZADDFRAG 0#define ZCOPY_NEXT 1#define ZCOPY_NEXT_COMMIT 2#define ZCOPY_COMMIT 3#define ZCOPY_REPEAT 4#define ZCOPY_ABORT 5#define ZCOPY_CLOSE 6#define ZDIRARRAY 68#define ZDIRRANGESIZE 65//#define ZEMPTY_FRAGMENT 0#define ZFRAGMENTSIZE 64#define ZFIRSTTIME 1#define ZFS_CONNECTSIZE 300#define ZFS_OPSIZE 100#define ZKEYINKEYREQ 4#define ZLCP_CONNECTSIZE 30#define ZLEFT 1#define ZLOCALLOGFILE 2#define ZLOCKED 0#define ZMAXSCANSIGNALLEN 20#define ZMAINKEYLEN 8#define ZMAX_UNDO_VERSION 4#define ZNO_OF_DISK_VERSION 3#define ZNO_OF_OP_PER_SIGNAL 20//#define ZNOT_EMPTY_FRAGMENT 1#define ZNR_OF_UNDO_PAGE_GROUP 16#define ZOP_HEAD_INFO_LN 3#define ZOPRECSIZE 740#define ZOVERFLOWRECSIZE 5#define ZPAGE8_BASE_ADD 1#define ZPAGESIZE 128#define ZPARALLEL_QUEUE 1#define ZPDIRECTORY 1#define ZSCAN_MAX_LOCK 4#define ZSERIAL_QUEUE 2#define ZSPH1 1#define ZSPH2 2#define ZSPH3 3#define ZSPH6 6#define ZREADLOCK 0#define ZRIGHT 2#define ZROOTFRAGMENTSIZE 32#define ZSCAN_LOCK_ALL 3#define ZSCAN_OP 5#define ZSCAN_REC_SIZE 256#define ZSR_VERSION_REC_SIZE 16#define ZSTAND_BY 2#define ZTABLESIZE 16#define ZTABMAXINDEX 3#define ZUNDEFINED_OP 6#define ZUNDOHEADSIZE 7#define ZUNLOCKED 1#define ZUNDOPAGE_BASE_ADD 2#define ZUNDOPAGEINDEXBITS 13#define ZUNDOPAGEINDEX_MASK 0x1fff#define ZWRITEPAGESIZE 8#define ZWRITE_UNDOPAGESIZE 2#define ZMIN_UNDO_PAGES_AT_COMMIT 4#define ZMIN_UNDO_PAGES_AT_OPERATION 10#define ZMIN_UNDO_PAGES_AT_EXPAND 16/* --------------------------------------------------------------------------------- *//* CONTINUEB CODES                                                                   *//* --------------------------------------------------------------------------------- */#define ZLOAD_BAL_LCP_TIMER 0#define ZINITIALISE_RECORDS 1#define ZSR_READ_PAGES_ALLOC 2#define ZSTART_UNDO 3#define ZSEND_SCAN_HBREP 4#define ZREL_ROOT_FRAG 5#define ZREL_FRAG 6#define ZREL_DIR 7#define ZREPORT_MEMORY_USAGE 8#define ZLCP_OP_WRITE_RT_BREAK 9/* ------------------------------------------------------------------------- *//* ERROR CODES                                                               *//* ------------------------------------------------------------------------- */#define ZLIMIT_OF_ERROR 600 // Limit check for error codes#define ZCHECKROOT_ERROR 601 // Delete fragment error code#define ZCONNECT_SIZE_ERROR 602 // ACC_SEIZEREF#define ZDIR_RANGE_ERROR 603 // Add fragment error code#define ZFULL_FRAGRECORD_ERROR 604 // Add fragment error code#define ZFULL_ROOTFRAGRECORD_ERROR 605 // Add fragment error code#define ZROOTFRAG_STATE_ERROR 606 // Add fragment#define ZOVERTAB_REC_ERROR 607 // Add fragment#define ZSCAN_REFACC_CONNECT_ERROR 608 // ACC_SCANREF#define ZFOUR_ACTIVE_SCAN_ERROR 609 // ACC_SCANREF#define ZNULL_SCAN_REC_ERROR 610 // ACC_SCANREF#define ZDIRSIZE_ERROR 623#define ZOVER_REC_ERROR 624 // Insufficient Space#define ZPAGESIZE_ERROR 625#define ZTUPLE_DELETED_ERROR 626#define ZREAD_ERROR 626#define ZWRITE_ERROR 630#define ZTO_OP_STATE_ERROR 631#define ZTOO_EARLY_ACCESS_ERROR 632#define ZTEMPORARY_ACC_UNDO_FAILURE 677#endifclass ElementHeader {  /**   *    * l = Locked    -- If true contains operation else scan bits + hash value   * s = Scan bits   * h = Hash value   * o = Operation ptr I   *   *           1111111111222222222233   * 01234567890123456789012345678901   * lssssssssssss   hhhhhhhhhhhhhhhh   *  ooooooooooooooooooooooooooooooo   */public:  STATIC_CONST( HASH_VALUE_PART_MASK = 0xFFFF );    static bool getLocked(Uint32 data);  static bool getUnlocked(Uint32 data);  static Uint32 getScanBits(Uint32 data);  static Uint32 getHashValuePart(Uint32 data);  static Uint32 getOpPtrI(Uint32 data);  static Uint32 setLocked(Uint32 opPtrI);  static Uint32 setUnlocked(Uint32 hashValuePart, Uint32 scanBits);  static Uint32 setScanBit(Uint32 header, Uint32 scanBit);  static Uint32 clearScanBit(Uint32 header, Uint32 scanBit);};inline boolElementHeader::getLocked(Uint32 data){  return (data & 1) == 0;}inline boolElementHeader::getUnlocked(Uint32 data){  return (data & 1) == 1;}inline Uint32 ElementHeader::getScanBits(Uint32 data){  assert(getUnlocked(data));  return (data >> 1) & ((1 << MAX_PARALLEL_SCANS_PER_FRAG) - 1);}inline Uint32 ElementHeader::getHashValuePart(Uint32 data){  assert(getUnlocked(data));  return data >> 16;}inlineUint32 ElementHeader::getOpPtrI(Uint32 data){  assert(getLocked(data));  return data >> 1;}inline Uint32 ElementHeader::setLocked(Uint32 opPtrI){  return (opPtrI << 1) + 0;}inlineUint32 ElementHeader::setUnlocked(Uint32 hashValue, Uint32 scanBits){  return (hashValue << 16) + (scanBits << 1) + 1;}inlineUint32 ElementHeader::setScanBit(Uint32 header, Uint32 scanBit){  assert(getUnlocked(header));  return header | (scanBit << 1);}inlineUint32 ElementHeader::clearScanBit(Uint32 header, Uint32 scanBit){  assert(getUnlocked(header));  return header & (~(scanBit << 1));}class Dbacc: public SimulatedBlock {public:// State valuesenum State {  FREEFRAG = 0,  ACTIVEFRAG = 1,  SEND_QUE_OP = 2,  WAIT_ACC_LCPREQ = 3,  LCP_SEND_PAGES = 4,  LCP_SEND_OVER_PAGES = 5,  LCP_SEND_ZERO_PAGE = 6,  SR_READ_PAGES = 7,  SR_READ_OVER_PAGES = 8,  WAIT_ZERO_PAGE_STORED = 9,  WAIT_NOTHING = 10,  WAIT_OPEN_UNDO_LCP = 11,  WAIT_OPEN_UNDO_LCP_NEXT = 12,  WAIT_OPEN_DATA_FILE_FOR_READ = 13,  WAIT_OPEN_DATA_FILE_FOR_WRITE = 14,  OPEN_UNDO_FILE_SR = 15,  READ_UNDO_PAGE = 16,  READ_UNDO_PAGE_AND_CLOSE = 17,  WAIT_READ_DATA = 18,  WAIT_READ_PAGE_ZERO = 19,  WAIT_WRITE_DATA = 20,  WAIT_WRITE_UNDO = 21,  WAIT_WRITE_UNDO_EXIT = 22,  WAIT_CLOSE_UNDO = 23,  LCP_CLOSE_DATA = 24,  SR_CLOSE_DATA = 25,  WAIT_ONE_CONF = 26,  WAIT_TWO_CONF = 27,  LCP_FREE = 28,  LCP_ACTIVE = 29,  FREE_OP = 30,  WAIT_EXE_OP = 32,  WAIT_IN_QUEUE = 34,  EXE_OP = 35,

⌨️ 快捷键说明

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