Re: [HACKERS] Variable substitution in psql backtick expansion - Mailing list pgsql-hackers
From | Tom Lane |
---|---|
Subject | Re: [HACKERS] Variable substitution in psql backtick expansion |
Date | |
Msg-id | 2947.1504542679@sss.pgh.pa.us Whole thread Raw |
In response to | Re: [HACKERS] Variable substitution in psql backtick expansion (Fabien COELHO <coelho@cri.ensmp.fr>) |
Responses |
Re: [HACKERS] Variable substitution in psql backtick expansion
Re: [HACKERS] Variable substitution in psql backtick expansion Re: [HACKERS] Variable substitution in psql backtick expansion Re: [HACKERS] Variable substitution in psql backtick expansion |
List | pgsql-hackers |
So I thought we were done bikeshedding the variable names for this feature, but as I was reviewing the patch with intent to commit, I noticed you hadn't updated helpVariables() to mention them. Possibly you missed this because it doesn't mention VERSION either, but that doesn't seem very defensible. I inserted text to describe all five variables --- but "SERVER_VERSION_NAME" is too long to fit in the available column space. In the attached updated patch, I moved all the descriptive text over one column, and really should have moved it over two columns; but adding even one space makes a couple of the lines longer than 80 columns when they were not before. Since we've blown past 80 columns on some of the other output, maybe that doesn't matter. Or maybe we should shorten this variable name so it doesn't force reformatting of all this text. Possible ideas include "DB_VERSION_NAME", "SERVER_VER_NAME", or "SERVER_VERSION_STR". (The last saves only one character, whereas we really need to save two if we're trying not to be wider than any other documented variable.) Thoughts? Attached updated patch changes helpVariables() as we'd need to do if not renaming, and does some minor doc/comment wordsmithing elsewhere. regards, tom lane diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index c592eda..a693fb9 100644 *** a/doc/src/sgml/ref/psql-ref.sgml --- b/doc/src/sgml/ref/psql-ref.sgml *************** bar *** 3688,3693 **** --- 3688,3717 ---- </varlistentry> <varlistentry> + <term><varname>SERVER_VERSION_NAME</varname></term> + <listitem> + <para> + The server's version number as a string, for + example <literal>9.6.2</>, <literal>10.1</>, or <literal>11beta1</>. + This is set every time you connect to a database (including + program start-up), but can be changed or unset. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><varname>SERVER_VERSION_NUM</varname></term> + <listitem> + <para> + The server's version number in numeric form, for + example <literal>90602</> or <literal>100001</>. + This is set every time you connect to a database (including + program start-up), but can be changed or unset. + </para> + </listitem> + </varlistentry> + + <varlistentry> <term><varname>SINGLELINE</varname></term> <listitem> <para> *************** bar *** 3733,3742 **** <varlistentry> <term><varname>VERSION</varname></term> <listitem> <para> ! This variable is set at program start-up to ! reflect <application>psql</>'s version. It can be changed or unset. </para> </listitem> </varlistentry> --- 3757,3771 ---- <varlistentry> <term><varname>VERSION</varname></term> + <term><varname>VERSION_NAME</varname></term> + <term><varname>VERSION_NUM</varname></term> <listitem> <para> ! These variables are set at program start-up to reflect ! <application>psql</>'s version, respectively as a verbose string, ! a short string (e.g., <literal>9.6.2</>, <literal>10.1</>, ! or <literal>11beta1</>), and a number (e.g., <literal>90602</> ! or <literal>100001</>). They can be changed or unset. </para> </listitem> </varlistentry> diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index 96f3a40..4283bf3 100644 *** a/src/bin/psql/command.c --- b/src/bin/psql/command.c *************** checkWin32Codepage(void) *** 3337,3342 **** --- 3337,3345 ---- void SyncVariables(void) { + char vbuf[32]; + const char *server_version; + /* get stuff from connection */ pset.encoding = PQclientEncoding(pset.db); pset.popt.topt.encoding = pset.encoding; *************** SyncVariables(void) *** 3348,3353 **** --- 3351,3370 ---- SetVariable(pset.vars, "PORT", PQport(pset.db)); SetVariable(pset.vars, "ENCODING", pg_encoding_to_char(pset.encoding)); + /* this bit should match connection_warnings(): */ + /* Try to get full text form of version, might include "devel" etc */ + server_version = PQparameterStatus(pset.db, "server_version"); + /* Otherwise fall back on pset.sversion */ + if (!server_version) + { + formatPGVersionNumber(pset.sversion, true, vbuf, sizeof(vbuf)); + server_version = vbuf; + } + SetVariable(pset.vars, "SERVER_VERSION_NAME", server_version); + + snprintf(vbuf, sizeof(vbuf), "%d", pset.sversion); + SetVariable(pset.vars, "SERVER_VERSION_NUM", vbuf); + /* send stuff to it, too */ PQsetErrorVerbosity(pset.db, pset.verbosity); PQsetErrorContextVisibility(pset.db, pset.show_context); *************** UnsyncVariables(void) *** 3366,3371 **** --- 3383,3390 ---- SetVariable(pset.vars, "HOST", NULL); SetVariable(pset.vars, "PORT", NULL); SetVariable(pset.vars, "ENCODING", NULL); + SetVariable(pset.vars, "SERVER_VERSION_NAME", NULL); + SetVariable(pset.vars, "SERVER_VERSION_NUM", NULL); } diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c index b3dbb59..ee612b0 100644 *** a/src/bin/psql/help.c --- b/src/bin/psql/help.c *************** helpVariables(unsigned short int pager) *** 336,342 **** * Windows builds currently print one more line than non-Windows builds. * Using the larger number is fine. */ ! output = PageOutput(88, pager ? &(pset.popt.topt) : NULL); fprintf(output, _("List of specially treated variables\n\n")); --- 336,342 ---- * Windows builds currently print one more line than non-Windows builds. * Using the larger number is fine. */ ! output = PageOutput(93, pager ? &(pset.popt.topt) : NULL); fprintf(output, _("List of specially treated variables\n\n")); *************** helpVariables(unsigned short int pager) *** 344,378 **** fprintf(output, _("Usage:\n")); fprintf(output, _(" psql --set=NAME=VALUE\n or \\set NAME VALUE inside psql\n\n")); ! fprintf(output, _(" AUTOCOMMIT if set, successful SQL commands are automatically committed\n")); ! fprintf(output, _(" COMP_KEYWORD_CASE determines the case used to complete SQL key words\n" ! " [lower, upper, preserve-lower, preserve-upper]\n")); ! fprintf(output, _(" DBNAME the currently connected database name\n")); ! fprintf(output, _(" ECHO controls what input is written to standard output\n" ! " [all, errors, none, queries]\n")); ! fprintf(output, _(" ECHO_HIDDEN if set, display internal queries executed by backslash commands;\n" ! " if set to \"noexec\", just show without execution\n")); ! fprintf(output, _(" ENCODING current client character set encoding\n")); ! fprintf(output, _(" FETCH_COUNT the number of result rows to fetch and display at a time\n" ! " (default: 0=unlimited)\n")); ! fprintf(output, _(" HISTCONTROL controls command history [ignorespace, ignoredups, ignoreboth]\n")); ! fprintf(output, _(" HISTFILE file name used to store the command history\n")); ! fprintf(output, _(" HISTSIZE max number of commands to store in the command history\n")); ! fprintf(output, _(" HOST the currently connected database server host\n")); ! fprintf(output, _(" IGNOREEOF number of EOFs needed to terminate an interactive session\n")); ! fprintf(output, _(" LASTOID value of the last affected OID\n")); ! fprintf(output, _(" ON_ERROR_ROLLBACK if set, an error doesn't stop a transaction (uses implicit savepoints)\n")); ! fprintf(output, _(" ON_ERROR_STOP stop batch execution after error\n")); ! fprintf(output, _(" PORT server port of the current connection\n")); ! fprintf(output, _(" PROMPT1 specifies the standard psql prompt\n")); ! fprintf(output, _(" PROMPT2 specifies the prompt used when a statement continues from a previous line\n")); ! fprintf(output, _(" PROMPT3 specifies the prompt used during COPY ... FROM STDIN\n")); ! fprintf(output, _(" QUIET run quietly (same as -q option)\n")); ! fprintf(output, _(" SHOW_CONTEXT controls display of message context fields [never, errors, always]\n")); ! fprintf(output, _(" SINGLELINE end of line terminates SQL command mode (same as -S option)\n")); ! fprintf(output, _(" SINGLESTEP single-step mode (same as -s option)\n")); ! fprintf(output, _(" USER the currently connected database user\n")); ! fprintf(output, _(" VERBOSITY controls verbosity of error reports [default, verbose, terse]\n")); fprintf(output, _("\nDisplay settings:\n")); fprintf(output, _("Usage:\n")); --- 344,383 ---- fprintf(output, _("Usage:\n")); fprintf(output, _(" psql --set=NAME=VALUE\n or \\set NAME VALUE inside psql\n\n")); ! fprintf(output, _(" AUTOCOMMIT if set, successful SQL commands are automatically committed\n")); ! fprintf(output, _(" COMP_KEYWORD_CASE determines the case used to complete SQL key words\n" ! " [lower, upper, preserve-lower, preserve-upper]\n")); ! fprintf(output, _(" DBNAME the currently connected database name\n")); ! fprintf(output, _(" ECHO controls what input is written to standard output\n" ! " [all, errors, none, queries]\n")); ! fprintf(output, _(" ECHO_HIDDEN if set, display internal queries executed by backslash commands;\n" ! " if set to \"noexec\", just show without execution\n")); ! fprintf(output, _(" ENCODING current client character set encoding\n")); ! fprintf(output, _(" FETCH_COUNT the number of result rows to fetch and display at a time\n" ! " (default: 0=unlimited)\n")); ! fprintf(output, _(" HISTCONTROL controls command history [ignorespace, ignoredups, ignoreboth]\n")); ! fprintf(output, _(" HISTFILE file name used to store the command history\n")); ! fprintf(output, _(" HISTSIZE max number of commands to store in the command history\n")); ! fprintf(output, _(" HOST the currently connected database server host\n")); ! fprintf(output, _(" IGNOREEOF number of EOFs needed to terminate an interactive session\n")); ! fprintf(output, _(" LASTOID value of the last affected OID\n")); ! fprintf(output, _(" ON_ERROR_ROLLBACK if set, an error doesn't stop a transaction (uses implicit savepoints)\n")); ! fprintf(output, _(" ON_ERROR_STOP stop batch execution after error\n")); ! fprintf(output, _(" PORT server port of the current connection\n")); ! fprintf(output, _(" PROMPT1 specifies the standard psql prompt\n")); ! fprintf(output, _(" PROMPT2 specifies the prompt used when a statement continues from a previous line\n")); ! fprintf(output, _(" PROMPT3 specifies the prompt used during COPY ... FROM STDIN\n")); ! fprintf(output, _(" QUIET run quietly (same as -q option)\n")); ! fprintf(output, _(" SERVER_VERSION_NAME server's version (short string)\n")); ! fprintf(output, _(" SERVER_VERSION_NUM server's version (numeric)\n")); ! fprintf(output, _(" SHOW_CONTEXT controls display of message context fields [never, errors, always]\n")); ! fprintf(output, _(" SINGLELINE end of line terminates SQL command mode (same as -S option)\n")); ! fprintf(output, _(" SINGLESTEP single-step mode (same as -s option)\n")); ! fprintf(output, _(" USER the currently connected database user\n")); ! fprintf(output, _(" VERBOSITY controls verbosity of error reports [default, verbose, terse]\n")); ! fprintf(output, _(" VERSION psql's version (verbose string)\n")); ! fprintf(output, _(" VERSION_NAME psql's version (short string)\n")); ! fprintf(output, _(" VERSION_NUM psql's version (numeric)\n")); fprintf(output, _("\nDisplay settings:\n")); fprintf(output, _("Usage:\n")); diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c index 7f76797..1e48f4a 100644 *** a/src/bin/psql/startup.c --- b/src/bin/psql/startup.c *************** main(int argc, char *argv[]) *** 160,166 **** --- 160,169 ---- EstablishVariableSpace(); + /* Create variables showing psql version number */ SetVariable(pset.vars, "VERSION", PG_VERSION_STR); + SetVariable(pset.vars, "VERSION_NAME", PG_VERSION); + SetVariable(pset.vars, "VERSION_NUM", CppAsString2(PG_VERSION_NUM)); /* Default values for variables (that don't match the result of \unset) */ SetVariableBool(pset.vars, "AUTOCOMMIT"); -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers
pgsql-hackers by date: