---
source: crates/squawk_syntax/src/test.rs
input_file: crates/squawk_syntax/test_data/validation/unicode_escape_string.sql
---
SOURCE_FILE@0..507
COMMENT@0..5 "-- ok"
WHITESPACE@5..6 "\n"
SELECT@6..30
SELECT_CLAUSE@6..30
SELECT_KW@6..12 "select"
WHITESPACE@12..13 " "
TARGET_LIST@13..30
TARGET@13..30
LITERAL@13..30
UNICODE_ESC_STRING@13..30 "U&'\\0061\\+000061'"
SEMICOLON@30..31 ";"
WHITESPACE@31..32 "\n"
SELECT@32..45
SELECT_CLAUSE@32..45
SELECT_KW@32..38 "select"
WHITESPACE@38..39 " "
TARGET_LIST@39..45
TARGET@39..45
LITERAL@39..45
UNICODE_ESC_STRING@39..45 "U&'\\\\'"
SEMICOLON@45..46 ";"
WHITESPACE@46..47 "\n"
SELECT@47..79
SELECT_CLAUSE@47..79
SELECT_KW@47..53 "select"
WHITESPACE@53..54 " "
TARGET_LIST@54..79
TARGET@54..79
LITERAL@54..79
UNICODE_ESC_STRING@54..67 "U&'ok: !0061'"
WHITESPACE@67..68 " "
UESCAPE_KW@68..75 "UESCAPE"
WHITESPACE@75..76 " "
STRING@76..79 "'!'"
SEMICOLON@79..80 ";"
WHITESPACE@80..81 "\n"
SELECT@81..106
SELECT_CLAUSE@81..106
SELECT_KW@81..87 "select"
WHITESPACE@87..88 " "
TARGET_LIST@88..106
TARGET@88..106
LITERAL@88..106
UNICODE_ESC_STRING@88..94 "U&' \\'"
WHITESPACE@94..95 " "
UESCAPE_KW@95..102 "UESCAPE"
WHITESPACE@102..103 " "
STRING@103..106 "'!'"
SEMICOLON@106..107 ";"
WHITESPACE@107..109 "\n\n"
COMMENT@109..118 "-- errors"
WHITESPACE@118..119 "\n"
SELECT@119..134
SELECT_CLAUSE@119..134
SELECT_KW@119..125 "select"
WHITESPACE@125..126 " "
TARGET_LIST@126..134
TARGET@126..134
LITERAL@126..134
UNICODE_ESC_STRING@126..134 "U&'\\006'"
SEMICOLON@134..135 ";"
WHITESPACE@135..136 "\n"
SELECT@136..153
SELECT_CLAUSE@136..153
SELECT_KW@136..142 "select"
WHITESPACE@142..143 " "
TARGET_LIST@143..153
TARGET@143..153
LITERAL@143..153
UNICODE_ESC_STRING@143..153 "U&'\\+0061'"
SEMICOLON@153..154 ";"
WHITESPACE@154..155 "\n"
SELECT@155..188
SELECT_CLAUSE@155..188
SELECT_KW@155..161 "select"
WHITESPACE@161..162 " "
TARGET_LIST@162..188
TARGET@162..188
LITERAL@162..188
UNICODE_ESC_STRING@162..176 "U&'wrong: \\06'"
WHITESPACE@176..177 " "
UESCAPE_KW@177..184 "UESCAPE"
WHITESPACE@184..185 " "
STRING@185..188 "'\\'"
SEMICOLON@188..189 ";"
WHITESPACE@189..190 "\n"
SELECT@190..224
SELECT_CLAUSE@190..224
SELECT_KW@190..196 "select"
WHITESPACE@196..197 " "
TARGET_LIST@197..224
TARGET@197..224
LITERAL@197..224
UNICODE_ESC_STRING@197..212 "U&'wrong: !061'"
WHITESPACE@212..213 " "
UESCAPE_KW@213..220 "UESCAPE"
WHITESPACE@220..221 " "
STRING@221..224 "'!'"
SEMICOLON@224..225 ";"
WHITESPACE@225..226 "\n"
SELECT@226..260
SELECT_CLAUSE@226..260
SELECT_KW@226..232 "select"
WHITESPACE@232..233 " "
TARGET_LIST@233..260
TARGET@233..260
LITERAL@233..260
UNICODE_ESC_STRING@233..260 "U&'many: \\061 \\+0061 ..."
SEMICOLON@260..261 ";"
WHITESPACE@261..262 "\n"
SELECT@262..280
SELECT_CLAUSE@262..280
SELECT_KW@262..268 "select"
WHITESPACE@268..269 " "
TARGET_LIST@269..280
TARGET@269..280
LITERAL@269..280
UNICODE_ESC_STRING@269..280 "U&'\\D800\\\\'"
SEMICOLON@280..281 ";"
WHITESPACE@281..282 "\n"
SELECT@282..308
SELECT_CLAUSE@282..308
SELECT_KW@282..288 "select"
WHITESPACE@288..289 " "
TARGET_LIST@289..308
TARGET@289..308
LITERAL@289..308
UNICODE_ESC_STRING@289..308 "U&'\\D800\\D801\\DC00'"
SEMICOLON@308..309 ";"
WHITESPACE@309..310 "\n"
SELECT@310..323
SELECT_CLAUSE@310..323
SELECT_KW@310..316 "select"
WHITESPACE@316..317 " "
TARGET_LIST@317..323
TARGET@317..323
LITERAL@317..323
UNICODE_ESC_STRING@317..323 "U&' \\'"
SEMICOLON@323..324 ";"
WHITESPACE@324..325 "\n"
SELECT@325..352
SELECT_CLAUSE@325..352
SELECT_KW@325..331 "select"
WHITESPACE@331..332 " "
TARGET_LIST@332..352
TARGET@332..352
LITERAL@332..352
UNICODE_ESC_STRING@332..341 "U&'error'"
WHITESPACE@341..342 " "
UESCAPE_KW@342..349 "UESCAPE"
WHITESPACE@349..350 " "
STRING@350..352 "''"
SEMICOLON@352..353 ";"
WHITESPACE@353..354 "\n"
SELECT@354..382
SELECT_CLAUSE@354..382
SELECT_KW@354..360 "select"
WHITESPACE@360..361 " "
TARGET_LIST@361..382
TARGET@361..382
LITERAL@361..382
UNICODE_ESC_STRING@361..370 "U&'error'"
WHITESPACE@370..371 " "
UESCAPE_KW@371..378 "UESCAPE"
WHITESPACE@378..379 " "
STRING@379..382 "' '"
SEMICOLON@382..383 ";"
WHITESPACE@383..384 "\n"
SELECT@384..412
SELECT_CLAUSE@384..412
SELECT_KW@384..390 "select"
WHITESPACE@390..391 " "
TARGET_LIST@391..412
TARGET@391..412
LITERAL@391..412
UNICODE_ESC_STRING@391..400 "U&'error'"
WHITESPACE@400..401 " "
UESCAPE_KW@401..408 "UESCAPE"
WHITESPACE@408..409 " "
STRING@409..412 "'+'"
SEMICOLON@412..413 ";"
WHITESPACE@413..414 "\n"
SELECT@414..442
SELECT_CLAUSE@414..442
SELECT_KW@414..420 "select"
WHITESPACE@420..421 " "
TARGET_LIST@421..442
TARGET@421..442
LITERAL@421..442
UNICODE_ESC_STRING@421..430 "U&'error'"
WHITESPACE@430..431 " "
UESCAPE_KW@431..438 "UESCAPE"
WHITESPACE@438..439 " "
STRING@439..442 "'A'"
SEMICOLON@442..443 ";"
WHITESPACE@443..444 "\n"
SELECT@444..473
SELECT_CLAUSE@444..473
SELECT_KW@444..450 "select"
WHITESPACE@450..451 " "
TARGET_LIST@451..473
TARGET@451..473
LITERAL@451..473
UNICODE_ESC_STRING@451..460 "U&'error'"
WHITESPACE@460..461 " "
UESCAPE_KW@461..468 "UESCAPE"
WHITESPACE@468..469 " "
STRING@469..473 "'é'"
SEMICOLON@473..474 ";"
WHITESPACE@474..475 "\n"
SELECT@475..505
SELECT_CLAUSE@475..505
SELECT_KW@475..481 "select"
WHITESPACE@481..482 " "
TARGET_LIST@482..505
TARGET@482..505
LITERAL@482..505
UNICODE_ESC_STRING@482..491 "U&'error'"
WHITESPACE@491..492 " "
UESCAPE_KW@492..499 "UESCAPE"
WHITESPACE@499..500 " "
STRING@500..505 "'foo'"
SEMICOLON@505..506 ";"
WHITESPACE@506..507 "\n"
error[syntax-error]: Unicode escape requires 4 hex digits: \XXXX
╭▸
8 │ select U&'\006';
╰╴ ━━━━
error[syntax-error]: Unicode escape requires 6 hex digits: \+XXXXXX
╭▸
9 │ select U&'\+0061';
╰╴ ━━━━━━
error[syntax-error]: Unicode escape requires 4 hex digits: \XXXX
╭▸
10 │ select U&'wrong: \06' UESCAPE '\';
╰╴ ━━━
error[syntax-error]: Unicode escape requires 4 hex digits: !XXXX
╭▸
11 │ select U&'wrong: !061' UESCAPE '!';
╰╴ ━━━━
error[syntax-error]: Unicode escape requires 4 hex digits: \XXXX
╭▸
12 │ select U&'many: \061 \+0061 \zzzz';
╰╴ ━━━━
error[syntax-error]: Unicode escape requires 6 hex digits: \+XXXXXX
╭▸
12 │ select U&'many: \061 \+0061 \zzzz';
╰╴ ━━━━━━
error[syntax-error]: Invalid Unicode escape sequence
╭▸
12 │ select U&'many: \061 \+0061 \zzzz';
╰╴ ━━
error[syntax-error]: Invalid Unicode surrogate pair
╭▸
13 │ select U&'\D800\\';
╰╴ ━━━━━
error[syntax-error]: Invalid Unicode surrogate pair
╭▸
14 │ select U&'\D800\D801\DC00';
╰╴ ━━━━━━━━━━
error[syntax-error]: Invalid Unicode surrogate pair
╭▸
14 │ select U&'\D800\D801\DC00';
╰╴ ━━━━━
error[syntax-error]: Invalid Unicode escape sequence
╭▸
15 │ select U&' \';
╰╴ ━
error[syntax-error]: Invalid unicode escape character
╭▸
16 │ select U&'error' UESCAPE '';
╰╴ ━━
error[syntax-error]: Invalid unicode escape character
╭▸
17 │ select U&'error' UESCAPE ' ';
╰╴ ━━━
error[syntax-error]: Invalid unicode escape character
╭▸
18 │ select U&'error' UESCAPE '+';
╰╴ ━━━
error[syntax-error]: Invalid unicode escape character
╭▸
19 │ select U&'error' UESCAPE 'A';
╰╴ ━━━
error[syntax-error]: Invalid unicode escape character
╭▸
20 │ select U&'error' UESCAPE 'é';
╰╴ ━━━
error[syntax-error]: Invalid unicode escape character
╭▸
21 │ select U&'error' UESCAPE 'foo';
╰╴ ━━━━━