コード例 #1
0
ファイル: CMDAccessorTest.cpp プロジェクト: b-xiang/gporca
//---------------------------------------------------------------------------
//	@function:
//		CMDAccessorTest::PvLookupMultipleObj
//
//	@doc:
//		A task that looks up multiple objects from the MD cache
//
//---------------------------------------------------------------------------
void *
CMDAccessorTest::PvLookupMultipleObj
	(
	 void * pv
	)
{
	GPOS_CHECK_ABORT;

	GPOS_ASSERT(NULL != pv);

	SMDCacheTaskParams *pmdtaskparams = (SMDCacheTaskParams *) pv;
	
	CMDAccessor *md_accessor = pmdtaskparams->m_pmda;
	
	GPOS_ASSERT(NULL != md_accessor);
		
	// lookup cache objects
	const ULONG ulNumberOfObjects = 10;
	
	for (ULONG ul = 0; ul < ulNumberOfObjects; ul++)
	{
		GPOS_CHECK_ABORT;

		// lookup relation
		CMDIdGPDB *mdid = GPOS_NEW(pmdtaskparams->m_mp) CMDIdGPDB(GPOPT_MDCACHE_TEST_OID /*OID*/, 1 /*major*/, ul + 1 /*minor*/);
		(void) md_accessor->RetrieveRel(mdid);
		mdid->Release();
	}
	
	return NULL;
}
コード例 #2
0
ファイル: CMDAccessorTest.cpp プロジェクト: b-xiang/gporca
//---------------------------------------------------------------------------
//	@function:
//		CMDAccessorTest::PvLookupSingleObj
//
//	@doc:
//		A task that looks up a single object from the MD cache
//
//---------------------------------------------------------------------------
void *
CMDAccessorTest::PvLookupSingleObj
	(
	 void * pv
	)
{
	GPOS_CHECK_ABORT;

	GPOS_ASSERT(NULL != pv);
	
	SMDCacheTaskParams *pmdtaskparams = (SMDCacheTaskParams *) pv;
	
	CMDAccessor *md_accessor = pmdtaskparams->m_pmda;

	IMemoryPool *mp = pmdtaskparams->m_mp;
	
	GPOS_ASSERT(NULL != mp);
	GPOS_ASSERT(NULL != md_accessor);
	
	// lookup a cache object
	CMDIdGPDB *mdid = GPOS_NEW(mp) CMDIdGPDB(GPOPT_MDCACHE_TEST_OID /* OID */, 1 /* major version */, 1 /* minor version */);

	// lookup object
	(void) md_accessor->RetrieveRel(mdid);
	mdid->Release();
	
	return NULL;
}
コード例 #3
0
//---------------------------------------------------------------------------
//	@function:
//		CTranslatorDXLToQuery::TranslateGroupByColumns
//
//	@doc:
//		Translate a logical group by columns
//
//---------------------------------------------------------------------------
void
CTranslatorDXLToQuery::TranslateGroupByColumns
	(
	const CDXLLogicalGroupBy *pdxlnlggrpby,
	Query *pquery,
	CStateDXLToQuery *pstatedxltoquery,
	CMappingColIdVarQuery *pmapcidvarquery
	)
{
	pquery->hasAggs = true;
	List *plGrpCl = NIL;

	const DrgPul *pdrgpulGrpColId = pdxlnlggrpby->PdrgpulGroupingCols();

	// discard the previously inserted entries in the TE
	// as the query output will be composed of the grouping columns and the
	// project list defined in the group by operator
	pstatedxltoquery->Clear();

	if (NULL != pdrgpulGrpColId)
	{
		for (ULONG ul = 0; ul < pdrgpulGrpColId->UlLength(); ul++)
		{
			GPOS_ASSERT(NULL != (*pdrgpulGrpColId)[ul]);
			ULONG ulGroupingCol = *((*pdrgpulGrpColId)[ul]);

			GroupClause *pgrpcl = MakeNode(GroupClause);
			m_ulSortgrouprefCounter++;
			pgrpcl->tleSortGroupRef = m_ulSortgrouprefCounter;
			plGrpCl = gpdb::PlAppendElement(plGrpCl, pgrpcl);

			TargetEntry *pte = const_cast<TargetEntry *>(pmapcidvarquery->Pte(ulGroupingCol));

			OID oid = gpdb::OidExprType((Node*) pte->expr);
			CMDIdGPDB *pmdid = New(m_pmp) CMDIdGPDB(oid);
			const IMDType *pmdtype = m_pmda->Pmdtype(pmdid);
			pmdid->Release();

			const CMDIdGPDB *pmdidSortOp = CMDIdGPDB::PmdidConvert(pmdtype->PmdidCmp(IMDType::EcmptL));
			pgrpcl->sortop = pmdidSortOp->OidObjectId();

			GPOS_ASSERT(NULL != pte);

			pte->resno = (AttrNumber) (ul + 1);
			pte->ressortgroupref = pgrpcl->tleSortGroupRef;
			pstatedxltoquery->AddOutputColumnEntry(pte, pte->resname, ulGroupingCol);
		}
	}
	pquery->groupClause = plGrpCl;
}
コード例 #4
0
ファイル: CMDAccessorTest.cpp プロジェクト: b-xiang/gporca
//---------------------------------------------------------------------------
//	@function:
//		CMDAccessorTest::EresUnittest_Negative
//
//	@doc:
//		Test fetching non-existing metadata objects from the MD cache
//
//---------------------------------------------------------------------------
GPOS_RESULT
CMDAccessorTest::EresUnittest_Negative()
{
	CAutoMemoryPool amp(CAutoMemoryPool::ElcNone);
	IMemoryPool *mp = amp.Pmp();
	
	// Setup an MD cache with a file-based provider
	CMDProviderMemory *pmdp = CTestUtils::m_pmdpf;
	pmdp->AddRef();
	CMDAccessor mda(mp, CMDCache::Pcache(), CTestUtils::m_sysidDefault, pmdp);
	
	// lookup a non-existing objects
	CMDIdGPDB *pmdidNonExistingObject = GPOS_NEW(mp) CMDIdGPDB(GPOPT_MDCACHE_TEST_OID /* OID */, 15 /* version */, 1 /* minor version */);

	// call should result in an exception
	(void) mda.RetrieveRel(pmdidNonExistingObject);

	pmdidNonExistingObject->Release();
	
	return GPOS_OK;
}