greenplumn CPhysicalExternalScan 源码
greenplumn CPhysicalExternalScan 代码
文件路径:/src/backend/gporca/libgpopt/src/operators/CPhysicalExternalScan.cpp
//---------------------------------------------------------------------------
// Greenplum Database
// Copyright (C) 2013 VMware, Inc. or its affiliates.
//
// @filename:
// CPhysicalExternalScan.cpp
//
// @doc:
// Implementation of external scan operator
//---------------------------------------------------------------------------
#include "gpopt/operators/CPhysicalExternalScan.h"
#include "gpos/base.h"
#include "gpopt/base/CDistributionSpecRandom.h"
#include "gpopt/metadata/CName.h"
#include "gpopt/metadata/CTableDescriptor.h"
#include "gpopt/operators/CExpressionHandle.h"
using namespace gpopt;
//---------------------------------------------------------------------------
// @function:
// CPhysicalExternalScan::CPhysicalExternalScan
//
// @doc:
// Ctor
//
//---------------------------------------------------------------------------
CPhysicalExternalScan::CPhysicalExternalScan(CMemoryPool *mp,
const CName *pnameAlias,
CTableDescriptor *ptabdesc,
CColRefArray *pdrgpcrOutput)
: CPhysicalTableScan(mp, pnameAlias, ptabdesc, pdrgpcrOutput)
{
// if this table is master only, then keep the original distribution spec.
if (IMDRelation::EreldistrMasterOnly == ptabdesc->GetRelDistribution())
{
return;
}
// otherwise, override the distribution spec for external table
if (m_pds)
{
m_pds->Release();
}
m_pds = GPOS_NEW(mp) CDistributionSpecRandom();
}
//---------------------------------------------------------------------------
// @function:
// CPhysicalExternalScan::Matches
//
// @doc:
// match operator
//
//---------------------------------------------------------------------------
BOOL
CPhysicalExternalScan::Matches(COperator *pop) const
{
if (Eopid() != pop->Eopid())
{
return false;
}
CPhysicalExternalScan *popExternalScan =
CPhysicalExternalScan::PopConvert(pop);
return m_ptabdesc == popExternalScan->Ptabdesc() &&
m_pdrgpcrOutput->Equals(popExternalScan->PdrgpcrOutput());
}
//---------------------------------------------------------------------------
// @function:
// CPhysicalExternalScan::EpetRewindability
//
// @doc:
// Return the enforcing type for rewindability property based on this operator
//
//---------------------------------------------------------------------------
CEnfdProp::EPropEnforcingType
CPhysicalExternalScan::EpetRewindability(CExpressionHandle &exprhdl,
const CEnfdRewindability *per) const
{
CRewindabilitySpec *prs = CDrvdPropPlan::Pdpplan(exprhdl.Pdp())->Prs();
if (per->FCompatible(prs))
{
return CEnfdProp::EpetUnnecessary;
}
return CEnfdProp::EpetRequired;
}
// EOF
相关信息
相关文章
greenplumn CExpressionFactorizer 源码
greenplumn CExpressionHandle 源码
greenplumn CExpressionPreprocessor 源码
greenplumn CExpressionUtils 源码
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
7、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦