Пример #1
0
//---------------------------------------------------------------------------
//	@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();
}
Пример #2
0
//---------------------------------------------------------------------------
//	@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;
}