aboutsummaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/sql_select.cpp
diff options
context:
space:
mode:
authorAlexander Smirnov <alex@ydb.tech>2025-05-29 11:09:23 +0000
committerAlexander Smirnov <alex@ydb.tech>2025-05-29 11:09:23 +0000
commita34a6816abefdcfe2c00295edb510cc5c99ad52c (patch)
treea264baadccf7add09a1b285786307ddd774472a5 /yql/essentials/sql/v1/sql_select.cpp
parent84ec9093e10073ab151bfe5f81037a0d017c2362 (diff)
parentfdbc38349df2ee0ddc678fa2bffe84786f9639a3 (diff)
downloadydb-a34a6816abefdcfe2c00295edb510cc5c99ad52c.tar.gz
Merge branch 'rightlib' into merge-libs-250529-1108
Diffstat (limited to 'yql/essentials/sql/v1/sql_select.cpp')
-rw-r--r--yql/essentials/sql/v1/sql_select.cpp30
1 files changed, 20 insertions, 10 deletions
diff --git a/yql/essentials/sql/v1/sql_select.cpp b/yql/essentials/sql/v1/sql_select.cpp
index 52dd399a990..8e11721c84f 100644
--- a/yql/essentials/sql/v1/sql_select.cpp
+++ b/yql/essentials/sql/v1/sql_select.cpp
@@ -1388,18 +1388,28 @@ TSourcePtr TSqlSelect::Build(const TRule& node, TPosition pos, TSelectKindResult
outermostSettings.Label = next.Settings.Label;
}
- switch (b.GetRule_select_op1().Alt_case()) {
- case TRule_select_op::kAltSelectOp1:
- break;
- case TRule_select_op::kAltSelectOp2:
- case TRule_select_op::kAltSelectOp3:
- Ctx.Error() << "INTERSECT and EXCEPT are not implemented yet";
- return nullptr;
- case TRule_select_op::ALT_NOT_SET:
- Y_ABORT("You should change implementation according to grammar changes");
+ auto selectOp = b.GetRule_select_op1();
+ const TString token = ToLowerUTF8(Token(selectOp.GetToken1()));
+ if (token == "union") {
+ // nothing
+ } else if (token == "intersect" || token == "except") {
+ Ctx.Error() << "INTERSECT and EXCEPT are not implemented yet";
+ return nullptr;
+ } else {
+ Y_ABORT("You should change implementation according to grammar changes. Invalid token: %s", token.c_str());
}
- const bool quantifier = b.GetRule_select_op1().GetAlt_select_op1().HasBlock2();
+ bool quantifier = false;
+ if (selectOp.HasBlock2()) {
+ const TString token = ToLowerUTF8(Token(selectOp.GetBlock2().GetToken1()));
+ if (token == "all") {
+ quantifier = true;
+ } else if (token == "distinct") {
+ // nothing
+ } else {
+ Y_ABORT("You should change implementation according to grammar changes. Invalid token: %s", token.c_str());
+ }
+ }
if (!second && quantifier != currentQuantifier) {
auto source = BuildUnion(pos, std::move(sources), currentQuantifier, {});