Skip to content

Commit 10e3231

Browse files
committed
Enable parsing CREATE FUNCTION without AS
1 parent 53f47c2 commit 10e3231

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

src/parser/mod.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -5229,7 +5229,9 @@ impl<'a> Parser<'a> {
52295229
Some(self.parse_data_type()?)
52305230
};
52315231

5232-
self.expect_keyword_is(Keyword::AS)?;
5232+
if self.peek_keyword(Keyword::AS) {
5233+
self.expect_keyword_is(Keyword::AS)?;
5234+
}
52335235

52345236
let function_body = if self.peek_keyword(Keyword::BEGIN) {
52355237
let begin_token = self.expect_keyword(Keyword::BEGIN)?;
@@ -9801,7 +9803,7 @@ impl<'a> Parser<'a> {
98019803
Ok(DataType::AnyType)
98029804
}
98039805
Keyword::TABLE => {
9804-
if self.peek_keyword(Keyword::AS) {
9806+
if self.peek_token() != Token::LParen {
98059807
Ok(DataType::Table(Vec::<ColumnDef>::new()))
98069808
} else {
98079809
let columns = self.parse_returns_table_columns()?;

tests/sqlparser_mssql.rs

+20
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,12 @@ fn parse_create_function() {
254254
";
255255
let _ = ms().verified_stmt(multi_statement_function);
256256

257+
let multi_statement_function_without_as = multi_statement_function.replace(" AS", "");
258+
let _ = ms().one_statement_parses_to(
259+
&multi_statement_function_without_as,
260+
multi_statement_function,
261+
);
262+
257263
let create_function_with_conditional = "\
258264
CREATE FUNCTION some_scalar_udf() \
259265
RETURNS INT \
@@ -297,6 +303,13 @@ fn parse_create_function() {
297303
";
298304
let _ = ms().verified_stmt(create_inline_table_value_function);
299305

306+
let create_inline_table_value_function_without_as =
307+
create_inline_table_value_function.replace(" AS", "");
308+
let _ = ms().one_statement_parses_to(
309+
&create_inline_table_value_function_without_as,
310+
create_inline_table_value_function,
311+
);
312+
300313
let create_multi_statement_table_value_function = "\
301314
CREATE FUNCTION some_multi_statement_tvf(@foo INT, @bar VARCHAR(256)) \
302315
RETURNS @t TABLE (col_1 INT) \
@@ -307,6 +320,13 @@ fn parse_create_function() {
307320
END\
308321
";
309322
let _ = ms().verified_stmt(create_multi_statement_table_value_function);
323+
324+
let create_multi_statement_table_value_function_without_as =
325+
create_multi_statement_table_value_function.replace(" AS", "");
326+
let _ = ms().one_statement_parses_to(
327+
&create_multi_statement_table_value_function_without_as,
328+
create_multi_statement_table_value_function,
329+
);
310330
}
311331

312332
#[test]

0 commit comments

Comments
 (0)