2002-07-12 20:43:19 +02:00
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
*
|
|
|
|
* 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
|
|
|
|
*
|
2002-07-16 07:53:34 +02:00
|
|
|
* $Id: pg_constraint.h,v 1.2 2002/07/16 05:53:34 tgl Exp $
|
2002-07-12 20:43:19 +02:00
|
|
|
*
|
|
|
|
* 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,
|
2002-07-16 07:53:34 +02:00
|
|
|
Node *conExpr,
|
2002-07-12 20:43:19 +02:00
|
|
|
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 */
|