diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index ce936a0f98..3075d69575 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -1,5 +1,5 @@ @@ -1429,6 +1429,24 @@ lo_import 152801 + + \prompt [ text ] name + + + Prompts the user to set variable name. An optional prompt, text, can be specified. (For multi-word + prompts, use single-quotes.) + + + + By default, \prompt uses the terminal for input and + output. However, if the + + + \pset parameter [ value ] diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index c25a5e6f0f..bcaf684a8e 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -3,7 +3,7 @@ * * Copyright (c) 2000-2007, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/bin/psql/command.c,v 1.177 2007/01/05 22:19:49 momjian Exp $ + * $PostgreSQL: pgsql/src/bin/psql/command.c,v 1.178 2007/02/23 18:20:58 momjian Exp $ */ #include "postgres_fe.h" #include "command.h" @@ -712,6 +712,57 @@ exec_command(const char *cmd, free(pw2); } + /* \prompt -- prompt and set variable */ + else if (strcmp(cmd, "prompt") == 0) + { + char *opt, *prompt_text = NULL; + char *arg1, *arg2; + + arg1 = psql_scan_slash_option(scan_state, OT_NORMAL, NULL, false); + arg2 = psql_scan_slash_option(scan_state, OT_NORMAL, NULL, false); + + if (!arg1) + { + psql_error("\\%s: missing required argument\n", cmd); + success = false; + } + else + { + char *result; + + if (arg2) + { + prompt_text = arg1; + opt = arg2; + } + else + opt = arg1; + + if (!pset.inputfile) + result = simple_prompt(prompt_text, 4096, true); + else + { + if (prompt_text) + { + fputs(prompt_text, stdout); + fflush(stdout); + } + result = gets_fromFile(stdin); + } + + if (!SetVariable(pset.vars, opt, result)) + { + psql_error("\\%s: error\n", cmd); + success = false; + } + + free(result); + if (prompt_text) + free(prompt_text); + free(opt); + } + } + /* \pset -- set printing parameters */ else if (strcmp(cmd, "pset") == 0) { diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c index e16c028997..027b5cb020 100644 --- a/src/bin/psql/help.c +++ b/src/bin/psql/help.c @@ -3,7 +3,7 @@ * * Copyright (c) 2000-2007, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/bin/psql/help.c,v 1.116 2007/01/05 22:19:49 momjian Exp $ + * $PostgreSQL: pgsql/src/bin/psql/help.c,v 1.117 2007/02/23 18:20:59 momjian Exp $ */ #include "postgres_fe.h" @@ -161,7 +161,7 @@ slashUsage(unsigned short int pager) { FILE *output; - output = PageOutput(67, pager); + output = PageOutput(69, pager); /* if you add/remove a line here, change the row count above */ @@ -184,6 +184,8 @@ slashUsage(unsigned short int pager) fprintf(output, _(" \\timing toggle timing of commands (currently %s)\n"), ON(pset.timing)); fprintf(output, _(" \\unset NAME unset (delete) internal variable\n")); + fprintf(output, _(" \\prompt [TEXT] NAME\n" + " prompt user to set internal variable\n")); fprintf(output, _(" \\! [COMMAND] execute command in shell or start interactive shell\n")); fprintf(output, "\n"); diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 8012b70a4d..63db48546b 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -3,7 +3,7 @@ * * Copyright (c) 2000-2007, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/bin/psql/tab-complete.c,v 1.158 2007/02/07 00:52:35 petere Exp $ + * $PostgreSQL: pgsql/src/bin/psql/tab-complete.c,v 1.159 2007/02/23 18:20:59 momjian Exp $ */ /*---------------------------------------------------------------------- @@ -542,7 +542,7 @@ psql_completion(char *text, int start, int end) "\\e", "\\echo", "\\encoding", "\\f", "\\g", "\\h", "\\help", "\\H", "\\i", "\\l", "\\lo_import", "\\lo_export", "\\lo_list", "\\lo_unlink", - "\\o", "\\p", "\\password", "\\pset", "\\q", "\\qecho", "\\r", + "\\o", "\\p", "\\password", "\\prompt", "\\pset", "\\q", "\\qecho", "\\r", "\\set", "\\t", "\\T", "\\timing", "\\unset", "\\x", "\\w", "\\z", "\\!", NULL };