This rearranges the version-dependent pieces in the new more modular style.

I had originally written this before pre-9.2 support was removed and it had a few more branches then. But I think it is still useful, and there are some pending patches that might add more branches for newer versions.
From e4b049ec68995f1fda50b545e42ef2d2a7d8f8df Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pe...@eisentraut.org>
Date: Thu, 16 Dec 2021 06:21:04 +0100
Subject: [PATCH] pg_dump: Refactor getIndexes()

Rearrange the version-dependent pieces in the new more modular style.
---
 src/bin/pg_dump/pg_dump.c | 119 ++++++++++++++------------------------
 1 file changed, 44 insertions(+), 75 deletions(-)

diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 15dae8bd88..c368808dd9 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -6508,6 +6508,50 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int 
numTables)
        }
        appendPQExpBufferChar(tbloids, '}');
 
+       resetPQExpBuffer(query);
+
+       appendPQExpBuffer(query,
+                                         "SELECT t.tableoid, t.oid, 
i.indrelid, "
+                                         "t.relname AS indexname, "
+                                         
"pg_catalog.pg_get_indexdef(i.indexrelid) AS indexdef, "
+                                         "i.indkey, i.indisclustered, "
+                                         "c.contype, c.conname, "
+                                         "c.condeferrable, c.condeferred, "
+                                         "c.tableoid AS contableoid, "
+                                         "c.oid AS conoid, "
+                                         
"pg_catalog.pg_get_constraintdef(c.oid, false) AS condef, "
+                                         "(SELECT spcname FROM 
pg_catalog.pg_tablespace s WHERE s.oid = t.reltablespace) AS tablespace, "
+                                         "t.reloptions AS indreloptions, ");
+
+
+       if (fout->remoteVersion >= 90400)
+               appendPQExpBuffer(query,
+                                                 "i.indisreplident, ");
+       else
+               appendPQExpBuffer(query,
+                                                 "false AS indisreplident, ");
+
+       if (fout->remoteVersion >= 110000)
+               appendPQExpBuffer(query,
+                                                 "inh.inhparent AS parentidx, "
+                                                 "i.indnkeyatts AS 
indnkeyatts, "
+                                                 "i.indnatts AS indnatts, "
+                                                 "(SELECT 
pg_catalog.array_agg(attnum ORDER BY attnum) "
+                                                 "  FROM 
pg_catalog.pg_attribute "
+                                                 "  WHERE attrelid = 
i.indexrelid AND "
+                                                 "    attstattarget >= 0) AS 
indstatcols, "
+                                                 "(SELECT 
pg_catalog.array_agg(attstattarget ORDER BY attnum) "
+                                                 "  FROM 
pg_catalog.pg_attribute "
+                                                 "  WHERE attrelid = 
i.indexrelid AND "
+                                                 "    attstattarget >= 0) AS 
indstatvals ");
+       else
+               appendPQExpBuffer(query,
+                                                 "0 AS parentidx, "
+                                                 "i.indnatts AS indnkeyatts, "
+                                                 "i.indnatts AS indnatts, "
+                                                 "'' AS indstatcols, "
+                                                 "'' AS indstatvals ");
+
        /*
         * The point of the messy-looking outer join is to find a constraint 
that
         * is related by an internal dependency link to the index. If we find 
one,
@@ -6520,29 +6564,6 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int 
numTables)
        if (fout->remoteVersion >= 110000)
        {
                appendPQExpBuffer(query,
-                                                 "SELECT t.tableoid, t.oid, 
i.indrelid, "
-                                                 "t.relname AS indexname, "
-                                                 "inh.inhparent AS parentidx, "
-                                                 
"pg_catalog.pg_get_indexdef(i.indexrelid) AS indexdef, "
-                                                 "i.indnkeyatts AS 
indnkeyatts, "
-                                                 "i.indnatts AS indnatts, "
-                                                 "i.indkey, i.indisclustered, "
-                                                 "i.indisreplident, "
-                                                 "c.contype, c.conname, "
-                                                 "c.condeferrable, 
c.condeferred, "
-                                                 "c.tableoid AS contableoid, "
-                                                 "c.oid AS conoid, "
-                                                 
"pg_catalog.pg_get_constraintdef(c.oid, false) AS condef, "
-                                                 "(SELECT spcname FROM 
pg_catalog.pg_tablespace s WHERE s.oid = t.reltablespace) AS tablespace, "
-                                                 "t.reloptions AS 
indreloptions, "
-                                                 "(SELECT 
pg_catalog.array_agg(attnum ORDER BY attnum) "
-                                                 "  FROM 
pg_catalog.pg_attribute "
-                                                 "  WHERE attrelid = 
i.indexrelid AND "
-                                                 "    attstattarget >= 0) AS 
indstatcols,"
-                                                 "(SELECT 
pg_catalog.array_agg(attstattarget ORDER BY attnum) "
-                                                 "  FROM 
pg_catalog.pg_attribute "
-                                                 "  WHERE attrelid = 
i.indexrelid AND "
-                                                 "    attstattarget >= 0) AS 
indstatvals "
                                                  "FROM 
unnest('%s'::pg_catalog.oid[]) AS src(tbloid)\n"
                                                  "JOIN pg_catalog.pg_index i 
ON (src.tbloid = i.indrelid) "
                                                  "JOIN pg_catalog.pg_class t 
ON (t.oid = i.indexrelid) "
@@ -6558,41 +6579,6 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int 
numTables)
                                                  "ORDER BY i.indrelid, 
indexname",
                                                  tbloids->data);
        }
-       else if (fout->remoteVersion >= 90400)
-       {
-               /*
-                * the test on indisready is necessary in 9.2, and harmless in
-                * earlier/later versions
-                */
-               appendPQExpBuffer(query,
-                                                 "SELECT t.tableoid, t.oid, 
i.indrelid, "
-                                                 "t.relname AS indexname, "
-                                                 "0 AS parentidx, "
-                                                 
"pg_catalog.pg_get_indexdef(i.indexrelid) AS indexdef, "
-                                                 "i.indnatts AS indnkeyatts, "
-                                                 "i.indnatts AS indnatts, "
-                                                 "i.indkey, i.indisclustered, "
-                                                 "i.indisreplident, "
-                                                 "c.contype, c.conname, "
-                                                 "c.condeferrable, 
c.condeferred, "
-                                                 "c.tableoid AS contableoid, "
-                                                 "c.oid AS conoid, "
-                                                 
"pg_catalog.pg_get_constraintdef(c.oid, false) AS condef, "
-                                                 "(SELECT spcname FROM 
pg_catalog.pg_tablespace s WHERE s.oid = t.reltablespace) AS tablespace, "
-                                                 "t.reloptions AS 
indreloptions, "
-                                                 "'' AS indstatcols, "
-                                                 "'' AS indstatvals "
-                                                 "FROM 
unnest('%s'::pg_catalog.oid[]) AS src(tbloid)\n"
-                                                 "JOIN pg_catalog.pg_index i 
ON (src.tbloid = i.indrelid) "
-                                                 "JOIN pg_catalog.pg_class t 
ON (t.oid = i.indexrelid) "
-                                                 "LEFT JOIN 
pg_catalog.pg_constraint c "
-                                                 "ON (i.indrelid = c.conrelid 
AND "
-                                                 "i.indexrelid = c.conindid 
AND "
-                                                 "c.contype IN ('p','u','x')) "
-                                                 "WHERE i.indisvalid AND 
i.indisready "
-                                                 "ORDER BY i.indrelid, 
indexname",
-                                                 tbloids->data);
-       }
        else
        {
                /*
@@ -6600,23 +6586,6 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int 
numTables)
                 * earlier/later versions
                 */
                appendPQExpBuffer(query,
-                                                 "SELECT t.tableoid, t.oid, 
i.indrelid, "
-                                                 "t.relname AS indexname, "
-                                                 "0 AS parentidx, "
-                                                 
"pg_catalog.pg_get_indexdef(i.indexrelid) AS indexdef, "
-                                                 "i.indnatts AS indnkeyatts, "
-                                                 "i.indnatts AS indnatts, "
-                                                 "i.indkey, i.indisclustered, "
-                                                 "false AS indisreplident, "
-                                                 "c.contype, c.conname, "
-                                                 "c.condeferrable, 
c.condeferred, "
-                                                 "c.tableoid AS contableoid, "
-                                                 "c.oid AS conoid, "
-                                                 
"pg_catalog.pg_get_constraintdef(c.oid, false) AS condef, "
-                                                 "(SELECT spcname FROM 
pg_catalog.pg_tablespace s WHERE s.oid = t.reltablespace) AS tablespace, "
-                                                 "t.reloptions AS 
indreloptions, "
-                                                 "'' AS indstatcols, "
-                                                 "'' AS indstatvals "
                                                  "FROM 
unnest('%s'::pg_catalog.oid[]) AS src(tbloid)\n"
                                                  "JOIN pg_catalog.pg_index i 
ON (src.tbloid = i.indrelid) "
                                                  "JOIN pg_catalog.pg_class t 
ON (t.oid = i.indexrelid) "
-- 
2.34.1

Reply via email to