]> granicus.if.org Git - postgresql/commitdiff
Only DISCARD ALL should be in the command_no_begin list.
authorItagaki Takahiro <itagaki.takahiro@gmail.com>
Tue, 28 Sep 2010 06:55:25 +0000 (15:55 +0900)
committerItagaki Takahiro <itagaki.takahiro@gmail.com>
Tue, 28 Sep 2010 06:55:25 +0000 (15:55 +0900)
We allowes DISCARD PLANS and TEMP in a transaction.

src/bin/psql/common.c

index 7ba2f73c5d0a664f1104a3520d2fbb3f898333a9..50e4077343a9209c74c421e033f55a3003296215 100644 (file)
@@ -1388,8 +1388,20 @@ command_no_begin(const char *query)
                        return true;
        }
 
+       /* DISCARD ALL isn't allowed in xacts, but other variants are allowed. */
        if (wordlen == 7 && pg_strncasecmp(query, "discard", 7) == 0)
-               return true;
+       {
+               query += wordlen;
+
+               query = skip_white_space(query);
+
+               wordlen = 0;
+               while (isalpha((unsigned char) query[wordlen]))
+                       wordlen += PQmblen(&query[wordlen], pset.encoding);
+
+               if (wordlen == 3 && pg_strncasecmp(query, "all", 3) == 0)
+                       return true;
+       }
 
        return false;
 }