Skip to content

Commit db8e03d

Browse files
committed
SGA-11414 Added fixes from code review
1 parent d7f85f6 commit db8e03d

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
@@ -7475,12 +7475,15 @@ impl fmt::Display for TypedString {
74757475
write!(f, "{data_type}")?;
74767476
write!(f, " {value}")
74777477
}
7478-
true => match data_type {
7479-
DataType::Date => write!(f, "{{d {value}}}"),
7480-
DataType::Time(..) => write!(f, "{{t {value}}}"),
7481-
DataType::Timestamp(..) => write!(f, "{{ts {value}}}"),
7482-
_ => write!(f, "{{? {value}}}"),
7483-
},
7478+
true => {
7479+
let prefix = match data_type {
7480+
DataType::Date => "d",
7481+
DataType::Time(..) => "t",
7482+
DataType::Timestamp(..) => "ts",
7483+
_ => "?",
7484+
};
7485+
write!(f, "{{{prefix} {value}}}")
7486+
}
74847487
}
74857488
}
74867489
}

src/parser/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2034,8 +2034,12 @@ impl<'a> Parser<'a> {
20342034
})
20352035
}
20362036

2037-
// Tries to parse the body of an [ODBC escaping sequence]
2037+
/// Tries to parse the body of an [ODBC escaping sequence]
20382038
/// i.e. without the enclosing braces
2039+
/// Currently implemented:
2040+
/// Scalar Function Calls
2041+
/// Date, Time, and Timestamp Literals
2042+
/// See https://learn.microsoft.com/en-us/sql/odbc/reference/develop-app/escape-sequences-in-odbc?view=sql-server-2017
20392043
fn maybe_parse_odbc_body(&mut self) -> Result<Option<Expr>, ParserError> {
20402044
// Attempt 1: Try to parse it as a function.
20412045
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
@@ -16326,6 +16326,13 @@ fn test_odbc_time_date_timestamp_support() {
1632616326
let _ = all_dialects().verified_stmt(sql_ts);
1632716327
}
1632816328

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

0 commit comments

Comments
 (0)