Only DISCARD ALL should be in the command_no_begin list.
authorItagaki Takahiro
Tue, 28 Sep 2010 06:56:46 +0000 (15:56 +0900)
committerItagaki Takahiro
Tue, 28 Sep 2010 06:56:46 +0000 (15:56 +0900)
We allowes DISCARD PLANS and TEMP in a transaction.

src/bin/psql/common.c

index 4027f77be233ff64933ffd630732fa20b95cf1c3..72115f8ae65a57688c9d8f3a9e0c5dc5268d2780 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;
 }