diff --git a/ydb/library/yql/core/type_ann/type_ann_core.cpp b/ydb/library/yql/core/type_ann/type_ann_core.cpp index 09af8bc773af..ec9a0840e5a6 100644 --- a/ydb/library/yql/core/type_ann/type_ann_core.cpp +++ b/ydb/library/yql/core/type_ann/type_ann_core.cpp @@ -8935,10 +8935,7 @@ template TExprNode::TListType applyChildren = input->ChildrenList(); applyChildren.pop_back(); // Remove position of list argument - if (input->Head().Type() != TExprNode::Lambda) { - if (!EnsureCallableType(input->Head(), ctx.Expr)) { - return IGraphTransformer::TStatus::Error; - } + if (input->Head().GetTypeAnn() && input->Head().GetTypeAnn()->GetKind() == ETypeAnnotationKind::Callable) { const TCallableExprType* callableType = input->Head().GetTypeAnn()->Cast(); if (applyChildren.size() < callableType->GetArgumentsSize() + 1 - callableType->GetOptionalArgumentsCount()) { @@ -8992,11 +8989,9 @@ template } else { auto lambda = input->HeadPtr(); - const auto args = lambda->Child(0); - if (input->ChildrenSize() - 2 != args->ChildrenSize()) { - ctx.Expr.AddError(TIssue(ctx.Expr.GetPosition(input->Pos()), TStringBuilder() << "Different arguments count, lambda has " - << args->ChildrenSize() << " arguments, but provided " << (input->ChildrenSize() - 2))); - return IGraphTransformer::TStatus::Error; + auto status = ConvertToLambda(lambda, ctx.Expr, input->ChildrenSize() - 2); + if (status == IGraphTransformer::TStatus::Error) { + return status; } output = ctx.Expr.Builder(input->Pos()) diff --git a/ydb/library/yql/tests/sql/dq_file/part16/canondata/result.json b/ydb/library/yql/tests/sql/dq_file/part16/canondata/result.json index 360e900145f0..b7838f4ab800 100644 --- a/ydb/library/yql/tests/sql/dq_file/part16/canondata/result.json +++ b/ydb/library/yql/tests/sql/dq_file/part16/canondata/result.json @@ -2367,6 +2367,28 @@ } ], "test.test[pragma-config_exec--Results]": [], + "test.test[produce-process_lambda_opt_args-default.txt-Analyze]": [ + { + "checksum": "db71f16db01fe45fcaff58e8f061b470", + "size": 6828, + "uri": "https://{canondata_backend}/1942100/d22a096de8f9cd6961c70a84e39de8dcd39ce45e/resource.tar.gz#test.test_produce-process_lambda_opt_args-default.txt-Analyze_/plan.txt" + } + ], + "test.test[produce-process_lambda_opt_args-default.txt-Debug]": [ + { + "checksum": "901165ba1200caf03bc5f29c9348ad8d", + "size": 2061, + "uri": "https://{canondata_backend}/1942100/d22a096de8f9cd6961c70a84e39de8dcd39ce45e/resource.tar.gz#test.test_produce-process_lambda_opt_args-default.txt-Debug_/opt.yql_patched" + } + ], + "test.test[produce-process_lambda_opt_args-default.txt-Plan]": [ + { + "checksum": "db71f16db01fe45fcaff58e8f061b470", + "size": 6828, + "uri": "https://{canondata_backend}/1942100/d22a096de8f9cd6961c70a84e39de8dcd39ce45e/resource.tar.gz#test.test_produce-process_lambda_opt_args-default.txt-Plan_/plan.txt" + } + ], + "test.test[produce-process_lambda_opt_args-default.txt-Results]": [], "test.test[produce-process_with_udf_validate-default.txt-Analyze]": [ { "checksum": "be0f13fdf2aa4cfcc736815caa5d992e", diff --git a/ydb/library/yql/tests/sql/hybrid_file/part3/canondata/result.json b/ydb/library/yql/tests/sql/hybrid_file/part3/canondata/result.json index b37b4782c312..11bfa2d9d0ba 100644 --- a/ydb/library/yql/tests/sql/hybrid_file/part3/canondata/result.json +++ b/ydb/library/yql/tests/sql/hybrid_file/part3/canondata/result.json @@ -2603,6 +2603,20 @@ "uri": "https://{canondata_backend}/1920236/56560fc4eb0991ee6681b0a1b288f62576ec0df7/resource.tar.gz#test.test_pg_duplicated-star_from_crossjoin-default.txt-Plan_/plan.txt" } ], + "test.test[produce-process_lambda_opt_args-default.txt-Debug]": [ + { + "checksum": "e2259aa77ae943bcfe8fc9caedb98d00", + "size": 2669, + "uri": "https://{canondata_backend}/1814674/0e62762049861bcf9f9d67d9b14ebdbaab665fa3/resource.tar.gz#test.test_produce-process_lambda_opt_args-default.txt-Debug_/opt.yql_patched" + } + ], + "test.test[produce-process_lambda_opt_args-default.txt-Plan]": [ + { + "checksum": "a501aca13d0cdb216b2b1e3875ab929e", + "size": 8249, + "uri": "https://{canondata_backend}/1814674/0e62762049861bcf9f9d67d9b14ebdbaab665fa3/resource.tar.gz#test.test_produce-process_lambda_opt_args-default.txt-Plan_/plan.txt" + } + ], "test.test[produce-process_with_udf_validate-default.txt-Debug]": [ { "checksum": "d38c739bd48daee1bc9164fd494c78df", diff --git a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json index f6980ccf3b4e..04c216953e49 100644 --- a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json +++ b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json @@ -15322,6 +15322,13 @@ "uri": "https://{canondata_backend}/1784117/d56ae82ad9d30397a41490647be1bd2124718f98/resource.tar.gz#test_sql2yql.test_produce-process_and_filter_/sql.yql" } ], + "test_sql2yql.test[produce-process_lambda_opt_args]": [ + { + "checksum": "4b75cc3c37fedf0e63bdd5e43ea06d68", + "size": 3814, + "uri": "https://{canondata_backend}/1936273/ff4f0a6d173adeb50438b8fd581dd8a952c141bd/resource.tar.gz#test_sql2yql.test_produce-process_lambda_opt_args_/sql.yql" + } + ], "test_sql2yql.test[produce-process_multi_in]": [ { "checksum": "781a42dd763a6735bc4078a7a36e144f", @@ -31639,6 +31646,13 @@ "uri": "https://{canondata_backend}/1880306/64654158d6bfb1289c66c626a8162239289559d0/resource.tar.gz#test_sql_format.test_produce-process_and_filter_/formatted.sql" } ], + "test_sql_format.test[produce-process_lambda_opt_args]": [ + { + "checksum": "52fc6dc9253a2fe48d8ad637e655203b", + "size": 267, + "uri": "https://{canondata_backend}/1936273/ff4f0a6d173adeb50438b8fd581dd8a952c141bd/resource.tar.gz#test_sql_format.test_produce-process_lambda_opt_args_/formatted.sql" + } + ], "test_sql_format.test[produce-process_multi_in]": [ { "checksum": "4a33f40cf13fca883c7f2662b5a83c1c", diff --git a/ydb/library/yql/tests/sql/suites/produce/process_lambda_opt_args.sql b/ydb/library/yql/tests/sql/suites/produce/process_lambda_opt_args.sql new file mode 100644 index 000000000000..612885c95ba7 --- /dev/null +++ b/ydb/library/yql/tests/sql/suites/produce/process_lambda_opt_args.sql @@ -0,0 +1,14 @@ +USE plato; + +$f = ($x, $optArg?)->{ + return Ensure($x, $optArg is null or len($optArg)>0); +}; + +PROCESS Input0 USING $f(TableRow()); + +PROCESS Input0 USING $f(TableRow(),'foo'); + +PROCESS Input0 USING $f(TableRows()); + +PROCESS Input0 USING $f(TableRows(),'foo'); + diff --git a/ydb/library/yql/tests/sql/yt_native_file/part16/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part16/canondata/result.json index 841a59b86e37..efba4afd5825 100644 --- a/ydb/library/yql/tests/sql/yt_native_file/part16/canondata/result.json +++ b/ydb/library/yql/tests/sql/yt_native_file/part16/canondata/result.json @@ -2300,6 +2300,27 @@ "uri": "https://{canondata_backend}/937458/4ef5c22fa3a7e5fd4e0ef2192cee531d67d22319/resource.tar.gz#test.test_pragma-release_temp_data_chain_pull--Results_/results.txt" } ], + "test.test[produce-process_lambda_opt_args-default.txt-Debug]": [ + { + "checksum": "e0f2a60056375db797d93f91152a4429", + "size": 2064, + "uri": "https://{canondata_backend}/1031349/58ce630c12e9fbb5d612967cd2d5c6e30429d817/resource.tar.gz#test.test_produce-process_lambda_opt_args-default.txt-Debug_/opt.yql" + } + ], + "test.test[produce-process_lambda_opt_args-default.txt-Plan]": [ + { + "checksum": "9816950a9f9605af40ab6cfaad4af11f", + "size": 7680, + "uri": "https://{canondata_backend}/1031349/58ce630c12e9fbb5d612967cd2d5c6e30429d817/resource.tar.gz#test.test_produce-process_lambda_opt_args-default.txt-Plan_/plan.txt" + } + ], + "test.test[produce-process_lambda_opt_args-default.txt-Results]": [ + { + "checksum": "fe42b877468bdc4f554baebbe16b029e", + "size": 6730, + "uri": "https://{canondata_backend}/1031349/58ce630c12e9fbb5d612967cd2d5c6e30429d817/resource.tar.gz#test.test_produce-process_lambda_opt_args-default.txt-Results_/results.txt" + } + ], "test.test[produce-process_multi_in_single_out--Debug]": [ { "checksum": "f565d7aff1e516d638a9f39059b6d9af", diff --git a/ydb/library/yql/tests/sql/yt_native_file/part7/canondata/test.test_match_recognize-without_order_by--Results_/extracted b/ydb/library/yql/tests/sql/yt_native_file/part7/canondata/test.test_match_recognize-without_order_by--Results_/extracted deleted file mode 100644 index abd564f4a8c8..000000000000 --- a/ydb/library/yql/tests/sql/yt_native_file/part7/canondata/test.test_match_recognize-without_order_by--Results_/extracted +++ /dev/null @@ -1,5 +0,0 @@ -/program.sql:
: Fatal: Optimization - - /program.sql:
:8:1: Fatal: ydb/library/yql/core/yql_opt_match_recognize.cpp:xxx ExpandMatchRecognize(): requirement sortOrder->ChildrenSize() == 1 failed, message: Expect ORDER BY timestamp for MATCH_RECOGNIZE - select * from (select * from AS_TABLE($data) MATCH_RECOGNIZE( - ^ \ No newline at end of file