mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-01 07:01:19 +02:00
1bb5e78218
This is similar in spirit to the existing partbounds.c file in the same directory, except that there's a lot less code in the new file created by this commit. Pending work in this area proposes to add a bunch more code related to PartitionDescs, though, and this will give us a good place to put it. Discussion: http://postgr.es/m/CA+TgmoZUwPf_uanjF==gTGBMJrn8uCq52XYvAEorNkLrUdoawg@mail.gmail.com
102 lines
2.3 KiB
C
102 lines
2.3 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* partcache.h
|
|
*
|
|
* Copyright (c) 1996-2019, PostgreSQL Global Development Group
|
|
*
|
|
* src/include/utils/partcache.h
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef PARTCACHE_H
|
|
#define PARTCACHE_H
|
|
|
|
#include "access/attnum.h"
|
|
#include "fmgr.h"
|
|
#include "nodes/pg_list.h"
|
|
#include "nodes/primnodes.h"
|
|
#include "partitioning/partdefs.h"
|
|
#include "utils/relcache.h"
|
|
|
|
/*
|
|
* Information about the partition key of a relation
|
|
*/
|
|
typedef struct PartitionKeyData
|
|
{
|
|
char strategy; /* partitioning strategy */
|
|
int16 partnatts; /* number of columns in the partition key */
|
|
AttrNumber *partattrs; /* attribute numbers of columns in the
|
|
* partition key or 0 if it's an expr */
|
|
List *partexprs; /* list of expressions in the partitioning
|
|
* key, one for each zero-valued partattrs */
|
|
|
|
Oid *partopfamily; /* OIDs of operator families */
|
|
Oid *partopcintype; /* OIDs of opclass declared input data types */
|
|
FmgrInfo *partsupfunc; /* lookup info for support funcs */
|
|
|
|
/* Partitioning collation per attribute */
|
|
Oid *partcollation;
|
|
|
|
/* Type information per attribute */
|
|
Oid *parttypid;
|
|
int32 *parttypmod;
|
|
int16 *parttyplen;
|
|
bool *parttypbyval;
|
|
char *parttypalign;
|
|
Oid *parttypcoll;
|
|
} PartitionKeyData;
|
|
|
|
extern void RelationBuildPartitionKey(Relation relation);
|
|
extern List *RelationGetPartitionQual(Relation rel);
|
|
extern Expr *get_partition_qual_relid(Oid relid);
|
|
|
|
/*
|
|
* PartitionKey inquiry functions
|
|
*/
|
|
static inline int
|
|
get_partition_strategy(PartitionKey key)
|
|
{
|
|
return key->strategy;
|
|
}
|
|
|
|
static inline int
|
|
get_partition_natts(PartitionKey key)
|
|
{
|
|
return key->partnatts;
|
|
}
|
|
|
|
static inline List *
|
|
get_partition_exprs(PartitionKey key)
|
|
{
|
|
return key->partexprs;
|
|
}
|
|
|
|
/*
|
|
* PartitionKey inquiry functions - one column
|
|
*/
|
|
static inline int16
|
|
get_partition_col_attnum(PartitionKey key, int col)
|
|
{
|
|
return key->partattrs[col];
|
|
}
|
|
|
|
static inline Oid
|
|
get_partition_col_typid(PartitionKey key, int col)
|
|
{
|
|
return key->parttypid[col];
|
|
}
|
|
|
|
static inline int32
|
|
get_partition_col_typmod(PartitionKey key, int col)
|
|
{
|
|
return key->parttypmod[col];
|
|
}
|
|
|
|
static inline Oid
|
|
get_partition_col_collation(PartitionKey key, int col)
|
|
{
|
|
return key->partcollation[col];
|
|
}
|
|
|
|
#endif /* PARTCACHE_H */
|