]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Refactor postgresImportForeignSchema to avoid code duplication.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 1 Sep 2021 20:21:13 +0000 (16:21 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 1 Sep 2021 20:21:13 +0000 (16:21 -0400)
Avoid repeating fragments of the query we're building, along the
same lines as recent cleanup in pg_dump.  I got annoyed about this
because aa769f80e broke my pending patch to change postgres_fdw's
collation handling, due to each of us having incompletely done
this same refactoring.  Let's finish that job in hopes of having
a more stable base.

contrib/postgres_fdw/postgres_fdw.c

index 9d443baf02acb1bdab04b5f285906351754adafd..4bdab30a7346eef79658fc1c3bfb3df54cff5aea 100644 (file)
@@ -5287,45 +5287,41 @@ postgresImportForeignSchema(ImportForeignSchemaStmt *stmt, Oid serverOid)
                                                           "SELECT relname, "
                                                           "  attname, "
                                                           "  format_type(atttypid, atttypmod), "
-                                                          "  attnotnull, ");
+                                                          "  attnotnull, "
+                                                          "  pg_get_expr(adbin, adrelid), ");
 
                /* Generated columns are supported since Postgres 12 */
                if (PQserverVersion(conn) >= 120000)
                        appendStringInfoString(&buf,
-                                                                  "  attgenerated, "
-                                                                  "  pg_get_expr(adbin, adrelid), ");
+                                                                  "  attgenerated, ");
                else
                        appendStringInfoString(&buf,
-                                                                  "  NULL, "
-                                                                  "  pg_get_expr(adbin, adrelid), ");
+                                                                  "  NULL, ");
 
                if (import_collate)
                        appendStringInfoString(&buf,
                                                                   "  collname, "
-                                                                  "  collnsp.nspname "
-                                                                  "FROM pg_class c "
-                                                                  "  JOIN pg_namespace n ON "
-                                                                  "    relnamespace = n.oid "
-                                                                  "  LEFT JOIN pg_attribute a ON "
-                                                                  "    attrelid = c.oid AND attnum > 0 "
-                                                                  "      AND NOT attisdropped "
-                                                                  "  LEFT JOIN pg_attrdef ad ON "
-                                                                  "    adrelid = c.oid AND adnum = attnum "
+                                                                  "  collnsp.nspname ");
+               else
+                       appendStringInfoString(&buf,
+                                                                  "  NULL, NULL ");
+
+               appendStringInfoString(&buf,
+                                                          "FROM pg_class c "
+                                                          "  JOIN pg_namespace n ON "
+                                                          "    relnamespace = n.oid "
+                                                          "  LEFT JOIN pg_attribute a ON "
+                                                          "    attrelid = c.oid AND attnum > 0 "
+                                                          "      AND NOT attisdropped "
+                                                          "  LEFT JOIN pg_attrdef ad ON "
+                                                          "    adrelid = c.oid AND adnum = attnum ");
+
+               if (import_collate)
+                       appendStringInfoString(&buf,
                                                                   "  LEFT JOIN pg_collation coll ON "
                                                                   "    coll.oid = attcollation "
                                                                   "  LEFT JOIN pg_namespace collnsp ON "
                                                                   "    collnsp.oid = collnamespace ");
-               else
-                       appendStringInfoString(&buf,
-                                                                  "  NULL, NULL "
-                                                                  "FROM pg_class c "
-                                                                  "  JOIN pg_namespace n ON "
-                                                                  "    relnamespace = n.oid "
-                                                                  "  LEFT JOIN pg_attribute a ON "
-                                                                  "    attrelid = c.oid AND attnum > 0 "
-                                                                  "      AND NOT attisdropped "
-                                                                  "  LEFT JOIN pg_attrdef ad ON "
-                                                                  "    adrelid = c.oid AND adnum = attnum ");
 
                appendStringInfoString(&buf,
                                                           "WHERE c.relkind IN ("
@@ -5405,9 +5401,9 @@ postgresImportForeignSchema(ImportForeignSchemaStmt *stmt, Oid serverOid)
                                attname = PQgetvalue(res, i, 1);
                                typename = PQgetvalue(res, i, 2);
                                attnotnull = PQgetvalue(res, i, 3);
-                               attgenerated = PQgetisnull(res, i, 4) ? (char *) NULL :
+                               attdefault = PQgetisnull(res, i, 4) ? (char *) NULL :
                                        PQgetvalue(res, i, 4);
-                               attdefault = PQgetisnull(res, i, 5) ? (char *) NULL :
+                               attgenerated = PQgetisnull(res, i, 5) ? (char *) NULL :
                                        PQgetvalue(res, i, 5);
                                collname = PQgetisnull(res, i, 6) ? (char *) NULL :
                                        PQgetvalue(res, i, 6);