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