aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2006-10-07 22:21:44 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2006-10-07 22:21:44 +0000
commite407ca3a7b052c81fab45c808a4c72b4efa19a69 (patch)
tree84e70b6dce72bea8e6fc050f461bb099e4bbd3a9 /src
parenta5d892b1c9bd8a9036d9049ba3b5094741500f78 (diff)
downloadpostgresql-e407ca3a7b052c81fab45c808a4c72b4efa19a69.tar.gz
postgresql-e407ca3a7b052c81fab45c808a4c72b4efa19a69.zip
Fix ancient oversight in psql's \d pattern processing code: when seeing two
quote chars inside quote marks, should emit one quote *and stay in inquotes mode*. No doubt the lack of reports of this have something to do with the poor documentation of the feature ...
Diffstat (limited to 'src')
-rw-r--r--src/bin/psql/describe.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index 6e6f5a91bf7..0ace5de1431 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2005, PostgreSQL Global Development Group
*
- * $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.129.2.2 2006/03/02 19:40:29 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.129.2.3 2006/10/07 22:21:44 tgl Exp $
*/
#include "postgres_fe.h"
#include "describe.h"
@@ -1803,34 +1803,37 @@ processNamePattern(PQExpBuffer buf, const char *pattern,
while (*cp)
{
- if (*cp == '"')
+ char ch = *cp;
+
+ if (ch == '"')
{
if (inquotes && cp[1] == '"')
{
- /* emit one quote */
+ /* emit one quote, stay in inquotes mode */
appendPQExpBufferChar(&namebuf, '"');
cp++;
}
- inquotes = !inquotes;
+ else
+ inquotes = !inquotes;
cp++;
}
- else if (!inquotes && isupper((unsigned char) *cp))
+ else if (!inquotes && isupper((unsigned char) ch))
{
appendPQExpBufferChar(&namebuf,
- pg_tolower((unsigned char) *cp));
+ pg_tolower((unsigned char) ch));
cp++;
}
- else if (!inquotes && *cp == '*')
+ else if (!inquotes && ch == '*')
{
appendPQExpBuffer(&namebuf, ".*");
cp++;
}
- else if (!inquotes && *cp == '?')
+ else if (!inquotes && ch == '?')
{
appendPQExpBufferChar(&namebuf, '.');
cp++;
}
- else if (!inquotes && *cp == '.')
+ else if (!inquotes && ch == '.')
{
/* Found schema/name separator, move current pattern to schema */
resetPQExpBuffer(&schemabuf);