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::{Anything, 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::MatchableTrait;
14use sqruff_lib_core::parser::node_matcher::NodeMatcher;
15use sqruff_lib_core::parser::parsers::RegexParser;
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 crate::redshift_keywords::{REDSHIFT_RESERVED_KEYWORDS, REDSHIFT_UNRESERVED_KEYWORDS};
22
23pub fn dialect() -> Dialect {
24 raw_dialect().config(|this| this.expand())
25}
26
27pub fn raw_dialect() -> Dialect {
28 let postgres_dialect = super::postgres::raw_dialect();
29 let ansi_dialect = super::ansi::raw_dialect();
30 let mut redshift_dialect = postgres_dialect.clone();
31 redshift_dialect.name = DialectKind::Redshift;
32
33 redshift_dialect.sets_mut("unreserved_keywords").clear();
34 redshift_dialect.update_keywords_set_from_multiline_string(
35 "unreserved_keywords",
36 REDSHIFT_UNRESERVED_KEYWORDS,
37 );
38 redshift_dialect.sets_mut("reserved_keywords").clear();
39 redshift_dialect
40 .update_keywords_set_from_multiline_string("reserved_keywords", REDSHIFT_RESERVED_KEYWORDS);
41 redshift_dialect.sets_mut("bare_functions").clear();
42 redshift_dialect.sets_mut("bare_functions").extend([
43 "current_date",
44 "sysdate",
45 "current_time",
46 "current_timestamp",
47 "user",
48 "current_user",
49 "current_aws_account",
50 "current_namespace",
51 "current_user_id",
52 ]);
53 redshift_dialect
54 .sets_mut("date_part_function_name")
55 .extend(["DATEADD", "DATEDIFF", "EXTRACT", "DATE_PART"]);
56 redshift_dialect.sets_mut("datetime_units").extend([
57 "MILLENNIUM",
58 "MILLENNIA",
59 "MIL",
60 "MILS",
61 "CENTURY",
62 "CENTURIES",
63 "C",
64 "CENT",
65 "CENTS",
66 "DECADE",
67 "DECADES",
68 "DEC",
69 "DECS",
70 "EPOCH",
71 "YEAR",
72 "YEARS",
73 "Y",
74 "YR",
75 "YRS",
76 "QUARTER",
77 "QUARTERS",
78 "QTR",
79 "QTRS",
80 "MONTH",
81 "MONTHS",
82 "MON",
83 "MONS",
84 "WEEK",
85 "WEEKS",
86 "W",
87 "DAYOFWEEK",
88 "DOW",
89 "DW",
90 "WEEKDAY",
91 "DAYOFYEAR",
92 "DOY",
93 "DY",
94 "YEARDAY",
95 "DAY",
96 "DAYS",
97 "D",
98 "HOUR",
99 "HOURS",
100 "H",
101 "HR",
102 "HRS",
103 "MINUTE",
104 "MINUTES",
105 "M",
106 "MIN",
107 "MINS",
108 "SECOND",
109 "SECONDS",
110 "S",
111 "SEC",
112 "SECS",
113 "MILLISECOND",
114 "MILLISECONDS",
115 "MS",
116 "MSEC",
117 "MSECS",
118 "MSECOND",
119 "MSECONDS",
120 "MILLISEC",
121 "MILLISECS",
122 "MILLISECON",
123 "MICROSECOND",
124 "MICROSECONDS",
125 "MICROSEC",
126 "MICROSECS",
127 "MICROSECOND",
128 "USECOND",
129 "USECONDS",
130 "US",
131 "USEC",
132 "USECS",
133 "TIMEZONE",
134 "TIMEZONE_HOUR",
135 "TIMEZONE_MINUTE",
136 ]);
137 redshift_dialect.add([
138 (
139 "WellKnownTextGeometrySegment".into(),
140 Nothing::new().to_matchable().into(),
141 ),
142 (
143 "JoinLikeClauseGrammar".into(),
144 Sequence::new(vec_of_erased![
145 any_set_of(vec_of_erased![
146 Ref::new("FromPivotExpressionSegment"),
147 Ref::new("FromUnpivotExpressionSegment")
148 ])
149 .config(|this| {
150 this.min_times = 1;
151 }),
152 Ref::new("AliasExpressionSegment").optional()
153 ])
154 .to_matchable()
155 .into(),
156 ),
157 (
158 "NakedIdentifierSegment".into(),
159 SegmentGenerator::new(|dialect| {
160 let reserved_keywords = dialect.sets("reserved_keywords");
162 let pattern = reserved_keywords.iter().join("|");
163 let anti_template = format!("^({})$", pattern);
164
165 RegexParser::new(
166 "#?([A-Z_]+|[0-9]+[A-Z_$])[A-Z0-9_$]*",
167 SyntaxKind::NakedIdentifier,
168 )
169 .anti_template(&anti_template)
170 .to_matchable()
171 })
172 .into(),
173 ),
174 ]);
175
176 redshift_dialect.patch_lexer_matchers(vec![Matcher::regex(
177 "word",
178 r"#?[0-9a-zA-Z_]+[0-9a-zA-Z_$]*",
179 SyntaxKind::Word,
180 )]);
181
182 redshift_dialect.add([
183 (
184 "CompressionTypeGrammar".into(),
185 one_of(vec_of_erased![
186 Ref::keyword("BZIP2"),
187 Ref::keyword("GZIP"),
188 Ref::keyword("LZOP"),
189 Ref::keyword("ZSTD")
190 ])
191 .to_matchable()
192 .into(),
193 ),
194 (
195 "ArgModeGrammar".into(),
196 one_of(vec_of_erased![
197 Ref::keyword("IN"),
198 Ref::keyword("OUT"),
199 Ref::keyword("INOUT")
200 ])
201 .to_matchable()
202 .into(),
203 ),
204 (
205 "ColumnEncodingGrammar".into(),
206 one_of(vec_of_erased![
207 Ref::keyword("RAW"),
208 Ref::keyword("AZ64"),
209 Ref::keyword("BYTEDICT"),
210 Ref::keyword("DELTA"),
211 Ref::keyword("DELTA32K"),
212 Ref::keyword("LZO"),
213 Ref::keyword("MOSTLY8"),
214 Ref::keyword("MOSTLY16"),
215 Ref::keyword("MOSTLY32"),
216 Ref::keyword("RUNLENGTH"),
217 Ref::keyword("TEXT255"),
218 Ref::keyword("TEXT32K"),
219 Ref::keyword("ZSTD")
220 ])
221 .to_matchable()
222 .into(),
223 ),
224 (
225 "QuotaGrammar".into(),
226 Sequence::new(vec_of_erased![
227 Ref::keyword("QUOTA"),
228 one_of(vec_of_erased![
229 Sequence::new(vec_of_erased![
230 Ref::new("NumericLiteralSegment"),
231 one_of(vec_of_erased![
232 Ref::keyword("MB"),
233 Ref::keyword("GB"),
234 Ref::keyword("TB")
235 ])
236 ]),
237 Ref::keyword("UNLIMITED")
238 ])
239 ])
240 .to_matchable()
241 .into(),
242 ),
243 ]);
244
245 redshift_dialect.add([
246 (
247 "FromUnpivotExpressionSegment".into(),
248 NodeMatcher::new(
249 SyntaxKind::FromUnpivotExpression,
250 Sequence::new(vec_of_erased![
251 Ref::keyword("UNPIVOT"),
252 Sequence::new(vec_of_erased![
253 one_of(vec_of_erased![
254 Ref::keyword("INCLUDE"),
255 Ref::keyword("EXCLUDE")
256 ]),
257 Ref::keyword("NULLS")
258 ])
259 .config(|this| {
260 this.optional();
261 }),
262 Bracketed::new(vec_of_erased![Sequence::new(vec_of_erased![
263 Ref::new("ColumnReferenceSegment"),
264 Ref::keyword("FOR"),
265 Ref::new("ColumnReferenceSegment"),
266 Ref::keyword("IN"),
267 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
268 Sequence::new(vec_of_erased![
269 Ref::new("ColumnReferenceSegment"),
270 Ref::new("AliasExpressionSegment").optional()
271 ])
272 ])])
273 ])])
274 ])
275 .to_matchable(),
276 )
277 .to_matchable()
278 .into(),
279 ),
280 (
281 "FromPivotExpressionSegment".into(),
282 NodeMatcher::new(
283 SyntaxKind::FromPivotExpression,
284 Sequence::new(vec_of_erased![
285 Ref::keyword("PIVOT"),
286 Bracketed::new(vec_of_erased![Sequence::new(vec_of_erased![
287 optionally_bracketed(vec_of_erased![Ref::new("FunctionSegment")]),
288 Ref::new("AliasExpressionSegment").optional(),
289 Ref::keyword("FOR"),
290 Ref::new("ColumnReferenceSegment"),
291 Ref::keyword("IN"),
292 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
293 Sequence::new(vec_of_erased![
294 Ref::new("ExpressionSegment"),
295 Ref::new("AliasExpressionSegment").optional()
296 ])
297 ])])
298 ])])
299 ])
300 .to_matchable(),
301 )
302 .to_matchable()
303 .into(),
304 ),
305 (
306 "DateTimeTypeIdentifier".into(),
307 NodeMatcher::new(
308 SyntaxKind::DatetimeTypeIdentifier,
309 one_of(vec_of_erased![
310 Ref::keyword("DATE"),
311 Ref::keyword("DATETIME"),
312 Sequence::new(vec_of_erased![
313 one_of(vec_of_erased![
314 Ref::keyword("TIME"),
315 Ref::keyword("TIMESTAMP")
316 ]),
317 Sequence::new(vec_of_erased![
318 one_of(vec_of_erased![
319 Ref::keyword("WITH"),
320 Ref::keyword("WITHOUT")
321 ]),
322 Ref::keyword("TIME"),
323 Ref::keyword("ZONE")
324 ])
325 .config(|this| {
326 this.optional();
327 })
328 ]),
329 one_of(vec_of_erased![
330 Ref::keyword("TIMETZ"),
331 Ref::keyword("TIMESTAMPTZ")
332 ])
333 ])
334 .to_matchable(),
335 )
336 .to_matchable()
337 .into(),
338 ),
339 ]);
340 redshift_dialect.replace_grammar(
341 "BracketedArguments",
342 Bracketed::new(vec_of_erased![
343 Delimited::new(vec_of_erased![one_of(vec_of_erased![
344 Ref::new("LiteralGrammar"),
345 Ref::keyword("MAX")
346 ])])
347 .config(|this| {
348 this.optional();
349 })
350 ])
351 .to_matchable(),
352 );
353
354 redshift_dialect.add([
355 (
356 "DatatypeSegment".into(),
357 NodeMatcher::new(
358 SyntaxKind::DataType,
359 one_of(vec_of_erased![
360 Ref::keyword("SMALLINT"),
361 Ref::keyword("INT2"),
362 Ref::keyword("INTEGER"),
363 Ref::keyword("INT"),
364 Ref::keyword("INT4"),
365 Ref::keyword("BIGINT"),
366 Ref::keyword("INT8"),
367 Ref::keyword("REAL"),
368 Ref::keyword("FLOAT4"),
369 Sequence::new(vec_of_erased![
370 Ref::keyword("DOUBLE"),
371 Ref::keyword("PRECISION")
372 ]),
373 Ref::keyword("FLOAT8"),
374 Ref::keyword("FLOAT"),
375 Sequence::new(vec_of_erased![
376 one_of(vec_of_erased![
377 Ref::keyword("DECIMAL"),
378 Ref::keyword("NUMERIC")
379 ]),
380 Ref::new("BracketedArguments").optional()
381 ]),
382 one_of(vec_of_erased![
383 Sequence::new(vec_of_erased![
384 one_of(vec_of_erased![
385 Ref::keyword("CHAR"),
386 Ref::keyword("CHARACTER"),
387 Ref::keyword("NCHAR"),
388 Ref::keyword("VARCHAR"),
389 Sequence::new(vec_of_erased![
390 Ref::keyword("CHARACTER"),
391 Ref::keyword("VARYING")
392 ]),
393 Ref::keyword("NVARCHAR")
394 ]),
395 Ref::new("BracketedArguments").optional()
396 ]),
397 Ref::keyword("BPCHAR"),
398 Ref::keyword("TEXT")
399 ]),
400 Ref::new("DateTimeTypeIdentifier"),
401 Ref::keyword("INTERVAL"),
402 one_of(vec_of_erased![
403 Ref::keyword("BOOLEAN"),
404 Ref::keyword("BOOL")
405 ]),
406 Ref::keyword("HLLSKETCH"),
407 Ref::keyword("SUPER"),
408 Ref::keyword("GEOMETRY"),
409 Ref::keyword("GEOGRAPHY"),
410 Sequence::new(vec_of_erased![
411 one_of(vec_of_erased![
412 Ref::keyword("VARBYTE"),
413 Ref::keyword("VARBINARY"),
414 Sequence::new(vec_of_erased![
415 Ref::keyword("BINARY"),
416 Ref::keyword("VARYING")
417 ])
418 ]),
419 Ref::new("BracketedArguments").optional()
420 ]),
421 Ref::keyword("ANYELEMENT")
422 ])
423 .to_matchable(),
424 )
425 .to_matchable()
426 .into(),
427 ),
428 (
429 "DataFormatSegment".into(),
430 NodeMatcher::new(
431 SyntaxKind::DataFormatSegment,
432 Sequence::new(vec_of_erased![
433 Sequence::new(vec_of_erased![
434 Ref::keyword("FORMAT"),
435 Ref::keyword("AS").optional()
436 ])
437 .config(|this| {
438 this.optional();
439 }),
440 one_of(vec_of_erased![
441 Sequence::new(vec_of_erased![
442 Ref::keyword("CSV"),
443 Sequence::new(vec_of_erased![
444 Ref::keyword("QUOTE"),
445 Ref::keyword("AS").optional(),
446 Ref::new("QuotedLiteralSegment")
447 ])
448 .config(|this| {
449 this.optional();
450 })
451 ]),
452 Sequence::new(vec_of_erased![
453 Ref::keyword("SHAPEFILE"),
454 Sequence::new(vec_of_erased![
455 Ref::keyword("SIMPLIFY"),
456 Ref::keyword("AUTO").optional(),
457 Ref::new("NumericLiteralSegment").optional()
458 ])
459 .config(|this| {
460 this.optional();
461 })
462 ]),
463 Sequence::new(vec_of_erased![
464 one_of(vec_of_erased![Ref::keyword("AVRO"), Ref::keyword("JSON")]),
465 Sequence::new(vec_of_erased![
466 Ref::keyword("AS").optional(),
467 Ref::new("QuotedLiteralSegment")
468 ])
469 .config(|this| {
470 this.optional();
471 })
472 ]),
473 Ref::keyword("PARQUET"),
474 Ref::keyword("ORC"),
475 Ref::keyword("RCFILE"),
476 Ref::keyword("SEQUENCEFILE")
477 ])
478 ])
479 .to_matchable(),
480 )
481 .to_matchable()
482 .into(),
483 ),
484 (
485 "AuthorizationSegment".into(),
486 NodeMatcher::new(
487 SyntaxKind::AuthorizationSegment,
488 any_set_of(vec_of_erased![
489 one_of(vec_of_erased![
490 Sequence::new(vec_of_erased![
491 Ref::keyword("IAM_ROLE"),
492 one_of(vec_of_erased![
493 Ref::keyword("DEFAULT"),
494 Ref::new("QuotedLiteralSegment")
495 ])
496 ]),
497 Sequence::new(vec_of_erased![
498 Ref::keyword("WITH").optional(),
499 Ref::keyword("CREDENTIALS"),
500 Ref::keyword("AS").optional(),
501 Ref::new("QuotedLiteralSegment")
502 ]),
503 Sequence::new(vec_of_erased![
504 Ref::keyword("ACCESS_KEY_ID"),
505 Ref::new("QuotedLiteralSegment"),
506 Ref::keyword("SECRET_ACCESS_KEY"),
507 Ref::new("QuotedLiteralSegment"),
508 Sequence::new(vec_of_erased![
509 Ref::keyword("SESSION_TOKEN"),
510 Ref::new("QuotedLiteralSegment")
511 ])
512 .config(|this| {
513 this.optional();
514 })
515 ])
516 ]),
517 Sequence::new(vec_of_erased![
518 Ref::keyword("KMS_KEY_ID"),
519 Ref::new("QuotedLiteralSegment")
520 ])
521 .config(|this| {
522 this.optional();
523 }),
524 Sequence::new(vec_of_erased![
525 Ref::keyword("MASTER_SYMMETRIC_KEY"),
526 Ref::new("QuotedLiteralSegment")
527 ])
528 .config(|this| {
529 this.optional();
530 })
531 ])
532 .to_matchable(),
533 )
534 .to_matchable()
535 .into(),
536 ),
537 (
538 "ColumnAttributeSegment".into(),
539 NodeMatcher::new(
540 SyntaxKind::ColumnAttributeSegment,
541 any_set_of(vec_of_erased![
542 Sequence::new(vec_of_erased![
543 Ref::keyword("DEFAULT"),
544 Ref::new("ExpressionSegment")
545 ]),
546 Sequence::new(vec_of_erased![
547 Ref::keyword("IDENTITY"),
548 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![Ref::new(
549 "NumericLiteralSegment"
550 )])])
551 .config(|this| {
552 this.optional();
553 })
554 ]),
555 Sequence::new(vec_of_erased![
556 Ref::keyword("GENERATED"),
557 Ref::keyword("BY"),
558 Ref::keyword("DEFAULT"),
559 Ref::keyword("AS"),
560 Ref::keyword("IDENTITY"),
561 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![Ref::new(
562 "NumericLiteralSegment"
563 )])])
564 .config(|this| {
565 this.optional();
566 })
567 ]),
568 Sequence::new(vec_of_erased![
569 Ref::keyword("ENCODE"),
570 Ref::new("ColumnEncodingGrammar")
571 ]),
572 Ref::keyword("DISTKEY"),
573 Ref::keyword("SORTKEY"),
574 Sequence::new(vec_of_erased![
575 Ref::keyword("COLLATE"),
576 one_of(vec_of_erased![
577 Ref::keyword("CASE_SENSITIVE"),
578 Ref::keyword("CASE_INSENSITIVE")
579 ])
580 ])
581 ])
582 .to_matchable(),
583 )
584 .to_matchable()
585 .into(),
586 ),
587 (
588 "ColumnConstraintSegment".into(),
589 NodeMatcher::new(
590 SyntaxKind::ColumnConstraintSegment,
591 any_set_of(vec_of_erased![
592 one_of(vec_of_erased![
593 Sequence::new(vec_of_erased![Ref::keyword("NOT"), Ref::keyword("NULL")]),
594 Ref::keyword("NULL")
595 ]),
596 one_of(vec_of_erased![
597 Ref::keyword("UNIQUE"),
598 Ref::new("PrimaryKeyGrammar")
599 ]),
600 Sequence::new(vec_of_erased![
601 Ref::keyword("REFERENCES"),
602 Ref::new("TableReferenceSegment"),
603 Bracketed::new(vec_of_erased![Ref::new("ColumnReferenceSegment")]).config(
604 |this| {
605 this.optional();
606 }
607 )
608 ])
609 ])
610 .to_matchable(),
611 )
612 .to_matchable()
613 .into(),
614 ),
615 (
616 "AlterTableActionSegment".into(),
617 NodeMatcher::new(
618 SyntaxKind::AlterTableActionSegment,
619 one_of(vec_of_erased![
620 Sequence::new(vec_of_erased![
621 Ref::keyword("ADD"),
622 Ref::new("TableConstraintSegment"),
623 Sequence::new(vec_of_erased![Ref::keyword("NOT"), Ref::keyword("VALID")])
624 .config(|this| {
625 this.optional();
626 })
627 ]),
628 Sequence::new(vec_of_erased![
629 Ref::keyword("VALIDATE"),
630 Ref::keyword("CONSTRAINT"),
631 Ref::new("ParameterNameSegment")
632 ]),
633 Sequence::new(vec_of_erased![
634 Ref::keyword("DROP"),
635 Ref::keyword("CONSTRAINT"),
636 Ref::new("ParameterNameSegment"),
637 Ref::new("DropBehaviorGrammar").optional()
638 ]),
639 Sequence::new(vec_of_erased![
640 Ref::keyword("OWNER"),
641 Ref::keyword("TO"),
642 one_of(vec_of_erased![one_of(vec_of_erased![
643 Ref::new("ParameterNameSegment"),
644 Ref::new("QuotedIdentifierSegment")
645 ])])
646 ]),
647 Sequence::new(vec_of_erased![
648 Ref::keyword("RENAME"),
649 Ref::keyword("TO"),
650 one_of(vec_of_erased![one_of(vec_of_erased![
651 Ref::new("ParameterNameSegment"),
652 Ref::new("QuotedIdentifierSegment")
653 ])])
654 ]),
655 Sequence::new(vec_of_erased![
656 Ref::keyword("RENAME"),
657 Ref::keyword("COLUMN"),
658 Ref::keyword("TO"),
659 one_of(vec_of_erased![Ref::new("ColumnReferenceSegment")])
660 ]),
661 Sequence::new(vec_of_erased![
662 Ref::keyword("ALTER"),
663 Ref::keyword("COLUMN").optional(),
664 Ref::new("ColumnReferenceSegment"),
665 one_of(vec_of_erased![
666 Sequence::new(vec_of_erased![
667 Ref::keyword("TYPE"),
668 Ref::new("DatatypeSegment")
669 ]),
670 Sequence::new(vec_of_erased![
671 Ref::keyword("ENCODE"),
672 Delimited::new(vec_of_erased![Ref::new("ColumnEncodingGrammar")])
673 ])
674 ])
675 ]),
676 Sequence::new(vec_of_erased![
677 Ref::keyword("ALTER"),
678 Ref::keyword("DISTKEY"),
679 Ref::new("ColumnReferenceSegment")
680 ]),
681 Sequence::new(vec_of_erased![
682 Ref::keyword("ALTER"),
683 Ref::keyword("DISTSTYLE"),
684 one_of(vec_of_erased![
685 Ref::keyword("ALL"),
686 Ref::keyword("EVEN"),
687 Sequence::new(vec_of_erased![
688 Ref::keyword("KEY"),
689 Ref::keyword("DISTKEY"),
690 Ref::new("ColumnReferenceSegment")
691 ]),
692 Ref::keyword("AUTO")
693 ])
694 ]),
695 Sequence::new(vec_of_erased![
696 Ref::keyword("ALTER"),
697 Ref::keyword("COMPOUND").optional(),
698 Ref::keyword("SORTKEY"),
699 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![Ref::new(
700 "ColumnReferenceSegment"
701 )])])
702 ]),
703 Sequence::new(vec_of_erased![
704 Ref::keyword("ALTER"),
705 Ref::keyword("SORTKEY"),
706 one_of(vec_of_erased![Ref::keyword("AUTO"), Ref::keyword("NONE")])
707 ]),
708 Sequence::new(vec_of_erased![
709 Ref::keyword("ALTER"),
710 Ref::keyword("ENCODE"),
711 Ref::keyword("AUTO")
712 ]),
713 Sequence::new(vec_of_erased![
714 Ref::keyword("ADD"),
715 Ref::keyword("COLUMN").optional(),
716 Ref::new("ColumnReferenceSegment"),
717 Ref::new("DatatypeSegment"),
718 Sequence::new(vec_of_erased![
719 Ref::keyword("DEFAULT"),
720 Ref::new("ExpressionSegment")
721 ])
722 .config(|this| {
723 this.optional();
724 }),
725 Sequence::new(vec_of_erased![
726 Ref::keyword("COLLATE"),
727 Ref::new("CollationReferenceSegment")
728 ])
729 .config(|this| {
730 this.optional();
731 }),
732 AnyNumberOf::new(vec_of_erased![Ref::new("ColumnConstraintSegment")])
733 ]),
734 Sequence::new(vec_of_erased![
735 Ref::keyword("DROP"),
736 Ref::keyword("COLUMN").optional(),
737 Ref::new("ColumnReferenceSegment"),
738 Ref::new("DropBehaviorGrammar").optional()
739 ])
740 ])
741 .to_matchable(),
742 )
743 .to_matchable()
744 .into(),
745 ),
746 (
747 "TableAttributeSegment".into(),
748 NodeMatcher::new(
749 SyntaxKind::TableConstraint,
750 any_set_of(vec_of_erased![
751 Sequence::new(vec_of_erased![
752 Ref::keyword("DISTSTYLE"),
753 one_of(vec_of_erased![
754 Ref::keyword("AUTO"),
755 Ref::keyword("EVEN"),
756 Ref::keyword("KEY"),
757 Ref::keyword("ALL")
758 ])
759 ])
760 .config(|this| {
761 this.optional();
762 }),
763 Sequence::new(vec_of_erased![
764 Ref::keyword("DISTKEY"),
765 Bracketed::new(vec_of_erased![Ref::new("ColumnReferenceSegment")])
766 ])
767 .config(|this| {
768 this.optional();
769 }),
770 one_of(vec_of_erased![
771 Sequence::new(vec_of_erased![
772 one_of(vec_of_erased![
773 Ref::keyword("COMPOUND"),
774 Ref::keyword("INTERLEAVED")
775 ])
776 .config(|this| {
777 this.optional();
778 }),
779 Ref::keyword("SORTKEY"),
780 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
781 Ref::new("ColumnReferenceSegment")
782 ])])
783 ]),
784 Sequence::new(vec_of_erased![
785 Ref::keyword("SORTKEY"),
786 Ref::keyword("AUTO")
787 ])
788 ])
789 .config(|this| {
790 this.optional();
791 }),
792 Sequence::new(vec_of_erased![Ref::keyword("ENCODE"), Ref::keyword("AUTO")])
793 .config(|this| {
794 this.optional();
795 })
796 ])
797 .to_matchable(),
798 )
799 .to_matchable()
800 .into(),
801 ),
802 (
803 "TableConstraintSegment".into(),
804 NodeMatcher::new(
805 SyntaxKind::TableConstraint,
806 Sequence::new(vec_of_erased![
807 Sequence::new(vec_of_erased![
808 Ref::keyword("CONSTRAINT"),
809 Ref::new("ObjectReferenceSegment")
810 ])
811 .config(|this| {
812 this.optional();
813 }),
814 one_of(vec_of_erased![
815 Sequence::new(vec_of_erased![
816 Ref::keyword("UNIQUE"),
817 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
818 Ref::new("ColumnReferenceSegment")
819 ])])
820 ]),
821 Sequence::new(vec_of_erased![
822 Ref::keyword("PRIMARY"),
823 Ref::keyword("KEY"),
824 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
825 Ref::new("ColumnReferenceSegment")
826 ])])
827 ]),
828 Sequence::new(vec_of_erased![
829 Ref::keyword("FOREIGN"),
830 Ref::keyword("KEY"),
831 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
832 Ref::new("ColumnReferenceSegment")
833 ])]),
834 Ref::keyword("REFERENCES"),
835 Ref::new("TableReferenceSegment"),
836 Sequence::new(vec_of_erased![Bracketed::new(vec_of_erased![
837 Ref::new("ColumnReferenceSegment")
838 ])])
839 ])
840 ])
841 ])
842 .to_matchable(),
843 )
844 .to_matchable()
845 .into(),
846 ),
847 (
848 "LikeOptionSegment".into(),
849 NodeMatcher::new(
850 SyntaxKind::LikeOptionSegment,
851 Sequence::new(vec_of_erased![
852 one_of(vec_of_erased![
853 Ref::keyword("INCLUDING"),
854 Ref::keyword("EXCLUDING")
855 ]),
856 Ref::keyword("DEFAULTS")
857 ])
858 .to_matchable(),
859 )
860 .to_matchable()
861 .into(),
862 ),
863 (
864 "CreateTableStatementSegment".into(),
865 NodeMatcher::new(
866 SyntaxKind::CreateTableStatement,
867 Sequence::new(vec_of_erased![
868 Ref::keyword("CREATE"),
869 Ref::keyword("LOCAL").optional(),
870 Ref::new("TemporaryGrammar").optional(),
871 Ref::keyword("TABLE"),
872 Ref::new("IfNotExistsGrammar").optional(),
873 Ref::new("TableReferenceSegment"),
874 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
875 AnyNumberOf::new(vec_of_erased![
876 Sequence::new(vec_of_erased![
877 Ref::new("ColumnReferenceSegment"),
878 Ref::new("DatatypeSegment"),
879 AnyNumberOf::new(vec_of_erased![
880 Ref::new("ColumnAttributeSegment"),
881 Ref::new("ColumnConstraintSegment")
882 ])
883 .config(|this| {
884 this.optional();
885 })
886 ]),
887 Ref::new("TableConstraintSegment"),
888 Sequence::new(vec_of_erased![
889 Ref::keyword("LIKE"),
890 Ref::new("TableReferenceSegment"),
891 AnyNumberOf::new(vec_of_erased![Ref::new("LikeOptionSegment")])
892 .config(|this| {
893 this.optional();
894 })
895 ])
896 ])
897 ])]),
898 Sequence::new(vec_of_erased![
899 Ref::keyword("BACKUP"),
900 one_of(vec_of_erased![Ref::keyword("YES"), Ref::keyword("NO")]).config(
901 |this| {
902 this.optional();
903 }
904 )
905 ])
906 .config(|this| {
907 this.optional();
908 }),
909 AnyNumberOf::new(vec_of_erased![Ref::new("TableAttributeSegment")]).config(
910 |this| {
911 this.optional();
912 }
913 )
914 ])
915 .to_matchable(),
916 )
917 .to_matchable()
918 .into(),
919 ),
920 (
921 "CreateTableAsStatementSegment".into(),
922 NodeMatcher::new(
923 SyntaxKind::CreateTableAsStatement,
924 Sequence::new(vec_of_erased![
925 Ref::keyword("CREATE"),
926 Sequence::new(vec_of_erased![
927 Ref::keyword("LOCAL").optional(),
928 one_of(vec_of_erased![
929 Ref::keyword("TEMPORARY"),
930 Ref::keyword("TEMP")
931 ])
932 ])
933 .config(|this| {
934 this.optional();
935 }),
936 Ref::keyword("TABLE"),
937 Ref::new("ObjectReferenceSegment"),
938 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![Ref::new(
939 "ColumnReferenceSegment"
940 )])])
941 .config(|this| {
942 this.optional();
943 }),
944 Sequence::new(vec_of_erased![
945 Ref::keyword("BACKUP"),
946 one_of(vec_of_erased![Ref::keyword("YES"), Ref::keyword("NO")])
947 ])
948 .config(|this| {
949 this.optional();
950 }),
951 Ref::new("TableAttributeSegment").optional(),
952 Ref::keyword("AS"),
953 optionally_bracketed(vec_of_erased![Ref::new("SelectableGrammar")])
954 ])
955 .to_matchable(),
956 )
957 .to_matchable()
958 .into(),
959 ),
960 (
961 "CreateModelStatementSegment".into(),
962 NodeMatcher::new(
963 SyntaxKind::CreateModelStatement,
964 Sequence::new(vec_of_erased![
965 Ref::keyword("CREATE"),
966 Ref::keyword("MODEL"),
967 Ref::new("ObjectReferenceSegment"),
968 Sequence::new(vec_of_erased![
969 Ref::keyword("FROM"),
970 one_of(vec_of_erased![
971 Ref::new("QuotedLiteralSegment"),
972 Bracketed::new(vec_of_erased![Ref::new("SelectableGrammar")]),
973 Ref::new("ObjectReferenceSegment")
974 ])
975 ])
976 .config(|this| {
977 this.optional();
978 }),
979 Sequence::new(vec_of_erased![
980 Ref::keyword("TARGET"),
981 Ref::new("ColumnReferenceSegment")
982 ])
983 .config(|this| {
984 this.optional();
985 }),
986 Sequence::new(vec_of_erased![
987 Ref::keyword("FUNCTION"),
988 Ref::new("ObjectReferenceSegment"),
989 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![Ref::new(
990 "DatatypeSegment"
991 )])])
992 .config(|this| {
993 this.optional();
994 })
995 ]),
996 Sequence::new(vec_of_erased![
997 Ref::keyword("RETURNS"),
998 Ref::new("DatatypeSegment")
999 ])
1000 .config(|this| {
1001 this.optional();
1002 }),
1003 Sequence::new(vec_of_erased![
1004 Ref::keyword("SAGEMAKER"),
1005 Ref::new("QuotedLiteralSegment")
1006 ])
1007 .config(|this| {
1008 this.optional();
1009 }),
1010 Sequence::new(vec_of_erased![
1011 Ref::keyword("IAM_ROLE"),
1012 one_of(vec_of_erased![
1013 Ref::keyword("DEFAULT"),
1014 Ref::new("QuotedLiteralSegment")
1015 ])
1016 ]),
1017 Sequence::new(vec_of_erased![
1018 Ref::keyword("AUTO"),
1019 one_of(vec_of_erased![Ref::keyword("ON"), Ref::keyword("OFF")])
1020 ])
1021 .config(|this| {
1022 this.optional();
1023 }),
1024 Sequence::new(vec_of_erased![
1025 Ref::keyword("MODEL_TYPE"),
1026 one_of(vec_of_erased![
1027 Ref::keyword("XGBOOST"),
1028 Ref::keyword("MLP"),
1029 Ref::keyword("KMEANS")
1030 ])
1031 ])
1032 .config(|this| {
1033 this.optional();
1034 }),
1035 Sequence::new(vec_of_erased![
1036 Ref::keyword("PROBLEM_TYPE"),
1037 one_of(vec_of_erased![
1038 Ref::keyword("REGRESSION"),
1039 Ref::keyword("BINARY_CLASSIFICATION"),
1040 Ref::keyword("MULTICLASS_CLASSIFICATION")
1041 ])
1042 ])
1043 .config(|this| {
1044 this.optional();
1045 }),
1046 Sequence::new(vec_of_erased![
1047 Ref::keyword("OBJECTIVE"),
1048 Ref::new("QuotedLiteralSegment")
1049 ])
1050 .config(|this| {
1051 this.optional();
1052 }),
1053 Sequence::new(vec_of_erased![
1054 Ref::keyword("PREPROCESSORS"),
1055 Ref::new("QuotedLiteralSegment")
1056 ])
1057 .config(|this| {
1058 this.optional();
1059 }),
1060 Sequence::new(vec_of_erased![
1061 Ref::keyword("HYPERPARAMETERS"),
1062 Ref::keyword("DEFAULT"),
1063 Sequence::new(vec_of_erased![
1064 Ref::keyword("EXCEPT"),
1065 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
1066 Anything::new()
1067 ])])
1068 ])
1069 .config(|this| {
1070 this.optional();
1071 })
1072 ])
1073 .config(|this| {
1074 this.optional();
1075 }),
1076 Sequence::new(vec_of_erased![
1077 Ref::keyword("SETTINGS"),
1078 Bracketed::new(vec_of_erased![Sequence::new(vec_of_erased![
1079 Ref::keyword("S3_BUCKET"),
1080 Ref::new("QuotedLiteralSegment"),
1081 Sequence::new(vec_of_erased![
1082 Ref::keyword("KMS_KEY_ID"),
1083 Ref::new("QuotedLiteralSegment")
1084 ])
1085 .config(|this| {
1086 this.optional();
1087 }),
1088 Sequence::new(vec_of_erased![
1089 Ref::keyword("S3_GARBAGE_COLLECT"),
1090 one_of(vec_of_erased![Ref::keyword("ON"), Ref::keyword("OFF")])
1091 ])
1092 .config(|this| {
1093 this.optional();
1094 }),
1095 Sequence::new(vec_of_erased![
1096 Ref::keyword("MAX_CELLS"),
1097 Ref::new("NumericLiteralSegment")
1098 ])
1099 .config(|this| {
1100 this.optional();
1101 }),
1102 Sequence::new(vec_of_erased![
1103 Ref::keyword("MAX_RUNTIME"),
1104 Ref::new("NumericLiteralSegment")
1105 ])
1106 .config(|this| {
1107 this.optional();
1108 })
1109 ])])
1110 ])
1111 .config(|this| {
1112 this.optional();
1113 })
1114 ])
1115 .to_matchable(),
1116 )
1117 .to_matchable()
1118 .into(),
1119 ),
1120 (
1121 "ShowModelStatementSegment".into(),
1122 NodeMatcher::new(
1123 SyntaxKind::ShowModelStatement,
1124 Sequence::new(vec_of_erased![
1125 Ref::keyword("SHOW"),
1126 Ref::keyword("MODEL"),
1127 one_of(vec_of_erased![
1128 Ref::keyword("ALL"),
1129 Ref::new("ObjectReferenceSegment")
1130 ])
1131 ])
1132 .to_matchable(),
1133 )
1134 .to_matchable()
1135 .into(),
1136 ),
1137 (
1138 "CreateExternalTableStatementSegment".into(),
1139 NodeMatcher::new(
1140 SyntaxKind::CreateExternalTableStatement,
1141 Sequence::new(vec_of_erased![
1142 Ref::keyword("CREATE"),
1143 Ref::keyword("EXTERNAL"),
1144 Ref::keyword("TABLE"),
1145 Ref::new("TableReferenceSegment"),
1146 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
1147 Sequence::new(vec_of_erased![
1148 Ref::new("ColumnReferenceSegment"),
1149 Ref::new("DatatypeSegment")
1150 ])
1151 ])]),
1152 Ref::new("PartitionedBySegment").optional(),
1153 Sequence::new(vec_of_erased![
1154 Ref::keyword("ROW"),
1155 Ref::keyword("FORMAT"),
1156 one_of(vec_of_erased![
1157 Sequence::new(vec_of_erased![
1158 Ref::keyword("DELIMITED"),
1159 Ref::new("RowFormatDelimitedSegment")
1160 ]),
1161 Sequence::new(vec_of_erased![
1162 Ref::keyword("SERDE"),
1163 Ref::new("QuotedLiteralSegment"),
1164 Sequence::new(vec_of_erased![
1165 Ref::keyword("WITH"),
1166 Ref::keyword("SERDEPROPERTIES"),
1167 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
1168 Sequence::new(vec_of_erased![
1169 Ref::new("QuotedLiteralSegment"),
1170 Ref::new("EqualsSegment"),
1171 Ref::new("QuotedLiteralSegment")
1172 ])
1173 ])])
1174 ])
1175 .config(|this| {
1176 this.optional();
1177 })
1178 ])
1179 ])
1180 ])
1181 .config(|this| {
1182 this.optional();
1183 }),
1184 Ref::keyword("STORED"),
1185 Ref::keyword("AS"),
1186 one_of(vec_of_erased![
1187 Ref::keyword("PARQUET"),
1188 Ref::keyword("RCFILE"),
1189 Ref::keyword("SEQUENCEFILE"),
1190 Ref::keyword("TEXTFILE"),
1191 Ref::keyword("ORC"),
1192 Ref::keyword("AVRO"),
1193 Sequence::new(vec_of_erased![
1194 Ref::keyword("INPUTFORMAT"),
1195 Ref::new("QuotedLiteralSegment"),
1196 Ref::keyword("OUTPUTFORMAT"),
1197 Ref::new("QuotedLiteralSegment")
1198 ])
1199 ]),
1200 Ref::keyword("LOCATION"),
1201 Ref::new("QuotedLiteralSegment"),
1202 Sequence::new(vec_of_erased![
1203 Ref::keyword("TABLE"),
1204 Ref::keyword("PROPERTIES"),
1205 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
1206 Sequence::new(vec_of_erased![
1207 Ref::new("QuotedLiteralSegment"),
1208 Ref::new("EqualsSegment"),
1209 Ref::new("QuotedLiteralSegment")
1210 ])
1211 ])])
1212 ])
1213 .config(|this| {
1214 this.optional();
1215 })
1216 ])
1217 .to_matchable(),
1218 )
1219 .to_matchable()
1220 .into(),
1221 ),
1222 (
1223 "CreateExternalTableAsStatementSegment".into(),
1224 NodeMatcher::new(
1225 SyntaxKind::CreateExternalTableStatement,
1226 Sequence::new(vec_of_erased![
1227 Ref::keyword("CREATE"),
1228 Ref::keyword("EXTERNAL"),
1229 Ref::keyword("TABLE"),
1230 Ref::new("TableReferenceSegment"),
1231 Ref::new("PartitionedBySegment").optional(),
1232 Sequence::new(vec_of_erased![
1233 Ref::keyword("ROW"),
1234 Ref::keyword("FORMAT"),
1235 Ref::keyword("DELIMITED"),
1236 Ref::new("RowFormatDelimitedSegment")
1237 ])
1238 .config(|this| {
1239 this.optional();
1240 }),
1241 Ref::keyword("STORED"),
1242 Ref::keyword("AS"),
1243 one_of(vec_of_erased![
1244 Ref::keyword("PARQUET"),
1245 Ref::keyword("TEXTFILE")
1246 ]),
1247 Ref::keyword("LOCATION"),
1248 Ref::new("QuotedLiteralSegment"),
1249 Sequence::new(vec_of_erased![
1250 Ref::keyword("TABLE"),
1251 Ref::keyword("PROPERTIES"),
1252 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
1253 Sequence::new(vec_of_erased![
1254 Ref::new("QuotedLiteralSegment"),
1255 Ref::new("EqualsSegment"),
1256 Ref::new("QuotedLiteralSegment")
1257 ])
1258 ])])
1259 ])
1260 .config(|this| {
1261 this.optional();
1262 }),
1263 Ref::keyword("AS"),
1264 optionally_bracketed(vec_of_erased![Ref::new("SelectableGrammar")])
1265 ])
1266 .to_matchable(),
1267 )
1268 .to_matchable()
1269 .into(),
1270 ),
1271 (
1272 "CreateExternalSchemaStatementSegment".into(),
1273 NodeMatcher::new(
1274 SyntaxKind::CreateExternalSchemaStatement,
1275 Sequence::new(vec_of_erased![
1276 Ref::keyword("CREATE"),
1277 Ref::keyword("EXTERNAL"),
1278 Ref::keyword("SCHEMA"),
1279 Ref::new("IfNotExistsGrammar").optional(),
1280 Ref::new("SchemaReferenceSegment"),
1281 Ref::keyword("FROM"),
1282 one_of(vec_of_erased![
1283 Sequence::new(vec_of_erased![
1284 Ref::keyword("DATA"),
1285 Ref::keyword("CATALOG")
1286 ]),
1287 Sequence::new(vec_of_erased![
1288 Ref::keyword("HIVE"),
1289 Ref::keyword("METASTORE")
1290 ]),
1291 Ref::keyword("POSTGRES"),
1292 Ref::keyword("MYSQL"),
1293 Ref::keyword("KINESIS"),
1294 Ref::keyword("REDSHIFT")
1295 ]),
1296 any_set_of(vec_of_erased![
1297 Sequence::new(vec_of_erased![
1298 Ref::keyword("DATABASE"),
1299 Ref::new("QuotedLiteralSegment")
1300 ]),
1301 Sequence::new(vec_of_erased![
1302 Ref::keyword("REGION"),
1303 Ref::new("QuotedLiteralSegment")
1304 ]),
1305 Sequence::new(vec_of_erased![
1306 Ref::keyword("SCHEMA"),
1307 Ref::new("QuotedLiteralSegment")
1308 ]),
1309 Sequence::new(vec_of_erased![
1310 Ref::keyword("URI"),
1311 Ref::new("QuotedLiteralSegment"),
1312 Sequence::new(vec_of_erased![
1313 Ref::keyword("PORT"),
1314 Ref::new("NumericLiteralSegment")
1315 ])
1316 .config(|this| {
1317 this.optional();
1318 })
1319 ]),
1320 Sequence::new(vec_of_erased![
1321 Ref::keyword("IAM_ROLE"),
1322 one_of(vec_of_erased![
1323 Ref::keyword("DEFAULT"),
1324 Ref::new("QuotedLiteralSegment")
1325 ])
1326 ]),
1327 Sequence::new(vec_of_erased![
1328 Ref::keyword("SECRET_ARN"),
1329 Ref::new("QuotedLiteralSegment")
1330 ]),
1331 Sequence::new(vec_of_erased![
1332 Ref::keyword("CATALOG_ROLE"),
1333 Ref::new("QuotedLiteralSegment")
1334 ]),
1335 Sequence::new(vec_of_erased![
1336 Ref::keyword("CREATE"),
1337 Ref::keyword("EXTERNAL"),
1338 Ref::keyword("DATABASE"),
1339 Ref::keyword("IF"),
1340 Ref::keyword("NOT"),
1341 Ref::keyword("EXISTS")
1342 ])
1343 ])
1344 .config(|this| {
1345 this.optional();
1346 })
1347 ])
1348 .to_matchable(),
1349 )
1350 .to_matchable()
1351 .into(),
1352 ),
1353 (
1354 "CreateLibraryStatementSegment".into(),
1355 NodeMatcher::new(
1356 SyntaxKind::CreateLibraryStatement,
1357 Sequence::new(vec_of_erased![
1358 Ref::keyword("CREATE"),
1359 Ref::new("OrReplaceGrammar").optional(),
1360 Ref::keyword("LIBRARY"),
1361 Ref::new("ObjectReferenceSegment"),
1362 Ref::keyword("LANGUAGE"),
1363 Ref::keyword("PLPYTHONU"),
1364 Ref::keyword("FROM"),
1365 Ref::new("QuotedLiteralSegment"),
1366 any_set_of(vec_of_erased![
1367 Ref::new("AuthorizationSegment"),
1368 Sequence::new(vec_of_erased![
1369 Ref::keyword("REGION"),
1370 Ref::keyword("AS").optional(),
1371 Ref::new("QuotedLiteralSegment")
1372 ])
1373 .config(|this| {
1374 this.optional();
1375 })
1376 ])
1377 ])
1378 .to_matchable(),
1379 )
1380 .to_matchable()
1381 .into(),
1382 ),
1383 (
1384 "UnloadStatementSegment".into(),
1385 NodeMatcher::new(
1386 SyntaxKind::UnloadStatement,
1387 Sequence::new(vec_of_erased![
1388 Ref::keyword("UNLOAD"),
1389 Bracketed::new(vec_of_erased![Ref::new("QuotedLiteralSegment")]),
1390 Ref::keyword("TO"),
1391 Ref::new("QuotedLiteralSegment"),
1392 any_set_of(vec_of_erased![
1393 Ref::new("AuthorizationSegment"),
1394 Sequence::new(vec_of_erased![
1395 Ref::keyword("REGION"),
1396 Ref::keyword("AS").optional(),
1397 Ref::new("QuotedLiteralSegment")
1398 ])
1399 .config(|this| {
1400 this.optional();
1401 }),
1402 Ref::new("CompressionTypeGrammar").optional(),
1403 Sequence::new(vec_of_erased![
1404 Sequence::new(vec_of_erased![
1405 Ref::keyword("FORMAT"),
1406 Ref::keyword("AS").optional()
1407 ])
1408 .config(|this| {
1409 this.optional();
1410 }),
1411 one_of(vec_of_erased![
1412 Ref::keyword("CSV"),
1413 Ref::keyword("JSON"),
1414 Ref::keyword("PARQUET")
1415 ])
1416 ])
1417 .config(|this| {
1418 this.optional();
1419 }),
1420 Sequence::new(vec_of_erased![
1421 Ref::keyword("PARTITION"),
1422 Ref::keyword("BY"),
1423 Ref::new("BracketedColumnReferenceListGrammar"),
1424 Ref::keyword("INCLUDE").optional()
1425 ]),
1426 Sequence::new(vec_of_erased![
1427 Ref::keyword("PARALLEL"),
1428 one_of(vec_of_erased![
1429 Ref::keyword("PRESET"),
1430 Ref::keyword("ON"),
1431 Ref::keyword("OFF"),
1432 Ref::keyword("TRUE"),
1433 Ref::keyword("FALSE")
1434 ])
1435 .config(|this| {
1436 this.optional();
1437 })
1438 ])
1439 .config(|this| {
1440 this.optional();
1441 }),
1442 one_of(vec_of_erased![
1443 Sequence::new(vec_of_erased![
1444 Ref::keyword("DELIMITER"),
1445 Ref::keyword("AS").optional(),
1446 Ref::new("QuotedLiteralSegment")
1447 ]),
1448 Sequence::new(vec_of_erased![
1449 Ref::keyword("FIXEDWIDTH"),
1450 Ref::keyword("AS").optional(),
1451 Ref::new("QuotedLiteralSegment")
1452 ])
1453 ])
1454 .config(|this| {
1455 this.optional();
1456 }),
1457 Sequence::new(vec_of_erased![
1458 Ref::keyword("MANIFEST"),
1459 Ref::keyword("VERBOSE").optional()
1460 ])
1461 .config(|this| {
1462 this.optional();
1463 }),
1464 Sequence::new(vec_of_erased![
1465 Ref::keyword("NULL"),
1466 Ref::keyword("AS"),
1467 Ref::new("QuotedLiteralSegment")
1468 ])
1469 .config(|this| {
1470 this.optional();
1471 }),
1472 Sequence::new(vec_of_erased![
1473 Ref::keyword("NULL"),
1474 Ref::keyword("AS"),
1475 Ref::new("QuotedLiteralSegment")
1476 ])
1477 .config(|this| {
1478 this.optional();
1479 }),
1480 any_set_of(vec_of_erased![
1481 one_of(vec_of_erased![
1482 Ref::keyword("MAXFILESIZE"),
1483 Ref::keyword("ROWGROUPSIZE")
1484 ]),
1485 Ref::keyword("AS").optional(),
1486 Ref::new("NumericLiteralSegment"),
1487 one_of(vec_of_erased![Ref::keyword("MB"), Ref::keyword("GB")])
1488 ])
1489 .config(|this| {
1490 this.optional();
1491 }),
1492 Sequence::new(vec_of_erased![
1493 Ref::keyword("ENCRYPTED"),
1494 Ref::keyword("AUTO").optional()
1495 ])
1496 .config(|this| {
1497 this.optional();
1498 }),
1499 Ref::keyword("ALLOWOVERWRITE").optional(),
1500 Ref::keyword("CLEANPATH").optional(),
1501 Ref::keyword("ESCAPE").optional(),
1502 Ref::keyword("ADDQUOTES").optional(),
1503 Ref::keyword("HEADER").optional()
1504 ])
1505 ])
1506 .to_matchable(),
1507 )
1508 .to_matchable()
1509 .into(),
1510 ),
1511 ]);
1512 redshift_dialect.replace_grammar(
1513 "CopyStatementSegment",
1514 Sequence::new(vec_of_erased![
1515 Ref::keyword("COPY"),
1516 Ref::new("TableReferenceSegment"),
1517 Ref::new("BracketedColumnReferenceListGrammar").optional(),
1518 Ref::keyword("FROM"),
1519 Ref::new("QuotedLiteralSegment"),
1520 any_set_of(vec_of_erased![
1521 Ref::new("AuthorizationSegment"),
1522 Sequence::new(vec_of_erased![
1523 Ref::keyword("REGION"),
1524 Ref::keyword("AS").optional(),
1525 Ref::new("QuotedLiteralSegment")
1526 ])
1527 .config(|this| {
1528 this.optional();
1529 }),
1530 Ref::new("CompressionTypeGrammar").optional(),
1531 Ref::new("DataFormatSegment").optional(),
1532 one_of(vec_of_erased![
1533 Sequence::new(vec_of_erased![
1534 Ref::keyword("DELIMITER"),
1535 Ref::keyword("AS").optional(),
1536 Ref::new("QuotedLiteralSegment")
1537 ]),
1538 Sequence::new(vec_of_erased![
1539 Ref::keyword("FIXEDWIDTH"),
1540 Ref::keyword("AS").optional(),
1541 Ref::new("QuotedLiteralSegment")
1542 ])
1543 ])
1544 .config(|this| {
1545 this.optional();
1546 }),
1547 Sequence::new(vec_of_erased![
1548 Ref::keyword("ENCRYPTED"),
1549 Ref::keyword("AUTO").optional()
1550 ])
1551 .config(|this| {
1552 this.optional();
1553 }),
1554 Ref::keyword("MANIFEST").optional(),
1555 Sequence::new(vec_of_erased![
1556 Ref::keyword("COMPROWS"),
1557 Ref::new("NumericLiteralSegment")
1558 ])
1559 .config(|this| {
1560 this.optional();
1561 }),
1562 Sequence::new(vec_of_erased![
1563 Ref::keyword("MAXERROR"),
1564 Ref::keyword("AS").optional(),
1565 Ref::new("NumericLiteralSegment")
1566 ])
1567 .config(|this| {
1568 this.optional();
1569 }),
1570 Sequence::new(vec_of_erased![
1571 Ref::keyword("COMPUPDATE"),
1572 one_of(vec_of_erased![
1573 Ref::keyword("PRESET"),
1574 Ref::keyword("ON"),
1575 Ref::keyword("OFF"),
1576 Ref::keyword("TRUE"),
1577 Ref::keyword("FALSE")
1578 ])
1579 .config(|this| {
1580 this.optional();
1581 })
1582 ])
1583 .config(|this| {
1584 this.optional();
1585 }),
1586 Sequence::new(vec_of_erased![
1587 Ref::keyword("STATUPDATE"),
1588 one_of(vec_of_erased![
1589 Ref::keyword("ON"),
1590 Ref::keyword("OFF"),
1591 Ref::keyword("TRUE"),
1592 Ref::keyword("FALSE")
1593 ])
1594 .config(|this| {
1595 this.optional();
1596 })
1597 ])
1598 .config(|this| {
1599 this.optional();
1600 }),
1601 Ref::keyword("NOLOAD").optional(),
1602 Ref::keyword("ACCEPTANYDATE").optional(),
1603 Sequence::new(vec_of_erased![
1604 Ref::keyword("ACCEPTINVCHARS"),
1605 Ref::keyword("AS").optional(),
1606 Ref::new("QuotedLiteralSegment").optional()
1607 ])
1608 .config(|this| {
1609 this.optional();
1610 }),
1611 Ref::keyword("BLANKSASNULL").optional(),
1612 Sequence::new(vec_of_erased![
1613 Ref::keyword("DATEFORMAT"),
1614 Ref::keyword("AS").optional(),
1615 one_of(vec_of_erased![
1616 Ref::keyword("AUTO"),
1617 Ref::new("QuotedLiteralSegment")
1618 ])
1619 ])
1620 .config(|this| {
1621 this.optional();
1622 }),
1623 Ref::keyword("EMPTYASNULL").optional(),
1624 Sequence::new(vec_of_erased![
1625 Ref::keyword("ENCODING"),
1626 Ref::keyword("AS").optional(),
1627 one_of(vec_of_erased![
1628 Ref::keyword("UTF8"),
1629 Ref::keyword("UTF16"),
1630 Ref::keyword("UTF16BE"),
1631 Ref::keyword("UTF16LE")
1632 ])
1633 ])
1634 .config(|this| {
1635 this.optional();
1636 }),
1637 Ref::keyword("ESCAPE").optional(),
1638 Ref::keyword("EXPLICIT_IDS").optional(),
1639 Ref::keyword("FILLRECORD").optional(),
1640 Ref::keyword("IGNOREBLANKLINES").optional(),
1641 Sequence::new(vec_of_erased![
1642 Ref::keyword("IGNOREHEADER"),
1643 Ref::keyword("AS").optional(),
1644 Ref::new("LiteralGrammar")
1645 ])
1646 .config(|this| {
1647 this.optional();
1648 }),
1649 Sequence::new(vec_of_erased![
1650 Ref::keyword("NULL"),
1651 Ref::keyword("AS"),
1652 Ref::new("QuotedLiteralSegment")
1653 ])
1654 .config(|this| {
1655 this.optional();
1656 }),
1657 Sequence::new(vec_of_erased![
1658 Ref::keyword("READRATIO"),
1659 Ref::new("NumericLiteralSegment")
1660 ])
1661 .config(|this| {
1662 this.optional();
1663 }),
1664 Ref::keyword("REMOVEQUOTES").optional(),
1665 Ref::keyword("ROUNDEC").optional(),
1666 Sequence::new(vec_of_erased![
1667 Ref::keyword("TIMEFORMAT"),
1668 Ref::keyword("AS").optional(),
1669 one_of(vec_of_erased![
1670 Ref::keyword("AUTO"),
1671 Ref::keyword("EPOCHSECS"),
1672 Ref::keyword("EPOCHMILLISECS"),
1673 Ref::new("QuotedLiteralSegment")
1674 ])
1675 ])
1676 .config(|this| {
1677 this.optional();
1678 }),
1679 Ref::keyword("TRIMBLANKS").optional(),
1680 Ref::keyword("TRUNCATECOLUMNS").optional()
1681 ])
1682 ])
1683 .to_matchable(),
1684 );
1685 redshift_dialect.add([
1686 (
1687 "InsertStatementSegment".into(),
1688 NodeMatcher::new(
1689 SyntaxKind::InsertStatement,
1690 Sequence::new(vec_of_erased![
1691 Ref::keyword("INSERT"),
1692 Ref::keyword("INTO"),
1693 Ref::new("TableReferenceSegment"),
1694 one_of(vec_of_erased![
1695 optionally_bracketed(vec_of_erased![Ref::new("SelectableGrammar")]),
1696 Sequence::new(vec_of_erased![
1697 Ref::keyword("DEFAULT"),
1698 Ref::keyword("VALUES")
1699 ]),
1700 Sequence::new(vec_of_erased![
1701 Ref::new("BracketedColumnReferenceListGrammar").optional(),
1702 one_of(vec_of_erased![
1703 Ref::new("ValuesClauseSegment"),
1704 optionally_bracketed(vec_of_erased![Ref::new("SelectableGrammar")])
1705 ])
1706 ])
1707 ])
1708 ])
1709 .to_matchable(),
1710 )
1711 .to_matchable()
1712 .into(),
1713 ),
1714 (
1715 "CreateSchemaStatementSegment".into(),
1716 NodeMatcher::new(
1717 SyntaxKind::CreateSchemaStatement,
1718 Sequence::new(vec_of_erased![
1719 Ref::keyword("CREATE"),
1720 Ref::keyword("SCHEMA"),
1721 one_of(vec_of_erased![
1722 Sequence::new(vec_of_erased![
1723 Ref::new("IfNotExistsGrammar").optional(),
1724 Ref::new("SchemaReferenceSegment"),
1725 Sequence::new(vec_of_erased![
1726 Ref::keyword("AUTHORIZATION"),
1727 Ref::new("RoleReferenceSegment")
1728 ])
1729 .config(|this| {
1730 this.optional();
1731 })
1732 ]),
1733 Sequence::new(vec_of_erased![
1734 Ref::keyword("AUTHORIZATION"),
1735 Ref::new("RoleReferenceSegment")
1736 ])
1737 ]),
1738 Ref::new("QuotaGrammar").optional()
1739 ])
1740 .to_matchable(),
1741 )
1742 .to_matchable()
1743 .into(),
1744 ),
1745 (
1746 "ProcedureParameterListSegment".into(),
1747 NodeMatcher::new(SyntaxKind::ProcedureParameterList, {
1748 let param_type = one_of(vec_of_erased![
1749 Ref::keyword("REFCURSOR"),
1750 Ref::new("DatatypeSegment")
1751 ]);
1752 Bracketed::new(vec_of_erased![
1753 Delimited::new(vec_of_erased![Sequence::new(vec_of_erased![
1754 AnyNumberOf::new(vec_of_erased![
1755 Ref::new("ParameterNameSegment")
1756 .exclude(one_of(vec_of_erased![
1757 param_type.clone(),
1758 Ref::new("ArgModeGrammar")
1759 ]))
1760 .optional(),
1761 Ref::new("ArgModeGrammar").optional()
1762 ])
1763 .config(|this| {
1764 this.max_times_per_element = 1.into();
1765 }),
1766 param_type.clone()
1767 ])])
1768 .config(|this| {
1769 this.optional();
1770 })
1771 ])
1772 .to_matchable()
1773 })
1774 .to_matchable()
1775 .into(),
1776 ),
1777 (
1778 "CreateProcedureStatementSegment".into(),
1779 NodeMatcher::new(
1780 SyntaxKind::CreateProcedureStatement,
1781 Sequence::new(vec_of_erased![
1782 Ref::keyword("CREATE"),
1783 Ref::new("OrReplaceGrammar").optional(),
1784 Ref::keyword("PROCEDURE"),
1785 Ref::new("FunctionNameSegment"),
1786 Ref::new("ProcedureParameterListSegment"),
1787 Ref::new("FunctionDefinitionGrammar")
1788 ])
1789 .to_matchable(),
1790 )
1791 .to_matchable()
1792 .into(),
1793 ),
1794 (
1795 "AlterProcedureStatementSegment".into(),
1796 NodeMatcher::new(
1797 SyntaxKind::AlterProcedureStatement,
1798 Sequence::new(vec_of_erased![
1799 Ref::keyword("ALTER"),
1800 Ref::keyword("PROCEDURE"),
1801 Ref::new("FunctionNameSegment"),
1802 Ref::new("ProcedureParameterListSegment").optional(),
1803 one_of(vec_of_erased![
1804 Sequence::new(vec_of_erased![
1805 Ref::keyword("RENAME"),
1806 Ref::keyword("TO"),
1807 Ref::new("FunctionNameSegment")
1808 ]),
1809 Sequence::new(vec_of_erased![
1810 Ref::keyword("OWNER"),
1811 Ref::keyword("TO"),
1812 one_of(vec_of_erased![
1813 one_of(vec_of_erased![
1814 Ref::new("ParameterNameSegment"),
1815 Ref::new("QuotedIdentifierSegment")
1816 ]),
1817 Ref::keyword("CURRENT_USER"),
1818 Ref::keyword("SESSION_USER")
1819 ])
1820 ])
1821 ])
1822 ])
1823 .to_matchable(),
1824 )
1825 .to_matchable()
1826 .into(),
1827 ),
1828 (
1829 "DropProcedureStatementSegment".into(),
1830 NodeMatcher::new(
1831 SyntaxKind::DropProcedureStatement,
1832 Sequence::new(vec_of_erased![
1833 Ref::keyword("DROP"),
1834 Ref::keyword("PROCEDURE"),
1835 Ref::new("IfExistsGrammar").optional(),
1836 Delimited::new(vec_of_erased![Sequence::new(vec_of_erased![
1837 Ref::new("FunctionNameSegment"),
1838 Ref::new("ProcedureParameterListSegment").optional()
1839 ])])
1840 ])
1841 .to_matchable(),
1842 )
1843 .to_matchable()
1844 .into(),
1845 ),
1846 ]);
1847
1848 redshift_dialect.replace_grammar(
1849 "AlterDefaultPrivilegesSchemaObjectsSegment",
1850 postgres_dialect
1851 .grammar("AlterDefaultPrivilegesSchemaObjectsSegment")
1852 .match_grammar()
1853 .unwrap()
1854 .copy(
1855 Some(vec_of_erased![Sequence::new(vec_of_erased![Ref::keyword(
1856 "PROCEDURES"
1857 )])]),
1858 None,
1859 None,
1860 None,
1861 Vec::new(),
1862 false,
1863 ),
1864 );
1865
1866 redshift_dialect.add([
1867 (
1868 "DeclareStatementSegment".into(),
1869 NodeMatcher::new(
1870 SyntaxKind::DeclareStatement,
1871 Sequence::new(vec_of_erased![
1872 Ref::keyword("DECLARE"),
1873 Ref::new("ObjectReferenceSegment"),
1874 Ref::keyword("CURSOR"),
1875 Ref::keyword("FOR"),
1876 Ref::new("SelectableGrammar")
1877 ])
1878 .to_matchable(),
1879 )
1880 .to_matchable()
1881 .into(),
1882 ),
1883 (
1884 "FetchStatementSegment".into(),
1885 NodeMatcher::new(
1886 SyntaxKind::FetchStatement,
1887 Sequence::new(vec_of_erased![
1888 Ref::keyword("fetch"),
1889 one_of(vec_of_erased![
1890 Ref::keyword("NEXT"),
1891 Ref::keyword("ALL"),
1892 Sequence::new(vec_of_erased![
1893 Ref::keyword("FORWARD"),
1894 one_of(vec_of_erased![
1895 Ref::keyword("ALL"),
1896 Ref::new("NumericLiteralSegment")
1897 ])
1898 ])
1899 ]),
1900 Ref::keyword("FROM"),
1901 Ref::new("ObjectReferenceSegment")
1902 ])
1903 .to_matchable(),
1904 )
1905 .to_matchable()
1906 .into(),
1907 ),
1908 (
1909 "CloseStatementSegment".into(),
1910 NodeMatcher::new(
1911 SyntaxKind::CloseStatement,
1912 Sequence::new(vec_of_erased![
1913 Ref::keyword("CLOSE"),
1914 Ref::new("ObjectReferenceSegment")
1915 ])
1916 .to_matchable(),
1917 )
1918 .to_matchable()
1919 .into(),
1920 ),
1921 (
1922 "AltereDatashareStatementSegment".into(),
1923 NodeMatcher::new(
1924 SyntaxKind::CreateDatashareStatement,
1925 Sequence::new(vec_of_erased![
1926 Ref::keyword("ALTER"),
1927 Ref::keyword("DATASHARE"),
1928 Ref::new("ObjectReferenceSegment"),
1929 one_of(vec_of_erased![
1930 Sequence::new(vec_of_erased![
1931 one_of(vec_of_erased![Ref::keyword("ADD"), Ref::keyword("REMOVE")]),
1932 one_of(vec_of_erased![
1933 Sequence::new(vec_of_erased![
1934 Ref::keyword("TABLE"),
1935 Delimited::new(vec_of_erased![Ref::new(
1936 "TableReferenceSegment"
1937 )])
1938 ]),
1939 Sequence::new(vec_of_erased![
1940 Ref::keyword("SCHEMA"),
1941 Delimited::new(vec_of_erased![Ref::new(
1942 "SchemaReferenceSegment"
1943 )])
1944 ]),
1945 Sequence::new(vec_of_erased![
1946 Ref::keyword("FUNCTION"),
1947 Delimited::new(vec_of_erased![Ref::new("FunctionNameSegment")])
1948 ]),
1949 Sequence::new(vec_of_erased![
1950 Ref::keyword("ALL"),
1951 one_of(vec_of_erased![
1952 Ref::keyword("TABLES"),
1953 Ref::keyword("FUNCTIONS")
1954 ]),
1955 Ref::keyword("IN"),
1956 Ref::keyword("SCHEMA"),
1957 Delimited::new(vec_of_erased![Ref::new(
1958 "SchemaReferenceSegment"
1959 )])
1960 ])
1961 ])
1962 ]),
1963 Sequence::new(vec_of_erased![
1964 Ref::keyword("SET"),
1965 one_of(vec_of_erased![
1966 Sequence::new(vec_of_erased![
1967 Ref::keyword("PUBLICACCESSIBLE"),
1968 Ref::new("EqualsSegment").optional(),
1969 Ref::new("BooleanLiteralGrammar")
1970 ]),
1971 Sequence::new(vec_of_erased![
1972 Ref::keyword("INCLUDENEW"),
1973 Ref::new("EqualsSegment").optional(),
1974 Ref::new("BooleanLiteralGrammar"),
1975 Ref::keyword("FOR"),
1976 Ref::keyword("SCHEMA"),
1977 Ref::new("SchemaReferenceSegment")
1978 ])
1979 ])
1980 ])
1981 ])
1982 ])
1983 .to_matchable(),
1984 )
1985 .to_matchable()
1986 .into(),
1987 ),
1988 (
1989 "CreateDatashareStatementSegment".into(),
1990 NodeMatcher::new(
1991 SyntaxKind::CreateDatashareStatement,
1992 Sequence::new(vec_of_erased![
1993 Ref::keyword("CREATE"),
1994 Ref::keyword("DATASHARE"),
1995 Ref::new("ObjectReferenceSegment"),
1996 Sequence::new(vec_of_erased![
1997 Ref::keyword("SET").optional(),
1998 Ref::keyword("PUBLICACCESSIBLE"),
1999 Ref::new("EqualsSegment").optional(),
2000 one_of(vec_of_erased![Ref::keyword("TRUE"), Ref::keyword("FALSE")])
2001 ])
2002 .config(|this| {
2003 this.optional();
2004 })
2005 ])
2006 .to_matchable(),
2007 )
2008 .to_matchable()
2009 .into(),
2010 ),
2011 (
2012 "DescDatashareStatementSegment".into(),
2013 NodeMatcher::new(
2014 SyntaxKind::DescDatashareStatement,
2015 Sequence::new(vec_of_erased![
2016 Ref::keyword("DESC"),
2017 Ref::keyword("DATASHARE"),
2018 Ref::new("ObjectReferenceSegment"),
2019 Sequence::new(vec_of_erased![
2020 Ref::keyword("OF"),
2021 Sequence::new(vec_of_erased![
2022 Ref::keyword("ACCOUNT"),
2023 Ref::new("QuotedLiteralSegment")
2024 ])
2025 .config(|this| {
2026 this.optional();
2027 }),
2028 Ref::keyword("NAMESPACE"),
2029 Ref::new("QuotedLiteralSegment")
2030 ])
2031 .config(|this| {
2032 this.optional();
2033 })
2034 ])
2035 .to_matchable(),
2036 )
2037 .to_matchable()
2038 .into(),
2039 ),
2040 (
2041 "DropDatashareStatementSegment".into(),
2042 NodeMatcher::new(
2043 SyntaxKind::DropDatashareStatement,
2044 Sequence::new(vec_of_erased![
2045 Ref::keyword("DROP"),
2046 Ref::keyword("DATASHARE"),
2047 Ref::new("ObjectReferenceSegment")
2048 ])
2049 .to_matchable(),
2050 )
2051 .to_matchable()
2052 .into(),
2053 ),
2054 (
2055 "ShowDatasharesStatementSegment".into(),
2056 NodeMatcher::new(
2057 SyntaxKind::ShowDatasharesStatement,
2058 Sequence::new(vec_of_erased![
2059 Ref::keyword("SHOW"),
2060 Ref::keyword("DATASHARES"),
2061 Sequence::new(vec_of_erased![
2062 Ref::keyword("LIKE"),
2063 Ref::new("QuotedLiteralSegment")
2064 ])
2065 .config(|this| {
2066 this.optional();
2067 })
2068 ])
2069 .to_matchable(),
2070 )
2071 .to_matchable()
2072 .into(),
2073 ),
2074 (
2075 "GrantUsageDatashareStatementSegment".into(),
2076 NodeMatcher::new(
2077 SyntaxKind::GrantDatashareStatement,
2078 Sequence::new(vec_of_erased![
2079 one_of(vec_of_erased![
2080 Ref::keyword("GRANT"),
2081 Ref::keyword("REVOKE")
2082 ]),
2083 Ref::keyword("USAGE"),
2084 Ref::keyword("ON"),
2085 Ref::keyword("DATASHARE"),
2086 Ref::new("ObjectReferenceSegment"),
2087 one_of(vec_of_erased![Ref::keyword("TO"), Ref::keyword("FROM")]),
2088 one_of(vec_of_erased![
2089 Sequence::new(vec_of_erased![
2090 Ref::keyword("NAMESPACE"),
2091 Ref::new("QuotedLiteralSegment")
2092 ]),
2093 Sequence::new(vec_of_erased![
2094 Ref::keyword("ACCOUNT"),
2095 Sequence::new(vec_of_erased![
2096 Ref::new("QuotedLiteralSegment"),
2097 Sequence::new(vec_of_erased![
2098 Ref::keyword("VIA"),
2099 Ref::keyword("DATA"),
2100 Ref::keyword("CATALOG")
2101 ])
2102 .config(|this| {
2103 this.optional();
2104 })
2105 ])
2106 ])
2107 ])
2108 ])
2109 .to_matchable(),
2110 )
2111 .to_matchable()
2112 .into(),
2113 ),
2114 (
2115 "CreateRlsPolicyStatementSegment".into(),
2116 NodeMatcher::new(
2117 SyntaxKind::CreateRlsPolicyStatement,
2118 Sequence::new(vec_of_erased![
2119 Ref::keyword("CREATE"),
2120 Ref::keyword("RLS"),
2121 Ref::keyword("POLICY"),
2122 Ref::new("ObjectReferenceSegment"),
2123 Sequence::new(vec_of_erased![
2124 Ref::keyword("WITH"),
2125 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
2126 Sequence::new(vec_of_erased![
2127 Ref::new("ColumnReferenceSegment"),
2128 Ref::new("DatatypeSegment")
2129 ])
2130 ])]),
2131 Sequence::new(vec_of_erased![
2132 Ref::keyword("AS").optional(),
2133 Ref::new("AliasExpressionSegment")
2134 ])
2135 .config(|this| {
2136 this.optional();
2137 })
2138 ])
2139 .config(|this| {
2140 this.optional();
2141 }),
2142 Sequence::new(vec_of_erased![
2143 Ref::keyword("USING"),
2144 Bracketed::new(vec_of_erased![Ref::new("ExpressionSegment")])
2145 ])
2146 ])
2147 .to_matchable(),
2148 )
2149 .to_matchable()
2150 .into(),
2151 ),
2152 (
2153 "ManageRlsPolicyStatementSegment".into(),
2154 NodeMatcher::new(
2155 SyntaxKind::ManageRlsPolicyStatement,
2156 Sequence::new(vec_of_erased![
2157 one_of(vec_of_erased![
2158 Ref::keyword("ATTACH"),
2159 Ref::keyword("DETACH")
2160 ]),
2161 Ref::keyword("RLS"),
2162 Ref::keyword("POLICY"),
2163 Ref::new("ObjectReferenceSegment"),
2164 Ref::keyword("ON"),
2165 Ref::keyword("TABLE").optional(),
2166 Delimited::new(vec_of_erased![Ref::new("TableReferenceSegment")]),
2167 one_of(vec_of_erased![Ref::keyword("TO"), Ref::keyword("FROM")]),
2168 Delimited::new(vec_of_erased![one_of(vec_of_erased![
2169 Sequence::new(vec_of_erased![
2170 Ref::keyword("ROLE").optional(),
2171 Ref::new("RoleReferenceSegment")
2172 ]),
2173 Ref::keyword("PUBLIC")
2174 ])])
2175 ])
2176 .to_matchable(),
2177 )
2178 .to_matchable()
2179 .into(),
2180 ),
2181 (
2182 "DropRlsPolicyStatementSegment".into(),
2183 NodeMatcher::new(
2184 SyntaxKind::DropRlsPolicyStatement,
2185 Sequence::new(vec_of_erased![
2186 Ref::keyword("DROP"),
2187 Ref::keyword("RLS"),
2188 Ref::keyword("POLICY"),
2189 Ref::new("IfExistsGrammar").optional(),
2190 Ref::new("ObjectReferenceSegment"),
2191 one_of(vec_of_erased![
2192 Ref::keyword("CASCADE"),
2193 Ref::keyword("RESTRICT")
2194 ])
2195 .config(|this| {
2196 this.optional();
2197 })
2198 ])
2199 .to_matchable(),
2200 )
2201 .to_matchable()
2202 .into(),
2203 ),
2204 (
2205 "AnalyzeCompressionStatementSegment".into(),
2206 NodeMatcher::new(
2207 SyntaxKind::AnalyzeCompressionStatement,
2208 Sequence::new(vec_of_erased![
2209 one_of(vec_of_erased![
2210 Ref::keyword("ANALYZE"),
2211 Ref::keyword("ANALYSE")
2212 ]),
2213 Ref::keyword("COMPRESSION"),
2214 Sequence::new(vec_of_erased![
2215 Ref::new("TableReferenceSegment"),
2216 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![Ref::new(
2217 "ColumnReferenceSegment"
2218 )])])
2219 .config(|this| {
2220 this.optional();
2221 }),
2222 Sequence::new(vec_of_erased![
2223 Ref::keyword("COMPROWS"),
2224 Ref::new("NumericLiteralSegment")
2225 ])
2226 .config(|this| {
2227 this.optional();
2228 })
2229 ])
2230 .config(|this| {
2231 this.optional();
2232 })
2233 ])
2234 .to_matchable(),
2235 )
2236 .to_matchable()
2237 .into(),
2238 ),
2239 ]);
2240 redshift_dialect.replace_grammar(
2241 "VacuumStatementSegment",
2242 Sequence::new(vec_of_erased![
2243 Ref::keyword("VACUUM"),
2244 one_of(vec_of_erased![
2245 Ref::keyword("FULL"),
2246 Ref::keyword("REINDEX"),
2247 Ref::keyword("RECLUSTER"),
2248 Sequence::new(vec_of_erased![
2249 one_of(vec_of_erased![Ref::keyword("SORT"), Ref::keyword("DELETE")]),
2250 Ref::keyword("ONLY")
2251 ])
2252 ])
2253 .config(|this| {
2254 this.optional();
2255 }),
2256 Ref::new("TableReferenceSegment").optional(),
2257 Sequence::new(vec_of_erased![
2258 Ref::keyword("TO"),
2259 Ref::new("NumericLiteralSegment"),
2260 Ref::keyword("PERCENT")
2261 ])
2262 .config(|this| {
2263 this.optional();
2264 }),
2265 Ref::keyword("BOOST").optional()
2266 ])
2267 .to_matchable(),
2268 );
2269
2270 redshift_dialect.add([]);
2271
2272 redshift_dialect.replace_grammar(
2273 "StatementSegment",
2274 postgres_dialect
2275 .grammar("StatementSegment")
2276 .match_grammar()
2277 .unwrap()
2278 .copy(
2279 Some(vec_of_erased![
2280 Ref::new("CreateLibraryStatementSegment"),
2281 Ref::new("CreateGroupStatementSegment"),
2282 Ref::new("AlterUserStatementSegment"),
2283 Ref::new("AlterGroupStatementSegment"),
2284 Ref::new("CreateExternalTableAsStatementSegment"),
2285 Ref::new("CreateExternalTableStatementSegment"),
2286 Ref::new("CreateExternalSchemaStatementSegment"),
2287 Ref::new("DataFormatSegment"),
2288 Ref::new("UnloadStatementSegment"),
2289 Ref::new("CopyStatementSegment"),
2290 Ref::new("ShowModelStatementSegment"),
2291 Ref::new("CreateDatashareStatementSegment"),
2292 Ref::new("DescDatashareStatementSegment"),
2293 Ref::new("DropDatashareStatementSegment"),
2294 Ref::new("ShowDatasharesStatementSegment"),
2295 Ref::new("AltereDatashareStatementSegment"),
2296 Ref::new("DeclareStatementSegment"),
2297 Ref::new("FetchStatementSegment"),
2298 Ref::new("CloseStatementSegment"),
2299 Ref::new("AnalyzeCompressionStatementSegment"),
2300 Ref::new("AlterProcedureStatementSegment"),
2301 Ref::new("CallStatementSegment"),
2302 Ref::new("CreateRlsPolicyStatementSegment"),
2303 Ref::new("ManageRlsPolicyStatementSegment"),
2304 Ref::new("DropRlsPolicyStatementSegment"),
2305 Ref::new("CreateExternalFunctionStatementSegment"),
2306 Ref::new("GrantUsageDatashareStatementSegment"),
2307 ]),
2308 None,
2309 None,
2310 None,
2311 Vec::new(),
2312 false,
2313 ),
2314 );
2315
2316 redshift_dialect.add([
2317 (
2318 "PartitionedBySegment".into(),
2319 NodeMatcher::new(
2320 SyntaxKind::PartitionedBySegment,
2321 Sequence::new(vec_of_erased![
2322 Ref::keyword("PARTITIONED"),
2323 Ref::keyword("BY"),
2324 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
2325 Sequence::new(vec_of_erased![
2326 Ref::new("ColumnReferenceSegment"),
2327 Ref::new("DatatypeSegment").optional()
2328 ])
2329 ])])
2330 ])
2331 .to_matchable(),
2332 )
2333 .to_matchable()
2334 .into(),
2335 ),
2336 (
2337 "RowFormatDelimitedSegment".into(),
2338 NodeMatcher::new(
2339 SyntaxKind::RowFormatDelimitedSegment,
2340 any_set_of(vec_of_erased![
2341 Sequence::new(vec_of_erased![
2342 Ref::keyword("FIELDS"),
2343 Ref::keyword("TERMINATED"),
2344 Ref::keyword("BY"),
2345 Ref::new("QuotedLiteralSegment")
2346 ]),
2347 Sequence::new(vec_of_erased![
2348 Ref::keyword("LINES"),
2349 Ref::keyword("TERMINATED"),
2350 Ref::keyword("BY"),
2351 Ref::new("QuotedLiteralSegment")
2352 ])
2353 ])
2354 .config(|this| {
2355 this.optional();
2356 })
2357 .to_matchable(),
2358 )
2359 .to_matchable()
2360 .into(),
2361 ),
2362 ]);
2363
2364 redshift_dialect.replace_grammar(
2365 "CreateUserStatementSegment",
2366 Sequence::new(vec_of_erased![
2367 Ref::keyword("CREATE"),
2368 Ref::keyword("USER"),
2369 Ref::new("RoleReferenceSegment"),
2370 Ref::keyword("WITH").optional(),
2371 Ref::keyword("PASSWORD"),
2372 one_of(vec_of_erased![
2373 Ref::new("QuotedLiteralSegment"),
2374 Ref::keyword("DISABLE")
2375 ]),
2376 any_set_of(vec_of_erased![
2377 one_of(vec_of_erased![
2378 Ref::keyword("CREATEDB"),
2379 Ref::keyword("NOCREATEDB")
2380 ]),
2381 one_of(vec_of_erased![
2382 Ref::keyword("CREATEUSER"),
2383 Ref::keyword("NOCREATEUSER")
2384 ]),
2385 Sequence::new(vec_of_erased![
2386 Ref::keyword("SYSLOG"),
2387 Ref::keyword("ACCESS"),
2388 one_of(vec_of_erased![
2389 Ref::keyword("RESTRICTED"),
2390 Ref::keyword("UNRESTRICTED")
2391 ])
2392 ]),
2393 Sequence::new(vec_of_erased![
2394 Ref::keyword("IN"),
2395 Ref::keyword("GROUP"),
2396 Delimited::new(vec_of_erased![Ref::new("ObjectReferenceSegment")])
2397 ]),
2398 Sequence::new(vec_of_erased![
2399 Ref::keyword("VALID"),
2400 Ref::keyword("UNTIL"),
2401 Ref::new("QuotedLiteralSegment")
2402 ]),
2403 Sequence::new(vec_of_erased![
2404 Ref::keyword("CONNECTION"),
2405 Ref::keyword("LIMIT"),
2406 one_of(vec_of_erased![
2407 Ref::new("NumericLiteralSegment"),
2408 Ref::keyword("UNLIMITED")
2409 ])
2410 ]),
2411 Sequence::new(vec_of_erased![
2412 Ref::keyword("SESSION"),
2413 Ref::keyword("TIMEOUT"),
2414 Ref::new("NumericLiteralSegment")
2415 ])
2416 ])
2417 ])
2418 .to_matchable(),
2419 );
2420 redshift_dialect.add([
2421 (
2422 "CreateGroupStatementSegment".into(),
2423 NodeMatcher::new(
2424 SyntaxKind::CreateGroup,
2425 Sequence::new(vec_of_erased![
2426 Ref::keyword("CREATE"),
2427 Ref::keyword("GROUP"),
2428 Ref::new("ObjectReferenceSegment"),
2429 Sequence::new(vec_of_erased![
2430 Ref::keyword("WITH").optional(),
2431 Ref::keyword("USER"),
2432 Delimited::new(vec_of_erased![Ref::new("ObjectReferenceSegment")])
2433 ])
2434 .config(|this| {
2435 this.optional();
2436 })
2437 ])
2438 .to_matchable(),
2439 )
2440 .to_matchable()
2441 .into(),
2442 ),
2443 (
2444 "AlterUserStatementSegment".into(),
2445 NodeMatcher::new(
2446 SyntaxKind::AlterUserStatement,
2447 Sequence::new(vec_of_erased![
2448 Ref::keyword("ALTER"),
2449 Ref::keyword("USER"),
2450 Ref::new("RoleReferenceSegment"),
2451 Ref::keyword("WITH").optional(),
2452 any_set_of(vec_of_erased![
2453 one_of(vec_of_erased![
2454 Ref::keyword("CREATEDB"),
2455 Ref::keyword("NOCREATEDB")
2456 ]),
2457 one_of(vec_of_erased![
2458 Ref::keyword("CREATEUSER"),
2459 Ref::keyword("NOCREATEUSER")
2460 ]),
2461 Sequence::new(vec_of_erased![
2462 Ref::keyword("SYSLOG"),
2463 Ref::keyword("ACCESS"),
2464 one_of(vec_of_erased![
2465 Ref::keyword("RESTRICTED"),
2466 Ref::keyword("UNRESTRICTED")
2467 ])
2468 ]),
2469 Sequence::new(vec_of_erased![
2470 Ref::keyword("PASSWORD"),
2471 one_of(vec_of_erased![
2472 Ref::new("QuotedLiteralSegment"),
2473 Ref::keyword("DISABLE")
2474 ]),
2475 Sequence::new(vec_of_erased![
2476 Ref::keyword("VALID"),
2477 Ref::keyword("UNTIL"),
2478 Ref::new("QuotedLiteralSegment")
2479 ])
2480 .config(|this| {
2481 this.optional();
2482 })
2483 ]),
2484 Sequence::new(vec_of_erased![
2485 Ref::keyword("RENAME"),
2486 Ref::keyword("TO"),
2487 Ref::new("ObjectReferenceSegment")
2488 ]),
2489 Sequence::new(vec_of_erased![
2490 Ref::keyword("CONNECTION"),
2491 Ref::keyword("LIMIT"),
2492 one_of(vec_of_erased![
2493 Ref::new("NumericLiteralSegment"),
2494 Ref::keyword("UNLIMITED")
2495 ])
2496 ]),
2497 one_of(vec_of_erased![
2498 Sequence::new(vec_of_erased![
2499 Ref::keyword("SESSION"),
2500 Ref::keyword("TIMEOUT"),
2501 Ref::new("NumericLiteralSegment")
2502 ]),
2503 Sequence::new(vec_of_erased![
2504 Ref::keyword("RESET"),
2505 Ref::keyword("SESSION"),
2506 Ref::keyword("TIMEOUT")
2507 ])
2508 ]),
2509 one_of(vec_of_erased![
2510 Sequence::new(vec_of_erased![
2511 Ref::keyword("SET"),
2512 Ref::new("ObjectReferenceSegment"),
2513 one_of(vec_of_erased![
2514 Ref::keyword("TO"),
2515 Ref::new("EqualsSegment")
2516 ]),
2517 one_of(vec_of_erased![
2518 Ref::keyword("DEFAULT"),
2519 Ref::new("LiteralGrammar")
2520 ])
2521 ]),
2522 Sequence::new(vec_of_erased![
2523 Ref::keyword("RESET"),
2524 Ref::new("ObjectReferenceSegment")
2525 ])
2526 ])
2527 ])
2528 .config(|this| {
2529 this.min_times = 1;
2530 })
2531 ])
2532 .to_matchable(),
2533 )
2534 .to_matchable()
2535 .into(),
2536 ),
2537 (
2538 "AlterGroupStatementSegment".into(),
2539 NodeMatcher::new(
2540 SyntaxKind::AlterGroup,
2541 Sequence::new(vec_of_erased![
2542 Ref::keyword("ALTER"),
2543 Ref::keyword("GROUP"),
2544 Ref::new("ObjectReferenceSegment"),
2545 one_of(vec_of_erased![
2546 Sequence::new(vec_of_erased![
2547 one_of(vec_of_erased![Ref::keyword("ADD"), Ref::keyword("DROP")]),
2548 Ref::keyword("USER"),
2549 Delimited::new(vec_of_erased![Ref::new("ObjectReferenceSegment")])
2550 ]),
2551 Sequence::new(vec_of_erased![
2552 Ref::keyword("RENAME"),
2553 Ref::keyword("TO"),
2554 Ref::new("ObjectReferenceSegment")
2555 ])
2556 ])
2557 ])
2558 .to_matchable(),
2559 )
2560 .to_matchable()
2561 .into(),
2562 ),
2563 (
2564 "TransactionStatementSegment".into(),
2565 NodeMatcher::new(
2566 SyntaxKind::TransactionStatement,
2567 Sequence::new(vec_of_erased![
2568 one_of(vec_of_erased![
2569 Ref::keyword("BEGIN"),
2570 Ref::keyword("START"),
2571 Ref::keyword("COMMIT"),
2572 Ref::keyword("END"),
2573 Ref::keyword("ROLLBACK"),
2574 Ref::keyword("ABORT")
2575 ]),
2576 one_of(vec_of_erased![
2577 Ref::keyword("TRANSACTION"),
2578 Ref::keyword("WORK")
2579 ])
2580 .config(|this| {
2581 this.optional();
2582 }),
2583 Sequence::new(vec_of_erased![
2584 Ref::keyword("ISOLATION"),
2585 Ref::keyword("LEVEL"),
2586 one_of(vec_of_erased![
2587 Ref::keyword("SERIALIZABLE"),
2588 Sequence::new(vec_of_erased![
2589 Ref::keyword("READ"),
2590 Ref::keyword("COMMITTED")
2591 ]),
2592 Sequence::new(vec_of_erased![
2593 Ref::keyword("READ"),
2594 Ref::keyword("UNCOMMITTED")
2595 ]),
2596 Sequence::new(vec_of_erased![
2597 Ref::keyword("REPEATABLE"),
2598 Ref::keyword("READ")
2599 ])
2600 ])
2601 ])
2602 .config(|this| {
2603 this.optional();
2604 }),
2605 one_of(vec_of_erased![
2606 Sequence::new(vec_of_erased![Ref::keyword("READ"), Ref::keyword("ONLY")]),
2607 Sequence::new(vec_of_erased![Ref::keyword("READ"), Ref::keyword("WRITE")])
2608 ])
2609 .config(|this| {
2610 this.optional();
2611 })
2612 ])
2613 .to_matchable(),
2614 )
2615 .to_matchable()
2616 .into(),
2617 ),
2618 (
2619 "AlterSchemaStatementSegment".into(),
2620 NodeMatcher::new(
2621 SyntaxKind::AlterSchemaStatement,
2622 Sequence::new(vec_of_erased![
2623 Ref::keyword("ALTER"),
2624 Ref::keyword("SCHEMA"),
2625 Ref::new("SchemaReferenceSegment"),
2626 one_of(vec_of_erased![
2627 Sequence::new(vec_of_erased![
2628 Ref::keyword("RENAME"),
2629 Ref::keyword("TO"),
2630 Ref::new("SchemaReferenceSegment")
2631 ]),
2632 Sequence::new(vec_of_erased![
2633 Ref::keyword("OWNER"),
2634 Ref::keyword("TO"),
2635 Ref::new("RoleReferenceSegment")
2636 ]),
2637 Ref::new("QuotaGrammar")
2638 ])
2639 ])
2640 .to_matchable(),
2641 )
2642 .to_matchable()
2643 .into(),
2644 ),
2645 (
2646 "LockTableStatementSegment".into(),
2647 NodeMatcher::new(
2648 SyntaxKind::LockTableStatement,
2649 Sequence::new(vec_of_erased![
2650 Ref::keyword("LOCK"),
2651 Ref::keyword("TABLE").optional(),
2652 Delimited::new(vec_of_erased![Ref::new("TableReferenceSegment")])
2653 ])
2654 .to_matchable(),
2655 )
2656 .to_matchable()
2657 .into(),
2658 ),
2659 ]);
2660
2661 redshift_dialect.replace_grammar(
2662 "TableExpressionSegment",
2663 ansi_dialect
2664 .grammar("TableExpressionSegment")
2665 .match_grammar()
2666 .unwrap()
2667 .copy(
2668 Some(vec_of_erased![
2669 Ref::new("ObjectUnpivotSegment").optional(),
2670 Ref::new("ArrayUnnestSegment").optional()
2671 ]),
2672 None,
2673 Some(Ref::new("TableReferenceSegment").to_matchable()),
2674 None,
2675 Vec::new(),
2676 false,
2677 ),
2678 );
2679
2680 redshift_dialect.add([(
2681 "ObjectUnpivotSegment".into(),
2682 NodeMatcher::new(
2683 SyntaxKind::ObjectUnpivoting,
2684 Sequence::new(vec_of_erased![
2685 Ref::keyword("UNPIVOT"),
2686 Ref::new("ObjectReferenceSegment"),
2687 Ref::keyword("AS"),
2688 Ref::new("SingleIdentifierGrammar"),
2689 Ref::keyword("AT"),
2690 Ref::new("SingleIdentifierGrammar")
2691 ])
2692 .to_matchable(),
2693 )
2694 .to_matchable()
2695 .into(),
2696 )]);
2697
2698 redshift_dialect.replace_grammar(
2699 "ArrayAccessorSegment",
2700 Sequence::new(vec_of_erased![AnyNumberOf::new(vec_of_erased![
2701 Bracketed::new(vec_of_erased![one_of(vec_of_erased![
2702 Ref::new("NumericLiteralSegment"),
2703 Ref::new("ExpressionSegment")
2704 ])])
2705 .config(|this| {
2706 this.bracket_type = "square";
2707 })
2708 ])])
2709 .to_matchable(),
2710 );
2711
2712 redshift_dialect.add([
2713 (
2714 "ArrayUnnestSegment".into(),
2715 NodeMatcher::new(
2716 SyntaxKind::ArrayUnnesting,
2717 Sequence::new(vec_of_erased![
2718 Ref::new("ObjectReferenceSegment"),
2719 Ref::keyword("AS"),
2720 Ref::new("SingleIdentifierGrammar"),
2721 Ref::keyword("AT"),
2722 Ref::new("SingleIdentifierGrammar")
2723 ])
2724 .to_matchable(),
2725 )
2726 .to_matchable()
2727 .into(),
2728 ),
2729 (
2730 "CallStatementSegment".into(),
2731 NodeMatcher::new(
2732 SyntaxKind::CallStatement,
2733 Sequence::new(vec_of_erased![
2734 Ref::keyword("CALL"),
2735 Ref::new("FunctionSegment")
2736 ])
2737 .to_matchable(),
2738 )
2739 .to_matchable()
2740 .into(),
2741 ),
2742 ]);
2743
2744 redshift_dialect.replace_grammar(
2745 "SelectClauseModifierSegment",
2746 postgres_dialect
2747 .grammar("SelectClauseModifierSegment")
2748 .match_grammar()
2749 .unwrap()
2750 .copy(
2751 Some(vec_of_erased![Sequence::new(vec_of_erased![
2752 Ref::keyword("TOP"),
2753 Ref::new("NumericLiteralSegment")
2754 ])]),
2755 None,
2756 None,
2757 None,
2758 Vec::new(),
2759 false,
2760 ),
2761 );
2762
2763 redshift_dialect.add([(
2764 "ConvertFunctionNameSegment".into(),
2765 NodeMatcher::new(
2766 SyntaxKind::FunctionName,
2767 Sequence::new(vec_of_erased![Ref::keyword("CONVERT")]).to_matchable(),
2768 )
2769 .to_matchable()
2770 .into(),
2771 )]);
2772
2773 redshift_dialect.replace_grammar(
2774 "FunctionSegment",
2775 one_of(vec_of_erased![
2776 Sequence::new(vec_of_erased![Sequence::new(vec_of_erased![
2777 Ref::new("DatePartFunctionNameSegment"),
2778 Bracketed::new(vec_of_erased![Delimited::new(vec_of_erased![
2779 Ref::new("DatetimeUnitSegment"),
2780 Ref::new("FunctionContentsGrammar").optional()
2781 ])])
2782 .config(|this| {
2783 this.parse_mode = ParseMode::Greedy;
2784 })
2785 ])]),
2786 Sequence::new(vec_of_erased![
2787 Sequence::new(vec_of_erased![
2788 one_of(vec_of_erased![
2789 Ref::new("FunctionNameSegment").exclude(one_of(vec_of_erased![
2790 Ref::new("DatePartFunctionNameSegment"),
2791 Ref::new("ValuesClauseSegment"),
2792 Ref::new("ConvertFunctionNameSegment")
2793 ])),
2794 Sequence::new(vec_of_erased![
2795 Ref::keyword("APPROXIMATE"),
2796 Ref::new("FunctionNameSegment").exclude(one_of(vec_of_erased![
2797 Ref::new("DatePartFunctionNameSegment"),
2798 Ref::new("ValuesClauseSegment"),
2799 Ref::new("ConvertFunctionNameSegment")
2800 ]))
2801 ])
2802 ]),
2803 Bracketed::new(vec_of_erased![
2804 Ref::new("FunctionContentsGrammar").optional()
2805 ])
2806 .config(|this| {
2807 this.parse_mode = ParseMode::Greedy;
2808 })
2809 ]),
2810 Ref::new("PostFunctionGrammar").optional()
2811 ]),
2812 Sequence::new(vec_of_erased![
2813 Ref::new("ConvertFunctionNameSegment"),
2814 Bracketed::new(vec_of_erased![
2815 Ref::new("DatatypeSegment"),
2816 Ref::new("CommaSegment"),
2817 Ref::new("ExpressionSegment")
2818 ])
2819 ])
2820 ])
2821 .to_matchable(),
2822 );
2823
2824 redshift_dialect.add([]);
2825
2826 redshift_dialect.replace_grammar(
2827 "FromClauseSegment",
2828 Sequence::new(vec_of_erased![
2829 Ref::keyword("FROM"),
2830 Delimited::new(vec_of_erased![optionally_bracketed(vec_of_erased![
2831 Ref::new("FromExpressionSegment")
2832 ])])
2833 ])
2834 .to_matchable(),
2835 );
2836
2837 redshift_dialect.add([(
2838 "CreateViewStatementSegment".into(),
2839 NodeMatcher::new(
2840 SyntaxKind::CreateViewStatement,
2841 Sequence::new(vec_of_erased![
2842 Ref::keyword("CREATE"),
2843 Ref::new("OrReplaceGrammar").optional(),
2844 Ref::keyword("VIEW"),
2845 Ref::new("IfNotExistsGrammar").optional(),
2846 Ref::new("TableReferenceSegment"),
2847 Ref::new("BracketedColumnReferenceListGrammar").optional(),
2848 Ref::keyword("AS"),
2849 optionally_bracketed(vec_of_erased![Ref::new("SelectableGrammar")]),
2850 Ref::new("WithNoSchemaBindingClauseSegment").optional()
2851 ])
2852 .to_matchable(),
2853 )
2854 .to_matchable()
2855 .into(),
2856 )]);
2857 redshift_dialect.replace_grammar(
2858 "CreateMaterializedViewStatementSegment",
2859 Sequence::new(vec_of_erased![
2860 Ref::keyword("CREATE"),
2861 Ref::keyword("MATERIALIZED"),
2862 Ref::keyword("VIEW"),
2863 Ref::new("TableReferenceSegment"),
2864 Sequence::new(vec_of_erased![
2865 Ref::keyword("BACKUP"),
2866 one_of(vec_of_erased![Ref::keyword("YES"), Ref::keyword("NO")])
2867 ])
2868 .config(|this| {
2869 this.optional();
2870 }),
2871 Ref::new("TableAttributeSegment").optional(),
2872 Sequence::new(vec_of_erased![
2873 Ref::keyword("AUTO"),
2874 Ref::keyword("REFRESH"),
2875 one_of(vec_of_erased![Ref::keyword("YES"), Ref::keyword("NO")])
2876 ])
2877 .config(|this| {
2878 this.optional();
2879 }),
2880 Ref::keyword("AS"),
2881 one_of(vec_of_erased![
2882 optionally_bracketed(vec_of_erased![Ref::new("SelectableGrammar")]),
2883 optionally_bracketed(vec_of_erased![Sequence::new(vec_of_erased![
2884 Ref::keyword("TABLE"),
2885 Ref::new("TableReferenceSegment")
2886 ])]),
2887 Ref::new("ValuesClauseSegment"),
2888 optionally_bracketed(vec_of_erased![Sequence::new(vec_of_erased![
2889 Ref::keyword("EXECUTE"),
2890 Ref::new("FunctionSegment")
2891 ])])
2892 ]),
2893 Ref::new("WithDataClauseSegment").optional()
2894 ])
2895 .to_matchable(),
2896 );
2897 redshift_dialect.add([
2898 (
2899 "CreateExternalFunctionStatementSegment".into(),
2900 NodeMatcher::new(
2901 SyntaxKind::CreateExternalFunctionStatement,
2902 Sequence::new(vec_of_erased![
2903 Ref::keyword("CREATE"),
2904 Ref::new("OrReplaceGrammar").optional(),
2905 Ref::keyword("EXTERNAL"),
2906 Ref::keyword("FUNCTION"),
2907 Ref::new("FunctionNameSegment"),
2908 Bracketed::new(vec_of_erased![
2909 Delimited::new(vec_of_erased![Ref::new("DatatypeSegment")]).config(
2910 |this| {
2911 this.optional();
2912 }
2913 )
2914 ]),
2915 Ref::keyword("RETURNS"),
2916 Ref::new("DatatypeSegment"),
2917 one_of(vec_of_erased![
2918 Ref::keyword("VOLATILE"),
2919 Ref::keyword("STABLE"),
2920 Ref::keyword("IMMUTABLE")
2921 ]),
2922 one_of(vec_of_erased![
2923 Ref::keyword("LAMBDA"),
2924 Ref::keyword("SAGEMAKER")
2925 ]),
2926 Ref::new("QuotedLiteralSegment"),
2927 Ref::keyword("IAM_ROLE"),
2928 one_of(vec_of_erased![
2929 Ref::keyword("DEFAULT"),
2930 Ref::new("QuotedLiteralSegment")
2931 ]),
2932 Sequence::new(vec_of_erased![
2933 Ref::keyword("RETRY_TIMEOUT"),
2934 Ref::new("NumericLiteralSegment")
2935 ])
2936 .config(|this| {
2937 this.optional();
2938 })
2939 ])
2940 .to_matchable(),
2941 )
2942 .to_matchable()
2943 .into(),
2944 ),
2945 (
2946 "QualifyClauseSegment".into(),
2947 NodeMatcher::new(
2948 SyntaxKind::QualifyClause,
2949 Sequence::new(vec_of_erased![
2950 Ref::keyword("QUALIFY"),
2951 MetaSegment::indent(),
2952 Ref::new("ExpressionSegment"),
2953 MetaSegment::dedent(),
2954 ])
2955 .to_matchable(),
2956 )
2957 .to_matchable()
2958 .into(),
2959 ),
2960 ]);
2961 redshift_dialect.replace_grammar(
2962 "SelectStatementSegment",
2963 postgres_dialect
2964 .grammar("SelectStatementSegment")
2965 .match_grammar()
2966 .unwrap()
2967 .copy(
2968 Some(vec_of_erased![Ref::new("QualifyClauseSegment").optional()]),
2969 None,
2970 Some(Ref::new("OrderByClauseSegment").optional().to_matchable()),
2971 None,
2972 vec_of_erased![Ref::new("SetOperatorSegment")],
2973 false,
2974 ),
2975 );
2976 redshift_dialect.add([]);
2977 redshift_dialect.replace_grammar(
2978 "UnorderedSelectStatementSegment",
2979 ansi_dialect
2980 .grammar("UnorderedSelectStatementSegment")
2981 .match_grammar()
2982 .unwrap()
2983 .copy(
2984 Some(vec_of_erased![Ref::new("QualifyClauseSegment").optional()]),
2985 None,
2986 Some(Ref::new("OverlapsClauseSegment").optional().to_matchable()),
2987 None,
2988 Vec::new(),
2989 false,
2990 ),
2991 );
2992
2993 redshift_dialect
2994}