greenplumn CDrvdProp 源码
greenplumn CDrvdProp 代码
文件路径:/src/backend/gporca/libgpopt/include/gpopt/base/CDrvdProp.h
//---------------------------------------------------------------------------
// Greenplum Database
// Copyright (C) 2009 - 2011 EMC CORP.
//
// @filename:
// CDrvdProp.h
//
// @doc:
// Base class for all derived properties
//---------------------------------------------------------------------------
#ifndef GPOPT_CDrvdProp_H
#define GPOPT_CDrvdProp_H
#include "gpos/base.h"
#include "gpos/common/CDynamicPtrArray.h"
#include "gpos/common/CRefCount.h"
#include "gpos/common/DbgPrintMixin.h"
namespace gpopt
{
using namespace gpos;
// fwd declarations
class CExpressionHandle;
class COperator;
class CDrvdProp;
class CDrvdPropCtxt;
class CReqdPropPlan;
// dynamic array for properties
using CDrvdPropArray = CDynamicPtrArray<CDrvdProp, CleanupRelease>;
//---------------------------------------------------------------------------
// @class:
// CDrvdProp
//
// @doc:
// Abstract base class for all derived properties. Individual property
// components are added separately. CDrvdProp is memory pool-agnostic.
//
// All derived property classes implement a pure virtual function
// CDrvdProp::Derive(). This function is responsible for filling in the
// different properties in the property container. For example
// CDrvdPropScalar::Derive() fills in used and defined columns in the
// current scalar property container.
//
// Property derivation takes place in a bottom-up fashion. Each operator
// has to implement virtual derivation functions to be called by the
// derivation mechanism of each single property. For example,
// CPhysical::PosDerive() is used to derive sort order of an expression
// rooted by a given physical operator. Similarly, CScalar::GetUsedColumns() is
// used to derive the used columns in a scalar expression rooted by a
// given operator.
//
// The derivation functions take as argument a CExpressionHandle object,
// which is an abstraction of the child nodes (which could be Memo groups,
// or actual operators in stand-alone expression trees). This gives the
// derivation functions a unified way to access the properties of the
// children and combine them with local properties.
//
// The derivation mechanism is kicked off by the function
// CExpressionHandle::DeriveProps().
//
//---------------------------------------------------------------------------
class CDrvdProp : public CRefCount, public DbgPrintMixin<CDrvdProp>
{
public:
// types of derived properties
enum EPropType
{
EptRelational,
EptPlan,
EptScalar,
EptInvalid,
EptSentinel = EptInvalid
};
private:
public:
CDrvdProp(const CDrvdProp &) = delete;
// ctor
CDrvdProp();
// dtor
~CDrvdProp() override = default;
// type of properties
virtual EPropType Ept() = 0;
// derivation function
virtual void Derive(CMemoryPool *mp, CExpressionHandle &exprhdl,
CDrvdPropCtxt *pdppropctxt) = 0;
// check for satisfying required plan properties
virtual BOOL FSatisfies(const CReqdPropPlan *prpp) const = 0;
virtual BOOL
IsComplete() const
{
return true;
}
virtual gpos::IOstream &OsPrint(gpos::IOstream &os) const = 0;
}; // class CDrvdProp
// shorthand for printing
IOstream &operator<<(IOstream &os, const CDrvdProp &drvdprop);
} // namespace gpopt
#endif // !GPOPT_CDrvdProp_H
// EOF
相关信息
相关文章
greenplumn CColConstraintsArrayMapper 源码
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦