greenplumn CParseHandlerDXL 源码

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

greenplumn CParseHandlerDXL 代码

文件路径:/src/backend/gporca/libnaucrates/include/naucrates/dxl/parser/CParseHandlerDXL.h

//---------------------------------------------------------------------------
//	Greenplum Database
//	Copyright (C) 2010 Greenplum, Inc.
//
//	@filename:
//		CParseHandlerDXL.h
//
//	@doc:
//		SAX parse handler class for parsing a DXL document
//---------------------------------------------------------------------------

#ifndef GPDXL_CParseHandlerDXL_H
#define GPDXL_CParseHandlerDXL_H

#include "gpos/base.h"
#include "gpos/common/CBitSet.h"

#include "gpopt/cost/ICostModelParams.h"
#include "gpopt/search/CSearchStage.h"
#include "naucrates/dxl/parser/CParseHandlerBase.h"
#include "naucrates/md/CDXLStatsDerivedRelation.h"

namespace gpdxl
{
using namespace gpos;
using namespace gpmd;

XERCES_CPP_NAMESPACE_USE

//---------------------------------------------------------------------------
//	@class:
//		CParseHandlerDXL
//
//	@doc:
//		Parse handler for DXL documents.
//		Starting point for all other parse handlers
//
//---------------------------------------------------------------------------
class CParseHandlerDXL : public CParseHandlerBase
{
private:
	// traceflags
	CBitSet *m_trace_flags_bitset;

	// optimizer config
	COptimizerConfig *m_optimizer_config;

	// MD request
	CMDRequest *m_mdrequest;

	// the root of the parsed DXL query
	CDXLNode *m_query_dxl_root;

	// list of query output columns
	CDXLNodeArray *m_output_colums_dxl_array;

	// list of CTE producers
	CDXLNodeArray *m_cte_producers;

	// the root of the parsed DXL plan
	CDXLNode *m_plan_dxl_root;

	// list of parsed metadata objects
	IMDCacheObjectArray *m_mdid_cached_obj_array;

	// list of parsed metadata ids
	IMdIdArray *m_mdid_array;

	// the root of the parsed scalar expression
	CDXLNode *m_scalar_expr_dxl;

	// list of source system ids
	CSystemIdArray *m_system_id_array;

	// list of parsed statistics objects
	CDXLStatsDerivedRelationArray *m_dxl_stats_derived_rel_array;

	// search strategy
	CSearchStageArray *m_search_stage_array;

	// plan Id
	ULLONG m_plan_id;

	// plan space size
	ULLONG m_plan_space_size;

	// cost model params
	ICostModelParams *m_cost_model_params;

	// process the start of an element
	void StartElement(
		const XMLCh *const element_uri,			// URI of element's namespace
		const XMLCh *const element_local_name,	// local part of element's name
		const XMLCh *const element_qname,		// element's qname
		const Attributes &attr					// element's attributes
		) override;

	// process the end of an element
	void EndElement(
		const XMLCh *const element_uri,			// URI of element's namespace
		const XMLCh *const element_local_name,	// local part of element's name
		const XMLCh *const element_qname		// element's qname
		) override;

	// extract traceflags
	void ExtractTraceFlags(CParseHandlerBase *parse_handler_base);

	// extract optimizer config
	void ExtractOptimizerConfig(CParseHandlerBase *parse_handler_base);

	// extract a physical plan
	void ExtractDXLPlan(CParseHandlerBase *parse_handler_base);

	// extract metadata objects
	void ExtractMetadataObjects(CParseHandlerBase *parse_handler_base);

	// extract statistics
	void ExtractStats(CParseHandlerBase *parse_handler_base);

	// extract DXL query
	void ExtractDXLQuery(CParseHandlerBase *parse_handler_base);

	// extract mdids of requested objects
	void ExtractMDRequest(CParseHandlerBase *parse_handler_base);

	// extract search strategy
	void ExtractSearchStrategy(CParseHandlerBase *parse_handler_base);

	// extract cost params
	void ExtractCostParams(CParseHandlerBase *parse_handler_base);

	// extract a top level scalar expression
	void ExtractScalarExpr(CParseHandlerBase *parse_handler_base);

	// check if given element name is valid for starting DXL document
	static BOOL IsValidStartElement(const XMLCh *const element_name);

public:
	CParseHandlerDXL(const CParseHandlerDXL &) = delete;

	// ctor
	CParseHandlerDXL(CMemoryPool *mp, CParseHandlerManager *parse_handler_mgr);

	//dtor
	~CParseHandlerDXL() override;

	// traceflag bitset
	CBitSet *Pbs() const;

	// optimizer config
	COptimizerConfig *GetOptimizerConfig() const;

	// returns the root of the parsed DXL query
	CDXLNode *GetQueryDXLRoot() const;

	// returns the list of query output columns
	CDXLNodeArray *GetOutputColumnsDXLArray() const;

	// returns the list of CTE producers
	CDXLNodeArray *GetCTEProducerDXLArray() const;

	// returns the root of the parsed DXL plan
	CDXLNode *PdxlnPlan() const;

	// return the list of parsed metadata objects
	IMDCacheObjectArray *GetMdIdCachedObjArray() const;

	// return the list of parsed metadata ids
	IMdIdArray *GetMdIdArray() const;

	// return the MD request object
	CMDRequest *GetMiniDumper() const;

	// return the root of the parsed scalar expression
	CDXLNode *GetScalarExprDXLRoot() const;

	// return the list of parsed source system id objects
	CSystemIdArray *GetSysidPtrArray() const;

	// return the list of statistics objects
	CDXLStatsDerivedRelationArray *GetStatsDerivedRelDXLArray() const;

	// return search strategy
	CSearchStageArray *GetSearchStageArray() const;

	// return plan id
	ULLONG GetPlanId() const;

	// return plan space size
	ULLONG GetPlanSpaceSize() const;

	// return cost params
	ICostModelParams *GetCostModelParams() const;

	// process the end of the document
	void endDocument() override;
};
}  // namespace gpdxl

#endif	// !GPDXL_CParseHandlerDXL_H

// EOF

相关信息

greenplumn 源码目录

相关文章

greenplumn CParseHandlerAgg 源码

greenplumn CParseHandlerAppend 源码

greenplumn CParseHandlerArray 源码

greenplumn CParseHandlerAssert 源码

greenplumn CParseHandlerBase 源码

greenplumn CParseHandlerBroadcastMotion 源码

greenplumn CParseHandlerCTEConfig 源码

greenplumn CParseHandlerCTEList 源码

greenplumn CParseHandlerColDescr 源码

greenplumn CParseHandlerColStats 源码

0  赞