diff options
author | lambda-delta <[email protected]> | 2025-07-25 16:09:49 +0300 |
---|---|---|
committer | lambda-delta <[email protected]> | 2025-07-25 16:25:31 +0300 |
commit | 303501174f0a7f7d2091b3594023a8cffa1c331d (patch) | |
tree | 7c5cef3b47af2dd59286c285918322467eed247e /yql/essentials/sql/v1/source.cpp | |
parent | 835b6519eb8e218bb0c84d8d7827bf9fbe7893c8 (diff) |
YQL-19200: Return persistable expression from FLATTEN BY clause
Return persistable expression from FLATTEN BY clause
commit_hash:8b19ad7f7ddf436c2741f9aa1c5402732fc31f06
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) { |