summaryrefslogtreecommitdiffstats
path: root/src/include/catalog/pg_class.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/catalog/pg_class.h')
-rw-r--r--src/include/catalog/pg_class.h200
1 files changed, 200 insertions, 0 deletions
diff --git a/src/include/catalog/pg_class.h b/src/include/catalog/pg_class.h
new file mode 100644
index 0000000..78b33b2
--- /dev/null
+++ b/src/include/catalog/pg_class.h
@@ -0,0 +1,200 @@
+/*-------------------------------------------------------------------------
+ *
+ * pg_class.h
+ * definition of the "relation" system catalog (pg_class)
+ *
+ *
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/catalog/pg_class.h
+ *
+ * NOTES
+ * The Catalog.pm module reads this file and derives schema
+ * information.
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef PG_CLASS_H
+#define PG_CLASS_H
+
+#include "catalog/genbki.h"
+#include "catalog/pg_class_d.h"
+
+/* ----------------
+ * pg_class definition. cpp turns this into
+ * typedef struct FormData_pg_class
+ *
+ * Note that the BKI_DEFAULT values below are only used for rows describing
+ * BKI_BOOTSTRAP catalogs, since only those rows appear in pg_class.dat.
+ * ----------------
+ */
+CATALOG(pg_class,1259,RelationRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(83,RelationRelation_Rowtype_Id) BKI_SCHEMA_MACRO
+{
+ /* oid */
+ Oid oid;
+
+ /* class name */
+ NameData relname;
+
+ /* OID of namespace containing this class */
+ Oid relnamespace BKI_DEFAULT(PGNSP);
+
+ /* OID of entry in pg_type for table's implicit row type */
+ Oid reltype BKI_LOOKUP(pg_type);
+
+ /* OID of entry in pg_type for underlying composite type */
+ Oid reloftype BKI_DEFAULT(0) BKI_LOOKUP(pg_type);
+
+ /* class owner */
+ Oid relowner BKI_DEFAULT(PGUID);
+
+ /* access method; 0 if not a table / index */
+ Oid relam BKI_DEFAULT(heap) BKI_LOOKUP(pg_am);
+
+ /* identifier of physical storage file */
+ /* relfilenode == 0 means it is a "mapped" relation, see relmapper.c */
+ Oid relfilenode BKI_DEFAULT(0);
+
+ /* identifier of table space for relation (0 means default for database) */
+ Oid reltablespace BKI_DEFAULT(0) BKI_LOOKUP(pg_tablespace);
+
+ /* # of blocks (not always up-to-date) */
+ int32 relpages BKI_DEFAULT(0);
+
+ /* # of tuples (not always up-to-date) */
+ float4 reltuples BKI_DEFAULT(0);
+
+ /* # of all-visible blocks (not always up-to-date) */
+ int32 relallvisible BKI_DEFAULT(0);
+
+ /* OID of toast table; 0 if none */
+ Oid reltoastrelid BKI_DEFAULT(0);
+
+ /* T if has (or has had) any indexes */
+ bool relhasindex BKI_DEFAULT(f);
+
+ /* T if shared across databases */
+ bool relisshared BKI_DEFAULT(f);
+
+ /* see RELPERSISTENCE_xxx constants below */
+ char relpersistence BKI_DEFAULT(p);
+
+ /* see RELKIND_xxx constants below */
+ char relkind BKI_DEFAULT(r);
+
+ /* number of user attributes */
+ int16 relnatts BKI_DEFAULT(0); /* genbki.pl will fill this in */
+
+ /*
+ * Class pg_attribute must contain exactly "relnatts" user attributes
+ * (with attnums ranging from 1 to relnatts) for this class. It may also
+ * contain entries with negative attnums for system attributes.
+ */
+
+ /* # of CHECK constraints for class */
+ int16 relchecks BKI_DEFAULT(0);
+
+ /* has (or has had) any rules */
+ bool relhasrules BKI_DEFAULT(f);
+
+ /* has (or has had) any TRIGGERs */
+ bool relhastriggers BKI_DEFAULT(f);
+
+ /* has (or has had) child tables or indexes */
+ bool relhassubclass BKI_DEFAULT(f);
+
+ /* row security is enabled or not */
+ bool relrowsecurity BKI_DEFAULT(f);
+
+ /* row security forced for owners or not */
+ bool relforcerowsecurity BKI_DEFAULT(f);
+
+ /* matview currently holds query results */
+ bool relispopulated BKI_DEFAULT(t);
+
+ /* see REPLICA_IDENTITY_xxx constants */
+ char relreplident BKI_DEFAULT(n);
+
+ /* is relation a partition? */
+ bool relispartition BKI_DEFAULT(f);
+
+ /* heap for rewrite during DDL, link to original rel */
+ Oid relrewrite BKI_DEFAULT(0);
+
+ /* all Xids < this are frozen in this rel */
+ TransactionId relfrozenxid BKI_DEFAULT(3); /* FirstNormalTransactionId */
+
+ /* all multixacts in this rel are >= this; it is really a MultiXactId */
+ TransactionId relminmxid BKI_DEFAULT(1); /* FirstMultiXactId */
+
+#ifdef CATALOG_VARLEN /* variable-length fields start here */
+ /* NOTE: These fields are not present in a relcache entry's rd_rel field. */
+ /* access permissions */
+ aclitem relacl[1] BKI_DEFAULT(_null_);
+
+ /* access-method-specific options */
+ text reloptions[1] BKI_DEFAULT(_null_);
+
+ /* partition bound node tree */
+ pg_node_tree relpartbound BKI_DEFAULT(_null_);
+#endif
+} FormData_pg_class;
+
+/* Size of fixed part of pg_class tuples, not counting var-length fields */
+#define CLASS_TUPLE_SIZE \
+ (offsetof(FormData_pg_class,relminmxid) + sizeof(TransactionId))
+
+/* ----------------
+ * Form_pg_class corresponds to a pointer to a tuple with
+ * the format of pg_class relation.
+ * ----------------
+ */
+typedef FormData_pg_class *Form_pg_class;
+
+#ifdef EXPOSE_TO_CLIENT_CODE
+
+#define RELKIND_RELATION 'r' /* ordinary table */
+#define RELKIND_INDEX 'i' /* secondary index */
+#define RELKIND_SEQUENCE 'S' /* sequence object */
+#define RELKIND_TOASTVALUE 't' /* for out-of-line values */
+#define RELKIND_VIEW 'v' /* view */
+#define RELKIND_MATVIEW 'm' /* materialized view */
+#define RELKIND_COMPOSITE_TYPE 'c' /* composite type */
+#define RELKIND_FOREIGN_TABLE 'f' /* foreign table */
+#define RELKIND_PARTITIONED_TABLE 'p' /* partitioned table */
+#define RELKIND_PARTITIONED_INDEX 'I' /* partitioned index */
+
+#define RELPERSISTENCE_PERMANENT 'p' /* regular table */
+#define RELPERSISTENCE_UNLOGGED 'u' /* unlogged permanent table */
+#define RELPERSISTENCE_TEMP 't' /* temporary table */
+
+/* default selection for replica identity (primary key or nothing) */
+#define REPLICA_IDENTITY_DEFAULT 'd'
+/* no replica identity is logged for this relation */
+#define REPLICA_IDENTITY_NOTHING 'n'
+/* all columns are logged as replica identity */
+#define REPLICA_IDENTITY_FULL 'f'
+/*
+ * an explicitly chosen candidate key's columns are used as replica identity.
+ * Note this will still be set if the index has been dropped; in that case it
+ * has the same meaning as 'd'.
+ */
+#define REPLICA_IDENTITY_INDEX 'i'
+
+/*
+ * Relation kinds that have physical storage. These relations normally have
+ * relfilenode set to non-zero, but it can also be zero if the relation is
+ * mapped.
+ */
+#define RELKIND_HAS_STORAGE(relkind) \
+ ((relkind) == RELKIND_RELATION || \
+ (relkind) == RELKIND_INDEX || \
+ (relkind) == RELKIND_SEQUENCE || \
+ (relkind) == RELKIND_TOASTVALUE || \
+ (relkind) == RELKIND_MATVIEW)
+
+
+#endif /* EXPOSE_TO_CLIENT_CODE */
+
+#endif /* PG_CLASS_H */