greenplumn COptimizer 源码

2022-08-18 浏览 (342)

greenplumn COptimizer 代码

文件路径:/src/backend/gporca/libgpopt/include/gpopt/optimizer/COptimizer.h

/---------------------------------------------------------------------------
/	Greenplum Database
/	Copyright (C) 2012 EMC Corp.
/
/	@filename:
/		COptimizer.h
/
/	@doc:
/		Optimizer class, entry point for query optimization
/---------------------------------------------------------------------------
#ifndef GPOPT_COptimizer_H
#define GPOPT_COptimizer_H

#include "gpos/base.h"

#include "gpopt/eval/CConstExprEvaluatorDefault.h"
#include "gpopt/search/CSearchStage.h"
#include "naucrates/dxl/operators/CDXLNode.h"

namespace gpdxl
{
class CDXLNode;
}

namespace gpmd
{
class IMDProvider;
}


using namespace gpos;
using namespace gpdxl;

namespace gpopt
{
/ forward declarations
class ICostModel;
class COptimizerConfig;
class CQueryContext;
class CEnumeratorConfig;

/---------------------------------------------------------------------------
/	@class:
/		COptimizer
/
/	@doc:
/		Optimizer class, entry point for query optimization
/
/---------------------------------------------------------------------------
class COptimizer
{
private:
	/ handle exception after finalizing minidump
	static void HandleExceptionAfterFinalizingMinidump(CException &ex);

	/ optimize query in the given query context
	static CExpression *PexprOptimize(CMemoryPool *mp, CQueryContext *pqc,
									  CSearchStageArray *search_stage_array);

	/ translate an optimizer expression into a DXL tree
	static CDXLNode *CreateDXLNode(CMemoryPool *mp, CMDAccessor *md_accessor,
								   CExpression *pexpr,
								   CColRefArray *colref_array,
								   CMDNameArray *pdrgpmdname, ULONG ulHosts);

	/ helper function to print query expression
	static void PrintQuery(CMemoryPool *mp, CExpression *pexprTranslated,
						   CQueryContext *pqc);

	/ helper function to print query plan
	static void PrintPlan(CMemoryPool *mp, CExpression *pexprPlan);

	/ helper function to dump plan samples
	static void DumpSamples(CMemoryPool *mp, CEnumeratorConfig *pec,
							ULONG ulSessionId, ULONG ulCmdId);

	/ print query or plan tree
	static void PrintQueryOrPlan(CMemoryPool *mp, CExpression *pexpr,
								 CQueryContext *pqc = nullptr);

	/ Check for a plan with CTE, if both CTEProducer and CTEConsumer are executed on the same locality.
	static void CheckCTEConsistency(CMemoryPool *mp, CExpression *pexpr);

public:
	/ main optimizer function
	static CDXLNode *PdxlnOptimize(
		CMemoryPool *mp,
		CMDAccessor *md_accessor,  / MD accessor
		const CDXLNode *query,
		const CDXLNodeArray
			*query_output_dxlnode_array,  / required output columns
		const CDXLNodeArray *cte_producers,
		IConstExprEvaluator *pceeval,  / constant expression evaluator
		ULONG ulHosts,		/ number of hosts (data nodes) in the system
		ULONG ulSessionId,	/ session id used for logging and minidumps
		ULONG ulCmdId,		/ command id used for logging and minidumps
		CSearchStageArray *search_stage_array,	/ search strategy
		COptimizerConfig *optimizer_config,		/ optimizer configurations
		const CHAR *szMinidumpFileName =
			nullptr	 / name of minidump file to be created
	);
};	/ class COptimizer
}  / namespace gpopt

#endif	/ !GPOPT_COptimizer_H

/ EOF

相关信息

greenplumn 源码目录

相关文章

greenplumn COptimizerConfig 源码

^