mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-07-17 05:14:59 +00:00
bigquery: EXTRACT support For DAYOFWEEK, DAYOFYEAR, ISOWEEK, TIME (#980)
This commit is contained in:
parent
495d0a02d5
commit
e718ce6c42
4 changed files with 19 additions and 0 deletions
|
@ -117,6 +117,8 @@ pub enum DateTimeField {
|
||||||
Month,
|
Month,
|
||||||
Week,
|
Week,
|
||||||
Day,
|
Day,
|
||||||
|
DayOfWeek,
|
||||||
|
DayOfYear,
|
||||||
Date,
|
Date,
|
||||||
Hour,
|
Hour,
|
||||||
Minute,
|
Minute,
|
||||||
|
@ -127,6 +129,7 @@ pub enum DateTimeField {
|
||||||
Doy,
|
Doy,
|
||||||
Epoch,
|
Epoch,
|
||||||
Isodow,
|
Isodow,
|
||||||
|
IsoWeek,
|
||||||
Isoyear,
|
Isoyear,
|
||||||
Julian,
|
Julian,
|
||||||
Microsecond,
|
Microsecond,
|
||||||
|
@ -138,6 +141,7 @@ pub enum DateTimeField {
|
||||||
Nanosecond,
|
Nanosecond,
|
||||||
Nanoseconds,
|
Nanoseconds,
|
||||||
Quarter,
|
Quarter,
|
||||||
|
Time,
|
||||||
Timezone,
|
Timezone,
|
||||||
TimezoneHour,
|
TimezoneHour,
|
||||||
TimezoneMinute,
|
TimezoneMinute,
|
||||||
|
@ -151,6 +155,8 @@ impl fmt::Display for DateTimeField {
|
||||||
DateTimeField::Month => "MONTH",
|
DateTimeField::Month => "MONTH",
|
||||||
DateTimeField::Week => "WEEK",
|
DateTimeField::Week => "WEEK",
|
||||||
DateTimeField::Day => "DAY",
|
DateTimeField::Day => "DAY",
|
||||||
|
DateTimeField::DayOfWeek => "DAYOFWEEK",
|
||||||
|
DateTimeField::DayOfYear => "DAYOFYEAR",
|
||||||
DateTimeField::Date => "DATE",
|
DateTimeField::Date => "DATE",
|
||||||
DateTimeField::Hour => "HOUR",
|
DateTimeField::Hour => "HOUR",
|
||||||
DateTimeField::Minute => "MINUTE",
|
DateTimeField::Minute => "MINUTE",
|
||||||
|
@ -162,6 +168,7 @@ impl fmt::Display for DateTimeField {
|
||||||
DateTimeField::Epoch => "EPOCH",
|
DateTimeField::Epoch => "EPOCH",
|
||||||
DateTimeField::Isodow => "ISODOW",
|
DateTimeField::Isodow => "ISODOW",
|
||||||
DateTimeField::Isoyear => "ISOYEAR",
|
DateTimeField::Isoyear => "ISOYEAR",
|
||||||
|
DateTimeField::IsoWeek => "ISOWEEK",
|
||||||
DateTimeField::Julian => "JULIAN",
|
DateTimeField::Julian => "JULIAN",
|
||||||
DateTimeField::Microsecond => "MICROSECOND",
|
DateTimeField::Microsecond => "MICROSECOND",
|
||||||
DateTimeField::Microseconds => "MICROSECONDS",
|
DateTimeField::Microseconds => "MICROSECONDS",
|
||||||
|
@ -172,6 +179,7 @@ impl fmt::Display for DateTimeField {
|
||||||
DateTimeField::Nanosecond => "NANOSECOND",
|
DateTimeField::Nanosecond => "NANOSECOND",
|
||||||
DateTimeField::Nanoseconds => "NANOSECONDS",
|
DateTimeField::Nanoseconds => "NANOSECONDS",
|
||||||
DateTimeField::Quarter => "QUARTER",
|
DateTimeField::Quarter => "QUARTER",
|
||||||
|
DateTimeField::Time => "TIME",
|
||||||
DateTimeField::Timezone => "TIMEZONE",
|
DateTimeField::Timezone => "TIMEZONE",
|
||||||
DateTimeField::TimezoneHour => "TIMEZONE_HOUR",
|
DateTimeField::TimezoneHour => "TIMEZONE_HOUR",
|
||||||
DateTimeField::TimezoneMinute => "TIMEZONE_MINUTE",
|
DateTimeField::TimezoneMinute => "TIMEZONE_MINUTE",
|
||||||
|
|
|
@ -196,6 +196,8 @@ define_keywords!(
|
||||||
DATE,
|
DATE,
|
||||||
DATETIME,
|
DATETIME,
|
||||||
DAY,
|
DAY,
|
||||||
|
DAYOFWEEK,
|
||||||
|
DAYOFYEAR,
|
||||||
DEALLOCATE,
|
DEALLOCATE,
|
||||||
DEC,
|
DEC,
|
||||||
DECADE,
|
DECADE,
|
||||||
|
@ -334,6 +336,7 @@ define_keywords!(
|
||||||
IS,
|
IS,
|
||||||
ISODOW,
|
ISODOW,
|
||||||
ISOLATION,
|
ISOLATION,
|
||||||
|
ISOWEEK,
|
||||||
ISOYEAR,
|
ISOYEAR,
|
||||||
JAR,
|
JAR,
|
||||||
JOIN,
|
JOIN,
|
||||||
|
|
|
@ -1508,6 +1508,8 @@ impl<'a> Parser<'a> {
|
||||||
Keyword::MONTH => Ok(DateTimeField::Month),
|
Keyword::MONTH => Ok(DateTimeField::Month),
|
||||||
Keyword::WEEK => Ok(DateTimeField::Week),
|
Keyword::WEEK => Ok(DateTimeField::Week),
|
||||||
Keyword::DAY => Ok(DateTimeField::Day),
|
Keyword::DAY => Ok(DateTimeField::Day),
|
||||||
|
Keyword::DAYOFWEEK => Ok(DateTimeField::DayOfWeek),
|
||||||
|
Keyword::DAYOFYEAR => Ok(DateTimeField::DayOfYear),
|
||||||
Keyword::DATE => Ok(DateTimeField::Date),
|
Keyword::DATE => Ok(DateTimeField::Date),
|
||||||
Keyword::HOUR => Ok(DateTimeField::Hour),
|
Keyword::HOUR => Ok(DateTimeField::Hour),
|
||||||
Keyword::MINUTE => Ok(DateTimeField::Minute),
|
Keyword::MINUTE => Ok(DateTimeField::Minute),
|
||||||
|
@ -1519,6 +1521,7 @@ impl<'a> Parser<'a> {
|
||||||
Keyword::EPOCH => Ok(DateTimeField::Epoch),
|
Keyword::EPOCH => Ok(DateTimeField::Epoch),
|
||||||
Keyword::ISODOW => Ok(DateTimeField::Isodow),
|
Keyword::ISODOW => Ok(DateTimeField::Isodow),
|
||||||
Keyword::ISOYEAR => Ok(DateTimeField::Isoyear),
|
Keyword::ISOYEAR => Ok(DateTimeField::Isoyear),
|
||||||
|
Keyword::ISOWEEK => Ok(DateTimeField::IsoWeek),
|
||||||
Keyword::JULIAN => Ok(DateTimeField::Julian),
|
Keyword::JULIAN => Ok(DateTimeField::Julian),
|
||||||
Keyword::MICROSECOND => Ok(DateTimeField::Microsecond),
|
Keyword::MICROSECOND => Ok(DateTimeField::Microsecond),
|
||||||
Keyword::MICROSECONDS => Ok(DateTimeField::Microseconds),
|
Keyword::MICROSECONDS => Ok(DateTimeField::Microseconds),
|
||||||
|
@ -1529,6 +1532,7 @@ impl<'a> Parser<'a> {
|
||||||
Keyword::NANOSECOND => Ok(DateTimeField::Nanosecond),
|
Keyword::NANOSECOND => Ok(DateTimeField::Nanosecond),
|
||||||
Keyword::NANOSECONDS => Ok(DateTimeField::Nanoseconds),
|
Keyword::NANOSECONDS => Ok(DateTimeField::Nanoseconds),
|
||||||
Keyword::QUARTER => Ok(DateTimeField::Quarter),
|
Keyword::QUARTER => Ok(DateTimeField::Quarter),
|
||||||
|
Keyword::TIME => Ok(DateTimeField::Time),
|
||||||
Keyword::TIMEZONE => Ok(DateTimeField::Timezone),
|
Keyword::TIMEZONE => Ok(DateTimeField::Timezone),
|
||||||
Keyword::TIMEZONE_HOUR => Ok(DateTimeField::TimezoneHour),
|
Keyword::TIMEZONE_HOUR => Ok(DateTimeField::TimezoneHour),
|
||||||
Keyword::TIMEZONE_MINUTE => Ok(DateTimeField::TimezoneMinute),
|
Keyword::TIMEZONE_MINUTE => Ok(DateTimeField::TimezoneMinute),
|
||||||
|
|
|
@ -2069,6 +2069,8 @@ fn parse_extract() {
|
||||||
verified_stmt("SELECT EXTRACT(MONTH FROM d)");
|
verified_stmt("SELECT EXTRACT(MONTH FROM d)");
|
||||||
verified_stmt("SELECT EXTRACT(WEEK FROM d)");
|
verified_stmt("SELECT EXTRACT(WEEK FROM d)");
|
||||||
verified_stmt("SELECT EXTRACT(DAY FROM d)");
|
verified_stmt("SELECT EXTRACT(DAY FROM d)");
|
||||||
|
verified_stmt("SELECT EXTRACT(DAYOFWEEK FROM d)");
|
||||||
|
verified_stmt("SELECT EXTRACT(DAYOFYEAR FROM d)");
|
||||||
verified_stmt("SELECT EXTRACT(DATE FROM d)");
|
verified_stmt("SELECT EXTRACT(DATE FROM d)");
|
||||||
verified_stmt("SELECT EXTRACT(HOUR FROM d)");
|
verified_stmt("SELECT EXTRACT(HOUR FROM d)");
|
||||||
verified_stmt("SELECT EXTRACT(MINUTE FROM d)");
|
verified_stmt("SELECT EXTRACT(MINUTE FROM d)");
|
||||||
|
@ -2082,6 +2084,7 @@ fn parse_extract() {
|
||||||
verified_stmt("SELECT EXTRACT(DOY FROM d)");
|
verified_stmt("SELECT EXTRACT(DOY FROM d)");
|
||||||
verified_stmt("SELECT EXTRACT(EPOCH FROM d)");
|
verified_stmt("SELECT EXTRACT(EPOCH FROM d)");
|
||||||
verified_stmt("SELECT EXTRACT(ISODOW FROM d)");
|
verified_stmt("SELECT EXTRACT(ISODOW FROM d)");
|
||||||
|
verified_stmt("SELECT EXTRACT(ISOWEEK FROM d)");
|
||||||
verified_stmt("SELECT EXTRACT(ISOYEAR FROM d)");
|
verified_stmt("SELECT EXTRACT(ISOYEAR FROM d)");
|
||||||
verified_stmt("SELECT EXTRACT(JULIAN FROM d)");
|
verified_stmt("SELECT EXTRACT(JULIAN FROM d)");
|
||||||
verified_stmt("SELECT EXTRACT(MICROSECOND FROM d)");
|
verified_stmt("SELECT EXTRACT(MICROSECOND FROM d)");
|
||||||
|
@ -2094,6 +2097,7 @@ fn parse_extract() {
|
||||||
verified_stmt("SELECT EXTRACT(TIMEZONE FROM d)");
|
verified_stmt("SELECT EXTRACT(TIMEZONE FROM d)");
|
||||||
verified_stmt("SELECT EXTRACT(TIMEZONE_HOUR FROM d)");
|
verified_stmt("SELECT EXTRACT(TIMEZONE_HOUR FROM d)");
|
||||||
verified_stmt("SELECT EXTRACT(TIMEZONE_MINUTE FROM d)");
|
verified_stmt("SELECT EXTRACT(TIMEZONE_MINUTE FROM d)");
|
||||||
|
verified_stmt("SELECT EXTRACT(TIME FROM d)");
|
||||||
|
|
||||||
let res = parse_sql_statements("SELECT EXTRACT(JIFFY FROM d)");
|
let res = parse_sql_statements("SELECT EXTRACT(JIFFY FROM d)");
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue