diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/catalog/pg_publication.c | 95 | ||||
-rw-r--r-- | src/backend/catalog/pg_subscription.c | 50 | ||||
-rw-r--r-- | src/backend/utils/cache/lsyscache.c | 101 | ||||
-rw-r--r-- | src/include/catalog/pg_publication.h | 3 | ||||
-rw-r--r-- | src/include/catalog/pg_subscription.h | 2 | ||||
-rw-r--r-- | src/include/utils/lsyscache.h | 4 |
6 files changed, 127 insertions, 128 deletions
diff --git a/src/backend/catalog/pg_publication.c b/src/backend/catalog/pg_publication.c index e294bea60c5..6af35700051 100644 --- a/src/backend/catalog/pg_publication.c +++ b/src/backend/catalog/pg_publication.c @@ -150,6 +150,28 @@ is_publishable_relation(Relation rel) } /* + * SQL-callable variant of the above + * + * This returns null when the relation does not exist. This is intended to be + * used for example in psql to avoid gratuitous errors when there are + * concurrent catalog changes. + */ +Datum +pg_relation_is_publishable(PG_FUNCTION_ARGS) +{ + Oid relid = PG_GETARG_OID(0); + HeapTuple tuple; + bool result; + + tuple = SearchSysCache1(RELOID, ObjectIdGetDatum(relid)); + if (!HeapTupleIsValid(tuple)) + PG_RETURN_NULL(); + result = is_publishable_class(relid, (Form_pg_class) GETSTRUCT(tuple)); + ReleaseSysCache(tuple); + PG_RETURN_BOOL(result); +} + +/* * Filter out the partitions whose parent tables were also specified in * the publication. */ @@ -220,28 +242,6 @@ is_schema_publication(Oid pubid) } /* - * SQL-callable variant of the above - * - * This returns null when the relation does not exist. This is intended to be - * used for example in psql to avoid gratuitous errors when there are - * concurrent catalog changes. - */ -Datum -pg_relation_is_publishable(PG_FUNCTION_ARGS) -{ - Oid relid = PG_GETARG_OID(0); - HeapTuple tuple; - bool result; - - tuple = SearchSysCache1(RELOID, ObjectIdGetDatum(relid)); - if (!HeapTupleIsValid(tuple)) - PG_RETURN_NULL(); - result = is_publishable_class(relid, (Form_pg_class) GETSTRUCT(tuple)); - ReleaseSysCache(tuple); - PG_RETURN_BOOL(result); -} - -/* * Gets the relations based on the publication partition option for a specified * relation. */ @@ -1012,7 +1012,6 @@ GetPublication(Oid pubid) return pub; } - /* * Get Publication using name. */ @@ -1027,56 +1026,6 @@ GetPublicationByName(const char *pubname, bool missing_ok) } /* - * get_publication_oid - given a publication name, look up the OID - * - * If missing_ok is false, throw an error if name not found. If true, just - * return InvalidOid. - */ -Oid -get_publication_oid(const char *pubname, bool missing_ok) -{ - Oid oid; - - oid = GetSysCacheOid1(PUBLICATIONNAME, Anum_pg_publication_oid, - CStringGetDatum(pubname)); - if (!OidIsValid(oid) && !missing_ok) - ereport(ERROR, - (errcode(ERRCODE_UNDEFINED_OBJECT), - errmsg("publication \"%s\" does not exist", pubname))); - return oid; -} - -/* - * get_publication_name - given a publication Oid, look up the name - * - * If missing_ok is false, throw an error if name not found. If true, just - * return NULL. - */ -char * -get_publication_name(Oid pubid, bool missing_ok) -{ - HeapTuple tup; - char *pubname; - Form_pg_publication pubform; - - tup = SearchSysCache1(PUBLICATIONOID, ObjectIdGetDatum(pubid)); - - if (!HeapTupleIsValid(tup)) - { - if (!missing_ok) - elog(ERROR, "cache lookup failed for publication %u", pubid); - return NULL; - } - - pubform = (Form_pg_publication) GETSTRUCT(tup); - pubname = pstrdup(NameStr(pubform->pubname)); - - ReleaseSysCache(tup); - - return pubname; -} - -/* * Returns information of tables in a publication. */ Datum diff --git a/src/backend/catalog/pg_subscription.c b/src/backend/catalog/pg_subscription.c index c7d2537fb5d..a506fc3ec83 100644 --- a/src/backend/catalog/pg_subscription.c +++ b/src/backend/catalog/pg_subscription.c @@ -206,56 +206,6 @@ DisableSubscription(Oid subid) } /* - * get_subscription_oid - given a subscription name, look up the OID - * - * If missing_ok is false, throw an error if name not found. If true, just - * return InvalidOid. - */ -Oid -get_subscription_oid(const char *subname, bool missing_ok) -{ - Oid oid; - - oid = GetSysCacheOid2(SUBSCRIPTIONNAME, Anum_pg_subscription_oid, - MyDatabaseId, CStringGetDatum(subname)); - if (!OidIsValid(oid) && !missing_ok) - ereport(ERROR, - (errcode(ERRCODE_UNDEFINED_OBJECT), - errmsg("subscription \"%s\" does not exist", subname))); - return oid; -} - -/* - * get_subscription_name - given a subscription OID, look up the name - * - * If missing_ok is false, throw an error if name not found. If true, just - * return NULL. - */ -char * -get_subscription_name(Oid subid, bool missing_ok) -{ - HeapTuple tup; - char *subname; - Form_pg_subscription subform; - - tup = SearchSysCache1(SUBSCRIPTIONOID, ObjectIdGetDatum(subid)); - - if (!HeapTupleIsValid(tup)) - { - if (!missing_ok) - elog(ERROR, "cache lookup failed for subscription %u", subid); - return NULL; - } - - subform = (Form_pg_subscription) GETSTRUCT(tup); - subname = pstrdup(NameStr(subform->subname)); - - ReleaseSysCache(tup); - - return subname; -} - -/* * Convert text array to list of strings. * * Note: the resulting list of strings is pallocated here. diff --git a/src/backend/utils/cache/lsyscache.c b/src/backend/utils/cache/lsyscache.c index 1b7e11b93e0..a16a63f4957 100644 --- a/src/backend/utils/cache/lsyscache.c +++ b/src/backend/utils/cache/lsyscache.c @@ -33,6 +33,7 @@ #include "catalog/pg_proc.h" #include "catalog/pg_range.h" #include "catalog/pg_statistic.h" +#include "catalog/pg_subscription.h" #include "catalog/pg_transform.h" #include "catalog/pg_type.h" #include "miscadmin.h" @@ -3578,3 +3579,103 @@ get_index_isclustered(Oid index_oid) return isclustered; } + +/* + * get_publication_oid - given a publication name, look up the OID + * + * If missing_ok is false, throw an error if name not found. If true, just + * return InvalidOid. + */ +Oid +get_publication_oid(const char *pubname, bool missing_ok) +{ + Oid oid; + + oid = GetSysCacheOid1(PUBLICATIONNAME, Anum_pg_publication_oid, + CStringGetDatum(pubname)); + if (!OidIsValid(oid) && !missing_ok) + ereport(ERROR, + (errcode(ERRCODE_UNDEFINED_OBJECT), + errmsg("publication \"%s\" does not exist", pubname))); + return oid; +} + +/* + * get_publication_name - given a publication Oid, look up the name + * + * If missing_ok is false, throw an error if name not found. If true, just + * return NULL. + */ +char * +get_publication_name(Oid pubid, bool missing_ok) +{ + HeapTuple tup; + char *pubname; + Form_pg_publication pubform; + + tup = SearchSysCache1(PUBLICATIONOID, ObjectIdGetDatum(pubid)); + + if (!HeapTupleIsValid(tup)) + { + if (!missing_ok) + elog(ERROR, "cache lookup failed for publication %u", pubid); + return NULL; + } + + pubform = (Form_pg_publication) GETSTRUCT(tup); + pubname = pstrdup(NameStr(pubform->pubname)); + + ReleaseSysCache(tup); + + return pubname; +} + +/* + * get_subscription_oid - given a subscription name, look up the OID + * + * If missing_ok is false, throw an error if name not found. If true, just + * return InvalidOid. + */ +Oid +get_subscription_oid(const char* subname, bool missing_ok) +{ + Oid oid; + + oid = GetSysCacheOid2(SUBSCRIPTIONNAME, Anum_pg_subscription_oid, + MyDatabaseId, CStringGetDatum(subname)); + if (!OidIsValid(oid) && !missing_ok) + ereport(ERROR, + (errcode(ERRCODE_UNDEFINED_OBJECT), + errmsg("subscription \"%s\" does not exist", subname))); + return oid; +} + +/* + * get_subscription_name - given a subscription OID, look up the name + * + * If missing_ok is false, throw an error if name not found. If true, just + * return NULL. + */ +char * +get_subscription_name(Oid subid, bool missing_ok) +{ + HeapTuple tup; + char* subname; + Form_pg_subscription subform; + + tup = SearchSysCache1(SUBSCRIPTIONOID, ObjectIdGetDatum(subid)); + + if (!HeapTupleIsValid(tup)) + { + if (!missing_ok) + elog(ERROR, "cache lookup failed for subscription %u", subid); + return NULL; + } + + subform = (Form_pg_subscription) GETSTRUCT(tup); + subname = pstrdup(NameStr(subform->subname)); + + ReleaseSysCache(tup); + + return subname; +} diff --git a/src/include/catalog/pg_publication.h b/src/include/catalog/pg_publication.h index 48205ba4293..c298327f5e5 100644 --- a/src/include/catalog/pg_publication.h +++ b/src/include/catalog/pg_publication.h @@ -155,7 +155,4 @@ extern ObjectAddress publication_add_schema(Oid pubid, Oid schemaid, extern Bitmapset *pub_collist_to_bitmapset(Bitmapset *columns, Datum pubcols, MemoryContext mcxt); -extern Oid get_publication_oid(const char *pubname, bool missing_ok); -extern char *get_publication_name(Oid pubid, bool missing_ok); - #endif /* PG_PUBLICATION_H */ diff --git a/src/include/catalog/pg_subscription.h b/src/include/catalog/pg_subscription.h index c9a3026b283..7b98714f308 100644 --- a/src/include/catalog/pg_subscription.h +++ b/src/include/catalog/pg_subscription.h @@ -140,8 +140,6 @@ typedef struct Subscription extern Subscription *GetSubscription(Oid subid, bool missing_ok); extern void FreeSubscription(Subscription *sub); extern void DisableSubscription(Oid subid); -extern Oid get_subscription_oid(const char *subname, bool missing_ok); -extern char *get_subscription_name(Oid subid, bool missing_ok); extern int CountDBSubscriptions(Oid dbid); diff --git a/src/include/utils/lsyscache.h b/src/include/utils/lsyscache.h index b8dd27d4a96..50f02883052 100644 --- a/src/include/utils/lsyscache.h +++ b/src/include/utils/lsyscache.h @@ -198,6 +198,10 @@ extern Oid get_index_column_opclass(Oid index_oid, int attno); extern bool get_index_isreplident(Oid index_oid); extern bool get_index_isvalid(Oid index_oid); extern bool get_index_isclustered(Oid index_oid); +extern Oid get_publication_oid(const char *pubname, bool missing_ok); +extern char *get_publication_name(Oid pubid, bool missing_ok); +extern Oid get_subscription_oid(const char *subname, bool missing_ok); +extern char *get_subscription_name(Oid subid, bool missing_ok); #define type_is_array(typid) (get_element_type(typid) != InvalidOid) /* type_is_array_domain accepts both plain arrays and domains over arrays */ |