0002-Refactor-routines-for-subscription-and-publication-l.patch
text/x-diff
Filename: 0002-Refactor-routines-for-subscription-and-publication-l.patch
Type: text/x-diff
Part: 1
Patch
Format: format-patch
Series: patch 0002
Subject: Refactor routines for subscription and publication lookups
| File | + | − |
|---|---|---|
| src/backend/catalog/objectaddress.c | 7 | 6 |
| src/backend/catalog/pg_publication.c | 9 | 2 |
| src/backend/catalog/pg_subscription.c | 9 | 2 |
| src/include/catalog/pg_publication.h | 1 | 1 |
| src/include/catalog/pg_subscription.h | 1 | 1 |
From 2d5009b0c35606988d19c2567a14f0e413af970b Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@paquier.xyz>
Date: Tue, 13 Feb 2018 11:17:56 +0900
Subject: [PATCH 2/3] Refactor routines for subscription and publication
lookups
Those routines gain a missing_ok argument, allowing a caller to get a
NULL result instead of an error if set to true.
---
src/backend/catalog/objectaddress.c | 13 +++++++------
src/backend/catalog/pg_publication.c | 11 +++++++++--
src/backend/catalog/pg_subscription.c | 11 +++++++++--
src/include/catalog/pg_publication.h | 2 +-
src/include/catalog/pg_subscription.h | 2 +-
5 files changed, 27 insertions(+), 12 deletions(-)
diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c
index d371c47842..644cb64c0c 100644
--- a/src/backend/catalog/objectaddress.c
+++ b/src/backend/catalog/objectaddress.c
@@ -3387,7 +3387,8 @@ getObjectDescription(const ObjectAddress *object)
case OCLASS_PUBLICATION:
{
appendStringInfo(&buffer, _("publication %s"),
- get_publication_name(object->objectId));
+ get_publication_name(object->objectId,
+ false));
break;
}
@@ -3404,7 +3405,7 @@ getObjectDescription(const ObjectAddress *object)
object->objectId);
prform = (Form_pg_publication_rel) GETSTRUCT(tup);
- pubname = get_publication_name(prform->prpubid);
+ pubname = get_publication_name(prform->prpubid, false);
appendStringInfo(&buffer, _("publication table %s in publication %s"),
get_rel_name(prform->prrelid), pubname);
@@ -3415,7 +3416,7 @@ getObjectDescription(const ObjectAddress *object)
case OCLASS_SUBSCRIPTION:
{
appendStringInfo(&buffer, _("subscription %s"),
- get_subscription_name(object->objectId));
+ get_subscription_name(object->objectId, false));
break;
}
@@ -4913,7 +4914,7 @@ getObjectIdentityParts(const ObjectAddress *object,
{
char *pubname;
- pubname = get_publication_name(object->objectId);
+ pubname = get_publication_name(object->objectId, false);
appendStringInfoString(&buffer,
quote_identifier(pubname));
if (objname)
@@ -4934,7 +4935,7 @@ getObjectIdentityParts(const ObjectAddress *object,
object->objectId);
prform = (Form_pg_publication_rel) GETSTRUCT(tup);
- pubname = get_publication_name(prform->prpubid);
+ pubname = get_publication_name(prform->prpubid, false);
appendStringInfo(&buffer, _("%s in publication %s"),
get_rel_name(prform->prrelid), pubname);
@@ -4953,7 +4954,7 @@ getObjectIdentityParts(const ObjectAddress *object,
{
char *subname;
- subname = get_subscription_name(object->objectId);
+ subname = get_subscription_name(object->objectId, false);
appendStringInfoString(&buffer,
quote_identifier(subname));
if (objname)
diff --git a/src/backend/catalog/pg_publication.c b/src/backend/catalog/pg_publication.c
index ec3bd1d22d..3ecf6d57bf 100644
--- a/src/backend/catalog/pg_publication.c
+++ b/src/backend/catalog/pg_publication.c
@@ -427,9 +427,12 @@ get_publication_oid(const char *pubname, bool missing_ok)
/*
* 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)
+get_publication_name(Oid pubid, bool missing_ok)
{
HeapTuple tup;
char *pubname;
@@ -438,7 +441,11 @@ get_publication_name(Oid pubid)
tup = SearchSysCache1(PUBLICATIONOID, ObjectIdGetDatum(pubid));
if (!HeapTupleIsValid(tup))
- elog(ERROR, "cache lookup failed for publication %u", pubid);
+ {
+ 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));
diff --git a/src/backend/catalog/pg_subscription.c b/src/backend/catalog/pg_subscription.c
index 8705d8b1d3..f891ff8054 100644
--- a/src/backend/catalog/pg_subscription.c
+++ b/src/backend/catalog/pg_subscription.c
@@ -179,9 +179,12 @@ get_subscription_oid(const char *subname, bool missing_ok)
/*
* 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)
+get_subscription_name(Oid subid, bool missing_ok)
{
HeapTuple tup;
char *subname;
@@ -190,7 +193,11 @@ get_subscription_name(Oid subid)
tup = SearchSysCache1(SUBSCRIPTIONOID, ObjectIdGetDatum(subid));
if (!HeapTupleIsValid(tup))
- elog(ERROR, "cache lookup failed for subscription %u", subid);
+ {
+ 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));
diff --git a/src/include/catalog/pg_publication.h b/src/include/catalog/pg_publication.h
index 83c59cb10d..a5d5570f76 100644
--- a/src/include/catalog/pg_publication.h
+++ b/src/include/catalog/pg_publication.h
@@ -88,7 +88,7 @@ extern ObjectAddress publication_add_relation(Oid pubid, Relation targetrel,
bool if_not_exists);
extern Oid get_publication_oid(const char *pubname, bool missing_ok);
-extern char *get_publication_name(Oid pubid);
+extern char *get_publication_name(Oid pubid, bool missing_ok);
extern Datum pg_get_publication_tables(PG_FUNCTION_ARGS);
diff --git a/src/include/catalog/pg_subscription.h b/src/include/catalog/pg_subscription.h
index 82dd6faf23..e4dc771cf5 100644
--- a/src/include/catalog/pg_subscription.h
+++ b/src/include/catalog/pg_subscription.h
@@ -80,7 +80,7 @@ typedef struct Subscription
extern Subscription *GetSubscription(Oid subid, bool missing_ok);
extern void FreeSubscription(Subscription *sub);
extern Oid get_subscription_oid(const char *subname, bool missing_ok);
-extern char *get_subscription_name(Oid subid);
+extern char *get_subscription_name(Oid subid, bool missing_ok);
extern int CountDBSubscriptions(Oid dbid);
--
2.17.0