diff options
Diffstat (limited to 'src/include/catalog/pg_constraint.h')
| -rw-r--r-- | src/include/catalog/pg_constraint.h | 172 |
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 */ |
