greenplumn CDXLPhysicalMotion 源码

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

greenplumn CDXLPhysicalMotion 代码

文件路径:/src/backend/gporca/libnaucrates/include/naucrates/dxl/operators/CDXLPhysicalMotion.h

//---------------------------------------------------------------------------
//	Greenplum Database
//	Copyright (C) 2010 Greenplum, Inc.
//
//	@filename:
//		CDXLPhysicalMotion.h
//
//	@doc:
//		Base class for representing DXL motion operators.
//---------------------------------------------------------------------------



#ifndef GPDXL_CDXLPhysicalMotion_H
#define GPDXL_CDXLPhysicalMotion_H

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

#include "naucrates/dxl/operators/CDXLNode.h"
#include "naucrates/dxl/operators/CDXLPhysical.h"

namespace gpdxl
{
using namespace gpos;

//---------------------------------------------------------------------------
//	@class:
//		CDXLPhysicalMotion
//
//	@doc:
//		Base class for representing DXL motion operators
//
//---------------------------------------------------------------------------
class CDXLPhysicalMotion : public CDXLPhysical
{
private:
	// serialize the given list of segment ids into a comma-separated string
	CWStringDynamic *GetSegIdsCommaSeparatedStr(
		const IntPtrArray *segment_ids_array) const;

	// serialize input and output segment ids into a comma-separated string
	CWStringDynamic *GetInputSegIdsStr() const;
	CWStringDynamic *GetOutputSegIdsStr() const;

protected:
	// list of input segment ids
	IntPtrArray *m_input_segids_array;

	// list of output segment ids
	IntPtrArray *m_output_segids_array;

	void SerializeSegmentInfoToDXL(CXMLSerializer *xml_serializer) const;


public:
	CDXLPhysicalMotion(CDXLPhysicalMotion &) = delete;

	// ctor/dtor
	explicit CDXLPhysicalMotion(CMemoryPool *mp);

	~CDXLPhysicalMotion() override;

	// accessors
	const IntPtrArray *GetInputSegIdsArray() const;
	const IntPtrArray *GetOutputSegIdsArray() const;

	// setters
	void SetInputSegIds(IntPtrArray *input_segids_array);
	void SetOutputSegIds(IntPtrArray *output_segids_array);
	void SetSegmentInfo(IntPtrArray *input_segids_array,
						IntPtrArray *output_segids_array);

	// index of relational child node in the children array
	virtual ULONG GetRelationChildIdx() const = 0;

	// conversion function
	static CDXLPhysicalMotion *
	Cast(CDXLOperator *dxl_op)
	{
		GPOS_ASSERT(nullptr != dxl_op);
		GPOS_ASSERT(
			EdxlopPhysicalMotionGather == dxl_op->GetDXLOperator() ||
			EdxlopPhysicalMotionBroadcast == dxl_op->GetDXLOperator() ||
			EdxlopPhysicalMotionRedistribute == dxl_op->GetDXLOperator() ||
			EdxlopPhysicalMotionRoutedDistribute == dxl_op->GetDXLOperator() ||
			EdxlopPhysicalMotionRandom == dxl_op->GetDXLOperator());

		return dynamic_cast<CDXLPhysicalMotion *>(dxl_op);
	}
};
}  // namespace gpdxl
#endif	// !GPDXL_CDXLPhysicalMotion_H

// EOF

相关信息

greenplumn 源码目录

相关文章

greenplumn CDXLColDescr 源码

greenplumn CDXLColRef 源码

greenplumn CDXLCtasStorageOptions 源码

greenplumn CDXLDatum 源码

greenplumn CDXLDatumBool 源码

greenplumn CDXLDatumGeneric 源码

greenplumn CDXLDatumInt2 源码

greenplumn CDXLDatumInt4 源码

greenplumn CDXLDatumInt8 源码

greenplumn CDXLDatumOid 源码

0  赞