Skip to content

Commit 838cda7

Browse files
authored
Fix TMultiConstraintNode(): requirement Items_.size() failed error (#11417)
1 parent 13fb53d commit 838cda7

File tree

6 files changed

+73
-8
lines changed

6 files changed

+73
-8
lines changed

ydb/library/yql/providers/yt/provider/yql_yt_datasink_constraints.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -128,28 +128,30 @@ class TYtDataSinkConstraintTransformer : public TVisitorTransformerBase {
128128
lambdaNdx = OutLambdaNdx;
129129
}
130130

131+
bool emptyInput = false;
131132
const auto filter = NYql::HasSetting(op.Settings().Ref(), EYtSettingType::Ordered) ?
132133
[](const std::string_view& name) { return TEmptyConstraintNode::Name() == name || TUniqueConstraintNode::Name() == name || TDistinctConstraintNode::Name() == name || TSortedConstraintNode::Name() == name; }:
133134
[](const std::string_view& name) { return TEmptyConstraintNode::Name() == name || TUniqueConstraintNode::Name() == name || TDistinctConstraintNode::Name() == name; };
134135
TConstraintNode::TListType argConstraints;
135136
if (op.Input().Size() > 1) {
136137
TMultiConstraintNode::TMapType multiItems;
137-
bool allEmpty = true;
138+
emptyInput = true;
138139
for (ui32 index = 0; index < op.Input().Size(); ++index) {
139140
auto section = op.Input().Item(index);
140141
if (!section.Ref().GetConstraint<TEmptyConstraintNode>()) {
141142
multiItems.push_back(std::make_pair(index, section.Ref().GetConstraintSet()));
142143
multiItems.back().second.FilterConstraints(filter);
143-
allEmpty = false;
144+
emptyInput = false;
144145
}
145146
}
146147
if (!multiItems.empty()) {
147148
argConstraints.push_back(ctx.MakeConstraint<TMultiConstraintNode>(std::move(multiItems)));
148-
} else if (allEmpty) {
149+
} else if (emptyInput) {
149150
argConstraints.push_back(ctx.MakeConstraint<TEmptyConstraintNode>());
150151
}
151152
} else {
152153
auto set = op.Input().Item(0).Ref().GetConstraintSet();
154+
emptyInput = nullptr != set.GetConstraint<TEmptyConstraintNode>();
153155
set.FilterConstraints(filter);
154156
argConstraints = set.GetAllConstraints();
155157
if (singleLambda) {
@@ -197,10 +199,8 @@ class TYtDataSinkConstraintTransformer : public TVisitorTransformerBase {
197199
}
198200

199201
SetResultConstraint(input, *input->Child(OutLambdaNdx), op.Output(), ctx);
200-
if (op.Input().Size() == 1) {
201-
if (auto empty = op.Input().Item(0).Ref().GetConstraint<TEmptyConstraintNode>()) {
202-
input->AddConstraint(empty);
203-
}
202+
if (emptyInput) {
203+
input->AddConstraint(ctx.MakeConstraint<TEmptyConstraintNode>());
204204
}
205205

206206
return TStatus::Ok;

ydb/library/yql/providers/yt/provider/yql_yt_datasource_constraints.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,13 +165,19 @@ class TYtDataSourceConstraintTransformer : public TVisitorTransformerBase {
165165
input.Ptr()->CopyConstraints(section.Ref());
166166
} else {
167167
TMultiConstraintNode::TMapType multiItems;
168+
bool allEmpty = true;
168169
for (ui32 index = 0; index < read.Input().Size(); ++index) {
169170
auto section = read.Input().Item(index);
170171
if (!section.Ref().GetConstraint<TEmptyConstraintNode>()) {
171172
multiItems.push_back(std::make_pair(index, section.Ref().GetConstraintSet()));
173+
allEmpty = false;
172174
}
173175
}
174-
input.Ptr()->AddConstraint(ctx.MakeConstraint<TMultiConstraintNode>(std::move(multiItems)));
176+
if (!multiItems.empty()) {
177+
input.Ptr()->AddConstraint(ctx.MakeConstraint<TMultiConstraintNode>(std::move(multiItems)));
178+
} else if (allEmpty) {
179+
input.Ptr()->AddConstraint(ctx.MakeConstraint<TEmptyConstraintNode>());
180+
}
175181
}
176182
return TStatus::Ok;
177183
}

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2549,6 +2549,28 @@
25492549
}
25502550
],
25512551
"test.test[produce-reduce_lambda_presort_twin_list-default.txt-Results]": [],
2552+
"test.test[produce-reduce_multi_in-empty-Analyze]": [
2553+
{
2554+
"checksum": "9ca09e642e32d555ae193ebb53450aa7",
2555+
"size": 5061,
2556+
"uri": "https://{canondata_backend}/1937492/a3be8907a794dd8afc1b0615834f797b64dd9927/resource.tar.gz#test.test_produce-reduce_multi_in-empty-Analyze_/plan.txt"
2557+
}
2558+
],
2559+
"test.test[produce-reduce_multi_in-empty-Debug]": [
2560+
{
2561+
"checksum": "5ee56492dc75920918834c1591b2d875",
2562+
"size": 2287,
2563+
"uri": "https://{canondata_backend}/1937492/a3be8907a794dd8afc1b0615834f797b64dd9927/resource.tar.gz#test.test_produce-reduce_multi_in-empty-Debug_/opt.yql_patched"
2564+
}
2565+
],
2566+
"test.test[produce-reduce_multi_in-empty-Plan]": [
2567+
{
2568+
"checksum": "9ca09e642e32d555ae193ebb53450aa7",
2569+
"size": 5061,
2570+
"uri": "https://{canondata_backend}/1937492/a3be8907a794dd8afc1b0615834f797b64dd9927/resource.tar.gz#test.test_produce-reduce_multi_in-empty-Plan_/plan.txt"
2571+
}
2572+
],
2573+
"test.test[produce-reduce_multi_in-empty-Results]": [],
25522574
"test.test[produce-reduce_multi_in_keytuple_difftype--Analyze]": [
25532575
{
25542576
"checksum": "f60d354ca933908da1ef3fdfbf613ddc",

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2533,6 +2533,20 @@
25332533
"uri": "https://{canondata_backend}/1809005/7e4dc59583cad760822faf30fa4695e365329148/resource.tar.gz#test.test_produce-reduce_lambda-default.txt-Plan_/plan.txt"
25342534
}
25352535
],
2536+
"test.test[produce-reduce_multi_in-empty-Debug]": [
2537+
{
2538+
"checksum": "81ca9a9b5818c411daa1c3ceeb35c10d",
2539+
"size": 1546,
2540+
"uri": "https://{canondata_backend}/1777230/dd70c380673122cd500d799c70016541eabd320a/resource.tar.gz#test.test_produce-reduce_multi_in-empty-Debug_/opt.yql_patched"
2541+
}
2542+
],
2543+
"test.test[produce-reduce_multi_in-empty-Plan]": [
2544+
{
2545+
"checksum": "c6fc2ac654b52d444b9a39e91a5f4421",
2546+
"size": 2870,
2547+
"uri": "https://{canondata_backend}/1777230/dd70c380673122cd500d799c70016541eabd320a/resource.tar.gz#test.test_produce-reduce_multi_in-empty-Plan_/plan.txt"
2548+
}
2549+
],
25362550
"test.test[produce-reduce_multi_in_sampling--Debug]": [
25372551
{
25382552
"checksum": "6bdbfe3d776ee5a778da5e6c1d80827a",
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
in Input empty.txt
2+
res result.txt

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2675,6 +2675,27 @@
26752675
"uri": "https://{canondata_backend}/1689644/a1e3734b9bd90d7ee8a597f60d142b79a8980665/resource.tar.gz#test.test_produce-reduce_lambda_presort_twin_list-default.txt-Results_/results.txt"
26762676
}
26772677
],
2678+
"test.test[produce-reduce_multi_in-empty-Debug]": [
2679+
{
2680+
"checksum": "c7995250466d47dd34cb816ac34cfee9",
2681+
"size": 1477,
2682+
"uri": "https://{canondata_backend}/1903280/c00a60b19ed912e070196b77ab74860276ef193c/resource.tar.gz#test.test_produce-reduce_multi_in-empty-Debug_/opt.yql"
2683+
}
2684+
],
2685+
"test.test[produce-reduce_multi_in-empty-Plan]": [
2686+
{
2687+
"checksum": "71b7793dbfeb8423224c943ea3994cd6",
2688+
"size": 2870,
2689+
"uri": "https://{canondata_backend}/1903280/c00a60b19ed912e070196b77ab74860276ef193c/resource.tar.gz#test.test_produce-reduce_multi_in-empty-Plan_/plan.txt"
2690+
}
2691+
],
2692+
"test.test[produce-reduce_multi_in-empty-Results]": [
2693+
{
2694+
"checksum": "2004d4c4c75a57ebaaffb58738db4ec0",
2695+
"size": 1133,
2696+
"uri": "https://{canondata_backend}/1903280/c00a60b19ed912e070196b77ab74860276ef193c/resource.tar.gz#test.test_produce-reduce_multi_in-empty-Results_/results.txt"
2697+
}
2698+
],
26782699
"test.test[produce-reduce_multi_in_keytuple_difftype--Debug]": [
26792700
{
26802701
"checksum": "7926309a068a6f63f3ec9f62c715dc41",

0 commit comments

Comments
 (0)