greenplumn IMDRelation 源码
greenplumn IMDRelation 代码
文件路径:/src/backend/gporca/libnaucrates/include/naucrates/md/IMDRelation.h
//---------------------------------------------------------------------------
// Greenplum Database
// Copyright (C) 2011 Greenplum, Inc.
//
// @filename:
// IMDRelation.h
//
// @doc:
// Interface for relations in the metadata cache
//---------------------------------------------------------------------------
#ifndef GPMD_IMDRelation_H
#define GPMD_IMDRelation_H
#include "gpos/base.h"
#include "naucrates/md/CMDIndexInfo.h"
#include "naucrates/md/IMDCacheObject.h"
#include "naucrates/md/IMDColumn.h"
#include "naucrates/md/IMDPartConstraint.h"
#include "naucrates/statistics/IStatistics.h"
namespace gpdxl
{
//fwd declaration
class CXMLSerializer;
} // namespace gpdxl
namespace gpmd
{
using namespace gpos;
//---------------------------------------------------------------------------
// @class:
// IMDRelation
//
// @doc:
// Interface for relations in the metadata cache
//
//---------------------------------------------------------------------------
class IMDRelation : public IMDCacheObject
{
public:
//-------------------------------------------------------------------
// @doc:
// Storage type of a relation
//-------------------------------------------------------------------
enum Erelstoragetype
{
ErelstorageHeap,
ErelstorageAppendOnlyCols,
ErelstorageAppendOnlyRows,
ErelstorageExternal,
ErelstorageMixedPartitioned,
ErelstorageCompositeType,
ErelstorageSentinel
};
//-------------------------------------------------------------------
// @doc:
// Distribution policy of a relation
//-------------------------------------------------------------------
enum Ereldistrpolicy
{
EreldistrMasterOnly,
EreldistrHash,
EreldistrRandom,
EreldistrReplicated,
EreldistrSentinel
};
// Partition type of a partitioned relation
enum Erelpartitiontype
{
ErelpartitionRange = 'r',
ErelpartitionList = 'l'
};
protected:
// serialize an array of column ids into a comma-separated string
static CWStringDynamic *ColumnsToStr(CMemoryPool *mp,
ULongPtrArray *colid_array);
public:
// object type
Emdtype
MDType() const override
{
return EmdtRel;
}
// is this a temp relation
virtual BOOL IsTemporary() const = 0;
// storage type (heap, appendonly, ...)
virtual Erelstoragetype RetrieveRelStorageType() const = 0;
// distribution policy (none, hash, random)
virtual Ereldistrpolicy GetRelDistribution() const = 0;
// number of columns
virtual ULONG ColumnCount() const = 0;
// width of a column with regards to the position
virtual DOUBLE ColWidth(ULONG pos) const = 0;
// does relation have dropped columns
virtual BOOL HasDroppedColumns() const = 0;
// number of non-dropped columns
virtual ULONG NonDroppedColsCount() const = 0;
// return the position of the given attribute position excluding dropped columns
virtual ULONG NonDroppedColAt(ULONG pos) const = 0;
// return the position of a column in the metadata object given the attribute number in the system catalog
virtual ULONG GetPosFromAttno(INT attno) const = 0;
// return the original positions of all the non-dropped columns
virtual ULongPtrArray *NonDroppedColsArray() const = 0;
// number of system columns
virtual ULONG SystemColumnsCount() const = 0;
// retrieve the column at the given position
virtual const IMDColumn *GetMdCol(ULONG pos) const = 0;
// number of key sets
virtual ULONG KeySetCount() const = 0;
// key set at given position
virtual const ULongPtrArray *KeySetAt(ULONG pos) const = 0;
// number of distribution columns
virtual ULONG DistrColumnCount() const = 0;
// retrieve the column at the given position in the distribution key for the relation
virtual const IMDColumn *GetDistrColAt(ULONG pos) const = 0;
virtual IMDId *GetDistrOpfamilyAt(ULONG pos) const = 0;
// return true if a hash distributed table needs to be considered as random
virtual BOOL ConvertHashToRandom() const = 0;
// is this a partitioned table
virtual BOOL IsPartitioned() const = 0;
// number of partition columns
virtual ULONG PartColumnCount() const = 0;
// number of partitions
virtual ULONG PartitionCount() const = 0;
// retrieve the partition column at the given position
virtual const IMDColumn *PartColAt(ULONG pos) const = 0;
// retrieve list of partition types
virtual CharPtrArray *GetPartitionTypes() const = 0;
// retrieve the partition type of the given partition level
virtual CHAR PartTypeAtLevel(ULONG pos) const = 0;
// number of indices
virtual ULONG IndexCount() const = 0;
// number of triggers
virtual ULONG TriggerCount() const = 0;
// retrieve the id of the metadata cache index at the given position
virtual IMDId *IndexMDidAt(ULONG pos) const = 0;
// retrieve the id of the metadata cache trigger at the given position
virtual IMDId *TriggerMDidAt(ULONG pos) const = 0;
// number of check constraints
virtual ULONG CheckConstraintCount() const = 0;
// retrieve the id of the check constraint cache at the given position
virtual IMDId *CheckConstraintMDidAt(ULONG pos) const = 0;
// part constraint
virtual CDXLNode *MDPartConstraint() const = 0;
// child partition oids
virtual IMdIdArray *
ChildPartitionMdids() const
{
return nullptr;
}
// relation distribution policy as a string value
static const CWStringConst *GetDistrPolicyStr(
Ereldistrpolicy rel_distr_policy);
// name of storage type
static const CWStringConst *GetStorageTypeStr(
IMDRelation::Erelstoragetype rel_storage_type);
BOOL
IsAORowOrColTable() const
{
Erelstoragetype st = RetrieveRelStorageType();
return st == ErelstorageAppendOnlyCols ||
st == ErelstorageAppendOnlyRows;
}
};
// common structure over relation and external relation metadata for index info
using CMDIndexInfoArray = CDynamicPtrArray<CMDIndexInfo, CleanupRelease>;
} // namespace gpmd
#endif // !GPMD_IMDRelation_H
// EOF
相关信息
相关文章
greenplumn CDXLStatsDerivedColumn 源码
greenplumn CDXLStatsDerivedRelation 源码
greenplumn CMDAggregateGPDB 源码
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
7、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦