diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bin/pgbench/exprscan.l | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/bin/pgbench/exprscan.l b/src/bin/pgbench/exprscan.l index 9a3be3d667f..dc1367bbdbc 100644 --- a/src/bin/pgbench/exprscan.l +++ b/src/bin/pgbench/exprscan.l @@ -66,6 +66,9 @@ space [ \t\r\f\v] nonspace [^ \t\r\f\v\n] newline [\n] +/* Line continuation marker */ +continuation \\{newline} + /* Exclusive states */ %x EXPR @@ -96,8 +99,20 @@ newline [\n] return 1; } + /* + * We need this rule to avoid returning "word\" instead of recognizing + * a continuation marker just after a word: + */ +{nonspace}+{continuation} { + /* Found "word\\\n", emit and return just "word" */ + psqlscan_emit(cur_state, yytext, yyleng - 2); + return 1; + } + {space}+ { /* ignore */ } +{continuation} { /* ignore */ } + {newline} { /* report end of command */ last_was_newline = true; @@ -138,14 +153,16 @@ newline [\n] return FUNCTION; } +{space}+ { /* ignore */ } + +{continuation} { /* ignore */ } + {newline} { /* report end of command */ last_was_newline = true; return 0; } -{space}+ { /* ignore */ } - . { /* * must strdup yytext so that expr_yyerror_more doesn't |