summaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/select.cpp
diff options
context:
space:
mode:
authorkndrvt <[email protected]>2025-06-23 19:28:22 +0300
committerkndrvt <[email protected]>2025-06-23 20:14:16 +0300
commitdb2354704a30f375d445bfc3aea9eac5975562af (patch)
tree9148d35cf4bb6be59c5bd5a709653379bfa422f0 /yql/essentials/sql/v1/select.cpp
parenta9099f40c9262d7a0a551e0891f042eb01653f5f (diff)
YQL-17269: support PositionalUnionAll for INTERSECT and EXCEPT
commit_hash:4c68311d9e875b6643dd49aae1c385aace4ca978
Diffstat (limited to 'yql/essentials/sql/v1/select.cpp')
-rw-r--r--yql/essentials/sql/v1/select.cpp38
1 files changed, 18 insertions, 20 deletions
diff --git a/yql/essentials/sql/v1/select.cpp b/yql/essentials/sql/v1/select.cpp
index a2207d9ef76..03a8483ce0c 100644
--- a/yql/essentials/sql/v1/select.cpp
+++ b/yql/essentials/sql/v1/select.cpp
@@ -2848,33 +2848,31 @@ public:
}
TNodePtr Build(TContext& ctx) override {
- TPtr res;
+ TString op;
+
if (Operator_ == "union") {
- if (QuantifierAll_) {
- if (ctx.EmitUnionMerge) {
- res = ctx.PositionalUnionAll ? Y("UnionMergePositional") : Y("UnionMerge");
- } else {
- res = ctx.PositionalUnionAll ? Y("UnionAllPositional") : Y("UnionAll");
- }
- } else {
- res = ctx.PositionalUnionAll ? Y("UnionPositional") : Y("Union");
- }
+ op = "Union";
} else if (Operator_ == "intersect") {
- if (QuantifierAll_) {
- res = Y("IntersectAll");
- } else {
- res = Y("Intersect");
- }
+ op = "Intersect";
} else if (Operator_ == "except") {
- if (QuantifierAll_) {
- res = Y("ExceptAll");
- } else {
- res = Y("Except");
- }
+ op = "Except";
} else {
Y_ABORT("Invalid operator: %s", Operator_.c_str());
}
+ if (QuantifierAll_) {
+ if (Operator_ != "union" || !ctx.EmitUnionMerge) {
+ op += "All";
+ } else {
+ op += "Merge";
+ }
+ }
+ if (ctx.PositionalUnionAll) {
+ op += "Positional";
+ }
+
+ TPtr res = Y(op);
+
for (auto& s: Sources_) {
auto input = s->Build(ctx);
if (!input) {