summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2018-02-28 16:57:38 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2018-02-28 16:57:38 -0500
commitcadb14c271bf1e303a11c6c75c3fd02299be743a (patch)
tree60980e80869cc2bb0c0eb68959c80b407ac9903c
parent49f9014c8c1e6401eabfad9d1bf30a7c0b4ff2fb (diff)
Remove restriction on SQL block length in isolationtester scanner.
specscanner.l had a fixed limit of 1024 bytes on the length of individual SQL stanzas in an isolation test script. People are starting to run into that, so fix it by making the buffer resizable. Once we allow this in HEAD, it seems inevitable that somebody will try to back-patch a test that exceeds the old limit, so back-patch this change as a preventive measure. Daniel Gustafsson Discussion: https://postgr.es/m/8D628BE4-6606-4FF6-A3FF-8B2B0E9B43D0@yesql.se
-rw-r--r--src/test/isolation/specscanner.l19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/test/isolation/specscanner.l b/src/test/isolation/specscanner.l
index 9a32018de13..314fd2370ca 100644
--- a/src/test/isolation/specscanner.l
+++ b/src/test/isolation/specscanner.l
@@ -12,8 +12,10 @@
static int yyline = 1; /* line number for error reporting */
-static char litbuf[1024];
-static int litbufpos = 0;
+#define LITBUF_INIT 1024 /* initial size of litbuf */
+static char *litbuf = NULL;
+static size_t litbufsize = 0;
+static size_t litbufpos = 0;
static void addlitchar(char c);
@@ -39,6 +41,11 @@ comment ("#"{non_newline}*)
%%
+%{
+ litbuf = pg_malloc(LITBUF_INIT);
+ litbufsize = LITBUF_INIT;
+%}
+
permutation { return(PERMUTATION); }
session { return(SESSION); }
setup { return(SETUP); }
@@ -96,10 +103,12 @@ teardown { return(TEARDOWN); }
static void
addlitchar(char c)
{
- if (litbufpos >= sizeof(litbuf) - 1)
+ /* We must always leave room to add a trailing \0 */
+ if (litbufpos >= litbufsize - 1)
{
- fprintf(stderr, "SQL step too long\n");
- exit(1);
+ /* Double the size of litbuf if it gets full */
+ litbufsize += litbufsize;
+ litbuf = pg_realloc(litbuf, litbufsize);
}
litbuf[litbufpos++] = c;
}