---
source: crates/squawk_syntax/src/test.rs
input_file: crates/squawk_syntax/test_data/validation/validate_string_continuation.sql
---
SOURCE_FILE@0..1305
COMMENT@0..46 "-- ok strings with ne ..."
WHITESPACE@46..47 "\n"
SELECT@47..67
SELECT_CLAUSE@47..66
SELECT_KW@47..53 "select"
WHITESPACE@53..54 " "
TARGET_LIST@54..66
TARGET@54..66
LITERAL@54..66
STRING@54..59 "'foo'"
WHITESPACE@59..61 " \n"
STRING@61..66 "'bar'"
SEMICOLON@66..67 ";"
WHITESPACE@67..68 "\n"
SELECT@68..102
SELECT_CLAUSE@68..101
SELECT_KW@68..74 "select"
WHITESPACE@74..75 " "
TARGET_LIST@75..101
TARGET@75..101
LITERAL@75..101
STRING@75..82 "'hello'"
WHITESPACE@82..83 " "
COMMENT@83..93 "-- comment"
WHITESPACE@93..94 "\n"
STRING@94..101 "'world'"
SEMICOLON@101..102 ";"
WHITESPACE@102..103 "\n"
SELECT@103..123
SELECT_CLAUSE@103..122
SELECT_KW@103..109 "select"
WHITESPACE@109..110 " "
TARGET_LIST@110..122
TARGET@110..122
LITERAL@110..122
ESC_STRING@110..116 "e'foo'"
WHITESPACE@116..117 "\n"
STRING@117..122 "'bar'"
SEMICOLON@122..123 ";"
WHITESPACE@123..124 "\n"
SELECT@124..159
SELECT_CLAUSE@124..158
SELECT_KW@124..130 "select"
WHITESPACE@130..131 " "
TARGET_LIST@131..158
TARGET@131..158
LITERAL@131..158
ESC_STRING@131..139 "e'hello'"
WHITESPACE@139..140 " "
COMMENT@140..150 "-- comment"
WHITESPACE@150..151 "\n"
STRING@151..158 "'world'"
SEMICOLON@158..159 ";"
WHITESPACE@159..160 "\n"
SELECT@160..181
SELECT_CLAUSE@160..180
SELECT_KW@160..166 "select"
WHITESPACE@166..167 " "
TARGET_LIST@167..180
TARGET@167..180
LITERAL@167..180
UNICODE_ESC_STRING@167..174 "u&'foo'"
WHITESPACE@174..175 "\n"
STRING@175..180 "'bar'"
SEMICOLON@180..181 ";"
WHITESPACE@181..182 "\n"
SELECT@182..218
SELECT_CLAUSE@182..217
SELECT_KW@182..188 "select"
WHITESPACE@188..189 " "
TARGET_LIST@189..217
TARGET@189..217
LITERAL@189..217
UNICODE_ESC_STRING@189..198 "u&'hello'"
WHITESPACE@198..199 " "
COMMENT@199..209 "-- comment"
WHITESPACE@209..210 "\n"
STRING@210..217 "'world'"
SEMICOLON@217..218 ";"
WHITESPACE@218..219 "\n"
SELECT@219..237
SELECT_CLAUSE@219..236
SELECT_KW@219..225 "select"
WHITESPACE@225..226 " "
TARGET_LIST@226..236
TARGET@226..236
LITERAL@226..236
BIT_STRING@226..231 "b'01'"
WHITESPACE@231..232 "\n"
STRING@232..236 "'10'"
SEMICOLON@236..237 ";"
WHITESPACE@237..238 "\n"
SELECT@238..268
SELECT_CLAUSE@238..267
SELECT_KW@238..244 "select"
WHITESPACE@244..245 " "
TARGET_LIST@245..267
TARGET@245..267
LITERAL@245..267
BIT_STRING@245..251 "b'111'"
WHITESPACE@251..252 " "
COMMENT@252..262 "-- comment"
WHITESPACE@262..263 "\n"
STRING@263..267 "'10'"
SEMICOLON@267..268 ";"
WHITESPACE@268..269 "\n"
SELECT@269..287
SELECT_CLAUSE@269..286
SELECT_KW@269..275 "select"
WHITESPACE@275..276 " "
TARGET_LIST@276..286
TARGET@276..286
LITERAL@276..286
BYTE_STRING@276..281 "x'1F'"
WHITESPACE@281..282 "\n"
STRING@282..286 "'10'"
SEMICOLON@286..287 ";"
WHITESPACE@287..288 "\n"
SELECT@288..318
SELECT_CLAUSE@288..317
SELECT_KW@288..294 "select"
WHITESPACE@294..295 " "
TARGET_LIST@295..317
TARGET@295..317
LITERAL@295..317
BYTE_STRING@295..301 "x'1F1'"
WHITESPACE@301..302 " "
COMMENT@302..312 "-- comment"
WHITESPACE@312..313 "\n"
STRING@313..317 "'10'"
SEMICOLON@317..318 ";"
WHITESPACE@318..320 "\n\n"
COMMENT@320..335 "-- error string"
WHITESPACE@335..336 "\n"
SELECT@336..355
SELECT_CLAUSE@336..354
SELECT_KW@336..342 "select"
WHITESPACE@342..343 " "
TARGET_LIST@343..354
TARGET@343..354
LITERAL@343..354
STRING@343..348 "'foo'"
WHITESPACE@348..349 " "
STRING@349..354 "'bar'"
SEMICOLON@354..355 ";"
WHITESPACE@355..356 "\n"
SELECT@356..389
SELECT_CLAUSE@356..388
SELECT_KW@356..362 "select"
WHITESPACE@362..363 " "
TARGET_LIST@363..388
TARGET@363..388
LITERAL@363..388
STRING@363..368 "'foo'"
WHITESPACE@368..369 " "
COMMENT@369..382 "/* comment */"
WHITESPACE@382..383 " "
STRING@383..388 "'bar'"
SEMICOLON@388..389 ";"
WHITESPACE@389..390 "\n"
SELECT@390..456
SELECT_CLAUSE@390..455
SELECT_KW@390..396 "select"
WHITESPACE@396..397 " "
TARGET_LIST@397..455
TARGET@397..455
LITERAL@397..455
STRING@397..404 "'hello'"
WHITESPACE@404..405 " "
COMMENT@405..418 "/* comment */"
WHITESPACE@418..419 " "
STRING@419..424 "'bar'"
WHITESPACE@424..425 " "
COMMENT@425..446 "/* another comment */"
WHITESPACE@446..447 " "
STRING@447..455 "' world'"
SEMICOLON@455..456 ";"
WHITESPACE@456..457 "\n"
SELECT@457..483
SELECT_CLAUSE@457..482
SELECT_KW@457..463 "select"
WHITESPACE@463..464 " "
TARGET_LIST@464..482
TARGET@464..482
LITERAL@464..482
STRING@464..469 "'foo'"
WHITESPACE@469..470 " "
STRING@470..475 "'bar'"
WHITESPACE@475..476 " "
STRING@476..482 "'buzz'"
SEMICOLON@482..483 ";"
WHITESPACE@483..485 "\n\n"
COMMENT@485..507 "-- error escape string"
WHITESPACE@507..508 "\n"
SELECT@508..528
SELECT_CLAUSE@508..527
SELECT_KW@508..514 "select"
WHITESPACE@514..515 " "
TARGET_LIST@515..527
TARGET@515..527
LITERAL@515..527
ESC_STRING@515..521 "e'foo'"
WHITESPACE@521..522 " "
STRING@522..527 "'bar'"
SEMICOLON@527..528 ";"
WHITESPACE@528..529 "\n"
SELECT@529..563
SELECT_CLAUSE@529..562
SELECT_KW@529..535 "select"
WHITESPACE@535..536 " "
TARGET_LIST@536..562
TARGET@536..562
LITERAL@536..562
ESC_STRING@536..542 "e'foo'"
WHITESPACE@542..543 " "
COMMENT@543..556 "/* comment */"
WHITESPACE@556..557 " "
STRING@557..562 "'bar'"
SEMICOLON@562..563 ";"
WHITESPACE@563..564 "\n"
SELECT@564..631
SELECT_CLAUSE@564..630
SELECT_KW@564..570 "select"
WHITESPACE@570..571 " "
TARGET_LIST@571..630
TARGET@571..630
LITERAL@571..630
ESC_STRING@571..579 "e'hello'"
WHITESPACE@579..580 " "
COMMENT@580..593 "/* comment */"
WHITESPACE@593..594 " "
STRING@594..599 "'bar'"
WHITESPACE@599..600 " "
COMMENT@600..621 "/* another comment */"
WHITESPACE@621..622 " "
STRING@622..630 "' world'"
SEMICOLON@630..631 ";"
WHITESPACE@631..632 "\n"
SELECT@632..659
SELECT_CLAUSE@632..658
SELECT_KW@632..638 "select"
WHITESPACE@638..639 " "
TARGET_LIST@639..658
TARGET@639..658
LITERAL@639..658
ESC_STRING@639..645 "e'foo'"
WHITESPACE@645..646 " "
STRING@646..651 "'bar'"
WHITESPACE@651..652 " "
STRING@652..658 "'buzz'"
SEMICOLON@658..659 ";"
WHITESPACE@659..660 "\n"
SELECT@660..681
SELECT_CLAUSE@660..680
SELECT_KW@660..666 "select"
WHITESPACE@666..667 " "
TARGET_LIST@667..680
TARGET@667..680
LITERAL@667..680
ESC_STRING@667..673 "e'foo'"
WHITESPACE@673..674 "\n"
STRING@674..680 "'\\u00'"
SEMICOLON@680..681 ";"
WHITESPACE@681..683 "\n\n"
COMMENT@683..713 "-- error unicode esca ..."
WHITESPACE@713..714 "\n"
SELECT@714..735
SELECT_CLAUSE@714..734
SELECT_KW@714..720 "select"
WHITESPACE@720..721 " "
TARGET_LIST@721..734
TARGET@721..734
LITERAL@721..734
UNICODE_ESC_STRING@721..728 "u&'foo'"
WHITESPACE@728..729 " "
STRING@729..734 "'bar'"
SEMICOLON@734..735 ";"
WHITESPACE@735..736 "\n"
SELECT@736..771
SELECT_CLAUSE@736..770
SELECT_KW@736..742 "select"
WHITESPACE@742..743 " "
TARGET_LIST@743..770
TARGET@743..770
LITERAL@743..770
UNICODE_ESC_STRING@743..750 "u&'foo'"
WHITESPACE@750..751 " "
COMMENT@751..764 "/* comment */"
WHITESPACE@764..765 " "
STRING@765..770 "'bar'"
SEMICOLON@770..771 ";"
WHITESPACE@771..772 "\n"
SELECT@772..840
SELECT_CLAUSE@772..839
SELECT_KW@772..778 "select"
WHITESPACE@778..779 " "
TARGET_LIST@779..839
TARGET@779..839
LITERAL@779..839
UNICODE_ESC_STRING@779..788 "u&'hello'"
WHITESPACE@788..789 " "
COMMENT@789..802 "/* comment */"
WHITESPACE@802..803 " "
STRING@803..808 "'bar'"
WHITESPACE@808..809 " "
COMMENT@809..830 "/* another comment */"
WHITESPACE@830..831 " "
STRING@831..839 "' world'"
SEMICOLON@839..840 ";"
WHITESPACE@840..841 "\n"
SELECT@841..869
SELECT_CLAUSE@841..868
SELECT_KW@841..847 "select"
WHITESPACE@847..848 " "
TARGET_LIST@848..868
TARGET@848..868
LITERAL@848..868
UNICODE_ESC_STRING@848..855 "u&'foo'"
WHITESPACE@855..856 " "
STRING@856..861 "'bar'"
WHITESPACE@861..862 " "
STRING@862..868 "'buzz'"
SEMICOLON@868..869 ";"
WHITESPACE@869..870 "\n"
SELECT@870..892
SELECT_CLAUSE@870..891
SELECT_KW@870..876 "select"
WHITESPACE@876..877 " "
TARGET_LIST@877..891
TARGET@877..891
LITERAL@877..891
UNICODE_ESC_STRING@877..884 "u&'foo'"
WHITESPACE@884..885 "\n"
STRING@885..891 "'\\010'"
SEMICOLON@891..892 ";"
WHITESPACE@892..894 "\n\n"
COMMENT@894..913 "-- error bit string"
WHITESPACE@913..914 "\n"
SELECT@914..932
SELECT_CLAUSE@914..931
SELECT_KW@914..920 "select"
WHITESPACE@920..921 " "
TARGET_LIST@921..931
TARGET@921..931
LITERAL@921..931
BIT_STRING@921..926 "b'01'"
WHITESPACE@926..927 " "
STRING@927..931 "'10'"
SEMICOLON@931..932 ";"
WHITESPACE@932..933 "\n"
SELECT@933..965
SELECT_CLAUSE@933..964
SELECT_KW@933..939 "select"
WHITESPACE@939..940 " "
TARGET_LIST@940..964
TARGET@940..964
LITERAL@940..964
BIT_STRING@940..945 "b'01'"
WHITESPACE@945..946 " "
COMMENT@946..959 "/* comment */"
WHITESPACE@959..960 " "
STRING@960..964 "'11'"
SEMICOLON@964..965 ";"
WHITESPACE@965..966 "\n"
SELECT@966..1025
SELECT_CLAUSE@966..1024
SELECT_KW@966..972 "select"
WHITESPACE@972..973 " "
TARGET_LIST@973..1024
TARGET@973..1024
LITERAL@973..1024
BIT_STRING@973..978 "b'01'"
WHITESPACE@978..979 " "
COMMENT@979..992 "/* comment */"
WHITESPACE@992..993 " "
STRING@993..997 "'11'"
WHITESPACE@997..998 " "
COMMENT@998..1019 "/* another comment */"
WHITESPACE@1019..1020 " "
STRING@1020..1024 "'10'"
SEMICOLON@1024..1025 ";"
WHITESPACE@1025..1026 "\n"
SELECT@1026..1049
SELECT_CLAUSE@1026..1048
SELECT_KW@1026..1032 "select"
WHITESPACE@1032..1033 " "
TARGET_LIST@1033..1048
TARGET@1033..1048
LITERAL@1033..1048
BIT_STRING@1033..1038 "b'10'"
WHITESPACE@1038..1039 " "
STRING@1039..1043 "'10'"
WHITESPACE@1043..1044 " "
STRING@1044..1048 "'11'"
SEMICOLON@1048..1049 ";"
WHITESPACE@1049..1050 "\n"
SELECT@1050..1068
SELECT_CLAUSE@1050..1067
SELECT_KW@1050..1056 "select"
WHITESPACE@1056..1057 " "
TARGET_LIST@1057..1067
TARGET@1057..1067
LITERAL@1057..1067
BIT_STRING@1057..1062 "b'10'"
WHITESPACE@1062..1063 "\n"
STRING@1063..1067 "'20'"
SEMICOLON@1067..1068 ";"
WHITESPACE@1068..1070 "\n\n"
COMMENT@1070..1090 "-- error byte string"
WHITESPACE@1090..1091 "\n"
SELECT@1091..1109
SELECT_CLAUSE@1091..1108
SELECT_KW@1091..1097 "select"
WHITESPACE@1097..1098 " "
TARGET_LIST@1098..1108
TARGET@1098..1108
LITERAL@1098..1108
BYTE_STRING@1098..1103 "x'0F'"
WHITESPACE@1103..1104 " "
STRING@1104..1108 "'10'"
SEMICOLON@1108..1109 ";"
WHITESPACE@1109..1110 "\n"
SELECT@1110..1142
SELECT_CLAUSE@1110..1141
SELECT_KW@1110..1116 "select"
WHITESPACE@1116..1117 " "
TARGET_LIST@1117..1141
TARGET@1117..1141
LITERAL@1117..1141
BYTE_STRING@1117..1122 "x'01'"
WHITESPACE@1122..1123 " "
COMMENT@1123..1136 "/* comment */"
WHITESPACE@1136..1137 " "
STRING@1137..1141 "'1F'"
SEMICOLON@1141..1142 ";"
WHITESPACE@1142..1143 "\n"
SELECT@1143..1202
SELECT_CLAUSE@1143..1201
SELECT_KW@1143..1149 "select"
WHITESPACE@1149..1150 " "
TARGET_LIST@1150..1201
TARGET@1150..1201
LITERAL@1150..1201
BYTE_STRING@1150..1155 "x'01'"
WHITESPACE@1155..1156 " "
COMMENT@1156..1169 "/* comment */"
WHITESPACE@1169..1170 " "
STRING@1170..1174 "'1F'"
WHITESPACE@1174..1175 " "
COMMENT@1175..1196 "/* another comment */"
WHITESPACE@1196..1197 " "
STRING@1197..1201 "'10'"
SEMICOLON@1201..1202 ";"
WHITESPACE@1202..1203 "\n"
SELECT@1203..1226
SELECT_CLAUSE@1203..1225
SELECT_KW@1203..1209 "select"
WHITESPACE@1209..1210 " "
TARGET_LIST@1210..1225
TARGET@1210..1225
LITERAL@1210..1225
BYTE_STRING@1210..1215 "x'1F'"
WHITESPACE@1215..1216 " "
STRING@1216..1220 "'F0'"
WHITESPACE@1220..1221 " "
STRING@1221..1225 "'11'"
SEMICOLON@1225..1226 ";"
WHITESPACE@1226..1227 "\n"
SELECT@1227..1245
SELECT_CLAUSE@1227..1244
SELECT_KW@1227..1233 "select"
WHITESPACE@1233..1234 " "
TARGET_LIST@1234..1244
TARGET@1234..1244
LITERAL@1234..1244
BYTE_STRING@1234..1239 "x'1F'"
WHITESPACE@1239..1240 "\n"
STRING@1240..1244 "'G0'"
SEMICOLON@1244..1245 ";"
WHITESPACE@1245..1247 "\n\n"
COMMENT@1247..1288 "-- ok CR-only newline ..."
WHITESPACE@1288..1289 "\n"
SELECT@1289..1304
SELECT_CLAUSE@1289..1303
SELECT_KW@1289..1295 "select"
WHITESPACE@1295..1296 " "
TARGET_LIST@1296..1303
TARGET@1296..1303
LITERAL@1296..1303
STRING@1296..1299 "'a'"
WHITESPACE@1299..1300 "\r"
STRING@1300..1303 "'b'"
SEMICOLON@1303..1304 ";"
WHITESPACE@1304..1305 "\n"
error[syntax-error]: Expected new line or comma between string literals
╭▸
24 │ select 'foo' 'bar';
╰╴ ━
error[syntax-error]: Comments between string literals are not allowed.
╭▸
25 │ select 'foo' /* comment */ 'bar';
╰╴ ━━━━━━━━━━━━━
error[syntax-error]: Comments between string literals are not allowed.
╭▸
26 │ select 'hello' /* comment */ 'bar' /* another comment */ ' world';
╰╴ ━━━━━━━━━━━━━
error[syntax-error]: Comments between string literals are not allowed.
╭▸
26 │ select 'hello' /* comment */ 'bar' /* another comment */ ' world';
╰╴ ━━━━━━━━━━━━━━━━━━━━━
error[syntax-error]: Expected new line or comma between string literals
╭▸
27 │ select 'foo' 'bar' 'buzz';
╰╴ ━
error[syntax-error]: Expected new line or comma between string literals
╭▸
27 │ select 'foo' 'bar' 'buzz';
╰╴ ━
error[syntax-error]: Expected new line or comma between string literals
╭▸
30 │ select e'foo' 'bar';
╰╴ ━
error[syntax-error]: Comments between string literals are not allowed.
╭▸
31 │ select e'foo' /* comment */ 'bar';
╰╴ ━━━━━━━━━━━━━
error[syntax-error]: Comments between string literals are not allowed.
╭▸
32 │ select e'hello' /* comment */ 'bar' /* another comment */ ' world';
╰╴ ━━━━━━━━━━━━━
error[syntax-error]: Comments between string literals are not allowed.
╭▸
32 │ select e'hello' /* comment */ 'bar' /* another comment */ ' world';
╰╴ ━━━━━━━━━━━━━━━━━━━━━
error[syntax-error]: Expected new line or comma between string literals
╭▸
33 │ select e'foo' 'bar' 'buzz';
╰╴ ━
error[syntax-error]: Expected new line or comma between string literals
╭▸
33 │ select e'foo' 'bar' 'buzz';
╰╴ ━
error[syntax-error]: Unicode escape requires 4 hex digits: \uXXXX
╭▸
35 │ '\u00';
╰╴ ━━━━
error[syntax-error]: Expected new line or comma between string literals
╭▸
38 │ select u&'foo' 'bar';
╰╴ ━
error[syntax-error]: Comments between string literals are not allowed.
╭▸
39 │ select u&'foo' /* comment */ 'bar';
╰╴ ━━━━━━━━━━━━━
error[syntax-error]: Comments between string literals are not allowed.
╭▸
40 │ select u&'hello' /* comment */ 'bar' /* another comment */ ' world';
╰╴ ━━━━━━━━━━━━━
error[syntax-error]: Comments between string literals are not allowed.
╭▸
40 │ select u&'hello' /* comment */ 'bar' /* another comment */ ' world';
╰╴ ━━━━━━━━━━━━━━━━━━━━━
error[syntax-error]: Expected new line or comma between string literals
╭▸
41 │ select u&'foo' 'bar' 'buzz';
╰╴ ━
error[syntax-error]: Expected new line or comma between string literals
╭▸
41 │ select u&'foo' 'bar' 'buzz';
╰╴ ━
error[syntax-error]: Unicode escape requires 4 hex digits: \XXXX
╭▸
43 │ '\010';
╰╴ ━━━━
error[syntax-error]: Expected new line or comma between string literals
╭▸
46 │ select b'01' '10';
╰╴ ━
error[syntax-error]: Comments between string literals are not allowed.
╭▸
47 │ select b'01' /* comment */ '11';
╰╴ ━━━━━━━━━━━━━
error[syntax-error]: Comments between string literals are not allowed.
╭▸
48 │ select b'01' /* comment */ '11' /* another comment */ '10';
╰╴ ━━━━━━━━━━━━━
error[syntax-error]: Comments between string literals are not allowed.
╭▸
48 │ select b'01' /* comment */ '11' /* another comment */ '10';
╰╴ ━━━━━━━━━━━━━━━━━━━━━
error[syntax-error]: Expected new line or comma between string literals
╭▸
49 │ select b'10' '10' '11';
╰╴ ━
error[syntax-error]: Expected new line or comma between string literals
╭▸
49 │ select b'10' '10' '11';
╰╴ ━
error[syntax-error]: "2" is not a valid binary digit
╭▸
51 │ '20';
╰╴ ━
error[syntax-error]: Expected new line or comma between string literals
╭▸
54 │ select x'0F' '10';
╰╴ ━
error[syntax-error]: Comments between string literals are not allowed.
╭▸
55 │ select x'01' /* comment */ '1F';
╰╴ ━━━━━━━━━━━━━
error[syntax-error]: Comments between string literals are not allowed.
╭▸
56 │ select x'01' /* comment */ '1F' /* another comment */ '10';
╰╴ ━━━━━━━━━━━━━
error[syntax-error]: Comments between string literals are not allowed.
╭▸
56 │ select x'01' /* comment */ '1F' /* another comment */ '10';
╰╴ ━━━━━━━━━━━━━━━━━━━━━
error[syntax-error]: Expected new line or comma between string literals
╭▸
57 │ select x'1F' 'F0' '11';
╰╴ ━
error[syntax-error]: Expected new line or comma between string literals
╭▸
57 │ select x'1F' 'F0' '11';
╰╴ ━
error[syntax-error]: "G" is not a valid hexadecimal digit
╭▸
59 │ 'G0';
╰╴ ━