summaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql
diff options
context:
space:
mode:
authorvvvv <[email protected]>2025-04-18 19:56:51 +0300
committervvvv <[email protected]>2025-04-18 20:09:18 +0300
commitb149e9e78eb1a8502618850e1372d60161c1d7c5 (patch)
tree8531be9024db20e5ba59aa810b347ffa41c49b80 /yql/essentials/sql
parentb8720ed2617f37508e6d6a8881c4105775bc910d (diff)
YQL-19864 docs
commit_hash:cc82995d04c8bd3b7ca4d6fe69e91edc092e1b32
Diffstat (limited to 'yql/essentials/sql')
-rw-r--r--yql/essentials/sql/v1/context.cpp1
-rw-r--r--yql/essentials/sql/v1/context.h1
-rw-r--r--yql/essentials/sql/v1/source.cpp13
-rw-r--r--yql/essentials/sql/v1/sql_query.cpp6
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");