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
赞