Skip to content

Commit 9db9d22

Browse files
authored
Support postgres style CREATE FUNCTION in GenericDialect (apache#1159)
1 parent a511c47 commit 9db9d22

File tree

3 files changed

+10
-4
lines changed

3 files changed

+10
-4
lines changed

src/parser/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3317,7 +3317,7 @@ impl<'a> Parser<'a> {
33173317
return_type: None,
33183318
params,
33193319
})
3320-
} else if dialect_of!(self is PostgreSqlDialect) {
3320+
} else if dialect_of!(self is PostgreSqlDialect | GenericDialect) {
33213321
let name = self.parse_object_name(false)?;
33223322
self.expect_token(&Token::LParen)?;
33233323
let args = if self.consume_token(&Token::RParen) {

tests/sqlparser_hive.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use sqlparser::ast::{
1919
CreateFunctionBody, CreateFunctionUsing, Expr, Function, FunctionDefinition, Ident, ObjectName,
2020
SelectItem, Statement, TableFactor, UnaryOperator, Value,
2121
};
22-
use sqlparser::dialect::{GenericDialect, HiveDialect};
22+
use sqlparser::dialect::{GenericDialect, HiveDialect, MsSqlDialect};
2323
use sqlparser::parser::{ParserError, ParserOptions};
2424
use sqlparser::test_utils::*;
2525

@@ -285,8 +285,14 @@ fn parse_create_function() {
285285
_ => unreachable!(),
286286
}
287287

288+
// Test error in dialect that doesn't support parsing CREATE FUNCTION
289+
let unsupported_dialects = TestedDialects {
290+
dialects: vec![Box::new(MsSqlDialect {})],
291+
options: None,
292+
};
293+
288294
assert_eq!(
289-
generic(None).parse_sql_statements(sql).unwrap_err(),
295+
unsupported_dialects.parse_sql_statements(sql).unwrap_err(),
290296
ParserError::ParserError(
291297
"Expected an object type after CREATE, found: FUNCTION".to_string()
292298
)

tests/sqlparser_postgres.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3257,7 +3257,7 @@ fn parse_similar_to() {
32573257
fn parse_create_function() {
32583258
let sql = "CREATE FUNCTION add(INTEGER, INTEGER) RETURNS INTEGER LANGUAGE SQL IMMUTABLE AS 'select $1 + $2;'";
32593259
assert_eq!(
3260-
pg().verified_stmt(sql),
3260+
pg_and_generic().verified_stmt(sql),
32613261
Statement::CreateFunction {
32623262
or_replace: false,
32633263
temporary: false,

0 commit comments

Comments
 (0)