greenplumn COptimizer 源码
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
相关信息
相关文章
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦