From 0eda52d5210840d7c156e70ae329a9cd78b0762f Mon Sep 17 00:00:00 2001 From: Vitaly Stoyan Date: Thu, 15 Aug 2024 12:17:20 +0300 Subject: [PATCH] Ported #7798 (#7826) --- .../yql/core/type_ann/type_ann_core.cpp | 13 +++------ .../sql/dq_file/part16/canondata/result.json | 22 +++++++++++++++ .../hybrid_file/part3/canondata/result.json | 28 +++++++++++++++++++ .../tests/sql/sql2yql/canondata/result.json | 14 ++++++++++ .../produce/process_lambda_opt_args.sql | 14 ++++++++++ .../part16/canondata/result.json | 21 ++++++++++++++ 6 files changed, 103 insertions(+), 9 deletions(-) create mode 100644 ydb/library/yql/tests/sql/suites/produce/process_lambda_opt_args.sql 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 e6764df77674..b2ff5a74f92e 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 11b4b9d9354f..279496177d82 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 d2919a46b174..fb258511f570 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 @@ -2589,6 +2589,34 @@ "uri": "https://{canondata_backend}/1936842/11d23d4a39031af80d6dc470ce99f9427771e7d4/resource.tar.gz#test.test_pg_catalog-table_constraints-default.txt-Plan_/plan.txt" } ], + "test.test[pg_duplicated-star_from_crossjoin-default.txt-Debug]": [ + { + "checksum": "aa3a4404c6d14a2e755422f615497d34", + "size": 940, + "uri": "https://{canondata_backend}/1920236/56560fc4eb0991ee6681b0a1b288f62576ec0df7/resource.tar.gz#test.test_pg_duplicated-star_from_crossjoin-default.txt-Debug_/opt.yql_patched" + } + ], + "test.test[pg_duplicated-star_from_crossjoin-default.txt-Plan]": [ + { + "checksum": "b4dd508a329723c74293d80f0278c705", + "size": 505, + "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 657e5e5c7ddd..46d73c8cc81e 100644 --- a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json +++ b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json @@ -15112,6 +15112,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", @@ -31331,6 +31338,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 584d2446df30..7e9ce23118eb 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 @@ -2228,6 +2228,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",