diff options
author | vvvv <[email protected]> | 2025-04-10 23:45:00 +0300 |
---|---|---|
committer | vvvv <[email protected]> | 2025-04-10 23:56:52 +0300 |
commit | 364fada69e790b9b0e95b69185bfc23af9bc651d (patch) | |
tree | c9e4ccb19d9513f8084303ee2cfc1fa9b7e5c9df /yql/essentials/sql/v1 | |
parent | 3be29859adc9bc12fb4cb198af3105434effc68a (diff) |
YQL-19790 allow distinct over keys
commit_hash:5f778a5600a05b527c9ff0b07dcf55e207782165
Diffstat (limited to 'yql/essentials/sql/v1')
-rw-r--r-- | yql/essentials/sql/v1/aggregation.cpp | 2 | ||||
-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/sql_query.cpp | 6 |
4 files changed, 9 insertions, 1 deletions
diff --git a/yql/essentials/sql/v1/aggregation.cpp b/yql/essentials/sql/v1/aggregation.cpp index 3d19862f865..a1e98d2352c 100644 --- a/yql/essentials/sql/v1/aggregation.cpp +++ b/yql/essentials/sql/v1/aggregation.cpp @@ -196,7 +196,7 @@ protected: DistinctKey = DotJoin(*sourcePtr, DistinctKey); } } - if (src->IsGroupByColumn(DistinctKey)) { + if (!ctx.DistinctOverKeys && src->IsGroupByColumn(DistinctKey)) { ctx.Error(Expr->GetPos()) << ErrorDistinctByGroupKey(DistinctKey); return false; } diff --git a/yql/essentials/sql/v1/context.cpp b/yql/essentials/sql/v1/context.cpp index de2668608ea..1a0a1f4b18d 100644 --- a/yql/essentials/sql/v1/context.cpp +++ b/yql/essentials/sql/v1/context.cpp @@ -68,6 +68,7 @@ THashMap<TStringBuf, TPragmaField> CTX_PRAGMA_FIELDS = { {"DistinctOverWindow", &TContext::DistinctOverWindow}, {"EmitUnionMerge", &TContext::EmitUnionMerge}, {"SeqMode", &TContext::SeqMode}, + {"DistinctOverKeys", &TContext::DistinctOverKeys}, }; typedef TMaybe<bool> TContext::*TPragmaMaybeField; diff --git a/yql/essentials/sql/v1/context.h b/yql/essentials/sql/v1/context.h index 17e86c77c3d..3bdfa1ceab4 100644 --- a/yql/essentials/sql/v1/context.h +++ b/yql/essentials/sql/v1/context.h @@ -372,6 +372,7 @@ namespace NSQLTranslationV1 { bool AnsiImplicitCrossJoin = false; // select * from A,B bool DistinctOverWindow = false; bool SeqMode = false; + bool DistinctOverKeys = false; bool EmitUnionMerge = false; TVector<size_t> ForAllStatementsParts; diff --git a/yql/essentials/sql/v1/sql_query.cpp b/yql/essentials/sql/v1/sql_query.cpp index a860571698b..b60a338d02f 100644 --- a/yql/essentials/sql/v1/sql_query.cpp +++ b/yql/essentials/sql/v1/sql_query.cpp @@ -3387,6 +3387,12 @@ TNodePtr TSqlQuery::PragmaStatement(const TRule_pragma_stmt& stmt, bool& success } else if (normalizedPragma == "disableemitunionmerge") { Ctx.EmitUnionMerge = false; Ctx.IncrementMonCounter("sql_pragma", "DisableEmitUnionMerge"); + } else if (normalizedPragma == "distinctoverkeys") { + Ctx.DistinctOverKeys = true; + Ctx.IncrementMonCounter("sql_pragma", "DistinctOverKeys"); + } else if (normalizedPragma == "disabledistinctoverkeys") { + Ctx.DistinctOverKeys = false; + Ctx.IncrementMonCounter("sql_pragma", "DisableDistinctOverKeys"); } else if (normalizedPragma == "engine") { Ctx.IncrementMonCounter("sql_pragma", "Engine"); |