greenplumn CDXLOperatorFactory 源码
greenplumn CDXLOperatorFactory 代码
文件路径:/src/backend/gporca/libnaucrates/include/naucrates/dxl/operators/CDXLOperatorFactory.h
//---------------------------------------------------------------------------
// Greenplum Database
// Copyright (C) 2010 Greenplum, Inc.
//
// @filename:
// CDXLOperatorFactory.h
//
// @doc:
// Factory for creating DXL tree elements out of parsed XML attributes
//---------------------------------------------------------------------------
#ifndef GPDXL_CDXLOperatorFactory_H
#define GPDXL_CDXLOperatorFactory_H
#include <xercesc/sax2/Attributes.hpp>
#include <xercesc/util/XMLString.hpp>
#include <xercesc/util/XMLStringTokenizer.hpp>
#include <xercesc/util/XMLUniDefs.hpp>
#include "gpos/base.h"
#include "gpos/common/CDouble.h"
#include "naucrates/base/IDatum.h"
#include "naucrates/dxl/operators/CDXLColRef.h"
#include "naucrates/dxl/operators/CDXLCtasStorageOptions.h"
#include "naucrates/dxl/operators/CDXLIndexDescr.h"
#include "naucrates/dxl/operators/CDXLLogical.h"
#include "naucrates/dxl/operators/CDXLPhysical.h"
#include "naucrates/dxl/operators/CDXLPhysicalMotion.h"
#include "naucrates/dxl/operators/CDXLScalarBoolExpr.h"
#include "naucrates/dxl/operators/CDXLScalarBooleanTest.h"
#include "naucrates/dxl/operators/CDXLScalarSubPlan.h"
#include "naucrates/dxl/operators/CDXLScalarWindowFrameEdge.h"
#include "naucrates/dxl/operators/CDXLTableDescr.h"
#include "naucrates/dxl/operators/CDXLWindowFrame.h"
#include "naucrates/dxl/xml/CDXLMemoryManager.h"
#include "naucrates/dxl/xml/dxltokens.h"
#include "naucrates/md/CMDFunctionGPDB.h"
#include "naucrates/md/CMDRelationGPDB.h"
#include "naucrates/md/IMDId.h"
#include "naucrates/md/IMDIndex.h"
// dynamic array of XML strings
using XMLChArray = CDynamicPtrArray<XMLCh, CleanupNULL>;
// fwd decl
namespace gpmd
{
class CMDIdGPDB;
class CMDIdColStats;
class CMDIdRelStats;
class CMDIdCast;
class CMDIdScCmp;
} // namespace gpmd
namespace gpdxl
{
using namespace gpos;
using namespace gpmd;
using namespace gpnaucrates;
XERCES_CPP_NAMESPACE_USE
//fwd decl
class CDXLMemoryManager;
class CDXLDatum;
//---------------------------------------------------------------------------
// @class:
// CDXLOperatorFactory
//
// @doc:
// Factory class containing static methods for creating DXL objects
// from parsed DXL information such as XML element's attributes
//
//---------------------------------------------------------------------------
class CDXLOperatorFactory
{
private:
// return the LINT value of byte array
static LINT Value(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs, Edxltoken target_elem,
const BYTE *data);
// parses a byte array representation of the datum
static BYTE *GetByteArray(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs, Edxltoken target_elem,
ULONG *length);
public:
static CDXLDatum *GetDatumOid(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs,
Edxltoken target_elem, IMDId *mdid,
BOOL is_const_null);
static CDXLDatum *GetDatumInt2(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs,
Edxltoken target_elem, IMDId *mdid,
BOOL is_const_null);
static CDXLDatum *GetDatumInt4(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs,
Edxltoken target_elem, IMDId *mdid,
BOOL is_const_null);
static CDXLDatum *GetDatumInt8(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs,
Edxltoken target_elem, IMDId *mdid,
BOOL is_const_null);
static CDXLDatum *GetDatumBool(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs,
Edxltoken target_elem, IMDId *mdid,
BOOL is_const_null);
// parse a dxl datum of type generic
static CDXLDatum *GetDatumGeneric(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs,
Edxltoken target_elem, IMDId *mdid,
BOOL is_const_null);
// parse a dxl datum of types that need double mapping
static CDXLDatum *GetDatumStatsDoubleMappable(
CDXLMemoryManager *dxl_memory_manager, const Attributes &attrs,
Edxltoken target_elem, IMDId *mdid, BOOL is_const_null);
// parse a dxl datum of types that need lint mapping
static CDXLDatum *GetDatumStatsLintMappable(
CDXLMemoryManager *dxl_memory_manager, const Attributes &attrs,
Edxltoken target_elem, IMDId *mdid, BOOL is_const_null);
// create a table scan operator
static CDXLPhysical *MakeDXLTblScan(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create a subquery scan operator
static CDXLPhysical *MakeDXLSubqScan(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create a result operator
static CDXLPhysical *MakeDXLResult(CDXLMemoryManager *dxl_memory_manager);
// create a hashjoin operator
static CDXLPhysical *MakeDXLHashJoin(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create a nested loop join operator
static CDXLPhysical *MakeDXLNLJoin(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create a merge join operator
static CDXLPhysical *MakeDXLMergeJoin(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create a gather motion operator
static CDXLPhysical *MakeDXLGatherMotion(
CDXLMemoryManager *dxl_memory_manager, const Attributes &attrs);
// create a broadcast motion operator
static CDXLPhysical *MakeDXLBroadcastMotion(
CDXLMemoryManager *dxl_memory_manager, const Attributes &attrs);
// create a redistribute motion operator
static CDXLPhysical *MakeDXLRedistributeMotion(
CDXLMemoryManager *dxl_memory_manager, const Attributes &attrs);
// create a routed motion operator
static CDXLPhysical *MakeDXLRoutedMotion(
CDXLMemoryManager *dxl_memory_manager, const Attributes &attrs);
// create a random motion operator
static CDXLPhysical *MakeDXLRandomMotion(
CDXLMemoryManager *dxl_memory_manager, const Attributes &attrs);
// create an append operator
static CDXLPhysical *MakeDXLAppend(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create a limit operator
static CDXLPhysical *MakeDXLLimit(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create an aggregation operator
static CDXLPhysical *MakeDXLAgg(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create a sort operator
static CDXLPhysical *MakeDXLSort(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create a materialize operator
static CDXLPhysical *MakeDXLMaterialize(
CDXLMemoryManager *dxl_memory_manager, const Attributes &attrs);
// create a limit count operator
static CDXLScalar *MakeDXLLimitCount(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create a limit offset operator
static CDXLScalar *MakeDXLLimitOffset(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create a scalar comparison operator
static CDXLScalar *MakeDXLScalarCmp(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create a distinct comparison operator
static CDXLScalar *MakeDXLDistinctCmp(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create a scalar OpExpr
static CDXLScalar *MakeDXLOpExpr(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create a scalar ArrayComp
static CDXLScalar *MakeDXLArrayComp(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create a BoolExpr
static CDXLScalar *MakeDXLBoolExpr(CDXLMemoryManager *dxl_memory_manager,
const EdxlBoolExprType);
// create a boolean test
static CDXLScalar *MakeDXLBooleanTest(CDXLMemoryManager *dxl_memory_manager,
const EdxlBooleanTestType);
// create a subplan operator
static CDXLScalar *MakeDXLSubPlan(CDXLMemoryManager *dxl_memory_manager,
IMDId *mdid,
CDXLColRefArray *dxl_colref_array,
EdxlSubPlanType dxl_subplan_type,
CDXLNode *dxlnode_test_expr);
// create a NullTest
static CDXLScalar *MakeDXLNullTest(CDXLMemoryManager *dxl_memory_manager,
const BOOL);
// create a cast
static CDXLScalar *MakeDXLCast(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create a coerce
static CDXLScalar *MakeDXLCoerceToDomain(
CDXLMemoryManager *dxl_memory_manager, const Attributes &attrs);
// create a CoerceViaIo
static CDXLScalar *MakeDXLCoerceViaIO(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create a ArrayCoerceExpr
static CDXLScalar *MakeDXLArrayCoerceExpr(
CDXLMemoryManager *dxl_memory_manager, const Attributes &attrs);
// create a scalar identifier operator
static CDXLScalar *MakeDXLScalarIdent(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create a scalar Const
static CDXLScalar *MakeDXLConstValue(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create a CaseStmt
static CDXLScalar *MakeDXLIfStmt(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create a FuncExpr
static CDXLScalar *MakeDXLFuncExpr(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create a AggRef
static CDXLScalar *MakeDXLAggFunc(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create a scalar window function (WindowRef)
static CDXLScalar *MakeWindowRef(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create an array
static CDXLScalar *MakeDXLArray(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attr);
// create a proj elem
static CDXLScalar *MakeDXLProjElem(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create a hash expr
static CDXLScalar *MakeDXLHashExpr(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create a sort col
static CDXLScalar *MakeDXLSortCol(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create an object representing cost estimates of a physical operator
// from the parsed XML attributes
static CDXLOperatorCost *MakeDXLOperatorCost(
CDXLMemoryManager *dxl_memory_manager, const Attributes &attrs);
// create a table descriptor element
static CDXLTableDescr *MakeDXLTableDescr(
CDXLMemoryManager *dxl_memory_manager, const Attributes &attrs);
// create an index descriptor
static CDXLIndexDescr *MakeDXLIndexDescr(
CDXLMemoryManager *dxl_memory_manager, const Attributes &attrs);
// create a column descriptor object
static CDXLColDescr *MakeColumnDescr(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// create a column reference object
static CDXLColRef *MakeDXLColRef(CDXLMemoryManager *dxl_memory_manager,
const Attributes &, Edxltoken);
// create a logical join
static CDXLLogical *MakeLogicalJoin(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// parse an output segment index
static INT ParseOutputSegId(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// parse a grouping column id
static ULONG ParseGroupingColId(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs);
// extracts the value for the given attribute.
// if there is no such attribute defined, and the given optional
// flag is set to false then it will raise an exception
static const XMLCh *ExtractAttrValue(const Attributes &,
Edxltoken target_attr,
Edxltoken target_elem,
BOOL is_optional = false);
// extracts the boolean value for the given attribute
// will raise an exception if value cannot be converted to a boolean
static BOOL ConvertAttrValueToBool(CDXLMemoryManager *dxl_memory_manager,
const XMLCh *xml_val,
Edxltoken target_attr,
Edxltoken target_elem);
// converts the XMLCh into LINT
static LINT ConvertAttrValueToLint(CDXLMemoryManager *dxl_memory_manager,
const XMLCh *xml_val,
Edxltoken target_attr,
Edxltoken target_elem);
// extracts the LINT value for the given attribute
static LINT ExtractConvertAttrValueToLint(
CDXLMemoryManager *dxl_memory_manager, const Attributes &attr,
Edxltoken target_attr, Edxltoken target_elem, BOOL is_optional = false,
LINT default_value = 0);
// converts the XMLCh into CDouble
static CDouble ConvertAttrValueToDouble(
CDXLMemoryManager *dxl_memory_manager, const XMLCh *xml_val,
Edxltoken target_attr, Edxltoken target_elem);
// cxtracts the double value for the given attribute
static CDouble ExtractConvertAttrValueToDouble(
CDXLMemoryManager *dxl_memory_manager, const Attributes &attr,
Edxltoken target_attr, Edxltoken target_elem);
// converts the XMLCh into ULONG. Will raise an exception if the
// argument cannot be converted to ULONG
static ULONG ConvertAttrValueToUlong(CDXLMemoryManager *dxl_memory_manager,
const XMLCh *xml_val,
Edxltoken target_attr,
Edxltoken target_elem);
// converts the XMLCh into ULLONG. Will raise an exception if the
// argument cannot be converted to ULLONG
static ULLONG ConvertAttrValueToUllong(
CDXLMemoryManager *dxl_memory_manager, const XMLCh *xml_val,
Edxltoken target_attr, Edxltoken target_elem);
// converts the XMLCh into INT. Will raise an exception if the
// argument cannot be converted to INT
static INT ConvertAttrValueToInt(CDXLMemoryManager *dxl_memory_manager,
const XMLCh *xml_val,
Edxltoken target_attr,
Edxltoken target_elem);
// parse a INT value from the value for a given attribute
// will raise an exception if the argument cannot be converted to INT
static INT ExtractConvertAttrValueToInt(
CDXLMemoryManager *dxl_memory_manager, const Attributes &attr,
Edxltoken target_attr, Edxltoken target_elem, BOOL is_optional = false,
INT default_val = 0);
// converts the XMLCh into short int. Will raise an exception if the
// argument cannot be converted to short int
static SINT ConvertAttrValueToShortInt(
CDXLMemoryManager *dxl_memory_manager, const XMLCh *xml_val,
Edxltoken target_attr, Edxltoken target_elem);
// parse a short int value from the value for a given attribute
// will raise an exception if the argument cannot be converted to short int
static SINT ExtractConvertAttrValueToShortInt(
CDXLMemoryManager *dxl_memory_manager, const Attributes &attr,
Edxltoken target_attr, Edxltoken target_elem, BOOL is_optional = false,
SINT default_val = 0);
// converts the XMLCh into char. Will raise an exception if the
// argument cannot be converted to char
static CHAR ConvertAttrValueToChar(CDXLMemoryManager *dxl_memory_manager,
const XMLCh *xml_val,
Edxltoken target_attr,
Edxltoken target_elem);
// converts the XMLCh into oid. Will raise an exception if the
// argument cannot be converted to OID
static OID ConvertAttrValueToOid(CDXLMemoryManager *dxl_memory_manager,
const XMLCh *xml_val,
Edxltoken target_attr,
Edxltoken target_elem);
// parse an oid value from the value for a given attribute
// will raise an exception if the argument cannot be converted to OID
static OID ExtractConvertAttrValueToOid(
CDXLMemoryManager *dxl_memory_manager, const Attributes &attr,
Edxltoken target_attr, Edxltoken target_elem, BOOL is_optional = false,
OID OidDefaultValue = 0);
// parse a bool value from the value for a given attribute
static BOOL ExtractConvertAttrValueToBool(
CDXLMemoryManager *dxl_memory_manager, const Attributes &attr,
Edxltoken target_attr, Edxltoken target_elem, BOOL is_optional = false,
BOOL default_value = false);
// parse a string value from the value for a given attribute
static CHAR *ExtractConvertAttrValueToSz(
CDXLMemoryManager *dxl_memory_manager, const Attributes &attr,
Edxltoken target_attr, Edxltoken target_elem, BOOL is_optional = false,
CHAR *default_value = nullptr);
// parse a string value from the value for a given attribute
static CHAR *ConvertAttrValueToSz(CDXLMemoryManager *dxl_memory_manager,
const XMLCh *xml_val,
Edxltoken target_attr,
Edxltoken target_elem);
// parse a string value from the value for a given attribute
static CWStringDynamic *ExtractConvertAttrValueToStr(
CDXLMemoryManager *dxl_memory_manager, const Attributes &attr,
Edxltoken target_attr, Edxltoken target_elem);
// parse a ULONG value from the value for a given attribute
// will raise an exception if the argument cannot be converted to ULONG
static ULONG ExtractConvertAttrValueToUlong(
CDXLMemoryManager *dxl_memory_manager, const Attributes &attr,
Edxltoken target_attr, Edxltoken target_elem, BOOL is_optional = false,
ULONG default_value = 0);
// parse a ULLONG value from the value for a given attribute
// will raise an exception if the argument cannot be converted to ULLONG
static ULLONG ExtractConvertAttrValueToUllong(
CDXLMemoryManager *dxl_memory_manager, const Attributes &attr,
Edxltoken target_attr, Edxltoken target_elem, BOOL is_optional = false,
ULLONG default_value = 0);
// parse an mdid object from the given attributes
static IMDId *ExtractConvertAttrValueToMdId(
CDXLMemoryManager *dxl_memory_manager, const Attributes &attr,
Edxltoken target_attr, Edxltoken target_elem, BOOL is_optional = false,
IMDId *default_val = nullptr);
// parse an mdid object from an XMLCh
static IMDId *MakeMdIdFromStr(CDXLMemoryManager *dxl_memory_manager,
const XMLCh *mdid_xml, Edxltoken target_attr,
Edxltoken target_elem);
// parse a GPDB mdid object from an array of its components
static CMDIdGPDB *GetGPDBMdId(CDXLMemoryManager *dxl_memory_manager,
XMLChArray *remaining_tokens,
Edxltoken target_attr, Edxltoken target_elem);
// parse a GPDB CTAS mdid object from an array of its components
static CMDIdGPDB *GetGPDBCTASMdId(CDXLMemoryManager *dxl_memory_manager,
XMLChArray *remaining_tokens,
Edxltoken target_attr,
Edxltoken target_elem);
// parse a column stats mdid object from an array of its components
static CMDIdColStats *GetColStatsMdId(CDXLMemoryManager *dxl_memory_manager,
XMLChArray *remaining_tokens,
Edxltoken target_attr,
Edxltoken target_elem);
// parse a relation stats mdid object from an array of its components
static CMDIdRelStats *GetRelStatsMdId(CDXLMemoryManager *dxl_memory_manager,
XMLChArray *remaining_tokens,
Edxltoken target_attr,
Edxltoken target_elem);
// parse a cast func mdid from the array of its components
static CMDIdCast *GetCastFuncMdId(CDXLMemoryManager *dxl_memory_manager,
XMLChArray *remaining_tokens,
Edxltoken target_attr,
Edxltoken target_elem);
// parse a comparison operator mdid from the array of its components
static CMDIdScCmp *GetScCmpMdId(CDXLMemoryManager *dxl_memory_manager,
XMLChArray *remaining_tokens,
Edxltoken target_attr,
Edxltoken target_elem);
// parse a dxl datum object
static CDXLDatum *GetDatumVal(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs,
Edxltoken target_elem);
// parse a comma-separated list of MDids into a dynamic array
// will raise an exception if list is not well-formed
static IMdIdArray *ExtractConvertMdIdsToArray(
CDXLMemoryManager *dxl_memory_manager, const XMLCh *mdid_list_xml,
Edxltoken target_attr, Edxltoken target_elem);
// parse a comma-separated list of unsigned long numbers into a dynamic array
// will raise an exception if list is not well-formed
static ULongPtrArray *ExtractConvertValuesToArray(
CDXLMemoryManager *dxl_memory_manager, const Attributes &attr,
Edxltoken target_attr, Edxltoken target_elem);
// parse a comma-separated list of integers numbers into a dynamic array
// will raise an exception if list is not well-formed
template <typename T, void (*CleanupFn)(T *),
T ValueFromXmlstr(CDXLMemoryManager *, const XMLCh *, Edxltoken,
Edxltoken)>
static CDynamicPtrArray<T, CleanupFn> *ExtractIntsToArray(
CDXLMemoryManager *dxl_memory_manager, const XMLCh *xmlszUl,
Edxltoken target_attr, Edxltoken target_elem);
static ULongPtrArray *
ExtractIntsToUlongArray(CDXLMemoryManager *dxl_memory_manager,
const XMLCh *xmlszUl, Edxltoken target_attr,
Edxltoken target_elem)
{
return ExtractIntsToArray<ULONG, CleanupDelete,
ConvertAttrValueToUlong>(
dxl_memory_manager, xmlszUl, target_attr, target_elem);
}
static IntPtrArray *
ExtractIntsToIntArray(CDXLMemoryManager *dxl_memory_manager,
const XMLCh *xmlszUl, Edxltoken target_attr,
Edxltoken target_elem)
{
return ExtractIntsToArray<INT, CleanupDelete, ConvertAttrValueToInt>(
dxl_memory_manager, xmlszUl, target_attr, target_elem);
}
// parse a comma-separated list of CHAR partition types into a dynamic array.
// will raise an exception if list is not well-formed
static CharPtrArray *ExtractConvertPartitionTypeToArray(
CDXLMemoryManager *dxl_memory_manager, const XMLCh *xml_val,
Edxltoken target_attr, Edxltoken target_elem);
// parse a semicolon-separated list of comma-separated unsigned
// long numbers into a dynamc array of unsigned integer arrays
// will raise an exception if list is not well-formed
static ULongPtr2dArray *ExtractConvertUlongTo2DArray(
CDXLMemoryManager *dxl_memory_manager, const XMLCh *xml_val,
Edxltoken target_attr, Edxltoken target_elem);
// parse a comma-separated list of segment ids into a dynamic array
// will raise an exception if list is not well-formed
static IntPtrArray *ExtractConvertSegmentIdsToArray(
CDXLMemoryManager *dxl_memory_manager, const XMLCh *seg_id_list_xml,
Edxltoken target_attr, Edxltoken target_elem);
// parse a comma-separated list of strings into a dynamic array
// will raise an exception if list is not well-formed
static StringPtrArray *ExtractConvertStrsToArray(
CDXLMemoryManager *dxl_memory_manager, const XMLCh *xml_val);
// parses the input and output segment ids from Xerces attributes and
// stores them in the provided DXL Motion operator
// will raise an exception if lists are not well-formed
static void SetSegmentInfo(CDXLMemoryManager *mp,
CDXLPhysicalMotion *motion,
const Attributes &attrs, Edxltoken target_elem);
static EdxlJoinType ParseJoinType(const XMLCh *xmlszJoinType,
const CWStringConst *join_name);
static EdxlIndexScanDirection ParseIndexScanDirection(
const XMLCh *direction_xml,
const CWStringConst *pstrIndexScanDirection);
// parse system id
static CSystemId Sysid(CDXLMemoryManager *dxl_memory_manager,
const Attributes &attrs, Edxltoken target_attr,
Edxltoken target_elem);
// parse the frame boundary
static EdxlFrameBoundary ParseDXLFrameBoundary(const Attributes &attrs,
Edxltoken token_type);
// parse the frame specification
static EdxlFrameSpec ParseDXLFrameSpec(const Attributes &attrs);
// parse the frame exclusion strategy
static EdxlFrameExclusionStrategy ParseFrameExclusionStrategy(
const Attributes &attrs);
// parse comparison operator type
static IMDType::ECmpType ParseCmpType(const XMLCh *xml_str_comp_type);
// parse the distribution policy from the given XML string
static IMDRelation::Ereldistrpolicy ParseRelationDistPolicy(
const XMLCh *xml_val);
// parse the storage type from the given XML string
static IMDRelation::Erelstoragetype ParseRelationStorageType(
const XMLCh *xml_val);
// parse the OnCommit action spec for CTAS
static CDXLCtasStorageOptions::ECtasOnCommitAction ParseOnCommitActionSpec(
const Attributes &attr);
// parse index type
static IMDIndex::EmdindexType ParseIndexType(const Attributes &attrs);
};
// parse a comma-separated list of integers numbers into a dynamic array
// will raise an exception if list is not well-formed
template <typename T, void (*CleanupFn)(T *),
T ValueFromXmlstr(CDXLMemoryManager *, const XMLCh *, Edxltoken,
Edxltoken)>
CDynamicPtrArray<T, CleanupFn> *
CDXLOperatorFactory::ExtractIntsToArray(CDXLMemoryManager *dxl_memory_manager,
const XMLCh *mdid_list_xml,
Edxltoken target_attr,
Edxltoken target_elem)
{
// get the memory pool from the memory manager
CMemoryPool *mp = dxl_memory_manager->Pmp();
CDynamicPtrArray<T, CleanupFn> *pdrgpt =
GPOS_NEW(mp) CDynamicPtrArray<T, CleanupFn>(mp);
XMLStringTokenizer mdid_components(mdid_list_xml,
CDXLTokens::XmlstrToken(EdxltokenComma));
const ULONG num_tokens = mdid_components.countTokens();
for (ULONG ul = 0; ul < num_tokens; ul++)
{
XMLCh *xmlszNext = mdid_components.nextToken();
GPOS_ASSERT(nullptr != xmlszNext);
T *pt = GPOS_NEW(mp) T(ValueFromXmlstr(dxl_memory_manager, xmlszNext,
target_attr, target_elem));
pdrgpt->Append(pt);
}
return pdrgpt;
}
} // namespace gpdxl
#endif // !GPDXL_CDXLOperatorFactory_H
// EOF
相关信息
相关文章
greenplumn CDXLCtasStorageOptions 源码
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
7、 golang
-
9、 openharmony