From cea631a4c267e96a90c97baa8710a18232b66fa6 Mon Sep 17 00:00:00 2001 From: save-my-heart Date: Tue, 28 Mar 2023 23:24:07 +0800 Subject: [PATCH 1/6] throw exception while non-parametric functions having parameters --- .../UserDefined/UserDefinedSQLFunctionVisitor.cpp | 7 +++++++ src/Interpreters/ActionsVisitor.cpp | 7 +++++++ .../0_stateless/25403_non_parametric_function.reference | 0 .../queries/0_stateless/25403_non_parametric_function.sql | 5 +++++ 4 files changed, 19 insertions(+) create mode 100644 tests/queries/0_stateless/25403_non_parametric_function.reference create mode 100644 tests/queries/0_stateless/25403_non_parametric_function.sql diff --git a/src/Functions/UserDefined/UserDefinedSQLFunctionVisitor.cpp b/src/Functions/UserDefined/UserDefinedSQLFunctionVisitor.cpp index d78a8623a188..57cc45cc75d3 100644 --- a/src/Functions/UserDefined/UserDefinedSQLFunctionVisitor.cpp +++ b/src/Functions/UserDefined/UserDefinedSQLFunctionVisitor.cpp @@ -20,6 +20,7 @@ namespace DB namespace ErrorCodes { extern const int UNSUPPORTED_METHOD; + extern const int FUNCTION_CANNOT_HAVE_PARAMETERS; } void UserDefinedSQLFunctionVisitor::visit(ASTPtr & ast) @@ -132,6 +133,12 @@ ASTPtr UserDefinedSQLFunctionVisitor::tryToReplaceFunction(const ASTFunction & f if (!user_defined_function) return nullptr; + /// All UDFs are not parametric for now. + if (function.parameters) + { + throw Exception(ErrorCodes::FUNCTION_CANNOT_HAVE_PARAMETERS, "Function {} is not parametric", function.name); + } + const auto & function_arguments_list = function.children.at(0)->as(); auto & function_arguments = function_arguments_list->children; diff --git a/src/Interpreters/ActionsVisitor.cpp b/src/Interpreters/ActionsVisitor.cpp index 8a5ea1205e77..1f4969a7f9ac 100644 --- a/src/Interpreters/ActionsVisitor.cpp +++ b/src/Interpreters/ActionsVisitor.cpp @@ -75,6 +75,7 @@ namespace ErrorCodes extern const int LOGICAL_ERROR; extern const int TOO_FEW_ARGUMENTS_FOR_FUNCTION; extern const int TOO_MANY_ARGUMENTS_FOR_FUNCTION; + extern const int FUNCTION_CANNOT_HAVE_PARAMETERS; } static NamesAndTypesList::iterator findColumn(const String & name, NamesAndTypesList & cols) @@ -1109,6 +1110,12 @@ void ActionsMatcher::visit(const ASTFunction & node, const ASTPtr & ast, Data & } } + /// Normal functions are not parametric for now. + if (node.parameters) + { + throw Exception(ErrorCodes::FUNCTION_CANNOT_HAVE_PARAMETERS, "Function {} is not parametric", node.name); + } + Names argument_names; DataTypes argument_types; bool arguments_present = true; diff --git a/tests/queries/0_stateless/25403_non_parametric_function.reference b/tests/queries/0_stateless/25403_non_parametric_function.reference new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/tests/queries/0_stateless/25403_non_parametric_function.sql b/tests/queries/0_stateless/25403_non_parametric_function.sql new file mode 100644 index 000000000000..9b7e2ae7a041 --- /dev/null +++ b/tests/queries/0_stateless/25403_non_parametric_function.sql @@ -0,0 +1,5 @@ +SELECT * FROM system.numbers WHERE number > toUInt64(10)(number) LIMIT 10; -- { serverError 309 } + +CREATE FUNCTION sum_udf as (x, y) -> (x + y); + +SELECT sum_udf(1)(1, 2); -- { serverError 309 } \ No newline at end of file From 2b84fb3fffe2c409407506bab719ff03620f6c91 Mon Sep 17 00:00:00 2001 From: save-my-heart Date: Wed, 29 Mar 2023 11:21:30 +0800 Subject: [PATCH 2/6] fix tests --- ...function.reference => 02701_non_parametric_function.reference} | 0 ..._parametric_function.sql => 02701_non_parametric_function.sql} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename tests/queries/0_stateless/{25403_non_parametric_function.reference => 02701_non_parametric_function.reference} (100%) rename tests/queries/0_stateless/{25403_non_parametric_function.sql => 02701_non_parametric_function.sql} (100%) diff --git a/tests/queries/0_stateless/25403_non_parametric_function.reference b/tests/queries/0_stateless/02701_non_parametric_function.reference similarity index 100% rename from tests/queries/0_stateless/25403_non_parametric_function.reference rename to tests/queries/0_stateless/02701_non_parametric_function.reference diff --git a/tests/queries/0_stateless/25403_non_parametric_function.sql b/tests/queries/0_stateless/02701_non_parametric_function.sql similarity index 100% rename from tests/queries/0_stateless/25403_non_parametric_function.sql rename to tests/queries/0_stateless/02701_non_parametric_function.sql From 7078576ee52f6834228be3d1bdb4e67d92afd745 Mon Sep 17 00:00:00 2001 From: save-my-heart Date: Wed, 29 Mar 2023 12:58:35 +0800 Subject: [PATCH 3/6] fix tests --- tests/queries/0_stateless/02701_non_parametric_function.sql | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/queries/0_stateless/02701_non_parametric_function.sql b/tests/queries/0_stateless/02701_non_parametric_function.sql index 9b7e2ae7a041..9946b50a8c81 100644 --- a/tests/queries/0_stateless/02701_non_parametric_function.sql +++ b/tests/queries/0_stateless/02701_non_parametric_function.sql @@ -2,4 +2,6 @@ SELECT * FROM system.numbers WHERE number > toUInt64(10)(number) LIMIT 10; -- { CREATE FUNCTION sum_udf as (x, y) -> (x + y); -SELECT sum_udf(1)(1, 2); -- { serverError 309 } \ No newline at end of file +SELECT sum_udf(1)(1, 2); -- { serverError 309 } + +DROP FUNCTION sum_udf; \ No newline at end of file From 3507c4998e3a0c2eef6c88c89e06cf66202de1fd Mon Sep 17 00:00:00 2001 From: save-my-heart Date: Wed, 29 Mar 2023 14:07:45 +0800 Subject: [PATCH 4/6] fix tests --- tests/queries/0_stateless/02701_non_parametric_function.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/queries/0_stateless/02701_non_parametric_function.sql b/tests/queries/0_stateless/02701_non_parametric_function.sql index 9946b50a8c81..1164a0603236 100644 --- a/tests/queries/0_stateless/02701_non_parametric_function.sql +++ b/tests/queries/0_stateless/02701_non_parametric_function.sql @@ -1,6 +1,6 @@ SELECT * FROM system.numbers WHERE number > toUInt64(10)(number) LIMIT 10; -- { serverError 309 } -CREATE FUNCTION sum_udf as (x, y) -> (x + y); +CREATE FUNCTION IF NOT EXISTS sum_udf as (x, y) -> (x + y); SELECT sum_udf(1)(1, 2); -- { serverError 309 } From 6738be00298db5095a6b0837b58e4c0337dd1888 Mon Sep 17 00:00:00 2001 From: save-my-heart Date: Wed, 29 Mar 2023 16:14:51 +0800 Subject: [PATCH 5/6] fix tests --- tests/queries/0_stateless/02701_non_parametric_function.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/queries/0_stateless/02701_non_parametric_function.sql b/tests/queries/0_stateless/02701_non_parametric_function.sql index 1164a0603236..a757343a6249 100644 --- a/tests/queries/0_stateless/02701_non_parametric_function.sql +++ b/tests/queries/0_stateless/02701_non_parametric_function.sql @@ -4,4 +4,4 @@ CREATE FUNCTION IF NOT EXISTS sum_udf as (x, y) -> (x + y); SELECT sum_udf(1)(1, 2); -- { serverError 309 } -DROP FUNCTION sum_udf; \ No newline at end of file +DROP FUNCTION IF EXISTS sum_udf; \ No newline at end of file From f4b884a5a82de0c0164f8ad53b2f47fd766a3c93 Mon Sep 17 00:00:00 2001 From: Kruglov Pavel <48961922+Avogar@users.noreply.github.com> Date: Wed, 29 Mar 2023 13:55:29 +0200 Subject: [PATCH 6/6] Fix test flakiness --- tests/queries/0_stateless/02701_non_parametric_function.sql | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/queries/0_stateless/02701_non_parametric_function.sql b/tests/queries/0_stateless/02701_non_parametric_function.sql index a757343a6249..5261fa7b0821 100644 --- a/tests/queries/0_stateless/02701_non_parametric_function.sql +++ b/tests/queries/0_stateless/02701_non_parametric_function.sql @@ -1,7 +1,9 @@ +-- Tags: no-parallel + SELECT * FROM system.numbers WHERE number > toUInt64(10)(number) LIMIT 10; -- { serverError 309 } CREATE FUNCTION IF NOT EXISTS sum_udf as (x, y) -> (x + y); SELECT sum_udf(1)(1, 2); -- { serverError 309 } -DROP FUNCTION IF EXISTS sum_udf; \ No newline at end of file +DROP FUNCTION IF EXISTS sum_udf;