Skip to content

Commit 3fc1bbf

Browse files
authored
Fixed sql process in case of lambda with optional args (#7798)
1 parent 207f846 commit 3fc1bbf

File tree

7 files changed

+89
-14
lines changed

7 files changed

+89
-14
lines changed

ydb/library/yql/core/type_ann/type_ann_core.cpp

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8935,10 +8935,7 @@ template <NKikimr::NUdf::EDataSlot DataSlot>
89358935
TExprNode::TListType applyChildren = input->ChildrenList();
89368936
applyChildren.pop_back(); // Remove position of list argument
89378937

8938-
if (input->Head().Type() != TExprNode::Lambda) {
8939-
if (!EnsureCallableType(input->Head(), ctx.Expr)) {
8940-
return IGraphTransformer::TStatus::Error;
8941-
}
8938+
if (input->Head().GetTypeAnn() && input->Head().GetTypeAnn()->GetKind() == ETypeAnnotationKind::Callable) {
89428939
const TCallableExprType* callableType = input->Head().GetTypeAnn()->Cast<TCallableExprType>();
89438940

89448941
if (applyChildren.size() < callableType->GetArgumentsSize() + 1 - callableType->GetOptionalArgumentsCount()) {
@@ -8992,11 +8989,9 @@ template <NKikimr::NUdf::EDataSlot DataSlot>
89928989
}
89938990
else {
89948991
auto lambda = input->HeadPtr();
8995-
const auto args = lambda->Child(0);
8996-
if (input->ChildrenSize() - 2 != args->ChildrenSize()) {
8997-
ctx.Expr.AddError(TIssue(ctx.Expr.GetPosition(input->Pos()), TStringBuilder() << "Different arguments count, lambda has "
8998-
<< args->ChildrenSize() << " arguments, but provided " << (input->ChildrenSize() - 2)));
8999-
return IGraphTransformer::TStatus::Error;
8992+
auto status = ConvertToLambda(lambda, ctx.Expr, input->ChildrenSize() - 2);
8993+
if (status == IGraphTransformer::TStatus::Error) {
8994+
return status;
90008995
}
90018996

90028997
output = ctx.Expr.Builder(input->Pos())

ydb/library/yql/tests/sql/dq_file/part16/canondata/result.json

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2367,6 +2367,28 @@
23672367
}
23682368
],
23692369
"test.test[pragma-config_exec--Results]": [],
2370+
"test.test[produce-process_lambda_opt_args-default.txt-Analyze]": [
2371+
{
2372+
"checksum": "db71f16db01fe45fcaff58e8f061b470",
2373+
"size": 6828,
2374+
"uri": "https://{canondata_backend}/1942100/d22a096de8f9cd6961c70a84e39de8dcd39ce45e/resource.tar.gz#test.test_produce-process_lambda_opt_args-default.txt-Analyze_/plan.txt"
2375+
}
2376+
],
2377+
"test.test[produce-process_lambda_opt_args-default.txt-Debug]": [
2378+
{
2379+
"checksum": "901165ba1200caf03bc5f29c9348ad8d",
2380+
"size": 2061,
2381+
"uri": "https://{canondata_backend}/1942100/d22a096de8f9cd6961c70a84e39de8dcd39ce45e/resource.tar.gz#test.test_produce-process_lambda_opt_args-default.txt-Debug_/opt.yql_patched"
2382+
}
2383+
],
2384+
"test.test[produce-process_lambda_opt_args-default.txt-Plan]": [
2385+
{
2386+
"checksum": "db71f16db01fe45fcaff58e8f061b470",
2387+
"size": 6828,
2388+
"uri": "https://{canondata_backend}/1942100/d22a096de8f9cd6961c70a84e39de8dcd39ce45e/resource.tar.gz#test.test_produce-process_lambda_opt_args-default.txt-Plan_/plan.txt"
2389+
}
2390+
],
2391+
"test.test[produce-process_lambda_opt_args-default.txt-Results]": [],
23702392
"test.test[produce-process_with_udf_validate-default.txt-Analyze]": [
23712393
{
23722394
"checksum": "be0f13fdf2aa4cfcc736815caa5d992e",

ydb/library/yql/tests/sql/hybrid_file/part3/canondata/result.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2603,6 +2603,20 @@
26032603
"uri": "https://{canondata_backend}/1920236/56560fc4eb0991ee6681b0a1b288f62576ec0df7/resource.tar.gz#test.test_pg_duplicated-star_from_crossjoin-default.txt-Plan_/plan.txt"
26042604
}
26052605
],
2606+
"test.test[produce-process_lambda_opt_args-default.txt-Debug]": [
2607+
{
2608+
"checksum": "e2259aa77ae943bcfe8fc9caedb98d00",
2609+
"size": 2669,
2610+
"uri": "https://{canondata_backend}/1814674/0e62762049861bcf9f9d67d9b14ebdbaab665fa3/resource.tar.gz#test.test_produce-process_lambda_opt_args-default.txt-Debug_/opt.yql_patched"
2611+
}
2612+
],
2613+
"test.test[produce-process_lambda_opt_args-default.txt-Plan]": [
2614+
{
2615+
"checksum": "a501aca13d0cdb216b2b1e3875ab929e",
2616+
"size": 8249,
2617+
"uri": "https://{canondata_backend}/1814674/0e62762049861bcf9f9d67d9b14ebdbaab665fa3/resource.tar.gz#test.test_produce-process_lambda_opt_args-default.txt-Plan_/plan.txt"
2618+
}
2619+
],
26062620
"test.test[produce-process_with_udf_validate-default.txt-Debug]": [
26072621
{
26082622
"checksum": "d38c739bd48daee1bc9164fd494c78df",

ydb/library/yql/tests/sql/sql2yql/canondata/result.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15322,6 +15322,13 @@
1532215322
"uri": "https://{canondata_backend}/1784117/d56ae82ad9d30397a41490647be1bd2124718f98/resource.tar.gz#test_sql2yql.test_produce-process_and_filter_/sql.yql"
1532315323
}
1532415324
],
15325+
"test_sql2yql.test[produce-process_lambda_opt_args]": [
15326+
{
15327+
"checksum": "4b75cc3c37fedf0e63bdd5e43ea06d68",
15328+
"size": 3814,
15329+
"uri": "https://{canondata_backend}/1936273/ff4f0a6d173adeb50438b8fd581dd8a952c141bd/resource.tar.gz#test_sql2yql.test_produce-process_lambda_opt_args_/sql.yql"
15330+
}
15331+
],
1532515332
"test_sql2yql.test[produce-process_multi_in]": [
1532615333
{
1532715334
"checksum": "781a42dd763a6735bc4078a7a36e144f",
@@ -31639,6 +31646,13 @@
3163931646
"uri": "https://{canondata_backend}/1880306/64654158d6bfb1289c66c626a8162239289559d0/resource.tar.gz#test_sql_format.test_produce-process_and_filter_/formatted.sql"
3164031647
}
3164131648
],
31649+
"test_sql_format.test[produce-process_lambda_opt_args]": [
31650+
{
31651+
"checksum": "52fc6dc9253a2fe48d8ad637e655203b",
31652+
"size": 267,
31653+
"uri": "https://{canondata_backend}/1936273/ff4f0a6d173adeb50438b8fd581dd8a952c141bd/resource.tar.gz#test_sql_format.test_produce-process_lambda_opt_args_/formatted.sql"
31654+
}
31655+
],
3164231656
"test_sql_format.test[produce-process_multi_in]": [
3164331657
{
3164431658
"checksum": "4a33f40cf13fca883c7f2662b5a83c1c",
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
USE plato;
2+
3+
$f = ($x, $optArg?)->{
4+
return Ensure($x, $optArg is null or len($optArg)>0);
5+
};
6+
7+
PROCESS Input0 USING $f(TableRow());
8+
9+
PROCESS Input0 USING $f(TableRow(),'foo');
10+
11+
PROCESS Input0 USING $f(TableRows());
12+
13+
PROCESS Input0 USING $f(TableRows(),'foo');
14+

ydb/library/yql/tests/sql/yt_native_file/part16/canondata/result.json

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2300,6 +2300,27 @@
23002300
"uri": "https://{canondata_backend}/937458/4ef5c22fa3a7e5fd4e0ef2192cee531d67d22319/resource.tar.gz#test.test_pragma-release_temp_data_chain_pull--Results_/results.txt"
23012301
}
23022302
],
2303+
"test.test[produce-process_lambda_opt_args-default.txt-Debug]": [
2304+
{
2305+
"checksum": "e0f2a60056375db797d93f91152a4429",
2306+
"size": 2064,
2307+
"uri": "https://{canondata_backend}/1031349/58ce630c12e9fbb5d612967cd2d5c6e30429d817/resource.tar.gz#test.test_produce-process_lambda_opt_args-default.txt-Debug_/opt.yql"
2308+
}
2309+
],
2310+
"test.test[produce-process_lambda_opt_args-default.txt-Plan]": [
2311+
{
2312+
"checksum": "9816950a9f9605af40ab6cfaad4af11f",
2313+
"size": 7680,
2314+
"uri": "https://{canondata_backend}/1031349/58ce630c12e9fbb5d612967cd2d5c6e30429d817/resource.tar.gz#test.test_produce-process_lambda_opt_args-default.txt-Plan_/plan.txt"
2315+
}
2316+
],
2317+
"test.test[produce-process_lambda_opt_args-default.txt-Results]": [
2318+
{
2319+
"checksum": "fe42b877468bdc4f554baebbe16b029e",
2320+
"size": 6730,
2321+
"uri": "https://{canondata_backend}/1031349/58ce630c12e9fbb5d612967cd2d5c6e30429d817/resource.tar.gz#test.test_produce-process_lambda_opt_args-default.txt-Results_/results.txt"
2322+
}
2323+
],
23032324
"test.test[produce-process_multi_in_single_out--Debug]": [
23042325
{
23052326
"checksum": "f565d7aff1e516d638a9f39059b6d9af",

ydb/library/yql/tests/sql/yt_native_file/part7/canondata/test.test_match_recognize-without_order_by--Results_/extracted

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)