diff options
author | vvvv <vvvv@ydb.tech> | 2023-04-04 14:33:26 +0300 |
---|---|---|
committer | vvvv <vvvv@ydb.tech> | 2023-04-04 14:33:26 +0300 |
commit | 32830aa8b6342ef94dd825f029f2c5d3340c6344 (patch) | |
tree | 93bc35e44fc2666f80b45de65a0f27d90bd9adf0 | |
parent | 0ec462c750577168b7d065876b42b55c2aacc299 (diff) | |
download | ydb-32830aa8b6342ef94dd825f029f2c5d3340c6344.tar.gz |
Fixed vectorization of AST literal lists
Пример запроса, на котором чинится векторизация
%%
pragma UseBlocks;
USE plato;
SELECT
key,len(key),AsDict(AsTuple(1, key))
FROM Input
%%
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; } |