From 7b0176d2d41d7696c829b658465e68bbadb7cfe2 Mon Sep 17 00:00:00 2001 From: shihao zhong Date: Tue, 13 Oct 2026 23:14:28 -0400 Subject: [PATCH v3] psql: Fall back to English for unsafe hidden query labels. Since 41d69e6dcca the labels are translated, and the server rejects the query when the translation is not valid in the client or database encoding. Add addQueryComment(), which uses a non-ASCII translation only when gettext's output, client and server encodings are known to match. --- src/bin/psql/command.c | 8 +- src/bin/psql/common.c | 40 +++++++++ src/bin/psql/common.h | 1 + src/bin/psql/describe.c | 191 +++++++++++++++++----------------------- 4 files changed, 125 insertions(+), 115 deletions(-) diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index 2fc34b83a5a..a97f52b8ec8 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -6220,7 +6220,7 @@ lookup_object_oid(EditableObjectType obj_type, const char *desc, * query to retrieve the function's OID using a cast to regproc or * regprocedure (as appropriate). */ - printfPQExpBuffer(query, "/* %s */\n", _("Get function's OID")); + addQueryComment(query, gettext_noop("Get function's OID")); appendPQExpBufferStr(query, "SELECT "); appendStringLiteralConn(query, desc, pset.db); appendPQExpBuffer(query, "::pg_catalog.%s::pg_catalog.oid", @@ -6234,7 +6234,7 @@ lookup_object_oid(EditableObjectType obj_type, const char *desc, * this code doesn't check if the relation is actually a view. * We'll detect that in get_create_object_cmd(). */ - printfPQExpBuffer(query, "/* %s */\n", _("Get view's OID")); + addQueryComment(query, gettext_noop("Get view's OID")); appendPQExpBufferStr(query, "SELECT "); appendStringLiteralConn(query, desc, pset.db); appendPQExpBufferStr(query, "::pg_catalog.regclass::pg_catalog.oid"); @@ -6276,7 +6276,7 @@ get_create_object_cmd(EditableObjectType obj_type, Oid oid, switch (obj_type) { case EditableFunction: - printfPQExpBuffer(query, "/* %s */\n", _("Get function's definition")); + addQueryComment(query, gettext_noop("Get function's definition")); appendPQExpBuffer(query, "SELECT pg_catalog.pg_get_functiondef(%u)", oid); @@ -6295,7 +6295,7 @@ get_create_object_cmd(EditableObjectType obj_type, Oid oid, * and so need to be retrieved separately. Materialized views may * have arbitrary storage parameter reloptions. */ - printfPQExpBuffer(query, "/* %s */\n", _("Get view's definition and details")); + addQueryComment(query, gettext_noop("Get view's definition and details")); appendPQExpBuffer(query, "SELECT nspname, relname, relkind, " "pg_catalog.pg_get_viewdef(c.oid, true), " diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c index f220344daaf..bd75081eaa8 100644 --- a/src/bin/psql/common.c +++ b/src/bin/psql/common.c @@ -22,6 +22,7 @@ #include "command.h" #include "common.h" #include "common/logging.h" +#include "common/string.h" #include "copy.h" #include "crosstabview.h" #include "fe_utils/cancel.h" @@ -643,6 +644,45 @@ PrintTiming(double elapsed_msec) } +/* + * addQueryComment + * + * Reset buf and start it with a comment holding label, which must be marked + * with gettext_noop(). The comment shows up in the -E output and in the + * server log. + * + * The server converts the query from the client encoding to the database + * encoding, so a translation that is not plain ASCII is only used when we + * know it is in an encoding that survives that. gettext produces it in the + * encoding of LC_CTYPE, unless OUTPUT_CHARSET overrides it. On Windows the + * encoding gettext uses is not certain to match what we would compute, so + * don't try there. Otherwise use the English label. + */ +void +addQueryComment(PQExpBuffer buf, const char *label) +{ + const char *translated = _(label); + + if (translated != label && !pg_is_ascii(translated)) + { +#ifndef WIN32 + const char *server_enc = PQparameterStatus(pset.db, "server_encoding"); + int client_enc = PQclientEncoding(pset.db); + + if (getenv("OUTPUT_CHARSET") != NULL || + server_enc == NULL || + pg_char_to_encoding(server_enc) != client_enc || + pg_get_encoding_from_locale(NULL, false) != client_enc) + translated = label; +#else + translated = label; +#endif + } + + printfPQExpBuffer(buf, "/* %s */\n", translated); +} + + /* * PSQLexec * diff --git a/src/bin/psql/common.h b/src/bin/psql/common.h index d4b99b42331..eb8c2e7668a 100644 --- a/src/bin/psql/common.h +++ b/src/bin/psql/common.h @@ -31,6 +31,7 @@ extern void psql_setup_cancel_handler(void); extern void SetShellResultVariables(int wait_result); +extern void addQueryComment(PQExpBuffer buf, const char *label); extern PGresult *PSQLexec(const char *query); extern int PSQLexecWatch(const char *query, const printQueryOpt *opt, FILE *printQueryFout, int min_rows); diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index dc9b3841592..04c1d295560 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -83,7 +83,7 @@ describeAggregates(const char *pattern, bool verbose, bool showSystem) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching aggregates")); + addQueryComment(&buf, gettext_noop("Get matching aggregates")); appendPQExpBuffer(&buf, "SELECT n.nspname as \"%s\",\n" " p.proname AS \"%s\",\n" @@ -155,7 +155,7 @@ describeAccessMethods(const char *pattern, bool verbose) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching access methods")); + addQueryComment(&buf, gettext_noop("Get matching access methods")); appendPQExpBuffer(&buf, "SELECT amname AS \"%s\",\n" " CASE amtype" @@ -219,7 +219,7 @@ describeTablespaces(const char *pattern, bool verbose) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching tablespaces")); + addQueryComment(&buf, gettext_noop("Get matching tablespaces")); appendPQExpBuffer(&buf, "SELECT spcname AS \"%s\",\n" " pg_catalog.pg_get_userbyid(spcowner) AS \"%s\",\n" @@ -327,7 +327,7 @@ describeFunctions(const char *functypes, const char *func_pattern, initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching functions")); + addQueryComment(&buf, gettext_noop("Get matching functions")); appendPQExpBuffer(&buf, "SELECT n.nspname as \"%s\",\n" " p.proname as \"%s\",\n", @@ -626,7 +626,7 @@ describeTypes(const char *pattern, bool verbose, bool showSystem) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching types")); + addQueryComment(&buf, gettext_noop("Get matching types")); appendPQExpBuffer(&buf, "SELECT n.nspname as \"%s\",\n" " pg_catalog.format_type(t.oid, NULL) AS \"%s\",\n", @@ -801,7 +801,7 @@ describeOperators(const char *oper_pattern, * to pre-v14 servers. */ - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching operators")); + addQueryComment(&buf, gettext_noop("Get matching operators")); appendPQExpBuffer(&buf, "SELECT n.nspname as \"%s\",\n" " o.oprname AS \"%s\",\n" @@ -935,7 +935,7 @@ listAllDbs(const char *pattern, bool verbose) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching databases")); + addQueryComment(&buf, gettext_noop("Get matching databases")); appendPQExpBuffer(&buf, "SELECT\n" " d.datname as \"%s\",\n" @@ -1045,8 +1045,7 @@ permissionsList(const char *pattern, bool showSystem) /* * we ignore indexes and toast tables since they have no meaningful rights */ - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get access privileges of matching relations")); + addQueryComment(&buf, gettext_noop("Get access privileges of matching relations")); appendPQExpBuffer(&buf, "SELECT n.nspname as \"%s\",\n" " c.relname as \"%s\",\n" @@ -1176,7 +1175,7 @@ listDefaultACLs(const char *pattern) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching default ACLs")); + addQueryComment(&buf, gettext_noop("Get matching default ACLs")); appendPQExpBuffer(&buf, "SELECT pg_catalog.pg_get_userbyid(d.defaclrole) AS \"%s\",\n" " n.nspname AS \"%s\",\n" @@ -1258,7 +1257,7 @@ objectDescription(const char *pattern, bool showSystem) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching object comments")); + addQueryComment(&buf, gettext_noop("Get matching object comments")); appendPQExpBuffer(&buf, "SELECT DISTINCT tt.nspname AS \"%s\", tt.name AS \"%s\", tt.object AS \"%s\", d.description AS \"%s\"\n" "FROM (\n", @@ -1451,8 +1450,7 @@ describeTableDetails(const char *pattern, bool verbose, bool showSystem) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get matching relations to describe")); + addQueryComment(&buf, gettext_noop("Get matching relations to describe")); appendPQExpBufferStr(&buf, "SELECT c.oid,\n" " n.nspname,\n" @@ -1589,8 +1587,7 @@ describeOneTableDetails(const char *schemaname, initPQExpBuffer(&tmpbuf); /* Get general table info */ - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get general information about one relation")); + addQueryComment(&buf, gettext_noop("Get general information about one relation")); if (pset.sversion >= 120000) { appendPQExpBuffer(&buf, @@ -1671,7 +1668,7 @@ describeOneTableDetails(const char *schemaname, printQueryOpt popt = pset.popt; char *footers[3] = {NULL, NULL, NULL}; - printfPQExpBuffer(&buf, "/* %s */\n", _("Get sequence information")); + addQueryComment(&buf, gettext_noop("Get sequence information")); appendPQExpBuffer(&buf, "SELECT pg_catalog.format_type(seqtypid, NULL) AS \"%s\",\n" " seqstart AS \"%s\",\n" @@ -1699,8 +1696,7 @@ describeOneTableDetails(const char *schemaname, goto error_return; /* Get the column that owns this sequence */ - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get the column that owns this sequence")); + addQueryComment(&buf, gettext_noop("Get the column that owns this sequence")); appendPQExpBuffer(&buf, "SELECT pg_catalog.quote_ident(nspname) || '.' ||" "\n pg_catalog.quote_ident(relname) || '.' ||" "\n pg_catalog.quote_ident(attname)," @@ -1745,8 +1741,7 @@ describeOneTableDetails(const char *schemaname, /* Print any publications */ if (pset.sversion >= 190000) { - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get publications containing this sequence")); + addQueryComment(&buf, gettext_noop("Get publications containing this sequence")); appendPQExpBuffer(&buf, "SELECT pubname FROM pg_catalog.pg_publication p" "\nWHERE p.puballsequences" "\n AND pg_catalog.pg_relation_is_publishable('%s')" @@ -1816,8 +1811,7 @@ describeOneTableDetails(const char *schemaname, * duplicative test logic below. */ cols = 0; - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get per-column information for one relation")); + addQueryComment(&buf, gettext_noop("Get per-column information for one relation")); appendPQExpBufferStr(&buf, "SELECT a.attname"); attname_col = cols++; appendPQExpBufferStr(&buf, ",\n pg_catalog.format_type(a.atttypid, a.atttypmod)"); @@ -2117,8 +2111,7 @@ describeOneTableDetails(const char *schemaname, /* Footer information for a partition child table */ PGresult *result; - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get partitioning information for this partition")); + addQueryComment(&buf, gettext_noop("Get partitioning information for this partition")); appendPQExpBufferStr(&buf, "SELECT inhparent::pg_catalog.regclass,\n" " pg_catalog.pg_get_expr(c.relpartbound, c.oid),\n "); @@ -2174,8 +2167,7 @@ describeOneTableDetails(const char *schemaname, /* Footer information for a partitioned table (partitioning parent) */ PGresult *result; - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get partitioning information for this table")); + addQueryComment(&buf, gettext_noop("Get partitioning information for this table")); appendPQExpBuffer(&buf, "SELECT pg_catalog.pg_get_partkeydef('%s'::pg_catalog.oid);", oid); @@ -2198,8 +2190,7 @@ describeOneTableDetails(const char *schemaname, /* For a TOAST table, print name of owning table */ PGresult *result; - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get the table that owns this TOAST table")); + addQueryComment(&buf, gettext_noop("Get the table that owns this TOAST table")); appendPQExpBuffer(&buf, "SELECT n.nspname, c.relname\n" "FROM pg_catalog.pg_class c" @@ -2228,7 +2219,7 @@ describeOneTableDetails(const char *schemaname, /* Footer information about an index */ PGresult *result; - printfPQExpBuffer(&buf, "/* %s */\n", _("Get index details")); + addQueryComment(&buf, gettext_noop("Get index details")); appendPQExpBufferStr(&buf, "SELECT i.indisunique, i.indisprimary, i.indisclustered, " "i.indisvalid,\n" @@ -2347,7 +2338,7 @@ describeOneTableDetails(const char *schemaname, /* print indexes */ if (tableinfo.hasindex) { - printfPQExpBuffer(&buf, "/* %s */\n", _("Get indexes for this table")); + addQueryComment(&buf, gettext_noop("Get indexes for this table")); appendPQExpBufferStr(&buf, "SELECT c2.relname, i.indisprimary, i.indisunique, " "i.indisclustered, i.indisvalid, " @@ -2449,8 +2440,7 @@ describeOneTableDetails(const char *schemaname, /* print table (and column) check constraints */ if (tableinfo.checks) { - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get check constraints for this table")); + addQueryComment(&buf, gettext_noop("Get check constraints for this table")); appendPQExpBuffer(&buf, "SELECT r.conname, " "pg_catalog.pg_get_constraintdef(r.oid, true)\n" @@ -2482,8 +2472,7 @@ describeOneTableDetails(const char *schemaname, } /* Print foreign-key constraints */ - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get foreign key constraints for this table")); + addQueryComment(&buf, gettext_noop("Get foreign key constraints for this table")); if (pset.sversion >= 120000 && (tableinfo.ispartition || tableinfo.relkind == RELKIND_PARTITIONED_TABLE)) { @@ -2554,8 +2543,7 @@ describeOneTableDetails(const char *schemaname, PQclear(result); /* print incoming foreign-key references */ - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get foreign keys referencing this table")); + addQueryComment(&buf, gettext_noop("Get foreign keys referencing this table")); if (pset.sversion >= 120000) { appendPQExpBuffer(&buf, @@ -2605,8 +2593,7 @@ describeOneTableDetails(const char *schemaname, PQclear(result); /* print any row-level policies */ - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get row-level policies for this table")); + addQueryComment(&buf, gettext_noop("Get row-level policies for this table")); appendPQExpBufferStr(&buf, "SELECT pol.polname,"); appendPQExpBufferStr(&buf, " pol.polpermissive,\n"); @@ -2683,8 +2670,7 @@ describeOneTableDetails(const char *schemaname, /* print any extended statistics */ if (pset.sversion >= 140000) { - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get extended statistics for this table")); + addQueryComment(&buf, gettext_noop("Get extended statistics for this table")); appendPQExpBuffer(&buf, "SELECT oid, " "stxrelid::pg_catalog.regclass, " @@ -2783,8 +2769,7 @@ describeOneTableDetails(const char *schemaname, } else { - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get extended statistics for this table")); + addQueryComment(&buf, gettext_noop("Get extended statistics for this table")); appendPQExpBufferStr(&buf, "SELECT oid, " "stxrelid::pg_catalog.regclass, " @@ -2864,8 +2849,7 @@ describeOneTableDetails(const char *schemaname, /* print rules */ if (tableinfo.hasrules && tableinfo.relkind != RELKIND_MATVIEW) { - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get rules for this relation")); + addQueryComment(&buf, gettext_noop("Get rules for this relation")); appendPQExpBuffer(&buf, "SELECT r.rulename, trim(trailing ';' from pg_catalog.pg_get_ruledef(r.oid, true)), " "ev_enabled\n" @@ -2947,8 +2931,7 @@ describeOneTableDetails(const char *schemaname, } /* print any publications */ - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get publications that publish this table")); + addQueryComment(&buf, gettext_noop("Get publications that publish this table")); if (pset.sversion >= 150000) { appendPQExpBuffer(&buf, @@ -3070,8 +3053,7 @@ describeOneTableDetails(const char *schemaname, /* Print publications where the table is in the EXCEPT clause */ if (pset.sversion >= 190000) { - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get publications that exclude this table")); + addQueryComment(&buf, gettext_noop("Get publications that exclude this table")); appendPQExpBuffer(&buf, "SELECT pubname\n" "FROM pg_catalog.pg_publication p\n" @@ -3104,8 +3086,7 @@ describeOneTableDetails(const char *schemaname, */ if (verbose) { - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get not-null constraints for this table")); + addQueryComment(&buf, gettext_noop("Get not-null constraints for this table")); appendPQExpBuffer(&buf, "SELECT c.conname, a.attname, c.connoinherit,\n" " c.conislocal, c.coninhcount <> 0,\n" @@ -3155,7 +3136,7 @@ describeOneTableDetails(const char *schemaname, { PGresult *result; - printfPQExpBuffer(&buf, "/* %s */\n", _("Get view's definition")); + addQueryComment(&buf, gettext_noop("Get view's definition")); appendPQExpBuffer(&buf, "SELECT pg_catalog.pg_get_viewdef('%s'::pg_catalog.oid, true);", oid); @@ -3180,7 +3161,7 @@ describeOneTableDetails(const char *schemaname, /* print rules */ if (tableinfo.hasrules) { - printfPQExpBuffer(&buf, "/* %s */\n", _("Get rules for this view")); + addQueryComment(&buf, gettext_noop("Get rules for this view")); appendPQExpBuffer(&buf, "SELECT r.rulename, trim(trailing ';' from pg_catalog.pg_get_ruledef(r.oid, true))\n" "FROM pg_catalog.pg_rewrite r\n" @@ -3218,8 +3199,7 @@ describeOneTableDetails(const char *schemaname, PGresult *result; int tuples; - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get triggers for this relation")); + addQueryComment(&buf, gettext_noop("Get triggers for this relation")); appendPQExpBufferStr(&buf, "SELECT t.tgname, " "pg_catalog.pg_get_triggerdef(t.oid, true), " @@ -3403,8 +3383,7 @@ describeOneTableDetails(const char *schemaname, char *ftoptions; /* Footer information about foreign table */ - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get foreign server for this table")); + addQueryComment(&buf, gettext_noop("Get foreign server for this table")); appendPQExpBuffer(&buf, "SELECT s.srvname,\n" " pg_catalog.array_to_string(ARRAY(\n" @@ -3440,8 +3419,7 @@ describeOneTableDetails(const char *schemaname, } /* print tables inherited from (exclude partitioned parents) */ - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get inheritance parent tables")); + addQueryComment(&buf, gettext_noop("Get inheritance parent tables")); appendPQExpBuffer(&buf, "SELECT c.oid::pg_catalog.regclass\n" "FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i\n" @@ -3476,7 +3454,7 @@ describeOneTableDetails(const char *schemaname, } /* print child tables (with additional info if partitions) */ - printfPQExpBuffer(&buf, "/* %s */\n", _("Get child tables")); + addQueryComment(&buf, gettext_noop("Get child tables")); if (pset.sversion >= 140000) appendPQExpBuffer(&buf, "SELECT c.oid::pg_catalog.regclass, c.relkind," @@ -3662,8 +3640,7 @@ add_tablespace_footer(printTableContent *cont, char relkind, PQExpBufferData buf; initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get tablespace information for this relation")); + addQueryComment(&buf, gettext_noop("Get tablespace information for this relation")); appendPQExpBuffer(&buf, "SELECT spcname FROM pg_catalog.pg_tablespace\n" "WHERE oid = '%u';", tablespace); @@ -3725,7 +3702,7 @@ describeRoles(const char *pattern, bool verbose, bool showSystem) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching roles")); + addQueryComment(&buf, gettext_noop("Get matching roles")); appendPQExpBufferStr(&buf, "SELECT r.rolname, r.rolsuper, r.rolinherit,\n" " r.rolcreaterole, r.rolcreatedb, r.rolcanlogin,\n" @@ -3860,7 +3837,7 @@ listDbRoleSettings(const char *pattern, const char *pattern2) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get per-database and per-role settings")); + addQueryComment(&buf, gettext_noop("Get per-database and per-role settings")); appendPQExpBuffer(&buf, "SELECT rolname AS \"%s\", datname AS \"%s\",\n" "pg_catalog.array_to_string(setconfig, E'\\n') AS \"%s\"\n" "FROM pg_catalog.pg_db_role_setting s\n" @@ -3928,7 +3905,7 @@ describeRoleGrants(const char *pattern, bool showSystem) printQueryOpt myopt = pset.popt; initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching role grants")); + addQueryComment(&buf, gettext_noop("Get matching role grants")); appendPQExpBuffer(&buf, "SELECT m.rolname AS \"%s\", r.rolname AS \"%s\",\n" " pg_catalog.concat_ws(', ',\n", @@ -4026,7 +4003,7 @@ listTables(const char *tabtypes, const char *pattern, bool verbose, bool showSys initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching relations")); + addQueryComment(&buf, gettext_noop("Get matching relations")); appendPQExpBuffer(&buf, "SELECT n.nspname as \"%s\",\n" " c.relname as \"%s\",\n" @@ -4287,8 +4264,7 @@ listPartitionedTables(const char *reltypes, const char *pattern, bool verbose) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get matching partitioned relations")); + addQueryComment(&buf, gettext_noop("Get matching partitioned relations")); appendPQExpBuffer(&buf, "SELECT n.nspname as \"%s\",\n" " c.relname as \"%s\",\n" @@ -4464,7 +4440,7 @@ listLanguages(const char *pattern, bool verbose, bool showSystem) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching procedural languages")); + addQueryComment(&buf, gettext_noop("Get matching procedural languages")); appendPQExpBuffer(&buf, "SELECT l.lanname AS \"%s\",\n" " pg_catalog.pg_get_userbyid(l.lanowner) as \"%s\",\n" @@ -4541,7 +4517,7 @@ listDomains(const char *pattern, bool verbose, bool showSystem) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching domains")); + addQueryComment(&buf, gettext_noop("Get matching domains")); appendPQExpBuffer(&buf, "SELECT n.nspname as \"%s\",\n" " t.typname as \"%s\",\n" @@ -4627,7 +4603,7 @@ listConversions(const char *pattern, bool verbose, bool showSystem) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching conversions")); + addQueryComment(&buf, gettext_noop("Get matching conversions")); appendPQExpBuffer(&buf, "SELECT n.nspname AS \"%s\",\n" " c.conname AS \"%s\",\n" @@ -4707,8 +4683,7 @@ describeConfigurationParameters(const char *pattern, bool verbose, initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get matching configuration parameters")); + addQueryComment(&buf, gettext_noop("Get matching configuration parameters")); appendPQExpBuffer(&buf, "SELECT s.name AS \"%s\", " "pg_catalog.current_setting(s.name) AS \"%s\"", @@ -4779,7 +4754,7 @@ listEventTriggers(const char *pattern, bool verbose) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching event triggers")); + addQueryComment(&buf, gettext_noop("Get matching event triggers")); appendPQExpBuffer(&buf, "SELECT evtname as \"%s\", " "evtevent as \"%s\", " @@ -4848,7 +4823,7 @@ listExtendedStats(const char *pattern, bool verbose) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching extended statistics")); + addQueryComment(&buf, gettext_noop("Get matching extended statistics")); appendPQExpBuffer(&buf, "SELECT \n" "es.stxnamespace::pg_catalog.regnamespace::pg_catalog.text AS \"%s\", \n" @@ -4942,7 +4917,7 @@ listCasts(const char *pattern, bool verbose) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching casts")); + addQueryComment(&buf, gettext_noop("Get matching casts")); appendPQExpBuffer(&buf, "SELECT pg_catalog.format_type(castsource, NULL) AS \"%s\",\n" " pg_catalog.format_type(casttarget, NULL) AS \"%s\",\n", @@ -5067,7 +5042,7 @@ listCollations(const char *pattern, bool verbose, bool showSystem) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching collations")); + addQueryComment(&buf, gettext_noop("Get matching collations")); appendPQExpBuffer(&buf, "SELECT\n" " n.nspname AS \"%s\",\n" @@ -5187,7 +5162,7 @@ listSchemas(const char *pattern, bool verbose, bool showSystem) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching schemas")); + addQueryComment(&buf, gettext_noop("Get matching schemas")); appendPQExpBuffer(&buf, "SELECT n.nspname AS \"%s\",\n" " pg_catalog.pg_get_userbyid(n.nspowner) AS \"%s\"", @@ -5231,8 +5206,7 @@ listSchemas(const char *pattern, bool verbose, bool showSystem) PGresult *result; int i; - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get publications that publish this schema")); + addQueryComment(&buf, gettext_noop("Get publications that publish this schema")); appendPQExpBuffer(&buf, "SELECT pubname \n" "FROM pg_catalog.pg_publication p\n" @@ -5313,7 +5287,7 @@ listTSParsers(const char *pattern, bool verbose) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching text search parsers")); + addQueryComment(&buf, gettext_noop("Get matching text search parsers")); appendPQExpBuffer(&buf, "SELECT\n" " n.nspname as \"%s\",\n" @@ -5363,7 +5337,7 @@ listTSParsersVerbose(const char *pattern) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching text search parsers")); + addQueryComment(&buf, gettext_noop("Get matching text search parsers")); appendPQExpBufferStr(&buf, "SELECT p.oid,\n" " n.nspname,\n" @@ -5441,7 +5415,7 @@ describeOneTSParser(const char *oid, const char *nspname, const char *prsname) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get text search parser details")); + addQueryComment(&buf, gettext_noop("Get text search parser details")); appendPQExpBuffer(&buf, "SELECT '%s' AS \"%s\",\n" " p.prsstart::pg_catalog.regproc AS \"%s\",\n" @@ -5510,8 +5484,7 @@ describeOneTSParser(const char *oid, const char *nspname, const char *prsname) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get text search parser token types")); + addQueryComment(&buf, gettext_noop("Get text search parser token types")); appendPQExpBuffer(&buf, "SELECT t.alias as \"%s\",\n" " t.description as \"%s\"\n" @@ -5562,7 +5535,7 @@ listTSDictionaries(const char *pattern, bool verbose) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching text search dictionaries")); + addQueryComment(&buf, gettext_noop("Get matching text search dictionaries")); appendPQExpBuffer(&buf, "SELECT\n" " n.nspname as \"%s\",\n" @@ -5628,7 +5601,7 @@ listTSTemplates(const char *pattern, bool verbose) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching text search templates")); + addQueryComment(&buf, gettext_noop("Get matching text search templates")); if (verbose) appendPQExpBuffer(&buf, "SELECT\n" @@ -5697,7 +5670,7 @@ listTSConfigs(const char *pattern, bool verbose) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching text search configurations")); + addQueryComment(&buf, gettext_noop("Get matching text search configurations")); appendPQExpBuffer(&buf, "SELECT\n" " n.nspname as \"%s\",\n" @@ -5744,7 +5717,7 @@ listTSConfigsVerbose(const char *pattern) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching text search configurations")); + addQueryComment(&buf, gettext_noop("Get matching text search configurations")); appendPQExpBufferStr(&buf, "SELECT c.oid, c.cfgname,\n" " n.nspname,\n" @@ -5831,7 +5804,7 @@ describeOneTSConfig(const char *oid, const char *nspname, const char *cfgname, initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get text search configuration details")); + addQueryComment(&buf, gettext_noop("Get text search configuration details")); appendPQExpBuffer(&buf, "SELECT\n" " ( SELECT t.alias FROM\n" @@ -5901,7 +5874,7 @@ listForeignDataWrappers(const char *pattern, bool verbose) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching foreign-data wrappers")); + addQueryComment(&buf, gettext_noop("Get matching foreign-data wrappers")); appendPQExpBuffer(&buf, "SELECT fdw.fdwname AS \"%s\",\n" " pg_catalog.pg_get_userbyid(fdw.fdwowner) AS \"%s\",\n" @@ -5974,7 +5947,7 @@ listForeignServers(const char *pattern, bool verbose) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching foreign servers")); + addQueryComment(&buf, gettext_noop("Get matching foreign servers")); appendPQExpBuffer(&buf, "SELECT s.srvname AS \"%s\",\n" " pg_catalog.pg_get_userbyid(s.srvowner) AS \"%s\",\n" @@ -6052,7 +6025,7 @@ listUserMappings(const char *pattern, bool verbose) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching user mappings")); + addQueryComment(&buf, gettext_noop("Get matching user mappings")); appendPQExpBuffer(&buf, "SELECT um.srvname AS \"%s\",\n" " um.usename AS \"%s\"", @@ -6109,7 +6082,7 @@ listForeignTables(const char *pattern, bool verbose) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching foreign tables")); + addQueryComment(&buf, gettext_noop("Get matching foreign tables")); appendPQExpBuffer(&buf, "SELECT n.nspname AS \"%s\",\n" " c.relname AS \"%s\",\n" @@ -6183,7 +6156,7 @@ listExtensions(const char *pattern) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching installed extensions")); + addQueryComment(&buf, gettext_noop("Get matching installed extensions")); appendPQExpBuffer(&buf, "SELECT e.extname AS \"%s\", " "e.extversion AS \"%s\", ae.default_version AS \"%s\"," @@ -6239,7 +6212,7 @@ listExtensionContents(const char *pattern) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching installed extensions")); + addQueryComment(&buf, gettext_noop("Get matching installed extensions")); appendPQExpBufferStr(&buf, "SELECT e.extname, e.oid\n" "FROM pg_catalog.pg_extension e\n"); @@ -6309,7 +6282,7 @@ listOneExtensionContents(const char *extname, const char *oid) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get installed extension's contents")); + addQueryComment(&buf, gettext_noop("Get installed extension's contents")); appendPQExpBuffer(&buf, "SELECT pg_catalog.pg_describe_object(classid, objid, 0) AS \"%s\"\n" "FROM pg_catalog.pg_depend\n" @@ -6408,7 +6381,7 @@ listPublications(const char *pattern) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching publications")); + addQueryComment(&buf, gettext_noop("Get matching publications")); appendPQExpBuffer(&buf, "SELECT pubname AS \"%s\",\n" " pg_catalog.pg_get_userbyid(pubowner) AS \"%s\",\n" @@ -6550,7 +6523,7 @@ describePublications(const char *pattern) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get details about matching publications")); + addQueryComment(&buf, gettext_noop("Get details about matching publications")); appendPQExpBufferStr(&buf, "SELECT oid, pubname,\n" " pg_catalog.pg_get_userbyid(pubowner) AS owner,\n" @@ -6687,8 +6660,7 @@ describePublications(const char *pattern) if (!puballtables) { /* Get the tables for the specified publication */ - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get tables published by this publication")); + addQueryComment(&buf, gettext_noop("Get tables published by this publication")); appendPQExpBufferStr(&buf, "SELECT n.nspname, c.relname"); if (pset.sversion >= 150000) { @@ -6738,8 +6710,7 @@ describePublications(const char *pattern) if (pset.sversion >= 150000) { /* Get the schemas for the specified publication */ - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get schemas published by this publication")); + addQueryComment(&buf, gettext_noop("Get schemas published by this publication")); appendPQExpBuffer(&buf, "SELECT n.nspname\n" "FROM pg_catalog.pg_namespace n\n" @@ -6756,8 +6727,7 @@ describePublications(const char *pattern) if (pset.sversion >= 190000) { /* Get tables in the EXCEPT clause for this publication */ - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get tables excluded by this publication")); + addQueryComment(&buf, gettext_noop("Get tables excluded by this publication")); appendPQExpBuffer(&buf, "SELECT n.nspname || '.' || c.relname\n" "FROM pg_catalog.pg_class c\n" @@ -6808,7 +6778,7 @@ describeSubscriptions(const char *pattern, bool verbose) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching subscriptions")); + addQueryComment(&buf, gettext_noop("Get matching subscriptions")); appendPQExpBuffer(&buf, "SELECT subname AS \"%s\"\n" ", pg_catalog.pg_get_userbyid(subowner) AS \"%s\"\n" @@ -6978,7 +6948,7 @@ listOperatorClasses(const char *access_method_pattern, initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching operator classes")); + addQueryComment(&buf, gettext_noop("Get matching operator classes")); appendPQExpBuffer(&buf, "SELECT\n" " am.amname AS \"%s\",\n" @@ -7080,7 +7050,7 @@ listOperatorFamilies(const char *access_method_pattern, initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get matching operator families")); + addQueryComment(&buf, gettext_noop("Get matching operator families")); appendPQExpBuffer(&buf, "SELECT\n" " am.amname AS \"%s\",\n" @@ -7171,7 +7141,7 @@ listOpFamilyOperators(const char *access_method_pattern, initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get operators of matching operator families")); + addQueryComment(&buf, gettext_noop("Get operators of matching operator families")); appendPQExpBuffer(&buf, "SELECT\n" " am.amname AS \"%s\",\n" @@ -7278,8 +7248,7 @@ listOpFamilyFunctions(const char *access_method_pattern, initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", - _("Get support functions of matching operator families")); + addQueryComment(&buf, gettext_noop("Get support functions of matching operator families")); appendPQExpBuffer(&buf, "SELECT\n" " am.amname AS \"%s\",\n" @@ -7366,7 +7335,7 @@ listLargeObjects(bool verbose) initPQExpBuffer(&buf); - printfPQExpBuffer(&buf, "/* %s */\n", _("Get large objects")); + addQueryComment(&buf, gettext_noop("Get large objects")); appendPQExpBuffer(&buf, "SELECT oid as \"%s\",\n" " pg_catalog.pg_get_userbyid(lomowner) as \"%s\",\n ", -- 2.37.1 (Apple Git-137.1)