@@ -666,6 +666,28 @@ fn parse_select_with_table_alias() {
666
666
);
667
667
}
668
668
669
+ #[test]
670
+ fn parse_select_with_table_alias_keyword() {
671
+ // note: DECLARE isn't included in RESERVED_FOR_TABLE_ALIAS
672
+ let table_alias_non_reserved_keyword = "SELECT a FROM lineitem DECLARE";
673
+ let statements = all_dialects_requiring_semicolon_statement_delimiter()
674
+ .parse_sql_statements(table_alias_non_reserved_keyword)
675
+ .unwrap();
676
+ assert_eq!(1, statements.len(),);
677
+ assert_eq!(
678
+ ParserError::ParserError("Expected: identifier, found: EOF".to_string()),
679
+ all_dialects_not_requiring_semicolon_statement_delimiter()
680
+ .parse_sql_statements(table_alias_non_reserved_keyword)
681
+ .unwrap_err()
682
+ );
683
+
684
+ let table_alias_quoted_keyword = "SELECT a FROM lineitem \"DECLARE\"";
685
+ let statements = all_dialects()
686
+ .parse_sql_statements(table_alias_quoted_keyword)
687
+ .unwrap();
688
+ assert_eq!(1, statements.len(),);
689
+ }
690
+
669
691
#[test]
670
692
fn parse_consecutive_queries() {
671
693
let select_then_exec = "SELECT * FROM deleted; EXECUTE my_sp 'some', 'params'";
@@ -949,7 +971,18 @@ fn parse_limit() {
949
971
950
972
#[test]
951
973
fn parse_invalid_limit_by() {
952
- assert_err_parse_statements("SELECT * FROM user BY name", "name");
974
+ assert_eq!(
975
+ ParserError::ParserError("Expected: end of statement, found: name".to_string()),
976
+ all_dialects_requiring_semicolon_statement_delimiter()
977
+ .parse_sql_statements("SELECT * FROM user BY name")
978
+ .unwrap_err()
979
+ );
980
+ assert_eq!(
981
+ ParserError::ParserError("Expected: an SQL statement, found: BY".to_string()),
982
+ all_dialects_not_requiring_semicolon_statement_delimiter()
983
+ .parse_sql_statements("SELECT * FROM user BY name")
984
+ .unwrap_err()
985
+ );
953
986
}
954
987
955
988
#[test]
@@ -10826,7 +10859,9 @@ fn parse_select_table_with_index_hints() {
10826
10859
10827
10860
// Test that dialects that don't support table hints will keep parsing the USE as table alias
10828
10861
let sql = "SELECT * FROM T USE LIMIT 1";
10829
- let unsupported_dialects = all_dialects_where(|d| !d.supports_table_hints());
10862
+ let unsupported_dialects = all_dialects_where(|d| {
10863
+ !d.supports_table_hints() && !d.supports_statements_without_semicolon_delimiter()
10864
+ });
10830
10865
let select = unsupported_dialects
10831
10866
.verified_only_select_with_canonical(sql, "SELECT * FROM T AS USE LIMIT 1");
10832
10867
assert_eq!(
0 commit comments