diff options
author | a-romanov <Anton.Romanov@ydb.tech> | 2023-02-01 12:54:08 +0300 |
---|---|---|
committer | a-romanov <Anton.Romanov@ydb.tech> | 2023-02-01 12:54:08 +0300 |
commit | 08e260ca8b66f19c5efb9788298735c84c2f7d6c (patch) | |
tree | a500a144f861da9ec64bb19f70cb4c7245a127f9 | |
parent | 959f19c2ac5e04e166d118381cb36ebfc660d25f (diff) | |
download | ydb-08e260ca8b66f19c5efb9788298735c84c2f7d6c.tar.gz |
Construct atoms for indexes in expr builder.
-rw-r--r-- | ydb/library/yql/ast/yql_expr_builder.cpp | 8 | ||||
-rw-r--r-- | ydb/library/yql/ast/yql_expr_builder.h | 2 | ||||
-rw-r--r-- | ydb/library/yql/core/common_opt/yql_co_simple1.cpp | 8 |
3 files changed, 14 insertions, 4 deletions
diff --git a/ydb/library/yql/ast/yql_expr_builder.cpp b/ydb/library/yql/ast/yql_expr_builder.cpp index 9b17f803382..5468cadd2cc 100644 --- a/ydb/library/yql/ast/yql_expr_builder.cpp +++ b/ydb/library/yql/ast/yql_expr_builder.cpp @@ -102,6 +102,14 @@ TExprNodeBuilder& TExprNodeBuilder::Atom(const TStringBuf& content, ui32 flags) return Atom(Pos, content, flags); } +TExprNodeBuilder& TExprNodeBuilder::Atom(ui32 index, ui32 literalIndexValue) { + return Atom(index, Pos, Ctx.GetIndexAsString(literalIndexValue), TNodeFlags::Default); +} + +TExprNodeBuilder& TExprNodeBuilder::Atom(ui32 literalIndexValue) { + return Atom(Pos, Ctx.GetIndexAsString(literalIndexValue), TNodeFlags::Default); +} + TExprNodeBuilder TExprNodeBuilder::List(ui32 index, TPositionHandle pos) { Y_ENSURE(Container, "Container expected"); Y_ENSURE(Container->ChildrenSize() == index + (Container->IsLambda() ? 1U : 0U), diff --git a/ydb/library/yql/ast/yql_expr_builder.h b/ydb/library/yql/ast/yql_expr_builder.h index 18c63f2eea8..db816359eb9 100644 --- a/ydb/library/yql/ast/yql_expr_builder.h +++ b/ydb/library/yql/ast/yql_expr_builder.h @@ -32,6 +32,8 @@ public: TExprNodeBuilder& Atom(TPositionHandle pos, const TStringBuf& content, ui32 flags = TNodeFlags::ArbitraryContent); TExprNodeBuilder& Atom(ui32 index, const TStringBuf& content, ui32 flags = TNodeFlags::ArbitraryContent); TExprNodeBuilder& Atom(const TStringBuf& content, ui32 flags = TNodeFlags::ArbitraryContent); + TExprNodeBuilder& Atom(ui32 index, ui32 literalIndexValue); + TExprNodeBuilder& Atom(ui32 literalIndexValue); TExprNodeBuilder List(ui32 index, TPositionHandle pos); TExprNodeBuilder List(TPositionHandle pos); diff --git a/ydb/library/yql/core/common_opt/yql_co_simple1.cpp b/ydb/library/yql/core/common_opt/yql_co_simple1.cpp index 7873a1b320d..d1d2bacf7c0 100644 --- a/ydb/library/yql/core/common_opt/yql_co_simple1.cpp +++ b/ydb/library/yql/core/common_opt/yql_co_simple1.cpp @@ -5131,7 +5131,7 @@ void RegisterCoSimpleCallables1(TCallableOptimizerMap& map) { .Param("item") .Callable("Guess") .Arg(0, "item") - .Add(1, ctx.NewAtom(node->Pos(), indicies.begin()->first)) + .Atom(1, indicies.begin()->first) .Seal() .Seal() .Seal() @@ -5195,7 +5195,7 @@ void RegisterCoSimpleCallables1(TCallableOptimizerMap& map) { .Param("mapItem") .Callable("Variant") .Arg(0, "mapItem") - .Add(1, ctx.NewAtom(node->Pos(), i)) + .Atom(1, i) .Add(2, outVarType) .Seal() .Seal() @@ -5221,7 +5221,7 @@ void RegisterCoSimpleCallables1(TCallableOptimizerMap& map) { body = ctx.Builder(node->Pos()) .Callable("Variant") .Add(0, arg) - .Add(1, ctx.NewAtom(node->Pos(), i)) + .Atom(1, i) .Add(2, outVarType) .Seal() .Build(); @@ -5276,7 +5276,7 @@ void RegisterCoSimpleCallables1(TCallableOptimizerMap& map) { .Do([&](TExprNodeBuilder& builder) -> TExprNodeBuilder& { ui32 i = 1; for (auto& item: indicies) { - builder.Add(i++, ctx.NewAtom(node->Pos(), item.first)); + builder.Atom(i++, item.first); if (item.second.size() > 1) { builder.Lambda(i++) .Param("subItem") |