greenplumn CDistributionSpecStrictSingleton 源码

  • 2022-08-18
  • 浏览 (450)

greenplumn CDistributionSpecStrictSingleton 代码

文件路径:/src/backend/gporca/libgpopt/include/gpopt/base/CDistributionSpecStrictSingleton.h

//---------------------------------------------------------------------------
//	Greenplum Database
//	Copyright (C) 2013 EMC Corp.
//
//	@filename:
//		CDistributionSpecStrictSingleton.h
//
//	@doc:
//		Description of a strict singleton distribution. Unlike the simple singleton distribution,
//		that satisfies hash distribution requests, the strict singleton distribution is only
//		compatible with other singleton distributions
//		Can be used as a derived property;
//---------------------------------------------------------------------------
#ifndef GPOPT_CDistributionSpecStrictSingleton_H
#define GPOPT_CDistributionSpecStrictSingleton_H

#include "gpos/base.h"
#include "gpos/utils.h"

#include "gpopt/base/CDistributionSpecSingleton.h"

namespace gpopt
{
using namespace gpos;

//---------------------------------------------------------------------------
//	@class:
//		CDistributionSpecStrictSingleton
//
//	@doc:
//		Class for representing singleton distribution specification.
//
//---------------------------------------------------------------------------
class CDistributionSpecStrictSingleton : public CDistributionSpecSingleton
{
private:
public:
	CDistributionSpecStrictSingleton(const CDistributionSpecStrictSingleton &) =
		delete;

	// ctor
	explicit CDistributionSpecStrictSingleton(ESegmentType esegtype);

	// distribution type accessor
	EDistributionType
	Edt() const override
	{
		return CDistributionSpec::EdtStrictSingleton;
	}

	// return true if distribution spec can be required
	BOOL
	FRequirable() const override
	{
		return false;
	}

	// does this distribution satisfy the given one
	BOOL FSatisfies(const CDistributionSpec *pds) const override;

	// append enforcers to dynamic array for the given plan properties
	void
	AppendEnforcers(CMemoryPool *,		  // mp
					CExpressionHandle &,  // exprhdl
					CReqdPropPlan *,	  // prpp
					CExpressionArray *,	  // pdrgpexpr
					CExpression *		  // pexpr
					) override
	{
		GPOS_ASSERT(!"attempt to enforce strict SINGLETON distribution");
	}

	// print
	IOstream &OsPrint(IOstream &os) const override;

	// conversion function
	static CDistributionSpecStrictSingleton *
	PdssConvert(CDistributionSpec *pds)
	{
		GPOS_ASSERT(nullptr != pds);
		GPOS_ASSERT(EdtStrictSingleton == pds->Edt());

		return dynamic_cast<CDistributionSpecStrictSingleton *>(pds);
	}

};	// class CDistributionSpecStrictSingleton

}  // namespace gpopt

#endif	// !GPOPT_CDistributionSpecStrictSingleton_H

// EOF

相关信息

greenplumn 源码目录

相关文章

greenplumn CAutoOptCtxt 源码

greenplumn CCTEInfo 源码

greenplumn CCTEMap 源码

greenplumn CCTEReq 源码

greenplumn CCastUtils 源码

greenplumn CColConstraintsArrayMapper 源码

greenplumn CColConstraintsHashMapper 源码

greenplumn CColRef 源码

greenplumn CColRefComputed 源码

greenplumn CColRefSet 源码

0  赞