📄 mdbtbl.cpp
字号:
else
{
return false;
}
}
else if(psDbColumnMeta->m_nInternalType == CIT_STRING)
{
if(nFieldType == FT_STRING && (int)(strlen((char *)pVal)) <= psDbColumnMeta->m_nColTypeLen)
{
long nTmp;
char *pDstData = (char *)pData;
memcpy((char *)&nTmp,pDstData,sizeof(nTmp));
char *ptr = pDstData + nTmp;
//cerr << "nTmp:" << nTmp << endl;
if(nTmp)
{
m_pcAlloc->free((void *)ptr);
}
if((ptr = (char *)(m_pcAlloc->malloc(strlen((char *)pVal)+1))) == NULL)
{
throwException(MDB_EC_NORMAL,MDB_ET_MEM_ALLOC_ERROR,"CMdbTbl::setFieldVal Error,Can not Alloc Memory for varchar,Col:%s\n",psDbColumnMeta->m_szColName);
}
strcpy(ptr,(char *)pVal);
//cerr << "ptr:" << (unsigned long)ptr << endl;
//cerr << "pData:" << (unsigned long)pData << endl;
//cerr << "pDstData:" << (unsigned long)pDstData << endl;
nTmp = (unsigned long)ptr - (unsigned long)pDstData;
//cerr << "nTmp2:" << nTmp << endl;
memcpy(pDstData,(char *)&nTmp,sizeof(nTmp));
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
void CMdbTbl::getAutoFieldValByMeta(CRecordNode *pRec,CDbColumnMeta *psColumnMeta,int &nFieldType,void *pVal)
{
void *pData = pRec->m_psData;
pData = (char *)pData + psColumnMeta->m_nOffset;
getFieldVal(pData,psColumnMeta,nFieldType,pVal);
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
void CMdbTbl::getFieldValByName(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::getFieldValByName 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;
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::getFieldValByName Error,InCompatiable FieldType,Tbl:%s,Col:%s\n,FieldType:%d\n",m_psTableMeta->m_szTblName,szFieldName,nFieldType);
}
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//----------------------------------------------------------------------------
bool CMdbTbl::castVal(int nSrcFieldType,void *pSrcFieldVal,int nDstFieldType,void *pDstFieldVal)
{
if(nDstFieldType == FT_UINT8)
{
if(nSrcFieldType == FT_UINT8)
{
*(unsigned char *)pDstFieldVal = *(unsigned char *)pSrcFieldVal;
}
else if(nSrcFieldType == FT_INT8 && *(char *)pSrcFieldVal >= 0)
{
*(unsigned char *)pDstFieldVal = (unsigned char)(*(char *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_UINT16 && *(unsigned short *)pSrcFieldVal < 256)
{
*(unsigned char *)pDstFieldVal = (unsigned char)(*(unsigned short *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT16 && *(short *)pSrcFieldVal >= 0 && *(short *)pSrcFieldVal < 256)
{
*(unsigned char *)pDstFieldVal = (unsigned char)(*(short *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_UINT32 && *(unsigned int *)pSrcFieldVal < 256)
{
*(unsigned char *)pDstFieldVal = (unsigned char)(*(unsigned int *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT32 && *(int *)pSrcFieldVal >= 0 && *(int *)pSrcFieldVal < 256)
{
*(unsigned char *)pDstFieldVal = (unsigned char)(*(int *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_UINT64 && *(unsigned long long *)pSrcFieldVal < 256)
{
*(unsigned char *)pDstFieldVal = (unsigned char)(*(unsigned long long *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT64 && *(long long *)pSrcFieldVal >= 0 && *(long long *)pSrcFieldVal < 256)
{
*(unsigned char *)pDstFieldVal = (unsigned char)(*(long long *)pSrcFieldVal);
}
}
else if(nDstFieldType == FT_INT8)
{
if(nSrcFieldType == FT_UINT8 && *(unsigned char *)pSrcFieldVal < 128)
{
*(char *)pDstFieldVal = (char)(*(unsigned char *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT8)
{
*(char *)pDstFieldVal = *(char *)pSrcFieldVal;
}
else if(nSrcFieldType == FT_UINT16 && *(unsigned short *)pSrcFieldVal < 128)
{
*(char *)pDstFieldVal = (char)(*(unsigned short *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT16 && *(short *)pSrcFieldVal >= -128 && *(short *)pSrcFieldVal < 128)
{
*(char *)pDstFieldVal = (char)(*(short *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_UINT32 && *(unsigned int *)pSrcFieldVal < 128)
{
*(char *)pDstFieldVal = (char)(*(unsigned int *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT32 && *(int *)pSrcFieldVal >= -128 && *(int *)pSrcFieldVal < 128)
{
*(char *)pDstFieldVal = (char)(*(int *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_UINT64 && *(unsigned long long *)pSrcFieldVal < 128)
{
*(char *)pDstFieldVal = (char)(*(unsigned long long *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT64 && *(long long *)pSrcFieldVal >= -128 && *(long long *)pSrcFieldVal < 128)
{
*(char *)pDstFieldVal = (char)(*(long long *)pSrcFieldVal);
}
}
else if(nDstFieldType == FT_UINT16)
{
if(nSrcFieldType == FT_UINT8)
{
*(unsigned short *)pDstFieldVal = (unsigned short)(*(unsigned char *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT8 && *(char *)pSrcFieldVal >= 0)
{
*(unsigned short *)pDstFieldVal = (unsigned short)(*(char *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_UINT16)
{
*(unsigned short *)pDstFieldVal = *(unsigned short *)pSrcFieldVal;
}
else if(nSrcFieldType == FT_INT16 && *(short *)pSrcFieldVal >= 0)
{
*(unsigned short *)pDstFieldVal = (unsigned short)(*(short *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_UINT32 && *(unsigned int *)pSrcFieldVal < 65536)
{
*(unsigned short *)pDstFieldVal = (unsigned short)(*(unsigned int *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT32 && *(int *)pSrcFieldVal >= 0 && *(int *)pSrcFieldVal < 65536)
{
*(unsigned short *)pDstFieldVal = (unsigned short)(*(int *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_UINT64 && *(unsigned long long *)pSrcFieldVal < 65536)
{
*(unsigned short *)pDstFieldVal = (unsigned short)(*(unsigned long long *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT64 && *(long long *)pSrcFieldVal >= 0 && *(long long *)pSrcFieldVal < 65536)
{
*(unsigned short *)pDstFieldVal = (unsigned short)(*(long long *)pSrcFieldVal);
}
}
else if(nDstFieldType == FT_INT16)
{
if(nSrcFieldType == FT_UINT8)
{
*(short *)pDstFieldVal = (short)(*(unsigned char *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT8)
{
*(short *)pDstFieldVal = (short)(*(char *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_UINT16 && *(unsigned short *)pSrcFieldVal < 32768)
{
*(short *)pDstFieldVal = (short)(*(unsigned short *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT16)
{
*(short *)pDstFieldVal =*(short *)pSrcFieldVal;
}
else if(nSrcFieldType == FT_UINT32 && *(unsigned int *)pSrcFieldVal < 32768)
{
*(short *)pDstFieldVal = (short)(*(unsigned int *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT32 && *(int *)pSrcFieldVal >= -32768 && *(int *)pSrcFieldVal < 32768)
{
*(short *)pDstFieldVal = (short)(*(int *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_UINT64 && *(unsigned long long *)pSrcFieldVal < 32768)
{
*(short *)pDstFieldVal = (short)(*(unsigned long long *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT64 && *(long long *)pSrcFieldVal >= -32768 && *(long long *)pSrcFieldVal < 32768)
{
*(short *)pDstFieldVal = (short)(*(long long *)pSrcFieldVal);
}
}
else if(nDstFieldType == FT_UINT32)
{
if(nSrcFieldType == FT_UINT8)
{
*(unsigned int *)pDstFieldVal = (unsigned int)(*(unsigned char *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT8 && *(char *)pSrcFieldVal >= 0)
{
*(unsigned int *)pDstFieldVal = (unsigned int)(*(char *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_UINT16)
{
*(unsigned int *)pDstFieldVal = (unsigned int)(*(unsigned short *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT16 && *(short *)pSrcFieldVal >= 0)
{
*(unsigned int *)pDstFieldVal = (unsigned int)(*(short *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_UINT32)
{
*(unsigned int *)pDstFieldVal = *(unsigned int *)pSrcFieldVal;
}
else if(nSrcFieldType == FT_INT32 && *(int *)pSrcFieldVal >= 0)
{
*(unsigned int *)pDstFieldVal = (unsigned int)(*(int *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_UINT64 && *(unsigned long long *)pSrcFieldVal < 4294967296LL)
{
*(unsigned int *)pDstFieldVal = (unsigned int)(*(unsigned long long *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT64 && *(long long *)pSrcFieldVal >= 0 && *(long long *)pSrcFieldVal < 4294967296LL)
{
*(unsigned int *)pDstFieldVal = (unsigned int)(*(long long *)pSrcFieldVal);
}
}
else if(nDstFieldType == FT_INT32)
{
if(nSrcFieldType == FT_UINT8)
{
*(int *)pDstFieldVal = (int)(*(unsigned char *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT8)
{
*(int *)pDstFieldVal = (int)(*(char *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_UINT16)
{
*(int *)pDstFieldVal = (int)(*(unsigned short *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT16)
{
*(int *)pDstFieldVal =(int)(*(short *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_UINT32 && *(unsigned int *)pSrcFieldVal <= 2147483647)
{
*(int *)pDstFieldVal = (int)(*(unsigned int *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT32)
{
*(int *)pDstFieldVal = *(int *)pSrcFieldVal;
}
else if(nSrcFieldType == FT_UINT64 && *(unsigned long long *)pSrcFieldVal <= 2147483647)
{
*(int *)pDstFieldVal = (int)(*(unsigned long long *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT64 && *(long long *)pSrcFieldVal >= -2147483647LL-1 && *(long long *)pSrcFieldVal <= 2147483647LL) //oddy -2147483647-1,for delimiting complier warning
{
*(int *)pDstFieldVal = (int)(*(long long *)pSrcFieldVal);
}
}
else if(nDstFieldType == FT_UINT64)
{
if(nSrcFieldType == FT_UINT8)
{
*(unsigned long long *)pDstFieldVal = (unsigned long long)(*(unsigned char *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT8 && *(char *)pSrcFieldVal >= 0)
{
*(unsigned long long *)pDstFieldVal = (unsigned long long)(*(char *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_UINT16)
{
*(unsigned long long *)pDstFieldVal = (unsigned long long)(*(unsigned short *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT16 && *(short *)pSrcFieldVal >= 0)
{
*(unsigned long long *)pDstFieldVal = (unsigned long long)(*(short *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_UINT32)
{
*(unsigned long long *)pDstFieldVal = *(unsigned long long *)pSrcFieldVal;
}
else if(nSrcFieldType == FT_INT32 && *(int *)pSrcFieldVal >= 0)
{
*(unsigned long long *)pDstFieldVal = (unsigned long long)(*(int *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_UINT64)
{
*(unsigned long long *)pDstFieldVal = *(unsigned long long *)pSrcFieldVal;
}
else if(nSrcFieldType == FT_INT64 && *(long long *)pSrcFieldVal >= 0)
{
*(unsigned long long *)pDstFieldVal = (unsigned long long)(*(long long *)pSrcFieldVal);
}
}
else if(nDstFieldType == FT_INT64)
{
if(nSrcFieldType == FT_UINT8)
{
*(long long*)pDstFieldVal = (long long)(*(unsigned char *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT8)
{
*(long long*)pDstFieldVal = (long long)(*(char *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_UINT16)
{
*(long long*)pDstFieldVal = (long long)(*(unsigned short *)pSrcFieldVal);
}
else if(nSrcFieldType == FT_INT16)
{
*(long long*)pDstFieldVal =(long long)(*(short *)pSrcFieldVal);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -