//--------------------------------------------------------------------------- // @function: // CColumnFactoryTest::EresUnittest_Basic // // @doc: // Basic array allocation test // //--------------------------------------------------------------------------- GPOS_RESULT CColumnFactoryTest::EresUnittest_Basic() { CAutoMemoryPool amp; IMemoryPool *pmp = amp.Pmp(); CMDProviderMemory *pmdp = CTestUtils::m_pmdpf; pmdp->AddRef(); CMDAccessor mda(pmp, CMDCache::Pcache()); mda.RegisterProvider(CTestUtils::m_sysidDefault, pmdp); const IMDTypeInt4 *pmdtypeint4 = mda.PtMDType<IMDTypeInt4>(); CColumnFactory cf; // typed colref CColRef *pcrOne = cf.PcrCreate(pmdtypeint4); GPOS_ASSERT(pcrOne == cf.PcrLookup(pcrOne->m_ulId)); cf.Destroy(pcrOne); // typed/named colref CWStringConst strName(GPOS_WSZ_LIT("C_CustKey")); CColRef *pcrTwo = cf.PcrCreate(pmdtypeint4, CName(&strName)); GPOS_ASSERT(pcrTwo == cf.PcrLookup(pcrTwo->m_ulId)); // clone previous colref CColRef *pcrThree = cf.PcrCreate(pcrTwo); GPOS_ASSERT(pcrThree != cf.PcrLookup(pcrTwo->m_ulId)); GPOS_ASSERT(!pcrThree->Name().FEquals(pcrTwo->Name())); cf.Destroy(pcrThree); cf.Destroy(pcrTwo); return GPOS_OK; }
//--------------------------------------------------------------------------- // @function: // CLogicalConstTableGet::PdrgpcoldescMapping // // @doc: // Construct column descriptors from column references // //--------------------------------------------------------------------------- DrgPcoldesc * CLogicalConstTableGet::PdrgpcoldescMapping ( IMemoryPool *pmp, DrgPcr *pdrgpcr ) const { GPOS_ASSERT(NULL != pdrgpcr); DrgPcoldesc *pdrgpcoldesc = GPOS_NEW(pmp) DrgPcoldesc(pmp); const ULONG ulLen = pdrgpcr->UlLength(); for (ULONG ul = 0; ul < ulLen; ul++) { CColRef *pcr = (*pdrgpcr)[ul]; ULONG ulLength = ULONG_MAX; if (CColRef::EcrtTable == pcr->Ecrt()) { CColRefTable *pcrTable = CColRefTable::PcrConvert(pcr); ulLength = pcrTable->UlWidth(); } CColumnDescriptor *pcoldesc = GPOS_NEW(pmp) CColumnDescriptor ( pmp, pcr->Pmdtype(), pcr->Name(), ul + 1, //iAttno true, // FNullable ulLength ); pdrgpcoldesc->Append(pcoldesc); } return pdrgpcoldesc; }
//--------------------------------------------------------------------------- // @function: // CColRefSetIterTest::EresUnittest_Basics // // @doc: // Testing ctors/dtor; and pcr decoding; // Other functionality already tested in vanilla CBitSetIter; // //--------------------------------------------------------------------------- GPOS_RESULT CColRefSetIterTest::EresUnittest_Basics() { CAutoMemoryPool amp; IMemoryPool *pmp = amp.Pmp(); // Setup an MD cache with a file-based provider CMDProviderMemory *pmdp = CTestUtils::m_pmdpf; pmdp->AddRef(); CMDAccessor mda(pmp, CMDCache::Pcache()); mda.RegisterProvider(CTestUtils::m_sysidDefault, pmdp); // install opt context in TLS CAutoOptCtxt aoc ( pmp, &mda, NULL /* pceeval */, CTestUtils::Pcm(pmp) ); // get column factory from optimizer context object CColumnFactory *pcf = COptCtxt::PoctxtFromTLS()->Pcf(); CColRefSet *pcrs = GPOS_NEW(pmp) CColRefSet(pmp); CWStringConst strName(GPOS_WSZ_LIT("Test Column")); CName name(&strName); // create a int4 datum const IMDTypeInt4 *pmdtypeint4 = mda.PtMDType<IMDTypeInt4>(); ULONG ulCols = 10; for(ULONG i = 0; i < ulCols; i++) { CColRef *pcr = pcf->PcrCreate(pmdtypeint4, name); pcrs->Include(pcr); GPOS_ASSERT(pcrs->FMember(pcr)); } GPOS_ASSERT(pcrs->CElements() == ulCols); ULONG ulCount = 0; CColRefSetIter crsi(*pcrs); while(crsi.FAdvance()) { GPOS_ASSERT((BOOL)crsi); CColRef *pcr = crsi.Pcr(); GPOS_ASSERT(pcr->Name().FEquals(name)); // to avoid unused variable warnings (void) pcr->UlId(); ulCount++; } GPOS_ASSERT(ulCols == ulCount); GPOS_ASSERT(!((BOOL)crsi)); pcrs->Release(); return GPOS_OK; }