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