diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2021-09-01 16:21:13 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2021-09-01 16:21:13 -0400 |
commit | 2dc53fe2a77d8d5f22c656fdf6590198e358a996 (patch) | |
tree | fd5466036f5ee90410784bd71ba41715649f0015 /contrib/postgres_fdw/postgres_fdw.c | |
parent | 537ca68dbb2463f7b1c44e9466b8fbdd7505b2e1 (diff) | |
download | postgresql-2dc53fe2a77d8d5f22c656fdf6590198e358a996.tar.gz postgresql-2dc53fe2a77d8d5f22c656fdf6590198e358a996.zip |
Refactor postgresImportForeignSchema to avoid code duplication.
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.
Diffstat (limited to 'contrib/postgres_fdw/postgres_fdw.c')
-rw-r--r-- | contrib/postgres_fdw/postgres_fdw.c | 50 |
1 files changed, 23 insertions, 27 deletions
diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c index 9d443baf02a..4bdab30a734 100644 --- a/contrib/postgres_fdw/postgres_fdw.c +++ b/contrib/postgres_fdw/postgres_fdw.c @@ -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); |