📄 mdbdict.h
字号:
#ifndef __MDbDict_h__
#define __MDbDict_h__
#include "ace/PI_Malloc.h"
#include "ace/Process.h"
#include "ace/Process_Mutex.h"
#include "ace/OS_NS_unistd.h"
#include "ace/Based_Pointer_T.h"
#include "Exception.h"
#include "MdbApi.h"
//typedef ACE_Malloc_T<ACE_SHARED_MEMORY_POOL, ACE_Process_Mutex, ACE_PI_Control_Block> MALLOC;
typedef ACE_Malloc_T<ACE_SHARED_MEMORY_POOL,ACE_Process_Mutex,ACE_PI_Control_Block> MALLOC;
//typedef ACE_Malloc_T<ACE_MMAP_MEMORY_POOL,ACE_Process_Mutex,ACE_PI_Control_Block> MALLOC;
//typedef ACE_Malloc<ACE_SHARED_MEMORY_POOL,ACE_Process_Mutex> MALLOC;
#define TBL_META_MAX_TABLE_NAME_LEN 20
#define TBL_META_MAX_COL_NAME_LEN 20
#define TBL_META_MAX_INDEX_NAME_LEN 20
#define TBL_META_MAX_SHARE_PROCESS 100 /**< add by mol */
#define CIT_INT8 1
#define CIT_INT16 2
#define CIT_INT32 3
#define CIT_INT64 4
#define CIT_CHARARRAY 5
#define CIT_STRING 6
struct CDbColumnMeta;
struct CDbIndexMeta;
struct CProcNode
{
pid_t m_nPid;
ACE_Based_Pointer<CProcNode> m_psNext;
ACE_Based_Pointer<ACE_Based_Pointer<CProcNode> > m_ppsPrev;
};
struct CDbTableMeta
{
char m_szTblName[TBL_META_MAX_TABLE_NAME_LEN];
int m_nRecLen; //单条记录的字节数
//CTableEntry m_sTblEntry;
ACE_Based_Pointer_Basic<void> m_psTblEntry;
pid_t m_nOwnerPid; //表拥有者进程标识
ACE_Based_Pointer<CProcNode> m_psSharePids; //表共享者进程标识
//以下部分不可见
int m_nColCnt;
ACE_Based_Pointer<CDbColumnMeta> m_psColumns;
int m_nIdxCnt;
ACE_Based_Pointer<CDbIndexMeta> m_psIndexs;
ACE_Based_Pointer<CDbTableMeta> m_psNext;
CProcNode m_shareProcesses[TBL_META_MAX_SHARE_PROCESS]; /**< add by mol */
bool m_bShareProcMark[TBL_META_MAX_SHARE_PROCESS]; /**< add by mol */
};
struct CDbColumnMeta
{
char m_szColName[TBL_META_MAX_COL_NAME_LEN];
int m_nColType; //字段类型:1,number 2,char 3,varchar
int m_nColTypeLen; //字段类型长度,如char(4)即为4
int m_nColLen; //字段实际长度,以字节计
int m_nInternalType; //字段内部类型 , CIT_INT8,CIT_INT16,CIT_INT32,CIT_INT64,CIT_STRING
int m_nOffset; //字段在record中的偏移量
//int m_bNullAllowed; //是否非空
};
struct CDbIndexMeta
{
char m_szIndexName[TBL_META_MAX_INDEX_NAME_LEN];
int m_nIdxType; //index类型:1,hash;2,avl tree;3,rb tree;4,4叉数
ACE_Based_Pointer_Basic<void> m_psIndexEntry;
//以下部分不可见
int m_nColCnt;
ACE_Based_Pointer<ACE_Based_Pointer<CDbColumnMeta> > m_ppsColumns;
};
class CMdbDict
{
public:
CMdbDict(MALLOC *pcAlloc) { m_pcAlloc = pcAlloc; }
~CMdbDict() {}
void touch(ACE_Based_Pointer<CDbTableMeta> *ppsTableMeta) { m_ppsTableMeta = ppsTableMeta; }
CDbTableMeta *findTableMeta(const char *szTblName);
CDbTableMeta *getTableMeta(const char *szTblName);
CDbTableMeta *enumTableMeta(CDbTableMeta *psPrevTblMeta);
CDbColumnMeta *findColumMeta(CDbTableMeta *psDbTableMeta,const char *szColName);
CDbTableMeta *insertTableMeta(SCreateTblPara *psCreateTblPara,SCreateIdxesPara *psCreateIdxesPara);
void deleteTableMeta(const char *szTableName);
int getColumnCnt(const CDbTableMeta *psTableMeta) { return psTableMeta->m_nColCnt; }
CDbColumnMeta *getColumnMeta(const CDbTableMeta *psTableMeta,int i) { return &(((CDbColumnMeta *)(psTableMeta->m_psColumns))[i]); }
int getIndexCnt(const CDbTableMeta *psTableMeta) { return psTableMeta->m_nIdxCnt; }
CDbIndexMeta *getIndexMeta(const CDbTableMeta *psTableMeta,int i) { return &(((CDbIndexMeta *)(psTableMeta->m_psIndexs))[i]); }
int getIndexColCnt(const CDbIndexMeta *psIndexMeta) { return psIndexMeta->m_nColCnt; }
CDbColumnMeta *getIndexColMeta(const CDbIndexMeta *psIndexMeta,int i) { ACE_Based_Pointer<CDbColumnMeta> *ppsColumns = psIndexMeta->m_ppsColumns; return (CDbColumnMeta *)(ppsColumns[i]); }
bool fieldIsIndexKey(const char *szFieldName,CDbIndexMeta *psIndexMeta);
CProcNode *insertSharePid(CDbTableMeta *psTableMeta,int nPid);
void deleteSharePid(CDbTableMeta *psTableMeta, CProcNode *psNode);
CProcNode *enumSharePid(CDbTableMeta *psTableMeta,CProcNode *psPrevNode);
bool checkSharePidsExist(CDbTableMeta *psTableMeta) { return (CProcNode *)(psTableMeta->m_psSharePids) != (CProcNode *)NULL; }
private:
void calcInterPresent(int &nInternalType,int &nColLen,const char *pTblName,const char *pColName,int nColType,int m_nColTypeLen);
private:
ACE_Based_Pointer<CDbTableMeta> *m_ppsTableMeta;
MALLOC *m_pcAlloc;
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -