diff --git a/src/ast/value.rs b/src/ast/value.rs index 33262d8a..1401855f 100644 --- a/src/ast/value.rs +++ b/src/ast/value.rs @@ -123,6 +123,7 @@ impl fmt::Display for Value { pub enum DateTimeField { Year, Month, + Week, Day, Hour, Minute, @@ -149,6 +150,7 @@ impl fmt::Display for DateTimeField { f.write_str(match self { DateTimeField::Year => "YEAR", DateTimeField::Month => "MONTH", + DateTimeField::Week => "WEEK", DateTimeField::Day => "DAY", DateTimeField::Hour => "HOUR", DateTimeField::Minute => "MINUTE", diff --git a/src/keywords.rs b/src/keywords.rs index b3c77eb5..e33c6a97 100644 --- a/src/keywords.rs +++ b/src/keywords.rs @@ -518,6 +518,7 @@ define_keywords!( VERSIONING, VIEW, VIRTUAL, + WEEK, WHEN, WHENEVER, WHERE, diff --git a/src/parser.rs b/src/parser.rs index 6ccd4980..2ae69ae3 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -909,6 +909,7 @@ impl<'a> Parser<'a> { Token::Word(w) => match w.keyword { Keyword::YEAR => Ok(DateTimeField::Year), Keyword::MONTH => Ok(DateTimeField::Month), + Keyword::WEEK => Ok(DateTimeField::Week), Keyword::DAY => Ok(DateTimeField::Day), Keyword::HOUR => Ok(DateTimeField::Hour), Keyword::MINUTE => Ok(DateTimeField::Minute), @@ -966,6 +967,7 @@ impl<'a> Parser<'a> { if [ Keyword::YEAR, Keyword::MONTH, + Keyword::WEEK, Keyword::DAY, Keyword::HOUR, Keyword::MINUTE, diff --git a/tests/sqlparser_common.rs b/tests/sqlparser_common.rs index c56cb37a..da805b07 100644 --- a/tests/sqlparser_common.rs +++ b/tests/sqlparser_common.rs @@ -1384,6 +1384,7 @@ fn parse_extract() { one_statement_parses_to("SELECT EXTRACT(year from d)", "SELECT EXTRACT(YEAR FROM d)"); verified_stmt("SELECT EXTRACT(MONTH FROM d)"); + verified_stmt("SELECT EXTRACT(WEEK FROM d)"); verified_stmt("SELECT EXTRACT(DAY FROM d)"); verified_stmt("SELECT EXTRACT(HOUR FROM d)"); verified_stmt("SELECT EXTRACT(MINUTE FROM d)");