Skip to content

Commit 1b1bfd9

Browse files
committed
SGA-11414 Added fixes from code review
1 parent 6da4b52 commit 1b1bfd9

File tree

3 files changed

+21
-7
lines changed

3 files changed

+21
-7
lines changed

src/ast/mod.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7454,12 +7454,15 @@ impl fmt::Display for TypedString {
74547454
write!(f, "{data_type}")?;
74557455
write!(f, " {value}")
74567456
}
7457-
true => match data_type {
7458-
DataType::Date => write!(f, "{{d {value}}}"),
7459-
DataType::Time(..) => write!(f, "{{t {value}}}"),
7460-
DataType::Timestamp(..) => write!(f, "{{ts {value}}}"),
7461-
_ => write!(f, "{{? {value}}}"),
7462-
},
7457+
true => {
7458+
let prefix = match data_type {
7459+
DataType::Date => "d",
7460+
DataType::Time(..) => "t",
7461+
DataType::Timestamp(..) => "ts",
7462+
_ => "?",
7463+
};
7464+
write!(f, "{{{prefix} {value}}}")
7465+
}
74637466
}
74647467
}
74657468
}

src/parser/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2030,8 +2030,12 @@ impl<'a> Parser<'a> {
20302030
})
20312031
}
20322032

2033-
// Tries to parse the body of an [ODBC escaping sequence]
2033+
/// Tries to parse the body of an [ODBC escaping sequence]
20342034
/// i.e. without the enclosing braces
2035+
/// Currently implemented:
2036+
/// Scalar Function Calls
2037+
/// Date, Time, and Timestamp Literals
2038+
/// See https://learn.microsoft.com/en-us/sql/odbc/reference/develop-app/escape-sequences-in-odbc?view=sql-server-2017
20352039
fn maybe_parse_odbc_body(&mut self) -> Result<Option<Expr>, ParserError> {
20362040
// Attempt 1: Try to parse it as a function.
20372041
if let Some(expr) = self.maybe_parse_odbc_fn_body()? {

tests/sqlparser_common.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16324,6 +16324,13 @@ fn test_odbc_time_date_timestamp_support() {
1632416324
let _ = all_dialects().verified_stmt(sql_ts);
1632516325
}
1632616326

16327+
#[test]
16328+
#[should_panic]
16329+
fn test_invalid_odbc_literal_fails() {
16330+
let sql = "SELECT {tt '14:12:01'} FROM foo";
16331+
let _ = all_dialects().verified_stmt(sql);
16332+
}
16333+
1632716334
#[test]
1632816335
fn parse_create_user() {
1632916336
let create = verified_stmt("CREATE USER u1");

0 commit comments

Comments
 (0)