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

📄 mdbquery.cpp

📁 一个自行开发的内存数据管理的包
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	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 + -