📄 mdbdict.cpp
字号:
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
void CMdbDict::deleteTableMeta(const char *szTableName)
{
CDbTableMeta *psTableMeta;
CDbTableMeta *psPrevTableMeta;
for(psTableMeta = (CDbTableMeta *)*m_ppsTableMeta,psPrevTableMeta = NULL;psTableMeta != NULL;psPrevTableMeta = psTableMeta,psTableMeta = psTableMeta->m_psNext)
{
if(strcasecmp(psTableMeta->m_szTblName,szTableName) == 0)
{
break;
}
}
if(psTableMeta == NULL)
{
throwException(MDB_EC_NORMAL,MDB_ET_TBL_MISSING,"CMdbDict::delteTableMeta Error,Table %s is not Exist\n",szTableName);
}
if(psPrevTableMeta == NULL)
{
*m_ppsTableMeta = (CDbTableMeta *)(psTableMeta->m_psNext);
}
else
{
psPrevTableMeta->m_psNext = (CDbTableMeta *)(psTableMeta->m_psNext);
}
CDbColumnMeta *psColMeta = psTableMeta->m_psColumns;
m_pcAlloc->free((void *)psColMeta);
CDbIndexMeta *psIdxMetas = psTableMeta->m_psIndexs;
for(int i=0;i<psTableMeta->m_nIdxCnt;i++)
{
ACE_Based_Pointer<CDbColumnMeta> *psColMetas = psIdxMetas[i].m_ppsColumns;
m_pcAlloc->free((void *)psColMetas);
}
m_pcAlloc->free((void *)psIdxMetas);
/*<------------modify by mol--------------------->*/
CProcNode* pcSharePid = NULL;
while ((pcSharePid = enumSharePid(psTableMeta, pcSharePid)) != NULL)
{
deleteSharePid(psTableMeta, pcSharePid);
}
/*
CProcNode *pcProcNode = (CProcNode *)(psTableMeta->m_psSharePids);
while(pcProcNode)
{
CProcNode *pcNextNode = (CProcNode *)(pcProcNode->m_psNext);
m_pcAlloc->free((void *)pcProcNode);
pcProcNode = pcNextNode;
}
*/
m_pcAlloc->free((void *)psTableMeta);
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
void CMdbDict::calcInterPresent(int &nInternalType,int &nColLen,const char *pTblName,const char *pColName,int nColType,int m_nColTypeLen)
{
if(nColType == CT_NUM)
{
if(m_nColTypeLen > 0 && m_nColTypeLen < 3)
{
nInternalType = CIT_INT8;
nColLen = sizeof(char);
return;
}
else if(m_nColTypeLen > 2 && m_nColTypeLen < 5)
{
nInternalType = CIT_INT16;
nColLen = sizeof(short);
return;
}
else if(m_nColTypeLen > 4 && m_nColTypeLen < 10)
{
nInternalType = CIT_INT32;
nColLen = sizeof(int);
return;
}
else if(m_nColTypeLen > 9 && m_nColTypeLen < 19)
{
nInternalType = CIT_INT64;
nColLen = sizeof(long long);
return;
}
}
else if(nColType == CT_CHAR)
{
nInternalType = CIT_CHARARRAY;
nColLen = sizeof(char) * m_nColTypeLen+1; //加一是给结束0
return;
}
else if(nColType == CT_VARCHAR)
{
nInternalType = CIT_STRING;
nColLen = sizeof(long); //指针偏移量,long
return;
}
throwException(MDB_EC_NORMAL,MDB_ET_INVALID_COL_TYPE,"CMdbDict::calcInterPresent Error,Invalid ColType,Tbl:%s,Col:%s,ColType:%d\n",pTblName,pColName,nColType);
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
bool CMdbDict::fieldIsIndexKey(const char *szFieldName,CDbIndexMeta *psIndexMeta)
{
ACE_Based_Pointer<CDbColumnMeta> *psColumnMetas = psIndexMeta->m_ppsColumns;
for(int i=0;i<psIndexMeta->m_nColCnt;i++)
{
CDbColumnMeta *psColumnMeta = psColumnMetas[i];
if(strcasecmp(psColumnMeta->m_szColName,szFieldName) == 0)
return true;
}
return false;
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
CProcNode *CMdbDict::insertSharePid(CDbTableMeta *psTableMeta,int nPid)
{
/*<------------modify by mol--------------------->*/
for (int i=0; i<TBL_META_MAX_SHARE_PROCESS; i++)
{
if (!psTableMeta->m_bShareProcMark[i])
{
psTableMeta->m_bShareProcMark[i] = true;
CProcNode* psNode = new (&psTableMeta->m_shareProcesses[i]) CProcNode();
psNode->m_nPid = nPid;
psNode->m_psNext = (CProcNode*)psTableMeta->m_psSharePids;
psNode->m_ppsPrev = &(psTableMeta->m_psSharePids);
psTableMeta->m_psSharePids = psNode;
if ((CProcNode*)psNode->m_psNext != NULL)
(psNode->m_psNext)->m_ppsPrev = &(psNode->m_psNext);
return psNode;
}
}
return NULL;
/*
void *ptr;
if((ptr = m_pcAlloc->malloc(sizeof(CProcNode))) == NULL)
{
throwException(MDB_EC_NORMAL,MDB_ET_MEM_ALLOC_ERROR,"CMdbDict::insertSharePid Error,Can not Alloc Memory for CProcNode,Tbl:%s\n",psTableMeta->m_szTblName);
}
// CProcNode *psNode = reinterpret_cast<CProcNode *>(ptr);
CProcNode *psNode = new (ptr) CProcNode();
psNode->m_nPid = nPid;
psNode->m_psNext = (CProcNode *)psTableMeta->m_psSharePids;
//*((ACE_Based_Pointer<CProcNode> *)(psNode->m_ppsPrev)) = psNode->m_psNext;
psNode->m_ppsPrev = &(psTableMeta->m_psSharePids);
//cerr << (CProcNode *)psNode->m_psNext << endl;
//cerr << (ACE_Based_Pointer<CProcNode> *)psNode->m_ppsPrev << endl;
//cerr << &(psTableMeta->m_psSharePids) << endl;
psTableMeta->m_psSharePids = psNode;
if ((CProcNode*)psNode->m_psNext != NULL)
(psNode->m_psNext)->m_ppsPrev = &(psNode->m_psNext);
//cerr << "create psNode:" << (void *)psNode << endl;
return psNode;
*/
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
void CMdbDict::deleteSharePid(CDbTableMeta *psTableMeta, CProcNode *psNode)
{
/*<------------modify by mol--------------------->*/
*((ACE_Based_Pointer<CProcNode> *)(psNode->m_ppsPrev)) = psNode->m_psNext;
if((CProcNode *)psNode->m_psNext != NULL)
{
(psNode->m_psNext)->m_ppsPrev = psNode->m_ppsPrev;
}
psTableMeta->m_bShareProcMark[((char*)psNode-(char*)psTableMeta->m_shareProcesses) / sizeof(CProcNode)] = false;
/*
//cerr << (CProcNode *)psNode->m_psNext << endl;
//cerr << (ACE_Based_Pointer<CProcNode> *)psNode->m_ppsPrev << endl;
*((ACE_Based_Pointer<CProcNode> *)(psNode->m_ppsPrev)) = psNode->m_psNext;
if((CProcNode *)psNode->m_psNext != NULL)
{
//cerr << "error" << endl;
(psNode->m_psNext)->m_ppsPrev = psNode->m_ppsPrev;
}
//cerr << "destroy psNode:" << (void *)psNode << endl;
m_pcAlloc->free((void *)psNode);
*/
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
CProcNode * CMdbDict::enumSharePid(CDbTableMeta *psTableMeta,CProcNode *psPrevNode)
{
CProcNode *psProcNode;
if(psPrevNode == NULL)
{
psProcNode = psTableMeta->m_psSharePids;
}
else
{
psProcNode = psPrevNode->m_psNext;
}
return psProcNode;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -