greenplumn CXformSplitLimit 源码

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

greenplumn CXformSplitLimit 代码

文件路径:/src/backend/gporca/libgpopt/include/gpopt/xforms/CXformSplitLimit.h

//---------------------------------------------------------------------------
//	Greenplum Database
//	Copyright (C) 2012 EMC Corp.
//
//	@filename:
//		CXformSplitLimit.h
//
//	@doc:
//		Split a global limit into pair of local and global limit
//---------------------------------------------------------------------------
#ifndef GPOPT_CXformSplitLimit_H
#define GPOPT_CXformSplitLimit_H

#include "gpos/base.h"

#include "gpopt/xforms/CXformExploration.h"

namespace gpopt
{
using namespace gpos;

//---------------------------------------------------------------------------
//	@class:
//		CXformSplitLimit
//
//	@doc:
//		Split a global limit into pair of local and global limit
//
//---------------------------------------------------------------------------
class CXformSplitLimit : public CXformExploration
{
private:
	// helper function for creating a limit expression
	static CExpression *PexprLimit(
		CMemoryPool *mp,				// memory pool
		CExpression *pexprRelational,	// relational child
		CExpression *pexprScalarStart,	// limit offset
		CExpression *pexprScalarRows,	// limit count
		COrderSpec *pos,				// ordering specification
		BOOL fGlobal,					// is it a local or global limit
		BOOL fHasCount,					// does limit specify a number of rows
		BOOL fTopLimitUnderDML);

public:
	CXformSplitLimit(const CXformSplitLimit &) = delete;

	// ctor
	explicit CXformSplitLimit(CMemoryPool *mp);

	// dtor
	~CXformSplitLimit() override = default;

	// ident accessors
	EXformId
	Exfid() const override
	{
		return ExfSplitLimit;
	}

	// return a string for xform name
	const CHAR *
	SzId() const override
	{
		return "CXformSplitLimit";
	}

	// Compatibility function for splitting limit
	BOOL
	FCompatible(CXform::EXformId exfid) override
	{
		return (CXform::ExfSplitLimit != exfid);
	}

	// compute xform promise for a given expression handle
	EXformPromise Exfp(CExpressionHandle &exprhdl) const override;

	// actual transform
	void Transform(CXformContext *pxfctxt, CXformResult *pxfres,
				   CExpression *pexpr) const override;

};	// class CXformSplitLimit

}  // namespace gpopt

#endif	// !GPOPT_CXformSplitLimit_H

// EOF

相关信息

greenplumn 源码目录

相关文章

greenplumn CDecorrelator 源码

greenplumn CJoinOrder 源码

greenplumn CJoinOrderDP 源码

greenplumn CJoinOrderDPv2 源码

greenplumn CJoinOrderGreedy 源码

greenplumn CJoinOrderMinCard 源码

greenplumn CSubqueryHandler 源码

greenplumn CXform 源码

greenplumn CXformAntiSemiJoinAntiSemiJoinNotInSwap 源码

greenplumn CXformAntiSemiJoinAntiSemiJoinSwap 源码

0  赞