diff options
author | Andrey Neporada <[email protected]> | 2022-06-23 23:48:26 +0300 |
---|---|---|
committer | Andrey Neporada <[email protected]> | 2022-06-23 23:48:26 +0300 |
commit | 87e6b2d56f7b4884474064165290179ea38eeaca (patch) | |
tree | 2bf01466adeeedd0a81e059b19f85af7692233ae | |
parent | 90ad4334410c5c893687416baf8cfb4598b8c803 (diff) |
[YQL-15034] Allow true/false as variables names
ref:96be1f1052f727b20ea11f81a7ea3495866e51f0
-rw-r--r-- | ydb/library/yql/sql/v1/SQLv1.g.in | 2 | ||||
-rw-r--r-- | ydb/library/yql/sql/v1/sql.cpp | 17 | ||||
-rw-r--r-- | ydb/library/yql/sql/v1/sql_ut.cpp | 5 |
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) { |