mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-27 08:39:28 +08:00
Fix pgbench lexer's "continuation" rule to cope with Windows newlines.
Our general practice in frontend code is to accept input with either
Unix-style newlines (\n) or DOS-style (\r\n). pgbench was mostly down
with that, but its rule for line continuations (backslash-newline) was
not. This had been masked on Windows buildfarm machines before commit
0ba06e0bf
by use of Windows text mode to read files. We could have fixed
it by forcing text mode again, but it's better to fix the parsing code
so that Windows-style text files on Unix systems don't cause problems.
Back-patch to v10 where pgbench grew line continuations.
Discussion: https://postgr.es/m/17194.1537191697@sss.pgh.pa.us
This commit is contained in:
parent
f9907c6ac2
commit
db37ab2c60
@ -69,7 +69,7 @@ nonspace [^ \t\r\f\v\n]
|
||||
newline [\n]
|
||||
|
||||
/* Line continuation marker */
|
||||
continuation \\{newline}
|
||||
continuation \\\r?{newline}
|
||||
|
||||
/* case insensitive keywords */
|
||||
and [Aa][Nn][Dd]
|
||||
@ -122,8 +122,12 @@ notnull [Nn][Oo][Tt][Nn][Uu][Ll][Ll]
|
||||
* a continuation marker just after a word:
|
||||
*/
|
||||
{nonspace}+{continuation} {
|
||||
/* Found "word\\\n", emit and return just "word" */
|
||||
psqlscan_emit(cur_state, yytext, yyleng - 2);
|
||||
/* Found "word\\\r?\n", emit and return just "word" */
|
||||
int wordlen = yyleng - 2;
|
||||
if (yytext[wordlen] == '\r')
|
||||
wordlen--;
|
||||
Assert(yytext[wordlen] == '\\');
|
||||
psqlscan_emit(cur_state, yytext, wordlen);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user