diff options
author | Andrey Neporada <neporada@gmail.com> | 2022-06-20 18:08:45 +0300 |
---|---|---|
committer | Andrey Neporada <neporada@gmail.com> | 2022-06-20 18:08:45 +0300 |
commit | fd3445c72ca663535f1751d07711f3b86cb19073 (patch) | |
tree | 43b3ab6355264261bae5acb09d076a4de3917046 | |
parent | d3c3071e6d9055951691edcccbc30b86a2c0a800 (diff) | |
download | ydb-fd3445c72ca663535f1751d07711f3b86cb19073.tar.gz |
[YQL-14969] Extend table_hint grammar to allow multiple hint values (needed for partitioned_by=(a, b, c))
ref:55e33bcd89cd6d24e8b749fb5b4b522dfebaa6a8
-rw-r--r-- | ydb/library/yql/sql/v1/SQLv1.g.in | 2 | ||||
-rw-r--r-- | ydb/library/yql/sql/v1/sql.cpp | 18 |
2 files changed, 17 insertions, 3 deletions
diff --git a/ydb/library/yql/sql/v1/SQLv1.g.in b/ydb/library/yql/sql/v1/SQLv1.g.in index 5408a7ca84..e8b1cf9df2 100644 --- a/ydb/library/yql/sql/v1/SQLv1.g.in +++ b/ydb/library/yql/sql/v1/SQLv1.g.in @@ -577,7 +577,7 @@ table_key: id_table_or_type (VIEW an_id)?; table_arg: AT? named_expr (VIEW an_id)?; table_hints: WITH (table_hint | LPAREN table_hint (COMMA table_hint)* RPAREN); table_hint: - an_id_hint (EQUALS type_name_tag)? + an_id_hint (EQUALS (type_name_tag | LPAREN type_name_tag (COMMA type_name_tag)* COMMA? RPAREN))? | (SCHEMA | COLUMNS) type_name_or_bind | SCHEMA LPAREN (struct_arg_positional (COMMA struct_arg_positional)*)? COMMA? RPAREN ; diff --git a/ydb/library/yql/sql/v1/sql.cpp b/ydb/library/yql/sql/v1/sql.cpp index d1b9efb359..fad322c787 100644 --- a/ydb/library/yql/sql/v1/sql.cpp +++ b/ydb/library/yql/sql/v1/sql.cpp @@ -2948,7 +2948,7 @@ TNodePtr TSqlTranslation::StructLiteral(const TRule_struct_literal& node) { bool TSqlTranslation::TableHintImpl(const TRule_table_hint& rule, TTableHints& hints) { // table_hint: - // an_id_hint (EQUALS type_name_tag)? + // an_id_hint (EQUALS (type_name_tag | LPAREN type_name_tag (COMMA type_name_tag)* COMMA? RPAREN))? // | (SCHEMA | COLUMNS) type_name_or_bind // | SCHEMA LPAREN (struct_arg_positional (COMMA struct_arg_positional)*)? COMMA? RPAREN switch (rule.Alt_case()) { @@ -2962,7 +2962,21 @@ bool TSqlTranslation::TableHintImpl(const TRule_table_hint& rule, TTableHints& h } TVector<TNodePtr> hint_val; if (alt.HasBlock2()) { - hint_val.push_back(TypeNameTag(alt.GetBlock2().GetRule_type_name_tag2())); + auto& tags = alt.GetBlock2().GetBlock2(); + switch (tags.Alt_case()) { + case TRule_table_hint_TAlt1_TBlock2_TBlock2::kAlt1: + hint_val.push_back(TypeNameTag(tags.GetAlt1().GetRule_type_name_tag1())); + break; + case TRule_table_hint_TAlt1_TBlock2_TBlock2::kAlt2: { + hint_val.push_back(TypeNameTag(tags.GetAlt2().GetRule_type_name_tag2())); + for (auto& tag : tags.GetAlt2().GetBlock3()) { + hint_val.push_back(TypeNameTag(tag.GetRule_type_name_tag2())); + } + break; + } + default: + Y_FAIL("You should change implementation according to grammar changes"); + } } hints[id] = hint_val; break; |