v11-0001-move-expand_dbname_patterns-to-common_dumpall.no-cfbot

application/octet-stream

Filename: v11-0001-move-expand_dbname_patterns-to-common_dumpall.no-cfbot
Type: application/octet-stream
Part: 2
Message: Re: Non-text mode for pg_dumpall
From b66c5b341fff463c03312f0317e2b828e9a2d8dd Mon Sep 17 00:00:00 2001
From: jian he <jian.universality@gmail.com>
Date: Thu, 23 Jan 2025 15:11:55 +0800
Subject: [PATCH v11 1/4] move expand_dbname_patterns to
 common_dumpall_restore.c

---
 src/bin/pg_dump/common_dumpall_restore.c | 54 ++++++++++++++++++++++++
 src/bin/pg_dump/common_dumpall_restore.h |  3 ++
 src/bin/pg_dump/pg_dump.c                |  2 +-
 src/bin/pg_dump/pg_dumpall.c             | 54 ------------------------
 4 files changed, 58 insertions(+), 55 deletions(-)

diff --git a/src/bin/pg_dump/common_dumpall_restore.c b/src/bin/pg_dump/common_dumpall_restore.c
index ace5077085..4503a98f25 100644
--- a/src/bin/pg_dump/common_dumpall_restore.c
+++ b/src/bin/pg_dump/common_dumpall_restore.c
@@ -312,3 +312,57 @@ parseDumpFormat(const char *format)
 
 	return archDumpFormat;
 }
+
+/*
+ * Find a list of database names that match the given patterns.
+ * See also expand_table_name_patterns() in pg_dump.c
+ */
+void
+expand_dbname_patterns(PGconn *conn,
+					   SimpleStringList *patterns,
+					   SimpleStringList *names)
+{
+	PQExpBuffer query;
+	PGresult   *res;
+
+	if (patterns->head == NULL)
+		return;					/* nothing to do */
+
+	query = createPQExpBuffer();
+
+	/*
+	 * The loop below runs multiple SELECTs, which might sometimes result in
+	 * duplicate entries in the name list, but we don't care, since all we're
+	 * going to do is test membership of the list.
+	 */
+
+	for (SimpleStringListCell *cell = patterns->head; cell; cell = cell->next)
+	{
+		int			dotcnt;
+
+		appendPQExpBufferStr(query,
+							 "SELECT datname FROM pg_catalog.pg_database n\n");
+		processSQLNamePattern(conn, query, cell->val, false,
+							  false, NULL, "datname", NULL, NULL, NULL,
+							  &dotcnt);
+
+		if (dotcnt > 0)
+		{
+			pg_log_error("improper qualified name (too many dotted names): %s",
+						 cell->val);
+			PQfinish(conn);
+			exit_nicely(1);
+		}
+
+		res = executeQuery(conn, query->data);
+		for (int i = 0; i < PQntuples(res); i++)
+		{
+			simple_string_list_append(names, PQgetvalue(res, i, 0));
+		}
+
+		PQclear(res);
+		resetPQExpBuffer(query);
+	}
+
+	destroyPQExpBuffer(query);
+}
diff --git a/src/bin/pg_dump/common_dumpall_restore.h b/src/bin/pg_dump/common_dumpall_restore.h
index a27c3e9fb8..2476449fa7 100644
--- a/src/bin/pg_dump/common_dumpall_restore.h
+++ b/src/bin/pg_dump/common_dumpall_restore.h
@@ -23,4 +23,7 @@ extern PGconn *connectDatabase(const char *dbname,
 		const char *progname, const char **connstr, int *server_version);
 extern  PGresult *executeQuery(PGconn *conn, const char *query);
 extern ArchiveFormat parseDumpFormat(const char *format);
+extern void expand_dbname_patterns(PGconn *conn,
+								   SimpleStringList *patterns,
+								   SimpleStringList *names);
 #endif                          /* COMMON_DUMPALL_RESTORE_H */
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index eae626f621..72d9cefd81 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -1653,7 +1653,7 @@ expand_foreign_server_name_patterns(Archive *fout,
 /*
  * Find the OIDs of all tables matching the given list of patterns,
  * and append them to the given OID list. See also expand_dbname_patterns()
- * in pg_dumpall.c
+ * in common_dumpall_restore.c
  */
 static void
 expand_table_name_patterns(Archive *fout,
diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c
index 5915b1b051..244bf72986 100644
--- a/src/bin/pg_dump/pg_dumpall.c
+++ b/src/bin/pg_dump/pg_dumpall.c
@@ -77,8 +77,6 @@ static void buildShSecLabels(PGconn *conn,
 							 const char *objtype, const char *objname,
 							 PQExpBuffer buffer);
 static void executeCommand(PGconn *conn, const char *query);
-static void expand_dbname_patterns(PGconn *conn, SimpleStringList *patterns,
-								   SimpleStringList *names);
 static void read_dumpall_filters(const char *filename, SimpleStringList *pattern);
 static void create_or_open_dir(const char *dirname);
 
@@ -1466,59 +1464,7 @@ dumpUserConfig(PGconn *conn, const char *username)
 	destroyPQExpBuffer(buf);
 }
 
-/*
- * Find a list of database names that match the given patterns.
- * See also expand_table_name_patterns() in pg_dump.c
- */
-static void
-expand_dbname_patterns(PGconn *conn,
-					   SimpleStringList *patterns,
-					   SimpleStringList *names)
-{
-	PQExpBuffer query;
-	PGresult   *res;
 
-	if (patterns->head == NULL)
-		return;					/* nothing to do */
-
-	query = createPQExpBuffer();
-
-	/*
-	 * The loop below runs multiple SELECTs, which might sometimes result in
-	 * duplicate entries in the name list, but we don't care, since all we're
-	 * going to do is test membership of the list.
-	 */
-
-	for (SimpleStringListCell *cell = patterns->head; cell; cell = cell->next)
-	{
-		int			dotcnt;
-
-		appendPQExpBufferStr(query,
-							 "SELECT datname FROM pg_catalog.pg_database n\n");
-		processSQLNamePattern(conn, query, cell->val, false,
-							  false, NULL, "datname", NULL, NULL, NULL,
-							  &dotcnt);
-
-		if (dotcnt > 0)
-		{
-			pg_log_error("improper qualified name (too many dotted names): %s",
-						 cell->val);
-			PQfinish(conn);
-			exit_nicely(1);
-		}
-
-		res = executeQuery(conn, query->data);
-		for (int i = 0; i < PQntuples(res); i++)
-		{
-			simple_string_list_append(names, PQgetvalue(res, i, 0));
-		}
-
-		PQclear(res);
-		resetPQExpBuffer(query);
-	}
-
-	destroyPQExpBuffer(query);
-}
 
 /*
  * Dump contents of databases.
-- 
2.34.1