Skip to content

Commit 5c61e96

Browse files
committed
snowflake: date/time field variants
1 parent cdc7f6b commit 5c61e96

3 files changed

Lines changed: 74 additions & 12 deletions

File tree

src/ast/value.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,6 @@ pub enum DateTimeField {
118118
Quarter,
119119
Month,
120120
Week,
121-
WeekOfYear,
122121
WeekIso,
123122
Day,
124123
DayOfWeek,
@@ -139,7 +138,6 @@ impl fmt::Display for DateTimeField {
139138
DateTimeField::Quarter => "QUARTER",
140139
DateTimeField::Month => "MONTH",
141140
DateTimeField::Week => "WEEK",
142-
DateTimeField::WeekOfYear => "WEEKOFYEAR",
143141
DateTimeField::WeekIso => "WEEKISO",
144142
DateTimeField::Day => "DAY",
145143
DateTimeField::DayOfWeek => "DAYOFWEEK",

src/dialect/keywords.rs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,12 +156,15 @@ define_keywords!(
156156
CURRENT_USER,
157157
CURSOR,
158158
CYCLE,
159+
D,
159160
DATE,
160161
DAY,
161162
DAYOFMONTH,
162163
DAYOFWEEK,
163164
DAYOFWEEKISO,
164165
DAYOFYEAR,
166+
DAYS,
167+
DD,
165168
DEALLOCATE,
166169
DEC,
167170
DECIMAL,
@@ -176,7 +179,13 @@ define_keywords!(
176179
DISCONNECT,
177180
DISTINCT,
178181
DOUBLE,
182+
DOW,
183+
DOW_ISO,
184+
DOY,
179185
DROP,
186+
DW,
187+
DW_ISO,
188+
DY,
180189
DYNAMIC,
181190
EACH,
182191
ELEMENT,
@@ -276,10 +285,14 @@ define_keywords!(
276285
MIN,
277286
MINUS,
278287
MINUTE,
288+
MM,
279289
MOD,
280290
MODIFIES,
281291
MODULE,
292+
MON,
293+
MONS,
282294
MONTH,
295+
MONTHS,
283296
MULTISET,
284297
NATIONAL,
285298
NATURAL,
@@ -335,8 +348,12 @@ define_keywords!(
335348
PREPARE,
336349
PRIMARY,
337350
PROCEDURE,
351+
Q,
352+
QTR,
353+
QTRS,
338354
QUALIFY,
339355
QUARTER,
356+
QUARTERS,
340357
RANGE,
341358
RANK,
342359
RCFILE,
@@ -461,9 +478,15 @@ define_keywords!(
461478
VERSIONING,
462479
VIEW,
463480
VIRTUAL,
481+
W,
464482
WEEK,
483+
WEEKDAY,
465484
WEEKOFYEAR,
485+
WEEKOFYEARISO,
486+
WEEKOFYEAR_ISO,
466487
WEEKISO,
488+
WEEKDAY_ISO,
489+
WEEK_ISO,
467490
WHEN,
468491
WHENEVER,
469492
WHERE,
@@ -472,11 +495,22 @@ define_keywords!(
472495
WITH,
473496
WITHIN,
474497
WITHOUT,
498+
WK,
499+
WOY,
475500
WORK,
476501
WRITE,
502+
WY,
503+
Y,
477504
YEAR,
505+
YEARDAY,
478506
YEAROFWEEK,
479507
YEAROFWEEKISO,
508+
YEARS,
509+
YR,
510+
YRS,
511+
YY,
512+
YYY,
513+
YYYY,
480514
ZONE
481515
);
482516

src/parser.rs

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -610,21 +610,51 @@ impl<'a> Parser<'a> {
610610
// operator and interval qualifiers. EXTRACT supports a wider set of
611611
// date/time fields than interval qualifiers, so this function may need to
612612
// be split in two.
613+
// https://docs.snowflake.com/en/sql-reference/functions-date-time.html#supported-date-and-time-parts
613614
pub fn parse_date_time_field(&mut self) -> Result<DateTimeField, ParserError> {
614615
match self.next_token() {
615616
Token::Word(w) => match w.keyword {
616-
Keyword::YEAR => Ok(DateTimeField::Year),
617+
Keyword::YEAR
618+
| Keyword::Y
619+
| Keyword::YY
620+
| Keyword::YYY
621+
| Keyword::YYYY
622+
| Keyword::YR
623+
| Keyword::YEARS
624+
| Keyword::YRS => Ok(DateTimeField::Year),
617625
Keyword::YEAROFWEEK => Ok(DateTimeField::YearOfWeek),
618626
Keyword::YEAROFWEEKISO => Ok(DateTimeField::YearOfWeekIso),
619-
Keyword::QUARTER => Ok(DateTimeField::Quarter),
620-
Keyword::MONTH => Ok(DateTimeField::Month),
621-
Keyword::WEEK => Ok(DateTimeField::Week),
622-
Keyword::WEEKOFYEAR => Ok(DateTimeField::WeekOfYear),
623-
Keyword::WEEKISO => Ok(DateTimeField::WeekIso),
624-
Keyword::DAY | Keyword::DAYOFMONTH => Ok(DateTimeField::Day),
625-
Keyword::DAYOFWEEK => Ok(DateTimeField::DayOfWeek),
626-
Keyword::DAYOFWEEKISO => Ok(DateTimeField::DayOfWeekIso),
627-
Keyword::DAYOFYEAR => Ok(DateTimeField::DayOfYear),
627+
Keyword::QUARTER
628+
| Keyword::Q
629+
| Keyword::QTR
630+
| Keyword::QTRS
631+
| Keyword::QUARTERS => Ok(DateTimeField::Quarter),
632+
Keyword::MONTH | Keyword::MM | Keyword::MON | Keyword::MONS | Keyword::MONTHS => {
633+
Ok(DateTimeField::Month)
634+
}
635+
Keyword::WEEK
636+
| Keyword::W
637+
| Keyword::WK
638+
| Keyword::WEEKOFYEAR
639+
| Keyword::WOY
640+
| Keyword::WY => Ok(DateTimeField::Week),
641+
Keyword::WEEKISO
642+
| Keyword::WEEK_ISO
643+
| Keyword::WEEKOFYEARISO
644+
| Keyword::WEEKOFYEAR_ISO => Ok(DateTimeField::WeekIso),
645+
Keyword::DAY | Keyword::D | Keyword::DD | Keyword::DAYS | Keyword::DAYOFMONTH => {
646+
Ok(DateTimeField::Day)
647+
}
648+
Keyword::DAYOFWEEK | Keyword::WEEKDAY | Keyword::DOW | Keyword::DW => {
649+
Ok(DateTimeField::DayOfWeek)
650+
}
651+
Keyword::DAYOFWEEKISO
652+
| Keyword::WEEKDAY_ISO
653+
| Keyword::DOW_ISO
654+
| Keyword::DW_ISO => Ok(DateTimeField::DayOfWeekIso),
655+
Keyword::DAYOFYEAR | Keyword::YEARDAY | Keyword::DOY | Keyword::DY => {
656+
Ok(DateTimeField::DayOfYear)
657+
}
628658
Keyword::HOUR => Ok(DateTimeField::Hour),
629659
Keyword::MINUTE => Ok(DateTimeField::Minute),
630660
Keyword::SECOND => Ok(DateTimeField::Second),

0 commit comments

Comments
 (0)