Skip to content

Commit 25a4416

Browse files
committed
Enable parsing CREATE FUNCTION without AS
1 parent 0288177 commit 25a4416

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

src/parser/mod.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5230,7 +5230,9 @@ impl<'a> Parser<'a> {
52305230
Some(self.parse_data_type()?)
52315231
};
52325232

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

52355237
let function_body = if self.peek_keyword(Keyword::BEGIN) {
52365238
let begin_token = self.expect_keyword(Keyword::BEGIN)?;
@@ -9819,7 +9821,7 @@ impl<'a> Parser<'a> {
98199821
Ok(DataType::AnyType)
98209822
}
98219823
Keyword::TABLE => {
9822-
if self.peek_keyword(Keyword::AS) {
9824+
if self.peek_token() != Token::LParen {
98239825
Ok(DataType::Table(Vec::<ColumnDef>::new()))
98249826
} else {
98259827
let columns = self.parse_returns_table_columns()?;

tests/sqlparser_mssql.rs

Lines changed: 20 additions & 0 deletions
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)