@@ -672,6 +672,28 @@ fn parse_select_with_table_alias() {
672
672
);
673
673
}
674
674
675
+ #[test]
676
+ fn parse_select_with_table_alias_keyword() {
677
+ // note: DECLARE isn't included in RESERVED_FOR_TABLE_ALIAS
678
+ let table_alias_non_reserved_keyword = "SELECT a FROM lineitem DECLARE";
679
+ let statements = all_dialects_requiring_semicolon_statement_delimiter()
680
+ .parse_sql_statements(table_alias_non_reserved_keyword)
681
+ .unwrap();
682
+ assert_eq!(1, statements.len());
683
+ assert_eq!(
684
+ ParserError::ParserError("Expected: identifier, found: EOF".to_string()),
685
+ all_dialects_not_requiring_semicolon_statement_delimiter()
686
+ .parse_sql_statements(table_alias_non_reserved_keyword)
687
+ .unwrap_err()
688
+ );
689
+
690
+ let table_alias_quoted_keyword = "SELECT a FROM lineitem \"DECLARE\"";
691
+ let statements = all_dialects()
692
+ .parse_sql_statements(table_alias_quoted_keyword)
693
+ .unwrap();
694
+ assert_eq!(1, statements.len());
695
+ }
696
+
675
697
#[test]
676
698
fn parse_consecutive_queries() {
677
699
let select_then_exec = "SELECT * FROM deleted; EXECUTE my_sp 'some', 'params'";
@@ -955,7 +977,18 @@ fn parse_limit() {
955
977
956
978
#[test]
957
979
fn parse_invalid_limit_by() {
958
- assert_err_parse_statements("SELECT * FROM user BY name", "name");
980
+ assert_eq!(
981
+ ParserError::ParserError("Expected: end of statement, found: name".to_string()),
982
+ all_dialects_requiring_semicolon_statement_delimiter()
983
+ .parse_sql_statements("SELECT * FROM user BY name")
984
+ .unwrap_err()
985
+ );
986
+ assert_eq!(
987
+ ParserError::ParserError("Expected: an SQL statement, found: BY".to_string()),
988
+ all_dialects_not_requiring_semicolon_statement_delimiter()
989
+ .parse_sql_statements("SELECT * FROM user BY name")
990
+ .unwrap_err()
991
+ );
959
992
}
960
993
961
994
#[test]
@@ -11428,7 +11461,9 @@ fn parse_select_table_with_index_hints() {
11428
11461
11429
11462
// Test that dialects that don't support table hints will keep parsing the USE as table alias
11430
11463
let sql = "SELECT * FROM T USE LIMIT 1";
11431
- let unsupported_dialects = all_dialects_where(|d| !d.supports_table_hints());
11464
+ let unsupported_dialects = all_dialects_where(|d| {
11465
+ !d.supports_table_hints() && !d.supports_statements_without_semicolon_delimiter()
11466
+ });
11432
11467
let select = unsupported_dialects
11433
11468
.verified_only_select_with_canonical(sql, "SELECT * FROM T AS USE LIMIT 1");
11434
11469
assert_eq!(
0 commit comments