greenplumn CPhysicalDynamicScan 代码
文件路径:/src/backend/gporca/libgpopt/src/operators/CPhysicalDynamicScan.cpp
/---------------------------------------------------------------------------
/ Greenplum Database
/ Copyright (C) 2015 VMware, Inc. or its affiliates.
/
/ @filename:
/ CPhysicalDynamicScan.cpp
/
/ @doc:
/ Base class for physical dynamic scan operators
/
/ @owner:
/
/
/ @test:
/
/---------------------------------------------------------------------------
#include "gpopt/operators/CPhysicalDynamicScan.h"
#include "gpopt/base/CDrvdPropCtxtPlan.h"
#include "gpopt/base/CUtils.h"
#include "gpopt/metadata/CName.h"
#include "gpopt/metadata/CPartConstraint.h"
#include "gpopt/metadata/CTableDescriptor.h"
#include "gpopt/operators/CExpressionHandle.h"
using namespace gpopt;
using namespace gpos;
/---------------------------------------------------------------------------
/ @function:
/ CPhysicalDynamicScan::CPhysicalDynamicScan
/
/ @doc:
/ Ctor
/
/---------------------------------------------------------------------------
CPhysicalDynamicScan::CPhysicalDynamicScan(
CMemoryPool *mp, CTableDescriptor *ptabdesc, ULONG ulOriginOpId,
const CName *pnameAlias, ULONG scan_id, CColRefArray *pdrgpcrOutput,
CColRef2dArray *pdrgpdrgpcrParts, IMdIdArray *partition_mdids,
ColRefToUlongMapArray *root_col_mapping_per_part)
: CPhysicalScan(mp, pnameAlias, ptabdesc, pdrgpcrOutput),
m_ulOriginOpId(ulOriginOpId),
m_scan_id(scan_id),
m_pdrgpdrgpcrPart(pdrgpdrgpcrParts),
m_partition_mdids(partition_mdids),
m_root_col_mapping_per_part(root_col_mapping_per_part)
{
GPOS_ASSERT(nullptr != pdrgpdrgpcrParts);
GPOS_ASSERT(0 < pdrgpdrgpcrParts->Size());
CMDAccessor *mda = COptCtxt::PoctxtFromTLS()->Pmda();
const IMDRelation *root_rel = mda->RetrieveRel(ptabdesc->MDId());
IMdIdArray *all_partition_mdids = root_rel->ChildPartitionMdids();
ULONG part_ptr = 0;
for (ULONG ul = 0; ul < partition_mdids->Size(); ul++)
{
IMDId *part_mdid = (*partition_mdids)[ul];
while (part_mdid != (*all_partition_mdids)[part_ptr])
{
part_ptr++;
}
COptCtxt::PoctxtFromTLS()->AddPartForScanId(scan_id, part_ptr);
}
}
/---------------------------------------------------------------------------
/ @function:
/ CPhysicalDynamicScan::~CPhysicalDynamicScan
/
/ @doc:
/ Dtor
/
/---------------------------------------------------------------------------
CPhysicalDynamicScan::~CPhysicalDynamicScan()
{
m_pdrgpdrgpcrPart->Release();
m_partition_mdids->Release();
m_root_col_mapping_per_part->Release();
}
/---------------------------------------------------------------------------
/ @function:
/ CPhysicalDynamicScan::HashValue
/
/ @doc:
/ Combine part index, pointer for table descriptor, Eop and output columns
/
/---------------------------------------------------------------------------
ULONG
CPhysicalDynamicScan::HashValue() const
{
ULONG ulHash = gpos::CombineHashes(
COperator::HashValue(),
gpos::CombineHashes(gpos::HashValue(&m_scan_id),
m_ptabdesc->MDId()->HashValue()));
ulHash =
gpos::CombineHashes(ulHash, CUtils::UlHashColArray(m_pdrgpcrOutput));
return ulHash;
}
/---------------------------------------------------------------------------
/ @function:
/ CPhysicalDynamicScan::OsPrint
/
/ @doc:
/ debug print
/
/---------------------------------------------------------------------------
IOstream &
CPhysicalDynamicScan::OsPrint(IOstream &os) const
{
os << SzId() << " ";
/ alias of table as referenced in the query
m_pnameAlias->OsPrint(os);
/ actual name of table in catalog and columns
os << " (";
m_ptabdesc->Name().OsPrint(os);
os << "), Columns: [";
CUtils::OsPrintDrgPcr(os, m_pdrgpcrOutput);
os << "] Scan Id: " << m_scan_id;
return os;
}
/---------------------------------------------------------------------------
/ @function:
/ CPhysicalDynamicScan::PopConvert
/
/ @doc:
/ conversion function
/
/---------------------------------------------------------------------------
CPhysicalDynamicScan *
CPhysicalDynamicScan::PopConvert(COperator *pop)
{
GPOS_ASSERT(nullptr != pop);
GPOS_ASSERT(CUtils::FPhysicalScan(pop) &&
CPhysicalScan::PopConvert(pop)->FDynamicScan());
return dynamic_cast<CPhysicalDynamicScan *>(pop);
}
/ EOF
相关信息
相关文章
greenplumn CExpressionFactorizer 源码
greenplumn CExpressionHandle 源码
greenplumn CExpressionPreprocessor 源码
greenplumn CExpressionUtils 源码