diff options
Diffstat (limited to 'src/bin/psql/command.c')
-rw-r--r-- | src/bin/psql/command.c | 109 |
1 files changed, 70 insertions, 39 deletions
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index 9489a8e2af6..ba016120590 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -243,7 +243,10 @@ HandleSlashCmds(PsqlSettings *pset, if (status == CMD_UNKNOWN) { - fprintf(stderr, "Unrecognized command: \\%s. Try \\? for help.\n", cmd); + if (pset->cur_cmd_interactive) + fprintf(stderr, "Invalid command \\%s. Try \\? for help.\n", cmd); + else + fprintf(stderr, "%s: invalid command \\%s", pset->progname, cmd); status = CMD_ERROR; } @@ -341,38 +344,37 @@ exec_command(const char *cmd, else if (cmd[0] == 'd') { bool show_verbose = strchr(cmd, '+') ? true : false; - bool show_desc = strchr(cmd, '?') ? true : false; switch (cmd[1]) { case '\0': case '?': if (options[0]) - success = describeTableDetails(options[0], pset, show_desc); + success = describeTableDetails(options[0], pset, show_verbose); else /* standard listing of interesting things */ - success = listTables("tvs", NULL, pset, show_desc); + success = listTables("tvs", NULL, pset, show_verbose); break; case 'a': - success = describeAggregates(options[0], pset, show_verbose, show_desc); + success = describeAggregates(options[0], pset); break; case 'd': success = objectDescription(options[0], pset); break; case 'f': - success = describeFunctions(options[0], pset, show_verbose, show_desc); + success = describeFunctions(options[0], pset, show_verbose); break; case 'l': - success = do_lo_list(pset, show_desc); + success = do_lo_list(pset); break; case 'o': - success = describeOperators(options[0], pset, show_verbose, show_desc); + success = describeOperators(options[0], pset); break; case 'p': success = permissionsList(options[0], pset); break; case 'T': - success = describeTypes(options[0], pset, show_verbose, show_desc); + success = describeTypes(options[0], pset, show_verbose); break; case 't': case 'v': @@ -380,9 +382,9 @@ exec_command(const char *cmd, case 's': case 'S': if (cmd[1] == 'S' && cmd[2] == '\0') - success = listTables("Stvs", NULL, pset, show_desc); + success = listTables("Stvs", NULL, pset, show_verbose); else - success = listTables(&cmd[1], options[0], pset, show_desc); + success = listTables(&cmd[1], options[0], pset, show_verbose); break; default: status = CMD_UNKNOWN; @@ -452,7 +454,10 @@ exec_command(const char *cmd, { if (!options[0]) { - fputs("Usage: \\i <filename>\n", stderr); + if (pset->cur_cmd_interactive) + fprintf(stderr, "\\%s: missing required argument\n", cmd); + else + fprintf(stderr, "%s: \\%s: missing required argument", pset->progname, cmd); success = false; } else @@ -463,7 +468,7 @@ exec_command(const char *cmd, /* \l is list databases */ else if (strcmp(cmd, "l") == 0 || strcmp(cmd, "list") == 0) success = listAllDbs(pset, false); - else if (strcmp(cmd, "l?") == 0 || strcmp(cmd, "list?") == 0) + else if (strcmp(cmd, "l+") == 0 || strcmp(cmd, "list+") == 0) success = listAllDbs(pset, true); @@ -474,7 +479,10 @@ exec_command(const char *cmd, { if (!options[1]) { - fputs("Usage: \\lo_export <loid> <filename>\n", stderr); + if (pset->cur_cmd_interactive) + fprintf(stderr, "\\%s: missing required argument", cmd); + else + fprintf(stderr, "%s: \\%s: missing required argument", pset->progname, cmd); success = false; } else @@ -485,7 +493,10 @@ exec_command(const char *cmd, { if (!options[0]) { - fputs("Usage: \\lo_import <filename> [<description>]\n", stderr); + if (pset->cur_cmd_interactive) + fprintf(stderr, "\\%s: missing required argument", cmd); + else + fprintf(stderr, "%s: \\%s: missing required argument", pset->progname, cmd); success = false; } else @@ -493,15 +504,16 @@ exec_command(const char *cmd, } else if (strcmp(cmd + 3, "list") == 0) - success = do_lo_list(pset, false); - else if (strcmp(cmd + 3, "list?") == 0) - success = do_lo_list(pset, true); + success = do_lo_list(pset); else if (strcmp(cmd + 3, "unlink") == 0) { if (!options[0]) { - fputs("Usage: \\lo_unlink <loid>\n", stderr); + if (pset->cur_cmd_interactive) + fprintf(stderr, "\\%s: missing required argument", cmd); + else + fprintf(stderr, "%s: \\%s: missing required argument", pset->progname, cmd); success = false; } else @@ -522,7 +534,7 @@ exec_command(const char *cmd, { if (query_buf && query_buf->len > 0) puts(query_buf->data); - else if (!GetVariableBool(pset->vars, "quiet")) + else if (!quiet) puts("Query buffer is empty."); fflush(stdout); } @@ -532,7 +544,10 @@ exec_command(const char *cmd, { if (!options[0]) { - fputs("Usage: \\pset <parameter> [<value>]\n", stderr); + if (pset->cur_cmd_interactive) + fprintf(stderr, "\\%s: missing required argument", cmd); + else + fprintf(stderr, "%s: \\%s: missing required argument", pset->progname, cmd); success = false; } else @@ -600,7 +615,11 @@ exec_command(const char *cmd, { if (!SetVariable(pset->vars, options[0], options[1])) { - fprintf(stderr, "Set variable failed.\n"); + if (pset->cur_cmd_interactive) + fprintf(stderr, "\\%s: failed\n", cmd); + else + fprintf(stderr, "%s: \\%s: failed\n", pset->progname, cmd); + success = false; } } @@ -624,7 +643,10 @@ exec_command(const char *cmd, if (!options[0]) { - fprintf(stderr, "Usage: \\%s <filename>\n", cmd); + if (pset->cur_cmd_interactive) + fprintf(stderr, "\\%s: missing required argument", cmd); + else + fprintf(stderr, "%s: \\%s: missing required argument", pset->progname, cmd); success = false; } else @@ -932,20 +954,27 @@ do_connect(const char *new_dbname, const char *new_user, PsqlSettings *pset) */ if (!pset->db || PQstatus(pset->db) == CONNECTION_BAD) { - fprintf(stderr, "Could not establish database connection.\n%s", PQerrorMessage(pset->db)); - PQfinish(pset->db); - if (!oldconn || !pset->cur_cmd_interactive) - { /* we don't want unpredictable things to - * happen in scripting mode */ - fputs("Terminating.\n", stderr); + if (pset->cur_cmd_interactive) + { + fprintf(stderr, "\\connect: %s", PQerrorMessage(pset->db)); + PQfinish(pset->db); + if (oldconn) + { + fputs("Previous connection kept\n", stderr); + pset->db = oldconn; + } + else + pset->db = NULL; + } + else + { + /* we don't want unpredictable things to + * happen in scripting mode */ + fprintf(stderr, "%s: \\connect: %s", pset->progname, PQerrorMessage(pset->db)); + PQfinish(pset->db); if (oldconn) PQfinish(oldconn); - pset->db = NULL; - } - else - { - fputs("Keeping old connection.\n", stderr); - pset->db = oldconn; + pset->db = NULL; } } else @@ -956,8 +985,7 @@ do_connect(const char *new_dbname, const char *new_user, PsqlSettings *pset) printf("You are now connected to database %s.\n", dbparam); else if (dbparam != new_dbname) /* no new db */ printf("You are now connected as new user %s.\n", new_user); - else -/* both new */ + else /* both new */ printf("You are now connected to database %s as user %s.\n", PQdb(pset->db), PQuser(pset->db)); } @@ -1020,7 +1048,7 @@ editFile(const char *fname) static bool do_edit(const char *filename_arg, PQExpBuffer query_buf) { - char fnametmp[64]; + char fnametmp[MAXPGPATH]; FILE *stream; const char *fname; bool error = false; @@ -1047,8 +1075,11 @@ do_edit(const char *filename_arg, PQExpBuffer query_buf) /* make a temp file to edit */ #ifndef WIN32 mode_t oldumask; + const char *tmpdirenv = getenv("TMPDIR"); - sprintf(fnametmp, "/tmp/psql.edit.%ld.%ld", (long) geteuid(), (long) getpid()); + sprintf(fnametmp, "%s/psql.edit.%ld.%ld", + tmpdirenv ? tmpdirenv : "/tmp", + (long) geteuid(), (long) getpid()); #else GetTempFileName(".", "psql", 0, fnametmp); #endif |