updates the psql.1 manual page for \ options
        add row count and ties it to the header option
        updated manual pages and comment for above change
        got \? to display in one screen-full (almost, \? scrolls off top)
        moved \r to \E, and \z to \r (for historical reasons with monitor)
        small code alignment cleanup

Submitted by: Bruce Momjian <maillist@candle.pha.pa.us>
This commit is contained in:
Marc G. Fournier 1996-07-31 02:11:23 +00:00
parent 1af2cc0d58
commit 4477b6f6c2
1 changed files with 62 additions and 65 deletions

View File

@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.14 1996/07/29 20:58:42 scrappy Exp $
* $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.15 1996/07/31 02:11:23 scrappy Exp $
*
*-------------------------------------------------------------------------
*/
@ -109,7 +109,7 @@ usage(char *progname)
fprintf(stderr,"\t -q run quietly (no messages, no prompts)\n");
fprintf(stderr,"\t -s single step mode (prompts for each query)\n");
fprintf(stderr,"\t -S single line mode (i.e. query terminated by newline)\n");
fprintf(stderr,"\t -t turn off printing of attribute headers\n");
fprintf(stderr,"\t -t turn off printing of headings and row count\n");
fprintf(stderr,"\t -T html set html3.0 table command options (cf. -H)\n");
fprintf(stderr,"\t -x turn on expanded output (field names on left)\n");
exit(1);
@ -128,33 +128,30 @@ char *on(bool f)
static void
slashUsage(PsqlSettings *ps)
{
fprintf(stderr,"\t \\? -- help\n");
fprintf(stderr,"\t \\a -- toggle field-alignment (currenty %s)\n", on(ps->opt.align));
fprintf(stderr,"\t \\C [<captn>] -- set html3 caption (currently '%s')\n", ps->opt.caption? ps->opt.caption: "");
fprintf(stderr,"\t \\c <dbname> -- connect to new database (currently '%s')\n", PQdb(ps->db));
fprintf(stderr,"\t \\d [<table>] -- list tables in database or columns in <table>\n");
fprintf(stderr,"\t \\d * -- list tables in database and columns in all tables\n");
fprintf(stderr,"\t \\e [<fname>] -- edit the current query buffer or <fname>\n");
fprintf(stderr,"\t \\d [<table>] -- list tables in database or columns in <table>,* for all\n");
fprintf(stderr,"\t \\e [<fname>] -- edit the current query buffer or <fname>, \E execute too\n");
fprintf(stderr,"\t \\f [<sep>] -- change field separater (currently '%s')\n", ps->opt.fieldSep);
fprintf(stderr,"\t \\g [<fname>] -- send query to backend [and place results in <fname>]\n");
fprintf(stderr,"\t \\g |<cmd> -- send query to backend and pipe results into <cmd>\n");
fprintf(stderr,"\t \\h [<cmd>] -- help on syntax of sql commands\n");
fprintf(stderr,"\t \\h * -- complete description of all sql commands\n");
fprintf(stderr,"\t \\h [<cmd>] -- help on syntax of sql commands, * for all commands\n");
fprintf(stderr,"\t \\H -- toggle html3 output (currently %s)\n", on(ps->opt.html3));
fprintf(stderr,"\t \\i <fname> -- read and execute queries from filename\n");
fprintf(stderr,"\t \\l -- list all databases\n");
fprintf(stderr,"\t \\m -- toggle monitor-like type-setting (currently %s)\n", on(ps->opt.standard));
fprintf(stderr,"\t \\m -- toggle monitor-like table display (currently %s)\n", on(ps->opt.standard));
fprintf(stderr,"\t \\o [<fname>] -- send all query results to <fname> or stdout\n");
fprintf(stderr,"\t \\o |<cmd> -- pipe all query results through <cmd>\n");
fprintf(stderr,"\t \\p -- print the current query buffer\n");
fprintf(stderr,"\t \\q -- quit\n");
fprintf(stderr,"\t \\r [<fname>] -- edit <fname> then execute on save\n");
fprintf(stderr,"\t \\r -- reset(clear) the query buffer\n");
fprintf(stderr,"\t \\s [<fname>] -- print history or save it in <fname>\n");
fprintf(stderr,"\t \\t -- toggle table output header (currently %s)\n", on(ps->opt.header));
fprintf(stderr,"\t \\t -- toggle table headings and row count (currently %s)\n", on(ps->opt.header));
fprintf(stderr,"\t \\T [<html>] -- set html3.0 <table ...> options (currently '%s')\n", ps->opt.tableOpt? ps->opt.tableOpt: "");
fprintf(stderr,"\t \\x -- toggle expanded output (currently %s)\n", on(ps->opt.expanded));
fprintf(stderr,"\t \\z -- zorch current query buffer (i.e clear it)\n");
fprintf(stderr,"\t \\! [<cmd>] -- shell escape or command\n");
fprintf(stderr,"\t \\? -- help\n");
}
PGresult *
@ -624,7 +621,7 @@ HandleSlashCmds(PsqlSettings *settings,
decode(optarg);
}
switch (line[1])
{
{
case 'a': /* toggles to align fields on output */
toggle(settings, &settings->opt.align, "field alignment");
break;
@ -641,7 +638,7 @@ HandleSlashCmds(PsqlSettings *settings,
}
break;
case 'c': /* \c means connect to new database */
{
{
char *dbname=PQdb(settings->db);
if (!optarg) {
fprintf(stderr,"\\c must be followed by a database name\n");
@ -687,7 +684,7 @@ HandleSlashCmds(PsqlSettings *settings,
}
break;
case 'e':
{
{
int fd;
char tmp[64];
char *fname;
@ -743,7 +740,46 @@ HandleSlashCmds(PsqlSettings *settings,
if (query[strlen(query)-1]==';')
return 0;
break;
}
}
case 'E':
{
FILE *fd;
static char *lastfile;
struct stat st, st2;
if (optarg)
{
if (lastfile)
free(lastfile);
lastfile=malloc(strlen(optarg+1));
if (!lastfile)
{
perror("malloc");
exit(1);
}
strcpy(lastfile, optarg);
} else if (!lastfile)
{
fprintf(stderr,"\\r must be followed by a file name initially\n");
break;
}
stat(lastfile, &st);
editFile(lastfile);
if ((stat(lastfile, &st2) == -1) || ((fd = fopen(lastfile, "r")) == NULL))
{
perror(lastfile);
break;
}
if (st2.st_mtime==st.st_mtime)
{
if (!settings->quiet)
fprintf(stderr, "warning: %s not modified. query not executed\n", lastfile);
fclose(fd);
break;
}
MainLoop(settings, fd);
fclose(fd);
break;
}
case 'f':
{
char *fs=DEFAULT_FIELD_SEP;
@ -760,12 +796,12 @@ HandleSlashCmds(PsqlSettings *settings,
fprintf(stderr, "field separater changed to '%s'\n", settings->opt.fieldSep);
break;
}
case 'g': /* \g means send query */
case 'g': /* \g means send query */
settings->gfname = optarg;
status = 0;
break;
case 'h':
{
{
char *cmd;
int i, numCmds;
int all_help = 0;
@ -811,7 +847,7 @@ HandleSlashCmds(PsqlSettings *settings,
printf("command not found, try \\h with no arguments to see available help\n");
}
break;
}
}
case 'i': /* \i is include file */
{
FILE *fd;
@ -829,7 +865,7 @@ HandleSlashCmds(PsqlSettings *settings,
MainLoop(settings, fd);
fclose(fd);
break;
}
}
case 'l': /* \l is list database */
listAllDbs(settings);
break;
@ -850,45 +886,11 @@ HandleSlashCmds(PsqlSettings *settings,
case 'q': /* \q is quit */
status = 2;
break;
case 'r':
{
FILE *fd;
static char *lastfile;
struct stat st, st2;
if (optarg)
{
if (lastfile)
free(lastfile);
lastfile=malloc(strlen(optarg+1));
if (!lastfile)
{
perror("malloc");
exit(1);
}
strcpy(lastfile, optarg);
} else if (!lastfile)
{
fprintf(stderr,"\\r must be followed by a file name initially\n");
break;
}
stat(lastfile, &st);
editFile(lastfile);
if ((stat(lastfile, &st2) == -1) || ((fd = fopen(lastfile, "r")) == NULL))
{
perror(lastfile);
break;
}
if (st2.st_mtime==st.st_mtime)
{
if (!settings->quiet)
fprintf(stderr, "warning: %s not modified. query not executed\n", lastfile);
fclose(fd);
break;
}
MainLoop(settings, fd);
fclose(fd);
break;
}
case 'r': /* reset(clear) the buffer */
query[0]='\0';
if (!settings->quiet)
fprintf(stderr, "buffer reset(cleared)\n");
break;
case 's': /* \s is save history to a file */
if (!optarg)
optarg="/dev/tty";
@ -913,7 +915,7 @@ HandleSlashCmds(PsqlSettings *settings,
}
break;
case 't': /* toggle headers */
toggle(settings, &settings->opt.header, "output headers");
toggle(settings, &settings->opt.header, "output headings and row count");
break;
case 'T': /* define html <table ...> option */
if (settings->opt.tableOpt)
@ -930,11 +932,6 @@ HandleSlashCmds(PsqlSettings *settings,
case 'x':
toggle(settings, &settings->opt.expanded, "expanded table representation");
break;
case 'z': /* zorch buffer */
query[0]='\0';
if (!settings->quiet)
fprintf(stderr, "zorched current query buffer\n");
break;
case '!':
if (!optarg) {
char *sys;