📄 mdbquery.cpp
字号:
unsigned short nVal;
m_cMdbQuery.getFieldValByName(m_szFieldName,FT_UINT16,&nVal);
return nVal;
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------
CMdbQuery::CMdbField::operator int()
{
int nVal;
m_cMdbQuery.getFieldValByName(m_szFieldName,FT_INT32,&nVal);
return nVal;
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------
CMdbQuery::CMdbField::operator unsigned int()
{
unsigned int nVal;
m_cMdbQuery.getFieldValByName(m_szFieldName,FT_UINT32,&nVal);
return nVal;
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------
CMdbQuery::CMdbField::operator long()
{
long nVal;
m_cMdbQuery.getFieldValByName(m_szFieldName,FT_INT32,&nVal);
return nVal;
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------
CMdbQuery::CMdbField::operator unsigned long()
{
unsigned long nVal;
m_cMdbQuery.getFieldValByName(m_szFieldName,FT_UINT32,&nVal);
return nVal;
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------
CMdbQuery::CMdbField::operator long long()
{
long long nVal;
m_cMdbQuery.getFieldValByName(m_szFieldName,FT_INT64,&nVal);
return nVal;
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------
CMdbQuery::CMdbField::operator unsigned long long()
{
unsigned long long nVal;
m_cMdbQuery.getFieldValByName(m_szFieldName,FT_UINT64,&nVal);
return nVal;
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------
CMdbQuery::CMdbField::operator const char *()
{
char *pVal;
m_cMdbQuery.getFieldValByName(m_szFieldName,FT_STRING,&pVal);
return (const char *)pVal;
}
/*
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------
void CMdbQuery::latchLock()
{
if(m_pcLatch->acquire() == -1)
{
throwException(ARG_ERROR,"CMdbQuery::CMdbQuery Error,Can not get Latch Lock\n"); //无法得到闩锁
}
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------
void CMdbQuery::latchUnLock()
{
if(m_pcLatch->release() == -1)
{
throwException(ARG_ERROR,"CMdbQuery::CMdbQuery Error,Can not release Latch Lock\n"); //无法释放闩锁
}
}
*/
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------
void CMdbQuery::ownerTableMeta(const char *szTableName)
{
while(true)
{
ACE_Guard<ACE_Process_Mutex> cGuard(*m_pcLatch);
if(!cGuard.locked())
{
throwException(MDB_EC_NORMAL,MDB_ET_GET_DICT_LOCK_FAIL,"CMdbQuery::ownerTableMeta Error,Can not get Dict Lock,Tbl:%s\n",szTableName);
//continue;
}
m_psTblMeta = m_pcDbDict->getTableMeta(szTableName);
if(ownerTable() == false)
{
cGuard.release();
#ifdef __LINUX_MDB_
static struct timespec req = { 0, 0 };
nanosleep(&req, NULL);
#else
sched_yield();
#endif
continue;
}
else
{
cGuard.release();
break;
}
}
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------
bool CMdbQuery::ownerTable()
{
if(m_psTblMeta->m_nOwnerPid > 0 && m_psTblMeta->m_nOwnerPid != m_nMyPid)
//if(m_psTblMeta->m_nOwnerPid > 0)
{
return false;
}
else
{
m_psTblMeta->m_nOwnerPid = m_nMyPid;
if(m_pcDbDict->checkSharePidsExist(m_psTblMeta))
{
return false;
}
else
{
return true;
}
}
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------
void CMdbQuery::unOwnerTableMeta()
{
ACE_Guard<ACE_Process_Mutex> cGuard(*m_pcLatch);
if(!cGuard.locked())
{
throwException(MDB_EC_NORMAL,MDB_ET_GET_DICT_LOCK_FAIL,"CMdbQuery::unOwnerTableMeta Error,Can not get Dict Lock,Tbl:%s\n",m_psTblMeta->m_szTblName);
}
unOwnerTable();
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------
void CMdbQuery::unOwnerTable()
{
if(m_psTblMeta)
{
if(m_psTblMeta->m_nOwnerPid == m_nMyPid)
{
m_psTblMeta->m_nOwnerPid = -1;
}
else
{
throwException(MDB_EC_NORMAL,MDB_ET_TRY_RELEASE_OTHER_TBL_LOCK,"CMdbQuery::tableUnLock( Error,Try to Unlock other Lock,Tbl:%s\n",m_psTblMeta->m_szTblName); //企图释放别人的锁
}
}
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------
void CMdbQuery::shareTableMeta(const char *szTableName)
{
m_psTblMeta = m_pcDbDict->getTableMeta(szTableName);
while(true)
{
ACE_Guard<ACE_Process_Mutex> cGuard(*m_pcLatch);
if(!cGuard.locked())
{
throwException(MDB_EC_NORMAL,MDB_ET_GET_DICT_LOCK_FAIL,"CMdbQuery::shareTableMeta Error,Can not get Dict Lock,Tbl:%s\n",szTableName);
//continue;
}
m_psTblMeta = m_pcDbDict->getTableMeta(szTableName);
if((m_psSharePid = shareTable()) == NULL)
//if(!shareTable())
{
cGuard.release();
#ifdef __LINUX_MDB
static struct timespec req = { 0, 0 };
nanosleep(&req, NULL);
#else
sched_yield();
#endif
continue;
}
else
{
cGuard.release();
break;
}
}
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------
CProcNode *CMdbQuery::shareTable()
{
if(m_psTblMeta->m_nOwnerPid > 0)
{
return NULL;
}
else
{
return m_pcDbDict->insertSharePid(m_psTblMeta,m_nMyPid);
}
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------
void CMdbQuery::unShareTableMeta()
{
ACE_Guard<ACE_Process_Mutex> cGuard(*m_pcLatch);
if(!cGuard.locked())
{
throwException(MDB_EC_NORMAL,MDB_ET_GET_DICT_LOCK_FAIL,"CMdbQuery::unShareTableMeta Error,Can not get Dict Lock,Tbl:%s\n",m_psTblMeta->m_szTblName);
}
unShareTable();
}
//----------------------------------------------------------------------------
// 函数原型: CWorkFlow::CWorkFlow(int nBucketNum)
// 函数功能: CWorkFlow 构造函数
// 传入参数: 无
// 传出参数: 无
// 函数返回: 无
// 注意事项: 无
//---------------------------------------------------------------------------
void CMdbQuery::unShareTable()
{
m_pcDbDict->deleteSharePid(m_psTblMeta, m_psSharePid);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -