mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-25 00:14:06 +00:00
add with/without time zone (#589)
This commit is contained in:
parent
72559e9b62
commit
95fbb55f2c
4 changed files with 37 additions and 5 deletions
|
@ -77,8 +77,10 @@ pub enum DataType {
|
|||
Time,
|
||||
/// Datetime
|
||||
Datetime,
|
||||
/// Timestamp
|
||||
/// Timestamp [Without Time Zone]
|
||||
Timestamp,
|
||||
/// Timestamp With Time Zone
|
||||
TimestampTz,
|
||||
/// Interval
|
||||
Interval,
|
||||
/// Regclass used in postgresql serial
|
||||
|
@ -157,6 +159,7 @@ impl fmt::Display for DataType {
|
|||
DataType::Time => write!(f, "TIME"),
|
||||
DataType::Datetime => write!(f, "DATETIME"),
|
||||
DataType::Timestamp => write!(f, "TIMESTAMP"),
|
||||
DataType::TimestampTz => write!(f, "TIMESTAMPTZ"),
|
||||
DataType::Interval => write!(f, "INTERVAL"),
|
||||
DataType::Regclass => write!(f, "REGCLASS"),
|
||||
DataType::Text => write!(f, "TEXT"),
|
||||
|
|
|
@ -505,6 +505,7 @@ define_keywords!(
|
|||
TIES,
|
||||
TIME,
|
||||
TIMESTAMP,
|
||||
TIMESTAMPTZ,
|
||||
TIMEZONE,
|
||||
TIMEZONE_HOUR,
|
||||
TIMEZONE_MINUTE,
|
||||
|
|
|
@ -3119,12 +3119,17 @@ impl<'a> Parser<'a> {
|
|||
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) {
|
||||
if self.parse_keyword(Keyword::WITH) {
|
||||
self.expect_keywords(&[Keyword::TIME, Keyword::ZONE])?;
|
||||
Ok(DataType::TimestampTz)
|
||||
} else if self.parse_keyword(Keyword::WITHOUT) {
|
||||
self.expect_keywords(&[Keyword::TIME, Keyword::ZONE])?;
|
||||
Ok(DataType::Timestamp)
|
||||
} else {
|
||||
Ok(DataType::Timestamp)
|
||||
}
|
||||
Ok(DataType::Timestamp)
|
||||
}
|
||||
Keyword::TIMESTAMPTZ => Ok(DataType::TimestampTz),
|
||||
Keyword::TIME => {
|
||||
// TBD: we throw away "with/without timezone" information
|
||||
if self.parse_keyword(Keyword::WITH) || self.parse_keyword(Keyword::WITHOUT) {
|
||||
|
|
|
@ -2854,7 +2854,7 @@ fn parse_literal_datetime() {
|
|||
}
|
||||
|
||||
#[test]
|
||||
fn parse_literal_timestamp() {
|
||||
fn parse_literal_timestamp_without_time_zone() {
|
||||
let sql = "SELECT TIMESTAMP '1999-01-01 01:23:34'";
|
||||
let select = verified_only_select(sql);
|
||||
assert_eq!(
|
||||
|
@ -2864,6 +2864,29 @@ fn parse_literal_timestamp() {
|
|||
},
|
||||
expr_from_projection(only(&select.projection)),
|
||||
);
|
||||
|
||||
one_statement_parses_to(
|
||||
"SELECT TIMESTAMP WITHOUT TIME ZONE '1999-01-01 01:23:34'",
|
||||
sql,
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_literal_timestamp_with_time_zone() {
|
||||
let sql = "SELECT TIMESTAMPTZ '1999-01-01 01:23:34Z'";
|
||||
let select = verified_only_select(sql);
|
||||
assert_eq!(
|
||||
&Expr::TypedString {
|
||||
data_type: DataType::TimestampTz,
|
||||
value: "1999-01-01 01:23:34Z".into()
|
||||
},
|
||||
expr_from_projection(only(&select.projection)),
|
||||
);
|
||||
|
||||
one_statement_parses_to(
|
||||
"SELECT TIMESTAMP WITH TIME ZONE '1999-01-01 01:23:34Z'",
|
||||
sql,
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue