aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoman Udovichenko <rvu@ydb.tech>2024-11-10 12:25:12 +0300
committerGitHub <noreply@github.com>2024-11-10 12:25:12 +0300
commit838cda799634345b7a99ce534f659e10c8938da3 (patch)
tree4b739fe20632a8c6b7154d417f3eea5e625fb395
parent13fb53dc2bb07a662a202470b3982fc2c2f5d53a (diff)
downloadydb-838cda799634345b7a99ce534f659e10c8938da3.tar.gz
Fix `TMultiConstraintNode(): requirement Items_.size() failed` error (#11417)
-rw-r--r--ydb/library/yql/providers/yt/provider/yql_yt_datasink_constraints.cpp14
-rw-r--r--ydb/library/yql/providers/yt/provider/yql_yt_datasource_constraints.cpp8
-rw-r--r--ydb/library/yql/tests/sql/dq_file/part1/canondata/result.json22
-rw-r--r--ydb/library/yql/tests/sql/hybrid_file/part4/canondata/result.json14
-rw-r--r--ydb/library/yql/tests/sql/suites/produce/reduce_multi_in-empty.cfg2
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json21
6 files changed, 73 insertions, 8 deletions
diff --git a/ydb/library/yql/providers/yt/provider/yql_yt_datasink_constraints.cpp b/ydb/library/yql/providers/yt/provider/yql_yt_datasink_constraints.cpp
index 4d80264abd6..e2d04afe64c 100644
--- a/ydb/library/yql/providers/yt/provider/yql_yt_datasink_constraints.cpp
+++ b/ydb/library/yql/providers/yt/provider/yql_yt_datasink_constraints.cpp
@@ -128,28 +128,30 @@ private:
lambdaNdx = OutLambdaNdx;
}
+ bool emptyInput = false;
const auto filter = NYql::HasSetting(op.Settings().Ref(), EYtSettingType::Ordered) ?
[](const std::string_view& name) { return TEmptyConstraintNode::Name() == name || TUniqueConstraintNode::Name() == name || TDistinctConstraintNode::Name() == name || TSortedConstraintNode::Name() == name; }:
[](const std::string_view& name) { return TEmptyConstraintNode::Name() == name || TUniqueConstraintNode::Name() == name || TDistinctConstraintNode::Name() == name; };
TConstraintNode::TListType argConstraints;
if (op.Input().Size() > 1) {
TMultiConstraintNode::TMapType multiItems;
- bool allEmpty = true;
+ emptyInput = true;
for (ui32 index = 0; index < op.Input().Size(); ++index) {
auto section = op.Input().Item(index);
if (!section.Ref().GetConstraint<TEmptyConstraintNode>()) {
multiItems.push_back(std::make_pair(index, section.Ref().GetConstraintSet()));
multiItems.back().second.FilterConstraints(filter);
- allEmpty = false;
+ emptyInput = false;
}
}
if (!multiItems.empty()) {
argConstraints.push_back(ctx.MakeConstraint<TMultiConstraintNode>(std::move(multiItems)));
- } else if (allEmpty) {
+ } else if (emptyInput) {
argConstraints.push_back(ctx.MakeConstraint<TEmptyConstraintNode>());
}
} else {
auto set = op.Input().Item(0).Ref().GetConstraintSet();
+ emptyInput = nullptr != set.GetConstraint<TEmptyConstraintNode>();
set.FilterConstraints(filter);
argConstraints = set.GetAllConstraints();
if (singleLambda) {
@@ -197,10 +199,8 @@ private:
}
SetResultConstraint(input, *input->Child(OutLambdaNdx), op.Output(), ctx);
- if (op.Input().Size() == 1) {
- if (auto empty = op.Input().Item(0).Ref().GetConstraint<TEmptyConstraintNode>()) {
- input->AddConstraint(empty);
- }
+ if (emptyInput) {
+ input->AddConstraint(ctx.MakeConstraint<TEmptyConstraintNode>());
}
return TStatus::Ok;
diff --git a/ydb/library/yql/providers/yt/provider/yql_yt_datasource_constraints.cpp b/ydb/library/yql/providers/yt/provider/yql_yt_datasource_constraints.cpp
index 66bd28873fd..37f0c758b72 100644
--- a/ydb/library/yql/providers/yt/provider/yql_yt_datasource_constraints.cpp
+++ b/ydb/library/yql/providers/yt/provider/yql_yt_datasource_constraints.cpp
@@ -165,13 +165,19 @@ public:
input.Ptr()->CopyConstraints(section.Ref());
} else {
TMultiConstraintNode::TMapType multiItems;
+ bool allEmpty = true;
for (ui32 index = 0; index < read.Input().Size(); ++index) {
auto section = read.Input().Item(index);
if (!section.Ref().GetConstraint<TEmptyConstraintNode>()) {
multiItems.push_back(std::make_pair(index, section.Ref().GetConstraintSet()));
+ allEmpty = false;
}
}
- input.Ptr()->AddConstraint(ctx.MakeConstraint<TMultiConstraintNode>(std::move(multiItems)));
+ if (!multiItems.empty()) {
+ input.Ptr()->AddConstraint(ctx.MakeConstraint<TMultiConstraintNode>(std::move(multiItems)));
+ } else if (allEmpty) {
+ input.Ptr()->AddConstraint(ctx.MakeConstraint<TEmptyConstraintNode>());
+ }
}
return TStatus::Ok;
}
diff --git a/ydb/library/yql/tests/sql/dq_file/part1/canondata/result.json b/ydb/library/yql/tests/sql/dq_file/part1/canondata/result.json
index ab92f28fec4..a4e5fea4d9b 100644
--- a/ydb/library/yql/tests/sql/dq_file/part1/canondata/result.json
+++ b/ydb/library/yql/tests/sql/dq_file/part1/canondata/result.json
@@ -2549,6 +2549,28 @@
}
],
"test.test[produce-reduce_lambda_presort_twin_list-default.txt-Results]": [],
+ "test.test[produce-reduce_multi_in-empty-Analyze]": [
+ {
+ "checksum": "9ca09e642e32d555ae193ebb53450aa7",
+ "size": 5061,
+ "uri": "https://{canondata_backend}/1937492/a3be8907a794dd8afc1b0615834f797b64dd9927/resource.tar.gz#test.test_produce-reduce_multi_in-empty-Analyze_/plan.txt"
+ }
+ ],
+ "test.test[produce-reduce_multi_in-empty-Debug]": [
+ {
+ "checksum": "5ee56492dc75920918834c1591b2d875",
+ "size": 2287,
+ "uri": "https://{canondata_backend}/1937492/a3be8907a794dd8afc1b0615834f797b64dd9927/resource.tar.gz#test.test_produce-reduce_multi_in-empty-Debug_/opt.yql_patched"
+ }
+ ],
+ "test.test[produce-reduce_multi_in-empty-Plan]": [
+ {
+ "checksum": "9ca09e642e32d555ae193ebb53450aa7",
+ "size": 5061,
+ "uri": "https://{canondata_backend}/1937492/a3be8907a794dd8afc1b0615834f797b64dd9927/resource.tar.gz#test.test_produce-reduce_multi_in-empty-Plan_/plan.txt"
+ }
+ ],
+ "test.test[produce-reduce_multi_in-empty-Results]": [],
"test.test[produce-reduce_multi_in_keytuple_difftype--Analyze]": [
{
"checksum": "f60d354ca933908da1ef3fdfbf613ddc",
diff --git a/ydb/library/yql/tests/sql/hybrid_file/part4/canondata/result.json b/ydb/library/yql/tests/sql/hybrid_file/part4/canondata/result.json
index faf17f1d367..b220a64afba 100644
--- a/ydb/library/yql/tests/sql/hybrid_file/part4/canondata/result.json
+++ b/ydb/library/yql/tests/sql/hybrid_file/part4/canondata/result.json
@@ -2533,6 +2533,20 @@
"uri": "https://{canondata_backend}/1809005/7e4dc59583cad760822faf30fa4695e365329148/resource.tar.gz#test.test_produce-reduce_lambda-default.txt-Plan_/plan.txt"
}
],
+ "test.test[produce-reduce_multi_in-empty-Debug]": [
+ {
+ "checksum": "81ca9a9b5818c411daa1c3ceeb35c10d",
+ "size": 1546,
+ "uri": "https://{canondata_backend}/1777230/dd70c380673122cd500d799c70016541eabd320a/resource.tar.gz#test.test_produce-reduce_multi_in-empty-Debug_/opt.yql_patched"
+ }
+ ],
+ "test.test[produce-reduce_multi_in-empty-Plan]": [
+ {
+ "checksum": "c6fc2ac654b52d444b9a39e91a5f4421",
+ "size": 2870,
+ "uri": "https://{canondata_backend}/1777230/dd70c380673122cd500d799c70016541eabd320a/resource.tar.gz#test.test_produce-reduce_multi_in-empty-Plan_/plan.txt"
+ }
+ ],
"test.test[produce-reduce_multi_in_sampling--Debug]": [
{
"checksum": "6bdbfe3d776ee5a778da5e6c1d80827a",
diff --git a/ydb/library/yql/tests/sql/suites/produce/reduce_multi_in-empty.cfg b/ydb/library/yql/tests/sql/suites/produce/reduce_multi_in-empty.cfg
new file mode 100644
index 00000000000..ce36bb43371
--- /dev/null
+++ b/ydb/library/yql/tests/sql/suites/produce/reduce_multi_in-empty.cfg
@@ -0,0 +1,2 @@
+in Input empty.txt
+res result.txt
diff --git a/ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json
index 01724867b16..daca745c15e 100644
--- a/ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json
+++ b/ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json
@@ -2675,6 +2675,27 @@
"uri": "https://{canondata_backend}/1689644/a1e3734b9bd90d7ee8a597f60d142b79a8980665/resource.tar.gz#test.test_produce-reduce_lambda_presort_twin_list-default.txt-Results_/results.txt"
}
],
+ "test.test[produce-reduce_multi_in-empty-Debug]": [
+ {
+ "checksum": "c7995250466d47dd34cb816ac34cfee9",
+ "size": 1477,
+ "uri": "https://{canondata_backend}/1903280/c00a60b19ed912e070196b77ab74860276ef193c/resource.tar.gz#test.test_produce-reduce_multi_in-empty-Debug_/opt.yql"
+ }
+ ],
+ "test.test[produce-reduce_multi_in-empty-Plan]": [
+ {
+ "checksum": "71b7793dbfeb8423224c943ea3994cd6",
+ "size": 2870,
+ "uri": "https://{canondata_backend}/1903280/c00a60b19ed912e070196b77ab74860276ef193c/resource.tar.gz#test.test_produce-reduce_multi_in-empty-Plan_/plan.txt"
+ }
+ ],
+ "test.test[produce-reduce_multi_in-empty-Results]": [
+ {
+ "checksum": "2004d4c4c75a57ebaaffb58738db4ec0",
+ "size": 1133,
+ "uri": "https://{canondata_backend}/1903280/c00a60b19ed912e070196b77ab74860276ef193c/resource.tar.gz#test.test_produce-reduce_multi_in-empty-Results_/results.txt"
+ }
+ ],
"test.test[produce-reduce_multi_in_keytuple_difftype--Debug]": [
{
"checksum": "7926309a068a6f63f3ec9f62c715dc41",