diff options
author | YDBot <[email protected]> | 2025-07-26 00:52:12 +0000 |
---|---|---|
committer | YDBot <[email protected]> | 2025-07-26 00:52:12 +0000 |
commit | c641bf9f3666236b4c2e81273c2c5563c54e4df4 (patch) | |
tree | 1ff5c8e694c9a78ee0e2ad3b0ff5bb5b03818bc7 /yql/essentials/sql/v1/source.cpp | |
parent | ff32dad4c0a4ac13a90dfb44fdd19a5454cfe13e (diff) | |
parent | 8261eb9dc960f33f6454ac242c06ee8c8bcef5b0 (diff) |
Sync branches 250726-0050
Diffstat (limited to 'yql/essentials/sql/v1/source.cpp')
-rw-r--r-- | yql/essentials/sql/v1/source.cpp | 18 |
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) { |