📄 dbdict.hpp
字号:
} } } void setError(const CreateTrigRef* ref) { m_lastError = AlterTrigRef::NoError; if (ref != 0) { m_lastError = (AlterTrigRef::ErrorCode)ref->getErrorCode(); if (! hasError()) { m_errorCode = m_lastError; m_errorLine = ref->getErrorLine(); m_errorNode = ref->getErrorNode(); } } } void setError(const DropTrigRef* ref) { m_lastError = AlterTrigRef::NoError; if (ref != 0) { m_lastError = (AlterTrigRef::ErrorCode)ref->getErrorCode(); if (! hasError()) { m_errorCode = m_lastError; m_errorLine = ref->getErrorLine(); m_errorNode = ref->getErrorNode(); } } } }; typedef Ptr<OpAlterTrigger> OpAlterTriggerPtr; // Common operation record poolpublic: STATIC_CONST( opCreateTableSize = sizeof(CreateTableRecord) ); STATIC_CONST( opDropTableSize = sizeof(DropTableRecord) ); STATIC_CONST( opCreateIndexSize = sizeof(OpCreateIndex) ); STATIC_CONST( opDropIndexSize = sizeof(OpDropIndex) ); STATIC_CONST( opAlterIndexSize = sizeof(OpAlterIndex) ); STATIC_CONST( opBuildIndexSize = sizeof(OpBuildIndex) ); STATIC_CONST( opCreateEventSize = sizeof(OpCreateEvent) ); STATIC_CONST( opSubEventSize = sizeof(OpSubEvent) ); STATIC_CONST( opDropEventSize = sizeof(OpDropEvent) ); STATIC_CONST( opSignalUtilSize = sizeof(OpSignalUtil) ); STATIC_CONST( opCreateTriggerSize = sizeof(OpCreateTrigger) ); STATIC_CONST( opDropTriggerSize = sizeof(OpDropTrigger) ); STATIC_CONST( opAlterTriggerSize = sizeof(OpAlterTrigger) );private:#define PTR_ALIGN(n) ((((n)+sizeof(void*)-1)>>2)&~((sizeof(void*)-1)>>2)) union OpRecordUnion { Uint32 u_opCreateTable [PTR_ALIGN(opCreateTableSize)]; Uint32 u_opDropTable [PTR_ALIGN(opDropTableSize)]; Uint32 u_opCreateIndex [PTR_ALIGN(opCreateIndexSize)]; Uint32 u_opDropIndex [PTR_ALIGN(opDropIndexSize)]; Uint32 u_opCreateEvent [PTR_ALIGN(opCreateEventSize)]; Uint32 u_opSubEvent [PTR_ALIGN(opSubEventSize)]; Uint32 u_opDropEvent [PTR_ALIGN(opDropEventSize)]; Uint32 u_opSignalUtil [PTR_ALIGN(opSignalUtilSize)]; Uint32 u_opAlterIndex [PTR_ALIGN(opAlterIndexSize)]; Uint32 u_opBuildIndex [PTR_ALIGN(opBuildIndexSize)]; Uint32 u_opCreateTrigger[PTR_ALIGN(opCreateTriggerSize)]; Uint32 u_opDropTrigger [PTR_ALIGN(opDropTriggerSize)]; Uint32 u_opAlterTrigger [PTR_ALIGN(opAlterTriggerSize)]; Uint32 nextPool; }; ArrayPool<OpRecordUnion> c_opRecordPool; // Operation records KeyTable2<CreateTableRecord, OpRecordUnion> c_opCreateTable; KeyTable2<DropTableRecord, OpRecordUnion> c_opDropTable; KeyTable2<OpCreateIndex, OpRecordUnion> c_opCreateIndex; KeyTable2<OpDropIndex, OpRecordUnion> c_opDropIndex; KeyTable2<OpAlterIndex, OpRecordUnion> c_opAlterIndex; KeyTable2<OpBuildIndex, OpRecordUnion> c_opBuildIndex; KeyTable2<OpCreateEvent, OpRecordUnion> c_opCreateEvent; KeyTable2<OpSubEvent, OpRecordUnion> c_opSubEvent; KeyTable2<OpDropEvent, OpRecordUnion> c_opDropEvent; KeyTable2<OpSignalUtil, OpRecordUnion> c_opSignalUtil; KeyTable2<OpCreateTrigger, OpRecordUnion> c_opCreateTrigger; KeyTable2<OpDropTrigger, OpRecordUnion> c_opDropTrigger; KeyTable2<OpAlterTrigger, OpRecordUnion> c_opAlterTrigger; // Unique key for operation XXX move to some system table Uint32 c_opRecordSequence; /* * Master DICT can be locked in 2 mutually exclusive ways: * * 1) for schema ops, via operation records * 2) against schema ops, via a lock queue * * Current use of 2) is by a starting node, to prevent schema ops * until started. The ops are refused (BlockState != BS_IDLE), * not queued. * * Master failure is not handled, in node start case the starting * node will crash too anyway. Use lock table in future.. * * The lock queue is "serial" but other behaviour is possible * by checking lock types e.g. to allow parallel node starts. * * Checking release of last op record is not convenient with * current structure (5.0). Instead we poll via continueB. * * XXX only table ops check BlockState */ struct DictLockType; friend struct DictLockType; struct DictLockType { DictLockReq::LockType lockType; BlockState blockState; const char* text; }; struct DictLockRecord; friend struct DictLockRecord; struct DictLockRecord { DictLockReq req; const DictLockType* lt; bool locked; union { Uint32 nextPool; Uint32 nextList; }; Uint32 prevList; }; typedef Ptr<DictLockRecord> DictLockPtr; ArrayPool<DictLockRecord> c_dictLockPool; DLFifoList<DictLockRecord> c_dictLockQueue; bool c_dictLockPoll; static const DictLockType* getDictLockType(Uint32 lockType); void sendDictLockInfoEvent(Uint32 pollCount); void sendDictLockInfoEvent(DictLockPtr lockPtr, const char* text); void checkDictLockQueue(Signal* signal, bool poll); void sendDictLockConf(Signal* signal, DictLockPtr lockPtr); void sendDictLockRef(Signal* signal, DictLockReq req, Uint32 errorCode); // control polling i.e. continueB loop void setDictLockPoll(Signal* signal, bool on, Uint32 pollCount); // NF handling void removeStaleDictLocks(Signal* signal, const Uint32* theFailedNodes); // Statement blocks /* ------------------------------------------------------------ */ // Start/Restart Handling /* ------------------------------------------------------------ */ void sendSTTORRY(Signal* signal); void sendNDB_STTORRY(Signal* signal); void initSchemaFile(Signal* signal); /* ------------------------------------------------------------ */ // Drop Table Handling /* ------------------------------------------------------------ */ void releaseTableObject(Uint32 tableId, bool removeFromHash = true); /* ------------------------------------------------------------ */ // General Stuff /* ------------------------------------------------------------ */ Uint32 getFreeTableRecord(Uint32 primaryTableId); Uint32 getFreeTriggerRecord(); bool getNewAttributeRecord(TableRecordPtr tablePtr, AttributeRecordPtr & attrPtr); void packTableIntoPages(Signal* signal, Uint32 tableId, Uint32 pageId); void packTableIntoPagesImpl(SimpleProperties::Writer &, TableRecordPtr, Signal* signal= 0); void sendGET_TABINFOREQ(Signal* signal, Uint32 tableId); void sendTC_SCHVERREQ(Signal* signal, Uint32 tableId, BlockReference tcRef); /* ------------------------------------------------------------ */ // System Restart Handling /* ------------------------------------------------------------ */ void initSendSchemaData(Signal* signal); void sendSchemaData(Signal* signal); Uint32 sendSCHEMA_INFO(Signal* signal, Uint32 nodeId, Uint32* pagePointer); void checkSchemaStatus(Signal* signal); void sendDIHSTARTTAB_REQ(Signal* signal); /* ------------------------------------------------------------ */ // Receive Table Handling /* ------------------------------------------------------------ */ void handleTabInfoInit(SimpleProperties::Reader &, ParseDictTabInfoRecord *, bool checkExist = true); void handleTabInfo(SimpleProperties::Reader & it, ParseDictTabInfoRecord *); void handleAddTableFailure(Signal* signal, Uint32 failureLine, Uint32 tableId); bool verifyTableCorrect(Signal* signal, Uint32 tableId); /* ------------------------------------------------------------ */ // Add Table Handling /* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */ // Add Fragment Handling /* ------------------------------------------------------------ */ void sendLQHADDATTRREQ(Signal*, CreateTableRecordPtr, Uint32 attributePtrI); /* ------------------------------------------------------------ */ // Read/Write Schema and Table files /* ------------------------------------------------------------ */ void updateSchemaState(Signal* signal, Uint32 tableId, SchemaFile::TableEntry*, Callback*); void startWriteSchemaFile(Signal* signal); void openSchemaFile(Signal* signal, Uint32 fileNo, Uint32 fsPtr, bool writeFlag, bool newFile); void writeSchemaFile(Signal* signal, Uint32 filePtr, Uint32 fsPtr); void writeSchemaConf(Signal* signal, FsConnectRecordPtr fsPtr); void closeFile(Signal* signal, Uint32 filePtr, Uint32 fsPtr); void closeWriteSchemaConf(Signal* signal, FsConnectRecordPtr fsPtr); void initSchemaFile_conf(Signal* signal, Uint32 i, Uint32 returnCode); void writeTableFile(Signal* signal, Uint32 tableId, SegmentedSectionPtr tabInfo, Callback*); void startWriteTableFile(Signal* signal, Uint32 tableId); void openTableFile(Signal* signal, Uint32 fileNo, Uint32 fsPtr, Uint32 tableId, bool writeFlag); void writeTableFile(Signal* signal, Uint32 filePtr, Uint32 fsPtr); void writeTableConf(Signal* signal, FsConnectRecordPtr fsPtr); void closeWriteTableConf(Signal* signal, FsConnectRecordPtr fsPtr); void startReadTableFile(Signal* signal, Uint32 tableId); void openReadTableRef(Signal* signal, FsConnectRecordPtr fsPtr); void readTableFile(Signal* signal, Uint32 filePtr, Uint32 fsPtr); void readTableConf(Signal* signal, FsConnectRecordPtr fsPtr); void readTableRef(Signal* signal, FsConnectRecordPtr fsPtr); void closeReadTableConf(Signal* signal, FsConnectRecordPtr fsPtr); void startReadSchemaFile(Signal* signal); void openReadSchemaRef(Signal* signal, FsConnectRecordPtr fsPtr); void readSchemaFile(Signal* signal, Uint32 filePtr, Uint32 fsPtr); void readSchemaConf(Signal* signal, FsConnectRecordPtr fsPtr); void readSchemaRef(Signal* signal, FsConnectRecordPtr fsPtr); void closeReadSchemaConf(Signal* signal, FsConnectRecordPtr fsPtr); bool convertSchemaFileTo_5_0_6(XSchemaFile*); /* ------------------------------------------------------------ */ // Get table definitions /* ------------------------------------------------------------ */ void sendGET_TABINFOREF(Signal* signal, GetTabInfoReq*, GetTabInfoRef::ErrorCode errorCode); void sendGET_TABLEID_REF(Signal* signal, GetTableIdReq * req, GetTableIdRef::ErrorCode errorCode); void sendGetTabResponse(Signal* signal); /* ------------------------------------------------------------ */ // Indexes and triggers /* ------------------------------------------------------------ */ // reactivate and rebuild indexes on start up void activateIndexes(Signal* signal, Uint32 i); void rebuildIndexes(Signal* signal, Uint32 i); // create index void createIndex_recvReply(Signal* signal, const CreateIndxConf* conf, const CreateIndxRef* ref); void createIndex_slavePrepare(Signal* signal, OpCreateIndexPtr opPtr); void createIndex_toCreateTable(Signal* signal, OpCreateIndexPtr opPtr); void createIndex_fromCreateTable(Signal* signal, OpCreateIndexPtr opPtr); void createIndex_toAlterIndex(Signal* signal, OpCreateIndexPtr opPtr); void createIndex_fromAlterIndex(Signal* signal, OpCreateIndexPtr opPtr); void createIndex_slaveCommit(Signal* signal, OpCreateIndexPtr opPtr); void createIndex_slaveAbort(Signal* signal, OpCreateIndexPtr opPtr); void createIndex_sendSlaveReq(Signal* signal, OpCreateIndexPtr opPtr); void createIndex_sendReply(Signal* signal, OpCreateIndexPtr opPtr, bool); // drop index void dropIndex_recvReply(Signal* signal, const DropIndxConf* conf, const DropIndxRef* ref); void dropIndex_slavePrepare(Signal* signal, OpDropIndexPtr opPtr); void dropIndex_toAlterIndex(Signal* signal, OpDropIndexPtr opPtr); void dropIndex_fromAlterIndex(Signal* signal, OpDropIndexPtr opPtr); void dropIndex_toDropTable(Signal* signal, OpDropIndexPtr opPtr); void dropIndex_fromDropTable(Signal* signal, OpDropIndexPtr opPtr); void dropIndex_slaveCommit(Signal* signal, OpDropIndexPtr opPtr); void dropIndex_slaveAbort(Signal* signal, OpDropIndexPtr opPtr); void dropIndex_sendSlaveReq(Signal* signal, OpDropIndexPtr opPtr); void dropIndex_sendReply(Signal* signal, OpDropIndexPtr opPtr, bool); // alter index void alterIndex_recvReply(Signal* signal, const AlterIndxConf* conf, const AlterIndxRef* ref); void alterIndex_slavePrepare(Signal* signal, OpAlterIndexPtr opPtr); void alterIndex_toCreateTc(Signal* signal, OpAlterIndexPtr opPtr); void alterIndex_fromCreateTc(Signal* signal, OpAlterIndexPtr opPtr); void alterIndex_toDropTc(Signal* signal, OpAlterIndexPtr opPtr); void alterIndex_fromDropTc(Signal* signal, OpAlterIndexPtr opPtr); void alterIndex_toCreateTrigger(Signal* signal, OpAlterIndexPtr opPtr); void alterIndex_fromCreateTrigger(Signal* signal, OpAlterIndexPtr opPtr); void alterIndex_toDropTrigger(Signal* signal, OpAlterIndexPtr opPtr); void alterIndex_fromDropTrigger(Signal* signal, OpAlterIndexPtr opPtr); void alterIndex_toBuildIndex(Signal* signal, OpAlterIndexPtr opPtr); void alterIndex_fromBuildIndex(Signal* signal, OpAlterIndexPtr opPtr); void alterIndex_slaveCommit(Signal* signal, OpAlterIndexPtr opPtr); void alterIndex_slaveAbort(Signal* signal, OpAlterIndexPtr opPtr); void alterIndex_sendSlaveReq(Signal* signal, OpAlterIndexPtr opPtr); void alterIndex_sendReply(Signal* signal, OpAlterIndexPtr opPtr, bool); // build index void buildIndex_recvReply(Signal* signal, const BuildIndxConf* conf, const BuildIndxRef* ref); void buildIndex_toCreateConstr(Signal* signal, OpBuildIndexPtr opPtr); void buildIndex_fromCreateConstr(Signal* signal, OpBuildIndexPtr opPtr); void buildIndex_buildTrix(Signal* signal, OpBuildIndexPtr opPtr); void buildIndex_toDropConstr(Signal* signal, OpBuildIndexPtr opPtr); void buildIndex_fromDropConstr(Signal* signal, OpBuildIndexPtr opPtr); void buildIndex_toOnline(Signal* signal, OpBuildIndexPtr opPtr); void buildIndex_fromOnline(Signal* signal, OpBuildIndexPtr opPtr); void buildIndex_sendSlaveReq(Signal* signal, OpBuildIndexPtr opPtr); void buildIndex_sendReply(Signal* signal, OpBuildIndexPtr opPtr, bool); // Events void createEventUTIL_PREPARE(Signal* signal, Uint32 callbackData, Uint32 returnCode); void createEventUTIL_EXECUTE(Signal *signal, Uint32 callbackData, Uint32 returnCode); void dropEventUTIL_PREPARE_READ(Signal* signal, Uint32 callbackData, Uint32 returnCode); void dropEventUTIL_EXECUTE_READ(Signal* signal, Uint32 callbackData, Uint32 returnCode); void dropEventUTIL_PREPARE_DELETE(Signal* signal, Uint32 callbackData, Uint32 returnCode); void dropEventUTIL_EXECUTE_DELETE(Signal *signal, Uint32 callbackData, Uint32 returnCode); void dropEventUtilPrepareRef(Signal* signal, Uint32 callbackData, Uint32 returnCode); void dropEventUtilExecuteRef(Signal* signal, Uint32 callbackData, Uint32 returnCode); int sendSignalUtilReq(Callback *c, BlockReference ref, GlobalSignalNumber gsn, Signal* signal, Uint32 length, JobBufferLevel jbuf, LinearSectionPtr ptr[3], Uint32 noOfSections); int recvSignalUtilReq(Signal* signal, Uint32 returnCode); void completeSubStartReq(Signal* signal, Uint32 ptrI, Uint32 returnCode); void completeSubStopReq(Signal* signal, Uint32 ptrI, Uint32 returnCode); void completeSubRemoveReq(Signal* signal, Uint32 ptrI, Uint32 returnCode); void dropEvent_sendReply(Signal* signal, OpDropEventPtr evntRecPtr); void createEvent_RT_USER_CREATE(Signal* signal, OpCreateEventPtr evntRecPtr); void createEventComplete_RT_USER_CREATE(Signal* signal, OpCreateEventPtr evntRecPtr); void createEvent_RT_USER_GET(Signal* signal, OpCreateEventPtr evntRecPtr); void createEventComplete_RT_USER_GET(Signal* signal, OpCreateEventPtr evntRecPtr); void createEvent_RT_DICT_AFTER_GET(Signal* signal, OpCreateEventPtr evntRecPtr); void createEvent_nodeFailCallback(Signal* signal, Uint32 eventRecPtrI, Uint32 returnCode); void createEvent_sendReply(Signal* signal, OpCreateEventPtr evntRecPtr, LinearSectionPtr *ptr = NULL, int noLSP = 0); void prepareTransactionEventSysTable (Callback *c, Signal* signal, Uint32 senderData, UtilPrepareReq::OperationTypeValue prepReq); void prepareUtilTransaction(Callback *c, Signal* signal, Uint32 senderData, Uint32 tableId, const char *tableName, UtilPrepareReq::OperationTypeValue prepReq, Uint32 noAttr, Uint32 attrIds[], const char *attrNames[]); void executeTransEventSysTable(Callback *c, Signal *signal, const
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -