提交 514b5bc0 编写于 作者: S Shreedhar Hardikar

Do not maintain mdidType separately in CDXLScalarIdent

This information can be easily derived from CDXLColRef member of
CDXLScalarIdent. This now mirrors what is done in the ORCA types
CScalarIdent and CColRef.
Signed-off-by: NEkta Khanna <ekhanna@pivotal.io>
上级 9da70981
......@@ -603,7 +603,6 @@ CTranslatorDXLToScalar::PsubplanFromDXLNodeScSubPlan
Expr *pexprTestExpr = PexprSubplanTestExpr(pdxlop->PdxlnTestExpr(), slink, pmapcidvar, &plparamIds);
const DrgPdxlcr *pdrgdxlcrOuterRefs = pdxlop->DrgdxlcrOuterRefs();
const DrgPmdid *pdrgmdidOuterRefs = pdxlop->DrgmdidOuterRefs();
const ULONG ulLen = pdrgdxlcrOuterRefs->UlLength();
......@@ -613,8 +612,8 @@ CTranslatorDXLToScalar::PsubplanFromDXLNodeScSubPlan
// insert new outer ref mappings in the subplan translate context
for (ULONG ul = 0; ul < ulLen; ul++)
{
IMDId *pmdid = (*pdrgmdidOuterRefs)[ul];
CDXLColRef *pdxlcr = (*pdrgdxlcrOuterRefs)[ul];
IMDId *pmdid = pdxlcr->PmdidType();
ULONG ulColid = pdxlcr->UlID();
if (NULL == dxltrctxSubplan.Pmecolidparamid(ulColid))
......@@ -792,45 +791,44 @@ CTranslatorDXLToScalar::PexprSubplanTestExpr
//---------------------------------------------------------------------------
void
CTranslatorDXLToScalar::TranslateSubplanParams
(
SubPlan *psubplan,
CDXLTranslateContext *pdxltrctx,
const DrgPdxlcr *pdrgdxlcrOuterRefs,
CMappingColIdVar *pmapcidvar
)
(
SubPlan *psubplan,
CDXLTranslateContext *pdxltrctx,
const DrgPdxlcr *pdrgdxlcrOuterRefs,
CMappingColIdVar *pmapcidvar
)
{
GPOS_ASSERT(NULL != psubplan);
GPOS_ASSERT(NULL != pdxltrctx);
GPOS_ASSERT(NULL != pdrgdxlcrOuterRefs);
GPOS_ASSERT(NULL != pmapcidvar);
// Create the PARAM and ARG nodes
const ULONG ulSize = pdrgdxlcrOuterRefs->UlLength();
for (ULONG ul = 0; ul < ulSize; ul++)
{
CDXLColRef *pdxlcr = (*pdrgdxlcrOuterRefs)[ul];
pdxlcr->AddRef();
const CMappingElementColIdParamId *pmecolidparamid = pdxltrctx->Pmecolidparamid(pdxlcr->UlID());
Param *pparam = PparamFromMapping(pmecolidparamid);
psubplan->parParam = gpdb::PlAppendInt(psubplan->parParam, pparam->paramid);
IMDId *pmdidType = pmecolidparamid->PmdidType();
pmdidType->AddRef();
CDXLScalarIdent *pdxlopIdent = GPOS_NEW(m_pmp) CDXLScalarIdent(m_pmp, pdxlcr, pmdidType);
Expr *parg = (Expr *) pmapcidvar->PvarFromDXLNodeScId(pdxlopIdent);
// not found in mapping, it must be an external parameter
if (NULL == parg)
{
parg = (Expr*) PparamFromMapping(pmecolidparamid);
GPOS_ASSERT(NULL != parg);
}
pdxlopIdent->Release();
psubplan->args = gpdb::PlAppendElement(psubplan->args, parg);
}
GPOS_ASSERT(NULL != psubplan);
GPOS_ASSERT(NULL != pdxltrctx);
GPOS_ASSERT(NULL != pdrgdxlcrOuterRefs);
GPOS_ASSERT(NULL != pmapcidvar);
// Create the PARAM and ARG nodes
const ULONG ulSize = pdrgdxlcrOuterRefs->UlLength();
for (ULONG ul = 0; ul < ulSize; ul++)
{
CDXLColRef *pdxlcr = (*pdrgdxlcrOuterRefs)[ul];
pdxlcr->AddRef();
const CMappingElementColIdParamId *pmecolidparamid = pdxltrctx->Pmecolidparamid(pdxlcr->UlID());
Param *pparam = PparamFromMapping(pmecolidparamid);
psubplan->parParam = gpdb::PlAppendInt(psubplan->parParam, pparam->paramid);
GPOS_ASSERT(pmecolidparamid->PmdidType()->FEquals(pdxlcr->PmdidType()));
CDXLScalarIdent *pdxlopIdent = GPOS_NEW(m_pmp) CDXLScalarIdent(m_pmp, pdxlcr);
Expr *parg = (Expr *) pmapcidvar->PvarFromDXLNodeScId(pdxlopIdent);
// not found in mapping, it must be an external parameter
if (NULL == parg)
{
parg = (Expr*) PparamFromMapping(pmecolidparamid);
GPOS_ASSERT(NULL != parg);
}
pdxlopIdent->Release();
psubplan->args = gpdb::PlAppendElement(psubplan->args, parg);
}
}
......
......@@ -1596,9 +1596,10 @@ CTranslatorQueryToDXL::PdxlnWindow
GPOS_NEW(m_pmp) CDXLColRef
(
m_pmp,
GPOS_NEW(m_pmp) CMDName(m_pmp, pmdnameAlias->Pstr()), ulColId
),
GPOS_NEW(m_pmp) CMDIdGPDB(gpdb::OidExprType((Node*) pte->expr))
GPOS_NEW(m_pmp) CMDName(m_pmp, pmdnameAlias->Pstr()),
ulColId,
GPOS_NEW(m_pmp) CMDIdGPDB(gpdb::OidExprType((Node*) pte->expr))
)
)
);
pdxlnPrElNew->AddChild(pdxlnPrElNewChild);
......@@ -3914,12 +3915,12 @@ CTranslatorQueryToDXL::PdrgpdxlnConstructOutputCols
const ULONG ulColId = CTranslatorUtils::UlColId(ulResNo, phmiulAttnoColId);
// create a column reference
CDXLColRef *pdxlcr = GPOS_NEW(m_pmp) CDXLColRef(m_pmp, pmdname, ulColId);
IMDId *pmdidType = GPOS_NEW(m_pmp) CMDIdGPDB(gpdb::OidExprType( (Node*) pte->expr));
CDXLColRef *pdxlcr = GPOS_NEW(m_pmp) CDXLColRef(m_pmp, pmdname, ulColId, pmdidType);
CDXLScalarIdent *pdxlopIdent = GPOS_NEW(m_pmp) CDXLScalarIdent
(
m_pmp,
pdxlcr,
GPOS_NEW(m_pmp) CMDIdGPDB(gpdb::OidExprType( (Node*) pte->expr))
pdxlcr
);
// create the DXL node holding the scalar ident operator
......
......@@ -168,14 +168,19 @@ CTranslatorScalarToDXL::PdxlnScIdFromVar
CMDName *pmdname = GPOS_NEW(m_pmp) CMDName(m_pmp, pstr);
// create a column reference for the given var
CDXLColRef *pdxlcr = GPOS_NEW(m_pmp) CDXLColRef(m_pmp, pmdname, ulId);
CDXLColRef *pdxlcr = GPOS_NEW(m_pmp) CDXLColRef
(
m_pmp,
pmdname,
ulId,
GPOS_NEW(m_pmp) CMDIdGPDB(pvar->vartype)
);
// create the scalar ident operator
CDXLScalarIdent *pdxlopIdent = GPOS_NEW(m_pmp) CDXLScalarIdent
(
m_pmp,
pdxlcr,
GPOS_NEW(m_pmp) CMDIdGPDB(pvar->vartype)
pdxlcr
);
// create the DXL node holding the scalar ident operator
......@@ -1522,9 +1527,9 @@ CTranslatorScalarToDXL::PdxlnWindowFrameEdgeVal
(
m_pmp,
GPOS_NEW(m_pmp) CMDName(m_pmp, &strUnnamedCol),
ulPrElId
),
GPOS_NEW(m_pmp) CMDIdGPDB(gpdb::OidExprType(const_cast<Node*>(pnode)))
ulPrElId,
GPOS_NEW(m_pmp) CMDIdGPDB(gpdb::OidExprType(const_cast<Node*>(pnode)))
)
);
pdxlnVal = GPOS_NEW(m_pmp) CDXLNode(m_pmp, pdxlopIdent);
......
......@@ -1731,8 +1731,8 @@ CTranslatorUtils::PdxlnDummyPrElem
// create a column reference for the scalar identifier to be casted
CMDName *pmdname = GPOS_NEW(pmp) CMDName(pmp, pdxlcdOutput->Pmdname()->Pstr());
CDXLColRef *pdxlcr = GPOS_NEW(pmp) CDXLColRef(pmp, pmdname, ulColIdInput);
CDXLScalarIdent *pdxlopIdent = GPOS_NEW(pmp) CDXLScalarIdent(pmp, pdxlcr, pmdidCopy);
CDXLColRef *pdxlcr = GPOS_NEW(pmp) CDXLColRef(pmp, pmdname, ulColIdInput, pmdidCopy);
CDXLScalarIdent *pdxlopIdent = GPOS_NEW(pmp) CDXLScalarIdent(pmp, pdxlcr);
CDXLNode *pdxlnPrEl = GPOS_NEW(pmp) CDXLNode
(
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册