summaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/source.cpp
diff options
context:
space:
mode:
authoratarasov5 <[email protected]>2026-01-19 11:04:24 +0300
committeratarasov5 <[email protected]>2026-01-19 11:45:10 +0300
commit15a5dcdc957b7700cfb15e3f0b4fd5e5e94de9a7 (patch)
treef4306a04f7e31698ef6a0577b7a4bc7e733eb362 /yql/essentials/sql/v1/source.cpp
parentce297ea2facfd2c98298486d4c3535bc00d05e66 (diff)
YQL-13448: Introduce window RANGE logic
Introduce window RANGE logic. Зеркальный пр с включение фичи путем инлайнинга в коде <https://nda.ya.ru/t/p2qAEoNq7SNwUJ> Зеркальный пр где я провожу perf измерения <https://nda.ya.ru/t/7UdlI38n7SNwUL> - в нем я описал результаты commit_hash:2626d7d6b77f1ccb31e395d974a2beaa60f27a97
Diffstat (limited to 'yql/essentials/sql/v1/source.cpp')
-rw-r--r--yql/essentials/sql/v1/source.cpp15
1 files changed, 10 insertions, 5 deletions
diff --git a/yql/essentials/sql/v1/source.cpp b/yql/essentials/sql/v1/source.cpp
index cb3c5ea8dbf..5acc2069e35 100644
--- a/yql/essentials/sql/v1/source.cpp
+++ b/yql/essentials/sql/v1/source.cpp
@@ -745,7 +745,7 @@ TNodePtr BuildFrameNode(const TFrameBound& frame, EFrameType frameType) {
return node;
}
-TNodePtr ISource::BuildWindowFrame(const TFrameSpecification& spec, bool isCompact) {
+TNodePtr ISource::BuildWindowFrame(TContext& ctx, const TFrameSpecification& spec, bool isCompact, TNodePtr sortSpec) {
YQL_ENSURE(spec.FrameExclusion == FrameExclNone);
YQL_ENSURE(spec.FrameBegin);
YQL_ENSURE(spec.FrameEnd);
@@ -755,8 +755,12 @@ TNodePtr ISource::BuildWindowFrame(const TFrameSpecification& spec, bool isCompa
auto begin = Q(Y(Q("begin"), frameBeginNode));
auto end = Q(Y(Q("end"), frameEndNode));
-
- return isCompact ? Q(Y(begin, end, Q(Y(Q("compact"))))) : Q(Y(begin, end));
+ auto sortSpecNode = Q(Y(Q("sortSpec"), sortSpec));
+ if (ctx.WindowNewPipeline) {
+ return isCompact ? Q(Y(begin, end, Q(Y(Q("compact"))), sortSpecNode)) : Q(Y(begin, end, sortSpecNode));
+ } else {
+ return isCompact ? Q(Y(begin, end, Q(Y(Q("compact"))))) : Q(Y(begin, end));
+ }
}
class TSessionWindowTraits final: public TCallNode {
@@ -836,7 +840,9 @@ TNodePtr ISource::BuildCalcOverWindow(TContext& ctx, const TString& label) {
break;
}
YQL_ENSURE(frameType);
- auto callOnFrame = Y(frameType, BuildWindowFrame(*spec->Frame, spec->IsCompact));
+ auto sortSpec = spec->OrderBy.empty() ? Y("Void") : BuildSortSpec(spec->OrderBy, useLabel, true, false);
+
+ auto callOnFrame = Y(frameType, BuildWindowFrame(ctx, *spec->Frame, spec->IsCompact, sortSpec));
for (auto& agg : aggs) {
auto winTraits = agg->WindowTraits(listType, ctx);
callOnFrame = L(callOnFrame, winTraits);
@@ -854,7 +860,6 @@ TNodePtr ISource::BuildCalcOverWindow(TContext& ctx, const TString& label) {
}
}
- auto sortSpec = spec->OrderBy.empty() ? Y("Void") : BuildSortSpec(spec->OrderBy, useLabel, true, false);
if (spec->Session) {
TString label = spec->Session->GetLabel();
YQL_ENSURE(label);