📄 mdbtbl.cpp
字号:
else if(nSrcFieldType == FT_UINT32)
{
*(long long*)pDstFieldVal = (long long)(*(unsigned int *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT32)
{
*(long long*)pDstFieldVal = (long long)(*(int *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_UINT64 && *(unsigned long long *)pSrcFieldVal <= 9223372036854775807LL)
{
*(long long*)pDstFieldVal = (long long)(*(unsigned long long *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT64)
{
*(long long*)pDstFieldVal = *(long long *)pSrcFieldVal;
}
}
else if(nSrcFieldType == FT_STRING && nDstFieldType == FT_STRING)
{
*(char **)pDstFieldVal = *(char **)pSrcFieldVal;
}
else
{
return false;
}
return true;
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
void CMdbTbl::getAutoFieldValByName(CRecordNode *pRec,const char *szFieldName,int &nFieldType,void *pVal)
{
CDbColumnMeta *psColumnMeta;
if((psColumnMeta = m_pcDbDict->findColumMeta(m_psTableMeta,szFieldName)) == NULL)
{
throwException(MDB_EC_NORMAL,MDB_ET_INVALID_COL_NAME,"CMdbTbl::getAutoFieldValByName Error,Can not Find ColumnMeta,Tbl:%s,Col:%s\n",m_psTableMeta->m_szTblName,szFieldName);
}
void *pData = pRec->m_psData;
pData = (char *)pData + psColumnMeta->m_nOffset;
getFieldVal(pData,psColumnMeta,nFieldType,pVal);
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
void CMdbTbl::getFieldVal(void *pData,CDbColumnMeta *psDbColumnMeta,int &nFieldType,void *pVal)
{
if(psDbColumnMeta->m_nInternalType == CIT_INT64)
{
nFieldType = FT_INT64;
memcpy((char *)pVal,(char *)pData,sizeof(long long));
}
else if(psDbColumnMeta->m_nInternalType == CIT_INT32)
{
nFieldType = FT_INT32;
memcpy((char *)pVal,(char *)pData,sizeof(int));
}
else if(psDbColumnMeta->m_nInternalType == CIT_INT16)
{
nFieldType = FT_INT16;
memcpy((char *)pVal,(char *)pData,sizeof(short));
}
else if(psDbColumnMeta->m_nInternalType == CIT_INT8)
{
nFieldType = FT_INT8;
memcpy((char *)pVal,(char *)pData,sizeof(char));
}
else if(psDbColumnMeta->m_nInternalType == CIT_CHARARRAY)
{
nFieldType = FT_STRING;
//memcpy((char *)pVal,(char *)pData,sizeof(char *));
*((char **)pVal) = (char*)pData;
}
else if(psDbColumnMeta->m_nInternalType == CIT_STRING)
{
nFieldType = FT_STRING;
long nTmp;
memcpy((char *)&nTmp,(char *)pData,sizeof(long));
if(nTmp)
{
char * ptr = (char *)pData + nTmp;
*((char **)pVal) = ptr;
}
else
{
*((char **)pVal) = (char *)NULL;
}
}
}
/*
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
void CMdbTbl::getAutoFieldRefByName(CRecordNode *pRec,const char *szFieldName,int &nFieldType,CFieldRef &sRef)
{
CDbColumnMeta *psColumnMeta;
if((psColumnMeta = m_pcDbDict->findColumMeta(m_psTableMeta,szFieldName)) == NULL)
{
throwException(META_COL_ERROR,"CMdbTbl::getFieldRefByName Error,Can not Find ColumnMeta\n");
}
void *pData = pRec->m_psData;
pData = (char *)pData + psColumnMeta->m_nOffset;
sRef.m_psColumnMeta = psColumnMeta;
sRef.m_pField = pData;
getFieldType(psColumnMeta,nFieldType);
}
*/
/*
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
void CMdbTbl::getFieldType(CDbColumnMeta *psDbColumnMeta,int &nFieldType)
{
if(psDbColumnMeta->m_nInternalType == CIT_INT64)
{
nFieldType = FT_INT64;
}
else if(psDbColumnMeta->m_nInternalType == CIT_INT32)
{
nFieldType = FT_INT32;
}
else if(psDbColumnMeta->m_nInternalType == CIT_INT16)
{
nFieldType = FT_INT16;
}
else if(psDbColumnMeta->m_nInternalType == CIT_INT8)
{
nFieldType = FT_INT8;
}
else if(psDbColumnMeta->m_nInternalType == CIT_CHARARRAY)
{
nFieldType = FT_STRING;
}
else if(psDbColumnMeta->m_nInternalType == CIT_STRING)
{
nFieldType = FT_STRING;
}
}
*/
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
void CMdbTbl::setFieldValByIndex(CRecordNode *pRec,int nFieldIndex,int nFieldType,const void *pVal)
{
CDbColumnMeta *psColumnMeta;
if(nFieldIndex >= m_pcDbDict->getColumnCnt(m_psTableMeta))
{
throwException(MDB_EC_NORMAL,MDB_ET_INVALID_COL_INDEX,"CMdbTbl::setFieldValByIndex Error,Can not Find ColumnMeta,Tbl:%s,ColIndex:%d\n",m_psTableMeta->m_szTblName,nFieldIndex);
}
psColumnMeta = m_pcDbDict->getColumnMeta(m_psTableMeta,nFieldIndex);
void *pData = pRec->m_psData;
pData = (char *)pData + psColumnMeta->m_nOffset;
if(!setFieldVal(pData,psColumnMeta,nFieldType,pVal))
{
throwException(MDB_EC_NORMAL,MDB_ET_INVALID_COL_VAL,"CMdbTbl::setFieldValByIndex Error,setFieldVal Failed,Tbl:%s,ColIndex:%d\n,ColType:%d",m_psTableMeta->m_szTblName,nFieldIndex,nFieldType);
}
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
void CMdbTbl::getFieldValByIndex(CRecordNode *pRec,int nFieldIndex,int nFieldType,void *pVal)
{
CDbColumnMeta *psColumnMeta;
if(nFieldIndex >= m_pcDbDict->getColumnCnt(m_psTableMeta))
{
throwException(MDB_EC_NORMAL,MDB_ET_INVALID_COL_INDEX,"CMdbTbl::getFieldValByIndex Error,Can not Find ColumnMeta,Tbl:%s,ColIndex:%d\n",m_psTableMeta->m_szTblName,nFieldIndex);
}
psColumnMeta = m_pcDbDict->getColumnMeta(m_psTableMeta,nFieldIndex);
void *pData = pRec->m_psData;
pData = (char *)pData + psColumnMeta->m_nOffset;
int nSrcFieldType;
UVal uVal;
getFieldVal(pData,psColumnMeta,nSrcFieldType,&uVal);
if(castVal(nSrcFieldType,&uVal,nFieldType,pVal) == false)
{
throwException(MDB_EC_NORMAL,MDB_ET_INVALID_FIELD_TYPE,"CMdbTbl::getFieldValByIndex Error,InCompatiable FieldType,Tbl:%s,ColIndex:%d\n,FieldType:%d\n",m_psTableMeta->m_szTblName,nFieldIndex,nFieldType);
}
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
void CMdbTbl::getAutoFieldValByIndex(CRecordNode *pRec,int nFieldIndex,int &nFieldType,void *pVal)
{
CDbColumnMeta *psColumnMeta;
if(nFieldIndex >= m_pcDbDict->getColumnCnt(m_psTableMeta))
{
throwException(MDB_EC_NORMAL,MDB_ET_INVALID_COL_INDEX,"CMdbTbl::getAutoFieldValByIndex Error,Can not Find ColumnMeta,Tbl:%s,ColIndex:%d\n",m_psTableMeta->m_szTblName,nFieldIndex);
}
psColumnMeta = m_pcDbDict->getColumnMeta(m_psTableMeta,nFieldIndex);
void *pData = pRec->m_psData;
pData = (char *)pData + psColumnMeta->m_nOffset;
getFieldVal(pData,psColumnMeta,nFieldType,pVal);
}
/*
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
void CMdbTbl::getAutoFieldRefByIndex(CRecordNode *pRec,int nFieldIndex,int &nFieldType,CFieldRef &sRef)
{
CDbColumnMeta *psColumnMeta;
if(nFieldIndex >= m_pcDbDict->getColumnCnt(m_psTableMeta))
{
throwException(META_COL_ERROR,"CMdbTbl::setFieldValByIndex Error,Index Larger than Max Col Count\n");
}
psColumnMeta = m_pcDbDict->getColumnMeta(m_psTableMeta,nFieldIndex);
void *pData = pRec->m_psData;
pData = (char *)pData + psColumnMeta->m_nOffset;
sRef.m_psColumnMeta = psColumnMeta;
sRef.m_pField = pData;
getFieldType(psColumnMeta,nFieldType);
}
*/
/*
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
void CMdbTbl::setFieldValByRef(CFieldRef &sRef,int nFieldType,const void *pVal)
{
if(!setFieldVal(sRef.m_pField,sRef.m_psColumnMeta,nFieldType,pVal))
{
throwException(ARG_ERROR,"CMdbTbl::setFieldValByRef Error,setFieldVal Failed\n");
}
}
*/
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
void CMdbTbl::removeRecord(CRecordNode *pRec)
{
if((CRecordNode *)(pRec->m_psPrev) == NULL)
{
m_psTableMeta->m_psTblEntry = reinterpret_cast<void *>((pRec->m_psNext).addr());
if( (CRecordNode *)(pRec->m_psNext) != NULL)
{
(pRec->m_psNext)->m_psPrev = NULL;
}
}
else
{
(pRec->m_psPrev)->m_psNext = pRec->m_psNext;
if( (CRecordNode *)(pRec->m_psNext) != NULL)
{
(pRec->m_psNext)->m_psPrev = pRec->m_psPrev;
}
}
int nColCnt = m_pcDbDict->getColumnCnt(m_psTableMeta);
for(int i=0;i<nColCnt;i++)
{
CDbColumnMeta *psColumnMeta = m_pcDbDict->getColumnMeta(m_psTableMeta,i);
if(psColumnMeta->m_nInternalType == CIT_STRING)
{
int nFieldType;
char *pSzCol;
getAutoFieldValByMeta(pRec,psColumnMeta,nFieldType,(void *)(&pSzCol));
if(pSzCol)
{
//cerr << "free found" << endl;
m_pcAlloc->free((void *)pSzCol);
}
}
}
//cerr << "free found" << endl;
// m_pcAlloc->free((void *)pRec->m_psData);
m_pcAlloc->free(pRec->m_psData.addr()); /**< add by mol */
m_pcAlloc->free((void *)pRec);
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
void CMdbTbl::truncate()
{
CRecordNode *psRecordNode = reinterpret_cast<CRecordNode *>((m_psTableMeta->m_psTblEntry).addr());
while(psRecordNode)
{
CRecordNode *psNextRecordNode = psRecordNode->m_psNext;
//m_pcAlloc->free((void *)psRecordNode);
removeRecord(psRecordNode);
psRecordNode = psNextRecordNode;
}
m_psTableMeta->m_psTblEntry = reinterpret_cast<void *>(NULL);
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -