⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mdbtbl.cpp

📁 一个自行开发的内存数据管理的包
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------- 
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 + -