From f39005a11c871429230e3eb3628f06b419d11465 Mon Sep 17 00:00:00 2001 From: Yoshiyuki Komazaki Date: Sat, 28 May 2022 19:24:57 +0900 Subject: [PATCH] Support `DATETIME` keyword --- src/ast/data_type.rs | 3 +++ src/keywords.rs | 1 + src/parser.rs | 1 + tests/sqlparser_common.rs | 13 +++++++++++++ 4 files changed, 18 insertions(+) diff --git a/src/ast/data_type.rs b/src/ast/data_type.rs index 684a5ef57..dc434a8f0 100644 --- a/src/ast/data_type.rs +++ b/src/ast/data_type.rs @@ -71,6 +71,8 @@ pub enum DataType { Date, /// Time Time, + /// Datetime + Datetime, /// Timestamp Timestamp, /// Interval @@ -143,6 +145,7 @@ impl fmt::Display for DataType { DataType::Boolean => write!(f, "BOOLEAN"), DataType::Date => write!(f, "DATE"), DataType::Time => write!(f, "TIME"), + DataType::Datetime => write!(f, "DATETIME"), DataType::Timestamp => write!(f, "TIMESTAMP"), DataType::Interval => write!(f, "INTERVAL"), DataType::Regclass => write!(f, "REGCLASS"), diff --git a/src/keywords.rs b/src/keywords.rs index d739aecd3..0024c1839 100644 --- a/src/keywords.rs +++ b/src/keywords.rs @@ -169,6 +169,7 @@ define_keywords!( DATA, DATABASE, DATE, + DATETIME, DAY, DEALLOCATE, DEC, diff --git a/src/parser.rs b/src/parser.rs index 36c2075c0..02e81c128 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -2733,6 +2733,7 @@ impl<'a> Parser<'a> { } Keyword::UUID => Ok(DataType::Uuid), Keyword::DATE => Ok(DataType::Date), + Keyword::DATETIME => Ok(DataType::Datetime), Keyword::TIMESTAMP => { // TBD: we throw away "with/without timezone" information if self.parse_keyword(Keyword::WITH) || self.parse_keyword(Keyword::WITHOUT) { diff --git a/tests/sqlparser_common.rs b/tests/sqlparser_common.rs index 83dacb046..bc715a096 100644 --- a/tests/sqlparser_common.rs +++ b/tests/sqlparser_common.rs @@ -2615,6 +2615,19 @@ fn parse_literal_time() { ); } +#[test] +fn parse_literal_datetime() { + let sql = "SELECT DATETIME '1999-01-01 01:23:34.45'"; + let select = verified_only_select(sql); + assert_eq!( + &Expr::TypedString { + data_type: DataType::Datetime, + value: "1999-01-01 01:23:34.45".into() + }, + expr_from_projection(only(&select.projection)), + ); +} + #[test] fn parse_literal_timestamp() { let sql = "SELECT TIMESTAMP '1999-01-01 01:23:34'";