summaryrefslogtreecommitdiff
path: root/src/include/catalog/pg_constraint.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/catalog/pg_constraint.h')
-rw-r--r--src/include/catalog/pg_constraint.h172
1 files changed, 172 insertions, 0 deletions
diff --git a/src/include/catalog/pg_constraint.h b/src/include/catalog/pg_constraint.h
new file mode 100644
index 0000000000..ec49314652
--- /dev/null
+++ b/src/include/catalog/pg_constraint.h
@@ -0,0 +1,172 @@
+/*-------------------------------------------------------------------------
+ *
+ * pg_constraint.h
+ * definition of the system "constraint" relation (pg_constraint)
+ * along with the relation's initial contents.
+ *
+ *
+ * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * $Id: pg_constraint.h,v 1.1 2002/07/12 18:43:19 tgl Exp $
+ *
+ * NOTES
+ * the genbki.sh script reads this file and generates .bki
+ * information from the DATA() statements.
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef PG_CONSTRAINT_H
+#define PG_CONSTRAINT_H
+
+/* ----------------
+ * postgres.h contains the system type definintions and the
+ * CATALOG(), BOOTSTRAP and DATA() sugar words so this file
+ * can be read by both genbki.sh and the C compiler.
+ * ----------------
+ */
+
+/* ----------------
+ * pg_constraint definition. cpp turns this into
+ * typedef struct FormData_pg_constraint
+ * ----------------
+ */
+CATALOG(pg_constraint)
+{
+ /*
+ * conname + connamespace is deliberately not unique; we allow, for
+ * example, the same name to be used for constraints of different
+ * relations. This is partly for backwards compatibility with past
+ * Postgres practice, and partly because we don't want to have to obtain
+ * a global lock to generate a globally unique name for a nameless
+ * constraint. We associate a namespace with constraint names only
+ * for SQL92 compatibility.
+ */
+ NameData conname; /* name of this constraint */
+ Oid connamespace; /* OID of namespace containing constraint */
+ char contype; /* constraint type; see codes below */
+ bool condeferrable; /* deferrable constraint? */
+ bool condeferred; /* deferred by default? */
+
+ /*
+ * conrelid and conkey are only meaningful if the constraint applies
+ * to a specific relation (this excludes domain constraints and
+ * assertions). Otherwise conrelid is 0 and conkey is NULL.
+ */
+ Oid conrelid; /* relation this constraint constrains */
+
+ /*
+ * contypid links to the pg_type row for a domain if this is a domain
+ * constraint. Otherwise it's 0.
+ *
+ * For SQL-style global ASSERTIONs, both conrelid and contypid would
+ * be zero. This is not presently supported, however.
+ */
+ Oid contypid; /* domain this constraint constrains */
+
+ /*
+ * These fields, plus confkey, are only meaningful for a foreign-key
+ * constraint. Otherwise confrelid is 0 and the char fields are spaces.
+ */
+ Oid confrelid; /* relation referenced by foreign key */
+ char confupdtype; /* foreign key's ON UPDATE action */
+ char confdeltype; /* foreign key's ON DELETE action */
+ char confmatchtype; /* foreign key's match type */
+
+ /*
+ * VARIABLE LENGTH FIELDS start here. These fields may be NULL, too.
+ */
+
+ /*
+ * Columns of conrelid that the constraint applies to
+ */
+ int2 conkey[1];
+
+ /*
+ * If a foreign key, the referenced columns of confrelid
+ */
+ int2 confkey[1];
+
+ /*
+ * If a check constraint, nodeToString representation of expression
+ */
+ text conbin;
+
+ /*
+ * If a check constraint, source-text representation of expression
+ */
+ text consrc;
+} FormData_pg_constraint;
+
+/* ----------------
+ * Form_pg_constraint corresponds to a pointer to a tuple with
+ * the format of pg_constraint relation.
+ * ----------------
+ */
+typedef FormData_pg_constraint *Form_pg_constraint;
+
+/* ----------------
+ * compiler constants for pg_constraint
+ * ----------------
+ */
+#define Natts_pg_constraint 15
+#define Anum_pg_constraint_conname 1
+#define Anum_pg_constraint_connamespace 2
+#define Anum_pg_constraint_contype 3
+#define Anum_pg_constraint_condeferrable 4
+#define Anum_pg_constraint_condeferred 5
+#define Anum_pg_constraint_conrelid 6
+#define Anum_pg_constraint_contypid 7
+#define Anum_pg_constraint_confrelid 8
+#define Anum_pg_constraint_confupdtype 9
+#define Anum_pg_constraint_confdeltype 10
+#define Anum_pg_constraint_confmatchtype 11
+#define Anum_pg_constraint_conkey 12
+#define Anum_pg_constraint_confkey 13
+#define Anum_pg_constraint_conbin 14
+#define Anum_pg_constraint_consrc 15
+
+
+/* Valid values for contype */
+#define CONSTRAINT_CHECK 'c'
+#define CONSTRAINT_FOREIGN 'f'
+#define CONSTRAINT_PRIMARY 'p'
+#define CONSTRAINT_UNIQUE 'u'
+
+/*
+ * Valid values for confupdtype and confdeltype are the FKCONSTR_ACTION_xxx
+ * constants defined in parsenodes.h. Valid values for confmatchtype are
+ * the FKCONSTR_MATCH_xxx constants defined in parsenodes.h.
+ */
+
+
+/*
+ * prototypes for functions in pg_constraint.c
+ */
+extern Oid CreateConstraintEntry(const char *constraintName,
+ Oid constraintNamespace,
+ char constraintType,
+ bool isDeferrable,
+ bool isDeferred,
+ Oid relId,
+ const int16 *constraintKey,
+ int constraintNKeys,
+ Oid domainId,
+ Oid foreignRelId,
+ const int16 *foreignKey,
+ int foreignNKeys,
+ char foreignUpdateType,
+ char foreignDeleteType,
+ char foreignMatchType,
+ const char *conBin,
+ const char *conSrc);
+
+extern void RemoveConstraintById(Oid conId);
+
+extern bool ConstraintNameIsUsed(Oid relId, Oid relNamespace,
+ const char *cname);
+extern char *GenerateConstraintName(Oid relId, Oid relNamespace,
+ int *counter);
+extern bool ConstraintNameIsGenerated(const char *cname);
+
+#endif /* PG_CONSTRAINT_H */