aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvvvv <vvvv@ydb.tech>2023-04-04 14:33:26 +0300
committervvvv <vvvv@ydb.tech>2023-04-04 14:33:26 +0300
commit32830aa8b6342ef94dd825f029f2c5d3340c6344 (patch)
tree93bc35e44fc2666f80b45de65a0f27d90bd9adf0
parent0ec462c750577168b7d065876b42b55c2aacc299 (diff)
downloadydb-32830aa8b6342ef94dd825f029f2c5d3340c6344.tar.gz
Fixed vectorization of AST literal lists
Пример запроса, на котором чинится векторизация %% pragma UseBlocks; USE plato; SELECT key,len(key),AsDict(AsTuple(1, key)) FROM Input %%
-rw-r--r--ydb/core/kqp/host/kqp_type_ann.cpp2
-rw-r--r--ydb/library/yql/ast/yql_expr.h11
-rw-r--r--ydb/library/yql/core/expr_nodes_gen/yql_expr_nodes_gen.h22
-rw-r--r--ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp2
-rw-r--r--ydb/library/yql/core/type_ann/type_ann_blocks.cpp4
-rw-r--r--ydb/library/yql/core/type_ann/type_ann_core.cpp2
-rw-r--r--ydb/library/yql/core/type_ann/type_ann_join.cpp12
-rw-r--r--ydb/library/yql/core/type_ann/type_ann_list.cpp2
-rw-r--r--ydb/library/yql/core/type_ann/type_ann_pg.cpp34
-rw-r--r--ydb/library/yql/core/type_ann/type_ann_wide.cpp2
-rw-r--r--ydb/library/yql/core/type_ann/type_ann_wide.h2
-rw-r--r--ydb/library/yql/core/yql_expr_type_annotation.cpp20
-rw-r--r--ydb/library/yql/core/yql_expr_type_annotation.h16
-rw-r--r--ydb/library/yql/core/yql_join.cpp14
-rw-r--r--ydb/library/yql/core/yql_join.h6
-rw-r--r--ydb/library/yql/providers/s3/provider/yql_s3_datasink_type_ann.cpp2
-rw-r--r--ydb/library/yql/providers/s3/provider/yql_s3_datasource_type_ann.cpp6
-rw-r--r--ydb/library/yql/providers/ydb/provider/yql_ydb_datasink_type_ann.cpp2
18 files changed, 99 insertions, 62 deletions
diff --git a/ydb/core/kqp/host/kqp_type_ann.cpp b/ydb/core/kqp/host/kqp_type_ann.cpp
index 8f34bb57492..1d6e842f729 100644
--- a/ydb/core/kqp/host/kqp_type_ann.cpp
+++ b/ydb/core/kqp/host/kqp_type_ann.cpp
@@ -1389,7 +1389,7 @@ TAutoPtr<IGraphTransformer> CreateKqpCheckQueryTransformer() {
auto query = TKqlQuery(input);
for (const auto& result : query.Results()) {
- if (!EnsureTupleSize(result.Ref(), 2, ctx)) {
+ if (!EnsureTupleSize(result.MutableRef(), 2, ctx)) {
return TStatus::Error;
}
if (!EnsureListType(result.Value().Ref(), ctx)) {
diff --git a/ydb/library/yql/ast/yql_expr.h b/ydb/library/yql/ast/yql_expr.h
index 03d366c7db1..2681f89ce97 100644
--- a/ydb/library/yql/ast/yql_expr.h
+++ b/ydb/library/yql/ast/yql_expr.h
@@ -1638,6 +1638,16 @@ public:
return !OuterLambda;
}
+ bool IsLiteralList() const {
+ YQL_ENSURE(IsList());
+ return LiteralList;
+ }
+
+ void SetLiteralList(bool literal) {
+ YQL_ENSURE(IsList());
+ LiteralList = literal;
+ }
+
void Ref() {
ENSURE_NOT_DELETED
ENSURE_NOT_FROZEN
@@ -2116,6 +2126,7 @@ private:
ui8 UsedInDependsOn : 1;
ui8 UnordChildren : 1;
ui8 ShallBeDisclosed: 1;
+ ui8 LiteralList : 1;
};
};
diff --git a/ydb/library/yql/core/expr_nodes_gen/yql_expr_nodes_gen.h b/ydb/library/yql/core/expr_nodes_gen/yql_expr_nodes_gen.h
index 0974e8d2d34..118888c8d8a 100644
--- a/ydb/library/yql/core/expr_nodes_gen/yql_expr_nodes_gen.h
+++ b/ydb/library/yql/core/expr_nodes_gen/yql_expr_nodes_gen.h
@@ -42,6 +42,11 @@ public:
return Raw_;
}
+ TExprNode* MutableRaw() const {
+ YQL_ENSURE(Node);
+ return Node.Get();
+ }
+
TExprNode::TPtr Ptr() const {
YQL_ENSURE(Node);
return Node;
@@ -51,6 +56,11 @@ public:
return *Raw_;
}
+ TExprNode& MutableRef() const {
+ YQL_ENSURE(Node);
+ return *Node;
+ }
+
TExprBase NonOwning() const {
return TExprBase(Raw_);
}
@@ -91,10 +101,22 @@ public:
return *Raw_;
}
+ TExprNode& MutableRef() const {
+ YQL_ENSURE(IsValid());
+ YQL_ENSURE(Node);
+ return *Node;
+ }
+
const TExprNode* Raw() const {
return Raw_;
}
+ TExprNode* MutableRaw() const {
+ YQL_ENSURE(IsValid());
+ YQL_ENSURE(Node);
+ return Node.Get();
+ }
+
bool IsValid() const {
return Raw_ != nullptr;
}
diff --git a/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp b/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp
index add7d21156b..9077e3b2198 100644
--- a/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp
+++ b/ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp
@@ -4948,7 +4948,7 @@ bool CollectBlockRewrites(const TMultiExprType* multiInputType, bool keepInputCo
return true;
}
- if (node->IsList() && !node->GetTypeAnn()->IsComputable()) {
+ if (node->IsList() && (!node->GetTypeAnn()->IsComputable() || node->IsLiteralList())) {
return true;
}
diff --git a/ydb/library/yql/core/type_ann/type_ann_blocks.cpp b/ydb/library/yql/core/type_ann/type_ann_blocks.cpp
index f89e3a260f3..dc0739e50e4 100644
--- a/ydb/library/yql/core/type_ann/type_ann_blocks.cpp
+++ b/ydb/library/yql/core/type_ann/type_ann_blocks.cpp
@@ -432,7 +432,7 @@ IGraphTransformer::TStatus BlockBitCastWrapper(const TExprNode::TPtr& input, TEx
}
bool ValidateBlockKeys(TPositionHandle pos, const TTypeAnnotationNode::TListType& inputItems,
- const TExprNode& keys, TTypeAnnotationNode::TListType& retMultiType, TExprContext& ctx) {
+ TExprNode& keys, TTypeAnnotationNode::TListType& retMultiType, TExprContext& ctx) {
if (!EnsureTupleMinSize(keys, 1, ctx)) {
return IGraphTransformer::TStatus::Error;
}
@@ -454,7 +454,7 @@ bool ValidateBlockKeys(TPositionHandle pos, const TTypeAnnotationNode::TListType
return true;
}
-bool ValidateBlockAggs(TPositionHandle pos, const TTypeAnnotationNode::TListType& inputItems, const TExprNode& aggs,
+bool ValidateBlockAggs(TPositionHandle pos, const TTypeAnnotationNode::TListType& inputItems, TExprNode& aggs,
TTypeAnnotationNode::TListType& retMultiType, TExprContext& ctx, bool overState, bool many) {
if (!EnsureTuple(aggs, ctx)) {
return false;
diff --git a/ydb/library/yql/core/type_ann/type_ann_core.cpp b/ydb/library/yql/core/type_ann/type_ann_core.cpp
index ab8b638f3cd..e33ea28f98d 100644
--- a/ydb/library/yql/core/type_ann/type_ann_core.cpp
+++ b/ydb/library/yql/core/type_ann/type_ann_core.cpp
@@ -11180,7 +11180,7 @@ template <NKikimr::NUdf::EDataSlot DataSlot>
return IGraphTransformer::TStatus::Error;
}
- const auto& tupleOfAtomsNode = input->Tail();
+ auto& tupleOfAtomsNode = input->Tail();
if (!EnsureTupleMinSize(tupleOfAtomsNode, 1, ctx.Expr) || !EnsureTupleOfAtoms(tupleOfAtomsNode, ctx.Expr)) {
return IGraphTransformer::TStatus::Error;
}
diff --git a/ydb/library/yql/core/type_ann/type_ann_join.cpp b/ydb/library/yql/core/type_ann/type_ann_join.cpp
index 76e22a904da..fcf8db1de35 100644
--- a/ydb/library/yql/core/type_ann/type_ann_join.cpp
+++ b/ydb/library/yql/core/type_ann/type_ann_join.cpp
@@ -357,8 +357,8 @@ namespace NTypeAnnImpl {
}
}
- const auto& leftRenames = *input->Child(4);
- const auto& rightRenames = *input->Child(5);
+ auto& leftRenames = *input->Child(4);
+ auto& rightRenames = *input->Child(5);
if (!EnsureTupleOfAtoms(leftRenames, ctx.Expr)) {
return IGraphTransformer::TStatus::Error;
}
@@ -515,8 +515,8 @@ namespace NTypeAnnImpl {
const auto joinKind = input->Child(2)->Content();
- const auto& leftKeyColumns = *input->Child(3);
- const auto& rightKeyColumns = *input->Child(4);
+ auto& leftKeyColumns = *input->Child(3);
+ auto& rightKeyColumns = *input->Child(4);
if (!EnsureTupleOfAtoms(leftKeyColumns, ctx.Expr)) {
return IGraphTransformer::TStatus::Error;
@@ -527,8 +527,8 @@ namespace NTypeAnnImpl {
}
- const auto& leftRenames = *input->Child(5);
- const auto& rightRenames = *input->Child(6);
+ auto& leftRenames = *input->Child(5);
+ auto& rightRenames = *input->Child(6);
if (!EnsureTupleOfAtoms(leftRenames, ctx.Expr)) {
return IGraphTransformer::TStatus::Error;
diff --git a/ydb/library/yql/core/type_ann/type_ann_list.cpp b/ydb/library/yql/core/type_ann/type_ann_list.cpp
index ea1ecb57493..4512beda5fe 100644
--- a/ydb/library/yql/core/type_ann/type_ann_list.cpp
+++ b/ydb/library/yql/core/type_ann/type_ann_list.cpp
@@ -480,7 +480,7 @@ namespace {
}
IGraphTransformer::TStatus ValidateCalcOverWindowArgs(TVector<const TItemExprType*>& outputStructType,
- const TStructExprType& inputStructType, const TExprNode& partitionBy, const TExprNode& sortSpec, const TExprNode& winList,
+ const TStructExprType& inputStructType, TExprNode& partitionBy, const TExprNode& sortSpec, TExprNode& winList,
const TExprNode::TPtr& sessionSpec, const TExprNode::TPtr& sessionColumns, TExprContext& ctx)
{
YQL_ENSURE(sessionSpec ? bool(sessionColumns) : !sessionColumns);
diff --git a/ydb/library/yql/core/type_ann/type_ann_pg.cpp b/ydb/library/yql/core/type_ann/type_ann_pg.cpp
index 7a9df807532..1facbd26829 100644
--- a/ydb/library/yql/core/type_ann/type_ann_pg.cpp
+++ b/ydb/library/yql/core/type_ann/type_ann_pg.cpp
@@ -17,12 +17,12 @@ namespace NYql {
namespace NTypeAnnImpl {
-bool ValidateInputTypes(const TExprNode& node, TExprContext& ctx) {
+bool ValidateInputTypes(TExprNode& node, TExprContext& ctx) {
if (!EnsureTuple(node, ctx)) {
return false;
}
- for (const auto& x : node.Children()) {
+ for (auto& x : node.Children()) {
if (!EnsureTupleSize(*x, 2, ctx)) {
return false;
}
@@ -2769,7 +2769,7 @@ IGraphTransformer::TStatus PgSetItemWrapper(const TExprNode::TPtr& input, TExprN
return IGraphTransformer::TStatus::Error;
}
- const auto& options = input->Head();
+ auto& options = input->Head();
if (!EnsureTuple(options, ctx.Expr)) {
return IGraphTransformer::TStatus::Error;
}
@@ -2809,7 +2809,7 @@ IGraphTransformer::TStatus PgSetItemWrapper(const TExprNode::TPtr& input, TExprN
return IGraphTransformer::TStatus::Error;
}
- for (const auto& option : options.Children()) {
+ for (auto& option : options.Children()) {
if (!EnsureTupleMinSize(*option, 1, ctx.Expr)) {
return IGraphTransformer::TStatus::Error;
}
@@ -2834,7 +2834,7 @@ IGraphTransformer::TStatus PgSetItemWrapper(const TExprNode::TPtr& input, TExprN
return IGraphTransformer::TStatus::Error;
}
- const auto& data = option->Tail();
+ auto& data = option->Tail();
if (!ValidateInputTypes(data, ctx.Expr)) {
return IGraphTransformer::TStatus::Error;
}
@@ -2906,7 +2906,7 @@ IGraphTransformer::TStatus PgSetItemWrapper(const TExprNode::TPtr& input, TExprN
return IGraphTransformer::TStatus::Error;
}
- const auto& data = option->Tail();
+ auto& data = option->Tail();
if (!EnsureTuple(data, ctx.Expr)) {
return IGraphTransformer::TStatus::Error;
}
@@ -3181,7 +3181,7 @@ IGraphTransformer::TStatus PgSetItemWrapper(const TExprNode::TPtr& input, TExprN
return IGraphTransformer::TStatus::Error;
}
- const auto& data = option->Tail();
+ auto& data = option->Tail();
if (!EnsureTupleMinSize(data, 1, ctx.Expr)) {
return IGraphTransformer::TStatus::Error;
}
@@ -3439,7 +3439,7 @@ IGraphTransformer::TStatus PgSetItemWrapper(const TExprNode::TPtr& input, TExprN
return IGraphTransformer::TStatus::Error;
}
- const auto& data = option->Tail();
+ auto& data = option->Tail();
if (!EnsureTuple(data, ctx.Expr)) {
return IGraphTransformer::TStatus::Error;
}
@@ -3622,7 +3622,7 @@ IGraphTransformer::TStatus PgSetItemWrapper(const TExprNode::TPtr& input, TExprN
return IGraphTransformer::TStatus::Error;
}
- const auto& data = option->Tail();
+ auto& data = option->Tail();
if (!EnsureTuple(data, ctx.Expr)) {
return IGraphTransformer::TStatus::Error;
}
@@ -3663,7 +3663,7 @@ IGraphTransformer::TStatus PgSetItemWrapper(const TExprNode::TPtr& input, TExprN
return IGraphTransformer::TStatus::Error;
}
- const auto& data = option->Tail();
+ auto& data = option->Tail();
if (!EnsureTuple(data, ctx.Expr)) {
return IGraphTransformer::TStatus::Error;
}
@@ -3690,7 +3690,7 @@ IGraphTransformer::TStatus PgSetItemWrapper(const TExprNode::TPtr& input, TExprN
return IGraphTransformer::TStatus::Error;
}
- const auto& data = option->Tail();
+ auto& data = option->Tail();
if (!EnsureTuple(data, ctx.Expr)) {
return IGraphTransformer::TStatus::Error;
}
@@ -3723,7 +3723,7 @@ IGraphTransformer::TStatus PgSetItemWrapper(const TExprNode::TPtr& input, TExprN
return IGraphTransformer::TStatus::Error;
}
- const auto& data = option->Tail();
+ auto& data = option->Tail();
if (!EnsureTupleMinSize(data, 1, ctx.Expr)) {
return IGraphTransformer::TStatus::Error;
}
@@ -3804,7 +3804,7 @@ IGraphTransformer::TStatus PgSetItemWrapper(const TExprNode::TPtr& input, TExprN
return IGraphTransformer::TStatus::Error;
}
- const auto& data = option->Tail();
+ auto& data = option->Tail();
if (!EnsureTuple(data, ctx.Expr)) {
return IGraphTransformer::TStatus::Error;
}
@@ -3838,7 +3838,7 @@ IGraphTransformer::TStatus PgSetItemWrapper(const TExprNode::TPtr& input, TExprN
return IGraphTransformer::TStatus::Error;
}
- const auto& data = option->Tail();
+ auto& data = option->Tail();
if (!EnsureTuple(data, ctx.Expr)) {
return IGraphTransformer::TStatus::Error;
}
@@ -4102,7 +4102,7 @@ IGraphTransformer::TStatus PgSelectWrapper(const TExprNode::TPtr& input, TExprNo
return IGraphTransformer::TStatus::Error;
}
- const auto& options = input->Head();
+ auto& options = input->Head();
if (!EnsureTuple(options, ctx.Expr)) {
return IGraphTransformer::TStatus::Error;
}
@@ -4113,7 +4113,7 @@ IGraphTransformer::TStatus PgSelectWrapper(const TExprNode::TPtr& input, TExprNo
bool hasSort = false;
for (ui32 pass = 0; pass < 2; ++pass) {
- for (const auto& option : options.Children()) {
+ for (auto& option : options.Children()) {
if (!EnsureTupleMinSize(*option, 1, ctx.Expr)) {
return IGraphTransformer::TStatus::Error;
}
@@ -4215,7 +4215,7 @@ IGraphTransformer::TStatus PgSelectWrapper(const TExprNode::TPtr& input, TExprNo
return IGraphTransformer::TStatus::Error;
}
- const auto& data = option->Tail();
+ auto& data = option->Tail();
if (!EnsureTuple(data, ctx.Expr)) {
return IGraphTransformer::TStatus::Error;
}
diff --git a/ydb/library/yql/core/type_ann/type_ann_wide.cpp b/ydb/library/yql/core/type_ann/type_ann_wide.cpp
index 5662a7b449b..dcb0f8dce1b 100644
--- a/ydb/library/yql/core/type_ann/type_ann_wide.cpp
+++ b/ydb/library/yql/core/type_ann/type_ann_wide.cpp
@@ -667,7 +667,7 @@ IGraphTransformer::TStatus WideSortWrapper(const TExprNode::TPtr& input, TExprNo
return IGraphTransformer::TStatus::Ok;
}
-bool ValidateWideTopKeys(const TExprNode& keys, const TTypeAnnotationNode::TListType& types, TExprContext& ctx) {
+bool ValidateWideTopKeys(TExprNode& keys, const TTypeAnnotationNode::TListType& types, TExprContext& ctx) {
if (!(EnsureTupleMinSize(keys, 1U, ctx) && EnsureTupleMaxSize(keys, types.size(), ctx))) {
return false;
}
diff --git a/ydb/library/yql/core/type_ann/type_ann_wide.h b/ydb/library/yql/core/type_ann/type_ann_wide.h
index d4a159a49dc..fba62091a9d 100644
--- a/ydb/library/yql/core/type_ann/type_ann_wide.h
+++ b/ydb/library/yql/core/type_ann/type_ann_wide.h
@@ -8,7 +8,7 @@
namespace NYql {
namespace NTypeAnnImpl {
IGraphTransformer::TStatus ExpandMapWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx);
- bool ValidateWideTopKeys(const TExprNode& keys, const TTypeAnnotationNode::TListType& types, TExprContext& ctx);
+ bool ValidateWideTopKeys(TExprNode& keys, const TTypeAnnotationNode::TListType& types, TExprContext& ctx);
IGraphTransformer::TStatus WideMapWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx);
IGraphTransformer::TStatus WideFilterWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx);
diff --git a/ydb/library/yql/core/yql_expr_type_annotation.cpp b/ydb/library/yql/core/yql_expr_type_annotation.cpp
index 1676a75f467..1c02aee73a7 100644
--- a/ydb/library/yql/core/yql_expr_type_annotation.cpp
+++ b/ydb/library/yql/core/yql_expr_type_annotation.cpp
@@ -1958,16 +1958,17 @@ bool EnsureCallable(const TExprNode& node, TExprContext& ctx) {
return true;
}
-bool EnsureTuple(const TExprNode& node, TExprContext& ctx) {
+bool EnsureTuple(TExprNode& node, TExprContext& ctx) {
if (HasError(node.GetTypeAnn(), ctx) || node.Type() != TExprNode::List) {
ctx.AddError(TIssue(ctx.GetPosition(node.Pos()), TStringBuilder() << "Expected tuple, but got: " << node.Type()));
return false;
}
+ node.SetLiteralList(true);
return true;
}
-bool EnsureTupleOfAtoms(const TExprNode& node, TExprContext& ctx) {
+bool EnsureTupleOfAtoms(TExprNode& node, TExprContext& ctx) {
if (!EnsureTuple(node, ctx)) {
return false;
}
@@ -1980,7 +1981,7 @@ bool EnsureTupleOfAtoms(const TExprNode& node, TExprContext& ctx) {
return true;
}
-bool EnsureValidSettings(const TExprNode& node,
+bool EnsureValidSettings(TExprNode& node,
const THashSet<TStringBuf>& supportedSettings,
const TSettingNodeValidator& validator,
TExprContext& ctx)
@@ -2012,7 +2013,7 @@ bool EnsureValidSettings(const TExprNode& node,
}
-bool EnsureValidUserSchemaSetting(const TExprNode& node, TExprContext& ctx) {
+bool EnsureValidUserSchemaSetting(TExprNode& node, TExprContext& ctx) {
if (!EnsureTupleMinSize(node, 2, ctx)) {
return false;
}
@@ -2068,7 +2069,7 @@ bool EnsureValidUserSchemaSetting(const TExprNode& node, TExprContext& ctx) {
TSettingNodeValidator RequireSingleValueSettings(const TSettingNodeValidator& validator) {
- return [validator](TStringBuf name, const TExprNode& setting, TExprContext& ctx) {
+ return [validator](TStringBuf name, TExprNode& setting, TExprContext& ctx) {
if (setting.ChildrenSize() != 2) {
ctx.AddError(TIssue(ctx.GetPosition(setting.Pos()),
TStringBuilder() << "Option '" << name << "' requires single argument"));
@@ -2078,7 +2079,7 @@ TSettingNodeValidator RequireSingleValueSettings(const TSettingNodeValidator& va
};
}
-bool EnsureTupleSize(const TExprNode& node, ui32 expectedSize, TExprContext& ctx) {
+bool EnsureTupleSize(TExprNode& node, ui32 expectedSize, TExprContext& ctx) {
if (HasError(node.GetTypeAnn(), ctx) || node.Type() != TExprNode::List) {
ctx.AddError(TIssue(ctx.GetPosition(node.Pos()), TStringBuilder() << "Expected tuple, but got: " << node.Type()));
return false;
@@ -2090,10 +2091,11 @@ bool EnsureTupleSize(const TExprNode& node, ui32 expectedSize, TExprContext& ctx
return false;
}
+ node.SetLiteralList(true);
return true;
}
-bool EnsureTupleMinSize(const TExprNode& node, ui32 minSize, TExprContext& ctx) {
+bool EnsureTupleMinSize(TExprNode& node, ui32 minSize, TExprContext& ctx) {
if (HasError(node.GetTypeAnn(), ctx) || node.Type() != TExprNode::List) {
ctx.AddError(TIssue(ctx.GetPosition(node.Pos()), TStringBuilder() << "Expected tuple, but got: " << node.Type()));
return false;
@@ -2105,10 +2107,11 @@ bool EnsureTupleMinSize(const TExprNode& node, ui32 minSize, TExprContext& ctx)
return false;
}
+ node.SetLiteralList(true);
return true;
}
-bool EnsureTupleMaxSize(const TExprNode& node, ui32 maxSize, TExprContext& ctx) {
+bool EnsureTupleMaxSize(TExprNode& node, ui32 maxSize, TExprContext& ctx) {
if (HasError(node.GetTypeAnn(), ctx) || node.Type() != TExprNode::List) {
ctx.AddError(TIssue(ctx.GetPosition(node.Pos()), TStringBuilder() << "Expected tuple, but got: " << node.Type()));
return false;
@@ -2120,6 +2123,7 @@ bool EnsureTupleMaxSize(const TExprNode& node, ui32 maxSize, TExprContext& ctx)
return false;
}
+ node.SetLiteralList(true);
return true;
}
diff --git a/ydb/library/yql/core/yql_expr_type_annotation.h b/ydb/library/yql/core/yql_expr_type_annotation.h
index 93941fa95e3..b3ce8d96661 100644
--- a/ydb/library/yql/core/yql_expr_type_annotation.h
+++ b/ydb/library/yql/core/yql_expr_type_annotation.h
@@ -66,23 +66,23 @@ bool EnsureCallableMinArgsCount(const TPositionHandle& pos, ui32 args, ui32 expe
bool EnsureCallableMaxArgsCount(const TPositionHandle& pos, ui32 args, ui32 expectedArgs, TExprContext& ctx);
bool EnsureAtom(const TExprNode& node, TExprContext& ctx);
bool EnsureCallable(const TExprNode& node, TExprContext& ctx);
-bool EnsureTuple(const TExprNode& node, TExprContext& ctx);
-bool EnsureTupleOfAtoms(const TExprNode& node, TExprContext& ctx);
+bool EnsureTuple(TExprNode& node, TExprContext& ctx);
+bool EnsureTupleOfAtoms(TExprNode& node, TExprContext& ctx);
-using TSettingNodeValidator = std::function<bool (TStringBuf name, const TExprNode& setting, TExprContext& ctx)>;
-bool EnsureValidSettings(const TExprNode& node,
+using TSettingNodeValidator = std::function<bool (TStringBuf name, TExprNode& setting, TExprContext& ctx)>;
+bool EnsureValidSettings(TExprNode& node,
const THashSet<TStringBuf>& supportedSettings,
const TSettingNodeValidator& validator,
TExprContext& ctx);
-bool EnsureValidUserSchemaSetting(const TExprNode& node, TExprContext& ctx);
+bool EnsureValidUserSchemaSetting(TExprNode& node, TExprContext& ctx);
TSettingNodeValidator RequireSingleValueSettings(const TSettingNodeValidator& validator);
bool EnsureLambda(const TExprNode& node, TExprContext& ctx);
IGraphTransformer::TStatus ConvertToLambda(TExprNode::TPtr& node, TExprContext& ctx, ui32 argumentsCount, ui32 maxArgumentsCount = Max<ui32>(),
bool withTypes = true);
-bool EnsureTupleSize(const TExprNode& node, ui32 expectedSize, TExprContext& ctx);
-bool EnsureTupleMinSize(const TExprNode& node, ui32 minSize, TExprContext& ctx);
-bool EnsureTupleMaxSize(const TExprNode& node, ui32 maxSize, TExprContext& ctx);
+bool EnsureTupleSize(TExprNode& node, ui32 expectedSize, TExprContext& ctx);
+bool EnsureTupleMinSize(TExprNode& node, ui32 minSize, TExprContext& ctx);
+bool EnsureTupleMaxSize(TExprNode& node, ui32 maxSize, TExprContext& ctx);
bool EnsureTupleType(const TExprNode& node, TExprContext& ctx);
bool EnsureTupleType(TPositionHandle position, const TTypeAnnotationNode& type, TExprContext& ctx);
bool EnsureTupleTypeSize(const TExprNode& node, ui32 expectedSize, TExprContext& ctx);
diff --git a/ydb/library/yql/core/yql_join.cpp b/ydb/library/yql/core/yql_join.cpp
index 7005082c2e4..1eba696aba5 100644
--- a/ydb/library/yql/core/yql_join.cpp
+++ b/ydb/library/yql/core/yql_join.cpp
@@ -23,7 +23,7 @@ namespace {
bool Used = false;
};
- IGraphTransformer::TStatus ParseJoinKeys(const TExprNode& side, TVector<std::pair<TStringBuf, TStringBuf>>& keys,
+ IGraphTransformer::TStatus ParseJoinKeys(TExprNode& side, TVector<std::pair<TStringBuf, TStringBuf>>& keys,
TVector<const TTypeAnnotationNode*>& keyTypes, const TJoinLabels& labels,
TExprContext& ctx, bool isCross) {
if (!EnsureTuple(side, ctx)) {
@@ -104,11 +104,11 @@ namespace {
}
IGraphTransformer::TStatus ParseJoins(const TJoinLabels& labels,
- const TExprNode& joins, TVector<TJoinState>& joinsStates, THashSet<TStringBuf>& scope,
+ TExprNode& joins, TVector<TJoinState>& joinsStates, THashSet<TStringBuf>& scope,
TGLobalJoinState& globalState, bool strictKeys, TExprContext& ctx, const TUniqueConstraintNode** unique = nullptr, const TDistinctConstraintNode** distinct = nullptr);
IGraphTransformer::TStatus ParseJoinScope(const TJoinLabels& labels,
- const TExprNode& side, TVector<TJoinState>& joinsStates, THashSet<TStringBuf>& scope,
+ TExprNode& side, TVector<TJoinState>& joinsStates, THashSet<TStringBuf>& scope,
TGLobalJoinState& globalState, bool strictKeys, const TUniqueConstraintNode*& unique, const TDistinctConstraintNode*& distinct, TExprContext& ctx) {
if (side.IsAtom()) {
const auto label = side.Content();
@@ -153,7 +153,7 @@ namespace {
}
IGraphTransformer::TStatus ParseJoins(const TJoinLabels& labels,
- const TExprNode& joins, TVector<TJoinState>& joinsStates, THashSet<TStringBuf>& scope,
+ TExprNode& joins, TVector<TJoinState>& joinsStates, THashSet<TStringBuf>& scope,
TGLobalJoinState& globalState, bool strictKeys, TExprContext& ctx, const TUniqueConstraintNode** unique, const TDistinctConstraintNode** distinct) {
if (!EnsureTupleSize(joins, 6, ctx)) {
return IGraphTransformer::TStatus::Error;
@@ -679,7 +679,7 @@ TVector<TString> TJoinLabels::EnumerateColumns(const TStringBuf& table) const {
return result;
}
-IGraphTransformer::TStatus ValidateEquiJoinOptions(TPositionHandle positionHandle, const TExprNode& optionsNode,
+IGraphTransformer::TStatus ValidateEquiJoinOptions(TPositionHandle positionHandle, TExprNode& optionsNode,
TJoinOptions& options, TExprContext& ctx)
{
auto position = ctx.GetPosition(positionHandle);
@@ -773,7 +773,7 @@ IGraphTransformer::TStatus EquiJoinAnnotation(
TPositionHandle positionHandle,
const TStructExprType*& resultType,
const TJoinLabels& labels,
- const TExprNode& joins,
+ TExprNode& joins,
const TJoinOptions& options,
TExprContext& ctx
) {
@@ -898,7 +898,7 @@ IGraphTransformer::TStatus EquiJoinConstraints(
const TUniqueConstraintNode*& unique,
const TDistinctConstraintNode*& distinct,
const TJoinLabels& labels,
- const TExprNode& joins,
+ TExprNode& joins,
TExprContext& ctx
) {
const auto position = ctx.GetPosition(positionHandle);
diff --git a/ydb/library/yql/core/yql_join.h b/ydb/library/yql/core/yql_join.h
index d3be053f5d3..a830cd7d422 100644
--- a/ydb/library/yql/core/yql_join.h
+++ b/ydb/library/yql/core/yql_join.h
@@ -62,7 +62,7 @@ struct TJoinOptions {
IGraphTransformer::TStatus ValidateEquiJoinOptions(
TPositionHandle positionHandle,
- const TExprNode& optionsNode,
+ TExprNode& optionsNode,
TJoinOptions& options,
TExprContext& ctx
);
@@ -71,7 +71,7 @@ IGraphTransformer::TStatus EquiJoinAnnotation(
TPositionHandle position,
const TStructExprType*& resultType,
const TJoinLabels& labels,
- const TExprNode& joins,
+ TExprNode& joins,
const TJoinOptions& options,
TExprContext& ctx
);
@@ -81,7 +81,7 @@ IGraphTransformer::TStatus EquiJoinConstraints(
const TUniqueConstraintNode*& unique,
const TDistinctConstraintNode*& distinct,
const TJoinLabels& labels,
- const TExprNode& joins,
+ TExprNode& joins,
TExprContext& ctx
);
diff --git a/ydb/library/yql/providers/s3/provider/yql_s3_datasink_type_ann.cpp b/ydb/library/yql/providers/s3/provider/yql_s3_datasink_type_ann.cpp
index 5ad6565cf34..cf94e8f1020 100644
--- a/ydb/library/yql/providers/s3/provider/yql_s3_datasink_type_ann.cpp
+++ b/ydb/library/yql/providers/s3/provider/yql_s3_datasink_type_ann.cpp
@@ -120,7 +120,7 @@ private:
bool hasDateTimeFormatName = false;
bool hasTimestampFormat = false;
bool hasTimestampFormatName = false;
- const auto validator = [&](TStringBuf name, const TExprNode& setting, TExprContext& ctx) {
+ const auto validator = [&](TStringBuf name, TExprNode& setting, TExprContext& ctx) {
if (name == "compression") {
const auto& value = setting.Tail();
if (!EnsureAtom(value, ctx)) {
diff --git a/ydb/library/yql/providers/s3/provider/yql_s3_datasource_type_ann.cpp b/ydb/library/yql/providers/s3/provider/yql_s3_datasource_type_ann.cpp
index c303037478e..8ba263eb5e5 100644
--- a/ydb/library/yql/providers/s3/provider/yql_s3_datasource_type_ann.cpp
+++ b/ydb/library/yql/providers/s3/provider/yql_s3_datasource_type_ann.cpp
@@ -35,7 +35,7 @@ bool ValidateS3PackedPaths(TPositionHandle pos, TStringBuf blob, bool isTextEnco
return true;
}
-bool ValidateS3Paths(const TExprNode& node, const TStructExprType*& extraColumnsType, TExprContext& ctx) {
+bool ValidateS3Paths(TExprNode& node, const TStructExprType*& extraColumnsType, TExprContext& ctx) {
if (!EnsureTupleMinSize(node, 1, ctx)) {
return false;
}
@@ -444,7 +444,7 @@ public:
}));
if (input->ChildrenSize() > TS3ReadObject::idx_ColumnOrder) {
- const auto& order = *input->Child(TS3ReadObject::idx_ColumnOrder);
+ auto& order = *input->Child(TS3ReadObject::idx_ColumnOrder);
if (!EnsureTupleOfAtoms(order, ctx)) {
return TStatus::Error;
}
@@ -506,7 +506,7 @@ public:
bool hasDateTimeFormatName = false;
bool hasTimestampFormat = false;
bool hasTimestampFormatName = false;
- auto validator = [&](TStringBuf name, const TExprNode& setting, TExprContext& ctx) {
+ auto validator = [&](TStringBuf name, TExprNode& setting, TExprContext& ctx) {
if (name != "partitionedby"sv && name != "directories"sv && setting.ChildrenSize() != 2) {
ctx.AddError(TIssue(ctx.GetPosition(setting.Pos()),
TStringBuilder() << "Expected single value setting for " << name << ", but got " << setting.ChildrenSize() - 1));
diff --git a/ydb/library/yql/providers/ydb/provider/yql_ydb_datasink_type_ann.cpp b/ydb/library/yql/providers/ydb/provider/yql_ydb_datasink_type_ann.cpp
index a4104bc9f1d..4b7151f5e68 100644
--- a/ydb/library/yql/providers/ydb/provider/yql_ydb_datasink_type_ann.cpp
+++ b/ydb/library/yql/providers/ydb/provider/yql_ydb_datasink_type_ann.cpp
@@ -41,7 +41,7 @@ public:
TStatus HandleClusterConfig(TExprBase input, TExprContext& ctx) {
const auto config = input.Cast<NNodes::TYdbClusterConfig>();
- if (!EnsureTupleOfAtoms(config.Locators().Ref(), ctx)) {
+ if (!EnsureTupleOfAtoms(config.Locators().MutableRef(), ctx)) {
return TStatus::Error;
}