mirror of
https://github.com/postgres/postgres.git
synced 2025-06-04 00:02:37 -04:00
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.
This commit is contained in:
parent
7cfbbb2541
commit
86a07143d4
@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright 2000 by PostgreSQL Global Development Group
|
* 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 "postgres_fe.h"
|
||||||
#include "command.h"
|
#include "command.h"
|
||||||
@ -54,11 +54,17 @@ static backslashResult exec_command(const char *cmd,
|
|||||||
const char **continue_parse,
|
const char **continue_parse,
|
||||||
PQExpBuffer query_buf);
|
PQExpBuffer query_buf);
|
||||||
|
|
||||||
|
/* different ways for scan_option to handle parameter words */
|
||||||
enum option_type
|
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 char *unescape(const unsigned char *source, size_t len);
|
||||||
|
|
||||||
static bool do_edit(const char *filename_arg, PQExpBuffer query_buf);
|
static bool do_edit(const char *filename_arg, PQExpBuffer query_buf);
|
||||||
@ -243,8 +249,17 @@ exec_command(const char *cmd,
|
|||||||
char opt1q,
|
char opt1q,
|
||||||
opt2q;
|
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)
|
if (opt2)
|
||||||
/* gave username */
|
/* 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
|
* then we strip out the double quotes
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (type == OT_SQLID)
|
if (type == OT_SQLID || type == OT_SQLIDHACK)
|
||||||
{
|
{
|
||||||
unsigned int k,
|
unsigned int k,
|
||||||
cc;
|
cc;
|
||||||
@ -930,7 +945,6 @@ scan_option(char **string, enum option_type type, char *quote, bool semicolon)
|
|||||||
}
|
}
|
||||||
return_val[cc] = '\0';
|
return_val[cc] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
strncpy(return_val, &options_string[pos], jj - pos + 1);
|
strncpy(return_val, &options_string[pos], jj - pos + 1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user