Skip to content

Commit b62ee74

Browse files
authored
Handle overflow in DqBuildTakeSkipStage optimizer (#14491)
1 parent 088a1ce commit b62ee74

11 files changed

+32
-14
lines changed

ydb/library/yql/dq/opt/dq_opt_phy.cpp

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -762,7 +762,7 @@ TExprBase DqBuildFlatmapStage(TExprBase node, TExprContext& ctx, IOptimizationCo
762762
const TParentsMap& parentsMap, bool allowStageMultiUsage)
763763
{
764764
Y_UNUSED(optCtx);
765-
765+
766766
if (!node.Maybe<TCoFlatMapBase>().Input().Maybe<TDqCnUnionAll>()) {
767767
return node;
768768
}
@@ -2014,11 +2014,29 @@ TExprBase DqBuildTakeSkipStage(TExprBase node, TExprContext& ctx, IOptimizationC
20142014
.Args({"stream"})
20152015
.Body<TCoTake>()
20162016
.Input("stream")
2017-
.Count<TCoAggrAdd>()
2018-
.Left(take.Count())
2019-
.Right(skip.Count())
2017+
.Count<TCoIf>()
2018+
.Predicate<TCoCmpGreater>()
2019+
.Left(take.Count())
2020+
.Right<TCoSub>()
2021+
.Left<TCoUint64>()
2022+
.Literal()
2023+
.Value(ToString(Max<ui64>()), TNodeFlags::Default)
2024+
.Build()
2025+
.Build()
2026+
.Right(skip.Count())
2027+
.Build()
2028+
.Build()
2029+
.ThenValue<TCoUint64>()
2030+
.Literal()
2031+
.Value(ToString(Max<ui64>()), TNodeFlags::Default)
2032+
.Build()
2033+
.Build()
2034+
.ElseValue<TCoAggrAdd>()
2035+
.Left(take.Count())
2036+
.Right(skip.Count())
20202037
.Build()
20212038
.Build()
2039+
.Build()
20222040
.Done();
20232041

20242042
auto newDqUnion = DqPushLambdaToStageUnionAll(dqUnion, lambda, {}, ctx, optCtx);

ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-38

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
"ExternalPlanNodeId": 4
5353
}
5454
],
55-
"Limit": "SUM(10,1000)",
55+
"Limit": "Min(If,SUM(10,1000))",
5656
"Name": "Limit"
5757
}
5858
],

ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-39

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
"ExternalPlanNodeId": 4
5353
}
5454
],
55-
"Limit": "SUM(10,1000)",
55+
"Limit": "Min(If,SUM(10,1000))",
5656
"Name": "Limit"
5757
}
5858
],

ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-40

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
"ExternalPlanNodeId": 4
5353
}
5454
],
55-
"Limit": "SUM(10,100)",
55+
"Limit": "Min(If,SUM(10,100))",
5656
"Name": "Limit"
5757
}
5858
],

ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-41

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
"ExternalPlanNodeId": 4
5353
}
5454
],
55-
"Limit": "SUM(10,10000)",
55+
"Limit": "Min(If,SUM(10,10000))",
5656
"Name": "Limit"
5757
}
5858
],

ydb/tests/functional/clickbench/canondata/test.test_plans_column_/queries-original-plan-column-42

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
"ExternalPlanNodeId": 4
5353
}
5454
],
55-
"Limit": "SUM(10,1000)",
55+
"Limit": "Min(If,SUM(10,1000))",
5656
"Name": "Limit"
5757
}
5858
],

ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-38

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
"ExternalPlanNodeId": 4
5353
}
5454
],
55-
"Limit": "SUM(10,1000)",
55+
"Limit": "Min(If,SUM(10,1000))",
5656
"Name": "Limit"
5757
}
5858
],

ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-39

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
"ExternalPlanNodeId": 4
5353
}
5454
],
55-
"Limit": "SUM(10,1000)",
55+
"Limit": "Min(If,SUM(10,1000))",
5656
"Name": "Limit"
5757
}
5858
],

ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-40

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
"ExternalPlanNodeId": 4
5353
}
5454
],
55-
"Limit": "SUM(10,100)",
55+
"Limit": "Min(If,SUM(10,100))",
5656
"Name": "Limit"
5757
}
5858
],

ydb/tests/functional/clickbench/canondata/test.test_plans_row_/queries-original-plan-row-41

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
"ExternalPlanNodeId": 4
5353
}
5454
],
55-
"Limit": "SUM(10,10000)",
55+
"Limit": "Min(If,SUM(10,10000))",
5656
"Name": "Limit"
5757
}
5858
],

0 commit comments

Comments
 (0)