aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authora-romanov <Anton.Romanov@ydb.tech>2023-02-01 12:54:08 +0300
committera-romanov <Anton.Romanov@ydb.tech>2023-02-01 12:54:08 +0300
commit08e260ca8b66f19c5efb9788298735c84c2f7d6c (patch)
treea500a144f861da9ec64bb19f70cb4c7245a127f9
parent959f19c2ac5e04e166d118381cb36ebfc660d25f (diff)
downloadydb-08e260ca8b66f19c5efb9788298735c84c2f7d6c.tar.gz
Construct atoms for indexes in expr builder.
-rw-r--r--ydb/library/yql/ast/yql_expr_builder.cpp8
-rw-r--r--ydb/library/yql/ast/yql_expr_builder.h2
-rw-r--r--ydb/library/yql/core/common_opt/yql_co_simple1.cpp8
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")