@@ -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]
@@ -11082,7 +11115,9 @@ fn parse_select_table_with_index_hints() {
1108211115
1108311116 // Test that dialects that don't support table hints will keep parsing the USE as table alias
1108411117 let sql = "SELECT * FROM T USE LIMIT 1";
11085- let unsupported_dialects = all_dialects_where(|d| !d.supports_table_hints());
11118+ let unsupported_dialects = all_dialects_where(|d| {
11119+ !d.supports_table_hints() && !d.supports_statements_without_semicolon_delimiter()
11120+ });
1108611121 let select = unsupported_dialects
1108711122 .verified_only_select_with_canonical(sql, "SELECT * FROM T AS USE LIMIT 1");
1108811123 assert_eq!(
0 commit comments