From 72eee410d48dfb4e6f3a0b751c4b0057ca8adc81 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 11 Feb 2016 15:51:28 -0500 Subject: [PATCH] Move pg_constraint.h function declarations to new file pg_constraint_fn.h. A pending patch requires exporting a function returning Bitmapset from catalog/pg_constraint.c. As things stand, that would mean including nodes/bitmapset.h in pg_constraint.h, which might be hazardous for the client-side includability of that header. It's not entirely clear whether any client-side code needs to include pg_constraint.h, but it seems prudent to assume that there is some such code somewhere. Therefore, split off the function definitions into a new file pg_constraint_fn.h, similarly to what we've done for some other catalog header files. --- src/backend/catalog/dependency.c | 1 + src/backend/catalog/heap.c | 1 + src/backend/catalog/index.c | 1 + src/backend/catalog/objectaddress.c | 1 + src/backend/catalog/pg_constraint.c | 1 + src/backend/commands/tablecmds.c | 1 + src/backend/commands/trigger.c | 1 + src/backend/commands/typecmds.c | 1 + src/backend/parser/parse_agg.c | 2 +- src/backend/parser/parse_clause.c | 2 +- src/backend/parser/parse_utilcmd.c | 1 + src/include/catalog/pg_constraint.h | 71 +++-------------------- src/include/catalog/pg_constraint_fn.h | 79 ++++++++++++++++++++++++++ 13 files changed, 97 insertions(+), 66 deletions(-) create mode 100644 src/include/catalog/pg_constraint_fn.h diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c index d657c20bad..c48e37bf9a 100644 --- a/src/backend/catalog/dependency.c +++ b/src/backend/catalog/dependency.c @@ -28,6 +28,7 @@ #include "catalog/pg_collation.h" #include "catalog/pg_collation_fn.h" #include "catalog/pg_constraint.h" +#include "catalog/pg_constraint_fn.h" #include "catalog/pg_conversion.h" #include "catalog/pg_conversion_fn.h" #include "catalog/pg_database.h" diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index d14cbb7ab9..6a4a9d9302 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -44,6 +44,7 @@ #include "catalog/pg_attrdef.h" #include "catalog/pg_collation.h" #include "catalog/pg_constraint.h" +#include "catalog/pg_constraint_fn.h" #include "catalog/pg_foreign_table.h" #include "catalog/pg_inherits.h" #include "catalog/pg_namespace.h" diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index 313ee9c4ed..a309c446e3 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -40,6 +40,7 @@ #include "catalog/pg_am.h" #include "catalog/pg_collation.h" #include "catalog/pg_constraint.h" +#include "catalog/pg_constraint_fn.h" #include "catalog/pg_operator.h" #include "catalog/pg_opclass.h" #include "catalog/pg_tablespace.h" diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c index 0232e0d867..d2aaa6ded9 100644 --- a/src/backend/catalog/objectaddress.c +++ b/src/backend/catalog/objectaddress.c @@ -30,6 +30,7 @@ #include "catalog/pg_event_trigger.h" #include "catalog/pg_collation.h" #include "catalog/pg_constraint.h" +#include "catalog/pg_constraint_fn.h" #include "catalog/pg_conversion.h" #include "catalog/pg_database.h" #include "catalog/pg_extension.h" diff --git a/src/backend/catalog/pg_constraint.c b/src/backend/catalog/pg_constraint.c index 28e3aed246..d85484976a 100644 --- a/src/backend/catalog/pg_constraint.c +++ b/src/backend/catalog/pg_constraint.c @@ -21,6 +21,7 @@ #include "catalog/indexing.h" #include "catalog/objectaccess.h" #include "catalog/pg_constraint.h" +#include "catalog/pg_constraint_fn.h" #include "catalog/pg_operator.h" #include "catalog/pg_type.h" #include "commands/defrem.h" diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index eeda3b4697..96dc923bcd 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -32,6 +32,7 @@ #include "catalog/pg_am.h" #include "catalog/pg_collation.h" #include "catalog/pg_constraint.h" +#include "catalog/pg_constraint_fn.h" #include "catalog/pg_depend.h" #include "catalog/pg_foreign_table.h" #include "catalog/pg_inherits.h" diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index 15cb18b012..cca2e43b10 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -23,6 +23,7 @@ #include "catalog/indexing.h" #include "catalog/objectaccess.h" #include "catalog/pg_constraint.h" +#include "catalog/pg_constraint_fn.h" #include "catalog/pg_proc.h" #include "catalog/pg_trigger.h" #include "catalog/pg_type.h" diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c index 4f41766eef..227d382a38 100644 --- a/src/backend/commands/typecmds.c +++ b/src/backend/commands/typecmds.c @@ -41,6 +41,7 @@ #include "catalog/pg_authid.h" #include "catalog/pg_collation.h" #include "catalog/pg_constraint.h" +#include "catalog/pg_constraint_fn.h" #include "catalog/pg_depend.h" #include "catalog/pg_enum.h" #include "catalog/pg_language.h" diff --git a/src/backend/parser/parse_agg.c b/src/backend/parser/parse_agg.c index b790bb27c5..b109ea5ba6 100644 --- a/src/backend/parser/parse_agg.c +++ b/src/backend/parser/parse_agg.c @@ -15,7 +15,7 @@ #include "postgres.h" #include "catalog/pg_aggregate.h" -#include "catalog/pg_constraint.h" +#include "catalog/pg_constraint_fn.h" #include "catalog/pg_type.h" #include "nodes/makefuncs.h" #include "nodes/nodeFuncs.h" diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c index 7ea455cf04..04fa1271c8 100644 --- a/src/backend/parser/parse_clause.c +++ b/src/backend/parser/parse_clause.c @@ -22,7 +22,7 @@ #include "catalog/catalog.h" #include "catalog/heap.h" #include "catalog/pg_am.h" -#include "catalog/pg_constraint.h" +#include "catalog/pg_constraint_fn.h" #include "catalog/pg_type.h" #include "commands/defrem.h" #include "nodes/makefuncs.h" diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c index a65b297728..dc431c7de0 100644 --- a/src/backend/parser/parse_utilcmd.c +++ b/src/backend/parser/parse_utilcmd.c @@ -36,6 +36,7 @@ #include "catalog/pg_am.h" #include "catalog/pg_collation.h" #include "catalog/pg_constraint.h" +#include "catalog/pg_constraint_fn.h" #include "catalog/pg_opclass.h" #include "catalog/pg_operator.h" #include "catalog/pg_type.h" diff --git a/src/include/catalog/pg_constraint.h b/src/include/catalog/pg_constraint.h index 07dbceac3f..666b2304bf 100644 --- a/src/include/catalog/pg_constraint.h +++ b/src/include/catalog/pg_constraint.h @@ -20,8 +20,6 @@ #define PG_CONSTRAINT_H #include "catalog/genbki.h" -#include "catalog/dependency.h" -#include "nodes/pg_list.h" /* ---------------- * pg_constraint definition. cpp turns this into @@ -178,6 +176,13 @@ typedef FormData_pg_constraint *Form_pg_constraint; #define Anum_pg_constraint_conbin 23 #define Anum_pg_constraint_consrc 24 +/* ---------------- + * initial contents of pg_constraint + * ---------------- + */ + +/* nothing, at present */ + /* Valid values for contype */ #define CONSTRAINT_CHECK 'c' @@ -193,66 +198,4 @@ typedef FormData_pg_constraint *Form_pg_constraint; * the FKCONSTR_MATCH_xxx constants defined in parsenodes.h. */ -/* - * Identify constraint type for lookup purposes - */ -typedef enum ConstraintCategory -{ - CONSTRAINT_RELATION, - CONSTRAINT_DOMAIN, - CONSTRAINT_ASSERTION /* for future expansion */ -} ConstraintCategory; - -/* - * prototypes for functions in pg_constraint.c - */ -extern Oid CreateConstraintEntry(const char *constraintName, - Oid constraintNamespace, - char constraintType, - bool isDeferrable, - bool isDeferred, - bool isValidated, - Oid relId, - const int16 *constraintKey, - int constraintNKeys, - Oid domainId, - Oid indexRelId, - Oid foreignRelId, - const int16 *foreignKey, - const Oid *pfEqOp, - const Oid *ppEqOp, - const Oid *ffEqOp, - int foreignNKeys, - char foreignUpdateType, - char foreignDeleteType, - char foreignMatchType, - const Oid *exclOp, - Node *conExpr, - const char *conBin, - const char *conSrc, - bool conIsLocal, - int conInhCount, - bool conNoInherit, - bool is_internal); - -extern void RemoveConstraintById(Oid conId); -extern void RenameConstraintById(Oid conId, const char *newname); -extern void SetValidatedConstraintById(Oid conId); - -extern bool ConstraintNameIsUsed(ConstraintCategory conCat, Oid objId, - Oid objNamespace, const char *conname); -extern char *ChooseConstraintName(const char *name1, const char *name2, - const char *label, Oid namespaceid, - List *others); - -extern void AlterConstraintNamespaces(Oid ownerId, Oid oldNspId, - Oid newNspId, bool isType, ObjectAddresses *objsMoved); -extern Oid get_relation_constraint_oid(Oid relid, const char *conname, bool missing_ok); -extern Oid get_domain_constraint_oid(Oid typid, const char *conname, bool missing_ok); - -extern bool check_functional_grouping(Oid relid, - Index varno, Index varlevelsup, - List *grouping_columns, - List **constraintDeps); - #endif /* PG_CONSTRAINT_H */ diff --git a/src/include/catalog/pg_constraint_fn.h b/src/include/catalog/pg_constraint_fn.h new file mode 100644 index 0000000000..ccd6dffc27 --- /dev/null +++ b/src/include/catalog/pg_constraint_fn.h @@ -0,0 +1,79 @@ +/*------------------------------------------------------------------------- + * + * pg_constraint_fn.h + * prototypes for functions in catalog/pg_constraint.c + * + * + * Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/include/catalog/pg_constraint_fn.h + * + *------------------------------------------------------------------------- + */ +#ifndef PG_CONSTRAINT_FN_H +#define PG_CONSTRAINT_FN_H + +#include "catalog/dependency.h" +#include "nodes/pg_list.h" + +/* + * Identify constraint type for lookup purposes + */ +typedef enum ConstraintCategory +{ + CONSTRAINT_RELATION, + CONSTRAINT_DOMAIN, + CONSTRAINT_ASSERTION /* for future expansion */ +} ConstraintCategory; + +extern Oid CreateConstraintEntry(const char *constraintName, + Oid constraintNamespace, + char constraintType, + bool isDeferrable, + bool isDeferred, + bool isValidated, + Oid relId, + const int16 *constraintKey, + int constraintNKeys, + Oid domainId, + Oid indexRelId, + Oid foreignRelId, + const int16 *foreignKey, + const Oid *pfEqOp, + const Oid *ppEqOp, + const Oid *ffEqOp, + int foreignNKeys, + char foreignUpdateType, + char foreignDeleteType, + char foreignMatchType, + const Oid *exclOp, + Node *conExpr, + const char *conBin, + const char *conSrc, + bool conIsLocal, + int conInhCount, + bool conNoInherit, + bool is_internal); + +extern void RemoveConstraintById(Oid conId); +extern void RenameConstraintById(Oid conId, const char *newname); +extern void SetValidatedConstraintById(Oid conId); + +extern bool ConstraintNameIsUsed(ConstraintCategory conCat, Oid objId, + Oid objNamespace, const char *conname); +extern char *ChooseConstraintName(const char *name1, const char *name2, + const char *label, Oid namespaceid, + List *others); + +extern void AlterConstraintNamespaces(Oid ownerId, Oid oldNspId, + Oid newNspId, bool isType, ObjectAddresses *objsMoved); +extern Oid get_relation_constraint_oid(Oid relid, const char *conname, bool missing_ok); +extern Oid get_domain_constraint_oid(Oid typid, const char *conname, bool missing_ok); + +extern bool check_functional_grouping(Oid relid, + Index varno, Index varlevelsup, + List *grouping_columns, + List **constraintDeps); + +#endif /* PG_CONSTRAINT_FN_H */