Skip to content
Snippets Groups Projects
Commit 86a07143 authored by Tom Lane's avatar Tom Lane
Browse files

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.
parent 7cfbbb25
Branches
Tags
No related merge requests found
......@@ -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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment