//--------------------------------------------------------------------------- // @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; }
//--------------------------------------------------------------------------- // @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; }
//--------------------------------------------------------------------------- // @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; }
//--------------------------------------------------------------------------- // @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; }