//--------------------------------------------------------------------------- // @function: // CMDIdGPDB::CMDIdGPDB // // @doc: // Copy constructor // //--------------------------------------------------------------------------- CMDIdGPDB::CMDIdGPDB ( const CMDIdGPDB &mdidSource ) : IMDId(), m_sysid(mdidSource.Sysid()), m_oid(mdidSource.OidObjectId()), m_ulVersionMajor(mdidSource.UlVersionMajor()), m_ulVersionMinor(mdidSource.UlVersionMinor()), m_str(m_wszBuffer, GPOS_ARRAY_SIZE(m_wszBuffer)) { GPOS_ASSERT(mdidSource.FValid()); GPOS_ASSERT(IMDId::EmdidGPDB == mdidSource.Emdidt()); // serialize mdid into static string Serialize(); }
//--------------------------------------------------------------------------- // @function: // CTranslatorDXLToQuery::PrteFromTblDescr // // @doc: // Translates a DXL table descriptor into a range table entry // //--------------------------------------------------------------------------- RangeTblEntry * CTranslatorDXLToQuery::PrteFromTblDescr ( const CDXLTableDescr *pdxltabdesc, Index iRel, CStateDXLToQuery *pstatedxltoquery, CMappingColIdVarQuery *pmapcidvarquery ) { GPOS_ASSERT(0 == pstatedxltoquery->UlLength()); RangeTblEntry *prte = MakeNode(RangeTblEntry); prte->rtekind = RTE_RELATION; // get oid for table CMDIdGPDB *pmdid = CMDIdGPDB::PmdidConvert(pdxltabdesc->Pmdid()); prte->relid = pmdid->OidObjectId(); Alias *palias = MakeNode(Alias); palias->colnames = NIL; // get table alias palias->aliasname = CTranslatorUtils::SzFromWsz(pdxltabdesc->Pmdname()->Pstr()->Wsz()); // get column names const ULONG ulArity = pdxltabdesc->UlArity(); for (ULONG ul = 0; ul < ulArity; ++ul) { const CDXLColDescr *pdxlcd = pdxltabdesc->Pdxlcd(ul); CHAR *szColName = CTranslatorUtils::SzFromWsz(pdxlcd->Pmdname()->Pstr()->Wsz()); GPOS_ASSERT(NULL != pdxlcd); GPOS_ASSERT(0 != pdxlcd->IAttno()); Value *pvalColName = gpdb::PvalMakeString(szColName); palias->colnames = gpdb::PlAppendElement(palias->colnames, pvalColName); const CMDIdGPDB *pmdidColType = CMDIdGPDB::PmdidConvert(pdxlcd->PmdidType()); OID oidAttType = pmdidColType->OidObjectId(); GPOS_ASSERT(InvalidOid != oidAttType); Var *pvar = gpdb::PvarMakeVar ( iRel, (AttrNumber) pdxlcd->IAttno(), oidAttType, -1, // vartypmod 0 ); TargetEntry *pte = MakeNode(TargetEntry); pte->expr = (Expr*) pvar; pte->resname = szColName; pte->resno = (AttrNumber) pdxlcd->IAttno(); //save mapping col id -> Var in the query translation context pmapcidvarquery->FInsertMapping(pdxlcd->UlID(), pte); pstatedxltoquery->AddOutputColumnEntry(pte, pte->resname, pdxlcd->UlID()); } prte->eref = palias; return prte; }