📄 dbtup.hpp
字号:
#define ZLCPR_ABORT_UPDATE 4 /* UNDO AN UPDATE OPERATION THAT WAS ACTIVE IN LCP */#define ZLCPR_ABORT_INSERT 5 /* UNDO AN INSERT OPERATION THAT WAS ACTIVE IN LCP */#define ZTABLE_DESCRIPTOR 6 /* TABLE DESCRIPTOR */#define ZINDICATE_NO_OP_ACTIVE 7 /* ENSURE THAT NO OPERATION ACTIVE AFTER RESTART */#define ZLCPR_UNDO_LOG_PAGE_HEADER 8 /* CHANGE IN PAGE HEADER IS UNDO LOGGED */#define ZLCPR_TYPE_UPDATE_GCI 9 /* Update GCI at commit time */#define ZNO_CHECKPOINT_RECORDS 10 /* NUMBER OF CHECKPOINTRECORD TYPES */ /* RESULT CODES */ /* ELEMENT POSITIONS IN SYSTEM RESTART INFO PAGE OF THE DATA FILE */#define ZSRI_NO_OF_FRAG_PAGES_POS 10 /* NUMBER OF FRAGMENT PAGES WHEN CHECKPOINT STARTED */#define ZSRI_TUP_RESERVED_SIZE_POS 11 /* RESERVED SIZE OF THE TUPLE WHEN CP STARTED */#define ZSRI_TUP_FIXED_AREA_POS 12 /* SIZE OF THE TUPLE FIXED AREA WHEN CP STARTED */#define ZSRI_TAB_DESCR_SIZE 13 /* SIZE OF THE TABLE DESCRIPTOR WHEN CP STARTED */#define ZSRI_NO_OF_ATTRIBUTES_POS 14 /* NUMBER OF ATTRIBUTES */#define ZSRI_UNDO_LOG_END_REC_ID 15 /* LAST UNDO LOG RECORD ID FOR THIS CHECKPOINT */#define ZSRI_UNDO_LOG_END_PAGE_ID 16 /* LAST USED LOG PAGE ID FOR THIS CHECKPOINT */#define ZSRI_TH_FREE_FIRST 17 /* FIRST FREE PAGE OF TUPLE HEADERS */#define ZSRI_TH_FREE_COPY_FIRST 18 /* FIRST FREE PAGE OF TUPLE HEADER COPIES */#define ZSRI_EMPTY_PRIM_PAGE 27 /* FIRST EMPTY PAGE */#define ZSRI_NO_COPY_PAGES_ALLOC 28 /* NO COPY PAGES IN FRAGMENT AT LOCAL CHECKPOINT */#define ZSRI_UNDO_FILE_VER 29 /* CHECK POINT ID OF THE UNDO FILE */#define ZSRI_NO_OF_INDEX_ATTR 30 /* No of index attributes */#define ZNO_OF_PAGES_CLUSTER_REC 0//------------------------------------------------------------// TUP_CONTINUEB codes//------------------------------------------------------------#define ZSTART_EXEC_UNDO_LOG 0#define ZCONT_START_SAVE_CL 1#define ZCONT_SAVE_DP 2#define ZCONT_EXECUTE_LC 3#define ZCONT_LOAD_DP 4#define ZLOAD_BAL_LCP_TIMER 5#define ZINITIALISE_RECORDS 6#define ZREL_FRAG 7#define ZREPORT_MEMORY_USAGE 8#define ZBUILD_INDEX 9#define ZINDEX_STORAGE 0#define ZDATA_WORD_AT_DISK_PAGE 2030#define ZALLOC_DISK_PAGE_LAST_INDEX 2047#define ZWORD_IN_BLOCK 127 /* NO OF WORD IN A BLOCK */#define ZNO_DISK_PAGES_FILE_REC 100#define ZMASK_PAGE_INDEX 0x7ff#define ZBIT_PAGE_INDEX 11 /* 8 KBYT PAGE = 2048 WORDS */#define ZSCAN_PROCEDURE 0#define ZCOPY_PROCEDURE 2#define ZSTORED_PROCEDURE_DELETE 3#define ZSTORED_PROCEDURE_FREE 0xffff#define ZMIN_PAGE_LIMIT_TUP_COMMITREQ 2#define ZUNDO_PAGE_HEADER_SIZE 2 /* SIZE OF UNDO PAGE HEADER */#endifclass Dbtup: public SimulatedBlock {public: typedef bool (Dbtup::* ReadFunction)(Uint32*, AttributeHeader*, Uint32, Uint32); typedef bool (Dbtup::* UpdateFunction)(Uint32*, Uint32, Uint32);// State valuesenum State { NOT_INITIALIZED = 0, COMMON_AREA_PAGES = 1, UNDO_RESTART_PAGES = 2, UNDO_PAGES = 3, READ_ONE_PAGE = 4, CHECKPOINT_DATA_READ = 7, CHECKPOINT_DATA_READ_PAGE_ZERO = 8, CHECKPOINT_DATA_WRITE = 9, CHECKPOINT_DATA_WRITE_LAST = 10, CHECKPOINT_DATA_WRITE_FLUSH = 11, CHECKPOINT_UNDO_READ = 12, CHECKPOINT_UNDO_READ_FIRST = 13, CHECKPOINT_UNDO_WRITE = 14, CHECKPOINT_UNDO_WRITE_FLUSH = 15, CHECKPOINT_TD_READ = 16, IDLE = 17, ACTIVE = 18, SYSTEM_RESTART = 19, NO_OTHER_OP = 20, COMMIT_DELETE = 21, TO_BE_COMMITTED = 22, ABORTED = 23, ALREADY_ABORTED_INSERT = 24, ALREADY_ABORTED = 25, ABORT_INSERT = 26, ABORT_UPDATE = 27, INIT = 28, INITIAL_READ = 29, INTERPRETED_EXECUTION = 30, FINAL_READ = 31, FINAL_UPDATE = 32, DISCONNECTED = 33, DEFINED = 34, ERROR_WAIT_TUPKEYREQ = 35, STARTED = 36, NOT_DEFINED = 37, COMPLETED = 38, WAIT_ABORT = 39, NORMAL_PAGE = 40, COPY_PAGE = 41, DELETE_BLOCK = 42, WAIT_STORED_PROCEDURE_ATTR_INFO = 43, DATA_FILE_READ = 45, DATA_FILE_WRITE = 46, LCP_DATA_FILE_READ = 47, LCP_DATA_FILE_WRITE = 48, LCP_DATA_FILE_WRITE_WITH_UNDO = 49, LCP_DATA_FILE_CLOSE = 50, LCP_UNDO_FILE_READ = 51, LCP_UNDO_FILE_CLOSE = 52, LCP_UNDO_FILE_WRITE = 53, OPENING_DATA_FILE = 54, INITIATING_RESTART_INFO = 55, INITIATING_FRAGMENT = 56, OPENING_UNDO_FILE = 57, READING_RESTART_INFO = 58, INIT_UNDO_SEGMENTS = 59, READING_TAB_DESCR = 60, READING_DATA_PAGES = 61, WAIT_COPY_PROCEDURE = 62, TOO_MUCH_AI = 63, SAME_PAGE = 64, DEFINING = 65, TUPLE_BLOCKED = 66, ERROR_WAIT_STORED_PROCREQ = 67};// Records/* ************** ATTRIBUTE INFO BUFFER RECORD ****************** *//* THIS RECORD IS USED AS A BUFFER FOR INCOMING AND OUTGOING DATA *//* ************************************************************** */struct Attrbufrec { Uint32 attrbuf[ZATTRBUF_SIZE];}; /* p2c: size = 128 bytes */typedef Ptr<Attrbufrec> AttrbufrecPtr;/* ********** CHECKPOINT INFORMATION ************ *//* THIS RECORD HOLDS INFORMATION NEEDED TO *//* PERFORM A CHECKPOINT. IT'S POSSIBLE TO RUN *//* MULTIPLE CHECKPOINTS AT A TIME. THIS RECORD *//* MAKES IT POSSIBLE TO DISTINGER BETWEEN THE *//* DIFFERENT CHECKPOINTS. *//* ********************************************** */struct CheckpointInfo { Uint32 lcpNextRec; /* NEXT RECORD IN FREELIST */ Uint32 lcpCheckpointVersion; /* VERSION OF THE CHECKPOINT */ Uint32 lcpLocalLogInfoP; /* POINTER TO A LOCAL LOG INFO RECORD */ Uint32 lcpUserptr; /* USERPOINTER TO THE BLOCK REQUESTING THE CP */ Uint32 lcpFragmentP; /* FRAGMENT POINTER TO WHICH THE CHECKPOINT APPLIES */ Uint32 lcpFragmentId; /* FRAGMENT ID */ Uint32 lcpTabPtr; /* TABLE POINTER */ Uint32 lcpDataBufferSegmentP; /* POINTER TO A DISK BUFFER SEGMENT POINTER (DATA) */ Uint32 lcpDataFileHandle; /* FILE HANDLES FOR DATA FILE. LOG FILE HANDLE IN LOCAL_LOG_INFO_RECORD */ /* FILE HANDLE TO THE OPEN DATA FILE */ Uint32 lcpNoOfPages; Uint32 lcpThFreeFirst; Uint32 lcpThFreeCopyFirst; Uint32 lcpEmptyPrimPage; Uint32 lcpNoCopyPagesAlloc; Uint32 lcpTmpOperPtr; /* TEMPORARY STORAGE OF OPER_PTR DURING SAVE */ BlockReference lcpBlockref; /* BLOCKREFERENCE TO THE BLOCK REQUESTING THE CP */};typedef Ptr<CheckpointInfo> CheckpointInfoPtr;/* *********** DISK BUFFER SEGMENT INFO ********* *//* THIS RECORD HOLDS INFORMATION NEEDED DURING *//* A WRITE OF THE DATA BUFFER TO DISK. WHEN THE *//* WRITE SIGNAL IS SENT A POINTER TO THIS RECORD *//* IS INCLUDED. WHEN THE WRITE IS COMPLETED AND *//* CONFIRMED THE PTR TO THIS RECORD IS RETURNED *//* AND THE BUFFER PAGES COULD EASILY BE LOCATED *//* AND DEALLOCATED. THE CHECKPOINT_INFO_VERSION *//* KEEPS TRACK OF THE CHECPOINT_INFO_RECORD THAT *//* INITIATED THE WRITE AND THE CP_PAGE_TO_DISK *//* ELEMENT COULD BE INCREASED BY THE NUMBER OF *//* PAGES WRITTEN. *//* ********************************************** */struct DiskBufferSegmentInfo { Uint32 pdxDataPage[16]; /* ARRAY OF DATA BUFFER PAGES */ Uint32 pdxUndoBufferSet[2]; Uint32 pdxNextRec; State pdxBuffertype; State pdxOperation; /*---------------------------------------------------------------------------*/ /* PDX_FLAGS BITS AND THEIR USAGE: */ /* BIT 0 1 COMMENT */ /*---------------------------------------------------------------------------*/ /* 0 SEGMENT INVALID SEGMENT VALID USED DURING READS */ /* 1-15 NOT USED */ /*---------------------------------------------------------------------------*/ Uint32 pdxCheckpointInfoP; /* USED DURING LOCAL CHKP */ Uint32 pdxRestartInfoP; /* USED DURING RESTART */ Uint32 pdxLocalLogInfoP; /* POINTS TO A LOCAL LOG INFO */ Uint32 pdxFilePage; /* START PAGE IN FILE */ Uint32 pdxNumDataPages; /* NUMBER OF DATA PAGES */};typedef Ptr<DiskBufferSegmentInfo> DiskBufferSegmentInfoPtr;struct Fragoperrec { bool definingFragment; Uint32 nextFragoprec; Uint32 lqhPtrFrag; Uint32 fragidFrag; Uint32 tableidFrag; Uint32 fragPointer; Uint32 attributeCount; Uint32 currNullBit; Uint32 noOfNullBits; Uint32 noOfNewAttrCount; Uint32 charsetIndex; BlockReference lqhBlockrefFrag; bool inUse;};typedef Ptr<Fragoperrec> FragoperrecPtr; // Position for use by scan struct PagePos { Uint32 m_fragId; // "base" fragment id Uint32 m_fragBit; // two fragments in 5.0 Uint32 m_pageId; Uint32 m_tupleNo; bool m_match; }; // Tup scan op (compare Dbtux::ScanOp) struct ScanOp { enum { Undef = 0, First = 1, // before first entry Locked = 4, // at current entry (no lock needed) Next = 5, // looking for next extry Last = 6, // after last entry Invalid = 9 // cannot return REF to LQH currently }; Uint16 m_state; Uint16 m_lockwait; // unused Uint32 m_userPtr; // scanptr.i in LQH Uint32 m_userRef; Uint32 m_tableId; Uint32 m_fragId; // "base" fragment id Uint32 m_fragPtrI[2]; Uint32 m_transId1; Uint32 m_transId2; PagePos m_scanPos; union { Uint32 nextPool; Uint32 nextList; }; Uint32 prevList; }; typedef Ptr<ScanOp> ScanOpPtr; ArrayPool<ScanOp> c_scanOpPool; void scanFirst(Signal* signal, ScanOpPtr scanPtr); void scanNext(Signal* signal, ScanOpPtr scanPtr); void scanClose(Signal* signal, ScanOpPtr scanPtr); void releaseScanOp(ScanOpPtr& scanPtr);struct Fragrecord { Uint32 nextStartRange; Uint32 currentPageRange; Uint32 rootPageRange; Uint32 noOfPages; Uint32 emptyPrimPage; Uint32 firstusedOprec; Uint32 lastusedOprec; Uint32 thFreeFirst; Uint32 thFreeCopyFirst; Uint32 noCopyPagesAlloc; Uint32 checkpointVersion; Uint32 minPageNotWrittenInCheckpoint; Uint32 maxPageWrittenInCheckpoint; State fragStatus; Uint32 fragTableId; Uint32 fragmentId; Uint32 nextfreefrag; DLList<ScanOp> m_scanList; Fragrecord(ArrayPool<ScanOp> & scanOpPool) : m_scanList(scanOpPool) {}};typedef Ptr<Fragrecord> FragrecordPtr;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -