summaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/source.cpp
diff options
context:
space:
mode:
authorlambda-delta <[email protected]>2025-07-25 16:09:49 +0300
committerlambda-delta <[email protected]>2025-07-25 16:25:31 +0300
commit303501174f0a7f7d2091b3594023a8cffa1c331d (patch)
tree7c5cef3b47af2dd59286c285918322467eed247e /yql/essentials/sql/v1/source.cpp
parent835b6519eb8e218bb0c84d8d7827bf9fbe7893c8 (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.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) {