diff options
| author | kndrvt <[email protected]> | 2025-06-23 19:28:22 +0300 |
|---|---|---|
| committer | kndrvt <[email protected]> | 2025-06-23 20:14:16 +0300 |
| commit | db2354704a30f375d445bfc3aea9eac5975562af (patch) | |
| tree | 9148d35cf4bb6be59c5bd5a709653379bfa422f0 /yql/essentials/sql/v1/select.cpp | |
| parent | a9099f40c9262d7a0a551e0891f042eb01653f5f (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.cpp | 38 |
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) { |
