📄 mdbtbl.cpp
字号:
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
CRecordNode *CMdbTbl::queryRecord(const CRecordNode *psPrevRecordNode,int nFieldCnt,const char **szFieldNames,int *pnFieldTypes,void **ppVals)
{
CDbColumnMeta *psColumnMeta = NULL;
CRecordNode *psRecordNode;
if(!psPrevRecordNode)
{
psRecordNode = reinterpret_cast<CRecordNode *>((m_psTableMeta->m_psTblEntry).addr());
}
else
{
psRecordNode = psPrevRecordNode->m_psNext;
}
while(psRecordNode)
{
int i;
for(i=0;i<nFieldCnt;i++)
{
psColumnMeta = m_pcDbDict->findColumMeta(m_psTableMeta,szFieldNames[i]);
if(!psColumnMeta)
{
throwException(MDB_EC_NORMAL,MDB_ET_CON_INVALID_COL_NAME,"CMdbTbl::query,Invalid szColName,Tbl:%s,Col:%d\n",m_psTableMeta->m_szTblName,szFieldNames[i]);
}
else
{
int nFieldType;
UVal uVal;
getAutoFieldValByMeta(psRecordNode,psColumnMeta,nFieldType,(void *)&uVal);
if(compareKey(pnFieldTypes[i],ppVals[i],psColumnMeta->m_szColName,psColumnMeta->m_nInternalType,&uVal) == false)
{
psRecordNode = psRecordNode->m_psNext;
break;
}
else
{
continue;
}
}
}
if(i == nFieldCnt) break;
}
return psRecordNode;
}
/*
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
bool CMdbTbl::compareKey(CRecordNode *pRec,CDbColumnMeta *psColumnMeta,int nFieldType,void *pFieldVal)
{
void *pData = pRec->m_psData;
pData = (char *)pData + psColumnMeta->m_nOffset;
if(psColumnMeta->m_nInternalType == CIT_INT64)
{
long long nColVal;
memcpy((char *)(&nColVal),(char *)pData,sizeof(long long));
if(nFieldType == FT_INT8)
{
return nColVal == (long long)(*(char *)pFieldVal);
}
else if(nFieldType == FT_UINT8)
{
return nColVal == (long long)(*(unsigned char *)pFieldVal);
}
else if(nFieldType == FT_INT16)
{
return nColVal == (long long)(*(short *)pFieldVal);
}
else if(nFieldType == FT_UINT16)
{
return nColVal == (long long)(*(unsigned short *)pFieldVal);
}
else if(nFieldType == FT_INT32)
{
return nColVal == (long long)(*(int *)pFieldVal);
}
else if(nFieldType == FT_UINT32)
{
return nColVal == (long long)(*(unsigned int *)pFieldVal);
}
else if(nFieldType == FT_INT64)
{
return nColVal == *(long long *)pFieldVal;
}
else if((nFieldType == FT_UINT64) && (*(unsigned long long *)pFieldVal <= 9223372036854775807))
{
return nColVal == (long long)(*(unsigned long long *)pFieldVal);
}
else
{
return false;
}
}
else if(psColumnMeta->m_nInternalType == CIT_INT32)
{
int nColVal;
memcpy((char *)(&nColVal),(char *)pData,sizeof(int));
if(nFieldType == FT_INT8)
{
return nColVal == (int)(*(char *)pFieldVal);
}
else if(nFieldType == FT_UINT8)
{
return nColVal == (int)(*(unsigned char *)pFieldVal);
}
else if(nFieldType == FT_INT16)
{
return nColVal == (int)(*(short *)pFieldVal);
}
else if(nFieldType == FT_UINT16)
{
return nColVal == (int)(*(unsigned short *)pFieldVal);
}
else if(nFieldType == FT_INT32)
{
return nColVal == (*(int *)pFieldVal);
}
else if(nFieldType == FT_UINT32 && *(unsigned int *)pFieldVal <= 2147483647)
{
return nColVal == (int)(*(unsigned int *)pFieldVal);
}
else if(nFieldType == FT_INT64 && *(long long *)pFieldVal <= 2147483647 && *(long long *)pFieldVal > -2147483649)
{
return nColVal == (int)(*(long long *)pFieldVal);
}
else if((nFieldType == FT_UINT64) && *(unsigned long long *)pFieldVal <= 2147483647)
{
return nColVal == (int)(*(unsigned long long *)pFieldVal);
}
else
{
return false;
}
}
else if(psColumnMeta->m_nInternalType == CIT_INT16)
{
short nColVal;
memcpy((char *)(&nColVal),(char *)pData,sizeof(short));
if(nFieldType == FT_INT8)
{
return nColVal == (short)(*(char *)pFieldVal);
}
else if(nFieldType == FT_UINT8)
{
return nColVal == (short)(*(unsigned char *)pFieldVal);
}
else if(nFieldType == FT_INT16)
{
return nColVal == (*(short *)pFieldVal);
}
else if(nFieldType == FT_UINT16 && *(unsigned short *)pFieldVal <= 32767)
{
return nColVal == (short)(*(unsigned short *)pFieldVal);
}
else if(nFieldType == FT_INT32 && *(int *)pFieldVal <= 32767 && *(int *)pFieldVal > -32769)
{
return nColVal == (short)(*(int *)pFieldVal);
}
else if(nFieldType == FT_UINT32 && *(unsigned int *)pFieldVal <= 32767)
{
return nColVal == (short)(*(unsigned int *)pFieldVal);
}
else if(nFieldType == FT_INT64 && *(long long *)pFieldVal <= 32767 && *(long long *)pFieldVal > -32769)
{
return nColVal == (short)(*(long long *)pFieldVal);
}
else if((nFieldType == FT_UINT64) && *(unsigned long long *)pFieldVal <= 32767)
{
return nColVal == (short)(*(unsigned long long *)pFieldVal);
}
else
{
return false;
}
}
else if(psColumnMeta->m_nInternalType == CIT_INT8)
{
char nColVal;
memcpy((char *)(&nColVal),(char *)pData,sizeof(char));
if(nFieldType == FT_INT8)
{
return nColVal == (char)(*(char *)pFieldVal);
}
else if(nFieldType == FT_UINT8 && *(unsigned short *)pFieldVal <= 127)
{
return nColVal == (char)(*(unsigned char *)pFieldVal);
}
else if(nFieldType == FT_INT16 && *(short *)pFieldVal <= 127 && *(short *)pFieldVal > -128)
{
return nColVal == (char)(*(short *)pFieldVal);
}
else if(nFieldType == FT_UINT16 && *(unsigned short *)pFieldVal <= 127)
{
return nColVal == (char)(*(unsigned short *)pFieldVal);
}
else if(nFieldType == FT_INT32 && *(int *)pFieldVal <= 127 && *(int *)pFieldVal > -128)
{
return nColVal == (char)(*(int *)pFieldVal);
}
else if(nFieldType == FT_UINT32 && *(unsigned int *)pFieldVal <= 127)
{
return nColVal == (char)(*(unsigned int *)pFieldVal);
}
else if(nFieldType == FT_INT64 && *(long long *)pFieldVal <= 127 && *(long long *)pFieldVal > -128)
{
return nColVal == (char)(*(long long *)pFieldVal);
}
else if((nFieldType == FT_UINT64) && *(unsigned long long *)pFieldVal <= 127)
{
return nColVal == (char)(*(unsigned long long *)pFieldVal);
}
else
{
return false;
}
}
else if(nFieldType == FT_STRING && psColumnMeta->m_nInternalType == CIT_CHARARRAY && strcmp((char *)pFieldVal,(char *)pData) == 0)
{
return true;
}
else if(nFieldType == FT_STRING && psColumnMeta->m_nInternalType == CIT_STRING)
{
long nTmp;
memcpy((char *)&nTmp,(char *)pData,sizeof(long));
if(nTmp)
{
char * ptr = (char *)pData + nTmp;
if(strcmp((char *)pFieldVal,ptr) == 0)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
else
{
return false;
}
}
*/
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
bool CMdbTbl::compareKey(int nFieldType,void *pFieldVal,const char *pColName,int nColInternalType,void *pColVal)
{
long long nColVal = 0;
bool bColNum = false;
if(nColInternalType == CIT_INT8)
{
bColNum = true;
nColVal = *(char *)pColVal;
}
else if(nColInternalType == CIT_INT16)
{
bColNum = true;
nColVal = *(short *)pColVal;
}
else if(nColInternalType == CIT_INT32)
{
bColNum = true;
nColVal = *(int *)pColVal;
}
else if(nColInternalType == CIT_INT64)
{
bColNum = true;
nColVal = *(long long *)pColVal;
}
else if(nColInternalType != CIT_CHARARRAY && nColInternalType != CIT_STRING)
{
throwException(MDB_EC_NORMAL,MDB_ET_INVALID_COL_INTERNAL_TYPE,"CMdbTbl::compareKey,Invalid nColInternalType,Tbl:%s,Col:%d,ColInternalType:%d\n",m_psTableMeta->m_szTblName,pColName,nColInternalType);
}
long long nFieldVal = 0;
bool bFieldNum = false;
if(nFieldType == FT_INT8)
{
bFieldNum = true;
nFieldVal = *(char *)pFieldVal;
}
else if(nFieldType == FT_UINT8)
{
bFieldNum = true;
nFieldVal = *(unsigned char *)pFieldVal;
}
else if(nFieldType == FT_INT16)
{
bFieldNum = true;
nFieldVal = *(short *)pFieldVal;
}
else if(nFieldType == FT_UINT16)
{
bFieldNum = true;
nFieldVal = *(unsigned short *)pFieldVal;
}
else if(nFieldType == FT_INT32)
{
bFieldNum = true;
nFieldVal = *(int *)pFieldVal;
}
else if(nFieldType == FT_UINT32)
{
bFieldNum = true;
nFieldVal = *(unsigned int *)pFieldVal;
}
else if(nFieldType == FT_INT64)
{
bFieldNum = true;
nFieldVal = *(long long *)pFieldVal;
}
else if((nFieldType == FT_UINT64) && (*(unsigned long long *)pFieldVal <= 9223372036854775807LL))
{
bFieldNum = true;
nFieldVal = (long long)(*(unsigned long long *)pFieldVal);
}
else if(nFieldType != FT_STRING)
{
throwException(MDB_EC_NORMAL,MDB_ET_INVALID_FIELD_TYPE,"CMdbTbl::compareKey,Invalid nFieldType,Tbl:%s,Col:%d,FieldType:%d\n",m_psTableMeta->m_szTblName,pColName,nFieldType);
}
if(bFieldNum && bColNum && nFieldVal == nColVal)
{
return true;
}
else if(nFieldType == FT_STRING && (nColInternalType == CIT_CHARARRAY || nColInternalType == CIT_STRING) && strcmp((char *)pFieldVal,*((char **)pColVal)) == 0)
{
return true;
}
else
{
return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -