summaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/source.cpp
diff options
context:
space:
mode:
authorYDBot <[email protected]>2025-07-26 00:52:12 +0000
committerYDBot <[email protected]>2025-07-26 00:52:12 +0000
commitc641bf9f3666236b4c2e81273c2c5563c54e4df4 (patch)
tree1ff5c8e694c9a78ee0e2ad3b0ff5bb5b03818bc7 /yql/essentials/sql/v1/source.cpp
parentff32dad4c0a4ac13a90dfb44fdd19a5454cfe13e (diff)
parent8261eb9dc960f33f6454ac242c06ee8c8bcef5b0 (diff)
Sync branches 250726-0050
Diffstat (limited to 'yql/essentials/sql/v1/source.cpp')
-rw-r--r--yql/essentials/sql/v1/source.cpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/yql/essentials/sql/v1/source.cpp b/yql/essentials/sql/v1/source.cpp
index 94ef5c290fd..853421c8952 100644
--- a/yql/essentials/sql/v1/source.cpp
+++ b/yql/essentials/sql/v1/source.cpp
@@ -488,7 +488,7 @@ TNodePtr ISource::BuildFlattenColumns(const TString& label) {
namespace {
-TNodePtr BuildLambdaBodyForExprAliases(TPosition pos, const TVector<TNodePtr>& exprs, bool override) {
+TNodePtr BuildLambdaBodyForExprAliases(TPosition pos, const TVector<TNodePtr>& exprs, bool override, bool persistable) {
auto structObj = BuildAtom(pos, "row", TNodeFlags::Default);
for (const auto& exprNode: exprs) {
const auto name = exprNode->GetLabel();
@@ -503,7 +503,7 @@ TNodePtr BuildLambdaBodyForExprAliases(TPosition pos, const TVector<TNodePtr>& e
if (dynamic_cast<const THoppingWindow*>(exprNode.Get())) {
continue;
}
- structObj = structObj->Y("AddMember", structObj, structObj->Q(name), exprNode);
+ structObj = structObj->Y("AddMember", structObj, structObj->Q(name), persistable ? structObj->Y("PersistableRepr", exprNode) : exprNode);
}
return structObj->Y("AsList", structObj);
}
@@ -518,12 +518,20 @@ TNodePtr ISource::BuildPreaggregatedMap(TContext& ctx) {
TNodePtr res;
if (groupByExprs) {
- auto body = BuildLambdaBodyForExprAliases(Pos_, groupByExprs, ctx.GroupByExprAfterWhere || !ctx.FailOnGroupByExprOverride);
+ auto body = BuildLambdaBodyForExprAliases(
+ Pos_,
+ groupByExprs,
+ ctx.GroupByExprAfterWhere || !ctx.FailOnGroupByExprOverride,
+ ctx.PersistableFlattenAndAggrExprs);
res = Y("FlatMap", "core", BuildLambda(Pos_, Y("row"), body));
}
if (distinctAggrExprs) {
- auto body = BuildLambdaBodyForExprAliases(Pos_, distinctAggrExprs, ctx.GroupByExprAfterWhere || !ctx.FailOnGroupByExprOverride);
+ auto body = BuildLambdaBodyForExprAliases(
+ Pos_,
+ distinctAggrExprs,
+ ctx.GroupByExprAfterWhere || !ctx.FailOnGroupByExprOverride,
+ ctx.PersistableFlattenAndAggrExprs);
auto lambda = BuildLambda(Pos_, Y("row"), body);
res = res ? Y("FlatMap", res, lambda) : Y("FlatMap", "core", lambda);
}
@@ -533,7 +541,7 @@ TNodePtr ISource::BuildPreaggregatedMap(TContext& ctx) {
TNodePtr ISource::BuildPreFlattenMap(TContext& ctx) {
Y_UNUSED(ctx);
YQL_ENSURE(IsFlattenByExprs());
- return BuildLambdaBodyForExprAliases(Pos_, Expressions(EExprSeat::FlattenByExpr), true);
+ return BuildLambdaBodyForExprAliases(Pos_, Expressions(EExprSeat::FlattenByExpr), true, ctx.PersistableFlattenAndAggrExprs);
}
TNodePtr ISource::BuildPrewindowMap(TContext& ctx) {