From d95a6159074f0ae337c0488de575190a24584ca8 Mon Sep 17 00:00:00 2001 From: gurkanindibay Date: Tue, 26 Dec 2023 20:04:37 +0300 Subject: [PATCH] Fixes text search deparser --- .../commands/distribute_object_ops.c | 10 +++--- .../deparser/deparse_comment_stmts.c | 36 +++++++++++++++---- 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/src/backend/distributed/commands/distribute_object_ops.c b/src/backend/distributed/commands/distribute_object_ops.c index 74dce05ab..b7b603749 100644 --- a/src/backend/distributed/commands/distribute_object_ops.c +++ b/src/backend/distributed/commands/distribute_object_ops.c @@ -15,8 +15,8 @@ #include "pg_version_constants.h" #include "distributed/commands.h" -#include "distributed/commands/utility_hook.h" #include "distributed/comment.h" +#include "distributed/commands/utility_hook.h" #include "distributed/deparser.h" #include "distributed/version_compat.h" @@ -995,13 +995,13 @@ static DistributeObjectOps TextSearchConfig_AlterOwner = { .markDistributed = false, }; static DistributeObjectOps TextSearchConfig_Comment = { - .deparse = DeparseTextSearchConfigurationCommentStmt, + .deparse = DeparseCommentStmt, .qualify = QualifyTextSearchConfigurationCommentStmt, .preprocess = PreprocessAlterDistributedObjectStmt, .postprocess = NULL, .objectType = OBJECT_TSCONFIGURATION, .operationType = DIST_OPS_ALTER, - .address = TextSearchConfigurationCommentObjectAddress, + .address = CommentObjectAddress, .markDistributed = false, }; static DistributeObjectOps TextSearchConfig_Define = { @@ -1064,13 +1064,13 @@ static DistributeObjectOps TextSearchDict_AlterOwner = { .markDistributed = false, }; static DistributeObjectOps TextSearchDict_Comment = { - .deparse = DeparseTextSearchDictionaryCommentStmt, + .deparse = DeparseCommentStmt, .qualify = QualifyTextSearchDictionaryCommentStmt, .preprocess = PreprocessAlterDistributedObjectStmt, .postprocess = NULL, .objectType = OBJECT_TSDICTIONARY, .operationType = DIST_OPS_ALTER, - .address = TextSearchDictCommentObjectAddress, + .address = CommentObjectAddress, .markDistributed = false, }; static DistributeObjectOps TextSearchDict_Define = { diff --git a/src/backend/distributed/deparser/deparse_comment_stmts.c b/src/backend/distributed/deparser/deparse_comment_stmts.c index 4aee4008e..de33f2af0 100644 --- a/src/backend/distributed/deparser/deparse_comment_stmts.c +++ b/src/backend/distributed/deparser/deparse_comment_stmts.c @@ -17,6 +17,7 @@ #include "nodes/parsenodes.h" #include "parser/parse_type.h" #include "utils/builtins.h" +#include "utils/elog.h" #include "pg_version_compat.h" @@ -27,12 +28,18 @@ #include "distributed/log_utils.h" -const char *const ObjectTypeNames[] = +typedef struct { - [OBJECT_DATABASE] = "DATABASE", - [OBJECT_ROLE] = "ROLE", - [OBJECT_TSCONFIGURATION] = "TEXT SEARCH CONFIGURATION", - [OBJECT_TSDICTIONARY] = "TEXT SEARCH DICTIONARY", + char *name; + int type; +} ObjectTypeInfo; + +const ObjectTypeInfo ObjectTypeNames[] = +{ + [OBJECT_DATABASE] = { "DATABASE", T_String }, + [OBJECT_ROLE] = { "ROLE", T_String }, + [OBJECT_TSCONFIGURATION] = { "TEXT SEARCH CONFIGURATION", T_List }, + [OBJECT_TSDICTIONARY] = { "TEXT SEARCH DICTIONARY", T_List }, /* etc. */ }; @@ -44,8 +51,23 @@ DeparseCommentStmt(Node *node) StringInfoData str = { 0 }; initStringInfo(&str); - const char *objectName = quote_identifier(strVal(stmt->object)); - const char *objectType = ObjectTypeNames[stmt->objtype]; + const char *objectName = NULL; + if (ObjectTypeNames[stmt->objtype].type == T_String) + { + objectName = quote_identifier(strVal(stmt->object)); + } + else if (ObjectTypeNames[stmt->objtype].type == T_List) + { + objectName = NameListToQuotedString(castNode(List, stmt->object)); + } + else + { + ereport(ERROR, + (errcode(ERRCODE_INTERNAL_ERROR), + errmsg("unknown object type"))); + } + + const char *objectType = ObjectTypeNames[stmt->objtype].name; char *comment = stmt->comment != NULL ? quote_literal_cstr(stmt->comment) : "NULL";