diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index 6b72745..482cca6 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -1561,49 +1561,69 @@ describeTableDetails(const char *pattern, bool verbose, bool showSystem) } /* - * If is_tbl_desc is true add footer to table description else add footer to - * publication description. + * Add a footer to a publication description or a table description. + * + * 'is_pub_desc' - true for a pub desc; false for a table desc + * 'as_schema' - true if the pub_desc only shows schemas, otherwise false */ static bool -addFooterToPublicationOrTableDesc(PQExpBuffer buf, const char *footermsg, - bool as_schema, printTableContent *const cont, - bool is_tbl_desc) +addFooterToPublicationOrTableDesc(PQExpBuffer buf, + printTableContent *const cont, + const char *footermsg, + bool is_pub_desc, bool as_schema) { PGresult *res; - int count = 0; - int i = 0; - int col = is_tbl_desc ? 0 : 1; + int count; + int col = is_pub_desc ? 1 : 0; res = PSQLexec(buf->data); if (!res) return false; - else - count = PQntuples(res); + count = PQntuples(res); if (count > 0) printTableAddFooter(cont, footermsg); - /*--------------------------------------------------- - * Publication/ table description columns: - * [0]: schema name (nspname) - * [col]: table name (relname) / publication name (pubname) - * [col + 1]: row filter expression (prqual), may be NULL - * [col + 2]: column list (comma-separated), may be NULL - * [col + 3]: except flag ("t" if EXCEPT, else "f") - *--------------------------------------------------- + /*-------------------------------------------------------------- + * Description columns: + * + * PUB TBL + * [0] - : schema name (nspname) + * [col] - : table name (relname) + * - [col] : publication name (pubname) + * [col+1] [col+1]: row filter expression (prqual), may be NULL + * [col+2] [col+1]: column list (comma-separated), may be NULL + * [col+3] [col+1]: except flag ("t" if EXCEPT, else "f") + *-------------------------------------------------------------- */ - for (i = 0; i < count; i++) + for (int i = 0; i < count; i++) { - if (as_schema) - printfPQExpBuffer(buf, " \"%s\"", PQgetvalue(res, i, 0)); - else + printfPQExpBuffer(buf, " "); /* indent */ + + /* Footers entries for a publication description or a table description */ + if (is_pub_desc) { - if (is_tbl_desc) - printfPQExpBuffer(buf, " \"%s\"", PQgetvalue(res, i, col)); + if (as_schema) + { + /* Schemas of the publication... */ + appendPQExpBuffer(buf, "\"%s\"", PQgetvalue(res, i, 0)); + } else - printfPQExpBuffer(buf, " \"%s.%s\"", PQgetvalue(res, i, 0), + { + /* Tables of the publication... */ + appendPQExpBuffer(buf, "\"%s.%s\"", PQgetvalue(res, i, 0), PQgetvalue(res, i, col)); + } + } + else + { + /* Publications of the table... */ + appendPQExpBuffer(buf, "\"%s\"", PQgetvalue(res, i, col)); + } + /* Common footer output for column list and/or row filter */ + if (!as_schema) + { if (!PQgetisnull(res, i, col + 2)) { if (strcmp(PQgetvalue(res, i, col + 3), "t") == 0) @@ -3192,7 +3212,7 @@ describeOneTableDetails(const char *schemaname, oid, oid); } - if (!addFooterToPublicationOrTableDesc(&buf, _("Publications:"), false, &cont, true)) + if (!addFooterToPublicationOrTableDesc(&buf, &cont, _("Publications:"), false, false)) goto error_return; } @@ -6755,7 +6775,7 @@ describePublications(const char *pattern) " AND pr.prpubid = '%s'\n", pubid); appendPQExpBuffer(&buf, "ORDER BY 1,2"); - if (!addFooterToPublicationOrTableDesc(&buf, _("Tables:"), false, &cont, false)) + if (!addFooterToPublicationOrTableDesc(&buf, &cont, _("Tables:"), true, false)) goto error_return; if (pset.sversion >= 150000) @@ -6767,8 +6787,8 @@ describePublications(const char *pattern) " JOIN pg_catalog.pg_publication_namespace pn ON n.oid = pn.pnnspid\n" "WHERE pn.pnpubid = '%s'\n" "ORDER BY 1", pubid); - if (!addFooterToPublicationOrTableDesc(&buf, _("Tables from schemas:"), - true, &cont, false)) + if (!addFooterToPublicationOrTableDesc(&buf, &cont, + _("Tables from schemas:"), true, true)) goto error_return; } } @@ -6784,8 +6804,8 @@ describePublications(const char *pattern) "WHERE pr.prpubid = '%s'\n" " AND pr.prexcept\n" "ORDER BY 1", pubid); - if (!addFooterToPublicationOrTableDesc(&buf, _("Except tables:"), - true, &cont, false)) + if (!addFooterToPublicationOrTableDesc(&buf, &cont, + _("Except tables:"), true, true)) goto error_return; } }