From 8217fb1441ce4b4e1785f9acfa0ce50039247a10 Mon Sep 17 00:00:00 2001
From: Alvaro Herrera <alvherre@alvh.no-ip.org>
Date: Wed, 25 Mar 2015 15:57:08 -0300
Subject: [PATCH] Add OID output argument to DefineTSConfiguration

... which is set to the OID of a copied text search config, whenever the
COPY clause is used.

This is in the spirit of commit a2e35b53c39.
---
 src/backend/commands/tsearchcmds.c | 10 +++++++++-
 src/backend/tcop/utility.c         |  3 ++-
 src/include/commands/defrem.h      |  3 ++-
 3 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/backend/commands/tsearchcmds.c b/src/backend/commands/tsearchcmds.c
index 45bafd31707..4c404e73d09 100644
--- a/src/backend/commands/tsearchcmds.c
+++ b/src/backend/commands/tsearchcmds.c
@@ -964,7 +964,7 @@ makeConfigurationDependencies(HeapTuple tuple, bool removeOld,
  * CREATE TEXT SEARCH CONFIGURATION
  */
 ObjectAddress
-DefineTSConfiguration(List *names, List *parameters)
+DefineTSConfiguration(List *names, List *parameters, ObjectAddress *copied)
 {
 	Relation	cfgRel;
 	Relation	mapRel = NULL;
@@ -1013,6 +1013,14 @@ DefineTSConfiguration(List *names, List *parameters)
 				(errcode(ERRCODE_SYNTAX_ERROR),
 				 errmsg("cannot specify both PARSER and COPY options")));
 
+	/* make copied tsconfig available to callers */
+	if (copied && OidIsValid(sourceOid))
+	{
+		ObjectAddressSet(*copied,
+						 TSConfigRelationId,
+						 sourceOid);
+	}
+
 	/*
 	 * Look up source config if given.
 	 */
diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c
index d9443b1496a..fd09d3ad9ed 100644
--- a/src/backend/tcop/utility.c
+++ b/src/backend/tcop/utility.c
@@ -1129,7 +1129,8 @@ ProcessUtilitySlow(Node *parsetree,
 						case OBJECT_TSCONFIGURATION:
 							Assert(stmt->args == NIL);
 							DefineTSConfiguration(stmt->defnames,
-												  stmt->definition);
+												  stmt->definition,
+												  NULL);
 							break;
 						case OBJECT_COLLATION:
 							Assert(stmt->args == NIL);
diff --git a/src/include/commands/defrem.h b/src/include/commands/defrem.h
index a9c67838a63..595f93f79a5 100644
--- a/src/include/commands/defrem.h
+++ b/src/include/commands/defrem.h
@@ -101,7 +101,8 @@ extern ObjectAddress AlterTSDictionary(AlterTSDictionaryStmt *stmt);
 extern ObjectAddress DefineTSTemplate(List *names, List *parameters);
 extern void RemoveTSTemplateById(Oid tmplId);
 
-extern ObjectAddress DefineTSConfiguration(List *names, List *parameters);
+extern ObjectAddress DefineTSConfiguration(List *names, List *parameters,
+					  ObjectAddress *copied);
 extern void RemoveTSConfigurationById(Oid cfgId);
 extern ObjectAddress AlterTSConfiguration(AlterTSConfigurationStmt *stmt);
 
-- 
GitLab