//--------------------------------------------------------------------------- // @function: // CMDProviderTest::EresUnittest_Negative // // @doc: // Test fetching non-exiting metadata objects from a file-based provider // //--------------------------------------------------------------------------- GPOS_RESULT CMDProviderTest::EresUnittest_Negative() { CAutoMemoryPool amp(CAutoMemoryPool::ElcNone); IMemoryPool *pmp = amp.Pmp(); CMDProviderMemory *pmdpFile = GPOS_NEW(pmp) CMDProviderMemory(pmp, szFileName); pmdpFile->AddRef(); // we need to use an auto pointer for the cache here to ensure // deleting memory of cached objects when we throw CAutoP<CMDAccessor::MDCache> apcache; apcache = CCacheFactory::PCacheCreate<gpopt::IMDCacheObject*, gpopt::CMDKey*> ( true, // fUnique 0 /* unlimited cache quota */, CMDKey::UlHashMDKey, CMDKey::FEqualMDKey ); CMDAccessor::MDCache *pcache = apcache.Pt(); { CAutoMDAccessor amda(pmp, pmdpFile, CTestUtils::m_sysidDefault, pcache); // lookup a non-existing objects CMDIdGPDB *pmdid = GPOS_NEW(pmp) CMDIdGPDB(GPOPT_MDCACHE_TEST_OID, 15 /* major version */, 1 /* minor version */); // call should result in an exception (void) pmdpFile->PstrObject(pmp, amda.Pmda(), pmdid); } return GPOS_FAILED; }
//--------------------------------------------------------------------------- // @function: // CMDProviderTest::EresUnittest_Stats // // @doc: // Test fetching existing stats objects from a file-based provider // //--------------------------------------------------------------------------- GPOS_RESULT CMDProviderTest::EresUnittest_Stats() { // create memory pool CAutoMemoryPool amp; IMemoryPool *pmp = amp.Pmp(); CMDProviderMemory *pmdpFile = GPOS_NEW(pmp) CMDProviderMemory(pmp, szFileName); { pmdpFile->AddRef(); CAutoMDAccessor amda(pmp, pmdpFile, CTestUtils::m_sysidDefault, CMDCache::Pcache()); // lookup different objects CMDIdRelStats *pmdidRelStats = GPOS_NEW(pmp) CMDIdRelStats(GPOS_NEW(pmp) CMDIdGPDB(GPOPT_MDCACHE_TEST_OID, 1, 1)); CWStringBase *pstrRelStats = pmdpFile->PstrObject(pmp, amda.Pmda(), pmdidRelStats); GPOS_ASSERT(NULL != pstrRelStats); IMDCacheObject *pmdobjRelStats = CDXLUtils::PimdobjParseDXL(pmp, pstrRelStats, NULL); GPOS_ASSERT(NULL != pmdobjRelStats); CMDIdColStats *pmdidColStats = GPOS_NEW(pmp) CMDIdColStats(GPOS_NEW(pmp) CMDIdGPDB(GPOPT_MDCACHE_TEST_OID, 1, 1), 1 /* ulAttno */); CWStringBase *pstrColStats = pmdpFile->PstrObject(pmp, amda.Pmda(), pmdidColStats); GPOS_ASSERT(NULL != pstrColStats); IMDCacheObject *pmdobjColStats = CDXLUtils::PimdobjParseDXL(pmp, pstrColStats, NULL); GPOS_ASSERT(NULL != pmdobjColStats); // cleanup pmdidRelStats->Release(); pmdidColStats->Release(); GPOS_DELETE(pstrRelStats); GPOS_DELETE(pstrColStats); pmdobjRelStats->Release(); pmdobjColStats->Release(); } pmdpFile->Release(); return GPOS_OK; }