greenplumn CMappingVarColId 源码
greenplumn CMappingVarColId 代码
文件路径:/src/include/gpopt/translate/CMappingVarColId.h
//---------------------------------------------------------------------------
// Greenplum Database
// Copyright (C) 2011 Greenplum, Inc.
//
// @filename:
// CMappingVarColId.h
//
// @doc:
// Abstract base class of VAR to DXL mapping during scalar operator translation.
// If we need a scalar translator during PlStmt->DXL or Query->DXL translation
// we implement a variable mapping for PlStmt or Query respectively that
// is derived from this interface.
//
// @test:
//
//
//---------------------------------------------------------------------------
#ifndef GPDXL_CMappingVarColId_H
#define GPDXL_CMappingVarColId_H
#include "gpos/common/CHashMap.h"
#include "gpos/common/CHashMapIter.h"
#include "gpopt/translate/CGPDBAttInfo.h"
#include "gpopt/translate/CGPDBAttOptCol.h"
#include "naucrates/dxl/CIdGenerator.h"
#include "naucrates/dxl/operators/CDXLNode.h"
#include "naucrates/dxl/operators/CDXLTableDescr.h"
#include "naucrates/md/IMDIndex.h"
//fwd decl
struct Var;
struct List;
namespace gpmd
{
class IMDIndex;
}
namespace gpdxl
{
// physical operator types used in planned statements
enum EPlStmtPhysicalOpType
{
EpspotTblScan,
EpspotHashjoin,
EpspotNLJoin,
EpspotMergeJoin,
EpspotMotion,
EpspotLimit,
EpspotAgg,
EpspotWindow,
EpspotSort,
EpspotSubqueryScan,
EpspotAppend,
EpspotResult,
EpspotMaterialize,
EpspotSharedScan,
EpspotIndexScan,
EpspotIndexOnlyScan,
EpspotNone
};
//---------------------------------------------------------------------------
// @class:
// CMappingVarColId
//
// @doc:
// Class providing the interface for VAR to DXL mapping during scalar
// operator translation that are used to generate the CDXLNode from a
// variable reference in a PlStmt or Query
//
//---------------------------------------------------------------------------
class CMappingVarColId
{
private:
// memory pool
CMemoryPool *m_mp;
// hash map structure to store gpdb att -> opt col information
using GPDBAttOptColHashMap =
CHashMap<CGPDBAttInfo, CGPDBAttOptCol, HashGPDBAttInfo,
EqualGPDBAttInfo, CleanupRelease, CleanupRelease>;
// iterator
using GPDBAttOptColHashMapIter =
CHashMapIter<CGPDBAttInfo, CGPDBAttOptCol, HashGPDBAttInfo,
EqualGPDBAttInfo, CleanupRelease, CleanupRelease>;
// map from gpdb att to optimizer col
GPDBAttOptColHashMap *m_gpdb_att_opt_col_mapping;
// insert mapping entry
void Insert(ULONG, ULONG, INT, ULONG, CWStringBase *str);
// helper function to access mapping
const CGPDBAttOptCol *GetGPDBAttOptColMapping(
ULONG current_query_level, const Var *var,
EPlStmtPhysicalOpType plstmt_physical_op_type) const;
public:
CMappingVarColId(const CMappingVarColId &) = delete;
// ctor
explicit CMappingVarColId(CMemoryPool *);
// dtor
virtual ~CMappingVarColId()
{
m_gpdb_att_opt_col_mapping->Release();
}
// given a gpdb attribute, return a column name in optimizer world
virtual const CWStringBase *GetOptColName(
ULONG current_query_level, const Var *var,
EPlStmtPhysicalOpType plstmt_physical_op_type) const;
// given a gpdb attribute, return column id
virtual ULONG GetColId(ULONG current_query_level, const Var *var,
EPlStmtPhysicalOpType plstmt_physical_op_type) const;
// load up mapping information from an index
void LoadIndexColumns(ULONG query_level, ULONG RTE_index,
const gpmd::IMDIndex *index,
const gpdxl::CDXLTableDescr *table_descr);
// load up mapping information from table descriptor
void LoadTblColumns(ULONG query_level, ULONG RTE_index,
const gpdxl::CDXLTableDescr *table_descr);
// load up column id mapping information from the array of column descriptors
void LoadColumns(ULONG query_level, ULONG RTE_index,
const CDXLColDescrArray *column_descrs);
// load up mapping information from derived table columns
void LoadDerivedTblColumns(ULONG query_level, ULONG RTE_index,
const gpdxl::CDXLNodeArray *derived_columns_dxl,
List *target_list);
// load information from CTE columns
void LoadCTEColumns(ULONG query_level, ULONG RTE_index,
const ULongPtrArray *pdrgpulCTE, List *target_list);
// load up mapping information from scalar projection list
void LoadProjectElements(ULONG query_level, ULONG RTE_index,
const CDXLNode *project_list_dxlnode);
// load up mapping information from list of column names
void Load(ULONG query_level, ULONG RTE_index, CIdGenerator *id_generator,
List *col_names);
// create a deep copy
CMappingVarColId *CopyMapColId(CMemoryPool *mp) const;
// create a deep copy
CMappingVarColId *CopyMapColId(ULONG query_level) const;
// create a copy of the mapping replacing old col ids with new ones
CMappingVarColId *CopyRemapColId(CMemoryPool *mp, ULongPtrArray *old_colids,
ULongPtrArray *new_colids) const;
};
} // namespace gpdxl
#endif //GPDXL_CMappingVarColId_H
// EOF
相关信息
相关文章
greenplumn CContextDXLToPlStmt 源码
greenplumn CContextQueryToDXL 源码
greenplumn CDXLTranslateContext 源码
greenplumn CDXLTranslateContextBaseTable 源码
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦