greenplumn CPartPruneStepsBuilder 源码

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

greenplumn CPartPruneStepsBuilder 代码

文件路径:/src/include/gpopt/translate/CPartPruneStepsBuilder.h

//---------------------------------------------------------------------------
//	Greenplum Database
//	Copyright (C) 2011 Greenplum, Inc.
//
//	@filename:
//		CPartPruneStepsBuilder.h
//
//	@doc:
//		Utility class to construct PartPruneInfos with appropriate
// 		PartPruningSteps from partitioning filter expressions
//---------------------------------------------------------------------------

#ifndef GPDXL_CPartPruneStepsBuilder_H
#define GPDXL_CPartPruneStepsBuilder_H

#include "gpos/base.h"

#include "gpopt/translate/CMappingColIdVarPlStmt.h"
#include "gpopt/translate/CTranslatorDXLToScalar.h"
#include "naucrates/dxl/operators/CDXLNode.h"

using namespace gpos;

namespace gpdxl
{
class CPartPruneStepsBuilder
{
private:
	// root partitioned tabled
	Relation m_relation;

	// index in the rtable
	Index m_rtindex;

	// list of pruned scan nodes denoted as an index of the relation's partition_mdids
	ULongPtrArray *m_part_indexes;

	// colid -> var mapping from the subtree
	CMappingColIdVarPlStmt *m_colid_var_mapping;

	// dxl -> scalar translator
	CTranslatorDXLToScalar *m_translator_dxl_to_scalar;

	// ctor
	CPartPruneStepsBuilder(Relation relation, Index rtindex,
						   ULongPtrArray *part_indexes,
						   CMappingColIdVarPlStmt *colid_var_mapping,
						   CTranslatorDXLToScalar *translator_dxl_to_scalar);

	CPartPruneStepsBuilder(const CPartPruneStepsBuilder &) = default;

public:
	// dtor
	~CPartPruneStepsBuilder() = default;

	static List *CreatePartPruneInfos(
		CDXLNode *filterNode, Relation relation, Index rtindex,
		ULongPtrArray *part_indexes, CMappingColIdVarPlStmt *colid_var_mapping,
		CTranslatorDXLToScalar *translator_dxl_to_scalar);

	PartitionedRelPruneInfo *CreatePartPruneInfoForOneLevel(
		CDXLNode *filterNode);

	List *PartPruneStepsFromFilter(CDXLNode *filterNode, INT *step_id,
								   List *steps_list);

	List *PartPruneStepFromScalarCmp(CDXLNode *node, INT *step_id,
									 List *steps_list);

	List *PartPruneStepFromScalarBoolExpr(CDXLNode *node, INT *step_id,
										  List *steps_list);
};
}  // namespace gpdxl

#endif	// !GPDXL_CPartPruneStepsBuilder_H

//EOF

相关信息

greenplumn 源码目录

相关文章

greenplumn CCTEListEntry 源码

greenplumn CContextDXLToPlStmt 源码

greenplumn CContextQueryToDXL 源码

greenplumn CDXLTranslateContext 源码

greenplumn CDXLTranslateContextBaseTable 源码

greenplumn CGPDBAttInfo 源码

greenplumn CGPDBAttOptCol 源码

greenplumn CIndexQualInfo 源码

greenplumn CMappingColIdVar 源码

greenplumn CMappingColIdVarPlStmt 源码

0  赞