diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2006-10-10 16:15:22 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2006-10-10 16:15:22 +0000 |
commit | 9c2b6ec695d6f75b1dc3d470bb31b40eb6d248cf (patch) | |
tree | cc785c07d89e06eb9febe4a11fb6b0558e761c74 | |
parent | 61c91fd2d22c97fd942ca67f458af5dc364f5fab (diff) | |
download | postgresql-9c2b6ec695d6f75b1dc3d470bb31b40eb6d248cf.tar.gz postgresql-9c2b6ec695d6f75b1dc3d470bb31b40eb6d248cf.zip |
Fix psql \d commands to behave properly when a pattern using regex | is given.
Formerly they'd emit '^foo|bar$' which is wrong because the anchors are
parsed as part of the alternatives; must emit '^(foo|bar)$' to get expected
behavior. Same as bug found previously in similar_escape(). Already fixed
in HEAD, this is just back-porting the part of that patch that was a bug fix.
-rw-r--r-- | src/bin/psql/describe.c | 28 |
1 files changed, 9 insertions, 19 deletions
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index 0ace5de1431..511d2b7a1a1 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.3 2006/10/07 22:21:44 tgl Exp $ + * $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.129.2.4 2006/10/10 16:15:22 tgl Exp $ */ #include "postgres_fe.h" #include "describe.h" @@ -1876,24 +1876,19 @@ processNamePattern(PQExpBuffer buf, const char *pattern, { /* We have a name pattern, so constrain the namevar(s) */ - appendPQExpBufferChar(&namebuf, '$'); - /* Optimize away ".*$", and possibly the whole pattern */ - if (namebuf.len >= 3 && - strcmp(namebuf.data + (namebuf.len - 3), ".*$") == 0) - namebuf.data[namebuf.len - 3] = '\0'; - - if (namebuf.data[0]) + /* Optimize away a "*" pattern */ + if (strcmp(namebuf.data, ".*") != 0) { WHEREAND(); if (altnamevar) appendPQExpBuffer(buf, - "(%s ~ '^%s'\n" - " OR %s ~ '^%s')\n", + "(%s ~ '^(%s)$'\n" + " OR %s ~ '^(%s)$')\n", namevar, namebuf.data, altnamevar, namebuf.data); else appendPQExpBuffer(buf, - "%s ~ '^%s'\n", + "%s ~ '^(%s)$'\n", namevar, namebuf.data); } } @@ -1902,16 +1897,11 @@ processNamePattern(PQExpBuffer buf, const char *pattern, { /* We have a schema pattern, so constrain the schemavar */ - appendPQExpBufferChar(&schemabuf, '$'); - /* Optimize away ".*$", and possibly the whole pattern */ - if (schemabuf.len >= 3 && - strcmp(schemabuf.data + (schemabuf.len - 3), ".*$") == 0) - schemabuf.data[schemabuf.len - 3] = '\0'; - - if (schemabuf.data[0] && schemavar) + /* Optimize away a "*" pattern */ + if (strcmp(schemabuf.data, ".*") != 0 && schemavar) { WHEREAND(); - appendPQExpBuffer(buf, "%s ~ '^%s'\n", + appendPQExpBuffer(buf, "%s ~ '^(%s)$'\n", schemavar, schemabuf.data); } } |