summaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1
diff options
context:
space:
mode:
authorvvvv <[email protected]>2025-04-10 23:45:00 +0300
committervvvv <[email protected]>2025-04-10 23:56:52 +0300
commit364fada69e790b9b0e95b69185bfc23af9bc651d (patch)
treec9e4ccb19d9513f8084303ee2cfc1fa9b7e5c9df /yql/essentials/sql/v1
parent3be29859adc9bc12fb4cb198af3105434effc68a (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.cpp2
-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/sql_query.cpp6
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");