greenplumn aocssegfiles 源码
greenplumn aocssegfiles 代码
文件路径:/src/include/access/aocssegfiles.h
/*-------------------------------------------------------------------------
*
* aocssegfiles.h
* AOCS segment files
*
* Portions Copyright (c) 2009, Greenplum INC.
* Portions Copyright (c) 2012-Present VMware, Inc. or its affiliates.
*
*
* IDENTIFICATION
* src/include/access/aocssegfiles.h
*
*-------------------------------------------------------------------------
*/
#ifndef AOCS_SEGFILES_H
#define AOCS_SEGFILES_H
#include "access/appendonly_visimap.h"
#include "access/aosegfiles.h"
#include "utils/snapshot.h"
#define Natts_pg_aocsseg 7
#define Anum_pg_aocs_segno 1
#define Anum_pg_aocs_tupcount 2
#define Anum_pg_aocs_varblockcount 3
#define Anum_pg_aocs_vpinfo 4
#define Anum_pg_aocs_modcount 5
#define Anum_pg_aocs_formatversion 6
#define Anum_pg_aocs_state 7
typedef struct AOCSVPInfoEntry
{
int64 eof;
int64 eof_uncompressed;
} AOCSVPInfoEntry;
typedef struct AOCSVPInfo
{
/* total len. Have to be the very first */
int32 _len;
int32 version;
int32 nEntry;
/* Var len array */
AOCSVPInfoEntry entry[1];
} AOCSVPInfo;
static inline int
aocs_vpinfo_size(int nvp)
{
return offsetof(AOCSVPInfo, entry) +
sizeof(AOCSVPInfoEntry) * nvp;
}
static inline AOCSVPInfo *
create_aocs_vpinfo(int nvp)
{
AOCSVPInfo *vpinfo = (AOCSVPInfo *) palloc0(aocs_vpinfo_size(nvp));
SET_VARSIZE(vpinfo, aocs_vpinfo_size(nvp));
vpinfo->nEntry = nvp;
return vpinfo;
}
/*
* Descriptor of a single AO Col relation file segment.
*
* Note that the first three variables should be the same as
* the AO Row relation file segment (see FileSegInfo). This is
* implicitly used by the block directory to obtain those info
* using the same structure -- FileSegInfo.
*/
typedef struct AOCSFileSegInfo
{
int32 segno;
/*
* total number of tuples in the segment. This number includes invisible
* tuples
*/
int64 total_tupcount;
int64 varblockcount;
/*
* Number of data modification operations
*/
int64 modcount;
/*
* state of the segno. The state is only maintained on the segments.
*/
FileSegInfoState state;
int16 formatversion;
/* Must be last */
AOCSVPInfo vpinfo;
} AOCSFileSegInfo;
static inline int
aocsfileseginfo_size(int nvp)
{
return offsetof(AOCSFileSegInfo, vpinfo) +
aocs_vpinfo_size(nvp);
}
static inline AOCSVPInfoEntry *
getAOCSVPEntry(AOCSFileSegInfo *psinfo, int vp)
{
if (vp >= psinfo->vpinfo.nEntry)
elog(ERROR, "Index %d exceed size of vpinfo array size %d",
vp, psinfo->vpinfo.nEntry);
return &(psinfo->vpinfo.entry[vp]);
}
struct AOCSInsertDescData;
struct AOCSAddColumnDescData;
/*
* GetAOCSFileSegInfo.
*
* Get the catalog entry for an appendonly (column-oriented) relation from the
* pg_aocsseg_* relation that belongs to the currently used
* AppendOnly table.
*
* If a caller intends to append to this (logical) file segment entry they must
* already hold a relation Append-Only segment file (transaction-scope) lock (tag
* LOCKTAG_RELATION_APPENDONLY_SEGMENT_FILE) in order to guarantee
* stability of the pg_aoseg information on this segment file and exclusive right
* to append data to the segment file.
*/
extern AOCSFileSegInfo *GetAOCSFileSegInfo(Relation prel,
Snapshot appendOnlyMetaDataSnapshot,
int32 segno, bool locked);
extern AOCSFileSegInfo **GetAllAOCSFileSegInfo(Relation prel,
Snapshot appendOnlyMetaDataSnapshot,
int *totalseg,
Oid *segrelidptr);
extern void FreeAllAOCSSegFileInfo(AOCSFileSegInfo **allAOCSSegInfo, int totalSegFiles);
extern FileSegTotals *GetAOCSSSegFilesTotals(Relation parentrel,
Snapshot appendOnlyMetaDataSnapshot);
extern void InsertInitialAOCSFileSegInfo(Relation prel, int32 segno, int32 nvp, Oid segrelid);
extern void UpdateAOCSFileSegInfo(struct AOCSInsertDescData *desc);
extern void AOCSFileSegInfoAddVpe(
Relation prel, int32 segno,
struct AOCSAddColumnDescData *desc, int num_newcols, bool empty);
extern void AOCSFileSegInfoAddCount(Relation prel, int32 segno, int64 tupadded, int64 varblockadded, int64 modcount_added);
extern void ClearAOCSFileSegInfo(Relation prel, int segno);
extern void MarkAOCSFileSegInfoAwaitingDrop(Relation parentrel, int segno);
extern float8 aocol_compression_ratio_internal(Relation parentrel);
#endif
相关信息
相关文章
greenplumn appendonly_compaction 源码
greenplumn appendonly_visimap 源码
greenplumn appendonly_visimap_entry 源码
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦