Skip to content

Commit a506c27

Browse files
authored
Fix PhysicalOptimizer-BypassMerge with key ranges (#11203)
1 parent ef036a2 commit a506c27

File tree

5 files changed

+51
-1
lines changed

5 files changed

+51
-1
lines changed

ydb/library/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_merge.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,17 @@ TMaybeNode<TExprBase> TYtPhysicalOptProposalTransformer::BypassMerge(TExprBase n
6060
for (auto path: section.Paths()) {
6161
updatedPaths.push_back(path);
6262

63+
bool hasRanges = false;
6364
if (!path.Ranges().Maybe<TCoVoid>()) {
6465
bool pathLimits = false;
6566
for (auto range: path.Ranges().Cast<TExprList>()) {
6667
if (range.Maybe<TYtRow>() || range.Maybe<TYtRowRange>()) {
6768
pathLimits = true;
6869
break;
6970
}
71+
if (range.Maybe<TYtRangeItemBase>()) {
72+
hasRanges = true;
73+
}
7074
}
7175
if (pathLimits) {
7276
continue;
@@ -118,7 +122,7 @@ TMaybeNode<TExprBase> TYtPhysicalOptProposalTransformer::BypassMerge(TExprBase n
118122
if (hasTakeSkip && sortedMerge && NYql::HasSetting(innerMerge.Settings().Ref(), EYtSettingType::KeepSorted)) {
119123
continue;
120124
}
121-
if (hasTakeSkip && AnyOf(innerMergeSection.Paths(), [](const auto& path) { return !path.Ranges().template Maybe<TCoVoid>(); })) {
125+
if ((hasTakeSkip || hasRanges) && AnyOf(innerMergeSection.Paths(), [](const auto& path) { return !path.Ranges().template Maybe<TCoVoid>(); })) {
122126
continue;
123127
}
124128

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10268,6 +10268,13 @@
1026810268
"uri": "https://{canondata_backend}/1936947/659b615f15086142a8960946dabd06b519d43335/resource.tar.gz#test_sql2yql.test_key_filter-nile_pred_/sql.yql"
1026910269
}
1027010270
],
10271+
"test_sql2yql.test[key_filter-no_bypass_merge]": [
10272+
{
10273+
"checksum": "8f1e1bfb745fc93ab99799dd4bee37d2",
10274+
"size": 3234,
10275+
"uri": "https://{canondata_backend}/937458/29a3c1b9b216969a2d55da5642f70db3cb889590/resource.tar.gz#test_sql2yql.test_key_filter-no_bypass_merge_/sql.yql"
10276+
}
10277+
],
1027110278
"test_sql2yql.test[key_filter-part_key_over_dynamic]": [
1027210279
{
1027310280
"checksum": "ed0c681c0b57fd43338fa44f79dfcda3",
@@ -30120,6 +30127,13 @@
3012030127
"uri": "https://{canondata_backend}/1880306/64654158d6bfb1289c66c626a8162239289559d0/resource.tar.gz#test_sql_format.test_key_filter-nile_pred_/formatted.sql"
3012130128
}
3012230129
],
30130+
"test_sql_format.test[key_filter-no_bypass_merge]": [
30131+
{
30132+
"checksum": "c11c4aac4740bc96f1f16fc34273b3b5",
30133+
"size": 338,
30134+
"uri": "https://{canondata_backend}/1946324/60ea49a653935bd647f75184f5571f43eaea2f1e/resource.tar.gz#test_sql_format.test_key_filter-no_bypass_merge_/formatted.sql"
30135+
}
30136+
],
3012330137
"test_sql_format.test[key_filter-part_key_over_dynamic]": [
3012430138
{
3012530139
"checksum": "d0780baa61449d404c28577d330972b1",
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
in Input sorted2.txt
2+
res result.txt
3+
providers yt
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/* ignore runonopt plan diff - extra LogicalOptimizer-PushdownOpColumns */
2+
pragma yt.PruneKeyFilterLambda = 'true';
3+
4+
USE plato;
5+
6+
$src = select * from Input where key == "1" || "5" || "0";
7+
select key, subkey from $src;
8+
select key, value from $src where key >= "000" and key < "999" and len(value) > 0;

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1358,6 +1358,27 @@
13581358
"uri": "https://{canondata_backend}/1942415/9dc26178536314feaac77333a6a0e27c8703d1e2/resource.tar.gz#test.test_key_filter-multiusage--Results_/results.txt"
13591359
}
13601360
],
1361+
"test.test[key_filter-no_bypass_merge--Debug]": [
1362+
{
1363+
"checksum": "9efb0ce10102840559dccf5f29a12682",
1364+
"size": 2615,
1365+
"uri": "https://{canondata_backend}/1920236/8c593c8466092b61944efd67353210491ded1ec3/resource.tar.gz#test.test_key_filter-no_bypass_merge--Debug_/opt.yql"
1366+
}
1367+
],
1368+
"test.test[key_filter-no_bypass_merge--Plan]": [
1369+
{
1370+
"checksum": "00bc4300b735e6c0e3643be6c50db81d",
1371+
"size": 7695,
1372+
"uri": "https://{canondata_backend}/1920236/8c593c8466092b61944efd67353210491ded1ec3/resource.tar.gz#test.test_key_filter-no_bypass_merge--Plan_/plan.txt"
1373+
}
1374+
],
1375+
"test.test[key_filter-no_bypass_merge--Results]": [
1376+
{
1377+
"checksum": "d0d822f1bcf2596880c7df78329d0916",
1378+
"size": 2393,
1379+
"uri": "https://{canondata_backend}/1920236/8c593c8466092b61944efd67353210491ded1ec3/resource.tar.gz#test.test_key_filter-no_bypass_merge--Results_/results.txt"
1380+
}
1381+
],
13611382
"test.test[key_filter-string_with_legacy--Debug]": [
13621383
{
13631384
"checksum": "c4cc2c1f00131d237cc8e804250ef355",

0 commit comments

Comments
 (0)