diff options
| author | vvvv <[email protected]> | 2025-04-18 19:56:51 +0300 |
|---|---|---|
| committer | vvvv <[email protected]> | 2025-04-18 20:09:18 +0300 |
| commit | b149e9e78eb1a8502618850e1372d60161c1d7c5 (patch) | |
| tree | 8531be9024db20e5ba59aa810b347ffa41c49b80 /yql/essentials/sql | |
| parent | b8720ed2617f37508e6d6a8881c4105775bc910d (diff) | |
YQL-19864 docs
commit_hash:cc82995d04c8bd3b7ca4d6fe69e91edc092e1b32
Diffstat (limited to 'yql/essentials/sql')
| -rw-r--r-- | yql/essentials/sql/v1/context.cpp | 1 | ||||
| -rw-r--r-- | yql/essentials/sql/v1/context.h | 1 | ||||
| -rw-r--r-- | yql/essentials/sql/v1/source.cpp | 13 | ||||
| -rw-r--r-- | yql/essentials/sql/v1/sql_query.cpp | 6 |
4 files changed, 16 insertions, 5 deletions
diff --git a/yql/essentials/sql/v1/context.cpp b/yql/essentials/sql/v1/context.cpp index 7f3d5433b96..ae313a171e1 100644 --- a/yql/essentials/sql/v1/context.cpp +++ b/yql/essentials/sql/v1/context.cpp @@ -70,6 +70,7 @@ THashMap<TStringBuf, TPragmaField> CTX_PRAGMA_FIELDS = { {"SeqMode", &TContext::SeqMode}, {"DistinctOverKeys", &TContext::DistinctOverKeys}, {"GroupByExprAfterWhere", &TContext::GroupByExprAfterWhere}, + {"FailOnGroupByExprOverride", &TContext::FailOnGroupByExprOverride}, }; typedef TMaybe<bool> TContext::*TPragmaMaybeField; diff --git a/yql/essentials/sql/v1/context.h b/yql/essentials/sql/v1/context.h index e3f70f7515e..14314c0a314 100644 --- a/yql/essentials/sql/v1/context.h +++ b/yql/essentials/sql/v1/context.h @@ -374,6 +374,7 @@ namespace NSQLTranslationV1 { bool SeqMode = false; bool DistinctOverKeys = false; bool GroupByExprAfterWhere = false; + bool FailOnGroupByExprOverride = false; bool EmitUnionMerge = false; TVector<size_t> ForAllStatementsParts; diff --git a/yql/essentials/sql/v1/source.cpp b/yql/essentials/sql/v1/source.cpp index 28afe17d9c3..1b639dbc5d9 100644 --- a/yql/essentials/sql/v1/source.cpp +++ b/yql/essentials/sql/v1/source.cpp @@ -488,12 +488,15 @@ TNodePtr ISource::BuildFlattenColumns(const TString& label) { namespace { -TNodePtr BuildLambdaBodyForExprAliases(TPosition pos, const TVector<TNodePtr>& exprs) { +TNodePtr BuildLambdaBodyForExprAliases(TPosition pos, const TVector<TNodePtr>& exprs, bool override) { auto structObj = BuildAtom(pos, "row", TNodeFlags::Default); for (const auto& exprNode: exprs) { const auto name = exprNode->GetLabel(); YQL_ENSURE(name); - structObj = structObj->Y("ForceRemoveMember", structObj, structObj->Q(name)); + if (override) { + structObj = structObj->Y("ForceRemoveMember", structObj, structObj->Q(name)); + } + if (dynamic_cast<const TSessionWindow*>(exprNode.Get())) { continue; } @@ -515,12 +518,12 @@ TNodePtr ISource::BuildPreaggregatedMap(TContext& ctx) { TNodePtr res; if (groupByExprs) { - auto body = BuildLambdaBodyForExprAliases(Pos, groupByExprs); + auto body = BuildLambdaBodyForExprAliases(Pos, groupByExprs, ctx.GroupByExprAfterWhere || !ctx.FailOnGroupByExprOverride); res = Y("FlatMap", "core", BuildLambda(Pos, Y("row"), body)); } if (distinctAggrExprs) { - auto body = BuildLambdaBodyForExprAliases(Pos, distinctAggrExprs); + auto body = BuildLambdaBodyForExprAliases(Pos, distinctAggrExprs, ctx.GroupByExprAfterWhere || !ctx.FailOnGroupByExprOverride); auto lambda = BuildLambda(Pos, Y("row"), body); res = res ? Y("FlatMap", res, lambda) : Y("FlatMap", "core", lambda); } @@ -530,7 +533,7 @@ TNodePtr ISource::BuildPreaggregatedMap(TContext& ctx) { TNodePtr ISource::BuildPreFlattenMap(TContext& ctx) { Y_UNUSED(ctx); YQL_ENSURE(IsFlattenByExprs()); - return BuildLambdaBodyForExprAliases(Pos, Expressions(EExprSeat::FlattenByExpr)); + return BuildLambdaBodyForExprAliases(Pos, Expressions(EExprSeat::FlattenByExpr), true); } TNodePtr ISource::BuildPrewindowMap(TContext& ctx) { diff --git a/yql/essentials/sql/v1/sql_query.cpp b/yql/essentials/sql/v1/sql_query.cpp index d64a7bf8d61..c9ea302c8c7 100644 --- a/yql/essentials/sql/v1/sql_query.cpp +++ b/yql/essentials/sql/v1/sql_query.cpp @@ -3399,6 +3399,12 @@ TNodePtr TSqlQuery::PragmaStatement(const TRule_pragma_stmt& stmt, bool& success } else if (normalizedPragma == "disablegroupbyexprafterwhere") { Ctx.GroupByExprAfterWhere = false; Ctx.IncrementMonCounter("sql_pragma", "DisableGroupByExprAfterWhere"); + } else if (normalizedPragma == "failongroupbyexproverride") { + Ctx.FailOnGroupByExprOverride = true; + Ctx.IncrementMonCounter("sql_pragma", "FailOnGroupByExprOverride"); + } else if (normalizedPragma == "disablefailongroupbyexproverride") { + Ctx.FailOnGroupByExprOverride = false; + Ctx.IncrementMonCounter("sql_pragma", "DisableFailOnGroupByExprOverride"); } else if (normalizedPragma == "engine") { Ctx.IncrementMonCounter("sql_pragma", "Engine"); |
