@@ -668,6 +668,28 @@ fn parse_select_with_table_alias() {
668668 );
669669}
670670
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+
671693#[test]
672694fn parse_consecutive_queries() {
673695 let select_then_exec = "SELECT * FROM deleted; EXECUTE my_sp 'some', 'params'";
@@ -951,7 +973,18 @@ fn parse_limit() {
951973
952974#[test]
953975fn 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+ );
955988}
956989
957990#[test]
@@ -11029,7 +11062,9 @@ fn parse_select_table_with_index_hints() {
1102911062
1103011063 // Test that dialects that don't support table hints will keep parsing the USE as table alias
1103111064 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+ });
1103311068 let select = unsupported_dialects
1103411069 .verified_only_select_with_canonical(sql, "SELECT * FROM T AS USE LIMIT 1");
1103511070 assert_eq!(
0 commit comments