greenplumn CParseHandlerBase 源码
greenplumn CParseHandlerBase 代码
文件路径:/src/backend/gporca/libnaucrates/include/naucrates/dxl/parser/CParseHandlerBase.h
//---------------------------------------------------------------------------
//	Greenplum Database
//	Copyright (C) 2010 Greenplum, Inc.
//
//	@filename:
//		CParseHandlerBase.h
//
//	@doc:
//		Base SAX parse handler class for DXL documents
//---------------------------------------------------------------------------
#ifndef GPDXL_CParseHandlerBase_H
#define GPDXL_CParseHandlerBase_H
#include <xercesc/sax2/DefaultHandler.hpp>
#include "gpos/base.h"
#include "naucrates/dxl/CDXLUtils.h"
#include "naucrates/dxl/operators/CDXLNode.h"
#include "naucrates/exception.h"
namespace gpdxl
{
using namespace gpos;
// fwd decl
class CParseHandlerManager;
class CParseHandlerBase;
// dynamic arrays of parse handlers
using CParseHandlerBaseArray =
	CDynamicPtrArray<CParseHandlerBase, CleanupDelete>;
XERCES_CPP_NAMESPACE_USE
// DXL parse handler type. Currently we only annotate the top-level parse handlers
// for the top-level DXL elements such as Plan, Query and Metadata
enum EDxlParseHandlerType
{
	EdxlphOptConfig,
	EdxlphEnumeratorConfig,
	EdxlphStatisticsConfig,
	EdxlphCTEConfig,
	EdxlphHint,
	EdxlphWindowOids,
	EdxlphTraceFlags,
	EdxlphPlan,
	EdxlphQuery,
	EdxlphMetadata,
	EdxlphMetadataRequest,
	EdxlphStatistics,
	EdxlphSearchStrategy,
	EdxlphCostParams,
	EdxlphCostParam,
	EdxlphScalarExpr,
	EdxlphOther
};
//---------------------------------------------------------------------------
//	@class:
//		CParseHandlerBase
//
//	@doc:
//		Base SAX parse handler class for parsing DXL documents.
//		Implements Xerces required interface for SAX parse handlers.
//
//---------------------------------------------------------------------------
class CParseHandlerBase : public DefaultHandler
{
private:
	// array of parse handlers for child elements
	CParseHandlerBaseArray *m_parse_handler_base_array;
protected:
	// memory pool to create DXL objects in
	CMemoryPool *m_mp;
	// manager for transitions between parse handlers
	CParseHandlerManager *m_parse_handler_mgr;
	// add child parse handler
	inline void
	Append(CParseHandlerBase *parse_handler_base)
	{
		GPOS_ASSERT(nullptr != parse_handler_base);
		m_parse_handler_base_array->Append(parse_handler_base);
	};
	// number of children
	inline ULONG
	Length() const
	{
		return m_parse_handler_base_array->Size();
	}
	// shorthand to access children
	inline CParseHandlerBase *
	operator[](ULONG idx) const
	{
		return (*m_parse_handler_base_array)[idx];
	};
	// parse handler for root element
	CParseHandlerBase *m_parse_handler_root;
	// process the start of an element
	virtual 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
		) = 0;
	// process the end of an element
	virtual 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
		) = 0;
public:
	CParseHandlerBase(const CParseHandlerBase &) = delete;
	// ctor
	CParseHandlerBase(CMemoryPool *mp, CParseHandlerManager *parse_handler_mgr,
					  CParseHandlerBase *parse_handler_root);
	//dtor
	~CParseHandlerBase() override;
	virtual EDxlParseHandlerType GetParseHandlerType() const;
	// replaces a parse handler in the parse handler array with a new one
	void ReplaceParseHandler(CParseHandlerBase *parse_handler_base_old,
							 CParseHandlerBase *parse_handler_base_new);
	// Xerces parse handler interface method to eceive notification of the beginning 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;
	// Xerces parse handler interface method to eceive notification of 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;
	// process a parsing ProcessError
	void error(const SAXParseException &) override;
};
}  // namespace gpdxl
#endif	// !GPDXL_CParseHandlerBase_H
// EOF
相关信息
相关文章
greenplumn CParseHandlerAgg 源码
greenplumn CParseHandlerAppend 源码
greenplumn CParseHandlerArray 源码
greenplumn CParseHandlerAssert 源码
greenplumn CParseHandlerBroadcastMotion 源码
greenplumn CParseHandlerCTEConfig 源码
greenplumn CParseHandlerCTEList 源码
greenplumn CParseHandlerColDescr 源码
                        
                            0
                        
                        
                             赞
                        
                    
                    
                热门推荐
- 
                        2、 - 优质文章
 - 
                        3、 gate.io
 - 
                        7、 openharmony
 - 
                        9、 golang