📄 dbacc.hpp
字号:
/* 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 + -