Fix bugs in the isolation tester flex rules.
authorHeikki Linnakangas <[email protected]>
Thu, 10 Mar 2011 07:01:27 +0000 (09:01 +0200)
committerHeikki Linnakangas <[email protected]>
Thu, 10 Mar 2011 07:06:56 +0000 (09:06 +0200)
Tom Lane pointed out that it was giving a warning: "-s option given but
default rule can be matched". That was because there was no rule to handle
newline in a quoted string. I made that throw an error.

Also, line number tracking was broken, giving incorrect line number on
error. Fixed that too.

src/test/isolation/specscanner.l

index 6752aca82d460357e2a19ca9b6602aa04045d82d..c3193917c037427c40ce62602c0fc04c4b7d6e77 100644 (file)
@@ -32,10 +32,9 @@ static void addlitchar(const char c);
 %x qstr
 
 non_newline        [^\n\r]
-space          [ \t\n\r\f]
+space          [ \t\r\f]
 
 comment            ("#"{non_newline}*)
-whitespace     ({space}+|{comment})
 
 %%
 
@@ -46,10 +45,10 @@ step            { return(STEP); }
 teardown       { return(TEARDOWN); }
 
 [\n]           { yyline++; }
-{whitespace}   {
-                   /* ignore */
-               }
+{comment}      { /* ignore */ }
+{space}            { /* ignore */ }
 
+ /* Quoted strings: "foo" */
 \"             {
                    litbufpos = 0;
                    BEGIN(qstr);
@@ -61,27 +60,36 @@ teardown        { return(TEARDOWN); }
                    return(string);
                }
 <qstr>.            { addlitchar(yytext[0]); }
+<qstr>\n       { yyerror("unexpected newline in quoted string"); }
+<qstr><<EOF>>  { yyerror("unterminated quoted string"); }
 
+ /* SQL blocks: { UPDATE ... } */
 "{"                {
 
                    litbufpos = 0;
                    BEGIN(sql);
                }
-
 <sql>"}"       {
                    litbuf[litbufpos] = '\0';
                    yylval.str = strdup(litbuf);
                    BEGIN(INITIAL);
                    return(sqlblock);
                }
-<sql>[^}]      { addlitchar(yytext[0]);}
-
+<sql>.         {
+                   addlitchar(yytext[0]);
+               }
+<sql>\n            {
+                   yyline++;
+                   addlitchar(yytext[0]);
+               }
+<sql><<EOF>>   {
+                   yyerror("unterminated sql block");
+               }
 
 .              {
                    fprintf(stderr, "syntax error at line %d: unexpected character \"%s\"\n", yyline, yytext);
                    exit(1);
                }
-
 %%
 
 static void