aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2002-02-25 21:37:42 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2002-02-25 21:37:42 +0000
commit86a07143d418ba81bcf72da4044a0e7c10f77c7a (patch)
tree652fd2a106348491b909c25600fe39a223583fa0
parent7cfbbb254122165daf9c880f4d3ade0fbf8413ad (diff)
downloadpostgresql-86a07143d418ba81bcf72da4044a0e7c10f77c7a.tar.gz
postgresql-86a07143d418ba81bcf72da4044a0e7c10f77c7a.zip
Tweak psql's \connect command to not downcase unquoted database and user
names. This is a temporary measure to allow backwards compatibility with 7.2 and earlier pg_dump. 7.2.1 and later pg_dump will double-quote mixed case names in \connect. Once we feel that older dumps are not a problem anymore, we can revert this change and treat \connect arguments as normal SQL identifiers.
-rw-r--r--src/bin/psql/command.c28
1 files changed, 21 insertions, 7 deletions
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index 5bd8a5348d6..2a078bb6b95 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -3,7 +3,7 @@
*
* Copyright 2000 by PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/command.c,v 1.65 2002/02/20 22:47:12 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/command.c,v 1.66 2002/02/25 21:37:42 tgl Exp $
*/
#include "postgres_fe.h"
#include "command.h"
@@ -54,11 +54,17 @@ static backslashResult exec_command(const char *cmd,
const char **continue_parse,
PQExpBuffer query_buf);
+/* different ways for scan_option to handle parameter words */
enum option_type
{
- OT_NORMAL, OT_SQLID, OT_FILEPIPE
+ OT_NORMAL, /* normal case */
+ OT_SQLID, /* treat as SQL identifier */
+ OT_SQLIDHACK, /* SQL identifier, but don't downcase */
+ OT_FILEPIPE /* it's a file or pipe */
};
-static char *scan_option(char **string, enum option_type type, char *quote, bool semicolon);
+
+static char *scan_option(char **string, enum option_type type,
+ char *quote, bool semicolon);
static char *unescape(const unsigned char *source, size_t len);
static bool do_edit(const char *filename_arg, PQExpBuffer query_buf);
@@ -243,8 +249,17 @@ exec_command(const char *cmd,
char opt1q,
opt2q;
- opt1 = scan_option(&string, OT_SQLID, &opt1q, true);
- opt2 = scan_option(&string, OT_SQLID, &opt2q, true);
+ /*
+ * Ideally we should treat the arguments as SQL identifiers. But for
+ * backwards compatibility with 7.2 and older pg_dump files, we have
+ * to take unquoted arguments verbatim (don't downcase them).
+ * For now, double-quoted arguments may be stripped of double quotes
+ * (as if SQL identifiers). By 7.4 or so, pg_dump files can be
+ * expected to double-quote all mixed-case \connect arguments,
+ * and then we can get rid of OT_SQLIDHACK.
+ */
+ opt1 = scan_option(&string, OT_SQLIDHACK, &opt1q, true);
+ opt2 = scan_option(&string, OT_SQLIDHACK, &opt2q, true);
if (opt2)
/* gave username */
@@ -909,7 +924,7 @@ scan_option(char **string, enum option_type type, char *quote, bool semicolon)
* then we strip out the double quotes
*/
- if (type == OT_SQLID)
+ if (type == OT_SQLID || type == OT_SQLIDHACK)
{
unsigned int k,
cc;
@@ -930,7 +945,6 @@ scan_option(char **string, enum option_type type, char *quote, bool semicolon)
}
return_val[cc] = '\0';
}
-
else
{
strncpy(return_val, &options_string[pos], jj - pos + 1);