summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrey Neporada <[email protected]>2022-06-23 23:48:26 +0300
committerAndrey Neporada <[email protected]>2022-06-23 23:48:26 +0300
commit87e6b2d56f7b4884474064165290179ea38eeaca (patch)
tree2bf01466adeeedd0a81e059b19f85af7692233ae
parent90ad4334410c5c893687416baf8cfb4598b8c803 (diff)
[YQL-15034] Allow true/false as variables names
ref:96be1f1052f727b20ea11f81a7ea3495866e51f0
-rw-r--r--ydb/library/yql/sql/v1/SQLv1.g.in2
-rw-r--r--ydb/library/yql/sql/v1/sql.cpp17
-rw-r--r--ydb/library/yql/sql/v1/sql_ut.cpp5
3 files changed, 21 insertions, 3 deletions
diff --git a/ydb/library/yql/sql/v1/SQLv1.g.in b/ydb/library/yql/sql/v1/SQLv1.g.in
index e8b1cf9df23..b9a92f10f3b 100644
--- a/ydb/library/yql/sql/v1/SQLv1.g.in
+++ b/ydb/library/yql/sql/v1/SQLv1.g.in
@@ -238,7 +238,7 @@ literal_value:
| EMPTY_ACTION
;
-bind_parameter: DOLLAR an_id_or_type;
+bind_parameter: DOLLAR (an_id_or_type | TRUE | FALSE);
opt_bind_parameter: bind_parameter QUESTION?;
bind_parameter_list: bind_parameter (COMMA bind_parameter)*;
diff --git a/ydb/library/yql/sql/v1/sql.cpp b/ydb/library/yql/sql/v1/sql.cpp
index ff7be4bc3b0..7f98cdc7cb1 100644
--- a/ydb/library/yql/sql/v1/sql.cpp
+++ b/ydb/library/yql/sql/v1/sql.cpp
@@ -516,8 +516,21 @@ static void PureColumnListStr(const TRule_pure_column_list& node, TTranslation&
}
static bool NamedNodeImpl(const TRule_bind_parameter& node, TString& name, TTranslation& ctx) {
- // bind_parameter: DOLLAR an_id_or_type;
- auto id = Id(node.GetRule_an_id_or_type2(), ctx);
+ // bind_parameter: DOLLAR (an_id_or_type | TRUE | FALSE);
+ TString id;
+ switch (node.GetBlock2().Alt_case()) {
+ case TRule_bind_parameter::TBlock2::kAlt1:
+ id = Id(node.GetBlock2().GetAlt1().GetRule_an_id_or_type1(), ctx);
+ break;
+ case TRule_bind_parameter::TBlock2::kAlt2:
+ id = ctx.Token(node.GetBlock2().GetAlt2().GetToken1());
+ break;
+ case TRule_bind_parameter::TBlock2::kAlt3:
+ id = ctx.Token(node.GetBlock2().GetAlt3().GetToken1());
+ break;
+ default:
+ Y_FAIL("You should change implementation according to grammar changes");
+ }
auto dollar = ctx.Token(node.GetToken1());
if (id.empty()) {
ctx.Error() << "Empty symbol name is not allowed";
diff --git a/ydb/library/yql/sql/v1/sql_ut.cpp b/ydb/library/yql/sql/v1/sql_ut.cpp
index c9c6b0ecd6e..3786b3f70bd 100644
--- a/ydb/library/yql/sql/v1/sql_ut.cpp
+++ b/ydb/library/yql/sql/v1/sql_ut.cpp
@@ -1682,6 +1682,11 @@ Y_UNIT_TEST_SUITE(SqlParsingOnly) {
Y_UNIT_TEST(UseShouldWorkAsColumnName) {
UNIT_ASSERT(SqlToYql("select use from (select 1 as use);").IsOk());
}
+
+ Y_UNIT_TEST(TrueFalseWorkAfterDollar) {
+ UNIT_ASSERT(SqlToYql("$ true = false; SELECT $ true or false;").IsOk());
+ UNIT_ASSERT(SqlToYql("$False = 0; SELECT $False;").IsOk());
+ }
}
Y_UNIT_TEST_SUITE(ExternalFunction) {