greenplumn CDrvdPropRelational 源码
greenplumn CDrvdPropRelational 代码
文件路径:/src/backend/gporca/libgpopt/include/gpopt/base/CDrvdPropRelational.h
//---------------------------------------------------------------------------
// Greenplum Database
// Copyright (C) 2009 - 2011 EMC CORP.
//
// @filename:
// CDrvdPropRelational.h
//
// @doc:
// Derived logical properties
//---------------------------------------------------------------------------
#ifndef GPOPT_CDrvdPropRelational_H
#define GPOPT_CDrvdPropRelational_H
#include "gpos/base.h"
#include "gpos/common/CRefCount.h"
#include "gpopt/base/CColRef.h"
#include "gpopt/base/CDrvdProp.h"
#include "gpopt/base/CFunctionProp.h"
#include "gpopt/base/CFunctionalDependency.h"
#include "gpopt/base/CMaxCard.h"
#include "gpopt/base/CPropConstraint.h"
#include "gpopt/metadata/CTableDescriptor.h"
namespace gpopt
{
using namespace gpos;
// fwd declaration
class CExpressionHandle;
class CColRefSet;
class CReqdPropPlan;
class CKeyCollection;
class CPropConstraint;
class CPartInfo;
//---------------------------------------------------------------------------
// @class:
// CDrvdPropRelational
//
// @doc:
// Derived logical properties container.
//
// These are properties than can be inferred from logical expressions or
// Memo groups. This includes output columns, outer references, primary
// keys. These properties hold regardless of the physical implementation
// of an expression.
//
//---------------------------------------------------------------------------
class CDrvdPropRelational : public CDrvdProp
{
friend class CExpression;
// See member variables (below) with the same name for description on what
// the property types respresent
enum EDrvdPropType
{
EdptPcrsOutput = 0,
EdptPcrsOuter,
EdptPcrsNotNull,
EdptPcrsCorrelatedApply,
EdptPkc,
EdptPdrgpfd,
EdptMaxCard,
EdptPpartinfo,
EdptPpc,
EdptPfp,
EdptJoinDepth,
EdptTableDescriptor,
EdptSentinel
};
private:
CMemoryPool *m_mp;
// bitset representing whether property has been derived
CBitSet *m_is_prop_derived;
// output columns
CColRefSet *m_pcrsOutput;
// columns not defined in the underlying operator tree
CColRefSet *m_pcrsOuter;
// output columns that do not allow null values
CColRefSet *m_pcrsNotNull;
// columns from the inner child of a correlated-apply expression that can be used above the apply expression
CColRefSet *m_pcrsCorrelatedApply;
// key collection
CKeyCollection *m_pkc;
// functional dependencies
CFunctionalDependencyArray *m_pdrgpfd;
// max card
CMaxCard m_maxcard;
// join depth (number of relations in underlying tree)
ULONG m_ulJoinDepth;
// partition table consumers
CPartInfo *m_ppartinfo;
// constraint property
CPropConstraint *m_ppc;
// function properties
CFunctionProp *m_pfp;
CTableDescriptor *m_table_descriptor;
// helper for getting applicable FDs from child
static CFunctionalDependencyArray *DeriveChildFunctionalDependencies(
CMemoryPool *mp, ULONG child_index, CExpressionHandle &exprhdl);
// helper for creating local FDs
static CFunctionalDependencyArray *DeriveLocalFunctionalDependencies(
CMemoryPool *mp, CExpressionHandle &exprhdl);
// Have all the properties been derived?
//
// NOTE1: This is set ONLY when Derive() is called. If all the properties
// are independently derived, m_is_complete will remain false. In that
// case, even though Derive() would attempt to derive all the properties
// once again, it should be quick, since each individual member has been
// cached.
// NOTE2: Once these properties are detached from the
// corresponding expression used to derive it, this MUST be set to true,
// since after the detachment, there will be no way to derive the
// properties once again.
BOOL m_is_complete;
protected:
// output columns
CColRefSet *DeriveOutputColumns(CExpressionHandle &);
// outer references
CColRefSet *DeriveOuterReferences(CExpressionHandle &);
// nullable columns
CColRefSet *DeriveNotNullColumns(CExpressionHandle &);
// columns from the inner child of a correlated-apply expression that can be used above the apply expression
CColRefSet *DeriveCorrelatedApplyColumns(CExpressionHandle &);
// key collection
CKeyCollection *DeriveKeyCollection(CExpressionHandle &);
// functional dependencies
CFunctionalDependencyArray *DeriveFunctionalDependencies(
CExpressionHandle &);
// max cardinality
CMaxCard DeriveMaxCard(CExpressionHandle &);
// join depth
ULONG DeriveJoinDepth(CExpressionHandle &);
// partition consumers
CPartInfo *DerivePartitionInfo(CExpressionHandle &);
// constraint property
CPropConstraint *DerivePropertyConstraint(CExpressionHandle &);
// function properties
CFunctionProp *DeriveFunctionProperties(CExpressionHandle &);
CTableDescriptor *DeriveTableDescriptor(CExpressionHandle &);
public:
CDrvdPropRelational(const CDrvdPropRelational &) = delete;
// ctor
CDrvdPropRelational(CMemoryPool *mp);
// dtor
~CDrvdPropRelational() override;
// type of properties
EPropType
Ept() override
{
return EptRelational;
}
BOOL
IsComplete() const override
{
return m_is_complete;
}
// derivation function
void Derive(CMemoryPool *mp, CExpressionHandle &exprhdl,
CDrvdPropCtxt *pdpctxt) override;
// output columns
CColRefSet *GetOutputColumns() const;
// outer references
CColRefSet *GetOuterReferences() const;
// nullable columns
CColRefSet *GetNotNullColumns() const;
// columns from the inner child of a correlated-apply expression that can be used above the apply expression
CColRefSet *GetCorrelatedApplyColumns() const;
// key collection
CKeyCollection *GetKeyCollection() const;
// functional dependencies
CFunctionalDependencyArray *GetFunctionalDependencies() const;
// max cardinality
CMaxCard GetMaxCard() const;
// join depth
ULONG GetJoinDepth() const;
// partition consumers
CPartInfo *GetPartitionInfo() const;
// constraint property
CPropConstraint *GetPropertyConstraint() const;
// function properties
CFunctionProp *GetFunctionProperties() const;
CTableDescriptor *GetTableDescriptor() const;
// shorthand for conversion
static CDrvdPropRelational *GetRelationalProperties(CDrvdProp *pdp);
// check for satisfying required plan properties
BOOL FSatisfies(const CReqdPropPlan *prpp) const override;
// print function
IOstream &OsPrint(IOstream &os) const override;
}; // class CDrvdPropRelational
} // namespace gpopt
#endif // !GPOPT_CDrvdPropRelational_H
// EOF
相关信息
相关文章
greenplumn CColConstraintsArrayMapper 源码
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦