@@ -668,6 +668,28 @@ fn parse_select_with_table_alias() {
668
668
);
669
669
}
670
670
671
+ #[test]
672
+ fn parse_select_with_table_alias_keyword() {
673
+ // note: DECLARE isn't included in RESERVED_FOR_TABLE_ALIAS
674
+ let table_alias_non_reserved_keyword = "SELECT a FROM lineitem DECLARE";
675
+ let statements = all_dialects_requiring_semicolon_statement_delimiter()
676
+ .parse_sql_statements(table_alias_non_reserved_keyword)
677
+ .unwrap();
678
+ assert_eq!(1, statements.len());
679
+ assert_eq!(
680
+ ParserError::ParserError("Expected: identifier, found: EOF".to_string()),
681
+ all_dialects_not_requiring_semicolon_statement_delimiter()
682
+ .parse_sql_statements(table_alias_non_reserved_keyword)
683
+ .unwrap_err()
684
+ );
685
+
686
+ let table_alias_quoted_keyword = "SELECT a FROM lineitem \"DECLARE\"";
687
+ let statements = all_dialects()
688
+ .parse_sql_statements(table_alias_quoted_keyword)
689
+ .unwrap();
690
+ assert_eq!(1, statements.len());
691
+ }
692
+
671
693
#[test]
672
694
fn parse_consecutive_queries() {
673
695
let select_then_exec = "SELECT * FROM deleted; EXECUTE my_sp 'some', 'params'";
@@ -951,7 +973,18 @@ fn parse_limit() {
951
973
952
974
#[test]
953
975
fn parse_invalid_limit_by() {
954
- assert_err_parse_statements("SELECT * FROM user BY name", "name");
976
+ assert_eq!(
977
+ ParserError::ParserError("Expected: end of statement, found: name".to_string()),
978
+ all_dialects_requiring_semicolon_statement_delimiter()
979
+ .parse_sql_statements("SELECT * FROM user BY name")
980
+ .unwrap_err()
981
+ );
982
+ assert_eq!(
983
+ ParserError::ParserError("Expected: an SQL statement, found: BY".to_string()),
984
+ all_dialects_not_requiring_semicolon_statement_delimiter()
985
+ .parse_sql_statements("SELECT * FROM user BY name")
986
+ .unwrap_err()
987
+ );
955
988
}
956
989
957
990
#[test]
@@ -11029,7 +11062,9 @@ fn parse_select_table_with_index_hints() {
11029
11062
11030
11063
// Test that dialects that don't support table hints will keep parsing the USE as table alias
11031
11064
let sql = "SELECT * FROM T USE LIMIT 1";
11032
- let unsupported_dialects = all_dialects_where(|d| !d.supports_table_hints());
11065
+ let unsupported_dialects = all_dialects_where(|d| {
11066
+ !d.supports_table_hints() && !d.supports_statements_without_semicolon_delimiter()
11067
+ });
11033
11068
let select = unsupported_dialects
11034
11069
.verified_only_select_with_canonical(sql, "SELECT * FROM T AS USE LIMIT 1");
11035
11070
assert_eq!(
0 commit comments