1use itertools::Itertools;
2use sqruff_lib_core::dialects::base::Dialect;
3use sqruff_lib_core::dialects::init::DialectKind;
4use sqruff_lib_core::dialects::syntax::SyntaxKind;
5use sqruff_lib_core::helpers::{Config, ToMatchable};
6use sqruff_lib_core::parser::grammar::anyof::{
7 AnyNumberOf, any_set_of, one_of, optionally_bracketed,
8};
9use sqruff_lib_core::parser::grammar::base::{Nothing, Ref};
10use sqruff_lib_core::parser::grammar::delimited::Delimited;
11use sqruff_lib_core::parser::grammar::sequence::{Bracketed, Sequence};
12use sqruff_lib_core::parser::lexer::Matcher;
13use sqruff_lib_core::parser::matchable::{Matchable, MatchableTrait};
14use sqruff_lib_core::parser::node_matcher::NodeMatcher;
15use sqruff_lib_core::parser::parsers::{MultiStringParser, RegexParser, StringParser, TypedParser};
16use sqruff_lib_core::parser::segments::generator::SegmentGenerator;
17use sqruff_lib_core::parser::segments::meta::MetaSegment;
18use sqruff_lib_core::parser::types::ParseMode;
19use sqruff_lib_core::vec_of_erased;
20
21use super::ansi::{self, raw_dialect};
22use super::snowflake_keywords::{SNOWFLAKE_RESERVED_KEYWORDS, SNOWFLAKE_UNRESERVED_KEYWORDS};
23
24pub fn dialect() -> Dialect {
25 let mut snowflake_dialect = raw_dialect();
26 snowflake_dialect.name = DialectKind::Snowflake;
27
28 snowflake_dialect.replace_grammar(
29 "SelectClauseElementSegment",
30 ansi::select_clause_element().copy(
31 Some(vec_of_erased![Sequence::new(vec_of_erased![
32 Ref::new("SystemFunctionName"),
33 Bracketed::new(vec_of_erased![Ref::new("QuotedLiteralSegment")])
34 ])]),
35 None,
36 Some(Ref::new("WildcardExpressionSegment").to_matchable()),
37 None,
38 Vec::new(),
39 false,
40 ),
41 );
42
43 snowflake_dialect.replace_grammar(
44 "FromExpressionElementSegment",
45 Sequence::new(vec_of_erased![
46 Ref::new("PreTableFunctionKeywordsGrammar").optional(),
47 optionally_bracketed(vec_of_erased![Ref::new("TableExpressionSegment")]),
48 Ref::new("AliasExpressionSegment")
49 .exclude(one_of(vec_of_erased![
50 Ref::new("FromClauseTerminatorGrammar"),
51 Ref::new("SamplingExpressionSegment"),
52 Ref::new("ChangesClauseSegment"),
53 Ref::new("JoinLikeClauseGrammar"),
54 Ref::keyword("CROSS"),
55 ]))
56 .optional(),
57 Sequence::new(vec_of_erased![
58 Ref::keyword("WITH"),
59 Ref::keyword("OFFSET"),
60 Ref::new("AliasExpressionSegment"),
61 ])
62 .config(|this| this.optional()),
63 Ref::new("SamplingExpressionSegment").optional(),
64 Ref::new("PostTableExpressionGrammar").optional(),
65 ])
66 .to_matchable(),
67 );
68
69 snowflake_dialect.patch_lexer_matchers(vec![
70 Matcher::regex(
71 "single_quote",
72 r"'([^'\\]|\\.|'')*'",
73 SyntaxKind::SingleQuote,
74 ),
75 Matcher::regex(
76 "inline_comment",
77 r"(--|#|//)[^\n]*",
78 SyntaxKind::InlineComment,
79 ),
80 ]);
81
82 snowflake_dialect.insert_lexer_matchers(
83 vec![
84 Matcher::string("parameter_assigner", "=>", SyntaxKind::ParameterAssigner),
85 Matcher::string("function_assigner", "->", SyntaxKind::FunctionAssigner),
86 Matcher::regex(
87 "stage_path",
88 r"(?:@[^\s;)]+|'@[^']+')",
89 SyntaxKind::StagePath,
90 ),
91 Matcher::regex("column_selector", r"\$[0-9]+", SyntaxKind::ColumnSelector),
92 Matcher::regex("dollar_quote", r"\$\$.*\$\$", SyntaxKind::DollarQuote),
93 Matcher::regex(
94 "dollar_literal",
95 r"[$][a-zA-Z0-9_.]*",
96 SyntaxKind::DollarLiteral,
97 ),
98 Matcher::regex(
99 "inline_dollar_sign",
100 r"[a-zA-Z_][a-zA-Z0-9_$]*\$[a-zA-Z0-9_$]*",
101 SyntaxKind::Raw,
102 ),
103 Matcher::regex(
104 "unquoted_file_path",
105 r"file://(?:[a-zA-Z]+:|/)+(?:[0-9a-zA-Z\\/_*?-]+)(?:\.[0-9a-zA-Z]+)?",
106 SyntaxKind::UnquotedFilePath,
107 ),
108 Matcher::string("question_mark", "?", SyntaxKind::QuestionMark),
109 Matcher::string("exclude_bracket_open", "{-", SyntaxKind::ExcludeBracketOpen),
110 Matcher::string(
111 "exclude_bracket_close",
112 "-}",
113 SyntaxKind::ExcludeBracketClose,
114 ),
115 ],
116 "like_operator",
117 );
118
119 snowflake_dialect.insert_lexer_matchers(
120 vec![Matcher::string(
121 "walrus_operator",
122 ":=",
123 SyntaxKind::WalrusOperator,
124 )],
125 "equals",
126 );
127
128 snowflake_dialect.bracket_sets_mut("bracket_pairs").insert((
129 "exclude",
130 "StartExcludeBracketSegment",
131 "EndExcludeBracketSegment",
132 true,
133 ));
134
135 snowflake_dialect.sets_mut("bare_functions").clear();
136 snowflake_dialect.sets_mut("bare_functions").extend([
137 "CURRENT_DATE",
138 "CURRENT_TIME",
139 "CURRENT_TIMESTAMP",
140 "CURRENT_USER",
141 "LOCALTIME",
142 "LOCALTIMESTAMP",
143 ]);
144
145 snowflake_dialect.sets_mut("compression_types").clear();
146 snowflake_dialect.sets_mut("compression_types").extend([
147 "AUTO",
148 "AUTO_DETECT",
149 "GZIP",
150 "BZ2",
151 "BROTLI",
152 "ZSTD",
153 "DEFLATE",
154 "RAW_DEFLATE",
155 "LZO",
156 "NONE",
157 "SNAPPY",
158 ]);
159
160 snowflake_dialect.sets_mut("files_types").clear();
161 snowflake_dialect
162 .sets_mut("files_types")
163 .extend(["CSV", "JSON", "AVRO", "ORC", "PARQUET", "XML"]);
164
165 snowflake_dialect.sets_mut("warehouse_types").clear();
166 snowflake_dialect
167 .sets_mut("warehouse_types")
168 .extend(["STANDARD", "SNOWPARK-OPTIMIZED"]);
169
170 snowflake_dialect.sets_mut("warehouse_sizes").clear();
171 snowflake_dialect.sets_mut("warehouse_sizes").extend([
172 "XSMALL", "SMALL", "MEDIUM", "LARGE", "XLARGE", "XXLARGE", "X2LARGE", "XXXLARGE",
173 "X3LARGE", "X4LARGE", "X5LARGE", "X6LARGE", "X-SMALL", "X-LARGE", "2X-LARGE", "3X-LARGE",
174 "4X-LARGE", "5X-LARGE", "6X-LARGE",
175 ]);
176
177 snowflake_dialect
178 .sets_mut("warehouse_scaling_policies")
179 .clear();
180 snowflake_dialect
181 .sets_mut("warehouse_scaling_policies")
182 .extend(["STANDARD", "ECONOMY"]);
183
184 snowflake_dialect.add([
185 (
186 "ParameterAssignerSegment".into(),
187 StringParser::new(
188 "=>",
189 SyntaxKind::ParameterAssigner
190 )
191 .to_matchable()
192 .into(),
193 ),
194 (
195 "FunctionAssignerSegment".into(),
196 StringParser::new(
197 "->",
198 SyntaxKind::FunctionAssigner
199 )
200 .to_matchable()
201 .into(),
202 ),
203 (
204 "WalrusOperatorSegment".into(),
205 StringParser::new(
206 ":=",
207 SyntaxKind::AssignmentOperator
208 )
209 .to_matchable()
210 .into(),
211 ),
212 (
213 "QuotedStarSegment".into(),
214 StringParser::new(
215 "'*'",
216 SyntaxKind::QuotedStar
217 )
218 .to_matchable()
219 .into(),
220 ),
221 (
222 "NakedSemiStructuredElementSegment".into(),
223 RegexParser::new(
224 "[A-Z0-9_]*",
225 SyntaxKind::SemiStructuredElement
226 )
227 .to_matchable()
228 .into(),
229 ),
230 (
231 "QuotedSemiStructuredElementSegment".into(),
232 TypedParser::new(
233 SyntaxKind::DoubleQuote,
234 SyntaxKind::SemiStructuredElement,
235 )
236 .to_matchable()
237 .into(),
238 ),
239 (
240 "ColumnIndexIdentifierSegment".into(),
241 RegexParser::new(
242 r"\$[0-9]+",
243 SyntaxKind::ColumnIndexIdentifierSegment
244 )
245 .to_matchable()
246 .into(),
247 ),
248 (
249 "LocalVariableNameSegment".into(),
250 RegexParser::new(
251 r"[a-zA-Z0-9_]*",
252 SyntaxKind::Variable
253 )
254 .to_matchable()
255 .into(),
256 ),
257 (
258 "ReferencedVariableNameSegment".into(),
259 RegexParser::new(
260 r"\$[A-Z_][A-Z0-9_]*",
261 SyntaxKind::Variable
262 )
263 .to_matchable()
264 .into(),
265 ),
266 (
267 "WarehouseType".into(),
268 one_of(vec_of_erased![
269 MultiStringParser::new(
270 snowflake_dialect
271 .sets("warehouse_types")
272 .into_iter()
273 .filter(|it| !it.contains('-'))
274 .map_into()
275 .collect_vec(),
276 SyntaxKind::WarehouseSize
277 ),
278 MultiStringParser::new(
279 snowflake_dialect
280 .sets("warehouse_types")
281 .into_iter()
282 .map(|it| format!("'{it}'"))
283 .collect_vec(),
284 SyntaxKind::WarehouseSize
285 )
286 ])
287 .to_matchable()
288 .into(),
289 ),
290 (
291 "WarehouseSize".into(),
292 one_of(vec_of_erased![
293 MultiStringParser::new(
294 snowflake_dialect
295 .sets("warehouse_sizes")
296 .into_iter()
297 .filter(|it| !it.contains('-'))
298 .map_into()
299 .collect_vec(),
300 SyntaxKind::WarehouseSize
301 ),
302 MultiStringParser::new(
303 snowflake_dialect
304 .sets("warehouse_sizes")
305 .into_iter()
306 .map(|it| format!("'{it}'"))
307 .collect_vec(),
308 SyntaxKind::WarehouseSize
309 )
310 ])
311 .to_matchable()
312 .into(),
313 ),
314 (
315 "CompressionType".into(),
316 one_of(vec_of_erased![
317 MultiStringParser::new(
318 snowflake_dialect
319 .sets("compression_types")
320 .into_iter()
321 .map_into()
322 .collect_vec(),
323 SyntaxKind::CompressionType
324
325 ),
326 MultiStringParser::new(
327 snowflake_dialect
328 .sets("compression_types")
329 .into_iter()
330 .map(|it| format!("'{it}'"))
331 .collect_vec(),
332 SyntaxKind::CompressionType
333 )
334 ])
335 .to_matchable()
336 .into(),
337 ),
338 (
339 "ScalingPolicy".into(),
340 one_of(vec_of_erased![
341 MultiStringParser::new(
342 snowflake_dialect
343 .sets("warehouse_scaling_policies")
344 .into_iter()
345 .filter(|it| !it.contains('-'))
346 .map_into()
347 .collect_vec(),
348 SyntaxKind::ScalingPolicy
349 ),
350 MultiStringParser::new(
351 snowflake_dialect
352 .sets("warehouse_scaling_policies")
353 .into_iter()
354 .map(|it| format!("'{it}'"))
355 .collect_vec(),
356 SyntaxKind::ScalingPolicy
357 )
358 ])
359 .to_matchable()
360 .into(),
361 ),
362 (
363 "ValidationModeOptionSegment".into(),
364 RegexParser::new(
365 r"'?RETURN_(?:\d+_ROWS|ERRORS|ALL_ERRORS)'?",
366 SyntaxKind::ValidationModeOption
367 )
368 .to_matchable()
369 .into(),
370 ),
371 (
372 "CopyOptionOnErrorSegment".into(),
373 RegexParser::new(
374 r"'?CONTINUE'?|'?SKIP_FILE(?:_[0-9]+%?)?'?|'?ABORT_STATEMENT'?",
375 SyntaxKind::CopyOnErrorOption
376 )
377 .to_matchable()
378 .into(),
379 ),
380 (
381 "DoubleQuotedUDFBody".into(),
382 TypedParser::new(
383 SyntaxKind::DoubleQuote,
384 SyntaxKind::UdfBody,
385 )
386 .to_matchable()
387 .into(),
388 ),
389 (
390 "SingleQuotedUDFBody".into(),
391 TypedParser::new(
392 SyntaxKind::SingleQuote,
393 SyntaxKind::UdfBody,
394 )
395 .to_matchable()
396 .into(),
397 ),
398 (
399 "DollarQuotedUDFBody".into(),
400 TypedParser::new(
401 SyntaxKind::DollarQuote,
402 SyntaxKind::UdfBody,
403 )
404 .to_matchable()
405 .into(),
406 ),
407 (
408 "StagePath".into(),
409 RegexParser::new(
410 r"(?:@[^\s;)]+|'@[^']+')",
411 SyntaxKind::StagePath
412 )
413 .to_matchable()
414 .into(),
415 ),
416 (
417 "S3Path".into(),
418 RegexParser::new(
419 r"'s3://[a-z0-9][a-z0-9\.-]{1,61}[a-z0-9](?:/.*)?'",
420 SyntaxKind::BucketPath
421 )
422 .to_matchable()
423 .into(),
424 ),
425 (
426 "GCSPath".into(),
427 RegexParser::new(
428 r"'gcs://[a-z0-9][\w\.-]{1,61}[a-z0-9](?:/.+)?'",
429 SyntaxKind::BucketPath
430 )
431 .to_matchable()
432 .into(),
433 ),
434 (
435 "AzureBlobStoragePath".into(),
436 RegexParser::new(
437 r"'azure://[a-z0-9][a-z0-9-]{1,61}[a-z0-9]\.blob\.core\.windows\.net/[a-z0-9][a-z0-9\.-]{1,61}[a-z0-9](?:/.+)?'",
438 SyntaxKind::BucketPath
439 )
440 .to_matchable()
441 .into(),
442 ),
443 (
444 "UnquotedFilePath".into(),
445 TypedParser::new(
446 SyntaxKind::UnquotedFilePath,
447 SyntaxKind::UnquotedFilePath,
448 )
449 .to_matchable()
450 .into(),
451 ),
452 (
453 "SnowflakeEncryptionOption".into(),
454 MultiStringParser::new(
455 vec!["'SNOWFLAKE_FULL'".into(), "'SNOWFLAKE_SSE'".into()],
456 SyntaxKind::StageEncryptionOption
457 ).to_matchable().into(),
458 ),
459 (
460 "S3EncryptionOption".into(),
461 MultiStringParser::new(
462 vec!["'AWS_CSE'".into(), "'AWS_SSE_S3'".into(), "'AWS_SSE_KMS'".into()],
463 SyntaxKind::StageEncryptionOption
464 ).to_matchable().into(),
465 ),
466 (
467 "GCSEncryptionOption".into(),
468 MultiStringParser::new(
469 vec!["'GCS_SSE_KMS'".into()],
470 SyntaxKind::StageEncryptionOption
471 ).to_matchable().into(),
472 ),
473 (
474 "AzureBlobStorageEncryptionOption".into(),
475 MultiStringParser::new(
476 vec!["'AZURE_CSE'".into()],
477 SyntaxKind::StageEncryptionOption
478 ).to_matchable().into(),
479 ),
480 (
481 "FileType".into(),
482 one_of(vec_of_erased![
483 MultiStringParser::new(
484 snowflake_dialect
485 .sets("file_types")
486 .into_iter()
487 .filter(|it| !it.contains('-'))
488 .map_into()
489 .collect_vec(),
490 SyntaxKind::FileType
491 ),
492 MultiStringParser::new(
493 snowflake_dialect
494 .sets("file_types")
495 .into_iter()
496 .map(|it| format!("'{it}'"))
497 .collect_vec(),
498 SyntaxKind::FileType
499 )
500 ])
501 .to_matchable()
502 .into(),
503 ),
504 (
505 "IntegerSegment".into(),
506 RegexParser::new(
507 r"[0-9]+",
508 SyntaxKind::IntegerLiteral
509 )
510 .to_matchable()
511 .into(),
512 ),
513 (
514 "SystemFunctionName".into(),
515 RegexParser::new(
516 r"SYSTEM\$([A-Za-z0-9_]*)",
517 SyntaxKind::SystemFunctionName
518 )
519 .to_matchable()
520 .into(),
521 ),
522 (
523 "GroupByContentsGrammar".into(),
524 Delimited::new(vec_of_erased![
525 one_of(vec_of_erased![
526 Ref::new("ColumnReferenceSegment"),
527 Ref::new("NumericLiteralSegment"),
529 Ref::new("ExpressionSegment"),
531 ])
532 ]).config(|this|this.terminators = vec_of_erased![
533 Ref::keyword("ORDER"),
534 Ref::keyword("LIMIT"),
535 Ref::keyword("FETCH"),
536 Ref::keyword("OFFSET"),
537 Ref::keyword("HAVING"),
538 Ref::keyword("QUALIFY"),
539 Ref::keyword("WINDOW"),
540 ]).to_matchable().into()
541 ),
542 (
543 "LimitLiteralGrammar".into(),
544 one_of(vec_of_erased![
545 Ref::new("NumericLiteralSegment"),
546 Ref::keyword("NULL"),
547 Ref::new("QuotedLiteralSegment")
548 ]).to_matchable().into()
549 ),
550 (
551 "StartExcludeBracketSegment".into(),
552 StringParser::new(
553 "{-",
554 SyntaxKind::StartExcludeBracket
555 )
556 .to_matchable()
557 .into(),
558 ),
559 (
560 "EndExcludeBracketSegment".into(),
561 StringParser::new(
562 "-}",
563 SyntaxKind::EndExcludeBracket
564 )
565 .to_matchable()
566 .into(),
567 ),
568 (
569 "QuestionMarkSegment".into(),
570 StringParser::new(
571 "?",
572 SyntaxKind::QuestionMark
573 )
574 .to_matchable()
575 .into(),
576 ),
577 (
578 "CaretSegment".into(),
579 StringParser::new(
580 "^",
581 SyntaxKind::Caret
582 )
583 .to_matchable()
584 .into(),
585 ),
586 (
587 "DollarSegment".into(),
588 StringParser::new(
589 "$",
590 SyntaxKind::Dollar
591 )
592 .to_matchable()
593 .into(),
594 ),
595 (
596 "PatternQuantifierGrammar".into(),
597 Sequence::new(vec_of_erased![
598 one_of(vec_of_erased![
599 Ref::new("PositiveSegment"),
600 Ref::new("StarSegment"),
601 Ref::new("QuestionMarkSegment"),
602 Bracketed::new(vec_of_erased![
603 one_of(vec_of_erased![
604 Ref::new("NumericLiteralSegment"),
605 Sequence::new(vec_of_erased![
606 Ref::new("NumericLiteralSegment"),
607 Ref::new("CommaSegment"),
608 ]),
609 Sequence::new(vec_of_erased![
610 Ref::new("CommaSegment"),
611 Ref::new("NumericLiteralSegment"),
612 ]),
613 Sequence::new(vec_of_erased![
614 Ref::new("NumericLiteralSegment"),
615 Ref::new("CommaSegment"),
616 Ref::new("NumericLiteralSegment"),
617 ]),
618 ])
619 ]).config(|this| {
620 this.bracket_type = "curly";
621 this.bracket_pairs_set = "bracket_pairs";
622 })
623 ]),
624 Ref::new("QuestionMarkSegment").optional()
625 ]).config(|this| {
626 this.allow_gaps = false;
627 }).to_matchable().into()
628 ),
629 (
630 "PatternSymbolGrammar".into(),
631 Sequence::new(vec_of_erased![
632 Ref::new("SingleIdentifierGrammar"),
633 Ref::new("PatternQuantifierGrammar").optional()
634 ]).config(|this| {
635 this.allow_gaps = false;
636 }).to_matchable().into()
637 ),
638 (
639 "PatternOperatorGrammar".into(),
640 one_of(vec_of_erased![
641 Ref::new("PatternSymbolGrammar"),
642 Sequence::new(vec_of_erased![
643 one_of(vec_of_erased![
644 Bracketed::new(vec_of_erased![
645 one_of(vec_of_erased![
646 AnyNumberOf::new(vec_of_erased![Ref::new("PatternOperatorGrammar")]),
647 Delimited::new(
648 vec_of_erased![
649 Ref::new("PatternOperatorGrammar"),
650 ]
651 )
652 .config(|this|this.delimiter(Ref::new("BitwiseOrSegment"))),
653 ])
654 ]).config(|this| {
655 this.bracket_type = "exclude";
656 this.bracket_pairs_set = "bracket_pairs";
657 }),
658 Bracketed::new(vec_of_erased![
659 one_of(vec_of_erased![
660 AnyNumberOf::new(vec_of_erased![Ref::new("PatternOperatorGrammar")]),
661 Delimited::new(
662 vec_of_erased![
663 Ref::new("PatternOperatorGrammar"),
664 ]
665 )
666 .config(|this|this.delimiter(Ref::new("BitwiseOrSegment"))),
667 ])
668 ]),
669 Sequence::new(vec_of_erased![
670 Ref::keyword("PERMUTE"),
671 Bracketed::new(vec_of_erased![Delimited::new(
672 vec_of_erased![
673 Ref::new("PatternSymbolGrammar"),
674 ]
675 )]),
676 ]),
677 ]),
678 Ref::new("PatternQuantifierGrammar").optional()
679 ]).config(|this| {
680 this.allow_gaps = false;
681 }),
682 ]).to_matchable().into()
683 ),
684 (
685 "ContextHeadersGrammar".into(),
686 one_of(vec_of_erased![
687 Ref::keyword("CURRENT_ACCOUNT"),
688 Ref::keyword("CURRENT_CLIENT"),
689 Ref::keyword("CURRENT_DATABASE"),
690 Ref::keyword("CURRENT_DATE"),
691 Ref::keyword("CURRENT_IP_ADDRESS"),
692 Ref::keyword("CURRENT_REGION"),
693 Ref::keyword("CURRENT_ROLE"),
694 Ref::keyword("CURRENT_SCHEMA"),
695 Ref::keyword("CURRENT_SCHEMAS"),
696 Ref::keyword("CURRENT_SESSION"),
697 Ref::keyword("CURRENT_STATEMENT"),
698 Ref::keyword("CURRENT_TIME"),
699 Ref::keyword("CURRENT_TIMESTAMP"),
700 Ref::keyword("CURRENT_TRANSACTION"),
701 Ref::keyword("CURRENT_USER"),
702 Ref::keyword("CURRENT_VERSION"),
703 Ref::keyword("CURRENT_WAREHOUSE"),
704 Ref::keyword("LAST_QUERY_ID"),
705 Ref::keyword("LAST_TRANSACTION"),
706 Ref::keyword("LOCALTIME"),
707 Ref::keyword("LOCALTIMESTAMP"),
708 ]).to_matchable().into()
709 )
710 ]);
711
712 snowflake_dialect.add([
713 (
714 "NakedIdentifierSegment".into(),
715 SegmentGenerator::new(|dialect| {
716 let reserved_keywords = dialect.sets("reserved_keywords");
718 let pattern = reserved_keywords.iter().join("|");
719 let anti_template = format!("^({})$", pattern);
720
721 RegexParser::new("[a-zA-Z_][a-zA-Z0-9_$]*", SyntaxKind::NakedIdentifier)
722 .anti_template(&anti_template)
723 .to_matchable()
724 })
725 .into(),
726 ),
727 (
728 "LiteralGrammar".into(),
729 snowflake_dialect
730 .grammar("LiteralGrammar")
731 .copy(
732 Some(vec_of_erased![Ref::new("ReferencedVariableNameSegment")]),
733 None,
734 None,
735 None,
736 Vec::new(),
737 false,
738 )
739 .into(),
740 ),
741 (
742 "AccessorGrammar".into(),
743 AnyNumberOf::new(vec_of_erased![
744 Ref::new("ArrayAccessorSegment"),
745 Ref::new("SemiStructuredAccessorSegment")
746 ])
747 .to_matchable()
748 .into(),
749 ),
750 (
751 "PreTableFunctionKeywordsGrammar".into(),
752 one_of(vec_of_erased![Ref::keyword("LATERAL")])
753 .to_matchable()
754 .into(),
755 ),
756 (
757 "FunctionContentsExpressionGrammar".into(),
758 one_of(vec_of_erased![
759 Ref::new("DatetimeUnitSegment"),
760 Ref::new("NamedParameterExpressionSegment"),
761 Ref::new("ReferencedVariableNameSegment"),
762 Sequence::new(vec_of_erased![
763 Ref::new("ExpressionSegment"),
764 Sequence::new(vec_of_erased![
765 one_of(vec_of_erased![
766 Ref::keyword("IGNORE"),
767 Ref::keyword("RESPECT"),
768 ]),
769 Ref::keyword("NULLS")
770 ])
771 .config(|this| this.optional())
772 ])
773 ])
774 .to_matchable()
775 .into(),
776 ),
777 (
778 "JoinLikeClauseGrammar".into(),
779 Sequence::new(vec_of_erased![
780 any_set_of(vec_of_erased![
781 Ref::new("MatchRecognizeClauseSegment"),
782 Ref::new("ChangesClauseSegment"),
783 Ref::new("ConnectByClauseSegment"),
784 Ref::new("FromBeforeExpressionSegment"),
785 Ref::new("FromPivotExpressionSegment"),
786 AnyNumberOf::new(vec_of_erased![Ref::new("FromUnpivotExpressionSegment")]),
787 Ref::new("SamplingExpressionSegment")
788 ])
789 .config(|this| this.min_times = 1),
790 Ref::new("AliasExpressionSegment").optional()
791 ])
792 .to_matchable()
793 .into(),
794 ),
795 (
796 "SingleIdentifierGrammar".into(),
797 one_of(vec_of_erased![
798 Ref::new("NakedIdentifierSegment"),
799 Ref::new("QuotedIdentifierSegment"),
800 Ref::new("ColumnIndexIdentifierSegment"),
801 Ref::new("ReferencedVariableNameSegment"),
802 Ref::new("StagePath"),
803 Sequence::new(vec_of_erased![
804 Ref::keyword("IDENTIFIER"),
805 Bracketed::new(vec_of_erased![one_of(vec_of_erased![
806 Ref::new("SingleQuotedIdentifierSegment"),
807 Ref::new("ReferencedVariableNameSegment"),
808 ])]),
809 ]),
810 ])
811 .to_matchable()
812 .into(),
813 ),
814 (
815 "PostFunctionGrammar".into(),
816 Sequence::new(vec_of_erased![
817 Ref::new("WithinGroupClauseSegment").optional(),
818 Sequence::new(vec_of_erased![
819 one_of(vec_of_erased![
820 Ref::keyword("IGNORE"),
821 Ref::keyword("RESPECT")
822 ]),
823 Ref::keyword("NULLS"),
824 ])
825 .config(|this| this.optional()),
826 Ref::new("OverClauseSegment").optional(),
827 ])
828 .to_matchable()
829 .into(),
830 ),
831 (
832 "TemporaryGrammar".into(),
833 Sequence::new(vec_of_erased![
834 one_of(vec_of_erased![
835 Ref::keyword("LOCAL"),
836 Ref::keyword("GLOBAL")
837 ])
838 .config(|this| this.optional()),
839 one_of(vec_of_erased![
840 Ref::keyword("TEMP"),
841 Ref::keyword("TEMPORARY")
842 ])
843 .config(|this| this.optional()),
844 Sequence::new(vec_of_erased![Ref::keyword("VOLATILE")])
845 .config(|this| this.optional()),
846 ])
847 .config(|this| this.optional())
848 .to_matchable()
849 .into(),
850 ),
851 (
852 "TemporaryTransientGrammar".into(),
853 one_of(vec_of_erased![
854 Ref::new("TemporaryGrammar"),
855 Ref::keyword("TRANSIENT")
856 ])
857 .to_matchable()
858 .into(),
859 ),
860 (
861 "BaseExpressionElementGrammar".into(),
862 snowflake_dialect
863 .grammar("BaseExpressionElementGrammar")
864 .copy(
865 Some(vec_of_erased![Sequence::new(vec_of_erased![
866 Ref::keyword("CONNECT_BY_ROOT"),
867 Ref::new("ColumnReferenceSegment")
868 ])]),
869 None,
870 Some(Ref::new("LiteralGrammar").to_matchable()),
871 None,
872 Vec::new(),
873 false,
874 )
875 .into(),
876 ),
877 (
878 "QuotedLiteralSegment".into(),
879 one_of(vec_of_erased![
880 TypedParser::new(SyntaxKind::SingleQuote, SyntaxKind::QuotedLiteral),
881 TypedParser::new(SyntaxKind::DollarQuote, SyntaxKind::QuotedLiteral)
882 ])
883 .to_matchable()
884 .into(),
885 ),
886 (
887 "LikeGrammar".into(),
888 one_of(vec_of_erased![
889 Sequence::new(vec_of_erased![
890 Ref::keyword("LIKE"),
891 one_of(vec_of_erased![Ref::keyword("ALL"), Ref::keyword("ANY"),])
892 .config(|this| this.optional())
893 ]),
894 Ref::keyword("RLIKE"),
895 Sequence::new(vec_of_erased![
896 Ref::keyword("ILIKE"),
897 Ref::keyword("ANY").optional(),
898 ]),
899 Ref::keyword("REGEXP"),
900 ])
901 .to_matchable()
902 .into(),
903 ),
904 (
905 "SelectClauseTerminatorGrammar".into(),
906 one_of(vec_of_erased![
907 Ref::keyword("FROM"),
908 Ref::keyword("WHERE"),
909 Sequence::new(vec_of_erased![Ref::keyword("ORDER"), Ref::keyword("BY")]),
910 Ref::keyword("LIMIT"),
911 Ref::keyword("FETCH"),
912 Ref::keyword("OFFSET"),
913 Ref::new("SetOperatorSegment"),
914 ])
915 .to_matchable()
916 .into(),
917 ),
918 (
919 "FromClauseTerminatorGrammar".into(),
920 one_of(vec_of_erased![
921 Ref::keyword("WHERE"),
922 Ref::keyword("LIMIT"),
923 Ref::keyword("FETCH"),
924 Ref::keyword("OFFSET"),
925 Sequence::new(vec_of_erased![Ref::keyword("GROUP"), Ref::keyword("BY"),]),
926 Sequence::new(vec_of_erased![Ref::keyword("ORDER"), Ref::keyword("BY"),]),
927 Ref::keyword("HAVING"),
928 Ref::keyword("QUALIFY"),
929 Ref::keyword("WINDOW"),
930 Ref::new("SetOperatorSegment"),
931 Ref::new("WithNoSchemaBindingClauseSegment"),
932 Ref::new("WithDataClauseSegment"),
933 ])
934 .to_matchable()
935 .into(),
936 ),
937 (
938 "WhereClauseTerminatorGrammar".into(),
939 one_of(vec_of_erased![
940 Ref::keyword("LIMIT"),
941 Ref::keyword("FETCH"),
942 Ref::keyword("OFFSET"),
943 Sequence::new(vec_of_erased![Ref::keyword("GROUP"), Ref::keyword("BY"),]),
944 Sequence::new(vec_of_erased![Ref::keyword("ORDER"), Ref::keyword("BY"),]),
945 Ref::keyword("HAVING"),
946 Ref::keyword("QUALIFY"),
947 Ref::keyword("WINDOW"),
948 Ref::keyword("OVERLAPS"),
949 ])
950 .to_matchable()
951 .into(),
952 ),
953 (
954 "OrderByClauseTerminators".into(),
955 one_of(vec_of_erased![
956 Ref::keyword("LIMIT"),
957 Ref::keyword("HAVING"),
958 Ref::keyword("QUALIFY"),
959 Ref::keyword("WINDOW"),
960 Ref::new("FrameClauseUnitGrammar"),
961 Ref::keyword("SEPARATOR"),
962 Ref::keyword("FETCH"),
963 Ref::keyword("OFFSET"),
964 Ref::keyword("MEASURES"),
965 ])
966 .to_matchable()
967 .into(),
968 ),
969 (
970 "TrimParametersGrammar".into(),
971 Nothing::new().to_matchable().into(),
972 ),
973 (
974 "GroupByClauseTerminatorGrammar".into(),
975 one_of(vec_of_erased![
976 Ref::keyword("ORDER"),
977 Ref::keyword("LIMIT"),
978 Ref::keyword("FETCH"),
979 Ref::keyword("OFFSET"),
980 Ref::keyword("HAVING"),
981 Ref::keyword("QUALIFY"),
982 Ref::keyword("WINDOW"),
983 ])
984 .to_matchable()
985 .into(),
986 ),
987 (
988 "HavingClauseTerminatorGrammar".into(),
989 one_of(vec_of_erased![
990 Sequence::new(vec_of_erased![Ref::keyword("ORDER"), Ref::keyword("BY"),]),
991 Ref::keyword("LIMIT"),
992 Ref::keyword("QUALIFY"),
993 Ref::keyword("WINDOW"),
994 Ref::keyword("FETCH"),
995 Ref::keyword("OFFSET"),
996 ])
997 .to_matchable()
998 .into(),
999 ),
1000 ]);
1001
1002 snowflake_dialect.sets_mut("unreserved_keywords").clear();
1003 snowflake_dialect.update_keywords_set_from_multiline_string(
1004 "unreserved_keywords",
1005 SNOWFLAKE_UNRESERVED_KEYWORDS,
1006 );
1007
1008 snowflake_dialect.sets_mut("reserved_keywords").clear();
1009 snowflake_dialect.update_keywords_set_from_multiline_string(
1010 "reserved_keywords",
1011 SNOWFLAKE_RESERVED_KEYWORDS,
1012 );
1013
1014 snowflake_dialect.sets_mut("datetime_units").clear();
1015 snowflake_dialect.sets_mut("datetime_units").extend([
1016 "YEAR",
1017 "Y",
1018 "YY",
1019 "YYY",
1020 "YYYY",
1021 "YR",
1022 "YEARS",
1023 "YRS",
1024 "MONTH",
1025 "MM",
1026 "MON",
1027 "MONS",
1028 "MONTHS",
1029 "DAY",
1030 "D",
1031 "DD",
1032 "DAYS",
1033 "DAYOFMONTH",
1034 "DAYOFWEEK",
1035 "WEEKDAY",
1036 "DOW",
1037 "DW",
1038 "DAYOFWEEKISO",
1039 "WEEKDAY_ISO",
1040 "DOW_ISO",
1041 "DW_ISO",
1042 "DAYOFYEAR",
1043 "YEARDAY",
1044 "DOY",
1045 "DY",
1046 "WEEK",
1047 "W",
1048 "WK",
1049 "WEEKOFYEAR",
1050 "WOY",
1051 "WY",
1052 "WEEKISO",
1053 "WEEK_ISO",
1054 "WEEKOFYEARISO",
1055 "WEEKOFYEAR_ISO",
1056 "QUARTER",
1057 "Q",
1058 "QTR",
1059 "QTRS",
1060 "QUARTERS",
1061 "YEAROFWEEK",
1062 "YEAROFWEEKISO",
1063 "HOUR",
1064 "H",
1065 "HH",
1066 "HR",
1067 "HOURS",
1068 "HRS",
1069 "MINUTE",
1070 "M",
1071 "MI",
1072 "MIN",
1073 "MINUTES",
1074 "MINS",
1075 "SECOND",
1076 "S",
1077 "SEC",
1078 "SECONDS",
1079 "SECS",
1080 "MILLISECOND",
1081 "MS",
1082 "MSEC",
1083 "MILLISECONDS",
1084 "MICROSECOND",
1085 "US",
1086 "USEC",
1087 "MICROSECONDS",
1088 "NANOSECOND",
1089 "NS",
1090 "NSEC",
1091 "NANOSEC",
1092 "NSECOND",
1093 "NANOSECONDS",
1094 "NANOSECS",
1095 "NSECONDS",
1096 "EPOCH_SECOND",
1097 "EPOCH",
1098 "EPOCH_SECONDS",
1099 "EPOCH_MILLISECOND",
1100 "EPOCH_MILLISECONDS",
1101 "EPOCH_MICROSECOND",
1102 "EPOCH_MICROSECONDS",
1103 "EPOCH_NANOSECOND",
1104 "EPOCH_NANOSECONDS",
1105 "TIMEZONE_HOUR",
1106 "TZH",
1107 "TIMEZONE_MINUTE",
1108 "TZM",
1109 ]);
1110
1111 snowflake_dialect.replace_grammar(
1112 "FunctionNameSegment",
1113 Sequence::new(vec_of_erased![
1114 AnyNumberOf::new(vec_of_erased![Sequence::new(vec_of_erased![
1116 Ref::new("SingleIdentifierGrammar"),
1117 Ref::new("DotSegment"),
1118 ]),])
1119 .config(|this| {
1120 this.terminators = vec_of_erased![Ref::new("BracketedSegment")];
1121 }),
1122 one_of(vec_of_erased![
1124 Ref::new("FunctionNameIdentifierSegment"),
1125 Ref::new("QuotedIdentifierSegment"),
1126 Sequence::new(vec_of_erased![
1128 Ref::keyword("IDENTIFIER"),
1129 Bracketed::new(vec_of_erased![one_of(vec_of_erased![
1130 Ref::new("SingleQuotedIdentifierSegment"),
1131 Ref::new("ReferencedVariableNameSegment"),
1132 ])]),
1133 ]),
1134 ]),
1135 ])
1136 .config(|this| {
1137 this.allow_gaps = false;
1138 })
1139 .to_matchable(),
1140 );
1141
1142 snowflake_dialect.add([(
1143 "ConnectByClauseSegment".into(),
1144 NodeMatcher::new(
1145 SyntaxKind::ConnectbyClause,
1146 Sequence::new(vec_of_erased![
1147 Ref::keyword("START"),
1148 Ref::keyword("WITH"),
1149 Ref::new("ExpressionSegment"),
1150 Ref::keyword("CONNECT"),
1151 Ref::keyword("BY"),
1152 Delimited::new(vec_of_erased![Sequence::new(vec_of_erased![
1153 Ref::keyword("PRIOR").optional(),
1154 Ref::new("ColumnReferenceSegment"),
1155 Ref::new("EqualsSegment"),
1156 Ref::keyword("PRIOR").optional(),
1157 Ref::new("ColumnReferenceSegment"),
1158 ])])
1159 ])
1160 .to_matchable(),
1161 )
1162 .to_matchable()
1163 .into(),
1164 )]);
1165
1166 snowflake_dialect.replace_grammar(
1167 "GroupByClauseSegment",
1168 Sequence::new(vec_of_erased![
1169 Ref::keyword("GROUP"),
1170 Ref::keyword("BY"),
1171 MetaSegment::indent(),
1172 one_of(vec_of_erased![
1173 Sequence::new(vec_of_erased![
1174 one_of(vec_of_erased![
1175 Ref::keyword("CUBE"),
1176 Ref::keyword("ROLLUP"),
1177 Sequence::new(vec_of_erased![
1178 Ref::keyword("GROUPING"),
1179 Ref::keyword("SETS"),
1180 ]),
1181 ]),
1182 Bracketed::new(vec_of_erased![Ref::new("GroupByContentsGrammar"),]),
1183 ]),
1184 Ref::keyword("ALL"),
1185 Ref::new("GroupByContentsGrammar"),
1186 ]),
1187 MetaSegment::dedent(),
1188 ])
1189 .to_matchable(),
1190 );
1191
1192 snowflake_dialect.replace_grammar(
1193 "ValuesClauseSegment",
1194 Sequence::new(vec_of_erased![
1195 Ref::keyword("VALUES"),
1196 Delimited::new(vec_of_erased![
1197 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
1198 Ref::keyword("DEFAULT"),
1199 Ref::keyword("NULL"),
1200 Ref::new("ExpressionSegment"),
1201 ])])
1202 .config(|this| {
1203 this.parse_mode = ParseMode::Greedy;
1204 }),
1205 ]),
1206 ])
1207 .to_matchable(),
1208 );
1209
1210 snowflake_dialect.add([(
1211 "InsertStatementSegment".into(),
1212 NodeMatcher::new(
1213 SyntaxKind::InsertStatement,
1214 Sequence::new(vec_of_erased![
1215 Ref::keyword("INSERT"),
1216 Ref::keyword("OVERWRITE").optional(),
1217 one_of(vec_of_erased![
1218 Sequence::new(vec_of_erased![
1220 Ref::keyword("INTO"),
1221 Ref::new("TableReferenceSegment"),
1222 Ref::new("BracketedColumnReferenceListGrammar").optional(),
1223 Ref::new("SelectableGrammar"),
1224 ]),
1225 Sequence::new(vec_of_erased![
1227 Ref::keyword("ALL"),
1228 AnyNumberOf::new(vec_of_erased![Sequence::new(vec_of_erased![
1229 Ref::keyword("INTO"),
1230 Ref::new("TableReferenceSegment"),
1231 Ref::new("BracketedColumnReferenceListGrammar").optional(),
1232 Ref::new("ValuesClauseSegment").optional(),
1233 ]),])
1234 .config(|this| {
1235 this.min_times = 1;
1236 }),
1237 Ref::new("SelectStatementSegment"),
1238 ]),
1239 Sequence::new(vec_of_erased![
1241 one_of(vec_of_erased![Ref::keyword("FIRST"), Ref::keyword("ALL")]),
1242 AnyNumberOf::new(vec_of_erased![Sequence::new(vec_of_erased![
1243 Ref::keyword("WHEN"),
1244 Ref::new("ExpressionSegment"),
1245 Ref::keyword("THEN"),
1246 AnyNumberOf::new(vec_of_erased![Sequence::new(vec_of_erased![
1247 Ref::keyword("INTO"),
1248 Ref::new("TableReferenceSegment"),
1249 Ref::new("BracketedColumnReferenceListGrammar").optional(),
1250 Ref::new("ValuesClauseSegment").optional(),
1251 ]),])
1252 .config(|this| {
1253 this.min_times = 1;
1254 }),
1255 ]),])
1256 .config(|this| {
1257 this.min_times = 1;
1258 }),
1259 Sequence::new(vec_of_erased![
1260 Ref::keyword("ELSE"),
1261 Ref::keyword("INTO"),
1262 Ref::new("TableReferenceSegment"),
1263 Ref::new("BracketedColumnReferenceListGrammar").optional(),
1264 Ref::new("ValuesClauseSegment").optional(),
1265 ])
1266 .config(|this| this.optional()),
1267 Ref::new("SelectStatementSegment"),
1268 ]),
1269 ]),
1270 ])
1271 .to_matchable(),
1272 )
1273 .to_matchable()
1274 .into(),
1275 )]);
1276
1277 snowflake_dialect.replace_grammar(
1278 "FunctionDefinitionGrammar",
1279 Sequence::new(vec_of_erased![
1280 Ref::keyword("AS"),
1281 Ref::new("QuotedLiteralSegment"),
1282 Sequence::new(vec_of_erased![
1283 Ref::keyword("LANGUAGE"),
1284 Ref::new("NakedIdentifierSegment"),
1285 ])
1286 .config(|this| this.optional()),
1287 ])
1288 .to_matchable(),
1289 );
1290
1291 snowflake_dialect.replace_grammar(
1292 "StatementSegment",
1293 ansi::statement_segment().copy(
1294 Some(vec_of_erased![
1295 Ref::new("AccessStatementSegment"),
1296 Ref::new("CreateStatementSegment"),
1297 Ref::new("CreateTaskSegment"),
1298 Ref::new("CreateUserSegment"),
1299 Ref::new("CreateCloneStatementSegment"),
1300 Ref::new("CreateProcedureStatementSegment"),
1301 Ref::new("ScriptingBlockStatementSegment"),
1302 Ref::new("ScriptingLetStatementSegment"),
1303 Ref::new("ReturnStatementSegment"),
1304 Ref::new("ShowStatementSegment"),
1305 Ref::new("AlterUserStatementSegment"),
1306 Ref::new("AlterSessionStatementSegment"),
1307 Ref::new("AlterTaskStatementSegment"),
1308 Ref::new("SetAssignmentStatementSegment"),
1309 Ref::new("CallStoredProcedureSegment"),
1310 Ref::new("MergeStatementSegment"),
1311 Ref::new("CopyIntoTableStatementSegment"),
1312 Ref::new("CopyIntoLocationStatementSegment"),
1313 Ref::new("FormatTypeOptions"),
1314 Ref::new("AlterWarehouseStatementSegment"),
1315 Ref::new("AlterShareStatementSegment"),
1316 Ref::new("CreateExternalTableSegment"),
1317 Ref::new("AlterExternalTableStatementSegment"),
1318 Ref::new("CreateSchemaStatementSegment"),
1319 Ref::new("AlterSchemaStatementSegment"),
1320 Ref::new("CreateFunctionStatementSegment"),
1321 Ref::new("AlterFunctionStatementSegment"),
1322 Ref::new("CreateExternalFunctionStatementSegment"),
1323 Ref::new("CreateStageSegment"),
1324 Ref::new("AlterStageSegment"),
1325 Ref::new("CreateStreamStatementSegment"),
1326 Ref::new("AlterStreamStatementSegment"),
1327 Ref::new("UnsetStatementSegment"),
1328 Ref::new("UndropStatementSegment"),
1329 Ref::new("CommentStatementSegment"),
1330 Ref::new("CallStatementSegment"),
1331 Ref::new("AlterViewStatementSegment"),
1332 Ref::new("AlterMaterializedViewStatementSegment"),
1333 Ref::new("DropProcedureStatementSegment"),
1334 Ref::new("DropExternalTableStatementSegment"),
1335 Ref::new("DropMaterializedViewStatementSegment"),
1336 Ref::new("DropObjectStatementSegment"),
1337 Ref::new("CreateFileFormatSegment"),
1338 Ref::new("AlterFileFormatSegment"),
1339 Ref::new("AlterPipeSegment"),
1340 Ref::new("ListStatementSegment"),
1341 Ref::new("GetStatementSegment"),
1342 Ref::new("PutStatementSegment"),
1343 Ref::new("RemoveStatementSegment"),
1344 Ref::new("CreateDatabaseFromShareStatementSegment"),
1345 Ref::new("AlterRoleStatementSegment"),
1346 Ref::new("AlterStorageIntegrationSegment"),
1347 Ref::new("ExecuteTaskClauseSegment"),
1348 ]),
1349 None,
1350 None,
1351 Some(vec_of_erased![
1352 Ref::new("CreateIndexStatementSegment"),
1353 Ref::new("DropIndexStatementSegment"),
1354 ]),
1355 Vec::new(),
1356 false,
1357 ),
1358 );
1359
1360 snowflake_dialect.add([
1361 (
1362 "SetAssignmentStatementSegment".into(),
1363 NodeMatcher::new(
1364 SyntaxKind::SetStatement,
1365 one_of(vec_of_erased![
1366 Sequence::new(vec_of_erased![
1367 Ref::keyword("SET"),
1368 Ref::new("LocalVariableNameSegment"),
1369 Ref::new("EqualsSegment"),
1370 Ref::new("ExpressionSegment"),
1371 ]),
1372 Sequence::new(vec_of_erased![
1373 Ref::keyword("SET"),
1374 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![Ref::new(
1375 "LocalVariableNameSegment"
1376 ),]),]),
1377 Ref::new("EqualsSegment"),
1378 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![Ref::new(
1379 "ExpressionSegment"
1380 ),]),]),
1381 ]),
1382 ])
1383 .to_matchable(),
1384 )
1385 .to_matchable()
1386 .into(),
1387 ),
1388 (
1389 "CallStoredProcedureSegment".into(),
1390 NodeMatcher::new(
1391 SyntaxKind::CallSegment,
1392 Sequence::new(vec_of_erased![
1393 Ref::keyword("CALL"),
1394 Ref::new("FunctionSegment"),
1395 ])
1396 .to_matchable(),
1397 )
1398 .to_matchable()
1399 .into(),
1400 ),
1401 (
1402 "WithinGroupClauseSegment".into(),
1403 NodeMatcher::new(
1404 SyntaxKind::WithingroupClause,
1405 Sequence::new(vec_of_erased![
1406 Ref::keyword("WITHIN"),
1407 Ref::keyword("GROUP"),
1408 Bracketed::new(vec_of_erased![Ref::new("OrderByClauseSegment").optional(),])
1409 .config(|this| {
1410 this.parse_mode = ParseMode::Greedy;
1411 }),
1412 ])
1413 .to_matchable(),
1414 )
1415 .to_matchable()
1416 .into(),
1417 ),
1418 (
1419 "PatternSegment".into(),
1420 NodeMatcher::new(
1421 SyntaxKind::PatternExpression,
1422 Sequence::new(vec_of_erased![
1423 Ref::new("CaretSegment").optional(),
1424 one_of(vec_of_erased![
1425 AnyNumberOf::new(vec_of_erased![Ref::new("PatternOperatorGrammar")]),
1426 Delimited::new(vec_of_erased![Ref::new("PatternOperatorGrammar")])
1427 .config(|this| this.delimiter(Ref::new("BitwiseOrSegment"))),
1428 ]),
1429 Ref::new("DollarSegment").optional(),
1430 ])
1431 .to_matchable(),
1432 )
1433 .to_matchable()
1434 .into(),
1435 ),
1436 (
1437 "MatchRecognizeClauseSegment".into(),
1438 NodeMatcher::new(
1439 SyntaxKind::MatchRecognizeClause,
1440 Sequence::new(vec_of_erased![
1441 Ref::keyword("MATCH_RECOGNIZE"),
1442 Bracketed::new(vec_of_erased![
1443 Ref::new("PartitionClauseSegment").optional(),
1444 Ref::new("OrderByClauseSegment").optional(),
1445 Sequence::new(vec_of_erased![
1446 Ref::keyword("MEASURES"),
1447 Delimited::new(vec_of_erased![Sequence::new(vec_of_erased![
1448 one_of(vec_of_erased![
1449 Ref::keyword("FINAL"),
1450 Ref::keyword("RUNNING"),
1451 ])
1452 .config(|this| this.optional()),
1453 Ref::new("ExpressionSegment"),
1454 Ref::new("AliasExpressionSegment"),
1455 ]),]),
1456 ])
1457 .config(|this| this.optional()),
1458 one_of(vec_of_erased![
1459 Sequence::new(vec_of_erased![
1460 Ref::keyword("ONE"),
1461 Ref::keyword("ROW"),
1462 Ref::keyword("PER"),
1463 Ref::keyword("MATCH"),
1464 ]),
1465 Sequence::new(vec_of_erased![
1466 Ref::keyword("ALL"),
1467 Ref::keyword("ROWS"),
1468 Ref::keyword("PER"),
1469 Ref::keyword("MATCH"),
1470 one_of(vec_of_erased![
1471 Sequence::new(vec_of_erased![
1472 Ref::keyword("SHOW"),
1473 Ref::keyword("EMPTY"),
1474 Ref::keyword("MATCHES"),
1475 ]),
1476 Sequence::new(vec_of_erased![
1477 Ref::keyword("OMIT"),
1478 Ref::keyword("EMPTY"),
1479 Ref::keyword("MATCHES"),
1480 ]),
1481 Sequence::new(vec_of_erased![
1482 Ref::keyword("WITH"),
1483 Ref::keyword("UNMATCHED"),
1484 Ref::keyword("ROWS"),
1485 ]),
1486 ])
1487 .config(|this| this.optional()),
1488 ]),
1489 ])
1490 .config(|this| this.optional()),
1491 Sequence::new(vec_of_erased![
1492 Ref::keyword("AFTER"),
1493 Ref::keyword("MATCH"),
1494 Ref::keyword("SKIP"),
1495 one_of(vec_of_erased![
1496 Sequence::new(vec_of_erased![
1497 Ref::keyword("PAST"),
1498 Ref::keyword("LAST"),
1499 Ref::keyword("ROW"),
1500 ]),
1501 Sequence::new(vec_of_erased![
1502 Ref::keyword("TO"),
1503 Ref::keyword("NEXT"),
1504 Ref::keyword("ROW"),
1505 ]),
1506 Sequence::new(vec_of_erased![
1507 Ref::keyword("TO"),
1508 one_of(vec_of_erased![
1509 Ref::keyword("FIRST"),
1510 Ref::keyword("LAST"),
1511 ])
1512 .config(|this| this.optional()),
1513 Ref::new("SingleIdentifierGrammar"),
1514 ]),
1515 ]),
1516 ])
1517 .config(|this| this.optional()),
1518 Ref::keyword("PATTERN"),
1519 Bracketed::new(vec_of_erased![Ref::new("PatternSegment"),]),
1520 Ref::keyword("DEFINE"),
1521 Delimited::new(vec_of_erased![Sequence::new(vec_of_erased![
1522 Ref::new("SingleIdentifierGrammar"),
1523 Ref::keyword("AS"),
1524 Ref::new("ExpressionSegment"),
1525 ]),]),
1526 ]),
1527 ])
1528 .to_matchable(),
1529 )
1530 .to_matchable()
1531 .into(),
1532 ),
1533 (
1534 "ChangesClauseSegment".into(),
1535 NodeMatcher::new(
1536 SyntaxKind::ChangesClause,
1537 Sequence::new(vec_of_erased![
1538 Ref::keyword("CHANGES"),
1539 Bracketed::new(vec_of_erased![
1540 Ref::keyword("INFORMATION"),
1541 Ref::new("ParameterAssignerSegment"),
1542 one_of(vec_of_erased![
1543 Ref::keyword("DEFAULT"),
1544 Ref::keyword("APPEND_ONLY"),
1545 ]),
1546 ]),
1547 one_of(vec_of_erased![
1548 Sequence::new(vec_of_erased![
1549 Ref::keyword("AT"),
1550 Bracketed::new(vec_of_erased![
1551 one_of(vec_of_erased![
1552 Ref::keyword("TIMESTAMP"),
1553 Ref::keyword("OFFSET"),
1554 Ref::keyword("STATEMENT"),
1555 ]),
1556 Ref::new("ParameterAssignerSegment"),
1557 Ref::new("ExpressionSegment"),
1558 ]),
1559 ]),
1560 Sequence::new(vec_of_erased![
1561 Ref::keyword("BEFORE"),
1562 Bracketed::new(vec_of_erased![
1563 Ref::keyword("STATEMENT"),
1564 Ref::new("ParameterAssignerSegment"),
1565 Ref::new("ExpressionSegment"),
1566 ]),
1567 ]),
1568 ]),
1569 Sequence::new(vec_of_erased![
1570 Ref::keyword("END"),
1571 Bracketed::new(vec_of_erased![
1572 one_of(vec_of_erased![
1573 Ref::keyword("TIMESTAMP"),
1574 Ref::keyword("OFFSET"),
1575 Ref::keyword("STATEMENT"),
1576 ]),
1577 Ref::new("ParameterAssignerSegment"),
1578 Ref::new("ExpressionSegment"),
1579 ]),
1580 ])
1581 .config(|this| this.optional()),
1582 ])
1583 .to_matchable(),
1584 )
1585 .to_matchable()
1586 .into(),
1587 ),
1588 (
1589 "FromAtExpressionSegment".into(),
1590 NodeMatcher::new(
1591 SyntaxKind::FromAtExpression,
1592 Sequence::new(vec_of_erased![
1593 Ref::keyword("AT"),
1594 Bracketed::new(vec_of_erased![
1595 one_of(vec_of_erased![
1596 Ref::keyword("TIMESTAMP"),
1597 Ref::keyword("OFFSET"),
1598 Ref::keyword("STATEMENT"),
1599 ]),
1600 Ref::new("ParameterAssignerSegment"),
1601 Ref::new("ExpressionSegment"),
1602 ]),
1603 ])
1604 .to_matchable(),
1605 )
1606 .to_matchable()
1607 .into(),
1608 ),
1609 (
1610 "FromBeforeExpressionSegment".into(),
1611 NodeMatcher::new(
1612 SyntaxKind::FromBeforeExpression,
1613 Sequence::new(vec_of_erased![
1614 Ref::keyword("BEFORE"),
1615 Bracketed::new(vec_of_erased![
1616 one_of(vec_of_erased![
1617 Ref::keyword("TIMESTAMP"),
1618 Ref::keyword("OFFSET"),
1619 Ref::keyword("STATEMENT"),
1620 ]),
1621 Ref::new("ParameterAssignerSegment"),
1622 Ref::new("ExpressionSegment"),
1623 ])
1624 .config(|this| {
1625 this.parse_mode = ParseMode::Greedy;
1626 }),
1627 ])
1628 .to_matchable(),
1629 )
1630 .to_matchable()
1631 .into(),
1632 ),
1633 (
1634 "FromPivotExpressionSegment".into(),
1635 NodeMatcher::new(
1636 SyntaxKind::FromPivotExpression,
1637 Sequence::new(vec_of_erased![
1638 Ref::keyword("PIVOT"),
1639 Bracketed::new(vec_of_erased![
1640 Ref::new("FunctionSegment"),
1641 Ref::keyword("FOR"),
1642 Ref::new("SingleIdentifierGrammar"),
1643 Ref::keyword("IN"),
1644 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![Ref::new(
1645 "LiteralGrammar"
1646 ),]),]),
1647 ]),
1648 ])
1649 .to_matchable(),
1650 )
1651 .to_matchable()
1652 .into(),
1653 ),
1654 (
1655 "FromUnpivotExpressionSegment".into(),
1656 NodeMatcher::new(
1657 SyntaxKind::FromUnpivotExpression,
1658 Sequence::new(vec_of_erased![
1659 Ref::keyword("UNPIVOT"),
1660 Bracketed::new(vec_of_erased![
1661 Ref::new("SingleIdentifierGrammar"),
1662 Ref::keyword("FOR"),
1663 Ref::new("SingleIdentifierGrammar"),
1664 Ref::keyword("IN"),
1665 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![Ref::new(
1666 "SingleIdentifierGrammar"
1667 ),]),]),
1668 ]),
1669 ])
1670 .to_matchable(),
1671 )
1672 .to_matchable()
1673 .into(),
1674 ),
1675 ]);
1676
1677 snowflake_dialect.replace_grammar(
1678 "SamplingExpressionSegment",
1679 Sequence::new(vec_of_erased![
1680 one_of(vec_of_erased![
1681 Ref::keyword("SAMPLE"),
1682 Ref::keyword("TABLESAMPLE"),
1683 ]),
1684 one_of(vec_of_erased![
1685 Ref::keyword("BERNOULLI"),
1686 Ref::keyword("ROW"),
1687 Ref::keyword("SYSTEM"),
1688 Ref::keyword("BLOCK"),
1689 ])
1690 .config(|this| this.optional()),
1691 Bracketed::new(vec_of_erased![
1692 one_of(vec_of_erased![
1693 Ref::new("NumericLiteralSegment"),
1694 Ref::new("ReferencedVariableNameSegment"),
1695 ]),
1696 Ref::keyword("ROWS").optional(),
1697 ]),
1698 Sequence::new(vec_of_erased![
1699 one_of(vec_of_erased![
1700 Ref::keyword("REPEATABLE"),
1701 Ref::keyword("SEED"),
1702 ]),
1703 Bracketed::new(vec_of_erased![Ref::new("NumericLiteralSegment"),]),
1704 ])
1705 .config(|this| this.optional()),
1706 ])
1707 .to_matchable(),
1708 );
1709
1710 snowflake_dialect.add([
1711 (
1712 "NamedParameterExpressionSegment".into(),
1713 NodeMatcher::new(
1714 SyntaxKind::SnowflakeKeywordExpression,
1715 Sequence::new(vec_of_erased![
1716 Ref::new("ParameterNameSegment"),
1717 Ref::new("ParameterAssignerSegment"),
1718 one_of(vec_of_erased![
1719 Ref::new("LiteralGrammar"),
1720 Ref::new("ColumnReferenceSegment"),
1721 Ref::new("ExpressionSegment"),
1722 ]),
1723 ])
1724 .to_matchable(),
1725 )
1726 .to_matchable()
1727 .into(),
1728 ),
1729 (
1730 "SemiStructuredAccessorSegment".into(),
1731 NodeMatcher::new(
1732 SyntaxKind::SemiStructuredExpression,
1733 Sequence::new(vec_of_erased![
1734 one_of(vec_of_erased![
1735 Ref::new("DotSegment"),
1736 Ref::new("ColonSegment"),
1737 ]),
1738 one_of(vec_of_erased![
1739 Ref::new("NakedSemiStructuredElementSegment"),
1740 Ref::new("QuotedSemiStructuredElementSegment"),
1741 ]),
1742 Ref::new("ArrayAccessorSegment").optional(),
1743 AnyNumberOf::new(vec_of_erased![
1744 Sequence::new(vec_of_erased![
1745 one_of(vec_of_erased![
1746 Ref::new("DotSegment"),
1747 Ref::new("ColonSegment"),
1748 ]),
1749 one_of(vec_of_erased![
1750 Ref::new("NakedSemiStructuredElementSegment"),
1751 Ref::new("QuotedSemiStructuredElementSegment"),
1752 ]),
1753 ])
1754 .config(|this| {
1755 this.allow_gaps = true;
1756 }),
1757 Ref::new("ArrayAccessorSegment").optional(),
1758 ])
1759 .config(|this| {
1760 this.allow_gaps = true;
1761 }),
1762 ])
1763 .config(|this| {
1764 this.allow_gaps = true;
1765 })
1766 .to_matchable(),
1767 )
1768 .to_matchable()
1769 .into(),
1770 ),
1771 (
1772 "QualifyClauseSegment".into(),
1773 NodeMatcher::new(
1774 SyntaxKind::QualifyClause,
1775 Sequence::new(vec_of_erased![
1776 Ref::keyword("QUALIFY"),
1777 MetaSegment::indent(),
1778 one_of(vec_of_erased![
1779 Bracketed::new(vec_of_erased![Ref::new("ExpressionSegment"),]),
1780 Ref::new("ExpressionSegment"),
1781 ]),
1782 MetaSegment::dedent(),
1783 ])
1784 .to_matchable(),
1785 )
1786 .to_matchable()
1787 .into(),
1788 ),
1789 ]);
1790
1791 snowflake_dialect.replace_grammar(
1792 "SelectStatementSegment",
1793 ansi::select_statement().copy(
1794 Some(vec_of_erased![Ref::new("QualifyClauseSegment").optional()]),
1795 None,
1796 Some(Ref::new("OrderByClauseSegment").optional().to_matchable()),
1797 None,
1798 Vec::new(),
1799 false,
1800 ),
1801 );
1802
1803 snowflake_dialect.replace_grammar(
1804 "WildcardExpressionSegment",
1805 ansi::wildcard_expression_segment().copy(
1806 Some(vec_of_erased![
1807 Ref::new("ExcludeClauseSegment").optional(),
1808 Ref::new("ReplaceClauseSegment").optional(),
1809 Ref::new("RenameClauseSegment").optional(),
1810 ]),
1811 None,
1812 None,
1813 None,
1814 Vec::new(),
1815 false,
1816 ),
1817 );
1818
1819 snowflake_dialect.add([
1820 (
1821 "ExcludeClauseSegment".into(),
1822 NodeMatcher::new(
1823 SyntaxKind::SelectExcludeClause,
1824 Sequence::new(vec_of_erased![
1825 Ref::keyword("EXCLUDE"),
1826 one_of(vec_of_erased![
1827 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![Ref::new(
1828 "SingleIdentifierGrammar"
1829 ),]),]),
1830 Ref::new("SingleIdentifierGrammar"),
1831 ]),
1832 ])
1833 .to_matchable(),
1834 )
1835 .to_matchable()
1836 .into(),
1837 ),
1838 (
1839 "RenameClauseSegment".into(),
1840 NodeMatcher::new(
1841 SyntaxKind::SelectRenameClause,
1842 Sequence::new(vec_of_erased![
1843 Ref::keyword("RENAME"),
1844 one_of(vec_of_erased![
1845 Sequence::new(vec_of_erased![
1846 Ref::new("SingleIdentifierGrammar"),
1847 Ref::keyword("AS"),
1848 Ref::new("SingleIdentifierGrammar"),
1849 ]),
1850 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
1851 Sequence::new(vec_of_erased![
1852 Ref::new("SingleIdentifierGrammar"),
1853 Ref::keyword("AS"),
1854 Ref::new("SingleIdentifierGrammar"),
1855 ]),
1856 ]),]),
1857 ]),
1858 ])
1859 .to_matchable(),
1860 )
1861 .to_matchable()
1862 .into(),
1863 ),
1864 (
1865 "ReplaceClauseSegment".into(),
1866 NodeMatcher::new(
1867 SyntaxKind::SelectReplaceClause,
1868 Sequence::new(vec_of_erased![
1869 Ref::keyword("REPLACE"),
1870 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
1871 Sequence::new(vec_of_erased![
1872 Ref::new("ExpressionSegment"),
1873 Ref::keyword("AS"),
1874 Ref::new("SingleIdentifierGrammar"),
1875 ]),
1876 ]),]),
1877 ])
1878 .to_matchable(),
1879 )
1880 .to_matchable()
1881 .into(),
1882 ),
1883 ]);
1884
1885 snowflake_dialect.replace_grammar(
1886 "SelectClauseModifierSegment",
1887 Sequence::new(vec_of_erased![
1888 one_of(vec_of_erased![
1889 Ref::keyword("DISTINCT"),
1890 Ref::keyword("ALL"),
1891 ])
1892 .config(|this| this.optional()),
1893 Sequence::new(vec_of_erased![
1894 Ref::keyword("TOP"),
1895 Ref::new("NumericLiteralSegment"),
1896 ])
1897 .config(|this| this.optional()),
1898 ])
1899 .to_matchable(),
1900 );
1901
1902 snowflake_dialect.replace_grammar(
1903 "AlterTableStatementSegment",
1904 Sequence::new(vec_of_erased![
1905 Ref::keyword("ALTER"),
1906 Ref::keyword("TABLE"),
1907 Ref::new("IfExistsGrammar").optional(),
1908 Ref::new("TableReferenceSegment"),
1909 one_of(vec_of_erased![
1910 Sequence::new(vec_of_erased![
1912 Ref::keyword("RENAME"),
1913 Ref::keyword("TO"),
1914 Ref::new("TableReferenceSegment"),
1915 ]),
1916 Sequence::new(vec_of_erased![
1918 Ref::keyword("SWAP"),
1919 Ref::keyword("WITH"),
1920 Ref::new("TableReferenceSegment"),
1921 ]),
1922 Sequence::new(vec_of_erased![
1924 one_of(vec_of_erased![Ref::keyword("ADD"), Ref::keyword("DROP"),]),
1925 Ref::keyword("SEARCH"),
1926 Ref::keyword("OPTIMIZATION"),
1927 ]),
1928 Ref::new("AlterTableClusteringActionSegment"),
1929 Ref::new("AlterTableConstraintActionSegment"),
1930 Sequence::new(vec_of_erased![
1932 Ref::keyword("SET"),
1933 one_of(vec_of_erased![
1934 Ref::new("ParameterNameSegment"),
1935 Ref::keyword("COMMENT"),
1936 ]),
1937 Ref::new("EqualsSegment").optional(),
1938 one_of(vec_of_erased![
1939 Ref::new("LiteralGrammar"),
1940 Ref::new("NakedIdentifierSegment"),
1941 Ref::new("QuotedLiteralSegment"),
1942 ]),
1943 ]),
1944 Sequence::new(vec_of_erased![
1946 Ref::keyword("DROP"),
1947 Ref::new("PrimaryKeyGrammar"),
1948 ]),
1949 Sequence::new(vec_of_erased![
1951 Ref::keyword("ADD"),
1952 Ref::new("PrimaryKeyGrammar"),
1953 Bracketed::new(vec_of_erased![
1954 Delimited::new(vec_of_erased![Ref::new("ColumnReferenceSegment"),])
1955 .config(|this| this.optional()),
1956 ]),
1957 ]),
1958 Ref::new("AlterTableTableColumnActionSegment"),
1959 ]),
1960 ])
1961 .to_matchable(),
1962 );
1963
1964 snowflake_dialect.add([
1965 (
1966 "AlterTableTableColumnActionSegment".into(),
1967 NodeMatcher::new(
1968 SyntaxKind::AlterTableTableColumnAction,
1969 one_of(vec_of_erased![
1970 Sequence::new(vec_of_erased![
1972 Ref::keyword("ADD"),
1973 Ref::keyword("COLUMN").optional(),
1974 Delimited::new(vec_of_erased![Sequence::new(vec_of_erased![
1975 Ref::new("ColumnReferenceSegment"),
1976 Ref::new("DatatypeSegment"),
1977 one_of(vec_of_erased![
1978 Sequence::new(vec_of_erased![
1980 Ref::keyword("DEFAULT"),
1981 Ref::new("ExpressionSegment"),
1982 ]),
1983 Sequence::new(vec_of_erased![
1985 one_of(vec_of_erased![
1986 Ref::keyword("AUTOINCREMENT"),
1987 Ref::keyword("IDENTITY"),
1988 ]),
1989 one_of(vec_of_erased![
1990 Bracketed::new(vec_of_erased![
1992 Ref::new("NumericLiteralSegment"),
1993 Ref::new("CommaSegment"),
1994 Ref::new("NumericLiteralSegment"),
1995 ]),
1996 Sequence::new(vec_of_erased![
1998 Ref::keyword("START"),
1999 Ref::new("NumericLiteralSegment"),
2000 Ref::keyword("INCREMENT"),
2001 Ref::new("NumericLiteralSegment"),
2002 ]),
2003 ])
2004 .config(|this| this.optional()),
2005 ])
2006 .config(|this| this.optional()),
2007 ])
2008 .config(|this| this.optional()),
2009 Sequence::new(vec_of_erased![
2011 Ref::keyword("WITH").optional(),
2012 Ref::keyword("MASKING"),
2013 Ref::keyword("POLICY"),
2014 Ref::new("FunctionNameSegment"),
2015 Sequence::new(vec_of_erased![
2016 Ref::keyword("USING"),
2017 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
2018 one_of(vec_of_erased![
2019 Ref::new("ColumnReferenceSegment"),
2020 Ref::new("ExpressionSegment"),
2021 ]),
2022 ]),]),
2023 ])
2024 .config(|this| this.optional()),
2025 ])
2026 .config(|this| this.optional()),
2027 Ref::new("CommentClauseSegment").optional(),
2028 ]),]),
2029 ]),
2030 Sequence::new(vec_of_erased![
2032 Ref::keyword("RENAME"),
2033 Ref::keyword("COLUMN"),
2034 Ref::new("ColumnReferenceSegment"),
2035 Ref::keyword("TO"),
2036 Ref::new("ColumnReferenceSegment"),
2037 ]),
2038 Sequence::new(vec_of_erased![
2040 one_of(vec_of_erased![
2041 Ref::keyword("ALTER"),
2042 Ref::keyword("MODIFY"),
2043 ]),
2044 optionally_bracketed(vec_of_erased![Delimited::new(vec_of_erased![
2045 Sequence::new(vec_of_erased![
2047 Ref::keyword("COLUMN").optional(),
2048 Ref::new("ColumnReferenceSegment"),
2049 one_of(vec_of_erased![
2050 Sequence::new(vec_of_erased![
2051 Ref::keyword("DROP"),
2052 Ref::keyword("DEFAULT"),
2053 ]),
2054 Sequence::new(vec_of_erased![
2055 Ref::keyword("SET"),
2056 Ref::keyword("DEFAULT"),
2057 Ref::new("NakedIdentifierSegment"),
2058 Ref::new("DotSegment"),
2059 Ref::keyword("NEXTVAL"),
2060 ]),
2061 Sequence::new(vec_of_erased![
2062 one_of(vec_of_erased![
2063 Ref::keyword("SET"),
2064 Ref::keyword("DROP"),
2065 ])
2066 .config(|this| this.optional()),
2067 Ref::keyword("NOT"),
2068 Ref::keyword("NULL"),
2069 ]),
2070 Sequence::new(vec_of_erased![
2071 Sequence::new(vec_of_erased![
2072 Sequence::new(vec_of_erased![
2073 Ref::keyword("SET"),
2074 Ref::keyword("DATA").optional(),
2075 ]),
2076 Ref::keyword("TYPE").optional(),
2077 ]),
2078 Ref::new("DatatypeSegment"),
2079 ]),
2080 Ref::new("CommentClauseSegment"),
2081 ]),
2082 ]),
2083 Sequence::new(vec_of_erased![
2084 Ref::keyword("COLUMN"),
2085 Ref::new("ColumnReferenceSegment"),
2086 Ref::keyword("SET"),
2087 Ref::keyword("MASKING"),
2088 Ref::keyword("POLICY"),
2089 Ref::new("FunctionNameSegment"),
2090 Sequence::new(vec_of_erased![
2091 Ref::keyword("USING"),
2092 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
2093 one_of(vec_of_erased![
2094 Ref::new("ColumnReferenceSegment"),
2095 Ref::new("ExpressionSegment"),
2096 ]),
2097 ]),]),
2098 ])
2099 .config(|this| this.optional()),
2100 ]),
2101 Sequence::new(vec_of_erased![
2102 Ref::keyword("COLUMN"),
2103 Ref::new("ColumnReferenceSegment"),
2104 Ref::keyword("UNSET"),
2105 Ref::keyword("MASKING"),
2106 Ref::keyword("POLICY"),
2107 ]),
2108 Sequence::new(vec_of_erased![
2109 Ref::keyword("COLUMN"),
2110 Ref::new("ColumnReferenceSegment"),
2111 Ref::keyword("SET"),
2112 Ref::keyword("TAG"),
2113 Ref::new("TagReferenceSegment"),
2114 Ref::new("EqualsSegment"),
2115 Ref::new("QuotedLiteralSegment"),
2116 ]),
2117 Sequence::new(vec_of_erased![
2118 Ref::keyword("COLUMN"),
2119 Ref::new("ColumnReferenceSegment"),
2120 Ref::keyword("UNSET"),
2121 Ref::keyword("TAG"),
2122 Ref::new("TagReferenceSegment"),
2123 ]),
2124 ]),]),
2125 ]),
2126 Sequence::new(vec_of_erased![
2128 Ref::keyword("DROP"),
2129 Ref::keyword("COLUMN").optional(),
2130 Delimited::new(vec_of_erased![Ref::new("ColumnReferenceSegment"),]),
2131 ]),
2132 Sequence::new(vec_of_erased![
2134 one_of(vec_of_erased![Ref::keyword("ADD"), Ref::keyword("MODIFY"),]),
2135 Ref::keyword("COLUMN").optional(),
2136 Ref::new("ColumnDefinitionSegment"),
2137 one_of(vec_of_erased![
2138 Sequence::new(vec_of_erased![
2139 one_of(vec_of_erased![
2140 Ref::keyword("FIRST"),
2141 Ref::keyword("AFTER"),
2142 ]),
2143 Ref::new("ColumnReferenceSegment"),
2144 ]),
2145 Ref::new("BracketedColumnReferenceListGrammar"),
2147 ])
2148 .config(|this| this.optional()),
2149 ]),
2150 ])
2151 .to_matchable(),
2152 )
2153 .to_matchable()
2154 .into(),
2155 ),
2156 (
2157 "AlterTableClusteringActionSegment".into(),
2158 NodeMatcher::new(
2159 SyntaxKind::AlterTableClusteringAction,
2160 one_of(vec_of_erased![
2161 Sequence::new(vec_of_erased![
2162 Ref::keyword("CLUSTER"),
2163 Ref::keyword("BY"),
2164 one_of(vec_of_erased![
2165 Ref::new("FunctionSegment"),
2166 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
2167 Ref::new("ExpressionSegment"),
2168 ]),]),
2169 ]),
2170 ]),
2171 Sequence::new(vec_of_erased![
2172 Ref::keyword("RECLUSTER"),
2173 Sequence::new(vec_of_erased![
2174 Ref::keyword("MAX_SIZE"),
2175 Ref::new("EqualsSegment"),
2176 Ref::new("NumericLiteralSegment"),
2177 ])
2178 .config(|this| this.optional()),
2179 Ref::new("WhereClauseSegment").optional(),
2180 ]),
2181 Sequence::new(vec_of_erased![
2182 one_of(vec_of_erased![
2183 Ref::keyword("SUSPEND"),
2184 Ref::keyword("RESUME"),
2185 ]),
2186 Ref::keyword("RECLUSTER"),
2187 ]),
2188 Sequence::new(vec_of_erased![
2189 Ref::keyword("DROP"),
2190 Ref::keyword("CLUSTERING"),
2191 Ref::keyword("KEY"),
2192 ]),
2193 ])
2194 .to_matchable(),
2195 )
2196 .to_matchable()
2197 .into(),
2198 ),
2199 (
2200 "AlterTableConstraintActionSegment".into(),
2201 NodeMatcher::new(
2202 SyntaxKind::AlterTableConstraintAction,
2203 one_of(vec_of_erased![
2204 Sequence::new(vec_of_erased![
2206 Ref::keyword("ADD"),
2207 Sequence::new(vec_of_erased![
2208 Ref::keyword("CONSTRAINT"),
2209 one_of(vec_of_erased![
2210 Ref::new("NakedIdentifierSegment"),
2211 Ref::new("QuotedIdentifierSegment"),
2212 ])
2213 .config(|this| this.optional()),
2214 ]),
2215 one_of(vec_of_erased![
2216 Sequence::new(vec_of_erased![
2217 Ref::new("PrimaryKeyGrammar"),
2218 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
2219 Ref::new("ColumnReferenceSegment"),
2220 ]),]),
2221 ]),
2222 Sequence::new(vec_of_erased![
2223 Sequence::new(vec_of_erased![
2224 Ref::new("ForeignKeyGrammar"),
2225 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
2226 Ref::new("ColumnReferenceSegment"),
2227 ]),]),
2228 ]),
2229 Ref::keyword("REFERENCES"),
2230 Ref::new("TableReferenceSegment"),
2231 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
2232 Ref::new("ColumnReferenceSegment"),
2233 ]),])
2234 .config(|this| this.optional()),
2235 ]),
2236 Sequence::new(vec_of_erased![
2237 Ref::keyword("UNIQUE"),
2238 Bracketed::new(vec_of_erased![Ref::new("ColumnReferenceSegment"),])
2239 .config(|this| this.optional()),
2240 ]),
2241 ]),
2242 ]),
2243 Sequence::new(vec_of_erased![
2244 Ref::keyword("DROP"),
2245 Sequence::new(vec_of_erased![
2246 Ref::keyword("CONSTRAINT"),
2247 Ref::new("NakedIdentifierSegment"),
2248 ])
2249 .config(|this| this.optional()),
2250 one_of(vec_of_erased![
2251 Ref::new("PrimaryKeyGrammar"),
2252 Ref::new("ForeignKeyGrammar"),
2253 Ref::keyword("UNIQUE"),
2254 ]),
2255 Delimited::new(vec_of_erased![Ref::new("ColumnReferenceSegment"),]),
2256 ]),
2257 Sequence::new(vec_of_erased![
2258 Ref::keyword("RENAME"),
2259 Ref::keyword("CONSTRAINT"),
2260 Ref::new("NakedIdentifierSegment"),
2261 Ref::keyword("TO"),
2262 Ref::new("NakedIdentifierSegment"),
2263 ]),
2264 ])
2265 .to_matchable(),
2266 )
2267 .to_matchable()
2268 .into(),
2269 ),
2270 (
2271 "AlterWarehouseStatementSegment".into(),
2272 NodeMatcher::new(
2273 SyntaxKind::AlterWarehouseStatement,
2274 Sequence::new(vec_of_erased![
2275 Ref::keyword("ALTER"),
2276 Ref::keyword("WAREHOUSE"),
2277 Sequence::new(vec_of_erased![Ref::keyword("IF"), Ref::keyword("EXISTS"),])
2278 .config(|this| this.optional()),
2279 one_of(vec_of_erased![
2280 Sequence::new(vec_of_erased![
2281 Ref::new("ObjectReferenceSegment").optional(),
2282 one_of(vec_of_erased![
2283 Ref::keyword("SUSPEND"),
2284 Sequence::new(vec_of_erased![
2285 Ref::keyword("RESUME"),
2286 Sequence::new(vec_of_erased![
2287 Ref::keyword("IF"),
2288 Ref::keyword("SUSPENDED"),
2289 ])
2290 .config(|this| this.optional()),
2291 ]),
2292 ]),
2293 ]),
2294 Sequence::new(vec_of_erased![
2295 Ref::new("ObjectReferenceSegment").optional(),
2296 Sequence::new(vec_of_erased![
2297 Ref::keyword("ABORT"),
2298 Ref::keyword("ALL"),
2299 Ref::keyword("QUERIES"),
2300 ]),
2301 ]),
2302 Sequence::new(vec_of_erased![
2303 Ref::new("ObjectReferenceSegment"),
2304 Ref::keyword("RENAME"),
2305 Ref::keyword("TO"),
2306 Ref::new("ObjectReferenceSegment"),
2307 ]),
2308 Sequence::new(vec_of_erased![
2309 Ref::new("ObjectReferenceSegment").optional(),
2310 Ref::keyword("SET"),
2311 one_of(vec_of_erased![
2312 AnyNumberOf::new(vec_of_erased![
2313 Ref::new("WarehouseObjectPropertiesSegment"),
2314 Ref::new("CommentEqualsClauseSegment"),
2315 Ref::new("WarehouseObjectParamsSegment"),
2316 ]),
2317 Ref::new("TagEqualsSegment"),
2318 ]),
2319 ]),
2320 Sequence::new(vec_of_erased![
2321 Ref::new("ObjectReferenceSegment"),
2322 Ref::keyword("UNSET"),
2323 one_of(vec_of_erased![
2324 Delimited::new(vec_of_erased![Ref::new("NakedIdentifierSegment"),]),
2325 Sequence::new(vec_of_erased![
2326 Ref::keyword("TAG"),
2327 Delimited::new(
2328 vec_of_erased![Ref::new("TagReferenceSegment"),]
2329 ),
2330 ]),
2331 ]),
2332 ]),
2333 ]),
2334 ])
2335 .to_matchable(),
2336 )
2337 .to_matchable()
2338 .into(),
2339 ),
2340 (
2341 "AlterShareStatementSegment".into(),
2342 NodeMatcher::new(
2343 SyntaxKind::AlterShareStatement,
2344 Sequence::new(vec_of_erased![
2345 Ref::keyword("ALTER"),
2346 Ref::keyword("SHARE"),
2347 Sequence::new(vec_of_erased![Ref::keyword("IF"), Ref::keyword("EXISTS"),])
2348 .config(|this| this.optional()),
2349 Ref::new("NakedIdentifierSegment"),
2350 one_of(vec_of_erased![
2351 Sequence::new(vec_of_erased![
2352 one_of(vec_of_erased![Ref::keyword("ADD"), Ref::keyword("REMOVE"),]),
2353 Ref::keyword("ACCOUNTS"),
2354 Ref::new("EqualsSegment"),
2355 Delimited::new(vec_of_erased![Ref::new("NakedIdentifierSegment"),]),
2356 Sequence::new(vec_of_erased![
2357 Ref::keyword("SHARE_RESTRICTIONS"),
2358 Ref::new("EqualsSegment"),
2359 Ref::new("BooleanLiteralGrammar"),
2360 ])
2361 .config(|this| this.optional()),
2362 ]),
2363 Sequence::new(vec_of_erased![
2364 Ref::keyword("SET"),
2365 Ref::keyword("ACCOUNTS"),
2366 Ref::new("EqualsSegment"),
2367 Delimited::new(vec_of_erased![Ref::new("NakedIdentifierSegment"),]),
2368 Ref::new("CommentEqualsClauseSegment").optional(),
2369 ]),
2370 Sequence::new(vec_of_erased![
2371 Ref::keyword("SET"),
2372 Ref::new("TagEqualsSegment"),
2373 ]),
2374 Sequence::new(vec_of_erased![
2375 Ref::keyword("UNSET"),
2376 Ref::keyword("TAG"),
2377 Ref::new("TagReferenceSegment"),
2378 AnyNumberOf::new(vec_of_erased![
2379 Ref::new("CommaSegment"),
2380 Ref::new("TagReferenceSegment"),
2381 ])
2382 .config(|this| this.optional()),
2383 ]),
2384 Sequence::new(vec_of_erased![
2385 Ref::keyword("UNSET"),
2386 Ref::keyword("COMMENT"),
2387 ]),
2388 ]),
2389 ])
2390 .to_matchable(),
2391 )
2392 .to_matchable()
2393 .into(),
2394 ),
2395 (
2396 "AlterStorageIntegrationSegment".into(),
2397 NodeMatcher::new(
2398 SyntaxKind::AlterStorageIntegrationStatement,
2399 Sequence::new(vec_of_erased![
2400 Ref::keyword("ALTER"),
2401 Ref::keyword("STORAGE").optional(),
2402 Ref::keyword("INTEGRATION"),
2403 Ref::new("IfExistsGrammar").optional(),
2404 Ref::new("ObjectReferenceSegment"),
2405 one_of(vec_of_erased![
2406 Sequence::new(vec_of_erased![
2407 Ref::keyword("SET"),
2408 one_of(vec_of_erased![
2409 Ref::new("TagEqualsSegment").optional(),
2410 any_set_of(vec_of_erased![
2411 Sequence::new(vec_of_erased![
2412 Ref::keyword("COMMENT"),
2413 Ref::new("EqualsSegment"),
2414 Ref::new("QuotedLiteralSegment"),
2415 ]),
2416 Sequence::new(vec_of_erased![
2417 Ref::keyword("ENABLED"),
2418 Ref::new("EqualsSegment"),
2419 Ref::new("BooleanLiteralGrammar"),
2420 ]),
2421 one_of(vec_of_erased![
2422 any_set_of(vec_of_erased![
2423 Sequence::new(vec_of_erased![
2424 Ref::keyword("STORAGE_AWS_ROLE_ARN"),
2425 Ref::new("EqualsSegment"),
2426 Ref::new("QuotedLiteralSegment"),
2427 ]),
2428 Sequence::new(vec_of_erased![
2429 Ref::keyword("STORAGE_AWS_OBJECT_ACL"),
2430 Ref::new("EqualsSegment"),
2431 Ref::new("QuotedLiteralSegment"),
2432 ]),
2433 ]),
2434 any_set_of(vec_of_erased![Sequence::new(vec_of_erased![
2435 Ref::keyword("AZURE_TENANT_ID"),
2436 Ref::new("EqualsSegment"),
2437 Ref::new("QuotedLiteralSegment"),
2438 ]),]),
2439 ]),
2440 Sequence::new(vec_of_erased![
2441 Ref::keyword("STORAGE_ALLOWED_LOCATIONS"),
2442 Ref::new("EqualsSegment"),
2443 one_of(vec_of_erased![
2444 Bracketed::new(vec_of_erased![Delimited::new(
2445 vec_of_erased![one_of(vec_of_erased![
2446 Ref::new("S3Path"),
2447 Ref::new("GCSPath"),
2448 Ref::new("AzureBlobStoragePath"),
2449 ]),]
2450 ),]),
2451 Bracketed::new(vec_of_erased![Ref::new(
2452 "QuotedStarSegment"
2453 ),]),
2454 ]),
2455 ]),
2456 Sequence::new(vec_of_erased![
2457 Ref::keyword("STORAGE_BLOCKED_LOCATIONS"),
2458 Ref::new("EqualsSegment"),
2459 Bracketed::new(vec_of_erased![Delimited::new(
2460 vec_of_erased![one_of(vec_of_erased![
2461 Ref::new("S3Path"),
2462 Ref::new("GCSPath"),
2463 Ref::new("AzureBlobStoragePath"),
2464 ]),]
2465 ),]),
2466 ]),
2467 ]),
2468 ]),
2469 ]),
2470 Sequence::new(vec_of_erased![
2471 Ref::keyword("UNSET"),
2472 one_of(vec_of_erased![
2473 Sequence::new(vec_of_erased![
2474 Ref::keyword("TAG"),
2475 Delimited::new(
2476 vec_of_erased![Ref::new("TagReferenceSegment"),]
2477 ),
2478 ])
2479 .config(|this| this.optional()),
2480 Ref::keyword("COMMENT"),
2481 Ref::keyword("ENABLED"),
2482 Ref::keyword("STORAGE_BLOCKED_LOCATIONS"),
2483 ]),
2484 ]),
2485 ]),
2486 ])
2487 .to_matchable(),
2488 )
2489 .to_matchable()
2490 .into(),
2491 ),
2492 (
2493 "AlterExternalTableStatementSegment".into(),
2494 NodeMatcher::new(
2495 SyntaxKind::AlterExternalTableStatement,
2496 Sequence::new(vec_of_erased![
2497 Ref::keyword("ALTER"),
2498 Ref::keyword("EXTERNAL"),
2499 Ref::keyword("TABLE"),
2500 Ref::new("IfExistsGrammar").optional(),
2501 Ref::new("TableReferenceSegment"),
2502 one_of(vec_of_erased![
2503 Sequence::new(vec_of_erased![
2504 Ref::keyword("REFRESH"),
2505 Ref::new("QuotedLiteralSegment").optional(),
2506 ]),
2507 Sequence::new(vec_of_erased![
2508 one_of(vec_of_erased![Ref::keyword("ADD"), Ref::keyword("REMOVE"),]),
2509 Ref::keyword("FILES"),
2510 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
2511 Ref::new("QuotedLiteralSegment"),
2512 ]),]),
2513 ]),
2514 Sequence::new(vec_of_erased![
2515 Ref::keyword("SET"),
2516 Sequence::new(vec_of_erased![
2517 Ref::keyword("AUTO_REFRESH"),
2518 Ref::new("EqualsSegment"),
2519 Ref::new("BooleanLiteralGrammar"),
2520 ])
2521 .config(|this| this.optional()),
2522 Ref::new("TagEqualsSegment").optional(),
2523 ]),
2524 Sequence::new(vec_of_erased![
2525 Ref::keyword("UNSET"),
2526 Ref::new("TagEqualsSegment"),
2527 ]),
2528 Sequence::new(vec_of_erased![
2529 Ref::keyword("DROP"),
2530 Ref::keyword("PARTITION"),
2531 Ref::keyword("LOCATION"),
2532 Ref::new("QuotedLiteralSegment"),
2533 ]),
2534 Sequence::new(vec_of_erased![
2535 Ref::keyword("ADD"),
2536 Ref::keyword("PARTITION"),
2537 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
2538 Sequence::new(vec_of_erased![
2539 Ref::new("ColumnReferenceSegment"),
2540 Ref::new("EqualsSegment"),
2541 Ref::new("QuotedLiteralSegment"),
2542 ]),
2543 ]),]),
2544 Ref::keyword("LOCATION"),
2545 Ref::new("QuotedLiteralSegment"),
2546 ]),
2547 ]),
2548 ])
2549 .to_matchable(),
2550 )
2551 .to_matchable()
2552 .into(),
2553 ),
2554 (
2555 "CommentEqualsClauseSegment".into(),
2556 NodeMatcher::new(
2557 SyntaxKind::CommentEqualsClause,
2558 Sequence::new(vec_of_erased![
2559 Ref::keyword("COMMENT"),
2560 Ref::new("EqualsSegment"),
2561 Ref::new("QuotedLiteralSegment"),
2562 ])
2563 .to_matchable(),
2564 )
2565 .to_matchable()
2566 .into(),
2567 ),
2568 (
2569 "TagBracketedEqualsSegment".into(),
2570 NodeMatcher::new(
2571 SyntaxKind::TagBracketedEquals,
2572 Sequence::new(vec_of_erased![
2573 Sequence::new(vec_of_erased![Ref::keyword("WITH"),])
2574 .config(|this| this.optional()),
2575 Ref::keyword("TAG"),
2576 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
2577 Sequence::new(vec_of_erased![
2578 Ref::new("TagReferenceSegment"),
2579 Ref::new("EqualsSegment"),
2580 Ref::new("QuotedLiteralSegment"),
2581 ])
2582 ])]),
2583 ])
2584 .to_matchable(),
2585 )
2586 .to_matchable()
2587 .into(),
2588 ),
2589 (
2590 "TagEqualsSegment".into(),
2591 NodeMatcher::new(
2592 SyntaxKind::TagEquals,
2593 Sequence::new(vec_of_erased![
2594 Ref::keyword("TAG"),
2595 Delimited::new(vec_of_erased![Sequence::new(vec_of_erased![
2596 Ref::new("TagReferenceSegment"),
2597 Ref::new("EqualsSegment"),
2598 Ref::new("QuotedLiteralSegment"),
2599 ])])
2600 ])
2601 .to_matchable(),
2602 )
2603 .to_matchable()
2604 .into(),
2605 ),
2606 ]);
2607
2608 snowflake_dialect.replace_grammar(
2609 "UnorderedSelectStatementSegment",
2610 ansi::get_unordered_select_statement_segment_grammar().copy(
2611 Some(vec_of_erased![Ref::new("QualifyClauseSegment").optional()]),
2612 None,
2613 Some(Ref::new("OverlapsClauseSegment").optional().to_matchable()),
2614 None,
2615 Vec::new(),
2616 false,
2617 ),
2618 );
2619
2620 snowflake_dialect.add([
2621 (
2622 "AccessStatementSegment".into(),
2623 NodeMatcher::new(SyntaxKind::AccessStatement, {
2624 let global_permissions = one_of(vec_of_erased![
2625 Sequence::new(vec_of_erased![
2626 Ref::keyword("CREATE"),
2627 one_of(vec_of_erased![
2628 Ref::keyword("ACCOUNT"),
2629 Ref::keyword("ROLE"),
2630 Ref::keyword("USER"),
2631 Ref::keyword("WAREHOUSE"),
2632 Ref::keyword("DATABASE"),
2633 Ref::keyword("INTEGRATION"),
2634 Ref::keyword("SHARE"),
2635 Sequence::new(vec_of_erased![
2636 Ref::keyword("DATA"),
2637 Ref::keyword("EXCHANGE"),
2638 Ref::keyword("LISTING"),
2639 ]),
2640 Sequence::new(vec_of_erased![
2641 Ref::keyword("NETWORK"),
2642 Ref::keyword("POLICY"),
2643 ]),
2644 ]),
2645 ]),
2646 Sequence::new(vec_of_erased![
2647 Ref::keyword("APPLY"),
2648 Ref::keyword("MASKING"),
2649 Ref::keyword("POLICY"),
2650 ]),
2651 Sequence::new(vec_of_erased![
2652 Ref::keyword("APPLY"),
2653 Ref::keyword("ROW"),
2654 Ref::keyword("ACCESS"),
2655 Ref::keyword("POLICY"),
2656 ]),
2657 Sequence::new(vec_of_erased![
2658 Ref::keyword("APPLY"),
2659 Ref::keyword("SESSION"),
2660 Ref::keyword("POLICY"),
2661 ]),
2662 Sequence::new(vec_of_erased![Ref::keyword("APPLY"), Ref::keyword("TAG"),]),
2663 Sequence::new(vec_of_erased![
2664 Ref::keyword("ATTACH"),
2665 Ref::keyword("POLICY"),
2666 ]),
2667 Sequence::new(vec_of_erased![
2668 Ref::keyword("EXECUTE"),
2669 Ref::keyword("TASK"),
2670 ]),
2671 Sequence::new(vec_of_erased![
2672 Ref::keyword("IMPORT"),
2673 Ref::keyword("SHARE"),
2674 ]),
2675 Sequence::new(vec_of_erased![
2676 Ref::keyword("MANAGE"),
2677 one_of(vec_of_erased![
2678 Ref::keyword("GRANTS"),
2679 Sequence::new(vec_of_erased![
2680 one_of(vec_of_erased![
2681 Ref::keyword("ACCOUNT"),
2682 Ref::keyword("ORGANIZATION"),
2683 Ref::keyword("USER"),
2684 ]),
2685 Ref::keyword("SUPPORT"),
2686 Ref::keyword("CASES"),
2687 ]),
2688 ]),
2689 ]),
2690 Sequence::new(vec_of_erased![
2691 Ref::keyword("MONITOR"),
2692 one_of(vec_of_erased![
2693 Ref::keyword("EXECUTION"),
2694 Ref::keyword("USAGE"),
2695 ]),
2696 ]),
2697 Sequence::new(vec_of_erased![
2698 Ref::keyword("OVERRIDE"),
2699 Ref::keyword("SHARE"),
2700 Ref::keyword("RESTRICTIONS"),
2701 ]),
2702 ]);
2703
2704 let schema_object_names = [
2705 "TABLE",
2706 "VIEW",
2707 "STAGE",
2708 "FUNCTION",
2709 "PROCEDURE",
2710 "ROUTINE",
2711 "SEQUENCE",
2712 "STREAM",
2713 "TASK",
2714 "PIPE",
2715 ];
2716
2717 let schema_object_names_keywrods: Vec<Matchable> = schema_object_names
2718 .iter()
2719 .map(|name| Ref::keyword(name).to_matchable())
2720 .collect();
2721
2722 let mut schema_object_types = schema_object_names_keywrods.clone();
2723 schema_object_types.append(&mut vec_of_erased![
2724 Sequence::new(vec_of_erased![
2725 Ref::keyword("MATERIALIZED"),
2726 Ref::keyword("VIEW")
2727 ]),
2728 Sequence::new(vec_of_erased![
2729 Ref::keyword("EXTERNAL"),
2730 Ref::keyword("TABLE")
2731 ]),
2732 Sequence::new(vec_of_erased![
2733 one_of(vec_of_erased![
2734 Ref::keyword("TEMP"),
2735 Ref::keyword("TEMPORARY")
2736 ]),
2737 Ref::keyword("TABLE"),
2738 ]),
2739 Sequence::new(vec_of_erased![Ref::keyword("FILE"), Ref::keyword("FORMAT")]),
2740 Sequence::new(vec_of_erased![
2741 Ref::keyword("SESSION"),
2742 Ref::keyword("POLICY")
2743 ]),
2744 Sequence::new(vec_of_erased![
2745 Ref::keyword("MASKING"),
2746 Ref::keyword("POLICY")
2747 ]),
2748 Sequence::new(vec_of_erased![
2749 Ref::keyword("ROW"),
2750 Ref::keyword("ACCESS"),
2751 Ref::keyword("POLICY"),
2752 ]),
2753 ]);
2754
2755 let schema_object_types = one_of(schema_object_types);
2756
2757 let schema_object_types_plural = one_of(
2758 schema_object_names
2759 .iter()
2760 .map(|name| Ref::keyword(&format!("{}S", name)).to_matchable())
2761 .collect(),
2762 );
2763
2764 let permissions = Sequence::new(vec_of_erased![
2765 one_of(vec_of_erased![
2766 Sequence::new(vec_of_erased![
2767 Ref::keyword("CREATE"),
2768 one_of(vec_of_erased![
2769 Ref::keyword("SCHEMA"),
2770 schema_object_types.clone(),
2771 ]),
2772 ]),
2773 Sequence::new(vec_of_erased![
2774 Ref::keyword("IMPORTED"),
2775 Ref::keyword("PRIVILEGES"),
2776 ]),
2777 Ref::keyword("APPLY"),
2778 Ref::keyword("CONNECT"),
2779 Ref::keyword("CREATE"),
2780 Ref::keyword("DELETE"),
2781 Ref::keyword("EXECUTE"),
2782 Ref::keyword("INSERT"),
2783 Ref::keyword("MODIFY"),
2784 Ref::keyword("MONITOR"),
2785 Ref::keyword("OPERATE"),
2786 Ref::keyword("OWNERSHIP"),
2787 Ref::keyword("READ"),
2788 Ref::keyword("REFERENCE_USAGE"),
2789 Ref::keyword("REFERENCES"),
2790 Ref::keyword("SELECT"),
2791 Ref::keyword("TEMP"),
2792 Ref::keyword("TEMPORARY"),
2793 Ref::keyword("TRIGGER"),
2794 Ref::keyword("TRUNCATE"),
2795 Ref::keyword("UPDATE"),
2796 Ref::keyword("USAGE"),
2797 Ref::keyword("USE_ANY_ROLE"),
2798 Ref::keyword("WRITE"),
2799 Sequence::new(vec_of_erased![
2800 Ref::keyword("ALL"),
2801 Ref::keyword("PRIVILEGES").optional(),
2802 ]),
2803 ]),
2804 Ref::new("BracketedColumnReferenceListGrammar").optional(),
2805 ]);
2806
2807 let objects = one_of(vec_of_erased![
2808 Ref::keyword("ACCOUNT"),
2809 Sequence::new(vec_of_erased![
2810 one_of(vec_of_erased![
2811 Sequence::new(vec_of_erased![
2812 Ref::keyword("RESOURCE"),
2813 Ref::keyword("MONITOR"),
2814 ]),
2815 Ref::keyword("WAREHOUSE"),
2816 Ref::keyword("DATABASE"),
2817 Ref::keyword("DOMAIN"),
2818 Ref::keyword("INTEGRATION"),
2819 Ref::keyword("SCHEMA"),
2820 Ref::keyword("ROLE"),
2821 Sequence::new(vec_of_erased![
2822 Ref::keyword("ALL"),
2823 Ref::keyword("SCHEMAS"),
2824 Ref::keyword("IN"),
2825 Ref::keyword("DATABASE"),
2826 ]),
2827 Sequence::new(vec_of_erased![
2828 Ref::keyword("FUTURE"),
2829 Ref::keyword("SCHEMAS"),
2830 Ref::keyword("IN"),
2831 Ref::keyword("DATABASE"),
2832 ]),
2833 schema_object_types.clone(),
2834 Sequence::new(vec_of_erased![
2835 Ref::keyword("ALL"),
2836 one_of(vec_of_erased![
2837 schema_object_types_plural.clone(),
2838 Sequence::new(vec_of_erased![
2839 Ref::keyword("MATERIALIZED"),
2840 Ref::keyword("VIEWS"),
2841 ]),
2842 Sequence::new(vec_of_erased![
2843 Ref::keyword("EXTERNAL"),
2844 Ref::keyword("TABLES"),
2845 ]),
2846 Sequence::new(vec_of_erased![
2847 Ref::keyword("FILE"),
2848 Ref::keyword("FORMATS"),
2849 ]),
2850 ]),
2851 Ref::keyword("IN"),
2852 one_of(vec_of_erased![
2853 Ref::keyword("SCHEMA"),
2854 Ref::keyword("DATABASE"),
2855 ]),
2856 ]),
2857 Sequence::new(vec_of_erased![
2858 Ref::keyword("FUTURE"),
2859 one_of(vec_of_erased![
2860 schema_object_types_plural.clone(),
2861 Sequence::new(vec_of_erased![
2862 Ref::keyword("MATERIALIZED"),
2863 Ref::keyword("VIEWS"),
2864 ]),
2865 Sequence::new(vec_of_erased![
2866 Ref::keyword("EXTERNAL"),
2867 Ref::keyword("TABLES"),
2868 ]),
2869 Sequence::new(vec_of_erased![
2870 Ref::keyword("FILE"),
2871 Ref::keyword("FORMATS"),
2872 ]),
2873 ]),
2874 Ref::keyword("IN"),
2875 one_of(vec_of_erased![
2876 Ref::keyword("DATABASE"),
2877 Ref::keyword("SCHEMA"),
2878 ]),
2879 ]),
2880 ])
2881 .config(|this| this.optional()),
2882 Delimited::new(vec_of_erased![
2883 Ref::new("ObjectReferenceSegment"),
2884 Sequence::new(vec_of_erased![
2885 Ref::new("FunctionNameSegment"),
2886 Ref::new("FunctionParameterListGrammar").optional(),
2887 ]),
2888 ])
2889 .config(|this| this.terminators =
2890 vec_of_erased![Ref::keyword("TO"), Ref::keyword("FROM")]),
2891 ]),
2892 ]);
2893
2894 one_of(vec_of_erased![
2895 Sequence::new(vec_of_erased![
2897 Ref::keyword("GRANT"),
2898 one_of(vec_of_erased![
2899 Sequence::new(vec_of_erased![
2900 Delimited::new(vec_of_erased![one_of(vec_of_erased![
2901 global_permissions.clone(),
2902 permissions.clone()
2903 ]),])
2904 .config(
2905 |this| this.terminators = vec_of_erased![Ref::keyword("ON")]
2906 ),
2907 Ref::keyword("ON"),
2908 objects.clone(),
2909 ]),
2910 Sequence::new(vec_of_erased![
2911 Ref::keyword("ROLE"),
2912 Ref::new("ObjectReferenceSegment"),
2913 ]),
2914 Sequence::new(vec_of_erased![
2915 Ref::keyword("OWNERSHIP"),
2916 Ref::keyword("ON"),
2917 Ref::keyword("USER"),
2918 Ref::new("ObjectReferenceSegment"),
2919 ]),
2920 Ref::new("ObjectReferenceSegment"),
2921 ]),
2922 Ref::keyword("TO"),
2923 Ref::keyword("USER").optional(),
2924 Ref::keyword("ROLE").optional(),
2925 Ref::keyword("SHARE").optional(),
2926 Delimited::new(vec_of_erased![one_of(vec_of_erased![
2927 Ref::new("RoleReferenceSegment"),
2928 Ref::new("FunctionSegment"),
2929 Ref::keyword("PUBLIC"),
2930 ]),]),
2931 one_of(vec_of_erased![
2932 Sequence::new(vec_of_erased![
2933 Ref::keyword("WITH"),
2934 Ref::keyword("GRANT"),
2935 Ref::keyword("OPTION"),
2936 ]),
2937 Sequence::new(vec_of_erased![
2938 Ref::keyword("WITH"),
2939 Ref::keyword("ADMIN"),
2940 Ref::keyword("OPTION"),
2941 ]),
2942 Sequence::new(vec_of_erased![
2943 one_of(vec_of_erased![
2944 Ref::keyword("REVOKE"),
2945 Ref::keyword("COPY"),
2946 ]),
2947 Ref::keyword("CURRENT"),
2948 Ref::keyword("GRANTS"),
2949 ])
2950 .config(|this| this.optional()),
2951 ])
2952 .config(|this| this.optional()),
2953 Sequence::new(vec_of_erased![
2954 Ref::keyword("GRANTED"),
2955 Ref::keyword("BY"),
2956 one_of(vec_of_erased![
2957 Ref::keyword("CURRENT_USER"),
2958 Ref::keyword("SESSION_USER"),
2959 Ref::new("ObjectReferenceSegment"),
2960 ])
2961 .config(|this| this.optional()),
2962 ])
2963 .config(|this| this.optional()),
2964 ]),
2965 Sequence::new(vec_of_erased![
2967 Ref::keyword("REVOKE"),
2968 Sequence::new(vec_of_erased![
2969 Ref::keyword("GRANT"),
2970 Ref::keyword("OPTION"),
2971 Ref::keyword("FOR"),
2972 ])
2973 .config(|this| this.optional()),
2974 one_of(vec_of_erased![
2975 Sequence::new(vec_of_erased![
2976 Delimited::new(vec_of_erased![one_of(vec_of_erased![
2977 global_permissions.clone(),
2978 permissions.clone()
2979 ]),])
2980 .config(|this| {
2981 this.terminators = vec_of_erased![Ref::keyword("ON")];
2982 }),
2983 Ref::keyword("ON"),
2984 objects.clone(),
2985 ]),
2986 Sequence::new(vec_of_erased![
2987 Ref::keyword("ROLE"),
2988 Ref::new("ObjectReferenceSegment"),
2989 ]),
2990 Sequence::new(vec_of_erased![
2991 Ref::keyword("OWNERSHIP"),
2992 Ref::keyword("ON"),
2993 Ref::keyword("USER"),
2994 Ref::new("ObjectReferenceSegment"),
2995 ]),
2996 ]),
2997 Ref::keyword("FROM"),
2998 Ref::keyword("USER").optional(),
2999 Ref::keyword("ROLE").optional(),
3000 Ref::keyword("SHARE").optional(),
3001 Delimited::new(vec_of_erased![Ref::new("ObjectReferenceSegment"),]),
3002 Ref::new("DropBehaviorGrammar").optional(),
3003 ]),
3004 ])
3005 .to_matchable()
3006 })
3007 .to_matchable()
3008 .into(),
3009 ),
3010 (
3011 "CreateCloneStatementSegment".into(),
3012 NodeMatcher::new(
3013 SyntaxKind::CreateCloneStatement,
3014 Sequence::new(vec_of_erased![
3015 Ref::keyword("CREATE"),
3016 Sequence::new(vec_of_erased![Ref::keyword("OR"), Ref::keyword("REPLACE"),])
3017 .config(|this| this.optional()),
3018 one_of(vec_of_erased![
3019 Ref::keyword("DATABASE"),
3020 Ref::keyword("SCHEMA"),
3021 Ref::keyword("TABLE"),
3022 Ref::keyword("SEQUENCE"),
3023 Sequence::new(
3024 vec_of_erased![Ref::keyword("FILE"), Ref::keyword("FORMAT"),]
3025 ),
3026 Ref::keyword("STAGE"),
3027 Ref::keyword("STREAM"),
3028 Ref::keyword("TASK"),
3029 ]),
3030 Sequence::new(vec_of_erased![
3031 Ref::keyword("IF"),
3032 Ref::keyword("NOT"),
3033 Ref::keyword("EXISTS"),
3034 ])
3035 .config(|this| this.optional()),
3036 Ref::new("ObjectReferenceSegment"),
3037 Ref::keyword("CLONE"),
3038 Ref::new("ObjectReferenceSegment"),
3039 one_of(vec_of_erased![
3040 Ref::new("FromAtExpressionSegment"),
3041 Ref::new("FromBeforeExpressionSegment"),
3042 ])
3043 .config(|this| this.optional()),
3044 ])
3045 .to_matchable(),
3046 )
3047 .to_matchable()
3048 .into(),
3049 ),
3050 (
3051 "CreateDatabaseFromShareStatementSegment".into(),
3052 NodeMatcher::new(
3053 SyntaxKind::CreateDatabaseFromShareStatement,
3054 Sequence::new(vec_of_erased![
3055 Ref::keyword("CREATE"),
3056 Ref::keyword("DATABASE"),
3057 Ref::new("ObjectReferenceSegment"),
3058 Sequence::new(vec_of_erased![Ref::keyword("FROM"), Ref::keyword("SHARE"),]),
3059 Ref::new("ObjectReferenceSegment"),
3060 ])
3061 .to_matchable(),
3062 )
3063 .to_matchable()
3064 .into(),
3065 ),
3066 (
3067 "CreateProcedureStatementSegment".into(),
3068 NodeMatcher::new(
3069 SyntaxKind::CreateProcedureStatement,
3070 Sequence::new(vec_of_erased![
3071 Ref::keyword("CREATE"),
3072 Sequence::new(vec_of_erased![Ref::keyword("OR"), Ref::keyword("REPLACE"),])
3073 .config(|this| this.optional()),
3074 Sequence::new(vec_of_erased![Ref::keyword("SECURE"),])
3075 .config(|this| this.optional()),
3076 Ref::keyword("PROCEDURE"),
3077 Ref::new("FunctionNameSegment"),
3078 Ref::new("FunctionParameterListGrammar"),
3079 Sequence::new(vec_of_erased![Ref::keyword("COPY"), Ref::keyword("GRANTS"),])
3080 .config(|this| this.optional()),
3081 Ref::keyword("RETURNS"),
3082 one_of(vec_of_erased![
3083 Ref::new("DatatypeSegment"),
3084 Sequence::new(vec_of_erased![
3085 Ref::keyword("TABLE"),
3086 Bracketed::new(vec_of_erased![
3087 Delimited::new(
3088 vec_of_erased![Ref::new("ColumnDefinitionSegment"),]
3089 )
3090 .config(|this| this.optional()),
3091 ]),
3092 ]),
3093 ]),
3094 any_set_of(vec_of_erased![
3095 Sequence::new(vec_of_erased![Ref::keyword("NOT"), Ref::keyword("NULL"),])
3096 .config(|this| this.optional()),
3097 Sequence::new(vec_of_erased![
3098 Ref::keyword("LANGUAGE"),
3099 one_of(vec_of_erased![
3100 Ref::keyword("JAVA"),
3101 Ref::keyword("JAVASCRIPT"),
3102 Ref::keyword("PYTHON"),
3103 Ref::keyword("SCALA"),
3104 Ref::keyword("SQL"),
3105 ])
3106 .config(|this| this.optional()),
3107 ]),
3108 one_of(vec_of_erased![
3109 Sequence::new(vec_of_erased![
3110 Ref::keyword("CALLED"),
3111 Ref::keyword("ON"),
3112 Ref::keyword("NULL"),
3113 Ref::keyword("INPUT"),
3114 ]),
3115 Sequence::new(vec_of_erased![
3116 Ref::keyword("RETURNS"),
3117 Ref::keyword("NULL"),
3118 Ref::keyword("ON"),
3119 Ref::keyword("NULL"),
3120 Ref::keyword("INPUT"),
3121 ]),
3122 Ref::keyword("STRICT"),
3123 ])
3124 .config(|this| this.optional()),
3125 one_of(vec_of_erased![
3126 Ref::keyword("VOLATILE"),
3127 Ref::keyword("IMMUTABLE"),
3128 ])
3129 .config(|this| this.optional()),
3130 Sequence::new(vec_of_erased![
3131 Ref::keyword("RUNTIME_VERSION"),
3132 Ref::new("EqualsSegment"),
3133 Ref::new("QuotedLiteralSegment"),
3134 ])
3135 .config(|this| this.optional()),
3136 Ref::new("CommentEqualsClauseSegment").optional(),
3137 Sequence::new(vec_of_erased![
3138 Ref::keyword("IMPORTS"),
3139 Ref::new("EqualsSegment"),
3140 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
3141 Ref::new("QuotedLiteralSegment"),
3142 ]),]),
3143 ])
3144 .config(|this| this.optional()),
3145 Sequence::new(vec_of_erased![
3146 Ref::keyword("PACKAGES"),
3147 Ref::new("EqualsSegment"),
3148 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
3149 Ref::new("QuotedLiteralSegment"),
3150 ]),]),
3151 ])
3152 .config(|this| this.optional()),
3153 Sequence::new(vec_of_erased![
3154 Ref::keyword("HANDLER"),
3155 Ref::new("EqualsSegment"),
3156 Ref::new("QuotedLiteralSegment"),
3157 ])
3158 .config(|this| this.optional()),
3159 Sequence::new(vec_of_erased![
3160 Ref::keyword("TARGET_PATH"),
3161 Ref::new("EqualsSegment"),
3162 Ref::new("QuotedLiteralSegment"),
3163 ])
3164 .config(|this| this.optional()),
3165 Sequence::new(vec_of_erased![
3166 Ref::keyword("EXECUTE"),
3167 Ref::keyword("AS"),
3168 one_of(vec_of_erased![
3169 Ref::keyword("CALLER"),
3170 Ref::keyword("OWNER"),
3171 ]),
3172 ])
3173 .config(|this| this.optional()),
3174 ])
3175 .config(|this| this.optional()),
3176 Ref::keyword("AS"),
3177 one_of(vec_of_erased![
3178 Ref::new("DoubleQuotedUDFBody"),
3179 Ref::new("SingleQuotedUDFBody"),
3180 Ref::new("DollarQuotedUDFBody"),
3181 Ref::new("ScriptingBlockStatementSegment"),
3182 ]),
3183 ])
3184 .to_matchable(),
3185 )
3186 .to_matchable()
3187 .into(),
3188 ),
3189 (
3190 "ReturnStatementSegment".into(),
3191 NodeMatcher::new(
3192 SyntaxKind::ReturnStatement,
3193 Sequence::new(vec_of_erased![
3194 Ref::keyword("RETURN"),
3195 Ref::new("ExpressionSegment"),
3196 ])
3197 .to_matchable(),
3198 )
3199 .to_matchable()
3200 .into(),
3201 ),
3202 (
3203 "ScriptingBlockStatementSegment".into(),
3204 NodeMatcher::new(
3205 SyntaxKind::ScriptingBlockStatement,
3206 one_of(vec_of_erased![
3207 Sequence::new(vec_of_erased![
3208 Ref::keyword("BEGIN"),
3209 Delimited::new(vec_of_erased![Ref::new("StatementSegment"),]),
3210 ]),
3211 Sequence::new(vec_of_erased![Ref::keyword("END")]),
3212 ])
3213 .to_matchable(),
3214 )
3215 .to_matchable()
3216 .into(),
3217 ),
3218 (
3219 "ScriptingLetStatementSegment".into(),
3220 NodeMatcher::new(
3221 SyntaxKind::ScriptingLetStatement,
3222 one_of(vec_of_erased![
3223 Sequence::new(vec_of_erased![
3225 Ref::keyword("LET"),
3226 Ref::new("LocalVariableNameSegment"),
3227 one_of(vec_of_erased![
3228 one_of(vec_of_erased![
3230 Sequence::new(vec_of_erased![
3231 Ref::new("DatatypeSegment"),
3232 one_of(vec_of_erased![
3233 Ref::keyword("DEFAULT"),
3234 Ref::new("WalrusOperatorSegment"),
3235 ]),
3236 Ref::new("ExpressionSegment"),
3237 ]),
3238 Sequence::new(vec_of_erased![
3239 one_of(vec_of_erased![
3240 Ref::keyword("DEFAULT"),
3241 Ref::new("WalrusOperatorSegment"),
3242 ]),
3243 Ref::new("ExpressionSegment"),
3244 ]),
3245 ]),
3246 Sequence::new(vec_of_erased![
3248 Ref::keyword("CURSOR"),
3249 Ref::keyword("FOR"),
3250 one_of(vec_of_erased![
3251 Ref::new("LocalVariableNameSegment"),
3252 Ref::new("SelectableGrammar"),
3253 ]),
3254 ]),
3255 Sequence::new(vec_of_erased![
3257 Ref::keyword("RESULTSET"),
3258 Ref::new("WalrusOperatorSegment"),
3259 Bracketed::new(vec_of_erased![Ref::new("SelectableGrammar"),]),
3260 ]),
3261 ]),
3262 ]),
3263 Sequence::new(vec_of_erased![
3265 Ref::new("LocalVariableNameSegment"),
3266 Ref::new("WalrusOperatorSegment"),
3267 one_of(vec_of_erased![
3268 Ref::new("ExpressionSegment"),
3270 Bracketed::new(vec_of_erased![Ref::new("SelectableGrammar"),]),
3272 ]),
3273 ]),
3274 ])
3275 .to_matchable(),
3276 )
3277 .to_matchable()
3278 .into(),
3279 ),
3280 (
3281 "CreateFunctionStatementSegment".into(),
3282 NodeMatcher::new(
3283 SyntaxKind::CreateFunctionStatement,
3284 Sequence::new(vec_of_erased![
3285 Ref::keyword("CREATE"),
3286 Sequence::new(vec_of_erased![Ref::keyword("OR"), Ref::keyword("REPLACE"),])
3287 .config(|this| this.optional()),
3288 Sequence::new(vec_of_erased![Ref::keyword("SECURE"),])
3289 .config(|this| this.optional()),
3290 Ref::keyword("FUNCTION"),
3291 Ref::new("IfNotExistsGrammar").optional(),
3292 Ref::new("FunctionNameSegment"),
3293 Ref::new("FunctionParameterListGrammar"),
3294 Ref::keyword("RETURNS"),
3295 one_of(vec_of_erased![
3296 Ref::new("DatatypeSegment"),
3297 Sequence::new(vec_of_erased![
3298 Ref::keyword("TABLE"),
3299 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
3300 Ref::new("ColumnDefinitionSegment"),
3301 ]),]),
3302 ]),
3303 ]),
3304 any_set_of(vec_of_erased![
3305 Sequence::new(vec_of_erased![Ref::keyword("NOT"), Ref::keyword("NULL"),])
3306 .config(|this| this.optional()),
3307 Sequence::new(vec_of_erased![
3308 Ref::keyword("LANGUAGE"),
3309 one_of(vec_of_erased![
3310 Ref::keyword("JAVASCRIPT"),
3311 Ref::keyword("SQL"),
3312 Ref::keyword("PYTHON"),
3313 Ref::keyword("JAVA"),
3314 Ref::keyword("SCALA"),
3315 ])
3316 .config(|this| this.optional()),
3317 ]),
3318 one_of(vec_of_erased![
3319 Sequence::new(vec_of_erased![
3320 Ref::keyword("CALLED"),
3321 Ref::keyword("ON"),
3322 Ref::keyword("NULL"),
3323 Ref::keyword("INPUT"),
3324 ]),
3325 Sequence::new(vec_of_erased![
3326 Ref::keyword("RETURNS"),
3327 Ref::keyword("NULL"),
3328 Ref::keyword("ON"),
3329 Ref::keyword("NULL"),
3330 Ref::keyword("INPUT"),
3331 ]),
3332 Ref::keyword("STRICT"),
3333 ])
3334 .config(|this| this.optional()),
3335 one_of(vec_of_erased![
3336 Ref::keyword("VOLATILE"),
3337 Ref::keyword("IMMUTABLE"),
3338 ])
3339 .config(|this| this.optional()),
3340 Sequence::new(vec_of_erased![
3341 Ref::keyword("RUNTIME_VERSION"),
3342 Ref::new("EqualsSegment"),
3343 Ref::new("QuotedLiteralSegment"),
3344 ])
3345 .config(|this| this.optional()),
3346 Ref::new("CommentEqualsClauseSegment").optional(),
3347 Sequence::new(vec_of_erased![
3348 Ref::keyword("IMPORTS"),
3349 Ref::new("EqualsSegment"),
3350 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
3351 Ref::new("QuotedLiteralSegment"),
3352 ]),]),
3353 ])
3354 .config(|this| this.optional()),
3355 Sequence::new(vec_of_erased![
3356 Ref::keyword("PACKAGES"),
3357 Ref::new("EqualsSegment"),
3358 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
3359 Ref::new("QuotedLiteralSegment"),
3360 ]),]),
3361 ])
3362 .config(|this| this.optional()),
3363 Sequence::new(vec_of_erased![
3364 Ref::keyword("HANDLER"),
3365 Ref::new("EqualsSegment"),
3366 Ref::new("QuotedLiteralSegment"),
3367 ])
3368 .config(|this| this.optional()),
3369 Sequence::new(vec_of_erased![
3370 Ref::keyword("TARGET_PATH"),
3371 Ref::new("EqualsSegment"),
3372 Ref::new("QuotedLiteralSegment"),
3373 ])
3374 .config(|this| this.optional()),
3375 ])
3376 .config(|this| this.optional()),
3377 Sequence::new(vec_of_erased![
3378 Ref::keyword("AS"),
3379 one_of(vec_of_erased![
3380 Ref::new("DoubleQuotedUDFBody"),
3382 Ref::new("SingleQuotedUDFBody"),
3383 Ref::new("DollarQuotedUDFBody"),
3384 Ref::new("ScriptingBlockStatementSegment"),
3386 ]),
3387 ])
3388 .config(|this| this.optional()),
3389 ])
3390 .to_matchable(),
3391 )
3392 .to_matchable()
3393 .into(),
3394 ),
3395 (
3396 "AlterFunctionStatementSegment".into(),
3397 NodeMatcher::new(
3398 SyntaxKind::AlterFunctionStatement,
3399 Sequence::new(vec_of_erased![
3400 Ref::keyword("ALTER"),
3401 Ref::keyword("FUNCTION"),
3402 Sequence::new(vec_of_erased![Ref::keyword("IF"), Ref::keyword("EXISTS"),])
3403 .config(|this| this.optional()),
3404 Ref::new("FunctionNameSegment"),
3405 Ref::new("FunctionParameterListGrammar"),
3406 one_of(vec_of_erased![
3407 Sequence::new(vec_of_erased![
3408 Ref::keyword("RENAME"),
3409 Ref::keyword("TO"),
3410 Ref::new("FunctionNameSegment"),
3411 ]),
3412 Sequence::new(vec_of_erased![
3413 Ref::keyword("SET"),
3414 one_of(vec_of_erased![
3415 Ref::new("CommentEqualsClauseSegment"),
3416 Sequence::new(vec_of_erased![
3417 Ref::keyword("API_INTEGRATION"),
3418 Ref::new("EqualsSegment"),
3419 Ref::new("SingleIdentifierGrammar"),
3420 ]),
3421 Sequence::new(vec_of_erased![
3422 Ref::keyword("HEADERS"),
3423 Ref::new("EqualsSegment"),
3424 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
3425 Sequence::new(vec_of_erased![
3426 Ref::new("SingleQuotedIdentifierSegment"),
3427 Ref::new("EqualsSegment"),
3428 Ref::new("SingleQuotedIdentifierSegment"),
3429 ]),
3430 ]),]),
3431 ]),
3432 Sequence::new(vec_of_erased![
3433 Ref::keyword("CONTEXT_HEADERS"),
3434 Ref::new("EqualsSegment"),
3435 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
3436 Ref::new("ContextHeadersGrammar"),
3437 ]),]),
3438 ]),
3439 Sequence::new(vec_of_erased![
3440 Ref::keyword("MAX_BATCH_ROWS"),
3441 Ref::new("EqualsSegment"),
3442 Ref::new("NumericLiteralSegment"),
3443 ]),
3444 Sequence::new(vec_of_erased![
3445 Ref::keyword("COMPRESSION"),
3446 Ref::new("EqualsSegment"),
3447 Ref::new("CompressionType"),
3448 ]),
3449 Ref::keyword("SECURE"),
3450 Sequence::new(vec_of_erased![
3451 one_of(vec_of_erased![
3452 Ref::keyword("REQUEST_TRANSLATOR"),
3453 Ref::keyword("RESPONSE_TRANSLATOR"),
3454 ]),
3455 Ref::new("EqualsSegment"),
3456 Ref::new("FunctionNameSegment"),
3457 ]),
3458 ]),
3459 ]),
3460 Sequence::new(vec_of_erased![
3461 Ref::keyword("UNSET"),
3462 one_of(vec_of_erased![
3463 Ref::keyword("COMMENT"),
3464 Ref::keyword("HEADERS"),
3465 Ref::keyword("CONTEXT_HEADERS"),
3466 Ref::keyword("MAX_BATCH_ROWS"),
3467 Ref::keyword("COMPRESSION"),
3468 Ref::keyword("SECURE"),
3469 Ref::keyword("REQUEST_TRANSLATOR"),
3470 Ref::keyword("RESPONSE_TRANSLATOR"),
3471 ]),
3472 ]),
3473 Sequence::new(vec_of_erased![
3474 Ref::keyword("RENAME"),
3475 Ref::keyword("TO"),
3476 Ref::new("SingleIdentifierGrammar"),
3477 ]),
3478 ]),
3479 ])
3480 .to_matchable(),
3481 )
3482 .to_matchable()
3483 .into(),
3484 ),
3485 (
3486 "CreateExternalFunctionStatementSegment".into(),
3487 NodeMatcher::new(
3488 SyntaxKind::CreateExternalFunctionStatement,
3489 Sequence::new(vec_of_erased![
3490 Ref::keyword("CREATE"),
3491 Sequence::new(vec_of_erased![Ref::keyword("OR"), Ref::keyword("REPLACE"),])
3492 .config(|this| this.optional()),
3493 Sequence::new(vec_of_erased![Ref::keyword("SECURE"),])
3494 .config(|this| this.optional()),
3495 Ref::keyword("EXTERNAL"),
3496 Ref::keyword("FUNCTION"),
3497 Ref::new("FunctionNameSegment"),
3498 Ref::new("FunctionParameterListGrammar"),
3499 Ref::keyword("RETURNS"),
3500 Ref::new("DatatypeSegment"),
3501 Sequence::new(vec_of_erased![
3502 Ref::keyword("NOT").optional(),
3503 Ref::keyword("NULL"),
3504 ])
3505 .config(|this| this.optional()),
3506 one_of(vec_of_erased![
3507 Sequence::new(vec_of_erased![
3508 Ref::keyword("CALLED"),
3509 Ref::keyword("ON"),
3510 Ref::keyword("NULL"),
3511 Ref::keyword("INPUT"),
3512 ]),
3513 Sequence::new(vec_of_erased![
3514 Ref::keyword("RETURNS"),
3515 Ref::keyword("NULL"),
3516 Ref::keyword("ON"),
3517 Ref::keyword("NULL"),
3518 Ref::keyword("INPUT"),
3519 ]),
3520 Ref::keyword("STRICT"),
3521 ])
3522 .config(|this| this.optional()),
3523 one_of(vec_of_erased![
3524 Ref::keyword("VOLATILE"),
3525 Ref::keyword("IMMUTABLE"),
3526 ])
3527 .config(|this| this.optional()),
3528 Ref::new("CommentEqualsClauseSegment").optional(),
3529 Ref::keyword("API_INTEGRATION"),
3530 Ref::new("EqualsSegment"),
3531 Ref::new("SingleIdentifierGrammar"),
3532 Sequence::new(vec_of_erased![
3533 Ref::keyword("HEADERS"),
3534 Ref::new("EqualsSegment"),
3535 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
3536 Sequence::new(vec_of_erased![
3537 Ref::new("SingleQuotedIdentifierSegment"),
3538 Ref::new("EqualsSegment"),
3539 Ref::new("SingleQuotedIdentifierSegment"),
3540 ]),
3541 ]),]),
3542 ])
3543 .config(|this| this.optional()),
3544 Sequence::new(vec_of_erased![
3545 Ref::keyword("CONTEXT_HEADERS"),
3546 Ref::new("EqualsSegment"),
3547 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![Ref::new(
3548 "ContextHeadersGrammar"
3549 ),]),]),
3550 ])
3551 .config(|this| this.optional()),
3552 Sequence::new(vec_of_erased![
3553 Ref::keyword("MAX_BATCH_ROWS"),
3554 Ref::new("EqualsSegment"),
3555 Ref::new("NumericLiteralSegment"),
3556 ])
3557 .config(|this| this.optional()),
3558 Sequence::new(vec_of_erased![
3559 Ref::keyword("COMPRESSION"),
3560 Ref::new("EqualsSegment"),
3561 Ref::new("CompressionType"),
3562 ])
3563 .config(|this| this.optional()),
3564 Sequence::new(vec_of_erased![
3565 Ref::keyword("REQUEST_TRANSLATOR"),
3566 Ref::new("EqualsSegment"),
3567 Ref::new("FunctionNameSegment"),
3568 ])
3569 .config(|this| this.optional()),
3570 Sequence::new(vec_of_erased![
3571 Ref::keyword("RESPONSE_TRANSLATOR"),
3572 Ref::new("EqualsSegment"),
3573 Ref::new("FunctionNameSegment"),
3574 ])
3575 .config(|this| this.optional()),
3576 Ref::keyword("AS"),
3577 Ref::new("SingleQuotedIdentifierSegment"),
3578 ])
3579 .to_matchable(),
3580 )
3581 .to_matchable()
3582 .into(),
3583 ),
3584 (
3585 "WarehouseObjectPropertiesSegment".into(),
3586 NodeMatcher::new(
3587 SyntaxKind::WarehouseObjectProperties,
3588 any_set_of(vec_of_erased![
3589 Sequence::new(vec_of_erased![
3590 Ref::keyword("WAREHOUSE_TYPE"),
3591 Ref::new("EqualsSegment"),
3592 Ref::new("WarehouseType"),
3593 ]),
3594 Sequence::new(vec_of_erased![
3595 Ref::keyword("WAREHOUSE_SIZE"),
3596 Ref::new("EqualsSegment"),
3597 Ref::new("WarehouseSize"),
3598 ]),
3599 Sequence::new(vec_of_erased![
3600 Ref::keyword("WAIT_FOR_COMPLETION"),
3601 Ref::new("EqualsSegment"),
3602 Ref::new("BooleanLiteralGrammar"),
3603 ]),
3604 Sequence::new(vec_of_erased![
3605 Ref::keyword("MAX_CLUSTER_COUNT"),
3606 Ref::new("EqualsSegment"),
3607 Ref::new("NumericLiteralSegment"),
3608 ]),
3609 Sequence::new(vec_of_erased![
3610 Ref::keyword("MIN_CLUSTER_COUNT"),
3611 Ref::new("EqualsSegment"),
3612 Ref::new("NumericLiteralSegment"),
3613 ]),
3614 Sequence::new(vec_of_erased![
3615 Ref::keyword("SCALING_POLICY"),
3616 Ref::new("EqualsSegment"),
3617 Ref::new("ScalingPolicy"),
3618 ]),
3619 Sequence::new(vec_of_erased![
3620 Ref::keyword("AUTO_SUSPEND"),
3621 Ref::new("EqualsSegment"),
3622 one_of(vec_of_erased![
3623 Ref::new("NumericLiteralSegment"),
3624 Ref::keyword("NULL"),
3625 ]),
3626 ]),
3627 Sequence::new(vec_of_erased![
3628 Ref::keyword("AUTO_RESUME"),
3629 Ref::new("EqualsSegment"),
3630 Ref::new("BooleanLiteralGrammar"),
3631 ]),
3632 Sequence::new(vec_of_erased![
3633 Ref::keyword("INITIALLY_SUSPENDED"),
3634 Ref::new("EqualsSegment"),
3635 Ref::new("BooleanLiteralGrammar"),
3636 ]),
3637 Sequence::new(vec_of_erased![
3638 Ref::keyword("RESOURCE_MONITOR"),
3639 Ref::new("EqualsSegment"),
3640 Ref::new("NakedIdentifierSegment"),
3641 ]),
3642 ])
3643 .to_matchable(),
3644 )
3645 .to_matchable()
3646 .into(),
3647 ),
3648 (
3649 "WarehouseObjectParamsSegment".into(),
3650 NodeMatcher::new(
3651 SyntaxKind::WarehouseObjectProperties,
3652 any_set_of(vec_of_erased![
3653 Sequence::new(vec_of_erased![
3654 Ref::keyword("MAX_CONCURRENCY_LEVEL"),
3655 Ref::new("EqualsSegment"),
3656 Ref::new("NumericLiteralSegment"),
3657 ]),
3658 Sequence::new(vec_of_erased![
3659 Ref::keyword("STATEMENT_QUEUED_TIMEOUT_IN_SECONDS"),
3660 Ref::new("EqualsSegment"),
3661 Ref::new("NumericLiteralSegment"),
3662 ]),
3663 Sequence::new(vec_of_erased![
3664 Ref::keyword("STATEMENT_TIMEOUT_IN_SECONDS"),
3665 Ref::new("EqualsSegment"),
3666 Ref::new("NumericLiteralSegment"),
3667 ]),
3668 ])
3669 .to_matchable(),
3670 )
3671 .to_matchable()
3672 .into(),
3673 ),
3674 (
3675 "ConstraintPropertiesSegment".into(),
3676 NodeMatcher::new(
3677 SyntaxKind::ConstraintPropertiesSegment,
3678 Sequence::new(vec_of_erased![
3679 Sequence::new(vec_of_erased![
3680 Ref::keyword("CONSTRAINT"),
3681 Ref::new("QuotedLiteralSegment"),
3682 ])
3683 .config(|this| this.optional()),
3684 one_of(vec_of_erased![
3685 Sequence::new(vec_of_erased![
3686 Ref::keyword("UNIQUE"),
3687 Bracketed::new(vec_of_erased![Ref::new("ColumnReferenceSegment"),])
3688 .config(|this| this.optional()),
3689 ]),
3690 Sequence::new(vec_of_erased![
3691 Ref::new("PrimaryKeyGrammar"),
3692 Bracketed::new(vec_of_erased![Ref::new("ColumnReferenceSegment"),])
3693 .config(|this| this.optional()),
3694 ]),
3695 Sequence::new(vec_of_erased![
3696 Sequence::new(vec_of_erased![
3697 Ref::new("ForeignKeyGrammar"),
3698 Bracketed::new(vec_of_erased![Ref::new("ColumnReferenceSegment"),])
3699 .config(|this| this.optional()),
3700 ]),
3701 Ref::keyword("REFERENCES"),
3702 Ref::new("TableReferenceSegment"),
3703 Bracketed::new(vec_of_erased![Ref::new("ColumnReferenceSegment"),]),
3704 ]),
3705 ]),
3706 any_set_of(vec_of_erased![one_of(vec_of_erased![
3707 Sequence::new(vec_of_erased![
3708 Ref::keyword("NOT").optional(),
3709 Ref::keyword("ENFORCED"),
3710 ]),
3711 Sequence::new(vec_of_erased![
3712 Ref::keyword("NOT").optional(),
3713 Ref::keyword("DEFERRABLE"),
3714 ]),
3715 Sequence::new(vec_of_erased![
3716 Ref::keyword("INITIALLY"),
3717 one_of(vec_of_erased![
3718 Ref::keyword("DEFERRED"),
3719 Ref::keyword("IMMEDIATE"),
3720 ]),
3721 ]),
3722 ]),]),
3723 ])
3724 .to_matchable(),
3725 )
3726 .to_matchable()
3727 .into(),
3728 ),
3729 ]);
3730
3731 snowflake_dialect.replace_grammar(
3732 "ColumnConstraintSegment",
3733 any_set_of(vec_of_erased![
3734 Sequence::new(vec_of_erased![
3735 Ref::keyword("COLLATE"),
3736 Ref::new("CollationReferenceSegment"),
3737 ]),
3738 Sequence::new(vec_of_erased![
3739 Ref::keyword("DEFAULT"),
3740 one_of(vec_of_erased![
3741 Ref::new("QuotedLiteralSegment"),
3742 Sequence::new(vec_of_erased![
3743 Ref::keyword("CURRENT_TIMESTAMP"),
3744 Bracketed::new(vec_of_erased![
3745 Ref::new("NumericLiteralSegment").optional(),
3746 ])
3747 .config(|this| this.optional()),
3748 ]),
3749 Sequence::new(vec_of_erased![
3750 Ref::keyword("SYSDATE"),
3751 Bracketed::new(vec_of_erased![]),
3752 ]),
3753 ]),
3754 ]),
3755 Sequence::new(vec_of_erased![
3756 one_of(vec_of_erased![
3757 Ref::keyword("AUTOINCREMENT"),
3758 Ref::keyword("IDENTITY"),
3759 ]),
3760 one_of(vec_of_erased![
3761 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![Ref::new(
3762 "NumericLiteralSegment"
3763 ),]),]),
3764 Sequence::new(vec_of_erased![
3765 Ref::keyword("START"),
3766 Ref::new("NumericLiteralSegment"),
3767 Ref::keyword("INCREMENT"),
3768 Ref::new("NumericLiteralSegment"),
3769 ]),
3770 ])
3771 .config(|this| this.optional()),
3772 ]),
3773 Sequence::new(vec_of_erased![
3774 Ref::keyword("NOT").optional(),
3775 Ref::keyword("NULL"),
3776 ]),
3777 Sequence::new(vec_of_erased![
3778 Ref::keyword("WITH").optional(),
3779 Ref::keyword("MASKING"),
3780 Ref::keyword("POLICY"),
3781 Ref::new("FunctionNameSegment"),
3782 Sequence::new(vec_of_erased![
3783 Ref::keyword("USING"),
3784 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![one_of(
3785 vec_of_erased![
3786 Ref::new("ColumnReferenceSegment"),
3787 Ref::new("ExpressionSegment"),
3788 ]
3789 ),]),]),
3790 ])
3791 .config(|this| this.optional()),
3792 ]),
3793 Ref::new("TagBracketedEqualsSegment").optional(),
3794 Ref::new("ConstraintPropertiesSegment"),
3795 Sequence::new(vec_of_erased![
3796 Ref::keyword("DEFAULT"),
3797 Ref::new("QuotedLiteralSegment"),
3798 ]),
3799 Sequence::new(vec_of_erased![
3800 Ref::keyword("CHECK"),
3801 Bracketed::new(vec_of_erased![Ref::new("ExpressionSegment"),]),
3802 ]),
3803 Sequence::new(vec_of_erased![
3804 Ref::keyword("DEFAULT"),
3805 one_of(vec_of_erased![
3806 Ref::new("LiteralGrammar"),
3807 Ref::new("FunctionSegment"),
3808 ]),
3809 ]),
3810 Sequence::new(vec_of_erased![
3811 Ref::keyword("REFERENCES"),
3812 Ref::new("ColumnReferenceSegment"),
3813 Ref::new("BracketedColumnReferenceListGrammar").optional(),
3814 ]),
3815 ])
3816 .to_matchable(),
3817 );
3818
3819 snowflake_dialect.add([(
3820 "CopyOptionsSegment".into(),
3821 NodeMatcher::new(
3822 SyntaxKind::CopyOptions,
3823 one_of(vec_of_erased![
3824 any_set_of(vec_of_erased![
3825 Sequence::new(vec_of_erased![
3826 Ref::keyword("ON_ERROR"),
3827 Ref::new("EqualsSegment"),
3828 Ref::new("CopyOptionOnErrorSegment"),
3829 ]),
3830 Sequence::new(vec_of_erased![
3831 Ref::keyword("SIZE_LIMIT"),
3832 Ref::new("EqualsSegment"),
3833 Ref::new("NumericLiteralSegment"),
3834 ]),
3835 Sequence::new(vec_of_erased![
3836 Ref::keyword("PURGE"),
3837 Ref::new("EqualsSegment"),
3838 Ref::new("BooleanLiteralGrammar"),
3839 ]),
3840 Sequence::new(vec_of_erased![
3841 Ref::keyword("RETURN_FAILED_ONLY"),
3842 Ref::new("EqualsSegment"),
3843 Ref::new("BooleanLiteralGrammar"),
3844 ]),
3845 Sequence::new(vec_of_erased![
3846 Ref::keyword("MATCH_BY_COLUMN_NAME"),
3847 Ref::new("EqualsSegment"),
3848 one_of(vec_of_erased![
3849 Ref::keyword("CASE_SENSITIVE"),
3850 Ref::keyword("CASE_INSENSITIVE"),
3851 Ref::keyword("NONE"),
3852 ]),
3853 ]),
3854 Sequence::new(vec_of_erased![
3855 Ref::keyword("ENFORCE_LENGTH"),
3856 Ref::new("EqualsSegment"),
3857 Ref::new("BooleanLiteralGrammar"),
3858 ]),
3859 Sequence::new(vec_of_erased![
3860 Ref::keyword("TRUNCATECOLUMNS"),
3861 Ref::new("EqualsSegment"),
3862 Ref::new("BooleanLiteralGrammar"),
3863 ]),
3864 Sequence::new(vec_of_erased![
3865 Ref::keyword("FORCE"),
3866 Ref::new("EqualsSegment"),
3867 Ref::new("BooleanLiteralGrammar"),
3868 ]),
3869 ]),
3870 any_set_of(vec_of_erased![
3871 Sequence::new(vec_of_erased![
3872 Ref::keyword("OVERWRITE"),
3873 Ref::new("EqualsSegment"),
3874 Ref::new("BooleanLiteralGrammar"),
3875 ]),
3876 Sequence::new(vec_of_erased![
3877 Ref::keyword("SINGLE"),
3878 Ref::new("EqualsSegment"),
3879 Ref::new("BooleanLiteralGrammar"),
3880 ]),
3881 Sequence::new(vec_of_erased![
3882 Ref::keyword("MAX_FILE_SIZE"),
3883 Ref::new("EqualsSegment"),
3884 Ref::new("NumericLiteralSegment"),
3885 ]),
3886 Sequence::new(vec_of_erased![
3887 Ref::keyword("INCLUDE_QUERY_ID"),
3888 Ref::new("EqualsSegment"),
3889 Ref::new("BooleanLiteralGrammar"),
3890 ]),
3891 Sequence::new(vec_of_erased![
3892 Ref::keyword("DETAILED_OUTPUT"),
3893 Ref::new("EqualsSegment"),
3894 Ref::new("BooleanLiteralGrammar"),
3895 ]),
3896 ]),
3897 ])
3898 .to_matchable(),
3899 )
3900 .to_matchable()
3901 .into(),
3902 )]);
3903
3904 snowflake_dialect.replace_grammar(
3905 "CreateSchemaStatementSegment",
3906 Sequence::new(vec_of_erased![
3907 Ref::keyword("CREATE"),
3908 Ref::new("OrReplaceGrammar").optional(),
3909 Ref::new("TemporaryTransientGrammar").optional(),
3910 Ref::keyword("SCHEMA"),
3911 Ref::new("IfNotExistsGrammar").optional(),
3912 Ref::new("SchemaReferenceSegment"),
3913 Sequence::new(vec_of_erased![
3914 Ref::keyword("WITH"),
3915 Ref::keyword("MANAGED"),
3916 Ref::keyword("ACCESS"),
3917 ])
3918 .config(|this| this.optional()),
3919 Ref::new("SchemaObjectParamsSegment").optional(),
3920 Ref::new("TagBracketedEqualsSegment").optional(),
3921 ])
3922 .to_matchable(),
3923 );
3924
3925 snowflake_dialect.add([
3926 (
3927 "AlterRoleStatementSegment".into(),
3928 NodeMatcher::new(
3929 SyntaxKind::AlterRoleStatement,
3930 Sequence::new(vec_of_erased![
3931 Ref::keyword("ALTER"),
3932 Ref::keyword("ROLE"),
3933 Ref::new("IfExistsGrammar").optional(),
3934 Ref::new("RoleReferenceSegment"),
3935 one_of(vec_of_erased![
3936 Sequence::new(vec_of_erased![
3937 Ref::keyword("SET"),
3938 one_of(vec_of_erased![
3939 Ref::new("RoleReferenceSegment"),
3940 Ref::new("TagEqualsSegment"),
3941 Sequence::new(vec_of_erased![
3942 Ref::keyword("COMMENT"),
3943 Ref::new("EqualsSegment"),
3944 Ref::new("QuotedLiteralSegment"),
3945 ]),
3946 ]),
3947 ]),
3948 Sequence::new(vec_of_erased![
3949 Ref::keyword("UNSET"),
3950 one_of(vec_of_erased![
3951 Ref::new("RoleReferenceSegment"),
3952 Sequence::new(vec_of_erased![
3953 Ref::keyword("TAG"),
3954 Delimited::new(
3955 vec_of_erased![Ref::new("TagReferenceSegment"),]
3956 ),
3957 ]),
3958 Sequence::new(vec_of_erased![Ref::keyword("COMMENT"),]),
3959 ]),
3960 ]),
3961 Sequence::new(vec_of_erased![
3962 Ref::keyword("RENAME"),
3963 Ref::keyword("TO"),
3964 one_of(vec_of_erased![Ref::new("RoleReferenceSegment"),]),
3965 ]),
3966 ]),
3967 ])
3968 .to_matchable(),
3969 )
3970 .to_matchable()
3971 .into(),
3972 ),
3973 (
3974 "AlterSchemaStatementSegment".into(),
3975 NodeMatcher::new(
3976 SyntaxKind::AlterSchemaStatement,
3977 Sequence::new(vec_of_erased![
3978 Ref::keyword("ALTER"),
3979 Ref::keyword("SCHEMA"),
3980 Sequence::new(vec_of_erased![Ref::keyword("IF"), Ref::keyword("EXISTS"),])
3981 .config(|this| this.optional()),
3982 Ref::new("SchemaReferenceSegment"),
3983 one_of(vec_of_erased![
3984 Sequence::new(vec_of_erased![
3985 Ref::keyword("RENAME"),
3986 Ref::keyword("TO"),
3987 Ref::new("SchemaReferenceSegment"),
3988 ]),
3989 Sequence::new(vec_of_erased![
3990 Ref::keyword("SWAP"),
3991 Ref::keyword("WITH"),
3992 Ref::new("SchemaReferenceSegment"),
3993 ]),
3994 Sequence::new(vec_of_erased![
3995 Ref::keyword("SET"),
3996 one_of(vec_of_erased![
3997 Ref::new("SchemaObjectParamsSegment"),
3998 Ref::new("TagEqualsSegment"),
3999 ]),
4000 ]),
4001 Sequence::new(vec_of_erased![
4002 Ref::keyword("UNSET"),
4003 one_of(vec_of_erased![
4004 Delimited::new(vec_of_erased![
4005 Ref::keyword("DATA_RETENTION_TIME_IN_DAYS"),
4006 Ref::keyword("MAX_DATA_EXTENSION_TIME_IN_DAYS"),
4007 Ref::keyword("DEFAULT_DDL_COLLATION"),
4008 Ref::keyword("COMMENT"),
4009 ]),
4010 Sequence::new(vec_of_erased![
4011 Ref::keyword("TAG"),
4012 Delimited::new(
4013 vec_of_erased![Ref::new("TagReferenceSegment"),]
4014 ),
4015 ]),
4016 ]),
4017 ]),
4018 Sequence::new(vec_of_erased![
4019 one_of(vec_of_erased![
4020 Ref::keyword("ENABLE"),
4021 Ref::keyword("DISABLE"),
4022 ]),
4023 Sequence::new(vec_of_erased![
4024 Ref::keyword("MANAGED"),
4025 Ref::keyword("ACCESS"),
4026 ]),
4027 ]),
4028 ]),
4029 ])
4030 .to_matchable(),
4031 )
4032 .to_matchable()
4033 .into(),
4034 ),
4035 (
4036 "SchemaObjectParamsSegment".into(),
4037 NodeMatcher::new(
4038 SyntaxKind::SchemaObjectProperties,
4039 any_set_of(vec_of_erased![
4040 Sequence::new(vec_of_erased![
4041 Ref::keyword("DATA_RETENTION_TIME_IN_DAYS"),
4042 Ref::new("EqualsSegment"),
4043 Ref::new("NumericLiteralSegment"),
4044 ]),
4045 Sequence::new(vec_of_erased![
4046 Ref::keyword("MAX_DATA_EXTENSION_TIME_IN_DAYS"),
4047 Ref::new("EqualsSegment"),
4048 Ref::new("NumericLiteralSegment"),
4049 ]),
4050 Sequence::new(vec_of_erased![
4051 Ref::keyword("DEFAULT_DDL_COLLATION"),
4052 Ref::new("EqualsSegment"),
4053 Ref::new("QuotedLiteralSegment"),
4054 ]),
4055 Ref::new("CommentEqualsClauseSegment"),
4056 ])
4057 .to_matchable(),
4058 )
4059 .to_matchable()
4060 .into(),
4061 ),
4062 ]);
4063
4064 snowflake_dialect.replace_grammar(
4065 "CreateTableStatementSegment",
4066 Sequence::new(vec_of_erased![
4067 Ref::keyword("CREATE"),
4068 Ref::new("OrReplaceGrammar").optional(),
4069 Ref::new("TemporaryTransientGrammar").optional(),
4070 Ref::keyword("TABLE"),
4071 Ref::new("IfNotExistsGrammar").optional(),
4072 Ref::new("TableReferenceSegment"),
4073 any_set_of(vec_of_erased![
4074 Sequence::new(vec_of_erased![Bracketed::new(vec_of_erased![
4075 Delimited::new(vec_of_erased![Sequence::new(vec_of_erased![
4076 one_of(vec_of_erased![
4077 Ref::new("TableConstraintSegment"),
4078 Ref::new("ColumnDefinitionSegment"),
4079 Ref::new("SingleIdentifierGrammar"),
4080 ]),
4081 Ref::new("CommentClauseSegment").optional(),
4082 ]),]),
4083 ]),])
4084 .config(|this| this.optional()),
4085 Sequence::new(vec_of_erased![
4086 Ref::keyword("CLUSTER"),
4087 Ref::keyword("BY"),
4088 one_of(vec_of_erased![
4089 Ref::new("FunctionSegment"),
4090 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![Ref::new(
4091 "ExpressionSegment"
4092 ),]),]),
4093 ]),
4094 ])
4095 .config(|this| this.optional()),
4096 Sequence::new(vec_of_erased![
4097 Ref::keyword("STAGE_FILE_FORMAT"),
4098 Ref::new("EqualsSegment"),
4099 Ref::new("FileFormatSegment"),
4100 ])
4101 .config(|this| this.optional()),
4102 Sequence::new(vec_of_erased![
4103 Ref::keyword("STAGE_COPY_OPTIONS"),
4104 Ref::new("EqualsSegment"),
4105 Bracketed::new(vec_of_erased![Ref::new("CopyOptionsSegment"),]),
4106 ])
4107 .config(|this| this.optional()),
4108 Sequence::new(vec_of_erased![
4109 Ref::keyword("DATA_RETENTION_TIME_IN_DAYS"),
4110 Ref::new("EqualsSegment"),
4111 Ref::new("NumericLiteralSegment"),
4112 ])
4113 .config(|this| this.optional()),
4114 Sequence::new(vec_of_erased![
4115 Ref::keyword("MAX_DATA_EXTENSION_TIME_IN_DAYS"),
4116 Ref::new("EqualsSegment"),
4117 Ref::new("NumericLiteralSegment"),
4118 ])
4119 .config(|this| this.optional()),
4120 Sequence::new(vec_of_erased![
4121 Ref::keyword("CHANGE_TRACKING"),
4122 Ref::new("EqualsSegment"),
4123 Ref::new("BooleanLiteralGrammar"),
4124 ])
4125 .config(|this| this.optional()),
4126 Sequence::new(vec_of_erased![
4127 Ref::keyword("DEFAULT_DDL_COLLATION"),
4128 Ref::new("EqualsSegment"),
4129 Ref::new("QuotedLiteralGrammar"),
4130 ])
4131 .config(|this| this.optional()),
4132 Sequence::new(vec_of_erased![Ref::keyword("COPY"), Ref::keyword("GRANTS"),])
4133 .config(|this| this.optional()),
4134 Sequence::new(vec_of_erased![
4135 Ref::keyword("WITH").optional(),
4136 Ref::keyword("ROW"),
4137 Ref::keyword("ACCESS"),
4138 Ref::keyword("POLICY"),
4139 Ref::new("NakedIdentifierSegment"),
4140 Ref::keyword("ON"),
4141 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![Ref::new(
4142 "ColumnReferenceSegment"
4143 ),]),]),
4144 ])
4145 .config(|this| this.optional()),
4146 Ref::new("TagBracketedEqualsSegment").optional(),
4147 Ref::new("CommentEqualsClauseSegment").optional(),
4148 one_of(vec_of_erased![
4149 Sequence::new(vec_of_erased![
4150 Ref::keyword("AS"),
4151 optionally_bracketed(vec_of_erased![Ref::new("SelectableGrammar"),]),
4152 ]),
4153 Sequence::new(vec_of_erased![
4154 Ref::keyword("LIKE"),
4155 Ref::new("TableReferenceSegment"),
4156 ]),
4157 Sequence::new(vec_of_erased![
4158 Ref::keyword("CLONE"),
4159 Ref::new("TableReferenceSegment"),
4160 ]),
4161 Sequence::new(vec_of_erased![
4162 Ref::keyword("USING"),
4163 Ref::keyword("TEMPLATE"),
4164 Ref::new("SelectableGrammar"),
4165 ]),
4166 ])
4167 .config(|this| this.optional()),
4168 ]),
4169 ])
4170 .to_matchable(),
4171 );
4172
4173 snowflake_dialect.add([
4174 (
4175 "CreateTaskSegment".into(),
4176 NodeMatcher::new(
4177 SyntaxKind::CreateTaskStatement,
4178 Sequence::new(vec_of_erased![
4179 Ref::keyword("CREATE"),
4180 Sequence::new(vec_of_erased![Ref::keyword("OR"), Ref::keyword("REPLACE"),])
4181 .config(|this| this.optional()),
4182 Ref::keyword("TASK"),
4183 Sequence::new(vec_of_erased![
4184 Ref::keyword("IF"),
4185 Ref::keyword("NOT"),
4186 Ref::keyword("EXISTS"),
4187 ])
4188 .config(|this| this.optional()),
4189 Ref::new("ObjectReferenceSegment"),
4190 MetaSegment::indent(),
4191 AnyNumberOf::new(vec_of_erased![
4192 one_of(vec_of_erased![
4193 Sequence::new(vec_of_erased![
4194 Ref::keyword("WAREHOUSE"),
4195 Ref::new("EqualsSegment"),
4196 Ref::new("ObjectReferenceSegment"),
4197 ]),
4198 Sequence::new(vec_of_erased![
4199 Ref::keyword("USER_TASK_MANAGED_INITIAL_WAREHOUSE_SIZE"),
4200 Ref::new("EqualsSegment"),
4201 Ref::new("WarehouseSize"),
4202 ]),
4203 ]),
4204 Sequence::new(vec_of_erased![
4205 Ref::keyword("SCHEDULE"),
4206 Ref::new("EqualsSegment"),
4207 Ref::new("QuotedLiteralSegment"),
4208 ]),
4209 Sequence::new(vec_of_erased![
4210 Ref::keyword("ALLOW_OVERLAPPING_EXECUTION"),
4211 Ref::new("EqualsSegment"),
4212 Ref::new("BooleanLiteralGrammar"),
4213 ]),
4214 Sequence::new(vec_of_erased![
4215 Ref::keyword("USER_TASK_TIMEOUT_MS"),
4216 Ref::new("EqualsSegment"),
4217 Ref::new("NumericLiteralSegment"),
4218 ]),
4219 Delimited::new(vec_of_erased![Sequence::new(vec_of_erased![
4220 Ref::new("ParameterNameSegment"),
4221 Ref::new("EqualsSegment"),
4222 one_of(vec_of_erased![
4223 Ref::new("BooleanLiteralGrammar"),
4224 Ref::new("QuotedLiteralSegment"),
4225 Ref::new("NumericLiteralSegment"),
4226 ]),
4227 ]),]),
4228 Sequence::new(
4229 vec_of_erased![Ref::keyword("COPY"), Ref::keyword("GRANTS"),]
4230 ),
4231 Ref::new("CommentEqualsClauseSegment"),
4232 ]),
4233 Sequence::new(vec_of_erased![
4234 Ref::keyword("AFTER"),
4235 Ref::new("ObjectReferenceSegment"),
4236 ])
4237 .config(|this| this.optional()),
4238 MetaSegment::dedent(),
4239 Sequence::new(vec_of_erased![
4240 Ref::keyword("WHEN"),
4241 MetaSegment::indent(),
4242 Ref::new("TaskExpressionSegment"),
4243 MetaSegment::dedent(),
4244 ])
4245 .config(|this| this.optional()),
4246 Sequence::new(vec_of_erased![
4247 Ref::keyword("AS"),
4248 MetaSegment::indent(),
4249 Ref::new("StatementSegment"),
4250 MetaSegment::dedent(),
4251 ]),
4252 ])
4253 .to_matchable(),
4254 )
4255 .to_matchable()
4256 .into(),
4257 ),
4258 (
4259 "TaskExpressionSegment".into(),
4260 NodeMatcher::new(
4261 SyntaxKind::SnowflakeTaskExpressionSegment,
4262 Sequence::new(vec_of_erased![
4263 Delimited::new(vec_of_erased![one_of(vec_of_erased![
4264 Ref::new("ExpressionSegment"),
4265 Sequence::new(vec_of_erased![
4266 Ref::new("SystemFunctionName"),
4267 Bracketed::new(vec_of_erased![Ref::new("QuotedLiteralSegment"),]),
4268 ]),
4269 ]),],)
4270 .config(|this| this.delimiter(one_of(vec_of_erased![Ref::new(
4271 "BooleanBinaryOperatorGrammar"
4272 ),]))),
4273 ])
4274 .to_matchable(),
4275 )
4276 .to_matchable()
4277 .into(),
4278 ),
4279 (
4280 "CreateStatementSegment".into(),
4281 NodeMatcher::new(
4282 SyntaxKind::CreateStatement,
4283 Sequence::new(vec_of_erased![
4284 Ref::keyword("CREATE"),
4285 Ref::new("OrReplaceGrammar").optional(),
4286 one_of(vec_of_erased![
4287 Sequence::new(vec_of_erased![
4288 Ref::keyword("NETWORK"),
4289 Ref::keyword("POLICY"),
4290 ]),
4291 Sequence::new(vec_of_erased![
4292 Ref::keyword("RESOURCE"),
4293 Ref::keyword("MONITOR"),
4294 ]),
4295 Ref::keyword("SHARE"),
4296 Ref::keyword("ROLE"),
4297 Ref::keyword("USER"),
4298 Ref::keyword("TAG"),
4299 Ref::keyword("WAREHOUSE"),
4300 Sequence::new(vec_of_erased![
4301 Ref::keyword("NOTIFICATION"),
4302 Ref::keyword("INTEGRATION"),
4303 ]),
4304 Sequence::new(vec_of_erased![
4305 Ref::keyword("SECURITY"),
4306 Ref::keyword("INTEGRATION"),
4307 ]),
4308 Sequence::new(vec_of_erased![
4309 Ref::keyword("STORAGE"),
4310 Ref::keyword("INTEGRATION"),
4311 ]),
4312 Sequence::new(vec_of_erased![
4313 Ref::keyword("MATERIALIZED"),
4314 Ref::keyword("VIEW"),
4315 ]),
4316 Sequence::new(vec_of_erased![
4317 Ref::keyword("MASKING"),
4318 Ref::keyword("POLICY"),
4319 ]),
4320 Ref::keyword("PIPE"),
4321 Sequence::new(vec_of_erased![
4322 Ref::keyword("EXTERNAL"),
4323 Ref::keyword("FUNCTION"),
4324 ]),
4325 Ref::keyword("DATABASE"),
4326 Ref::keyword("SEQUENCE"),
4327 ]),
4328 Ref::new("IfNotExistsGrammar").optional(),
4329 Ref::new("ObjectReferenceSegment"),
4330 any_set_of(vec_of_erased![
4331 Sequence::new(vec_of_erased![
4332 Ref::keyword("TYPE"),
4333 Ref::new("EqualsSegment"),
4334 Ref::keyword("QUEUE"),
4335 ]),
4336 Sequence::new(vec_of_erased![
4337 Ref::keyword("ENABLED"),
4338 Ref::new("EqualsSegment"),
4339 Ref::new("BooleanLiteralGrammar"),
4340 ]),
4341 Sequence::new(vec_of_erased![
4342 Ref::keyword("NOTIFICATION_PROVIDER"),
4343 Ref::new("EqualsSegment"),
4344 one_of(vec_of_erased![
4345 Ref::keyword("AWS_SNS"),
4346 Ref::keyword("AZURE_EVENT_GRID"),
4347 Ref::keyword("GCP_PUBSUB"),
4348 Ref::keyword("AZURE_STORAGE_QUEUE"),
4349 Ref::new("QuotedLiteralSegment"),
4350 ]),
4351 ]),
4352 Sequence::new(vec_of_erased![
4353 Ref::keyword("AWS_SNS_TOPIC_ARN"),
4354 Ref::new("EqualsSegment"),
4355 Ref::new("QuotedLiteralSegment"),
4356 ]),
4357 Sequence::new(vec_of_erased![
4358 Ref::keyword("AWS_SNS_ROLE_ARN"),
4359 Ref::new("EqualsSegment"),
4360 Ref::new("QuotedLiteralSegment"),
4361 ]),
4362 Sequence::new(vec_of_erased![
4363 Ref::keyword("AZURE_TENANT_ID"),
4364 Ref::new("EqualsSegment"),
4365 Ref::new("QuotedLiteralSegment"),
4366 ]),
4367 one_of(vec_of_erased![
4368 Sequence::new(vec_of_erased![
4369 Ref::keyword("AZURE_STORAGE_QUEUE_PRIMARY_URI"),
4370 Ref::new("EqualsSegment"),
4371 Ref::new("QuotedLiteralSegment"),
4372 ]),
4373 Sequence::new(vec_of_erased![
4374 Ref::keyword("AZURE_EVENT_GRID_TOPIC_ENDPOINT"),
4375 Ref::new("EqualsSegment"),
4376 Ref::new("QuotedLiteralSegment"),
4377 ]),
4378 ]),
4379 one_of(vec_of_erased![
4380 Sequence::new(vec_of_erased![
4381 Ref::keyword("GCP_PUBSUB_SUBSCRIPTION_NAME"),
4382 Ref::new("EqualsSegment"),
4383 Ref::new("QuotedLiteralSegment"),
4384 ]),
4385 Sequence::new(vec_of_erased![
4386 Ref::keyword("GCP_PUBSUB_TOPIC_NAME"),
4387 Ref::new("EqualsSegment"),
4388 Ref::new("QuotedLiteralSegment"),
4389 ]),
4390 ]),
4391 Sequence::new(vec_of_erased![
4392 Ref::keyword("DIRECTION"),
4393 Ref::new("EqualsSegment"),
4394 Ref::keyword("OUTBOUND"),
4395 ])
4396 .config(|this| this.optional()),
4397 Sequence::new(vec_of_erased![
4398 Ref::keyword("COMMENT"),
4399 Ref::new("EqualsSegment"),
4400 Ref::new("QuotedLiteralSegment"),
4401 ]),
4402 Sequence::new(vec_of_erased![
4403 Ref::keyword("ALLOWED_VALUES"),
4404 Delimited::new(vec_of_erased![Ref::new("QuotedLiteralSegment"),]),
4405 ]),
4406 Sequence::new(vec_of_erased![
4407 Ref::keyword("ALLOWED_IP_LIST"),
4408 Ref::new("EqualsSegment"),
4409 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
4410 Ref::new("QuotedLiteralSegment"),
4411 ]),]),
4412 ]),
4413 Sequence::new(vec_of_erased![
4414 Ref::keyword("BLOCKED_IP_LIST"),
4415 Ref::new("EqualsSegment"),
4416 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
4417 Ref::new("QuotedLiteralSegment"),
4418 ]),]),
4419 ]),
4420 ]),
4421 any_set_of(vec_of_erased![
4422 Sequence::new(vec_of_erased![
4423 Ref::keyword("TYPE"),
4424 Ref::new("EqualsSegment"),
4425 Ref::keyword("EXTERNAL_STAGE"),
4426 ]),
4427 Sequence::new(vec_of_erased![
4428 Ref::keyword("ENABLED"),
4429 Ref::new("EqualsSegment"),
4430 Ref::new("BooleanLiteralGrammar"),
4431 ]),
4432 Sequence::new(vec_of_erased![
4433 Ref::keyword("STORAGE_PROVIDER"),
4434 Ref::new("EqualsSegment"),
4435 one_of(vec_of_erased![
4436 Ref::keyword("S3"),
4437 Ref::keyword("AZURE"),
4438 Ref::keyword("GCS"),
4439 Ref::new("QuotedLiteralSegment"),
4440 ]),
4441 ]),
4442 Sequence::new(vec_of_erased![
4443 Ref::keyword("AZURE_TENANT_ID"),
4444 Ref::new("EqualsSegment"),
4445 Ref::new("QuotedLiteralSegment"),
4446 ]),
4447 Sequence::new(vec_of_erased![
4448 Ref::keyword("STORAGE_AWS_ROLE_ARN"),
4449 Ref::new("EqualsSegment"),
4450 Ref::new("QuotedLiteralSegment"),
4451 ]),
4452 Sequence::new(vec_of_erased![
4453 Ref::keyword("STORAGE_AWS_OBJECT_ACL"),
4454 Ref::new("EqualsSegment"),
4455 StringParser::new("'bucket-owner-full-control'", SyntaxKind::Literal)
4456 ]),
4457 Sequence::new(vec_of_erased![
4458 Ref::keyword("STORAGE_ALLOWED_LOCATIONS"),
4459 Ref::new("EqualsSegment"),
4460 one_of(vec_of_erased![
4461 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
4462 one_of(vec_of_erased![
4463 Ref::new("S3Path"),
4464 Ref::new("GCSPath"),
4465 Ref::new("AzureBlobStoragePath"),
4466 ]),
4467 ]),]),
4468 Bracketed::new(vec_of_erased![Ref::new("QuotedStarSegment"),]),
4469 ]),
4470 ]),
4471 Sequence::new(vec_of_erased![
4472 Ref::keyword("STORAGE_BLOCKED_LOCATIONS"),
4473 Ref::new("EqualsSegment"),
4474 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![one_of(
4475 vec_of_erased![
4476 Ref::new("S3Path"),
4477 Ref::new("GCSPath"),
4478 Ref::new("AzureBlobStoragePath"),
4479 ]
4480 ),]),]),
4481 ]),
4482 Sequence::new(vec_of_erased![
4483 Ref::keyword("COMMENT"),
4484 Ref::new("EqualsSegment"),
4485 Ref::new("QuotedLiteralSegment"),
4486 ]),
4487 ]),
4488 Sequence::new(vec_of_erased![
4489 Sequence::new(vec_of_erased![
4490 Ref::keyword("AUTO_INGEST"),
4491 Ref::new("EqualsSegment"),
4492 Ref::new("BooleanLiteralGrammar"),
4493 ])
4494 .config(|this| this.optional()),
4495 Sequence::new(vec_of_erased![
4496 Ref::keyword("ERROR_INTEGRATION"),
4497 Ref::new("EqualsSegment"),
4498 Ref::new("ObjectReferenceSegment"),
4499 ])
4500 .config(|this| this.optional()),
4501 Sequence::new(vec_of_erased![
4502 Ref::keyword("AWS_SNS_TOPIC"),
4503 Ref::new("EqualsSegment"),
4504 Ref::new("QuotedLiteralSegment"),
4505 ])
4506 .config(|this| this.optional()),
4507 Sequence::new(vec_of_erased![
4508 Ref::keyword("INTEGRATION"),
4509 Ref::new("EqualsSegment"),
4510 one_of(vec_of_erased![
4511 Ref::new("QuotedLiteralSegment"),
4512 Ref::new("ObjectReferenceSegment"),
4513 ]),
4514 ])
4515 .config(|this| this.optional()),
4516 ])
4517 .config(|this| this.optional()),
4518 Sequence::new(vec_of_erased![
4519 Sequence::new(vec_of_erased![Ref::keyword("WITH"),])
4520 .config(|this| this.optional()),
4521 AnyNumberOf::new(vec_of_erased![
4522 Ref::new("WarehouseObjectPropertiesSegment"),
4523 Ref::new("CommentEqualsClauseSegment"),
4524 Ref::new("WarehouseObjectParamsSegment"),
4525 ]),
4526 Ref::new("TagBracketedEqualsSegment").optional(),
4527 ])
4528 .config(|this| this.optional()),
4529 Ref::new("CommentEqualsClauseSegment").optional(),
4530 Ref::keyword("AS").optional(),
4531 one_of(vec_of_erased![
4532 Ref::new("SelectStatementSegment"),
4533 Sequence::new(vec_of_erased![
4534 Bracketed::new(vec_of_erased![Ref::new("FunctionContentsGrammar"),])
4535 .config(|this| this.optional()),
4536 Ref::keyword("RETURNS"),
4537 Ref::new("DatatypeSegment"),
4538 Ref::new("FunctionAssignerSegment"),
4539 Ref::new("ExpressionSegment"),
4540 Sequence::new(vec_of_erased![
4541 Ref::keyword("COMMENT"),
4542 Ref::new("EqualsSegment"),
4543 Ref::new("QuotedLiteralSegment"),
4544 ])
4545 .config(|this| this.optional()),
4546 ])
4547 .config(|this| this.optional()),
4548 Ref::new("CopyIntoTableStatementSegment"),
4549 ])
4550 .config(|this| this.optional()),
4551 ])
4552 .to_matchable(),
4553 )
4554 .to_matchable()
4555 .into(),
4556 ),
4557 (
4558 "CreateUserSegment".into(),
4559 NodeMatcher::new(
4560 SyntaxKind::CreateUserStatement,
4561 Sequence::new(vec_of_erased![
4562 Ref::keyword("CREATE"),
4563 Sequence::new(vec_of_erased![Ref::keyword("OR"), Ref::keyword("REPLACE"),])
4564 .config(|this| this.optional()),
4565 Ref::keyword("USER"),
4566 Sequence::new(vec_of_erased![
4567 Ref::keyword("IF"),
4568 Ref::keyword("NOT"),
4569 Ref::keyword("EXISTS"),
4570 ])
4571 .config(|this| this.optional()),
4572 Ref::new("ObjectReferenceSegment"),
4573 MetaSegment::indent(),
4574 AnyNumberOf::new(vec_of_erased![
4575 Sequence::new(vec_of_erased![
4576 Ref::keyword("PASSWORD"),
4577 Ref::new("EqualsSegment"),
4578 Ref::new("QuotedLiteralSegment"),
4579 ]),
4580 Sequence::new(vec_of_erased![
4581 Ref::keyword("LOGIN_NAME"),
4582 Ref::new("EqualsSegment"),
4583 one_of(vec_of_erased![
4584 Ref::new("ObjectReferenceSegment"),
4585 Ref::new("QuotedLiteralSegment"),
4586 ]),
4587 ]),
4588 Sequence::new(vec_of_erased![
4589 Ref::keyword("DISPLAY_NAME"),
4590 Ref::new("EqualsSegment"),
4591 one_of(vec_of_erased![
4592 Ref::new("ObjectReferenceSegment"),
4593 Ref::new("QuotedLiteralSegment"),
4594 ]),
4595 ]),
4596 Sequence::new(vec_of_erased![
4597 Ref::keyword("FIRST_NAME"),
4598 Ref::new("EqualsSegment"),
4599 one_of(vec_of_erased![
4600 Ref::new("ObjectReferenceSegment"),
4601 Ref::new("QuotedLiteralSegment"),
4602 ]),
4603 ]),
4604 Sequence::new(vec_of_erased![
4605 Ref::keyword("MIDDLE_NAME"),
4606 Ref::new("EqualsSegment"),
4607 one_of(vec_of_erased![
4608 Ref::new("ObjectReferenceSegment"),
4609 Ref::new("QuotedLiteralSegment"),
4610 ]),
4611 ]),
4612 Sequence::new(vec_of_erased![
4613 Ref::keyword("LAST_NAME"),
4614 Ref::new("EqualsSegment"),
4615 one_of(vec_of_erased![
4616 Ref::new("ObjectReferenceSegment"),
4617 Ref::new("QuotedLiteralSegment"),
4618 ]),
4619 ]),
4620 Sequence::new(vec_of_erased![
4621 Ref::keyword("EMAIL"),
4622 Ref::new("EqualsSegment"),
4623 Ref::new("QuotedLiteralSegment"),
4624 ]),
4625 Sequence::new(vec_of_erased![
4626 Ref::keyword("MUST_CHANGE_PASSWORD"),
4627 Ref::new("EqualsSegment"),
4628 Ref::new("BooleanLiteralGrammar"),
4629 ]),
4630 Sequence::new(vec_of_erased![
4631 Ref::keyword("DISABLED"),
4632 Ref::new("EqualsSegment"),
4633 Ref::new("BooleanLiteralGrammar"),
4634 ]),
4635 Sequence::new(vec_of_erased![
4636 Ref::keyword("DAYS_TO_EXPIRY"),
4637 Ref::new("EqualsSegment"),
4638 Ref::new("NumericLiteralSegment"),
4639 ]),
4640 Sequence::new(vec_of_erased![
4641 Ref::keyword("MINS_TO_UNLOCK"),
4642 Ref::new("EqualsSegment"),
4643 Ref::new("NumericLiteralSegment"),
4644 ]),
4645 Sequence::new(vec_of_erased![
4646 Ref::keyword("DEFAULT_WAREHOUSE"),
4647 Ref::new("EqualsSegment"),
4648 one_of(vec_of_erased![
4649 Ref::new("ObjectReferenceSegment"),
4650 Ref::new("QuotedLiteralSegment"),
4651 ]),
4652 ]),
4653 Sequence::new(vec_of_erased![
4654 Ref::keyword("DEFAULT_NAMESPACE"),
4655 Ref::new("EqualsSegment"),
4656 one_of(vec_of_erased![
4657 Ref::new("ObjectReferenceSegment"),
4658 Ref::new("QuotedLiteralSegment"),
4659 ]),
4660 ]),
4661 Sequence::new(vec_of_erased![
4662 Ref::keyword("DEFAULT_ROLE"),
4663 Ref::new("EqualsSegment"),
4664 one_of(vec_of_erased![
4665 Ref::new("ObjectReferenceSegment"),
4666 Ref::new("QuotedLiteralSegment"),
4667 ]),
4668 ]),
4669 Sequence::new(vec_of_erased![
4670 Ref::keyword("DEFAULT_SECONDARY_ROLES"),
4671 Ref::new("EqualsSegment"),
4672 Bracketed::new(vec_of_erased![Ref::new("QuotedLiteralSegment"),]),
4673 ]),
4674 Sequence::new(vec_of_erased![
4675 Ref::keyword("MINS_TO_BYPASS_MFA"),
4676 Ref::new("EqualsSegment"),
4677 Ref::new("NumericLiteralSegment"),
4678 ]),
4679 Sequence::new(vec_of_erased![
4680 Ref::keyword("RSA_PUBLIC_KEY"),
4681 Ref::new("EqualsSegment"),
4682 Ref::new("ObjectReferenceSegment"),
4683 ]),
4684 Sequence::new(vec_of_erased![
4685 Ref::keyword("RSA_PUBLIC_KEY_2"),
4686 Ref::new("EqualsSegment"),
4687 Ref::new("ObjectReferenceSegment"),
4688 ]),
4689 Ref::new("CommentEqualsClauseSegment"),
4690 ]),
4691 MetaSegment::dedent(),
4692 ])
4693 .to_matchable(),
4694 )
4695 .to_matchable()
4696 .into(),
4697 ),
4698 ]);
4699
4700 snowflake_dialect.replace_grammar(
4701 "CreateViewStatementSegment",
4702 Sequence::new(vec_of_erased![
4703 Ref::keyword("CREATE"),
4704 Ref::new("OrReplaceGrammar").optional(),
4705 any_set_of(vec_of_erased![
4706 Ref::keyword("SECURE"),
4707 Ref::keyword("RECURSIVE"),
4708 ]),
4709 Ref::new("TemporaryGrammar").optional(),
4710 Ref::keyword("VIEW"),
4711 Ref::new("IfNotExistsGrammar").optional(),
4712 Ref::new("TableReferenceSegment"),
4713 any_set_of(vec_of_erased![
4714 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
4715 Sequence::new(vec_of_erased![
4716 Ref::new("ColumnReferenceSegment"),
4717 Ref::new("CommentClauseSegment").optional(),
4718 ]),
4719 ]),]),
4720 Sequence::new(vec_of_erased![
4721 Ref::keyword("WITH").optional(),
4722 Ref::keyword("ROW"),
4723 Ref::keyword("ACCESS"),
4724 Ref::keyword("POLICY"),
4725 Ref::new("NakedIdentifierSegment"),
4726 Ref::keyword("ON"),
4727 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![Ref::new(
4728 "ColumnReferenceSegment"
4729 ),]),]),
4730 ]),
4731 Ref::new("TagBracketedEqualsSegment"),
4732 Sequence::new(vec_of_erased![Ref::keyword("COPY"), Ref::keyword("GRANTS"),]),
4733 Ref::new("CommentEqualsClauseSegment"),
4734 ]),
4735 Ref::keyword("AS"),
4736 optionally_bracketed(vec_of_erased![Ref::new("SelectableGrammar"),]),
4737 ])
4738 .to_matchable(),
4739 );
4740
4741 snowflake_dialect.add([
4742 (
4743 "AlterViewStatementSegment".into(),
4744 NodeMatcher::new(
4745 SyntaxKind::AlterViewStatement,
4746 Sequence::new(vec_of_erased![
4747 Ref::keyword("ALTER"),
4748 Ref::keyword("VIEW"),
4749 Ref::new("IfExistsGrammar").optional(),
4750 Ref::new("TableReferenceSegment"),
4751 one_of(vec_of_erased![
4752 Sequence::new(vec_of_erased![
4753 Ref::keyword("RENAME"),
4754 Ref::keyword("TO"),
4755 Ref::new("TableReferenceSegment"),
4756 ]),
4757 Sequence::new(vec_of_erased![
4758 Ref::keyword("COMMENT"),
4759 Ref::new("EqualsSegment"),
4760 Ref::new("QuotedLiteralSegment"),
4761 ]),
4762 Sequence::new(vec_of_erased![
4763 Ref::keyword("UNSET"),
4764 Ref::keyword("COMMENT"),
4765 ]),
4766 Sequence::new(vec_of_erased![
4767 one_of(vec_of_erased![Ref::keyword("SET"), Ref::keyword("UNSET"),]),
4768 Ref::keyword("SECURE"),
4769 ]),
4770 Sequence::new(vec_of_erased![
4771 Ref::keyword("SET"),
4772 Ref::new("TagEqualsSegment"),
4773 ]),
4774 Sequence::new(vec_of_erased![
4775 Ref::keyword("UNSET"),
4776 Ref::keyword("TAG"),
4777 Delimited::new(vec_of_erased![Ref::new("TagReferenceSegment"),]),
4778 ]),
4779 Delimited::new(vec_of_erased![
4780 Sequence::new(vec_of_erased![
4781 Ref::keyword("ADD"),
4782 Ref::keyword("ROW"),
4783 Ref::keyword("ACCESS"),
4784 Ref::keyword("POLICY"),
4785 Ref::new("FunctionNameSegment"),
4786 Ref::keyword("ON"),
4787 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
4788 Ref::new("ColumnReferenceSegment"),
4789 ]),]),
4790 ]),
4791 Sequence::new(vec_of_erased![
4792 Ref::keyword("DROP"),
4793 Ref::keyword("ROW"),
4794 Ref::keyword("ACCESS"),
4795 Ref::keyword("POLICY"),
4796 Ref::new("FunctionNameSegment"),
4797 ]),
4798 ]),
4799 Sequence::new(vec_of_erased![
4800 one_of(vec_of_erased![
4801 Ref::keyword("ALTER"),
4802 Ref::keyword("MODIFY"),
4803 ]),
4804 one_of(vec_of_erased![Delimited::new(vec_of_erased![
4805 Sequence::new(vec_of_erased![
4806 Ref::keyword("COLUMN").optional(),
4807 Ref::new("ColumnReferenceSegment"),
4808 one_of(vec_of_erased![
4809 Sequence::new(vec_of_erased![
4810 Ref::keyword("SET"),
4811 Ref::keyword("MASKING"),
4812 Ref::keyword("POLICY"),
4813 Ref::new("FunctionNameSegment"),
4814 Sequence::new(vec_of_erased![
4815 Ref::keyword("USING"),
4816 Bracketed::new(vec_of_erased![Delimited::new(
4817 vec_of_erased![Ref::new(
4818 "ColumnReferenceSegment"
4819 ),]
4820 ),])
4821 .config(|this| this.optional()),
4822 ])
4823 .config(|this| this.optional()),
4824 ]),
4825 Sequence::new(vec_of_erased![
4826 Ref::keyword("UNSET"),
4827 Ref::keyword("MASKING"),
4828 Ref::keyword("POLICY"),
4829 ]),
4830 Sequence::new(vec_of_erased![
4831 Ref::keyword("SET"),
4832 Ref::new("TagEqualsSegment"),
4833 ]),
4834 ]),
4835 ]),
4836 Sequence::new(vec_of_erased![
4837 Ref::keyword("COLUMN"),
4838 Ref::new("ColumnReferenceSegment"),
4839 Ref::keyword("UNSET"),
4840 Ref::keyword("TAG"),
4841 Delimited::new(
4842 vec_of_erased![Ref::new("TagReferenceSegment"),]
4843 ),
4844 ]),
4845 ]),]),
4846 ]),
4847 ]),
4848 ])
4849 .to_matchable(),
4850 )
4851 .to_matchable()
4852 .into(),
4853 ),
4854 (
4855 "AlterMaterializedViewStatementSegment".into(),
4856 NodeMatcher::new(
4857 SyntaxKind::AlterMaterializedViewStatement,
4858 Sequence::new(vec_of_erased![
4859 Ref::keyword("ALTER"),
4860 Ref::keyword("MATERIALIZED"),
4861 Ref::keyword("VIEW"),
4862 Ref::new("TableReferenceSegment"),
4863 one_of(vec_of_erased![
4864 Sequence::new(vec_of_erased![
4865 Ref::keyword("RENAME"),
4866 Ref::keyword("TO"),
4867 Ref::new("TableReferenceSegment"),
4868 ]),
4869 Sequence::new(vec_of_erased![
4870 Ref::keyword("CLUSTER"),
4871 Ref::keyword("BY"),
4872 Delimited::new(vec_of_erased![Ref::new("ExpressionSegment"),]),
4873 ]),
4874 Sequence::new(vec_of_erased![
4875 Ref::keyword("DROP"),
4876 Ref::keyword("CLUSTERING"),
4877 Ref::keyword("KEY"),
4878 ]),
4879 Sequence::new(vec_of_erased![
4880 Ref::keyword("SUSPEND"),
4881 Ref::keyword("RECLUSTER"),
4882 ]),
4883 Sequence::new(vec_of_erased![
4884 Ref::keyword("RESUME"),
4885 Ref::keyword("RECLUSTER"),
4886 ]),
4887 Ref::keyword("SUSPEND"),
4888 Ref::keyword("RESUME"),
4889 Sequence::new(vec_of_erased![
4890 one_of(vec_of_erased![Ref::keyword("SET"), Ref::keyword("UNSET"),]),
4891 one_of(vec_of_erased![
4892 Ref::keyword("SECURE"),
4893 Ref::new("CommentEqualsClauseSegment"),
4894 Ref::new("TagEqualsSegment"),
4895 ]),
4896 ]),
4897 ]),
4898 ])
4899 .to_matchable(),
4900 )
4901 .to_matchable()
4902 .into(),
4903 ),
4904 (
4905 "CreateFileFormatSegment".into(),
4906 NodeMatcher::new(
4907 SyntaxKind::CreateFileFormatSegment,
4908 Sequence::new(vec_of_erased![
4909 Ref::keyword("CREATE"),
4910 Ref::new("OrReplaceGrammar").optional(),
4911 Sequence::new(vec_of_erased![Ref::keyword("FILE"), Ref::keyword("FORMAT"),]),
4912 Ref::new("IfNotExistsGrammar").optional(),
4913 Ref::new("ObjectReferenceSegment"),
4914 one_of(vec_of_erased![
4915 Ref::new("CsvFileFormatTypeParameters"),
4916 Ref::new("JsonFileFormatTypeParameters"),
4917 Ref::new("AvroFileFormatTypeParameters"),
4918 Ref::new("OrcFileFormatTypeParameters"),
4919 Ref::new("ParquetFileFormatTypeParameters"),
4920 Ref::new("XmlFileFormatTypeParameters"),
4921 ]),
4922 Sequence::new(vec_of_erased![
4923 Ref::new("CommaSegment").optional(),
4924 Ref::new("CommentEqualsClauseSegment"),
4925 ])
4926 .config(|this| this.optional()),
4927 ])
4928 .to_matchable(),
4929 )
4930 .to_matchable()
4931 .into(),
4932 ),
4933 (
4934 "AlterFileFormatSegment".into(),
4935 NodeMatcher::new(
4936 SyntaxKind::AlterFileFormatSegment,
4937 Sequence::new(vec_of_erased![
4938 Ref::keyword("ALTER"),
4939 Sequence::new(vec_of_erased![Ref::keyword("FILE"), Ref::keyword("FORMAT"),]),
4940 Ref::new("IfExistsGrammar").optional(),
4941 Ref::new("ObjectReferenceSegment"),
4942 one_of(vec_of_erased![
4943 Sequence::new(vec_of_erased![
4944 Ref::keyword("RENAME"),
4945 Ref::keyword("TO"),
4946 Ref::new("ObjectReferenceSegment"),
4947 ]),
4948 Sequence::new(vec_of_erased![
4949 Ref::keyword("SET"),
4950 one_of(vec_of_erased![
4951 Ref::new("CsvFileFormatTypeParameters"),
4952 Ref::new("JsonFileFormatTypeParameters"),
4953 Ref::new("AvroFileFormatTypeParameters"),
4954 Ref::new("OrcFileFormatTypeParameters"),
4955 Ref::new("ParquetFileFormatTypeParameters"),
4956 Ref::new("XmlFileFormatTypeParameters"),
4957 ]),
4958 ]),
4959 ]),
4960 Sequence::new(vec_of_erased![
4961 Ref::new("CommaSegment").optional(),
4962 Ref::new("CommentEqualsClauseSegment"),
4963 ])
4964 .config(|this| this.optional()),
4965 ])
4966 .to_matchable(),
4967 )
4968 .to_matchable()
4969 .into(),
4970 ),
4971 (
4972 "CsvFileFormatTypeParameters".into(),
4973 NodeMatcher::new(SyntaxKind::CsvFileFormatTypeParameters, {
4974 let file_format_type_parameter = one_of(vec_of_erased![
4975 Sequence::new(vec_of_erased![
4976 Ref::keyword("TYPE"),
4977 Ref::new("EqualsSegment"),
4978 one_of(vec_of_erased![
4979 StringParser::new("'CSV'", SyntaxKind::FileType),
4980 StringParser::new("CSV", SyntaxKind::FileType),
4981 ]),
4982 ]),
4983 Sequence::new(vec_of_erased![
4984 Ref::keyword("COMPRESSION"),
4985 Ref::new("EqualsSegment"),
4986 Ref::new("CompressionType"),
4987 ]),
4988 Sequence::new(vec_of_erased![
4989 Ref::keyword("FILE_EXTENSION"),
4990 Ref::new("EqualsSegment"),
4991 Ref::new("QuotedLiteralSegment"),
4992 ]),
4993 Sequence::new(vec_of_erased![
4994 Ref::keyword("SKIP_HEADER"),
4995 Ref::new("EqualsSegment"),
4996 Ref::new("IntegerSegment"),
4997 ]),
4998 Sequence::new(vec_of_erased![
4999 one_of(vec_of_erased![
5000 Ref::keyword("DATE_FORMAT"),
5001 Ref::keyword("TIME_FORMAT"),
5002 Ref::keyword("TIMESTAMP_FORMAT"),
5003 ]),
5004 Ref::new("EqualsSegment"),
5005 one_of(vec_of_erased![
5006 Ref::keyword("AUTO"),
5007 Ref::new("QuotedLiteralSegment"),
5008 ]),
5009 ]),
5010 Sequence::new(vec_of_erased![
5011 Ref::keyword("BINARY_FORMAT"),
5012 Ref::new("EqualsSegment"),
5013 one_of(vec_of_erased![
5014 Ref::keyword("HEX"),
5015 Ref::keyword("BASE64"),
5016 Ref::keyword("UTF8"),
5017 ]),
5018 ]),
5019 Sequence::new(vec_of_erased![
5020 one_of(vec_of_erased![
5021 Ref::keyword("RECORD_DELIMITER"),
5022 Ref::keyword("FIELD_DELIMITER"),
5023 Ref::keyword("ESCAPE"),
5024 Ref::keyword("ESCAPE_UNENCLOSED_FIELD"),
5025 Ref::keyword("FIELD_OPTIONALLY_ENCLOSED_BY"),
5026 ]),
5027 Ref::new("EqualsSegment"),
5028 one_of(vec_of_erased![
5029 Ref::keyword("NONE"),
5030 Ref::new("QuotedLiteralSegment"),
5031 ]),
5032 ]),
5033 Sequence::new(vec_of_erased![
5034 Ref::keyword("NULL_IF"),
5035 Ref::new("EqualsSegment"),
5036 Bracketed::new(vec_of_erased![
5037 Delimited::new(vec_of_erased![Ref::new("QuotedLiteralSegment"),])
5038 .config(|this| this.optional()),
5039 ]),
5040 ]),
5041 Sequence::new(vec_of_erased![
5042 one_of(vec_of_erased![
5043 Ref::keyword("SKIP_BLANK_LINES"),
5044 Ref::keyword("ERROR_ON_COLUMN_COUNT_MISMATCH"),
5045 Ref::keyword("REPLACE_INVALID_CHARACTERS"),
5046 Ref::keyword("VALIDATE_UTF8"),
5047 Ref::keyword("EMPTY_FIELD_AS_NULL"),
5048 Ref::keyword("SKIP_BYTE_ORDER_MARK"),
5049 Ref::keyword("TRIM_SPACE"),
5050 ]),
5051 Ref::new("EqualsSegment"),
5052 Ref::new("BooleanLiteralGrammar"),
5053 ]),
5054 Sequence::new(vec_of_erased![
5055 Ref::keyword("ENCODING"),
5056 Ref::new("EqualsSegment"),
5057 one_of(vec_of_erased![
5058 Ref::keyword("UTF8"),
5059 Ref::new("QuotedLiteralSegment"),
5060 ]),
5061 ]),
5062 ]);
5063
5064 one_of(vec_of_erased![
5065 Delimited::new(vec_of_erased![file_format_type_parameter.clone()]),
5066 AnyNumberOf::new(vec_of_erased![file_format_type_parameter]),
5067 ])
5068 .to_matchable()
5069 })
5070 .to_matchable()
5071 .into(),
5072 ),
5073 (
5074 "JsonFileFormatTypeParameters".into(),
5075 NodeMatcher::new(SyntaxKind::JsonFileFormatTypeParameters, {
5076 let file_format_type_parameter = one_of(vec_of_erased![
5077 Sequence::new(vec_of_erased![
5078 Ref::keyword("TYPE"),
5079 Ref::new("EqualsSegment"),
5080 one_of(vec_of_erased![
5081 StringParser::new("'JSON'", SyntaxKind::FileType),
5082 StringParser::new("JSON", SyntaxKind::FileType),
5083 ]),
5084 ]),
5085 Sequence::new(vec_of_erased![
5086 Ref::keyword("COMPRESSION"),
5087 Ref::new("EqualsSegment"),
5088 Ref::new("CompressionType"),
5089 ]),
5090 Sequence::new(vec_of_erased![
5091 one_of(vec_of_erased![
5092 Ref::keyword("DATE_FORMAT"),
5093 Ref::keyword("TIME_FORMAT"),
5094 Ref::keyword("TIMESTAMP_FORMAT"),
5095 ]),
5096 Ref::new("EqualsSegment"),
5097 one_of(vec_of_erased![
5098 Ref::new("QuotedLiteralSegment"),
5099 Ref::keyword("AUTO"),
5100 ]),
5101 ]),
5102 Sequence::new(vec_of_erased![
5103 Ref::keyword("BINARY_FORMAT"),
5104 Ref::new("EqualsSegment"),
5105 one_of(vec_of_erased![
5106 Ref::keyword("HEX"),
5107 Ref::keyword("BASE64"),
5108 Ref::keyword("UTF8"),
5109 ]),
5110 ]),
5111 Sequence::new(vec_of_erased![
5112 Ref::keyword("NULL_IF"),
5113 Ref::new("EqualsSegment"),
5114 Bracketed::new(vec_of_erased![
5115 Delimited::new(vec_of_erased![Ref::new("QuotedLiteralSegment"),])
5116 .config(|this| this.optional()),
5117 ]),
5118 ]),
5119 Sequence::new(vec_of_erased![
5120 Ref::keyword("FILE_EXTENSION"),
5121 Ref::new("EqualsSegment"),
5122 Ref::new("QuotedLiteralSegment"),
5123 ]),
5124 Sequence::new(vec_of_erased![
5125 one_of(vec_of_erased![
5126 Ref::keyword("TRIM_SPACE"),
5127 Ref::keyword("ENABLE_OCTAL"),
5128 Ref::keyword("ALLOW_DUPLICATE"),
5129 Ref::keyword("STRIP_OUTER_ARRAY"),
5130 Ref::keyword("STRIP_NULL_VALUES"),
5131 Ref::keyword("REPLACE_INVALID_CHARACTERS"),
5132 Ref::keyword("IGNORE_UTF8_ERRORS"),
5133 Ref::keyword("SKIP_BYTE_ORDER_MARK"),
5134 ]),
5135 Ref::new("EqualsSegment"),
5136 Ref::new("BooleanLiteralGrammar"),
5137 ]),
5138 ]);
5139
5140 one_of(vec_of_erased![
5141 Delimited::new(vec_of_erased![file_format_type_parameter.clone()]),
5142 AnyNumberOf::new(vec_of_erased![file_format_type_parameter]),
5143 ])
5144 .to_matchable()
5145 })
5146 .to_matchable()
5147 .into(),
5148 ),
5149 (
5150 "AvroFileFormatTypeParameters".into(),
5151 NodeMatcher::new(SyntaxKind::AvroFileFormatTypeParameters, {
5152 let file_format_type_parameter = one_of(vec_of_erased![
5153 Sequence::new(vec_of_erased![
5154 Ref::keyword("TYPE"),
5155 Ref::new("EqualsSegment"),
5156 one_of(vec_of_erased![
5157 StringParser::new("'AVRO'", SyntaxKind::FileType),
5158 StringParser::new("AVRO", SyntaxKind::FileType),
5159 ]),
5160 ]),
5161 Sequence::new(vec_of_erased![
5162 Ref::keyword("COMPRESSION"),
5163 Ref::new("EqualsSegment"),
5164 Ref::new("CompressionType"),
5165 ]),
5166 Sequence::new(vec_of_erased![
5167 Ref::keyword("TRIM_SPACE"),
5168 Ref::new("EqualsSegment"),
5169 Ref::new("BooleanLiteralGrammar"),
5170 ]),
5171 Sequence::new(vec_of_erased![
5172 Ref::keyword("NULL_IF"),
5173 Ref::new("EqualsSegment"),
5174 Bracketed::new(vec_of_erased![
5175 Delimited::new(vec_of_erased![Ref::new("QuotedLiteralSegment"),])
5176 .config(|this| this.optional()),
5177 ]),
5178 ]),
5179 ]);
5180
5181 one_of(vec_of_erased![
5182 Delimited::new(vec_of_erased![file_format_type_parameter.clone()]),
5183 AnyNumberOf::new(vec_of_erased![file_format_type_parameter]),
5184 ])
5185 .to_matchable()
5186 })
5187 .to_matchable()
5188 .into(),
5189 ),
5190 (
5191 "OrcFileFormatTypeParameters".into(),
5192 NodeMatcher::new(SyntaxKind::OrcFileFormatTypeParameters, {
5193 let file_format_type_parameter = one_of(vec_of_erased![
5194 Sequence::new(vec_of_erased![
5195 Ref::keyword("TYPE"),
5196 Ref::new("EqualsSegment"),
5197 one_of(vec_of_erased![
5198 StringParser::new("'ORC'", SyntaxKind::FileType),
5199 StringParser::new("ORC", SyntaxKind::FileType),
5200 ]),
5201 ]),
5202 Sequence::new(vec_of_erased![
5203 Ref::keyword("TRIM_SPACE"),
5204 Ref::new("EqualsSegment"),
5205 Ref::new("BooleanLiteralGrammar"),
5206 ]),
5207 Sequence::new(vec_of_erased![
5208 Ref::keyword("NULL_IF"),
5209 Ref::new("EqualsSegment"),
5210 Bracketed::new(vec_of_erased![
5211 Delimited::new(vec_of_erased![Ref::new("QuotedLiteralSegment"),])
5212 .config(|this| this.optional()),
5213 ]),
5214 ]),
5215 ]);
5216
5217 one_of(vec_of_erased![
5218 Delimited::new(vec_of_erased![file_format_type_parameter.clone()]),
5219 AnyNumberOf::new(vec_of_erased![file_format_type_parameter]),
5220 ])
5221 .to_matchable()
5222 })
5223 .to_matchable()
5224 .into(),
5225 ),
5226 (
5227 "ParquetFileFormatTypeParameters".into(),
5228 NodeMatcher::new(SyntaxKind::ParquetFileFormatTypeParameters, {
5229 let file_format_type_parameter = one_of(vec_of_erased![
5230 Sequence::new(vec_of_erased![
5231 Ref::keyword("TYPE"),
5232 Ref::new("EqualsSegment"),
5233 one_of(vec_of_erased![
5234 StringParser::new("'PARQUET'", SyntaxKind::FileType),
5235 StringParser::new("PARQUET", SyntaxKind::FileType),
5236 ]),
5237 ]),
5238 Sequence::new(vec_of_erased![
5239 Ref::keyword("COMPRESSION"),
5240 Ref::new("EqualsSegment"),
5241 Ref::new("CompressionType"),
5242 ]),
5243 Sequence::new(vec_of_erased![
5244 one_of(vec_of_erased![
5245 Ref::keyword("SNAPPY_COMPRESSION"),
5246 Ref::keyword("BINARY_AS_TEXT"),
5247 Ref::keyword("TRIM_SPACE"),
5248 ]),
5249 Ref::new("EqualsSegment"),
5250 Ref::new("BooleanLiteralGrammar"),
5251 ]),
5252 Sequence::new(vec_of_erased![
5253 Ref::keyword("NULL_IF"),
5254 Ref::new("EqualsSegment"),
5255 Bracketed::new(vec_of_erased![
5256 Delimited::new(vec_of_erased![Ref::new("QuotedLiteralSegment"),])
5257 .config(|this| this.optional()),
5258 ]),
5259 ]),
5260 ]);
5261
5262 one_of(vec_of_erased![
5263 Delimited::new(vec_of_erased![file_format_type_parameter.clone()]),
5264 AnyNumberOf::new(vec_of_erased![file_format_type_parameter]),
5265 ])
5266 .to_matchable()
5267 })
5268 .to_matchable()
5269 .into(),
5270 ),
5271 (
5272 "XmlFileFormatTypeParameters".into(),
5273 NodeMatcher::new(SyntaxKind::XmlFileFormatTypeParameters, {
5274 let file_format_type_parameter = one_of(vec_of_erased![
5275 Sequence::new(vec_of_erased![
5276 Ref::keyword("TYPE"),
5277 Ref::new("EqualsSegment"),
5278 one_of(vec_of_erased![
5279 StringParser::new("'XML'", SyntaxKind::FileType),
5280 StringParser::new("XML", SyntaxKind::FileType),
5281 ]),
5282 ]),
5283 Sequence::new(vec_of_erased![
5284 Ref::keyword("COMPRESSION"),
5285 Ref::new("EqualsSegment"),
5286 Ref::new("CompressionType"),
5287 ]),
5288 Sequence::new(vec_of_erased![
5289 one_of(vec_of_erased![
5290 Ref::keyword("IGNORE_UTF8_ERRORS"),
5291 Ref::keyword("PRESERVE_SPACE"),
5292 Ref::keyword("STRIP_OUTER_ELEMENT"),
5293 Ref::keyword("DISABLE_SNOWFLAKE_DATA"),
5294 Ref::keyword("DISABLE_AUTO_CONVERT"),
5295 Ref::keyword("SKIP_BYTE_ORDER_MARK"),
5296 ]),
5297 Ref::new("EqualsSegment"),
5298 Ref::new("BooleanLiteralGrammar"),
5299 ]),
5300 ]);
5301
5302 one_of(vec_of_erased![
5303 Delimited::new(vec_of_erased![file_format_type_parameter.clone()]),
5304 AnyNumberOf::new(vec_of_erased![file_format_type_parameter]),
5305 ])
5306 .to_matchable()
5307 })
5308 .to_matchable()
5309 .into(),
5310 ),
5311 (
5312 "AlterPipeSegment".into(),
5313 NodeMatcher::new(
5314 SyntaxKind::AlterPipeSegment,
5315 Sequence::new(vec_of_erased![
5316 Ref::keyword("ALTER"),
5317 Ref::keyword("PIPE"),
5318 Ref::new("IfExistsGrammar").optional(),
5319 Ref::new("ObjectReferenceSegment"),
5320 one_of(vec_of_erased![
5321 Sequence::new(vec_of_erased![
5322 Ref::keyword("SET"),
5323 AnyNumberOf::new(vec_of_erased![
5324 Sequence::new(vec_of_erased![
5325 Ref::keyword("PIPE_EXECUTION_PAUSED"),
5326 Ref::new("EqualsSegment"),
5327 Ref::new("BooleanLiteralGrammar"),
5328 ]),
5329 Ref::new("CommentEqualsClauseSegment"),
5330 ]),
5331 ]),
5332 Sequence::new(vec_of_erased![
5333 Ref::keyword("UNSET"),
5334 one_of(vec_of_erased![
5335 Ref::keyword("PIPE_EXECUTION_PAUSED"),
5336 Ref::keyword("COMMENT"),
5337 ]),
5338 ]),
5339 Sequence::new(vec_of_erased![
5340 Ref::keyword("SET"),
5341 Ref::new("TagEqualsSegment"),
5342 ]),
5343 Sequence::new(vec_of_erased![
5344 Ref::keyword("UNSET"),
5345 Sequence::new(vec_of_erased![
5346 Ref::keyword("TAG"),
5347 Delimited::new(vec_of_erased![Ref::new("TagReferenceSegment"),]),
5348 ]),
5349 ]),
5350 Sequence::new(vec_of_erased![
5351 Ref::keyword("REFRESH"),
5352 Sequence::new(vec_of_erased![
5353 Ref::keyword("PREFIX"),
5354 Ref::new("EqualsSegment"),
5355 Ref::new("QuotedLiteralSegment"),
5356 ])
5357 .config(|this| this.optional()),
5358 Sequence::new(vec_of_erased![
5359 Ref::keyword("MODIFIED_AFTER"),
5360 Ref::new("EqualsSegment"),
5361 Ref::new("QuotedLiteralSegment"),
5362 ])
5363 .config(|this| this.optional()),
5364 ]),
5365 ]),
5366 Ref::new("CommaSegment").optional(),
5367 ])
5368 .to_matchable(),
5369 )
5370 .to_matchable()
5371 .into(),
5372 ),
5373 (
5374 "FileFormatSegment".into(),
5375 NodeMatcher::new(
5376 SyntaxKind::FileFormatSegment,
5377 one_of(vec_of_erased![
5378 one_of(vec_of_erased![
5379 Ref::new("QuotedLiteralSegment"),
5380 Ref::new("ObjectReferenceSegment"),
5381 ]),
5382 Bracketed::new(vec_of_erased![Sequence::new(vec_of_erased![
5383 one_of(vec_of_erased![
5384 Sequence::new(vec_of_erased![
5385 Ref::keyword("FORMAT_NAME"),
5386 Ref::new("EqualsSegment"),
5387 one_of(vec_of_erased![
5388 Ref::new("QuotedLiteralSegment"),
5389 Ref::new("ObjectReferenceSegment"),
5390 ]),
5391 ]),
5392 one_of(vec_of_erased![
5393 Ref::new("CsvFileFormatTypeParameters"),
5394 Ref::new("JsonFileFormatTypeParameters"),
5395 Ref::new("AvroFileFormatTypeParameters"),
5396 Ref::new("OrcFileFormatTypeParameters"),
5397 Ref::new("ParquetFileFormatTypeParameters"),
5398 Ref::new("XmlFileFormatTypeParameters"),
5399 ]),
5400 ]),
5401 Ref::new("FormatTypeOptions").optional(),
5402 ]),]),
5403 ])
5404 .to_matchable(),
5405 )
5406 .to_matchable()
5407 .into(),
5408 ),
5409 (
5410 "FormatTypeOptions".into(),
5411 NodeMatcher::new(
5412 SyntaxKind::FormatTypeOptions,
5413 one_of(vec_of_erased![
5414 any_set_of(vec_of_erased![
5416 Sequence::new(vec_of_erased![
5417 Ref::keyword("COMPRESSION"),
5418 Ref::new("EqualsSegment"),
5419 Ref::new("CompressionType"),
5420 ]),
5421 Sequence::new(vec_of_erased![
5422 Ref::keyword("RECORD_DELIMITER"),
5423 Ref::new("EqualsSegment"),
5424 one_of(vec_of_erased![
5425 Ref::keyword("NONE"),
5426 Ref::new("QuotedLiteralSegment"),
5427 ]),
5428 ]),
5429 Sequence::new(vec_of_erased![
5430 Ref::keyword("FIELD_DELIMITER"),
5431 Ref::new("EqualsSegment"),
5432 one_of(vec_of_erased![
5433 Ref::keyword("NONE"),
5434 Ref::new("QuotedLiteralSegment"),
5435 ]),
5436 ]),
5437 Sequence::new(vec_of_erased![
5438 Ref::keyword("ESCAPE"),
5439 Ref::new("EqualsSegment"),
5440 one_of(vec_of_erased![
5441 Ref::keyword("NONE"),
5442 Ref::new("QuotedLiteralSegment"),
5443 ]),
5444 ]),
5445 Sequence::new(vec_of_erased![
5446 Ref::keyword("ESCAPE_UNENCLOSED_FIELD"),
5447 Ref::new("EqualsSegment"),
5448 one_of(vec_of_erased![
5449 Ref::keyword("NONE"),
5450 Ref::new("QuotedLiteralSegment"),
5451 ]),
5452 ]),
5453 Sequence::new(vec_of_erased![
5454 Ref::keyword("DATA_FORMAT"),
5455 Ref::new("EqualsSegment"),
5456 one_of(vec_of_erased![
5457 Ref::keyword("AUTO"),
5458 Ref::new("QuotedLiteralSegment"),
5459 ]),
5460 ]),
5461 Sequence::new(vec_of_erased![
5462 Ref::keyword("TIME_FORMAT"),
5463 Ref::new("EqualsSegment"),
5464 one_of(vec_of_erased![
5465 Ref::keyword("NONE"),
5466 Ref::new("QuotedLiteralSegment"),
5467 ]),
5468 ]),
5469 Sequence::new(vec_of_erased![
5470 Ref::keyword("TIMESTAMP_FORMAT"),
5471 Ref::new("EqualsSegment"),
5472 one_of(vec_of_erased![
5473 Ref::keyword("NONE"),
5474 Ref::new("QuotedLiteralSegment"),
5475 ]),
5476 ]),
5477 Sequence::new(vec_of_erased![
5478 Ref::keyword("BINARY_FORMAT"),
5479 Ref::new("EqualsSegment"),
5480 one_of(vec_of_erased![
5481 Ref::keyword("HEX"),
5482 Ref::keyword("BASE64"),
5483 Ref::keyword("UTF8"),
5484 ]),
5485 ]),
5486 Sequence::new(vec_of_erased![
5487 Ref::keyword("FIELD_OPTIONALITY_ENCLOSED_BY"),
5488 Ref::new("EqualsSegment"),
5489 one_of(vec_of_erased![
5490 Ref::keyword("NONE"),
5491 Ref::new("QuotedLiteralSegment"),
5492 ]),
5493 ]),
5494 Sequence::new(vec_of_erased![
5495 Ref::keyword("NULL_IF"),
5496 Ref::new("EqualsSegment"),
5497 Bracketed::new(vec_of_erased![
5498 Delimited::new(vec_of_erased![Ref::new("QuotedLiteralSegment"),])
5499 .config(|this| this.optional()),
5500 ]),
5501 ]),
5502 Sequence::new(vec_of_erased![
5503 Ref::keyword("EMPTY_FIELD_AS_NULL"),
5504 Ref::new("EqualsSegment"),
5505 Ref::new("BooleanLiteralGrammar"),
5506 ]),
5507 Sequence::new(vec_of_erased![
5508 Ref::keyword("SNAPPY_COMPRESSION"),
5509 Ref::new("EqualsSegment"),
5510 Ref::new("BooleanLiteralGrammar"),
5511 ]),
5512 ]),
5513 any_set_of(vec_of_erased![]),
5515 ])
5516 .to_matchable(),
5517 )
5518 .to_matchable()
5519 .into(),
5520 ),
5521 (
5522 "CreateExternalTableSegment".into(),
5523 NodeMatcher::new(
5524 SyntaxKind::CreateExternalTableStatement,
5525 Sequence::new(vec_of_erased![
5526 Ref::keyword("CREATE"),
5527 Sequence::new(vec_of_erased![Ref::keyword("OR"), Ref::keyword("REPLACE"),])
5528 .config(|this| this.optional()),
5529 Ref::keyword("EXTERNAL"),
5530 Ref::keyword("TABLE"),
5531 Sequence::new(vec_of_erased![
5532 Ref::keyword("IF"),
5533 Ref::keyword("NOT"),
5534 Ref::keyword("EXISTS"),
5535 ])
5536 .config(|this| this.optional()),
5537 Ref::new("TableReferenceSegment"),
5538 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
5539 Sequence::new(vec_of_erased![
5540 Ref::new("SingleIdentifierGrammar"),
5541 Ref::new("DatatypeSegment"),
5542 Ref::keyword("AS"),
5543 optionally_bracketed(vec_of_erased![Sequence::new(vec_of_erased![
5544 Ref::new("ExpressionSegment"),
5545 Ref::new("TableConstraintSegment").optional(),
5546 Sequence::new(vec_of_erased![
5547 Ref::keyword("NOT").optional(),
5548 Ref::keyword("NULL").optional(),
5549 ])
5550 .config(|this| this.optional()),
5551 ])]),
5552 ])
5553 ])])
5554 .config(|this| this.optional()),
5555 any_set_of(vec_of_erased![
5556 Sequence::new(vec_of_erased![
5557 Ref::keyword("INTEGRATION"),
5558 Ref::new("EqualsSegment"),
5559 Ref::new("QuotedLiteralSegment"),
5560 ]),
5561 Sequence::new(vec_of_erased![
5562 Ref::keyword("PARTITION"),
5563 Ref::keyword("BY"),
5564 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
5565 Ref::new("SingleIdentifierGrammar"),
5566 ]),]),
5567 ]),
5568 Sequence::new(vec_of_erased![
5569 Sequence::new(vec_of_erased![Ref::keyword("WITH")])
5570 .config(|this| this.optional()),
5571 Ref::keyword("LOCATION"),
5572 Ref::new("EqualsSegment"),
5573 Ref::new("StagePath"),
5574 ]),
5575 Sequence::new(vec_of_erased![
5576 Ref::keyword("REFRESH_ON_CREATE"),
5577 Ref::new("EqualsSegment"),
5578 Ref::new("BooleanLiteralGrammar"),
5579 ]),
5580 Sequence::new(vec_of_erased![
5581 Ref::keyword("AUTO_REFRESH"),
5582 Ref::new("EqualsSegment"),
5583 Ref::new("BooleanLiteralGrammar"),
5584 ]),
5585 Sequence::new(vec_of_erased![
5586 Ref::keyword("PATTERN"),
5587 Ref::new("EqualsSegment"),
5588 Ref::new("QuotedLiteralSegment"),
5589 ]),
5590 Sequence::new(vec_of_erased![
5591 Ref::keyword("FILE_FORMAT"),
5592 Ref::new("EqualsSegment"),
5593 Ref::new("FileFormatSegment"),
5594 ]),
5595 Sequence::new(vec_of_erased![
5596 Ref::keyword("AWS_SNS_TOPIC"),
5597 Ref::new("EqualsSegment"),
5598 Ref::new("QuotedLiteralSegment"),
5599 ]),
5600 Sequence::new(
5601 vec_of_erased![Ref::keyword("COPY"), Ref::keyword("GRANTS"),]
5602 ),
5603 Sequence::new(vec_of_erased![
5604 Sequence::new(vec_of_erased![Ref::keyword("WITH")])
5605 .config(|this| this.optional()),
5606 Ref::keyword("ROW"),
5607 Ref::keyword("ACCESS"),
5608 Ref::keyword("POLICY"),
5609 Ref::new("NakedIdentifierSegment"),
5610 ]),
5611 Ref::new("TagBracketedEqualsSegment"),
5612 Ref::new("CommentEqualsClauseSegment"),
5613 ]),
5614 ])
5615 .to_matchable(),
5616 )
5617 .to_matchable()
5618 .into(),
5619 ),
5620 ]);
5621
5622 snowflake_dialect.replace_grammar(
5623 "TableExpressionSegment",
5624 one_of(vec_of_erased![
5625 Ref::new("BareFunctionSegment"),
5626 Ref::new("FunctionSegment"),
5627 Ref::new("TableReferenceSegment"),
5628 Bracketed::new(vec_of_erased![Ref::new("SelectableGrammar")]),
5629 Ref::new("ValuesClauseSegment"),
5630 Sequence::new(vec_of_erased![
5631 Ref::new("StagePath"),
5632 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
5633 Sequence::new(vec_of_erased![
5634 Ref::keyword("FILE_FORMAT"),
5635 Ref::new("ParameterAssignerSegment"),
5636 Ref::new("FileFormatSegment"),
5637 ]),
5638 Sequence::new(vec_of_erased![
5639 Ref::keyword("PATTERN"),
5640 Ref::new("ParameterAssignerSegment"),
5641 Ref::new("QuotedLiteralSegment"),
5642 ]),
5643 ]),])
5644 .config(|this| this.optional()),
5645 ]),
5646 ])
5647 .to_matchable(),
5648 );
5649
5650 snowflake_dialect.add([
5651 (
5652 "PartitionBySegment".into(),
5653 NodeMatcher::new(
5654 SyntaxKind::PartitionBySegment,
5655 Sequence::new(vec_of_erased![
5656 Ref::keyword("PARTITION"),
5657 Ref::keyword("BY"),
5658 MetaSegment::indent(),
5659 optionally_bracketed(vec_of_erased![Delimited::new(vec_of_erased![Ref::new(
5660 "ExpressionSegment"
5661 )]),]),
5662 MetaSegment::dedent(),
5663 ])
5664 .to_matchable(),
5665 )
5666 .to_matchable()
5667 .into(),
5668 ),
5669 (
5670 "CopyIntoLocationStatementSegment".into(),
5671 NodeMatcher::new(
5672 SyntaxKind::CopyIntoLocationStatement,
5673 Sequence::new(vec_of_erased![
5674 Ref::keyword("COPY"),
5675 Ref::keyword("INTO"),
5676 Ref::new("StorageLocation"),
5677 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![Ref::new(
5678 "ColumnReferenceSegment"
5679 )]),])
5680 .config(|this| this.optional()),
5681 Sequence::new(vec_of_erased![
5682 Ref::keyword("FROM"),
5683 one_of(vec_of_erased![
5684 Ref::new("TableReferenceSegment"),
5685 Bracketed::new(vec_of_erased![Ref::new("SelectStatementSegment")]),
5686 ]),
5687 ])
5688 .config(|this| this.optional()),
5689 one_of(vec_of_erased![
5690 Ref::new("S3ExternalStageParameters"),
5691 Ref::new("AzureBlobStorageExternalStageParameters"),
5692 ])
5693 .config(|this| this.optional()),
5694 Ref::new("InternalStageParameters").optional(),
5695 any_set_of(vec_of_erased![
5696 Ref::new("PartitionBySegment"),
5697 Sequence::new(vec_of_erased![
5698 Ref::keyword("FILE_FORMAT"),
5699 Ref::new("EqualsSegment"),
5700 Ref::new("FileFormatSegment"),
5701 ]),
5702 Ref::new("CopyOptionsSegment"),
5703 Sequence::new(vec_of_erased![
5704 Ref::keyword("VALIDATION_MODE"),
5705 Ref::new("EqualsSegment"),
5706 Ref::new("ValidationModeOptionSegment"),
5707 ]),
5708 Sequence::new(vec_of_erased![
5709 Ref::keyword("HEADER"),
5710 Ref::new("EqualsSegment"),
5711 Ref::new("BooleanLiteralGrammar"),
5712 ]),
5713 ]),
5714 ])
5715 .to_matchable(),
5716 )
5717 .to_matchable()
5718 .into(),
5719 ),
5720 (
5721 "CopyIntoTableStatementSegment".into(),
5722 NodeMatcher::new(
5723 SyntaxKind::CopyIntoTableStatement,
5724 Sequence::new(vec_of_erased![
5725 Ref::keyword("COPY"),
5726 Ref::keyword("INTO"),
5727 Ref::new("TableReferenceSegment"),
5728 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![Ref::new(
5729 "ColumnReferenceSegment"
5730 )]),])
5731 .config(|this| this.optional()),
5732 Sequence::new(vec_of_erased![
5733 Ref::keyword("FROM"),
5734 one_of(vec_of_erased![
5735 Ref::new("StorageLocation"),
5736 Bracketed::new(vec_of_erased![Ref::new("SelectStatementSegment")]),
5737 ]),
5738 ])
5739 .config(|this| this.optional()),
5740 one_of(vec_of_erased![
5741 Ref::new("S3ExternalStageParameters"),
5742 Ref::new("AzureBlobStorageExternalStageParameters"),
5743 ])
5744 .config(|this| this.optional()),
5745 Ref::new("InternalStageParameters").optional(),
5746 any_set_of(vec_of_erased![
5747 Sequence::new(vec_of_erased![
5748 Ref::keyword("FILES"),
5749 Ref::new("EqualsSegment"),
5750 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
5751 Ref::new("QuotedLiteralSegment")
5752 ]),]),
5753 ]),
5754 Sequence::new(vec_of_erased![
5755 Ref::keyword("PATTERN"),
5756 Ref::new("EqualsSegment"),
5757 one_of(vec_of_erased![
5758 Ref::new("QuotedLiteralSegment"),
5759 Ref::new("ReferencedVariableNameSegment"),
5760 ]),
5761 ]),
5762 Sequence::new(vec_of_erased![
5763 Ref::keyword("FILE_FORMAT"),
5764 Ref::new("EqualsSegment"),
5765 Ref::new("FileFormatSegment"),
5766 ]),
5767 Ref::new("CopyOptionsSegment"),
5768 ]),
5769 Sequence::new(vec_of_erased![
5770 Ref::keyword("VALIDATION_MODE"),
5771 Ref::new("EqualsSegment"),
5772 Ref::new("ValidationModeOptionSegment"),
5773 ])
5774 .config(|this| this.optional()),
5775 ])
5776 .to_matchable(),
5777 )
5778 .to_matchable()
5779 .into(),
5780 ),
5781 (
5782 "StorageLocation".into(),
5783 NodeMatcher::new(
5784 SyntaxKind::StorageLocation,
5785 one_of(vec_of_erased![
5786 Ref::new("StagePath"),
5787 Ref::new("S3Path"),
5788 Ref::new("GCSPath"),
5789 Ref::new("AzureBlobStoragePath"),
5790 ])
5791 .to_matchable(),
5792 )
5793 .to_matchable()
5794 .into(),
5795 ),
5796 (
5797 "InternalStageParameters".into(),
5798 NodeMatcher::new(
5799 SyntaxKind::StageParameters,
5800 Sequence::new(vec_of_erased![
5801 Sequence::new(vec_of_erased![
5802 Ref::keyword("ENCRYPTION"),
5803 Ref::new("EqualsSegment"),
5804 Bracketed::new(vec_of_erased![
5805 Ref::keyword("TYPE"),
5806 Ref::new("EqualsSegment"),
5807 Ref::new("SnowflakeEncryptionOption"),
5808 ]),
5809 ])
5810 .config(|this| this.optional()),
5811 ])
5812 .to_matchable(),
5813 )
5814 .to_matchable()
5815 .into(),
5816 ),
5817 (
5818 "S3ExternalStageParameters".into(),
5819 NodeMatcher::new(
5820 SyntaxKind::S3ExternalStageParameters,
5821 Sequence::new(vec_of_erased![
5822 one_of(vec_of_erased![
5823 Sequence::new(vec_of_erased![
5824 Ref::keyword("STORAGE_INTEGRATION"),
5825 Ref::new("EqualsSegment"),
5826 Ref::new("ObjectReferenceSegment"),
5827 ]),
5828 Sequence::new(vec_of_erased![
5829 Ref::keyword("CREDENTIALS"),
5830 Ref::new("EqualsSegment"),
5831 Bracketed::new(vec_of_erased![one_of(vec_of_erased![
5832 Sequence::new(vec_of_erased![
5833 Ref::keyword("AWS_KEY_ID"),
5834 Ref::new("EqualsSegment"),
5835 Ref::new("QuotedLiteralSegment"),
5836 Ref::keyword("AWS_SECRET_KEY"),
5837 Ref::new("EqualsSegment"),
5838 Ref::new("QuotedLiteralSegment"),
5839 Sequence::new(vec_of_erased![
5840 Ref::keyword("AWS_TOKEN"),
5841 Ref::new("EqualsSegment"),
5842 Ref::new("QuotedLiteralSegment"),
5843 ])
5844 .config(|this| this.optional()),
5845 ]),
5846 Sequence::new(vec_of_erased![
5847 Ref::keyword("AWS_ROLE"),
5848 Ref::new("EqualsSegment"),
5849 Ref::new("QuotedLiteralSegment"),
5850 ]),
5851 ]),]),
5852 ]),
5853 ])
5854 .config(|this| this.optional()),
5855 Sequence::new(vec_of_erased![
5856 Ref::keyword("ENCRYPTION"),
5857 Ref::new("EqualsSegment"),
5858 Bracketed::new(vec_of_erased![one_of(vec_of_erased![
5859 Sequence::new(vec_of_erased![
5860 Sequence::new(vec_of_erased![
5861 Ref::keyword("TYPE"),
5862 Ref::new("EqualsSegment"),
5863 Ref::new("S3EncryptionOption"),
5864 ])
5865 .config(|this| this.optional()),
5866 Ref::keyword("MASTER_KEY"),
5867 Ref::new("EqualsSegment"),
5868 Ref::new("QuotedLiteralSegment"),
5869 ]),
5870 Sequence::new(vec_of_erased![
5871 Ref::keyword("TYPE"),
5872 Ref::new("EqualsSegment"),
5873 Ref::new("S3EncryptionOption"),
5874 ]),
5875 Sequence::new(vec_of_erased![
5876 Ref::keyword("TYPE"),
5877 Ref::new("EqualsSegment"),
5878 Ref::new("S3EncryptionOption"),
5879 Sequence::new(vec_of_erased![
5880 Ref::keyword("KMS_KEY_ID"),
5881 Ref::new("EqualsSegment"),
5882 Ref::new("QuotedLiteralSegment"),
5883 ])
5884 .config(|this| this.optional()),
5885 ]),
5886 Sequence::new(vec_of_erased![
5887 Ref::keyword("TYPE"),
5888 Ref::new("EqualsSegment"),
5889 Ref::keyword("NONE"),
5890 ]),
5891 ]),]),
5892 ])
5893 .config(|this| this.optional()),
5894 ])
5895 .to_matchable(),
5896 )
5897 .to_matchable()
5898 .into(),
5899 ),
5900 (
5901 "GCSExternalStageParameters".into(),
5902 NodeMatcher::new(
5903 SyntaxKind::GcsExternalStageParameters,
5904 Sequence::new(vec_of_erased![
5905 Sequence::new(vec_of_erased![
5906 Ref::keyword("STORAGE_INTEGRATION"),
5907 Ref::new("EqualsSegment"),
5908 Ref::new("ObjectReferenceSegment"),
5909 ])
5910 .config(|this| this.optional()),
5911 Sequence::new(vec_of_erased![
5912 Ref::keyword("ENCRYPTION"),
5913 Ref::new("EqualsSegment"),
5914 Bracketed::new(vec_of_erased![Sequence::new(vec_of_erased![
5915 Ref::keyword("TYPE"),
5916 Ref::new("EqualsSegment"),
5917 one_of(vec_of_erased![
5918 Sequence::new(vec_of_erased![
5919 Ref::new("GCSEncryptionOption"),
5920 Sequence::new(vec_of_erased![
5921 Ref::keyword("KMS_KEY_ID"),
5922 Ref::new("EqualsSegment"),
5923 Ref::new("QuotedLiteralSegment"),
5924 ])
5925 .config(|this| this.optional()),
5926 ]),
5927 Ref::keyword("NONE"),
5928 ]),
5929 ]),]),
5930 ])
5931 .config(|this| this.optional()),
5932 ])
5933 .to_matchable(),
5934 )
5935 .to_matchable()
5936 .into(),
5937 ),
5938 (
5939 "AzureBlobStorageExternalStageParameters".into(),
5940 NodeMatcher::new(
5941 SyntaxKind::AzureBlobStorageExternalStageParameters,
5942 Sequence::new(vec_of_erased![
5943 one_of(vec_of_erased![
5944 Sequence::new(vec_of_erased![
5945 Ref::keyword("STORAGE_INTEGRATION"),
5946 Ref::new("EqualsSegment"),
5947 Ref::new("ObjectReferenceSegment"),
5948 ]),
5949 Sequence::new(vec_of_erased![
5950 Ref::keyword("CREDENTIALS"),
5951 Ref::new("EqualsSegment"),
5952 Bracketed::new(vec_of_erased![Sequence::new(vec_of_erased![
5953 Ref::keyword("AZURE_SAS_TOKEN"),
5954 Ref::new("EqualsSegment"),
5955 Ref::new("QuotedLiteralSegment"),
5956 ]),]),
5957 ]),
5958 ])
5959 .config(|this| this.optional()),
5960 Sequence::new(vec_of_erased![
5961 Ref::keyword("ENCRYPTION"),
5962 Ref::new("EqualsSegment"),
5963 Bracketed::new(vec_of_erased![Sequence::new(vec_of_erased![
5964 Ref::keyword("TYPE"),
5965 Ref::new("EqualsSegment"),
5966 one_of(vec_of_erased![
5967 Sequence::new(vec_of_erased![
5968 Ref::new("AzureBlobStorageEncryptionOption"),
5969 Sequence::new(vec_of_erased![
5970 Ref::keyword("MASTER_KEY"),
5971 Ref::new("EqualsSegment"),
5972 Ref::new("QuotedLiteralSegment"),
5973 ])
5974 .config(|this| this.optional()),
5975 ]),
5976 Ref::keyword("NONE"),
5977 ]),
5978 ]),]),
5979 ])
5980 .config(|this| this.optional()),
5981 ])
5982 .to_matchable(),
5983 )
5984 .to_matchable()
5985 .into(),
5986 ),
5987 (
5988 "CreateStageSegment".into(),
5989 NodeMatcher::new(
5990 SyntaxKind::CreateStageStatement,
5991 Sequence::new(vec_of_erased![
5992 Ref::keyword("CREATE"),
5993 Sequence::new(vec_of_erased![Ref::keyword("OR"), Ref::keyword("REPLACE"),])
5994 .config(|this| this.optional()),
5995 Ref::keyword("TEMPORARY").optional(),
5996 Ref::keyword("STAGE"),
5997 Sequence::new(vec_of_erased![
5998 Ref::keyword("IF"),
5999 Ref::keyword("NOT"),
6000 Ref::keyword("EXISTS"),
6001 ])
6002 .config(|this| this.optional()),
6003 Ref::new("ObjectReferenceSegment"),
6004 MetaSegment::indent(),
6005 one_of(vec_of_erased![
6006 Sequence::new(vec_of_erased![
6008 Ref::new("InternalStageParameters").optional(),
6009 Sequence::new(vec_of_erased![
6010 Ref::keyword("DIRECTORY"),
6011 Ref::new("EqualsSegment"),
6012 Bracketed::new(vec_of_erased![Sequence::new(vec_of_erased![
6013 Ref::keyword("ENABLE"),
6014 Ref::new("EqualsSegment"),
6015 Ref::new("BooleanLiteralGrammar"),
6016 ]),]),
6017 ])
6018 .config(|this| this.optional()),
6019 ]),
6020 Sequence::new(vec_of_erased![
6022 Ref::keyword("URL"),
6023 Ref::new("EqualsSegment"),
6024 Ref::new("S3Path"),
6025 Ref::new("S3ExternalStageParameters").optional(),
6026 Sequence::new(vec_of_erased![
6027 Ref::keyword("DIRECTORY"),
6028 Ref::new("EqualsSegment"),
6029 Bracketed::new(vec_of_erased![
6030 Sequence::new(vec_of_erased![
6031 Ref::keyword("ENABLE"),
6032 Ref::new("EqualsSegment"),
6033 Ref::new("BooleanLiteralGrammar"),
6034 ]),
6035 Sequence::new(vec_of_erased![
6036 Ref::keyword("AUTO_REFRESH"),
6037 Ref::new("EqualsSegment"),
6038 Ref::new("BooleanLiteralGrammar"),
6039 ])
6040 .config(|this| this.optional()),
6041 ]),
6042 ])
6043 .config(|this| this.optional()),
6044 ]),
6045 Sequence::new(vec_of_erased![
6047 Ref::keyword("URL"),
6048 Ref::new("EqualsSegment"),
6049 Ref::new("GCSPath"),
6050 Ref::new("GCSExternalStageParameters").optional(),
6051 Sequence::new(vec_of_erased![
6052 Ref::keyword("DIRECTORY"),
6053 Ref::new("EqualsSegment"),
6054 Bracketed::new(vec_of_erased![
6055 Sequence::new(vec_of_erased![
6056 Ref::keyword("ENABLE"),
6057 Ref::new("EqualsSegment"),
6058 Ref::new("BooleanLiteralGrammar"),
6059 ]),
6060 Sequence::new(vec_of_erased![
6061 Ref::keyword("AUTO_REFRESH"),
6062 Ref::new("EqualsSegment"),
6063 Ref::new("BooleanLiteralGrammar"),
6064 ])
6065 .config(|this| this.optional()),
6066 Sequence::new(vec_of_erased![
6067 Ref::keyword("NOTIFICATION_INTEGRATION"),
6068 Ref::new("EqualsSegment"),
6069 one_of(vec_of_erased![
6070 Ref::new("NakedIdentifierSegment"),
6071 Ref::new("QuotedLiteralSegment"),
6072 ]),
6073 ])
6074 .config(|this| this.optional()),
6075 ]),
6076 ])
6077 .config(|this| this.optional()),
6078 ]),
6079 Sequence::new(vec_of_erased![
6081 Ref::keyword("URL"),
6082 Ref::new("EqualsSegment"),
6083 Ref::new("AzureBlobStoragePath"),
6084 Ref::new("AzureBlobStorageExternalStageParameters").optional(),
6085 Sequence::new(vec_of_erased![
6086 Ref::keyword("DIRECTORY"),
6087 Ref::new("EqualsSegment"),
6088 Bracketed::new(vec_of_erased![
6089 Sequence::new(vec_of_erased![
6090 Ref::keyword("ENABLE"),
6091 Ref::new("EqualsSegment"),
6092 Ref::new("BooleanLiteralGrammar"),
6093 ]),
6094 Sequence::new(vec_of_erased![
6095 Ref::keyword("AUTO_REFRESH"),
6096 Ref::new("EqualsSegment"),
6097 Ref::new("BooleanLiteralGrammar"),
6098 ])
6099 .config(|this| this.optional()),
6100 Sequence::new(vec_of_erased![
6101 Ref::keyword("NOTIFICATION_INTEGRATION"),
6102 Ref::new("EqualsSegment"),
6103 one_of(vec_of_erased![
6104 Ref::new("NakedIdentifierSegment"),
6105 Ref::new("QuotedLiteralSegment"),
6106 ]),
6107 ])
6108 .config(|this| this.optional()),
6109 ]),
6110 ])
6111 .config(|this| this.optional()),
6112 ]),
6113 ])
6114 .config(|this| this.optional()),
6115 Sequence::new(vec_of_erased![
6116 Ref::keyword("FILE_FORMAT"),
6117 Ref::new("EqualsSegment"),
6118 Ref::new("FileFormatSegment"),
6119 ])
6120 .config(|this| this.optional()),
6121 Sequence::new(vec_of_erased![
6122 Ref::keyword("COPY_OPTIONS"),
6123 Ref::new("EqualsSegment"),
6124 Bracketed::new(vec_of_erased![Ref::new("CopyOptionsSegment")]),
6125 ])
6126 .config(|this| this.optional()),
6127 Ref::new("TagBracketedEqualsSegment").optional(),
6128 Ref::new("CommentEqualsClauseSegment").optional(),
6129 MetaSegment::dedent(),
6130 ])
6131 .to_matchable(),
6132 )
6133 .to_matchable()
6134 .into(),
6135 ),
6136 (
6137 "AlterStageSegment".into(),
6138 NodeMatcher::new(
6139 SyntaxKind::AlterStageStatement,
6140 Sequence::new(vec_of_erased![
6141 Ref::keyword("ALTER"),
6142 Ref::keyword("STAGE"),
6143 Sequence::new(vec_of_erased![Ref::keyword("IF"), Ref::keyword("EXISTS"),])
6144 .config(|this| this.optional()),
6145 Ref::new("ObjectReferenceSegment"),
6146 one_of(vec_of_erased![
6147 Sequence::new(vec_of_erased![
6148 Ref::keyword("RENAME"),
6149 Ref::keyword("TO"),
6150 Ref::new("ObjectReferenceSegment"),
6151 ]),
6152 Sequence::new(vec_of_erased![
6153 Ref::keyword("SET"),
6154 MetaSegment::indent(),
6155 one_of(vec_of_erased![
6156 Sequence::new(vec_of_erased![
6157 one_of(vec_of_erased![
6158 Ref::new("InternalStageParameters"),
6159 Sequence::new(vec_of_erased![
6160 Sequence::new(vec_of_erased![
6161 Ref::keyword("URL"),
6162 Ref::new("EqualsSegment"),
6163 Ref::new("S3Path"),
6164 ])
6165 .config(|this| this.optional()),
6166 Ref::new("S3ExternalStageParameters").optional(),
6167 ]),
6168 Sequence::new(vec_of_erased![
6169 Sequence::new(vec_of_erased![
6170 Ref::keyword("URL"),
6171 Ref::new("EqualsSegment"),
6172 Ref::new("GCSPath"),
6173 ])
6174 .config(|this| this.optional()),
6175 Ref::new("GCSExternalStageParameters").optional(),
6176 ]),
6177 Sequence::new(vec_of_erased![
6178 Sequence::new(vec_of_erased![
6179 Ref::keyword("URL"),
6180 Ref::new("EqualsSegment"),
6181 Ref::new("AzureBlobStoragePath"),
6182 ])
6183 .config(|this| this.optional()),
6184 Ref::new("AzureBlobStorageExternalStageParameters")
6185 .optional(),
6186 ]),
6187 ])
6188 .config(|this| this.optional()),
6189 Sequence::new(vec_of_erased![
6190 Ref::keyword("FILE_FORMAT"),
6191 Ref::new("EqualsSegment"),
6192 Ref::new("FileFormatSegment"),
6193 ])
6194 .config(|this| this.optional()),
6195 Sequence::new(vec_of_erased![
6196 Ref::keyword("COPY_OPTIONS"),
6197 Ref::new("EqualsSegment"),
6198 Bracketed::new(vec_of_erased![Ref::new(
6199 "CopyOptionsSegment"
6200 )]),
6201 ])
6202 .config(|this| this.optional()),
6203 Ref::new("CommentEqualsClauseSegment").optional(),
6204 ]),
6205 Ref::new("TagEqualsSegment"),
6206 ]),
6207 MetaSegment::dedent(),
6208 ]),
6209 Sequence::new(vec_of_erased![
6210 Ref::keyword("REFRESH"),
6211 Sequence::new(vec_of_erased![
6212 Ref::keyword("SUBPATH"),
6213 Ref::new("EqualsSegment"),
6214 Ref::new("QuotedLiteralSegment"),
6215 ])
6216 .config(|this| this.optional()),
6217 ]),
6218 ]),
6219 ])
6220 .to_matchable(),
6221 )
6222 .to_matchable()
6223 .into(),
6224 ),
6225 (
6226 "CreateStreamStatementSegment".into(),
6227 NodeMatcher::new(
6228 SyntaxKind::CreateStreamStatement,
6229 Sequence::new(vec_of_erased![
6230 Ref::keyword("CREATE"),
6231 Ref::new("OrReplaceGrammar").optional(),
6232 Ref::keyword("STREAM"),
6233 Ref::new("IfNotExistsGrammar").optional(),
6234 Ref::new("ObjectReferenceSegment"),
6235 Sequence::new(vec_of_erased![Ref::keyword("COPY"), Ref::keyword("GRANTS"),])
6236 .config(|this| this.optional()),
6237 Ref::keyword("ON"),
6238 one_of(vec_of_erased![
6239 Sequence::new(vec_of_erased![
6240 one_of(vec_of_erased![Ref::keyword("TABLE"), Ref::keyword("VIEW"),]),
6241 Ref::new("ObjectReferenceSegment"),
6242 one_of(vec_of_erased![
6243 Ref::new("FromAtExpressionSegment"),
6244 Ref::new("FromBeforeExpressionSegment"),
6245 ])
6246 .config(|this| this.optional()),
6247 Sequence::new(vec_of_erased![
6248 Ref::keyword("APPEND_ONLY"),
6249 Ref::new("EqualsSegment"),
6250 Ref::new("BooleanLiteralGrammar"),
6251 ])
6252 .config(|this| this.optional()),
6253 Sequence::new(vec_of_erased![
6254 Ref::keyword("SHOW_INITIAL_ROWS"),
6255 Ref::new("EqualsSegment"),
6256 Ref::new("BooleanLiteralGrammar"),
6257 ])
6258 .config(|this| this.optional()),
6259 ]),
6260 Sequence::new(vec_of_erased![
6261 Ref::keyword("EXTERNAL"),
6262 Ref::keyword("TABLE"),
6263 Ref::new("ObjectReferenceSegment"),
6264 one_of(vec_of_erased![
6265 Ref::new("FromAtExpressionSegment"),
6266 Ref::new("FromBeforeExpressionSegment"),
6267 ])
6268 .config(|this| this.optional()),
6269 Sequence::new(vec_of_erased![
6270 Ref::keyword("INSERT_ONLY"),
6271 Ref::new("EqualsSegment"),
6272 Ref::new("TrueSegment"),
6273 ])
6274 .config(|this| this.optional()),
6275 ]),
6276 Sequence::new(vec_of_erased![
6277 Ref::keyword("STAGE"),
6278 Ref::new("ObjectReferenceSegment"),
6279 ]),
6280 ]),
6281 Ref::new("CommentEqualsClauseSegment").optional(),
6282 ])
6283 .to_matchable(),
6284 )
6285 .to_matchable()
6286 .into(),
6287 ),
6288 (
6289 "AlterStreamStatementSegment".into(),
6290 NodeMatcher::new(
6291 SyntaxKind::AlterStreamStatement,
6292 Sequence::new(vec_of_erased![
6293 Ref::keyword("ALTER"),
6294 Ref::keyword("STREAM"),
6295 Ref::new("IfExistsGrammar").optional(),
6296 Ref::new("ObjectReferenceSegment"),
6297 one_of(vec_of_erased![
6298 Sequence::new(vec_of_erased![
6299 Ref::keyword("SET"),
6300 Sequence::new(vec_of_erased![
6301 Ref::keyword("APPEND_ONLY"),
6302 Ref::new("EqualsSegment"),
6303 Ref::new("BooleanLiteralGrammar"),
6304 ])
6305 .config(|this| this.optional()),
6306 Sequence::new(vec_of_erased![
6307 Ref::keyword("INSERT_ONLY"),
6308 Ref::new("EqualsSegment"),
6309 Ref::new("TrueSegment"),
6310 ])
6311 .config(|this| this.optional()),
6312 Ref::new("TagEqualsSegment").optional(),
6313 Ref::new("CommentEqualsClauseSegment").optional(),
6314 ]),
6315 Sequence::new(vec_of_erased![
6316 Ref::keyword("UNSET"),
6317 one_of(vec_of_erased![
6318 Sequence::new(vec_of_erased![
6319 Ref::keyword("TAG"),
6320 Delimited::new(vec_of_erased![Ref::new("TagReferenceSegment")]),
6321 ]),
6322 Ref::keyword("COMMENT"),
6323 ]),
6324 ]),
6325 ]),
6326 ])
6327 .to_matchable(),
6328 )
6329 .to_matchable()
6330 .into(),
6331 ),
6332 (
6333 "ShowStatementSegment".into(),
6334 NodeMatcher::new(SyntaxKind::ShowStatement, {
6335 let object_types_plural = one_of(vec_of_erased![
6336 Ref::keyword("PARAMETERS"),
6337 Sequence::new(vec_of_erased![
6338 Ref::keyword("GLOBAL"),
6339 Ref::keyword("ACCOUNTS"),
6340 ]),
6341 Ref::keyword("REGIONS"),
6342 Sequence::new(vec_of_erased![
6343 Ref::keyword("REPLICATION"),
6344 Ref::keyword("ACCOUNTS"),
6345 ]),
6346 Sequence::new(vec_of_erased![
6347 Ref::keyword("REPLICATION"),
6348 Ref::keyword("DATABASES"),
6349 ]),
6350 Ref::keyword("PARAMETERS"),
6351 Ref::keyword("VARIABLES"),
6352 Ref::keyword("TRANSACTIONS"),
6353 Ref::keyword("LOCKS"),
6354 Ref::keyword("PARAMETERS"),
6355 Ref::keyword("FUNCTIONS"),
6356 Sequence::new(vec_of_erased![
6357 Ref::keyword("NETWORK"),
6358 Ref::keyword("POLICIES"),
6359 ]),
6360 Ref::keyword("SHARES"),
6361 Ref::keyword("ROLES"),
6362 Ref::keyword("GRANTS"),
6363 Ref::keyword("USERS"),
6364 Ref::keyword("WAREHOUSES"),
6365 Ref::keyword("DATABASES"),
6366 Sequence::new(vec_of_erased![
6367 one_of(vec_of_erased![
6368 Ref::keyword("API"),
6369 Ref::keyword("NOTIFICATION"),
6370 Ref::keyword("SECURITY"),
6371 Ref::keyword("STORAGE"),
6372 ])
6373 .config(|this| this.optional()),
6374 Ref::keyword("INTEGRATIONS"),
6375 ]),
6376 Ref::keyword("SCHEMAS"),
6377 Ref::keyword("OBJECTS"),
6378 Ref::keyword("TABLES"),
6379 Sequence::new(vec_of_erased![
6380 Ref::keyword("EXTERNAL"),
6381 Ref::keyword("TABLES"),
6382 ]),
6383 Ref::keyword("VIEWS"),
6384 Sequence::new(vec_of_erased![
6385 Ref::keyword("MATERIALIZED"),
6386 Ref::keyword("VIEWS"),
6387 ]),
6388 Sequence::new(vec_of_erased![
6389 Ref::keyword("MASKING"),
6390 Ref::keyword("POLICIES"),
6391 ]),
6392 Ref::keyword("COLUMNS"),
6393 Sequence::new(vec_of_erased![
6394 Ref::keyword("FILE"),
6395 Ref::keyword("FORMATS"),
6396 ]),
6397 Ref::keyword("SEQUENCES"),
6398 Ref::keyword("STAGES"),
6399 Ref::keyword("PIPES"),
6400 Ref::keyword("STREAMS"),
6401 Ref::keyword("TASKS"),
6402 Sequence::new(vec_of_erased![
6403 Ref::keyword("USER"),
6404 Ref::keyword("FUNCTIONS"),
6405 ]),
6406 Sequence::new(vec_of_erased![
6407 Ref::keyword("EXTERNAL"),
6408 Ref::keyword("FUNCTIONS"),
6409 ]),
6410 Ref::keyword("PROCEDURES"),
6411 Sequence::new(vec_of_erased![
6412 Ref::keyword("FUTURE"),
6413 Ref::keyword("GRANTS"),
6414 ]),
6415 ]);
6416
6417 let object_scope_types = one_of(vec_of_erased![
6418 Ref::keyword("ACCOUNT"),
6419 Ref::keyword("SESSION"),
6420 Sequence::new(vec_of_erased![
6421 one_of(vec_of_erased![
6422 Ref::keyword("DATABASE"),
6423 Ref::keyword("SCHEMA"),
6424 Ref::keyword("SHARE"),
6425 Ref::keyword("ROLE"),
6426 Ref::keyword("TABLE"),
6427 Ref::keyword("TASK"),
6428 Ref::keyword("USER"),
6429 Ref::keyword("WAREHOUSE"),
6430 Ref::keyword("VIEW"),
6431 ]),
6432 Ref::new("ObjectReferenceSegment").optional(),
6433 ]),
6434 ]);
6435
6436 Sequence::new(vec_of_erased![
6437 Ref::keyword("SHOW"),
6438 Ref::keyword("TERSE").optional(),
6439 object_types_plural,
6440 Ref::keyword("HISTORY").optional(),
6441 Sequence::new(vec_of_erased![
6442 Ref::keyword("LIKE"),
6443 Ref::new("QuotedLiteralSegment"),
6444 ])
6445 .config(|this| this.optional()),
6446 Sequence::new(vec_of_erased![
6447 one_of(vec_of_erased![
6448 Ref::keyword("ON"),
6449 Ref::keyword("TO"),
6450 Ref::keyword("OF"),
6451 Ref::keyword("IN"),
6452 ]),
6453 one_of(vec_of_erased![
6454 Sequence::new(vec_of_erased![object_scope_types]),
6455 Ref::new("ObjectReferenceSegment"),
6456 ]),
6457 ])
6458 .config(|this| this.optional()),
6459 Sequence::new(vec_of_erased![
6460 Ref::keyword("STARTS"),
6461 Ref::keyword("WITH"),
6462 Ref::new("QuotedLiteralSegment"),
6463 ])
6464 .config(|this| this.optional()),
6465 Sequence::new(vec_of_erased![
6466 Ref::keyword("WITH"),
6467 Ref::keyword("PRIMARY"),
6468 Ref::new("ObjectReferenceSegment"),
6469 ])
6470 .config(|this| this.optional()),
6471 Sequence::new(vec_of_erased![
6472 Ref::new("LimitClauseSegment"),
6473 Sequence::new(vec_of_erased![
6474 Ref::keyword("FROM"),
6475 Ref::new("QuotedLiteralSegment"),
6476 ])
6477 .config(|this| this.optional()),
6478 ])
6479 .config(|this| this.optional()),
6480 ])
6481 .to_matchable()
6482 })
6483 .to_matchable()
6484 .into(),
6485 ),
6486 (
6487 "AlterUserStatementSegment".into(),
6488 NodeMatcher::new(
6489 SyntaxKind::AlterUserStatement,
6490 Sequence::new(vec_of_erased![
6491 Ref::keyword("ALTER"),
6492 Ref::keyword("USER"),
6493 Sequence::new(vec_of_erased![Ref::keyword("IF"), Ref::keyword("EXISTS"),])
6494 .config(|this| this.optional()),
6495 Ref::new("RoleReferenceSegment"),
6496 one_of(vec_of_erased![
6497 Sequence::new(vec_of_erased![
6498 Ref::keyword("RENAME"),
6499 Ref::keyword("TO"),
6500 Ref::new("ObjectReferenceSegment"),
6501 ]),
6502 Sequence::new(vec_of_erased![
6503 Ref::keyword("RESET"),
6504 Ref::keyword("PASSWORD"),
6505 ]),
6506 Sequence::new(vec_of_erased![
6507 Ref::keyword("ABORT"),
6508 Ref::keyword("ALL"),
6509 Ref::keyword("QUERIES"),
6510 ]),
6511 Sequence::new(vec_of_erased![
6512 Ref::keyword("ADD"),
6513 Ref::keyword("DELEGATED"),
6514 Ref::keyword("AUTHORIZATION"),
6515 Ref::keyword("OF"),
6516 Ref::keyword("ROLE"),
6517 Ref::new("ObjectReferenceSegment"),
6518 Ref::keyword("TO"),
6519 Ref::keyword("SECURITY"),
6520 Ref::keyword("INTEGRATION"),
6521 Ref::new("ObjectReferenceSegment"),
6522 ]),
6523 Sequence::new(vec_of_erased![
6524 Ref::keyword("REMOVE"),
6525 Ref::keyword("DELEGATED"),
6526 one_of(vec_of_erased![
6527 Sequence::new(vec_of_erased![
6528 Ref::keyword("AUTHORIZATION"),
6529 Ref::keyword("OF"),
6530 Ref::keyword("ROLE"),
6531 Ref::new("ObjectReferenceSegment"),
6532 ]),
6533 Ref::keyword("AUTHORIZATIONS"),
6534 ]),
6535 Ref::keyword("FROM"),
6536 Ref::keyword("SECURITY"),
6537 Ref::keyword("INTEGRATION"),
6538 Ref::new("ObjectReferenceSegment"),
6539 ]),
6540 Sequence::new(vec_of_erased![
6541 Ref::keyword("SET"),
6542 Delimited::new(vec_of_erased![Sequence::new(vec_of_erased![
6543 Ref::new("ParameterNameSegment"),
6544 Ref::new("EqualsSegment"),
6545 one_of(vec_of_erased![
6546 Ref::new("LiteralGrammar"),
6547 Ref::new("ObjectReferenceSegment"),
6548 ]),
6549 ]),]),
6550 ]),
6551 Sequence::new(vec_of_erased![
6552 Ref::keyword("UNSET"),
6553 Delimited::new(vec_of_erased![Ref::new("ParameterNameSegment")]),
6554 ]),
6555 ]),
6556 ])
6557 .to_matchable(),
6558 )
6559 .to_matchable()
6560 .into(),
6561 ),
6562 ]);
6563
6564 snowflake_dialect.replace_grammar(
6565 "CreateRoleStatementSegment",
6566 Sequence::new(vec_of_erased![
6567 Ref::keyword("CREATE"),
6568 Sequence::new(vec_of_erased![Ref::keyword("OR"), Ref::keyword("REPLACE"),])
6569 .config(|this| this.optional()),
6570 Ref::keyword("ROLE"),
6571 Sequence::new(vec_of_erased![
6572 Ref::keyword("IF"),
6573 Ref::keyword("NOT"),
6574 Ref::keyword("EXISTS"),
6575 ])
6576 .config(|this| this.optional()),
6577 Ref::new("RoleReferenceSegment"),
6578 Sequence::new(vec_of_erased![
6579 Ref::keyword("COMMENT"),
6580 Ref::new("EqualsSegment"),
6581 Ref::new("QuotedLiteralSegment"),
6582 ])
6583 .config(|this| this.optional()),
6584 ])
6585 .to_matchable(),
6586 );
6587
6588 snowflake_dialect.replace_grammar(
6589 "ExplainStatementSegment",
6590 Sequence::new(vec_of_erased![
6591 Ref::keyword("EXPLAIN"),
6592 Sequence::new(vec_of_erased![
6593 Ref::keyword("USING"),
6594 one_of(vec_of_erased![
6595 Ref::keyword("TABULAR"),
6596 Ref::keyword("JSON"),
6597 Ref::keyword("TEXT"),
6598 ]),
6599 ])
6600 .config(|this| this.optional()),
6601 ansi::explainable_stmt(),
6602 ])
6603 .to_matchable(),
6604 );
6605
6606 snowflake_dialect.add([
6607 (
6608 "AlterSessionStatementSegment".into(),
6609 NodeMatcher::new(
6610 SyntaxKind::AlterSessionStatement,
6611 Sequence::new(vec_of_erased![
6612 Ref::keyword("ALTER"),
6613 Ref::keyword("SESSION"),
6614 one_of(vec_of_erased![
6615 Ref::new("AlterSessionSetClauseSegment"),
6616 Ref::new("AlterSessionUnsetClauseSegment"),
6617 ]),
6618 ])
6619 .to_matchable(),
6620 )
6621 .to_matchable()
6622 .into(),
6623 ),
6624 (
6625 "AlterSessionSetClauseSegment".into(),
6626 NodeMatcher::new(
6627 SyntaxKind::AlterSessionSetStatement,
6628 Sequence::new(vec_of_erased![
6629 Ref::keyword("SET"),
6630 Ref::new("ParameterNameSegment"),
6631 Ref::new("EqualsSegment"),
6632 one_of(vec_of_erased![
6633 Ref::new("BooleanLiteralGrammar"),
6634 Ref::new("QuotedLiteralSegment"),
6635 Ref::new("NumericLiteralSegment"),
6636 ]),
6637 ])
6638 .to_matchable(),
6639 )
6640 .to_matchable()
6641 .into(),
6642 ),
6643 (
6644 "AlterSessionUnsetClauseSegment".into(),
6645 NodeMatcher::new(
6646 SyntaxKind::AlterSessionUnsetClause,
6647 Sequence::new(vec_of_erased![
6648 Ref::keyword("UNSET"),
6649 Delimited::new(vec_of_erased![Ref::new("ParameterNameSegment")]),
6650 ])
6651 .to_matchable(),
6652 )
6653 .to_matchable()
6654 .into(),
6655 ),
6656 (
6657 "AlterTaskStatementSegment".into(),
6658 NodeMatcher::new(
6659 SyntaxKind::AlterTaskStatement,
6660 Sequence::new(vec_of_erased![
6661 Ref::keyword("ALTER"),
6662 Ref::keyword("TASK"),
6663 Sequence::new(vec_of_erased![Ref::keyword("IF"), Ref::keyword("EXISTS"),])
6664 .config(|this| this.optional()),
6665 Ref::new("ObjectReferenceSegment"),
6666 one_of(vec_of_erased![
6667 Ref::keyword("RESUME"),
6668 Ref::keyword("SUSPEND"),
6669 Sequence::new(vec_of_erased![
6670 Ref::keyword("REMOVE"),
6671 Ref::keyword("AFTER"),
6672 Ref::new("ObjectReferenceSegment"),
6673 ]),
6674 Sequence::new(vec_of_erased![
6675 Ref::keyword("ADD"),
6676 Ref::keyword("AFTER"),
6677 Ref::new("ObjectReferenceSegment"),
6678 ]),
6679 Ref::new("AlterTaskSpecialSetClauseSegment"),
6680 Ref::new("AlterTaskSetClauseSegment"),
6681 Ref::new("AlterTaskUnsetClauseSegment"),
6682 Sequence::new(vec_of_erased![
6683 Ref::keyword("MODIFY"),
6684 Ref::keyword("AS"),
6685 ansi::explainable_stmt(),
6686 ]),
6687 Sequence::new(vec_of_erased![
6688 Ref::keyword("MODIFY"),
6689 Ref::keyword("WHEN"),
6690 Ref::new("BooleanLiteralGrammar"),
6691 ]),
6692 ]),
6693 ])
6694 .to_matchable(),
6695 )
6696 .to_matchable()
6697 .into(),
6698 ),
6699 (
6700 "AlterTaskSpecialSetClauseSegment".into(),
6701 NodeMatcher::new(
6702 SyntaxKind::AlterTaskSpecialSetClause,
6703 Sequence::new(vec_of_erased![
6704 Ref::keyword("SET"),
6705 any_set_of(vec_of_erased![
6706 Sequence::new(vec_of_erased![
6707 Ref::keyword("WAREHOUSE"),
6708 Ref::new("EqualsSegment"),
6709 Ref::new("ObjectReferenceSegment"),
6710 ])
6711 .config(|this| this.optional()),
6712 Sequence::new(vec_of_erased![
6713 Ref::keyword("SCHEDULE"),
6714 Ref::new("EqualsSegment"),
6715 Ref::new("QuotedLiteralSegment"),
6716 ])
6717 .config(|this| this.optional()),
6718 Sequence::new(vec_of_erased![
6719 Ref::keyword("ALLOW_OVERLAPPING_EXECUTION"),
6720 Ref::new("EqualsSegment"),
6721 Ref::new("BooleanLiteralGrammar"),
6722 ])
6723 .config(|this| this.optional()),
6724 ])
6725 .config(|this| this.min_times(1)),
6726 ])
6727 .to_matchable(),
6728 )
6729 .to_matchable()
6730 .into(),
6731 ),
6732 (
6733 "AlterTaskSetClauseSegment".into(),
6734 NodeMatcher::new(
6735 SyntaxKind::AlterTaskSetClause,
6736 Sequence::new(vec_of_erased![
6737 Ref::keyword("SET"),
6738 Delimited::new(vec_of_erased![Sequence::new(vec_of_erased![
6739 Ref::new("ParameterNameSegment"),
6740 Ref::new("EqualsSegment"),
6741 one_of(vec_of_erased![
6742 Ref::new("BooleanLiteralGrammar"),
6743 Ref::new("QuotedLiteralSegment"),
6744 Ref::new("NumericLiteralSegment"),
6745 ]),
6746 ]),]),
6747 ])
6748 .to_matchable(),
6749 )
6750 .to_matchable()
6751 .into(),
6752 ),
6753 (
6754 "AlterTaskUnsetClauseSegment".into(),
6755 NodeMatcher::new(
6756 SyntaxKind::AlterTaskUnsetClause,
6757 Sequence::new(vec_of_erased![
6758 Ref::keyword("UNSET"),
6759 Delimited::new(vec_of_erased![Ref::new("ParameterNameSegment")]),
6760 ])
6761 .to_matchable(),
6762 )
6763 .to_matchable()
6764 .into(),
6765 ),
6766 (
6767 "ExecuteTaskClauseSegment".into(),
6768 NodeMatcher::new(
6769 SyntaxKind::ExecuteTaskClause,
6770 Sequence::new(vec_of_erased![
6771 Ref::keyword("EXECUTE"),
6772 Ref::keyword("TASK"),
6773 Ref::new("ObjectReferenceSegment"),
6774 ])
6775 .to_matchable(),
6776 )
6777 .to_matchable()
6778 .into(),
6779 ),
6780 ]);
6781
6782 snowflake_dialect.replace_grammar(
6783 "MergeUpdateClauseSegment",
6784 Sequence::new(vec_of_erased![
6785 Ref::keyword("UPDATE"),
6786 Ref::new("SetClauseListSegment"),
6787 Ref::new("WhereClauseSegment").optional(),
6788 ])
6789 .to_matchable(),
6790 );
6791
6792 snowflake_dialect.replace_grammar(
6793 "MergeDeleteClauseSegment",
6794 Sequence::new(vec_of_erased![
6795 Ref::keyword("DELETE"),
6796 Ref::new("WhereClauseSegment").optional(),
6797 ])
6798 .to_matchable(),
6799 );
6800
6801 snowflake_dialect.replace_grammar(
6802 "MergeInsertClauseSegment",
6803 Sequence::new(vec_of_erased![
6804 Ref::keyword("INSERT"),
6805 MetaSegment::indent(),
6806 Ref::new("BracketedColumnReferenceListGrammar").optional(),
6807 MetaSegment::dedent(),
6808 Ref::new("ValuesClauseSegment").optional(),
6809 Ref::new("WhereClauseSegment").optional(),
6810 ])
6811 .to_matchable(),
6812 );
6813
6814 snowflake_dialect.add([
6815 (
6816 "DeleteStatementSegment".into(),
6817 NodeMatcher::new(
6818 SyntaxKind::DeleteStatement,
6819 Sequence::new(vec_of_erased![
6820 Ref::keyword("DELETE"),
6821 Ref::keyword("FROM"),
6822 Ref::new("TableReferenceSegment"),
6823 Ref::new("AliasExpressionSegment").optional(),
6824 Sequence::new(vec_of_erased![
6825 Ref::keyword("USING"),
6826 MetaSegment::indent(),
6827 Delimited::new(vec_of_erased![Sequence::new(vec_of_erased![
6828 Ref::new("TableExpressionSegment"),
6829 Ref::new("AliasExpressionSegment").optional(),
6830 ]),]),
6831 MetaSegment::dedent(),
6832 ])
6833 .config(|this| this.optional()),
6834 Ref::new("WhereClauseSegment").optional(),
6835 ])
6836 .to_matchable(),
6837 )
6838 .to_matchable()
6839 .into(),
6840 ),
6841 (
6842 "DescribeStatementSegment".into(),
6843 NodeMatcher::new(
6844 SyntaxKind::DescribeStatement,
6845 Sequence::new(vec_of_erased![
6846 one_of(vec_of_erased![
6847 Ref::keyword("DESCRIBE"),
6848 Ref::keyword("DESC"),
6849 ]),
6850 one_of(vec_of_erased![
6851 Sequence::new(vec_of_erased![
6852 Ref::keyword("RESULT"),
6853 one_of(vec_of_erased![
6854 Ref::new("QuotedLiteralSegment"),
6855 Sequence::new(vec_of_erased![
6856 Ref::keyword("LAST_QUERY_ID"),
6857 Bracketed::new(vec_of_erased![]),
6858 ]),
6859 ]),
6860 ]),
6861 Sequence::new(vec_of_erased![
6862 Ref::keyword("NETWORK"),
6863 Ref::keyword("POLICY"),
6864 Ref::new("ObjectReferenceSegment"),
6865 ]),
6866 Sequence::new(vec_of_erased![
6867 Ref::keyword("SHARE"),
6868 Ref::new("ObjectReferenceSegment"),
6869 Sequence::new(vec_of_erased![
6870 Ref::new("DotSegment"),
6871 Ref::new("ObjectReferenceSegment"),
6872 ])
6873 .config(|this| this.optional()),
6874 ]),
6875 Sequence::new(vec_of_erased![
6876 Ref::keyword("USER"),
6877 Ref::new("ObjectReferenceSegment"),
6878 ]),
6879 Sequence::new(vec_of_erased![
6880 Ref::keyword("WAREHOUSE"),
6881 Ref::new("ObjectReferenceSegment"),
6882 ]),
6883 Sequence::new(vec_of_erased![
6884 Ref::keyword("DATABASE"),
6885 Ref::new("DatabaseReferenceSegment"),
6886 ]),
6887 Sequence::new(vec_of_erased![
6888 one_of(vec_of_erased![
6889 Ref::keyword("API"),
6890 Ref::keyword("NOTIFICATION"),
6891 Ref::keyword("SECURITY"),
6892 Ref::keyword("STORAGE"),
6893 ])
6894 .config(|this| this.optional()),
6895 Ref::keyword("INTEGRATION"),
6896 Ref::new("ObjectReferenceSegment"),
6897 ]),
6898 Sequence::new(vec_of_erased![
6899 Ref::keyword("SESSION"),
6900 Ref::keyword("POLICY"),
6901 Ref::new("ObjectReferenceSegment"),
6902 ]),
6903 Sequence::new(vec_of_erased![
6904 Ref::keyword("SCHEMA"),
6905 Ref::new("SchemaReferenceSegment"),
6906 ]),
6907 Sequence::new(vec_of_erased![
6908 Ref::keyword("TABLE"),
6909 Ref::new("TableReferenceSegment"),
6910 Sequence::new(vec_of_erased![
6911 Ref::keyword("TYPE"),
6912 Ref::new("EqualsSegment"),
6913 one_of(vec_of_erased![
6914 Ref::keyword("COLUMNS"),
6915 Ref::keyword("STAGE"),
6916 ]),
6917 ])
6918 .config(|this| this.optional()),
6919 ]),
6920 Sequence::new(vec_of_erased![
6921 Ref::keyword("EXTERNAL"),
6922 Ref::keyword("TABLE"),
6923 Ref::new("TableReferenceSegment"),
6924 Sequence::new(vec_of_erased![
6925 Ref::keyword("TYPE"),
6926 Ref::new("EqualsSegment"),
6927 one_of(vec_of_erased![
6928 Ref::keyword("COLUMNS"),
6929 Ref::keyword("STAGE"),
6930 ]),
6931 ])
6932 .config(|this| this.optional()),
6933 ]),
6934 Sequence::new(vec_of_erased![
6935 Ref::keyword("VIEW"),
6936 Ref::new("TableReferenceSegment"),
6937 ]),
6938 Sequence::new(vec_of_erased![
6939 Ref::keyword("MATERIALIZED"),
6940 Ref::keyword("VIEW"),
6941 Ref::new("TableReferenceSegment"),
6942 ]),
6943 Sequence::new(vec_of_erased![
6944 Ref::keyword("SEQUENCE"),
6945 Ref::new("SequenceReferenceSegment"),
6946 ]),
6947 Sequence::new(vec_of_erased![
6948 Ref::keyword("MASKING"),
6949 Ref::keyword("POLICY"),
6950 Ref::new("ObjectReferenceSegment"),
6951 ]),
6952 Sequence::new(vec_of_erased![
6953 Ref::keyword("ROW"),
6954 Ref::keyword("ACCESS"),
6955 Ref::keyword("POLICY"),
6956 Ref::new("ObjectReferenceSegment"),
6957 ]),
6958 Sequence::new(vec_of_erased![
6959 Ref::keyword("FILE"),
6960 Ref::keyword("FORMAT"),
6961 Ref::new("ObjectReferenceSegment"),
6962 ]),
6963 Sequence::new(vec_of_erased![
6964 Ref::keyword("STAGE"),
6965 Ref::new("ObjectReferenceSegment"),
6966 ]),
6967 Sequence::new(vec_of_erased![
6968 Ref::keyword("PIPE"),
6969 Ref::new("ObjectReferenceSegment"),
6970 ]),
6971 Sequence::new(vec_of_erased![
6972 Ref::keyword("STREAM"),
6973 Ref::new("ObjectReferenceSegment"),
6974 ]),
6975 Sequence::new(vec_of_erased![
6976 Ref::keyword("TASK"),
6977 Ref::new("ObjectReferenceSegment"),
6978 ]),
6979 Sequence::new(vec_of_erased![
6980 Ref::keyword("FUNCTION"),
6981 Ref::new("FunctionNameSegment"),
6982 Bracketed::new(vec_of_erased![
6983 Delimited::new(vec_of_erased![Ref::new("DatatypeSegment"),])
6984 .config(|this| this.optional()),
6985 ]),
6986 ]),
6987 Sequence::new(vec_of_erased![
6988 Ref::keyword("PROCEDURE"),
6989 Ref::new("FunctionNameSegment"),
6990 Bracketed::new(vec_of_erased![
6991 Delimited::new(vec_of_erased![Ref::new("DatatypeSegment"),])
6992 .config(|this| this.optional()),
6993 ]),
6994 ]),
6995 ]),
6996 ])
6997 .to_matchable(),
6998 )
6999 .to_matchable()
7000 .into(),
7001 ),
7002 ]);
7003
7004 snowflake_dialect.replace_grammar(
7005 "TransactionStatementSegment",
7006 one_of(vec_of_erased![
7007 Sequence::new(vec_of_erased![
7008 Ref::keyword("BEGIN"),
7009 one_of(vec_of_erased![
7010 Ref::keyword("WORK"),
7011 Ref::keyword("TRANSACTION"),
7012 ])
7013 .config(|this| this.optional()),
7014 Sequence::new(vec_of_erased![
7015 Ref::keyword("NAME"),
7016 Ref::new("ObjectReferenceSegment"),
7017 ])
7018 .config(|this| this.optional()),
7019 ]),
7020 Sequence::new(vec_of_erased![
7021 Ref::keyword("START"),
7022 Ref::keyword("TRANSACTION"),
7023 Sequence::new(vec_of_erased![
7024 Ref::keyword("NAME"),
7025 Ref::new("ObjectReferenceSegment"),
7026 ])
7027 .config(|this| this.optional()),
7028 ]),
7029 Sequence::new(vec_of_erased![
7030 Ref::keyword("COMMIT"),
7031 Ref::keyword("WORK").optional(),
7032 ]),
7033 Ref::keyword("ROLLBACK"),
7034 ])
7035 .to_matchable(),
7036 );
7037
7038 snowflake_dialect.replace_grammar(
7039 "TruncateStatementSegment",
7040 Sequence::new(vec_of_erased![
7041 Ref::keyword("TRUNCATE"),
7042 Ref::keyword("TABLE").optional(),
7043 Sequence::new(vec_of_erased![Ref::keyword("IF"), Ref::keyword("EXISTS"),])
7044 .config(|this| this.optional()),
7045 Ref::new("TableReferenceSegment"),
7046 ])
7047 .to_matchable(),
7048 );
7049
7050 snowflake_dialect.add([
7051 (
7052 "UnsetStatementSegment".into(),
7053 NodeMatcher::new(
7054 SyntaxKind::UnsetStatement,
7055 Sequence::new(vec_of_erased![
7056 Ref::keyword("UNSET"),
7057 one_of(vec_of_erased![
7058 Ref::new("LocalVariableNameSegment"),
7059 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![Ref::new(
7060 "LocalVariableNameSegment"
7061 ),]),]),
7062 ]),
7063 ])
7064 .to_matchable(),
7065 )
7066 .to_matchable()
7067 .into(),
7068 ),
7069 (
7070 "UndropStatementSegment".into(),
7071 NodeMatcher::new(
7072 SyntaxKind::UndropStatement,
7073 Sequence::new(vec_of_erased![
7074 Ref::keyword("UNDROP"),
7075 one_of(vec_of_erased![
7076 Sequence::new(vec_of_erased![
7077 Ref::keyword("DATABASE"),
7078 Ref::new("DatabaseReferenceSegment"),
7079 ]),
7080 Sequence::new(vec_of_erased![
7081 Ref::keyword("SCHEMA"),
7082 Ref::new("SchemaReferenceSegment"),
7083 ]),
7084 Sequence::new(vec_of_erased![
7085 Ref::keyword("TABLE"),
7086 Ref::new("TableReferenceSegment"),
7087 ]),
7088 ]),
7089 ])
7090 .to_matchable(),
7091 )
7092 .to_matchable()
7093 .into(),
7094 ),
7095 (
7096 "CommentStatementSegment".into(),
7097 NodeMatcher::new(
7098 SyntaxKind::CommentStatement,
7099 Sequence::new(vec_of_erased![
7100 Ref::keyword("COMMENT"),
7101 Sequence::new(vec_of_erased![Ref::keyword("IF"), Ref::keyword("EXISTS"),])
7102 .config(|this| this.optional()),
7103 Ref::keyword("ON"),
7104 one_of(vec_of_erased![
7105 Ref::keyword("COLUMN"),
7106 Ref::keyword("TABLE"),
7107 Ref::keyword("VIEW"),
7108 Ref::keyword("SCHEMA"),
7109 Ref::keyword("DATABASE"),
7110 Ref::keyword("WAREHOUSE"),
7111 Ref::keyword("USER"),
7112 Ref::keyword("STAGE"),
7113 Ref::keyword("FUNCTION"),
7114 Ref::keyword("PROCEDURE"),
7115 Ref::keyword("SEQUENCE"),
7116 Ref::keyword("SHARE"),
7117 Ref::keyword("PIPE"),
7118 Ref::keyword("STREAM"),
7119 Ref::keyword("TASK"),
7120 Sequence::new(vec_of_erased![
7121 Ref::keyword("NETWORK"),
7122 Ref::keyword("POLICY"),
7123 ]),
7124 Sequence::new(vec_of_erased![
7125 one_of(vec_of_erased![
7126 Ref::keyword("API"),
7127 Ref::keyword("NOTIFICATION"),
7128 Ref::keyword("SECURITY"),
7129 Ref::keyword("STORAGE"),
7130 ]),
7131 Ref::keyword("INTEGRATION"),
7132 ]),
7133 Sequence::new(vec_of_erased![
7134 Ref::keyword("SESSION"),
7135 Ref::keyword("POLICY"),
7136 ]),
7137 Sequence::new(vec_of_erased![
7138 Ref::keyword("EXTERNAL"),
7139 Ref::keyword("TABLE"),
7140 ]),
7141 Sequence::new(vec_of_erased![
7142 Ref::keyword("MATERIALIZED"),
7143 Ref::keyword("VIEW"),
7144 ]),
7145 Sequence::new(vec_of_erased![
7146 Ref::keyword("MASKING"),
7147 Ref::keyword("POLICY"),
7148 ]),
7149 Sequence::new(vec_of_erased![
7150 Ref::keyword("ROW"),
7151 Ref::keyword("ACCESS"),
7152 Ref::keyword("POLICY"),
7153 ]),
7154 Sequence::new(
7155 vec_of_erased![Ref::keyword("FILE"), Ref::keyword("FORMAT"),]
7156 ),
7157 ]),
7158 Ref::new("ObjectReferenceSegment"),
7159 Ref::keyword("IS"),
7160 Ref::new("QuotedLiteralSegment"),
7161 ])
7162 .to_matchable(),
7163 )
7164 .to_matchable()
7165 .into(),
7166 ),
7167 ]);
7168
7169 snowflake_dialect.replace_grammar(
7170 "UseStatementSegment",
7171 Sequence::new(vec_of_erased![
7172 Ref::keyword("USE"),
7173 one_of(vec_of_erased![
7174 Sequence::new(vec_of_erased![
7175 Ref::keyword("ROLE"),
7176 Ref::new("ObjectReferenceSegment"),
7177 ]),
7178 Sequence::new(vec_of_erased![
7179 Ref::keyword("WAREHOUSE"),
7180 Ref::new("ObjectReferenceSegment"),
7181 ]),
7182 Sequence::new(vec_of_erased![
7183 Ref::keyword("DATABASE").optional(),
7184 Ref::new("DatabaseReferenceSegment"),
7185 ]),
7186 Sequence::new(vec_of_erased![
7187 Ref::keyword("SCHEMA").optional(),
7188 Ref::new("SchemaReferenceSegment"),
7189 ]),
7190 Sequence::new(vec_of_erased![
7191 Ref::keyword("SECONDARY"),
7192 Ref::keyword("ROLES"),
7193 one_of(vec_of_erased![Ref::keyword("ALL"), Ref::keyword("NONE"),]),
7194 ]),
7195 ]),
7196 ])
7197 .to_matchable(),
7198 );
7199
7200 snowflake_dialect.add([(
7201 "CallStatementSegment".into(),
7202 NodeMatcher::new(
7203 SyntaxKind::CallStatement,
7204 Sequence::new(vec_of_erased![
7205 Ref::keyword("CALL"),
7206 Sequence::new(vec_of_erased![
7207 Ref::new("FunctionNameSegment"),
7208 Bracketed::new(vec_of_erased![
7209 Ref::new("FunctionContentsGrammar").optional(),
7210 ])
7211 .config(|this| this.parse_mode(ParseMode::Greedy)),
7212 ]),
7213 ])
7214 .to_matchable(),
7215 )
7216 .to_matchable()
7217 .into(),
7218 )]);
7219
7220 snowflake_dialect.replace_grammar(
7221 "LimitClauseSegment",
7222 one_of(vec_of_erased![
7223 Sequence::new(vec_of_erased![
7224 Ref::keyword("LIMIT"),
7225 MetaSegment::indent(),
7226 Ref::new("LimitLiteralGrammar"),
7227 MetaSegment::dedent(),
7228 Sequence::new(vec_of_erased![
7229 Ref::keyword("OFFSET"),
7230 MetaSegment::indent(),
7231 Ref::new("LimitLiteralGrammar"),
7232 MetaSegment::dedent(),
7233 ])
7234 .config(|this| this.optional()),
7235 ]),
7236 Sequence::new(vec_of_erased![
7237 Sequence::new(vec_of_erased![
7238 Ref::keyword("OFFSET"),
7239 MetaSegment::indent(),
7240 Ref::new("LimitLiteralGrammar"),
7241 one_of(vec_of_erased![Ref::keyword("ROW"), Ref::keyword("ROWS"),])
7242 .config(|this| this.optional()),
7243 MetaSegment::dedent(),
7244 ])
7245 .config(|this| this.optional()),
7246 Ref::keyword("FETCH"),
7247 MetaSegment::indent(),
7248 one_of(vec_of_erased![Ref::keyword("FIRST"), Ref::keyword("NEXT"),])
7249 .config(|this| this.optional()),
7250 Ref::new("LimitLiteralGrammar"),
7251 one_of(vec_of_erased![Ref::keyword("ROW"), Ref::keyword("ROWS"),])
7252 .config(|this| this.optional()),
7253 Ref::keyword("ONLY").optional(),
7254 MetaSegment::dedent(),
7255 ]),
7256 ])
7257 .to_matchable(),
7258 );
7259
7260 snowflake_dialect.replace_grammar(
7261 "SelectClauseSegment",
7262 ansi::select_clause_segment().copy(
7263 None,
7264 None,
7265 None,
7266 None,
7267 vec_of_erased![Ref::keyword("FETCH"), Ref::keyword("OFFSET")],
7268 false,
7269 ),
7270 );
7271
7272 snowflake_dialect.replace_grammar(
7273 "OrderByClauseSegment",
7274 Sequence::new(vec_of_erased![
7275 Ref::keyword("ORDER"),
7276 Ref::keyword("BY"),
7277 MetaSegment::indent(),
7278 Delimited::new(vec_of_erased![Sequence::new(vec_of_erased![
7279 one_of(vec_of_erased![
7280 Ref::new("ColumnReferenceSegment"),
7281 Ref::new("NumericLiteralSegment"),
7282 Ref::new("ExpressionSegment"),
7283 ]),
7284 one_of(vec_of_erased![Ref::keyword("ASC"), Ref::keyword("DESC"),])
7285 .config(|this| this.optional()),
7286 Sequence::new(vec_of_erased![
7287 Ref::keyword("NULLS"),
7288 one_of(vec_of_erased![Ref::keyword("FIRST"), Ref::keyword("LAST"),]),
7289 ])
7290 .config(|this| this.optional()),
7291 ]),])
7292 .config(|this| this.terminators = vec_of_erased![
7293 Ref::keyword("LIMIT"),
7294 Ref::keyword("FETCH"),
7295 Ref::keyword("OFFSET"),
7296 Ref::new("FrameClauseUnitGrammar")
7297 ]),
7298 MetaSegment::dedent(),
7299 ])
7300 .to_matchable(),
7301 );
7302
7303 snowflake_dialect.replace_grammar("FrameClauseSegment", {
7304 let frame_extent = one_of(vec_of_erased![
7305 Sequence::new(vec_of_erased![Ref::keyword("CURRENT"), Ref::keyword("ROW"),]),
7306 Sequence::new(vec_of_erased![
7307 one_of(vec_of_erased![
7308 Ref::new("NumericLiteralSegment"),
7309 Ref::new("ReferencedVariableNameSegment"),
7310 Ref::keyword("UNBOUNDED"),
7311 ]),
7312 one_of(vec_of_erased![
7313 Ref::keyword("PRECEDING"),
7314 Ref::keyword("FOLLOWING"),
7315 ]),
7316 ]),
7317 ]);
7318
7319 Sequence::new(vec_of_erased![
7320 Ref::new("FrameClauseUnitGrammar"),
7321 one_of(vec_of_erased![
7322 frame_extent.clone(),
7323 Sequence::new(vec_of_erased![
7324 Ref::keyword("BETWEEN"),
7325 frame_extent.clone(),
7326 Ref::keyword("AND"),
7327 frame_extent,
7328 ]),
7329 ]),
7330 ])
7331 .to_matchable()
7332 });
7333
7334 snowflake_dialect.add([
7335 (
7336 "DropProcedureStatementSegment".into(),
7337 NodeMatcher::new(
7338 SyntaxKind::DropProcedureStatement,
7339 Sequence::new(vec_of_erased![
7340 Ref::keyword("DROP"),
7341 Ref::keyword("PROCEDURE"),
7342 Ref::new("IfExistsGrammar").optional(),
7343 Ref::new("FunctionNameSegment"),
7344 Ref::new("FunctionParameterListGrammar"),
7345 ])
7346 .to_matchable(),
7347 )
7348 .to_matchable()
7349 .into(),
7350 ),
7351 (
7352 "DropExternalTableStatementSegment".into(),
7353 NodeMatcher::new(
7354 SyntaxKind::DropExternalTableStatement,
7355 Sequence::new(vec_of_erased![
7356 Ref::keyword("DROP"),
7357 Ref::keyword("EXTERNAL"),
7358 Ref::keyword("TABLE"),
7359 Ref::new("IfExistsGrammar").optional(),
7360 Ref::new("TableReferenceSegment"),
7361 Ref::new("DropBehaviorGrammar").optional(),
7362 ])
7363 .to_matchable(),
7364 )
7365 .to_matchable()
7366 .into(),
7367 ),
7368 (
7369 "DropFunctionStatementSegment".into(),
7370 NodeMatcher::new(
7371 SyntaxKind::DropFunctionStatement,
7372 Sequence::new(vec_of_erased![
7373 Ref::keyword("DROP"),
7374 Ref::keyword("EXTERNAL").optional(),
7375 Ref::keyword("FUNCTION"),
7376 Ref::new("IfExistsGrammar").optional(),
7377 Ref::new("FunctionNameSegment"),
7378 Ref::new("FunctionParameterListGrammar"),
7379 ])
7380 .to_matchable(),
7381 )
7382 .to_matchable()
7383 .into(),
7384 ),
7385 (
7386 "DropMaterializedViewStatementSegment".into(),
7387 NodeMatcher::new(
7388 SyntaxKind::DropMaterializedViewStatement,
7389 Sequence::new(vec_of_erased![
7390 Ref::keyword("DROP"),
7391 Ref::keyword("MATERIALIZED"),
7392 Ref::keyword("VIEW"),
7393 Ref::new("IfExistsGrammar").optional(),
7394 Ref::new("TableReferenceSegment"),
7395 ])
7396 .to_matchable(),
7397 )
7398 .to_matchable()
7399 .into(),
7400 ),
7401 (
7402 "DropObjectStatementSegment".into(),
7403 NodeMatcher::new(
7404 SyntaxKind::DropObjectStatement,
7405 Sequence::new(vec_of_erased![
7406 Ref::keyword("DROP"),
7407 one_of(vec_of_erased![
7408 Sequence::new(vec_of_erased![
7409 one_of(vec_of_erased![
7410 Ref::keyword("CONNECTION"),
7411 Sequence::new(vec_of_erased![
7412 Ref::keyword("FILE"),
7413 Ref::keyword("FORMAT"),
7414 ]),
7415 Sequence::new(vec_of_erased![
7416 one_of(vec_of_erased![
7417 Ref::keyword("API"),
7418 Ref::keyword("NOTIFICATION"),
7419 Ref::keyword("SECURITY"),
7420 Ref::keyword("STORAGE"),
7421 ])
7422 .config(|this| this.optional()),
7423 Ref::keyword("INTEGRATION"),
7424 ]),
7425 Ref::keyword("PIPE"),
7426 Sequence::new(vec_of_erased![
7427 Ref::keyword("ROW"),
7428 Ref::keyword("ACCESS"),
7429 Ref::keyword("POLICY"),
7430 ]),
7431 Ref::keyword("STAGE"),
7432 Ref::keyword("STREAM"),
7433 Ref::keyword("TAG"),
7434 Ref::keyword("TASK"),
7435 ]),
7436 Ref::new("IfExistsGrammar").optional(),
7437 Ref::new("ObjectReferenceSegment"),
7438 ]),
7439 Sequence::new(vec_of_erased![
7440 one_of(vec_of_erased![
7441 Sequence::new(vec_of_erased![
7442 Ref::keyword("RESOURCE"),
7443 Ref::keyword("MONITOR"),
7444 ]),
7445 Ref::keyword("SHARE"),
7446 ]),
7447 Ref::new("ObjectReferenceSegment"),
7448 ]),
7449 Sequence::new(vec_of_erased![
7450 one_of(vec_of_erased![
7451 Sequence::new(vec_of_erased![
7452 Ref::keyword("MANAGED"),
7453 Ref::keyword("ACCOUNT"),
7454 ]),
7455 Sequence::new(vec_of_erased![
7456 Ref::keyword("MASKING"),
7457 Ref::keyword("POLICY"),
7458 ]),
7459 ]),
7460 Ref::new("SingleIdentifierGrammar"),
7461 ]),
7462 Sequence::new(vec_of_erased![
7463 one_of(vec_of_erased![Sequence::new(vec_of_erased![
7464 Ref::keyword("NETWORK"),
7465 Ref::keyword("POLICY"),
7466 ]),]),
7467 Ref::new("IfExistsGrammar").optional(),
7468 Ref::new("SingleIdentifierGrammar"),
7469 ]),
7470 Sequence::new(vec_of_erased![
7471 one_of(vec_of_erased![
7472 Ref::keyword("WAREHOUSE"),
7473 Sequence::new(vec_of_erased![
7474 Ref::keyword("SESSION"),
7475 Ref::keyword("POLICY"),
7476 ]),
7477 ]),
7478 Ref::new("IfExistsGrammar").optional(),
7479 Ref::new("SingleIdentifierGrammar"),
7480 ]),
7481 Sequence::new(vec_of_erased![
7482 Ref::keyword("SEQUENCE"),
7483 Ref::new("IfExistsGrammar").optional(),
7484 Ref::new("ObjectReferenceSegment"),
7485 Ref::new("DropBehaviorGrammar").optional(),
7486 ]),
7487 ]),
7488 ])
7489 .to_matchable(),
7490 )
7491 .to_matchable()
7492 .into(),
7493 ),
7494 (
7495 "ListStatementSegment".into(),
7496 NodeMatcher::new(
7497 SyntaxKind::ListStatement,
7498 Sequence::new(vec_of_erased![
7499 one_of(vec_of_erased![Ref::keyword("LIST"), Ref::keyword("LS"),]),
7500 Ref::new("StagePath"),
7501 Sequence::new(vec_of_erased![
7502 Ref::keyword("PATTERN"),
7503 Ref::new("EqualsSegment"),
7504 Ref::new("QuotedLiteralSegment"),
7505 ])
7506 .config(|this| this.optional()),
7507 ])
7508 .to_matchable(),
7509 )
7510 .to_matchable()
7511 .into(),
7512 ),
7513 (
7514 "GetStatementSegment".into(),
7515 NodeMatcher::new(
7516 SyntaxKind::GetStatement,
7517 Sequence::new(vec_of_erased![
7518 Ref::keyword("GET"),
7519 Ref::new("StagePath"),
7520 one_of(vec_of_erased![
7521 Ref::new("UnquotedFilePath"),
7522 Ref::new("QuotedLiteralSegment"),
7523 ]),
7524 any_set_of(vec_of_erased![
7525 Sequence::new(vec_of_erased![
7526 Ref::keyword("PARALLEL"),
7527 Ref::new("EqualsSegment"),
7528 Ref::new("IntegerSegment"),
7529 ]),
7530 Sequence::new(vec_of_erased![
7531 Ref::keyword("PATTERN"),
7532 Ref::new("EqualsSegment"),
7533 one_of(vec_of_erased![
7534 Ref::new("QuotedLiteralSegment"),
7535 Ref::new("ReferencedVariableNameSegment"),
7536 ]),
7537 ]),
7538 ]),
7539 ])
7540 .to_matchable(),
7541 )
7542 .to_matchable()
7543 .into(),
7544 ),
7545 (
7546 "PutStatementSegment".into(),
7547 NodeMatcher::new(
7548 SyntaxKind::PutStatement,
7549 Sequence::new(vec_of_erased![
7550 Ref::keyword("PUT"),
7551 one_of(vec_of_erased![
7552 Ref::new("UnquotedFilePath"),
7553 Ref::new("QuotedLiteralSegment"),
7554 ]),
7555 Ref::new("StagePath"),
7556 any_set_of(vec_of_erased![
7557 Sequence::new(vec_of_erased![
7558 Ref::keyword("PARALLEL"),
7559 Ref::new("EqualsSegment"),
7560 Ref::new("IntegerSegment"),
7561 ]),
7562 Sequence::new(vec_of_erased![
7563 Ref::keyword("AUTO_COMPRESS"),
7564 Ref::new("EqualsSegment"),
7565 Ref::new("BooleanLiteralGrammar"),
7566 ]),
7567 Sequence::new(vec_of_erased![
7568 Ref::keyword("SOURCE_COMPRESSION"),
7569 Ref::new("EqualsSegment"),
7570 Ref::new("CompressionType"),
7571 ]),
7572 Sequence::new(vec_of_erased![
7573 Ref::keyword("OVERWRITE"),
7574 Ref::new("EqualsSegment"),
7575 Ref::new("BooleanLiteralGrammar"),
7576 ]),
7577 ]),
7578 ])
7579 .to_matchable(),
7580 )
7581 .to_matchable()
7582 .into(),
7583 ),
7584 (
7585 "RemoveStatementSegment".into(),
7586 NodeMatcher::new(
7587 SyntaxKind::RemoveStatement,
7588 Sequence::new(vec_of_erased![
7589 one_of(vec_of_erased![Ref::keyword("REMOVE"), Ref::keyword("RM"),]),
7590 Ref::new("StagePath"),
7591 Sequence::new(vec_of_erased![
7592 Ref::keyword("PATTERN"),
7593 Ref::new("EqualsSegment"),
7594 one_of(vec_of_erased![
7595 Ref::new("QuotedLiteralSegment"),
7596 Ref::new("ReferencedVariableNameSegment"),
7597 ]),
7598 ])
7599 .config(|this| this.optional()),
7600 ])
7601 .to_matchable(),
7602 )
7603 .to_matchable()
7604 .into(),
7605 ),
7606 ]);
7607
7608 snowflake_dialect.replace_grammar(
7609 "SetOperatorSegment",
7610 one_of(vec_of_erased![
7611 Sequence::new(vec_of_erased![
7612 Ref::keyword("UNION"),
7613 one_of(vec_of_erased![
7614 Ref::keyword("DISTINCT"),
7615 Ref::keyword("ALL"),
7616 ])
7617 .config(|this| this.optional()),
7618 ]),
7619 Sequence::new(vec_of_erased![
7620 one_of(vec_of_erased![
7621 Ref::keyword("INTERSECT"),
7622 Ref::keyword("EXCEPT"),
7623 ]),
7624 Ref::keyword("ALL").optional(),
7625 ]),
7626 Ref::keyword("MINUS"),
7627 ])
7628 .to_matchable(),
7629 );
7630
7631 snowflake_dialect.add([(
7632 "ShorthandCastSegment".into(),
7633 NodeMatcher::new(
7634 SyntaxKind::CastExpression,
7635 Sequence::new(vec_of_erased![
7636 one_of(vec_of_erased![
7637 Ref::new("Expression_D_Grammar"),
7638 Ref::new("CaseExpressionSegment"),
7639 ]),
7640 AnyNumberOf::new(vec_of_erased![Sequence::new(vec_of_erased![
7641 Ref::new("CastOperatorSegment"),
7642 Ref::new("DatatypeSegment"),
7643 one_of(vec_of_erased![
7644 Ref::new("TimeZoneGrammar"),
7645 AnyNumberOf::new(vec_of_erased![Ref::new("ArrayAccessorSegment"),]),
7646 ])
7647 .config(|this| this.optional()),
7648 ]),])
7649 .config(|this| this.min_times(1)),
7650 ])
7651 .to_matchable(),
7652 )
7653 .to_matchable()
7654 .into(),
7655 )]);
7656
7657 snowflake_dialect.expand();
7658 snowflake_dialect
7659}