diff options
author | ivanmorozov <ivanmorozov@yandex-team.com> | 2023-01-18 13:12:10 +0300 |
---|---|---|
committer | ivanmorozov <ivanmorozov@yandex-team.com> | 2023-01-18 13:12:10 +0300 |
commit | d13f90fb091bbc79f78e3fe88ce24f407cb17615 (patch) | |
tree | 6b47f203520116b3cd66f9a541f6b1454ccad86f | |
parent | c4bd4bb84b7a682445ae8aa4b725a02017e5e7ff (diff) | |
download | ydb-d13f90fb091bbc79f78e3fe88ce24f407cb17615.tar.gz |
prevent useless optimization for dq by default
canondata
canondata
canondata
canondata
13 files changed, 368 insertions, 341 deletions
diff --git a/ydb/core/kqp/ut/query/kqp_stats_ut.cpp b/ydb/core/kqp/ut/query/kqp_stats_ut.cpp index d8253a9afca..1d1e7650c3b 100644 --- a/ydb/core/kqp/ut/query/kqp_stats_ut.cpp +++ b/ydb/core/kqp/ut/query/kqp_stats_ut.cpp @@ -329,11 +329,13 @@ Y_UNIT_TEST(StatsProfile) { NJson::TJsonValue plan; NJson::ReadJsonTree(result.GetQueryPlan(), &plan, true); - auto node1 = FindPlanNodeByKv(plan, "Node Type", "Aggregate-TableFullScan"); - UNIT_ASSERT_EQUAL(node1.GetMap().at("Stats").GetMapSafe().at("ComputeNodes").GetArraySafe().size(), 2); + Cerr << plan.GetStringRobust() << Endl; + auto node1 = FindPlanNodeByKv(plan, "Node Type", "Aggregate-Limit-Aggregate"); + UNIT_ASSERT(node1.IsDefined()); + UNIT_ASSERT_EQUAL(node1.GetMap().at("Stats").GetMapSafe().at("ComputeNodes").GetArraySafe().size(), 1); auto node2 = FindPlanNodeByKv(plan, "Node Type", "Aggregate"); - UNIT_ASSERT_EQUAL(node2.GetMap().at("Stats").GetMapSafe().at("ComputeNodes").GetArraySafe().size(), 1); + UNIT_ASSERT(!node2.IsDefined()); } } // suite diff --git a/ydb/core/kqp/ut/yql/kqp_scripting_ut.cpp b/ydb/core/kqp/ut/yql/kqp_scripting_ut.cpp index 5de0a136067..cc473f36d31 100644 --- a/ydb/core/kqp/ut/yql/kqp_scripting_ut.cpp +++ b/ydb/core/kqp/ut/yql/kqp_scripting_ut.cpp @@ -485,7 +485,9 @@ Y_UNIT_TEST_SUITE(KqpScripting) { NJson::TJsonValue plan; NJson::ReadJsonTree(planJson, &plan, true); - auto node = FindPlanNodeByKv(plan.GetMap().at("queries").GetArray()[2], "Node Type", "Aggregate-TableFullScan"); + Cerr << plan.GetStringRobust() << Endl; + auto node = FindPlanNodeByKv(plan.GetMap().at("queries").GetArray()[2], "Node Type", "Aggregate-Limit-Aggregate"); + UNIT_ASSERT(node.IsDefined()); UNIT_ASSERT_EQUAL(node.GetMap().at("Stats").GetMapSafe().at("TotalTasks").GetIntegerSafe(), 1); } diff --git a/ydb/library/yql/core/common_opt/yql_co_flow1.cpp b/ydb/library/yql/core/common_opt/yql_co_flow1.cpp index 661fb3299f0..cd135f7331d 100644 --- a/ydb/library/yql/core/common_opt/yql_co_flow1.cpp +++ b/ydb/library/yql/core/common_opt/yql_co_flow1.cpp @@ -1273,306 +1273,6 @@ TExprNode::TPtr PropagateConstPremapIntoCombineByKey(const TExprNode& node, TExp return ctx.ChangeChildren(node, std::move(children)); } -TExprNode::TPtr CountAggregateRewrite(const TCoAggregate& node, TExprContext& ctx, bool useBlocks) { - auto keyColumns = node.Keys(); - auto aggregatedColumns = node.Handlers(); - if (keyColumns.Size() > 0 || aggregatedColumns.Size() != 1) { - return node.Ptr(); - } - - auto settings = node.Settings(); - auto hoppingSetting = GetSetting(settings.Ref(), "hopping"); - if (hoppingSetting) { - return node.Ptr(); - } - - if (GetSetting(settings.Ref(), "session")) { - // TODO: support - return node.Ptr(); - } - - auto aggregatedColumn = aggregatedColumns.Item(0); - const bool isDistinct = (aggregatedColumn.Ref().ChildrenSize() == 3); - - auto traits = aggregatedColumn.Ref().Child(1); - auto outputColumn = aggregatedColumn.Ref().HeadPtr(); - - // validation of traits - const TTypeAnnotationNode* inputItemType; - bool onlyColumn = true; - bool onlyZero = true; - TExprNode::TPtr initVal; - if (traits->IsCallable("AggregationTraits")) { - inputItemType = traits->Head().GetTypeAnn()->Cast<TTypeExprType>()->GetType(); - - auto init = TCoLambda(traits->Child(1)); - TExprNode::TPtr updateVal; - if (init.Body().Ref().IsCallable("Uint64") && - init.Body().Ref().Head().Content() == "1") { - onlyZero = false; - } else if (init.Body().Ref().IsCallable("Uint64") && - init.Body().Ref().Head().Content() == "0") { - onlyColumn = false; - } else if (init.Body().Ref().IsCallable("AggrCountInit")) { - initVal = init.Body().Ref().HeadPtr(); - onlyColumn = onlyColumn && init.Body().Ref().Child(0) == init.Args().Arg(0).Raw(); - onlyZero = false; - } else { - return node.Ptr(); - } - - auto update = TCoLambda(traits->Child(2)); - auto inc = update.Body().Ptr(); - if (inc->IsCallable("Inc") && inc->Child(0) == update.Args().Arg(1).Raw()) { - onlyZero = false; - } else if (inc->IsCallable("AggrCountUpdate") && inc->Child(1) == update.Args().Arg(1).Raw()) { - updateVal = inc->HeadPtr(); - onlyColumn = onlyColumn && inc->Child(0) == update.Args().Arg(0).Raw(); - onlyZero = false; - } else if (inc == update.Args().Arg(1).Raw()) { - onlyColumn = false; - } else { - return node.Ptr(); - } - - auto save = TCoLambda(traits->Child(3)); - if (save.Body().Raw() != save.Args().Arg(0).Raw()) { - return node.Ptr(); - } - - auto load = TCoLambda(traits->Child(4)); - if (load.Body().Raw() != load.Args().Arg(0).Raw()) { - return node.Ptr(); - } - - auto merge = TCoLambda(traits->Child(5)); - { - auto& plus = merge.Body().Ref(); - if (!plus.IsCallable("+")) { - return node.Ptr(); - } - - if (!(plus.Child(0) == merge.Args().Arg(0).Raw() && - plus.Child(1) == merge.Args().Arg(1).Raw())) { - return node.Ptr(); - } - } - - auto finish = TCoLambda(traits->Child(6)); - if (finish.Body().Raw() != finish.Args().Arg(0).Raw()) { - return node.Ptr(); - } - - auto defVal = traits->Child(7); - if (!defVal->IsCallable("Uint64") || defVal->Head().Content() != "0") { - return node.Ptr(); - } - - if (!isDistinct) { - if (!onlyZero && !onlyColumn) { - if (!initVal || !updateVal || initVal != updateVal) { - return node.Ptr(); - } - } - } - } else if (traits->IsCallable("AggApply")) { - if (traits->Head().Content() != "count_all" && traits->Head().Content() != "count") { - return node.Ptr(); - } - - inputItemType = traits->Child(1)->GetTypeAnn()->Cast<TTypeExprType>()->GetType(); - onlyZero = false; - onlyColumn = false; - if (&traits->Child(2)->Head().Head() == &traits->Child(2)->Tail()) { - onlyColumn = true; - } - - if (!isDistinct) { - if (IsDepended(traits->Child(2)->Tail(), traits->Child(2)->Head().Head())) { - return node.Ptr(); - } - - if (traits->Head().Content() == "count") { - initVal = traits->Child(2)->TailPtr(); - } - } - } else { - return node.Ptr(); - } - - const bool isOptionalColumn = inputItemType->GetKind() == ETypeAnnotationKind::Optional; - - if (!isDistinct) { - auto length = ctx.Builder(node.Pos()) - .Callable("Length") - .Add(0, node.Input().Ptr()) - .Seal() - .Build(); - - if (onlyZero) { - length = ctx.Builder(node.Pos()) - .Callable("Uint64") - .Atom(0, "0", TNodeFlags::Default) - .Seal() - .Build(); - } else if (!onlyColumn && initVal) { - length = ctx.Builder(node.Pos()) - .Callable("If") - .Callable(0, "Exists") - .Add(0, initVal) - .Seal() - .Add(1, std::move(length)) - .Callable(2, "Uint64") - .Atom(0, "0", TNodeFlags::Default) - .Seal() - .Seal() - .Build(); - } - - auto ret = ctx.Builder(node.Pos()) - .Callable("AsList") - .Callable(0, "AsStruct") - .List(0) - .Add(0, std::move(outputColumn)) - .Add(1, std::move(length)) - .Seal() - .Seal() - .Seal() - .Build(); - - return ret; - } - - if (useBlocks || !onlyColumn) { - return node.Ptr(); - } - auto removedOptionalType = inputItemType; - if (isOptionalColumn) { - removedOptionalType = removedOptionalType->Cast<TOptionalExprType>()->GetItemType(); - } - - const bool needPickle = removedOptionalType->GetKind() != ETypeAnnotationKind::Data; - auto pickleTypeNode = ExpandType(node.Pos(), *inputItemType, ctx); - - auto distictColumn = aggregatedColumn.Ref().ChildPtr(2); - auto combine = ctx.Builder(node.Pos()) - .Callable("CombineByKey") - .Callable(0, "ExtractMembers") - .Add(0, node.Input().Ptr()) - .List(1) - .Add(0, distictColumn) - .Seal() - .Seal() - .Lambda(1) - .Param("row") - .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& { - if (isOptionalColumn) { - parent.Callable("Map") - .Callable(0, "Member") - .Arg(0, "row") - .Add(1, distictColumn) - .Seal() - .Lambda(1) - .Param("unpacked") - .Arg("unpacked") - .Seal() - .Seal(); - } else { - parent.Callable("Just") - .Callable(0, "Member") - .Arg(0, "row") - .Add(1, distictColumn) - .Seal() - .Seal(); - } - - return parent; - }) - .Seal() - .Lambda(2) - .Param("item") - .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& { - if (needPickle) { - parent.Callable("StablePickle") - .Arg(0, "item") - .Seal(); - } else { - parent.Arg("item"); - } - return parent; - }) - .Seal() - .Lambda(3) - .Param("key") - .Param("item") - .Callable("Void") - .Seal() - .Seal() - .Lambda(4) - .Param("key") - .Param("item") - .Param("state") - .Arg("state") - .Seal() - .Lambda(5) - .Param("key") - .Param("state") - .Callable("Just") - .Callable(0, "AsStruct") - .List(0) - .Atom(0, "value") - .Arg(1, "key") - .Seal() - .Seal() - .Seal() - .Seal() - .Seal() - .Build(); - - auto groupByKey = ctx.Builder(node.Pos()) - .Callable("PartitionByKey") - .Add(0, combine) - .Lambda(1) - .Param("combineRow") - .Callable("Member") - .Arg(0, "combineRow") - .Atom(1, "value") - .Seal() - .Seal() - .Callable(2, "Void") - .Seal() - .Callable(3, "Void") - .Seal() - .Lambda(4) - .Param("groups") - .Callable("Map") - .Arg(0, "groups") - .Lambda(1) - .Param("group") - .Callable("AsStruct") - .Seal() - .Seal() - .Seal() - .Seal() - .Seal() - .Build(); - - auto ret = ctx.Builder(node.Pos()) - .Callable("AsList") - .Callable(0, "AsStruct") - .List(0) - .Add(0, outputColumn) - .Callable(1, "Length") - .Add(0, std::move(groupByKey)) - .Seal() - .Seal() - .Seal() - .Seal() - .Build(); - - return ret; -} - TExprNode::TPtr OptimizeReverse(const TExprNode::TPtr& node, TExprContext& ctx, TOptimizeContext& optCtx) { if (optCtx.IsSingleUsage(node->Head()) && node->Head().IsCallable({"Sort", "AssumeSorted"})) { YQL_CLOG(DEBUG, Core) << node->Content() << " over " << node->Head().Content(); @@ -2103,21 +1803,6 @@ void RegisterCoFlowCallables1(TCallableOptimizerMap& map) { return node; }; - map["Aggregate"] = [](const TExprNode::TPtr& node, TExprContext& ctx, TOptimizeContext& optCtx) { - if (!optCtx.IsSingleUsage(node->Head()) && !optCtx.IsPersistentNode(node->Head())) { - return node; - } - - TCoAggregate self(node); - auto ret = CountAggregateRewrite(self, ctx, optCtx.Types->UseBlocks); - if (ret != node) { - YQL_CLOG(DEBUG, Core) << "CountAggregateRewrite"; - return ret; - } - - return node; - }; - map["Reverse"] = std::bind(&OptimizeReverse, _1, _2, _3); map["Visit"] = [](const TExprNode::TPtr& node, TExprContext& ctx, TOptimizeContext& optCtx) { diff --git a/ydb/library/yql/core/yql_aggregate_expander.cpp b/ydb/library/yql/core/yql_aggregate_expander.cpp index 4e941353445..105fd8ff0c3 100644 --- a/ydb/library/yql/core/yql_aggregate_expander.cpp +++ b/ydb/library/yql/core/yql_aggregate_expander.cpp @@ -1343,6 +1343,307 @@ TExprNode::TPtr TAggregateExpander::BuildFinalizeByKeyLambda(const TExprNode::TP .Seal().Build(); } + +TExprNode::TPtr TAggregateExpander::CountAggregateRewrite(const NNodes::TCoAggregate& node, TExprContext& ctx, bool useBlocks) { + auto keyColumns = node.Keys(); + auto aggregatedColumns = node.Handlers(); + if (keyColumns.Size() > 0 || aggregatedColumns.Size() != 1) { + return node.Ptr(); + } + + auto settings = node.Settings(); + auto hoppingSetting = GetSetting(settings.Ref(), "hopping"); + if (hoppingSetting) { + return node.Ptr(); + } + + if (GetSetting(settings.Ref(), "session")) { + // TODO: support + return node.Ptr(); + } + + auto aggregatedColumn = aggregatedColumns.Item(0); + const bool isDistinct = (aggregatedColumn.Ref().ChildrenSize() == 3); + + auto traits = aggregatedColumn.Ref().Child(1); + auto outputColumn = aggregatedColumn.Ref().HeadPtr(); + + // validation of traits + const TTypeAnnotationNode* inputItemType; + bool onlyColumn = true; + bool onlyZero = true; + TExprNode::TPtr initVal; + if (traits->IsCallable("AggregationTraits")) { + inputItemType = traits->Head().GetTypeAnn()->Cast<TTypeExprType>()->GetType(); + + auto init = NNodes::TCoLambda(traits->Child(1)); + TExprNode::TPtr updateVal; + if (init.Body().Ref().IsCallable("Uint64") && + init.Body().Ref().Head().Content() == "1") { + onlyZero = false; + } else if (init.Body().Ref().IsCallable("Uint64") && + init.Body().Ref().Head().Content() == "0") { + onlyColumn = false; + } else if (init.Body().Ref().IsCallable("AggrCountInit")) { + initVal = init.Body().Ref().HeadPtr(); + onlyColumn = onlyColumn && init.Body().Ref().Child(0) == init.Args().Arg(0).Raw(); + onlyZero = false; + } else { + return node.Ptr(); + } + + auto update = NNodes::TCoLambda(traits->Child(2)); + auto inc = update.Body().Ptr(); + if (inc->IsCallable("Inc") && inc->Child(0) == update.Args().Arg(1).Raw()) { + onlyZero = false; + } else if (inc->IsCallable("AggrCountUpdate") && inc->Child(1) == update.Args().Arg(1).Raw()) { + updateVal = inc->HeadPtr(); + onlyColumn = onlyColumn && inc->Child(0) == update.Args().Arg(0).Raw(); + onlyZero = false; + } else if (inc == update.Args().Arg(1).Raw()) { + onlyColumn = false; + } else { + return node.Ptr(); + } + + auto save = NNodes::TCoLambda(traits->Child(3)); + if (save.Body().Raw() != save.Args().Arg(0).Raw()) { + return node.Ptr(); + } + + auto load = NNodes::TCoLambda(traits->Child(4)); + if (load.Body().Raw() != load.Args().Arg(0).Raw()) { + return node.Ptr(); + } + + auto merge = NNodes::TCoLambda(traits->Child(5)); + { + auto& plus = merge.Body().Ref(); + if (!plus.IsCallable("+")) { + return node.Ptr(); + } + + if (!(plus.Child(0) == merge.Args().Arg(0).Raw() && + plus.Child(1) == merge.Args().Arg(1).Raw())) { + return node.Ptr(); + } + } + + auto finish = NNodes::TCoLambda(traits->Child(6)); + if (finish.Body().Raw() != finish.Args().Arg(0).Raw()) { + return node.Ptr(); + } + + auto defVal = traits->Child(7); + if (!defVal->IsCallable("Uint64") || defVal->Head().Content() != "0") { + return node.Ptr(); + } + + if (!isDistinct) { + if (!onlyZero && !onlyColumn) { + if (!initVal || !updateVal || initVal != updateVal) { + return node.Ptr(); + } + } + } + } else if (traits->IsCallable("AggApply")) { + if (traits->Head().Content() != "count_all" && traits->Head().Content() != "count") { + return node.Ptr(); + } + + inputItemType = traits->Child(1)->GetTypeAnn()->Cast<TTypeExprType>()->GetType(); + onlyZero = false; + onlyColumn = false; + if (&traits->Child(2)->Head().Head() == &traits->Child(2)->Tail()) { + onlyColumn = true; + } + + if (!isDistinct) { + if (IsDepended(traits->Child(2)->Tail(), traits->Child(2)->Head().Head())) { + return node.Ptr(); + } + + if (traits->Head().Content() == "count") { + initVal = traits->Child(2)->TailPtr(); + } + } + } else { + return node.Ptr(); + } + + const bool isOptionalColumn = inputItemType->GetKind() == ETypeAnnotationKind::Optional; + + if (!isDistinct) { + auto length = ctx.Builder(node.Pos()) + .Callable("Length") + .Add(0, node.Input().Ptr()) + .Seal() + .Build(); + + if (onlyZero) { + length = ctx.Builder(node.Pos()) + .Callable("Uint64") + .Atom(0, "0", TNodeFlags::Default) + .Seal() + .Build(); + } else if (!onlyColumn && initVal) { + length = ctx.Builder(node.Pos()) + .Callable("If") + .Callable(0, "Exists") + .Add(0, initVal) + .Seal() + .Add(1, std::move(length)) + .Callable(2, "Uint64") + .Atom(0, "0", TNodeFlags::Default) + .Seal() + .Seal() + .Build(); + } + + auto ret = ctx.Builder(node.Pos()) + .Callable("AsList") + .Callable(0, "AsStruct") + .List(0) + .Add(0, std::move(outputColumn)) + .Add(1, std::move(length)) + .Seal() + .Seal() + .Seal() + .Build(); + + return ret; + } + + if (useBlocks || !onlyColumn) { + return node.Ptr(); + } + auto removedOptionalType = inputItemType; + if (isOptionalColumn) { + removedOptionalType = removedOptionalType->Cast<TOptionalExprType>()->GetItemType(); + } + + const bool needPickle = removedOptionalType->GetKind() != ETypeAnnotationKind::Data; + auto pickleTypeNode = ExpandType(node.Pos(), *inputItemType, ctx); + + auto distictColumn = aggregatedColumn.Ref().ChildPtr(2); + auto combine = ctx.Builder(node.Pos()) + .Callable("CombineByKey") + .Callable(0, "ExtractMembers") + .Add(0, node.Input().Ptr()) + .List(1) + .Add(0, distictColumn) + .Seal() + .Seal() + .Lambda(1) + .Param("row") + .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& { + if (isOptionalColumn) { + parent.Callable("Map") + .Callable(0, "Member") + .Arg(0, "row") + .Add(1, distictColumn) + .Seal() + .Lambda(1) + .Param("unpacked") + .Arg("unpacked") + .Seal() + .Seal(); + } else { + parent.Callable("Just") + .Callable(0, "Member") + .Arg(0, "row") + .Add(1, distictColumn) + .Seal() + .Seal(); + } + + return parent; + }) + .Seal() + .Lambda(2) + .Param("item") + .Do([&](TExprNodeBuilder& parent) -> TExprNodeBuilder& { + if (needPickle) { + parent.Callable("StablePickle") + .Arg(0, "item") + .Seal(); + } else { + parent.Arg("item"); + } + return parent; + }) + .Seal() + .Lambda(3) + .Param("key") + .Param("item") + .Callable("Void") + .Seal() + .Seal() + .Lambda(4) + .Param("key") + .Param("item") + .Param("state") + .Arg("state") + .Seal() + .Lambda(5) + .Param("key") + .Param("state") + .Callable("Just") + .Callable(0, "AsStruct") + .List(0) + .Atom(0, "value") + .Arg(1, "key") + .Seal() + .Seal() + .Seal() + .Seal() + .Seal() + .Build(); + + auto groupByKey = ctx.Builder(node.Pos()) + .Callable("PartitionByKey") + .Add(0, combine) + .Lambda(1) + .Param("combineRow") + .Callable("Member") + .Arg(0, "combineRow") + .Atom(1, "value") + .Seal() + .Seal() + .Callable(2, "Void") + .Seal() + .Callable(3, "Void") + .Seal() + .Lambda(4) + .Param("groups") + .Callable("Map") + .Arg(0, "groups") + .Lambda(1) + .Param("group") + .Callable("AsStruct") + .Seal() + .Seal() + .Seal() + .Seal() + .Seal() + .Build(); + + auto ret = ctx.Builder(node.Pos()) + .Callable("AsList") + .Callable(0, "AsStruct") + .List(0) + .Add(0, outputColumn) + .Callable(1, "Length") + .Add(0, std::move(groupByKey)) + .Seal() + .Seal() + .Seal() + .Seal() + .Build(); + + return ret; +} + TExprNode::TPtr TAggregateExpander::GeneratePostAggregate(const TExprNode::TPtr& preAgg, const TExprNode::TPtr& keyExtractor) { auto preprocessLambda = GeneratePreprocessLambda(keyExtractor); @@ -2538,4 +2839,16 @@ TExprNode::TPtr TAggregateExpander::TryGenerateBlockMergeFinalizeHashed() { .Build(); } +TExprNode::TPtr ExpandAggregatePeephole(const TExprNode::TPtr& node, TExprContext& ctx, TTypeAnnotationContext& typesCtx) { + if (NNodes::TCoAggregate::Match(node.Get())) { + NNodes::TCoAggregate self(node); + auto ret = TAggregateExpander::CountAggregateRewrite(self, ctx, typesCtx.UseBlocks); + if (ret != node) { + YQL_CLOG(DEBUG, Core) << "CountAggregateRewrite on peephole"; + return ret; + } + } + return ExpandAggregatePeepholeImpl(node, ctx, typesCtx, false, typesCtx.UseBlocks); +} + } // namespace NYql diff --git a/ydb/library/yql/core/yql_aggregate_expander.h b/ydb/library/yql/core/yql_aggregate_expander.h index 7beef9e1626..0f983982e05 100644 --- a/ydb/library/yql/core/yql_aggregate_expander.h +++ b/ydb/library/yql/core/yql_aggregate_expander.h @@ -39,6 +39,7 @@ public: } TExprNode::TPtr ExpandAggregate(); + static TExprNode::TPtr CountAggregateRewrite(const NNodes::TCoAggregate& node, TExprContext& ctx, bool useBlocks); private: using TIdxSet = std::set<ui32>; @@ -135,8 +136,6 @@ inline TExprNode::TPtr ExpandAggregatePeepholeImpl(const TExprNode::TPtr& node, return aggExpander.ExpandAggregate(); } -inline TExprNode::TPtr ExpandAggregatePeephole(const TExprNode::TPtr& node, TExprContext& ctx, TTypeAnnotationContext& typesCtx) { - return ExpandAggregatePeepholeImpl(node, ctx, typesCtx, false, typesCtx.UseBlocks); -} +TExprNode::TPtr ExpandAggregatePeephole(const TExprNode::TPtr& node, TExprContext& ctx, TTypeAnnotationContext& typesCtx); } diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_explain.script-script_/explain.script.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_explain.script-script_/explain.script.plan index 742eb7c912a..c755cb229d4 100644 --- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_explain.script-script_/explain.script.plan +++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_explain.script-script_/explain.script.plan @@ -70,9 +70,6 @@ "PlanNodeId": 1, "Operators": [ { - "Name": "Aggregate" - }, - { "ReadRanges": [ "Key (-\u221e, +\u221e)" ], @@ -81,7 +78,7 @@ "Table": "base_explain_script_script/ScriptingTest" } ], - "Node Type": "Aggregate-TableFullScan" + "Node Type": "TableFullScan" } ], "Node Type": "UnionAll", @@ -91,9 +88,16 @@ "Operators": [ { "Name": "Aggregate" + }, + { + "Name": "Limit", + "Limit": "1" + }, + { + "Name": "Aggregate" } ], - "Node Type": "Aggregate" + "Node Type": "Aggregate-Limit-Aggregate" } ], "Node Type": "ResultSet", @@ -168,6 +172,8 @@ "PlanNodeId": 1, "Operators": [ { + "GroupBy": "0", + "Aggregation": "{_yql_agg_0: Inc(state._yql_agg_0)}", "Name": "Aggregate" }, { @@ -189,9 +195,16 @@ "Operators": [ { "Name": "Aggregate" + }, + { + "Name": "Limit", + "Limit": "1" + }, + { + "Name": "Aggregate" } ], - "Node Type": "Aggregate" + "Node Type": "Aggregate-Limit-Aggregate" } ], "Node Type": "Precompute_0", @@ -235,9 +248,6 @@ "PlanNodeId": 1, "Operators": [ { - "Name": "Aggregate" - }, - { "ReadRanges": [ "Key (-\u221e, +\u221e)" ], @@ -246,7 +256,7 @@ "Table": "base_explain_script_script/ScriptingTest" } ], - "Node Type": "Aggregate-TableFullScan" + "Node Type": "TableFullScan" } ], "Node Type": "UnionAll", @@ -256,9 +266,16 @@ "Operators": [ { "Name": "Aggregate" + }, + { + "Name": "Limit", + "Limit": "1" + }, + { + "Name": "Aggregate" } ], - "Node Type": "Aggregate" + "Node Type": "Aggregate-Limit-Aggregate" } ], "Node Type": "ResultSet", @@ -333,6 +350,8 @@ "PlanNodeId": 1, "Operators": [ { + "GroupBy": "0", + "Aggregation": "{_yql_agg_0: Inc(state._yql_agg_0)}", "Name": "Aggregate" }, { @@ -354,9 +373,16 @@ "Operators": [ { "Name": "Aggregate" + }, + { + "Name": "Limit", + "Limit": "1" + }, + { + "Name": "Aggregate" } ], - "Node Type": "Aggregate" + "Node Type": "Aggregate-Limit-Aggregate" } ], "Node Type": "Precompute_0", diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_16.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_16.plan index 115975769b6..8881814d318 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_16.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_16.plan @@ -1 +1 @@ -"{\n \"meta\":\n {\n \"version\":\"0.2\",\n \"type\":\"query\"\n },\n \"tables\":[\n {\n \"name\":\"\\/Root\\/postgres_jointest\\/join0.test_plan\\/tenk1\",\n \"reads\":\n [\n {\n \"type\":\"FullScan\",\n \"scan_by\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"columns\":\n [\n \"unique2\"\n ]\n },\n {\n \"type\":\"FullScan\",\n \"scan_by\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"columns\":\n [\n \"unique2\"\n ]\n }\n ]\n }\n],\n \"Plan\":\n {\n \"Node Type\":\"Query\",\n \"PlanNodeType\":\"Query\",\n \"Plans\":\n [\n {\n \"Node Type\":\"ResultSet\",\n \"PlanNodeId\":12,\n \"PlanNodeType\":\"ResultSet\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate\",\n \"Operators\":\n [\n {\n \"Name\":\"Aggregate\"\n }\n ],\n \"PlanNodeId\":11,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":10,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate-Filter-FullJoin (JoinDict)\",\n \"Operators\":\n [\n {\n \"Name\":\"Aggregate\"\n },\n {\n \"Name\":\"Filter\",\n \"Predicate\":\"Nth.unique2 == 42\"\n },\n {\n \"Name\":\"FullJoin (JoinDict)\"\n }\n ],\n \"PlanNodeId\":9,\n \"Plans\":\n [\n {\n \"KeyColumns\":\n [\n \"unique2\"\n ],\n \"Node Type\":\"HashShuffle\",\n \"PlanNodeId\":4,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Collect\",\n \"PlanNodeId\":3,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":2,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"TableFullScan\",\n \"Operators\":\n [\n {\n \"Name\":\"TableFullScan\",\n \"ReadColumns\":\n [\n \"unique2\"\n ],\n \"ReadRanges\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"Table\":\"postgres_jointest\\/join0.test_plan\\/tenk1\"\n }\n ],\n \"PlanNodeId\":1,\n \"Tables\":\n [\n \"postgres_jointest\\/join0.test_plan\\/tenk1\"\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"KeyColumns\":\n [\n \"unique2\"\n ],\n \"Node Type\":\"HashShuffle\",\n \"PlanNodeId\":8,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Collect\",\n \"PlanNodeId\":7,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":6,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"TableFullScan\",\n \"Operators\":\n [\n {\n \"Name\":\"TableFullScan\",\n \"ReadColumns\":\n [\n \"unique2\"\n ],\n \"ReadRanges\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"Table\":\"postgres_jointest\\/join0.test_plan\\/tenk1\"\n }\n ],\n \"PlanNodeId\":5,\n \"Tables\":\n [\n \"postgres_jointest\\/join0.test_plan\\/tenk1\"\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n}"
\ No newline at end of file +"{\n \"meta\":\n {\n \"version\":\"0.2\",\n \"type\":\"query\"\n },\n \"tables\":[\n {\n \"name\":\"\\/Root\\/postgres_jointest\\/join0.test_plan\\/tenk1\",\n \"reads\":\n [\n {\n \"type\":\"FullScan\",\n \"scan_by\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"columns\":\n [\n \"unique2\"\n ]\n },\n {\n \"type\":\"FullScan\",\n \"scan_by\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"columns\":\n [\n \"unique2\"\n ]\n }\n ]\n }\n],\n \"Plan\":\n {\n \"Node Type\":\"Query\",\n \"PlanNodeType\":\"Query\",\n \"Plans\":\n [\n {\n \"Node Type\":\"ResultSet\",\n \"PlanNodeId\":12,\n \"PlanNodeType\":\"ResultSet\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate-Limit-Aggregate\",\n \"Operators\":\n [\n {\n \"Name\":\"Aggregate\"\n },\n {\n \"Limit\":\"1\",\n \"Name\":\"Limit\"\n },\n {\n \"Name\":\"Aggregate\"\n }\n ],\n \"PlanNodeId\":11,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":10,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate-Filter-FullJoin (JoinDict)\",\n \"Operators\":\n [\n {\n \"Aggregation\":\"{_yql_agg_0: Inc(state._yql_agg_0)}\",\n \"GroupBy\":\"0\",\n \"Name\":\"Aggregate\"\n },\n {\n \"Name\":\"Filter\",\n \"Predicate\":\"Nth.unique2 == 42\"\n },\n {\n \"Name\":\"FullJoin (JoinDict)\"\n }\n ],\n \"PlanNodeId\":9,\n \"Plans\":\n [\n {\n \"KeyColumns\":\n [\n \"unique2\"\n ],\n \"Node Type\":\"HashShuffle\",\n \"PlanNodeId\":4,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Collect\",\n \"PlanNodeId\":3,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":2,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"TableFullScan\",\n \"Operators\":\n [\n {\n \"Name\":\"TableFullScan\",\n \"ReadColumns\":\n [\n \"unique2\"\n ],\n \"ReadRanges\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"Table\":\"postgres_jointest\\/join0.test_plan\\/tenk1\"\n }\n ],\n \"PlanNodeId\":1,\n \"Tables\":\n [\n \"postgres_jointest\\/join0.test_plan\\/tenk1\"\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"KeyColumns\":\n [\n \"unique2\"\n ],\n \"Node Type\":\"HashShuffle\",\n \"PlanNodeId\":8,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Collect\",\n \"PlanNodeId\":7,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":6,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"TableFullScan\",\n \"Operators\":\n [\n {\n \"Name\":\"TableFullScan\",\n \"ReadColumns\":\n [\n \"unique2\"\n ],\n \"ReadRanges\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"Table\":\"postgres_jointest\\/join0.test_plan\\/tenk1\"\n }\n ],\n \"PlanNodeId\":5,\n \"Tables\":\n [\n \"postgres_jointest\\/join0.test_plan\\/tenk1\"\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n}"
\ No newline at end of file diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_3.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_3.plan index 5c90b38830e..dbf1e8ef1cb 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_3.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_3.plan @@ -1 +1 @@ -"{\n \"meta\":\n {\n \"version\":\"0.2\",\n \"type\":\"query\"\n },\n \"tables\":[\n {\n \"name\":\"\\/Root\\/postgres_jointest\\/join0.test_plan\\/tenk1\",\n \"reads\":\n [\n {\n \"type\":\"FullScan\",\n \"scan_by\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"columns\":\n [\n \"fivethous\",\n \"hundred\",\n \"thousand\"\n ]\n },\n {\n \"type\":\"FullScan\",\n \"scan_by\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"columns\":\n [\n \"fivethous\",\n \"hundred\",\n \"thousand\"\n ]\n }\n ]\n }\n],\n \"Plan\":\n {\n \"Node Type\":\"Query\",\n \"PlanNodeType\":\"Query\",\n \"Plans\":\n [\n {\n \"Node Type\":\"ResultSet\",\n \"PlanNodeId\":10,\n \"PlanNodeType\":\"ResultSet\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate\",\n \"Operators\":\n [\n {\n \"Name\":\"Aggregate\"\n }\n ],\n \"PlanNodeId\":9,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":8,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate-InnerJoin (MapJoin)-Filter\",\n \"Operators\":\n [\n {\n \"Name\":\"Aggregate\"\n },\n {\n \"Name\":\"InnerJoin (MapJoin)\"\n },\n {\n \"Name\":\"Filter\",\n \"Predicate\":\"Exist(item.hundred)\"\n }\n ],\n \"PlanNodeId\":7,\n \"Plans\":\n [\n {\n \"Node Type\":\"Broadcast\",\n \"PlanNodeId\":4,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Collect\",\n \"PlanNodeId\":3,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":2,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Filter-TableFullScan\",\n \"Operators\":\n [\n {\n \"Name\":\"Filter\",\n \"Predicate\":\"Exist(items2) And items0 % 10 \\u003C 10\"\n },\n {\n \"Name\":\"TableFullScan\",\n \"ReadColumns\":\n [\n \"fivethous\",\n \"hundred\",\n \"thousand\"\n ],\n \"ReadRanges\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"Table\":\"postgres_jointest\\/join0.test_plan\\/tenk1\"\n }\n ],\n \"PlanNodeId\":1,\n \"Tables\":\n [\n \"postgres_jointest\\/join0.test_plan\\/tenk1\"\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"Node Type\":\"Map\",\n \"PlanNodeId\":6,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"TableFullScan\",\n \"Operators\":\n [\n {\n \"Name\":\"TableFullScan\",\n \"ReadColumns\":\n [\n \"fivethous\",\n \"hundred\",\n \"thousand\"\n ],\n \"ReadRanges\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"Table\":\"postgres_jointest\\/join0.test_plan\\/tenk1\"\n }\n ],\n \"PlanNodeId\":5,\n \"Tables\":\n [\n \"postgres_jointest\\/join0.test_plan\\/tenk1\"\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n}"
\ No newline at end of file +"{\n \"meta\":\n {\n \"version\":\"0.2\",\n \"type\":\"query\"\n },\n \"tables\":[\n {\n \"name\":\"\\/Root\\/postgres_jointest\\/join0.test_plan\\/tenk1\",\n \"reads\":\n [\n {\n \"type\":\"FullScan\",\n \"scan_by\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"columns\":\n [\n \"fivethous\",\n \"hundred\",\n \"thousand\"\n ]\n },\n {\n \"type\":\"FullScan\",\n \"scan_by\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"columns\":\n [\n \"fivethous\",\n \"hundred\",\n \"thousand\"\n ]\n }\n ]\n }\n],\n \"Plan\":\n {\n \"Node Type\":\"Query\",\n \"PlanNodeType\":\"Query\",\n \"Plans\":\n [\n {\n \"Node Type\":\"ResultSet\",\n \"PlanNodeId\":10,\n \"PlanNodeType\":\"ResultSet\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate-Limit-Aggregate\",\n \"Operators\":\n [\n {\n \"Name\":\"Aggregate\"\n },\n {\n \"Limit\":\"1\",\n \"Name\":\"Limit\"\n },\n {\n \"Name\":\"Aggregate\"\n }\n ],\n \"PlanNodeId\":9,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":8,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate-InnerJoin (MapJoin)-Filter\",\n \"Operators\":\n [\n {\n \"Aggregation\":\"{_yql_agg_0: Inc(state._yql_agg_0)}\",\n \"GroupBy\":\"0\",\n \"Name\":\"Aggregate\"\n },\n {\n \"Name\":\"InnerJoin (MapJoin)\"\n },\n {\n \"Name\":\"Filter\",\n \"Predicate\":\"Exist(item.hundred)\"\n }\n ],\n \"PlanNodeId\":7,\n \"Plans\":\n [\n {\n \"Node Type\":\"Broadcast\",\n \"PlanNodeId\":4,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Collect\",\n \"PlanNodeId\":3,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":2,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Filter-TableFullScan\",\n \"Operators\":\n [\n {\n \"Name\":\"Filter\",\n \"Predicate\":\"Exist(items2) And items0 % 10 \\u003C 10\"\n },\n {\n \"Name\":\"TableFullScan\",\n \"ReadColumns\":\n [\n \"fivethous\",\n \"hundred\",\n \"thousand\"\n ],\n \"ReadRanges\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"Table\":\"postgres_jointest\\/join0.test_plan\\/tenk1\"\n }\n ],\n \"PlanNodeId\":1,\n \"Tables\":\n [\n \"postgres_jointest\\/join0.test_plan\\/tenk1\"\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"Node Type\":\"Map\",\n \"PlanNodeId\":6,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"TableFullScan\",\n \"Operators\":\n [\n {\n \"Name\":\"TableFullScan\",\n \"ReadColumns\":\n [\n \"fivethous\",\n \"hundred\",\n \"thousand\"\n ],\n \"ReadRanges\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"Table\":\"postgres_jointest\\/join0.test_plan\\/tenk1\"\n }\n ],\n \"PlanNodeId\":5,\n \"Tables\":\n [\n \"postgres_jointest\\/join0.test_plan\\/tenk1\"\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n}"
\ No newline at end of file diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_7.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_7.plan index 554f492fc12..de15be4f4ae 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_7.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_7.plan @@ -1 +1 @@ -"{\n \"meta\":\n {\n \"version\":\"0.2\",\n \"type\":\"query\"\n },\n \"tables\":[\n {\n \"name\":\"\\/Root\\/postgres_jointest\\/join0.test_plan\\/tenk1\",\n \"reads\":\n [\n {\n \"type\":\"FullScan\",\n \"scan_by\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"columns\":\n [\n \"hundred\",\n \"ten\",\n \"thousand\",\n \"unique2\"\n ]\n },\n {\n \"type\":\"FullScan\",\n \"scan_by\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"columns\":\n [\n \"hundred\",\n \"ten\",\n \"thousand\",\n \"unique2\"\n ]\n },\n {\n \"type\":\"Lookup\",\n \"lookup_by\":\n [\n \"unique1 (1)\"\n ],\n \"scan_by\":\n [\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"columns\":\n [\n \"hundred\",\n \"ten\"\n ]\n }\n ]\n }\n],\n \"Plan\":\n {\n \"Node Type\":\"Query\",\n \"PlanNodeType\":\"Query\",\n \"Plans\":\n [\n {\n \"Node Type\":\"ResultSet\",\n \"PlanNodeId\":16,\n \"PlanNodeType\":\"ResultSet\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate\",\n \"Operators\":\n [\n {\n \"Name\":\"Aggregate\"\n }\n ],\n \"PlanNodeId\":15,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":14,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate-LeftJoin (MapJoin)\",\n \"Operators\":\n [\n {\n \"Name\":\"Aggregate\"\n },\n {\n \"Name\":\"LeftJoin (MapJoin)\"\n }\n ],\n \"PlanNodeId\":13,\n \"Plans\":\n [\n {\n \"Node Type\":\"Broadcast\",\n \"PlanNodeId\":10,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Collect\",\n \"PlanNodeId\":9,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":8,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"InnerJoin (MapJoin)-Filter\",\n \"Operators\":\n [\n {\n \"Name\":\"InnerJoin (MapJoin)\"\n },\n {\n \"Name\":\"Filter\",\n \"Predicate\":\"Exist(item.thousand)\"\n }\n ],\n \"PlanNodeId\":7,\n \"Plans\":\n [\n {\n \"Node Type\":\"Broadcast\",\n \"PlanNodeId\":4,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Collect\",\n \"PlanNodeId\":3,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":2,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"TableFullScan\",\n \"Operators\":\n [\n {\n \"Name\":\"TableFullScan\",\n \"ReadColumns\":\n [\n \"hundred\",\n \"ten\",\n \"thousand\",\n \"unique2\"\n ],\n \"ReadRanges\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"Table\":\"postgres_jointest\\/join0.test_plan\\/tenk1\"\n }\n ],\n \"PlanNodeId\":1,\n \"Tables\":\n [\n \"postgres_jointest\\/join0.test_plan\\/tenk1\"\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"Node Type\":\"Map\",\n \"PlanNodeId\":6,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"TableFullScan\",\n \"Operators\":\n [\n {\n \"Name\":\"TableFullScan\",\n \"ReadColumns\":\n [\n \"hundred\",\n \"ten\",\n \"thousand\",\n \"unique2\"\n ],\n \"ReadRanges\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"Table\":\"postgres_jointest\\/join0.test_plan\\/tenk1\"\n }\n ],\n \"PlanNodeId\":5,\n \"Tables\":\n [\n \"postgres_jointest\\/join0.test_plan\\/tenk1\"\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"Node Type\":\"Map\",\n \"PlanNodeId\":12,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"TablePointLookup\",\n \"Operators\":\n [\n {\n \"Name\":\"TablePointLookup\",\n \"ReadColumns\":\n [\n \"hundred\",\n \"ten\"\n ],\n \"ReadRange\":\n [\n \"unique1 (1)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"Table\":\"postgres_jointest\\/join0.test_plan\\/tenk1\"\n }\n ],\n \"PlanNodeId\":11,\n \"Tables\":\n [\n \"postgres_jointest\\/join0.test_plan\\/tenk1\"\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n}"
\ No newline at end of file +"{\n \"meta\":\n {\n \"version\":\"0.2\",\n \"type\":\"query\"\n },\n \"tables\":[\n {\n \"name\":\"\\/Root\\/postgres_jointest\\/join0.test_plan\\/tenk1\",\n \"reads\":\n [\n {\n \"type\":\"FullScan\",\n \"scan_by\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"columns\":\n [\n \"hundred\",\n \"ten\",\n \"thousand\",\n \"unique2\"\n ]\n },\n {\n \"type\":\"FullScan\",\n \"scan_by\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"columns\":\n [\n \"hundred\",\n \"ten\",\n \"thousand\",\n \"unique2\"\n ]\n },\n {\n \"type\":\"Lookup\",\n \"lookup_by\":\n [\n \"unique1 (1)\"\n ],\n \"scan_by\":\n [\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"columns\":\n [\n \"hundred\",\n \"ten\"\n ]\n }\n ]\n }\n],\n \"Plan\":\n {\n \"Node Type\":\"Query\",\n \"PlanNodeType\":\"Query\",\n \"Plans\":\n [\n {\n \"Node Type\":\"ResultSet\",\n \"PlanNodeId\":16,\n \"PlanNodeType\":\"ResultSet\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate-Limit-Aggregate\",\n \"Operators\":\n [\n {\n \"Name\":\"Aggregate\"\n },\n {\n \"Limit\":\"1\",\n \"Name\":\"Limit\"\n },\n {\n \"Name\":\"Aggregate\"\n }\n ],\n \"PlanNodeId\":15,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":14,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate-LeftJoin (MapJoin)\",\n \"Operators\":\n [\n {\n \"Aggregation\":\"{_yql_agg_0: Inc(state._yql_agg_0)}\",\n \"GroupBy\":\"0\",\n \"Name\":\"Aggregate\"\n },\n {\n \"Name\":\"LeftJoin (MapJoin)\"\n }\n ],\n \"PlanNodeId\":13,\n \"Plans\":\n [\n {\n \"Node Type\":\"Broadcast\",\n \"PlanNodeId\":10,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Collect\",\n \"PlanNodeId\":9,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":8,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"InnerJoin (MapJoin)-Filter\",\n \"Operators\":\n [\n {\n \"Name\":\"InnerJoin (MapJoin)\"\n },\n {\n \"Name\":\"Filter\",\n \"Predicate\":\"Exist(item.thousand)\"\n }\n ],\n \"PlanNodeId\":7,\n \"Plans\":\n [\n {\n \"Node Type\":\"Broadcast\",\n \"PlanNodeId\":4,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Collect\",\n \"PlanNodeId\":3,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":2,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"TableFullScan\",\n \"Operators\":\n [\n {\n \"Name\":\"TableFullScan\",\n \"ReadColumns\":\n [\n \"hundred\",\n \"ten\",\n \"thousand\",\n \"unique2\"\n ],\n \"ReadRanges\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"Table\":\"postgres_jointest\\/join0.test_plan\\/tenk1\"\n }\n ],\n \"PlanNodeId\":1,\n \"Tables\":\n [\n \"postgres_jointest\\/join0.test_plan\\/tenk1\"\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"Node Type\":\"Map\",\n \"PlanNodeId\":6,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"TableFullScan\",\n \"Operators\":\n [\n {\n \"Name\":\"TableFullScan\",\n \"ReadColumns\":\n [\n \"hundred\",\n \"ten\",\n \"thousand\",\n \"unique2\"\n ],\n \"ReadRanges\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"Table\":\"postgres_jointest\\/join0.test_plan\\/tenk1\"\n }\n ],\n \"PlanNodeId\":5,\n \"Tables\":\n [\n \"postgres_jointest\\/join0.test_plan\\/tenk1\"\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"Node Type\":\"Map\",\n \"PlanNodeId\":12,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"TablePointLookup\",\n \"Operators\":\n [\n {\n \"Name\":\"TablePointLookup\",\n \"ReadColumns\":\n [\n \"hundred\",\n \"ten\"\n ],\n \"ReadRange\":\n [\n \"unique1 (1)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"Table\":\"postgres_jointest\\/join0.test_plan\\/tenk1\"\n }\n ],\n \"PlanNodeId\":11,\n \"Tables\":\n [\n \"postgres_jointest\\/join0.test_plan\\/tenk1\"\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n}"
\ No newline at end of file diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_8.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_8.plan index 0df861669b6..ad4741243ec 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_8.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_8.plan @@ -1 +1 @@ -"{\n \"meta\":\n {\n \"version\":\"0.2\",\n \"type\":\"query\"\n },\n \"tables\":[\n {\n \"name\":\"\\/Root\\/postgres_jointest\\/join0.test_plan\\/tenk1\",\n \"reads\":\n [\n {\n \"type\":\"FullScan\",\n \"scan_by\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"columns\":\n [\n \"hundred\",\n \"ten\",\n \"thousand\",\n \"unique2\"\n ]\n },\n {\n \"type\":\"FullScan\",\n \"scan_by\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"columns\":\n [\n \"hundred\",\n \"ten\",\n \"thousand\",\n \"unique2\"\n ]\n },\n {\n \"type\":\"FullScan\",\n \"scan_by\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"columns\":\n [\n \"hundred\",\n \"ten\",\n \"thousand\",\n \"unique2\"\n ]\n }\n ]\n }\n],\n \"Plan\":\n {\n \"Node Type\":\"Query\",\n \"PlanNodeType\":\"Query\",\n \"Plans\":\n [\n {\n \"Node Type\":\"ResultSet\",\n \"PlanNodeId\":16,\n \"PlanNodeType\":\"ResultSet\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate\",\n \"Operators\":\n [\n {\n \"Name\":\"Aggregate\"\n }\n ],\n \"PlanNodeId\":15,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":14,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate-LeftJoin (MapJoin)\",\n \"Operators\":\n [\n {\n \"Name\":\"Aggregate\"\n },\n {\n \"Name\":\"LeftJoin (MapJoin)\"\n }\n ],\n \"PlanNodeId\":13,\n \"Plans\":\n [\n {\n \"Node Type\":\"Broadcast\",\n \"PlanNodeId\":10,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Collect\",\n \"PlanNodeId\":9,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":8,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"InnerJoin (MapJoin)-Filter\",\n \"Operators\":\n [\n {\n \"Name\":\"InnerJoin (MapJoin)\"\n },\n {\n \"Name\":\"Filter\",\n \"Predicate\":\"Exist(item.thousand)\"\n }\n ],\n \"PlanNodeId\":7,\n \"Plans\":\n [\n {\n \"Node Type\":\"Broadcast\",\n \"PlanNodeId\":4,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Collect\",\n \"PlanNodeId\":3,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":2,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"TableFullScan\",\n \"Operators\":\n [\n {\n \"Name\":\"TableFullScan\",\n \"ReadColumns\":\n [\n \"hundred\",\n \"ten\",\n \"thousand\",\n \"unique2\"\n ],\n \"ReadRanges\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"Table\":\"postgres_jointest\\/join0.test_plan\\/tenk1\"\n }\n ],\n \"PlanNodeId\":1,\n \"Tables\":\n [\n \"postgres_jointest\\/join0.test_plan\\/tenk1\"\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"Node Type\":\"Map\",\n \"PlanNodeId\":6,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"TableFullScan\",\n \"Operators\":\n [\n {\n \"Name\":\"TableFullScan\",\n \"ReadColumns\":\n [\n \"hundred\",\n \"ten\",\n \"thousand\",\n \"unique2\"\n ],\n \"ReadRanges\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"Table\":\"postgres_jointest\\/join0.test_plan\\/tenk1\"\n }\n ],\n \"PlanNodeId\":5,\n \"Tables\":\n [\n \"postgres_jointest\\/join0.test_plan\\/tenk1\"\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"Node Type\":\"Map\",\n \"PlanNodeId\":12,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"TableFullScan\",\n \"Operators\":\n [\n {\n \"Name\":\"TableFullScan\",\n \"ReadColumns\":\n [\n \"hundred\",\n \"ten\",\n \"thousand\",\n \"unique2\"\n ],\n \"ReadRanges\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"Table\":\"postgres_jointest\\/join0.test_plan\\/tenk1\"\n }\n ],\n \"PlanNodeId\":11,\n \"Tables\":\n [\n \"postgres_jointest\\/join0.test_plan\\/tenk1\"\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n}"
\ No newline at end of file +"{\n \"meta\":\n {\n \"version\":\"0.2\",\n \"type\":\"query\"\n },\n \"tables\":[\n {\n \"name\":\"\\/Root\\/postgres_jointest\\/join0.test_plan\\/tenk1\",\n \"reads\":\n [\n {\n \"type\":\"FullScan\",\n \"scan_by\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"columns\":\n [\n \"hundred\",\n \"ten\",\n \"thousand\",\n \"unique2\"\n ]\n },\n {\n \"type\":\"FullScan\",\n \"scan_by\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"columns\":\n [\n \"hundred\",\n \"ten\",\n \"thousand\",\n \"unique2\"\n ]\n },\n {\n \"type\":\"FullScan\",\n \"scan_by\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"columns\":\n [\n \"hundred\",\n \"ten\",\n \"thousand\",\n \"unique2\"\n ]\n }\n ]\n }\n],\n \"Plan\":\n {\n \"Node Type\":\"Query\",\n \"PlanNodeType\":\"Query\",\n \"Plans\":\n [\n {\n \"Node Type\":\"ResultSet\",\n \"PlanNodeId\":16,\n \"PlanNodeType\":\"ResultSet\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate-Limit-Aggregate\",\n \"Operators\":\n [\n {\n \"Name\":\"Aggregate\"\n },\n {\n \"Limit\":\"1\",\n \"Name\":\"Limit\"\n },\n {\n \"Name\":\"Aggregate\"\n }\n ],\n \"PlanNodeId\":15,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":14,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate-LeftJoin (MapJoin)\",\n \"Operators\":\n [\n {\n \"Aggregation\":\"{_yql_agg_0: Inc(state._yql_agg_0)}\",\n \"GroupBy\":\"0\",\n \"Name\":\"Aggregate\"\n },\n {\n \"Name\":\"LeftJoin (MapJoin)\"\n }\n ],\n \"PlanNodeId\":13,\n \"Plans\":\n [\n {\n \"Node Type\":\"Broadcast\",\n \"PlanNodeId\":10,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Collect\",\n \"PlanNodeId\":9,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":8,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"InnerJoin (MapJoin)-Filter\",\n \"Operators\":\n [\n {\n \"Name\":\"InnerJoin (MapJoin)\"\n },\n {\n \"Name\":\"Filter\",\n \"Predicate\":\"Exist(item.thousand)\"\n }\n ],\n \"PlanNodeId\":7,\n \"Plans\":\n [\n {\n \"Node Type\":\"Broadcast\",\n \"PlanNodeId\":4,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Collect\",\n \"PlanNodeId\":3,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":2,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"TableFullScan\",\n \"Operators\":\n [\n {\n \"Name\":\"TableFullScan\",\n \"ReadColumns\":\n [\n \"hundred\",\n \"ten\",\n \"thousand\",\n \"unique2\"\n ],\n \"ReadRanges\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"Table\":\"postgres_jointest\\/join0.test_plan\\/tenk1\"\n }\n ],\n \"PlanNodeId\":1,\n \"Tables\":\n [\n \"postgres_jointest\\/join0.test_plan\\/tenk1\"\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"Node Type\":\"Map\",\n \"PlanNodeId\":6,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"TableFullScan\",\n \"Operators\":\n [\n {\n \"Name\":\"TableFullScan\",\n \"ReadColumns\":\n [\n \"hundred\",\n \"ten\",\n \"thousand\",\n \"unique2\"\n ],\n \"ReadRanges\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"Table\":\"postgres_jointest\\/join0.test_plan\\/tenk1\"\n }\n ],\n \"PlanNodeId\":5,\n \"Tables\":\n [\n \"postgres_jointest\\/join0.test_plan\\/tenk1\"\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n {\n \"Node Type\":\"Map\",\n \"PlanNodeId\":12,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"TableFullScan\",\n \"Operators\":\n [\n {\n \"Name\":\"TableFullScan\",\n \"ReadColumns\":\n [\n \"hundred\",\n \"ten\",\n \"thousand\",\n \"unique2\"\n ],\n \"ReadRanges\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"Table\":\"postgres_jointest\\/join0.test_plan\\/tenk1\"\n }\n ],\n \"PlanNodeId\":11,\n \"Tables\":\n [\n \"postgres_jointest\\/join0.test_plan\\/tenk1\"\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n}"
\ No newline at end of file diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_5.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_5.plan index de37a69c85d..1db715a6efe 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_5.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select_distinct.test_/query_5.plan @@ -1 +1 @@ -"{\n \"meta\":\n {\n \"version\":\"0.2\",\n \"type\":\"query\"\n },\n \"tables\":[\n {\n \"name\":\"\\/Root\\/postgres_select_distinct.test_plan\\/tenk1\",\n \"reads\":\n [\n {\n \"type\":\"FullScan\",\n \"scan_by\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"columns\":\n [\n \"four\",\n \"two\"\n ]\n }\n ]\n }\n],\n \"Plan\":\n {\n \"Node Type\":\"Query\",\n \"PlanNodeType\":\"Query\",\n \"Plans\":\n [\n {\n \"Node Type\":\"ResultSet\",\n \"PlanNodeId\":6,\n \"PlanNodeType\":\"ResultSet\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate\",\n \"Operators\":\n [\n {\n \"Name\":\"Aggregate\"\n }\n ],\n \"PlanNodeId\":5,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":4,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate-Aggregate\",\n \"Operators\":\n [\n {\n \"Name\":\"Aggregate\"\n },\n {\n \"Name\":\"Aggregate\"\n }\n ],\n \"PlanNodeId\":3,\n \"Plans\":\n [\n {\n \"KeyColumns\":\n [\n \"four\",\n \"two\"\n ],\n \"Node Type\":\"HashShuffle\",\n \"PlanNodeId\":2,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"TableFullScan\",\n \"Operators\":\n [\n {\n \"Name\":\"TableFullScan\",\n \"ReadColumns\":\n [\n \"four\",\n \"two\"\n ],\n \"ReadRanges\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"Table\":\"postgres_select_distinct.test_plan\\/tenk1\"\n }\n ],\n \"PlanNodeId\":1,\n \"Tables\":\n [\n \"postgres_select_distinct.test_plan\\/tenk1\"\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n}"
\ No newline at end of file +"{\n \"meta\":\n {\n \"version\":\"0.2\",\n \"type\":\"query\"\n },\n \"tables\":[\n {\n \"name\":\"\\/Root\\/postgres_select_distinct.test_plan\\/tenk1\",\n \"reads\":\n [\n {\n \"type\":\"FullScan\",\n \"scan_by\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"columns\":\n [\n \"four\",\n \"two\"\n ]\n }\n ]\n }\n],\n \"Plan\":\n {\n \"Node Type\":\"Query\",\n \"PlanNodeType\":\"Query\",\n \"Plans\":\n [\n {\n \"Node Type\":\"ResultSet\",\n \"PlanNodeId\":6,\n \"PlanNodeType\":\"ResultSet\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate-Limit-Aggregate\",\n \"Operators\":\n [\n {\n \"Name\":\"Aggregate\"\n },\n {\n \"Limit\":\"1\",\n \"Name\":\"Limit\"\n },\n {\n \"Name\":\"Aggregate\"\n }\n ],\n \"PlanNodeId\":5,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":4,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate-Aggregate\",\n \"Operators\":\n [\n {\n \"Aggregation\":\"{_yql_agg_0: Inc(state._yql_agg_0)}\",\n \"GroupBy\":\"0\",\n \"Name\":\"Aggregate\"\n },\n {\n \"Name\":\"Aggregate\"\n }\n ],\n \"PlanNodeId\":3,\n \"Plans\":\n [\n {\n \"KeyColumns\":\n [\n \"four\",\n \"two\"\n ],\n \"Node Type\":\"HashShuffle\",\n \"PlanNodeId\":2,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"TableFullScan\",\n \"Operators\":\n [\n {\n \"Name\":\"TableFullScan\",\n \"ReadColumns\":\n [\n \"four\",\n \"two\"\n ],\n \"ReadRanges\":\n [\n \"unique1 (-\u221e, +\u221e)\",\n \"unique2 (-\u221e, +\u221e)\"\n ],\n \"Table\":\"postgres_select_distinct.test_plan\\/tenk1\"\n }\n ],\n \"PlanNodeId\":1,\n \"Tables\":\n [\n \"postgres_select_distinct.test_plan\\/tenk1\"\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n}"
\ No newline at end of file diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-insert.test_/query_1.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-insert.test_/query_1.plan index f1e7d296150..1a2c12ceb0f 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-insert.test_/query_1.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-insert.test_/query_1.plan @@ -1 +1 @@ -"{\n \"meta\":\n {\n \"version\":\"0.2\",\n \"type\":\"query\"\n },\n \"tables\":[\n {\n \"name\":\"\\/Root\\/sqllogictest_insert.test_plan\\/a2\",\n \"reads\":\n [\n {\n \"type\":\"FullScan\",\n \"scan_by\":\n [\n \"a (-\u221e, +\u221e)\",\n \"b (-\u221e, +\u221e)\",\n \"c (-\u221e, +\u221e)\"\n ]\n }\n ]\n }\n],\n \"Plan\":\n {\n \"Node Type\":\"Query\",\n \"PlanNodeType\":\"Query\",\n \"Plans\":\n [\n {\n \"Node Type\":\"ResultSet\",\n \"PlanNodeId\":4,\n \"PlanNodeType\":\"ResultSet\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate\",\n \"Operators\":\n [\n {\n \"Name\":\"Aggregate\"\n }\n ],\n \"PlanNodeId\":3,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":2,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate-TableFullScan\",\n \"Operators\":\n [\n {\n \"Name\":\"Aggregate\"\n },\n {\n \"Name\":\"TableFullScan\",\n \"ReadColumns\":null,\n \"ReadRanges\":\n [\n \"a (-\u221e, +\u221e)\",\n \"b (-\u221e, +\u221e)\",\n \"c (-\u221e, +\u221e)\"\n ],\n \"Table\":\"sqllogictest_insert.test_plan\\/a2\"\n }\n ],\n \"PlanNodeId\":1,\n \"Tables\":\n [\n \"sqllogictest_insert.test_plan\\/a2\"\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n}"
\ No newline at end of file +"{\n \"meta\":\n {\n \"version\":\"0.2\",\n \"type\":\"query\"\n },\n \"tables\":[\n {\n \"name\":\"\\/Root\\/sqllogictest_insert.test_plan\\/a2\",\n \"reads\":\n [\n {\n \"type\":\"FullScan\",\n \"scan_by\":\n [\n \"a (-\u221e, +\u221e)\",\n \"b (-\u221e, +\u221e)\",\n \"c (-\u221e, +\u221e)\"\n ]\n }\n ]\n }\n],\n \"Plan\":\n {\n \"Node Type\":\"Query\",\n \"PlanNodeType\":\"Query\",\n \"Plans\":\n [\n {\n \"Node Type\":\"ResultSet\",\n \"PlanNodeId\":4,\n \"PlanNodeType\":\"ResultSet\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate-Limit-Aggregate\",\n \"Operators\":\n [\n {\n \"Name\":\"Aggregate\"\n },\n {\n \"Limit\":\"1\",\n \"Name\":\"Limit\"\n },\n {\n \"Name\":\"Aggregate\"\n }\n ],\n \"PlanNodeId\":3,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":2,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"TableFullScan\",\n \"Operators\":\n [\n {\n \"Name\":\"TableFullScan\",\n \"ReadColumns\":null,\n \"ReadRanges\":\n [\n \"a (-\u221e, +\u221e)\",\n \"b (-\u221e, +\u221e)\",\n \"c (-\u221e, +\u221e)\"\n ],\n \"Table\":\"sqllogictest_insert.test_plan\\/a2\"\n }\n ],\n \"PlanNodeId\":1,\n \"Tables\":\n [\n \"sqllogictest_insert.test_plan\\/a2\"\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n}"
\ No newline at end of file diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-insert.test_/query_2.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-insert.test_/query_2.plan index f1e7d296150..1a2c12ceb0f 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-insert.test_/query_2.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-insert.test_/query_2.plan @@ -1 +1 @@ -"{\n \"meta\":\n {\n \"version\":\"0.2\",\n \"type\":\"query\"\n },\n \"tables\":[\n {\n \"name\":\"\\/Root\\/sqllogictest_insert.test_plan\\/a2\",\n \"reads\":\n [\n {\n \"type\":\"FullScan\",\n \"scan_by\":\n [\n \"a (-\u221e, +\u221e)\",\n \"b (-\u221e, +\u221e)\",\n \"c (-\u221e, +\u221e)\"\n ]\n }\n ]\n }\n],\n \"Plan\":\n {\n \"Node Type\":\"Query\",\n \"PlanNodeType\":\"Query\",\n \"Plans\":\n [\n {\n \"Node Type\":\"ResultSet\",\n \"PlanNodeId\":4,\n \"PlanNodeType\":\"ResultSet\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate\",\n \"Operators\":\n [\n {\n \"Name\":\"Aggregate\"\n }\n ],\n \"PlanNodeId\":3,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":2,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate-TableFullScan\",\n \"Operators\":\n [\n {\n \"Name\":\"Aggregate\"\n },\n {\n \"Name\":\"TableFullScan\",\n \"ReadColumns\":null,\n \"ReadRanges\":\n [\n \"a (-\u221e, +\u221e)\",\n \"b (-\u221e, +\u221e)\",\n \"c (-\u221e, +\u221e)\"\n ],\n \"Table\":\"sqllogictest_insert.test_plan\\/a2\"\n }\n ],\n \"PlanNodeId\":1,\n \"Tables\":\n [\n \"sqllogictest_insert.test_plan\\/a2\"\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n}"
\ No newline at end of file +"{\n \"meta\":\n {\n \"version\":\"0.2\",\n \"type\":\"query\"\n },\n \"tables\":[\n {\n \"name\":\"\\/Root\\/sqllogictest_insert.test_plan\\/a2\",\n \"reads\":\n [\n {\n \"type\":\"FullScan\",\n \"scan_by\":\n [\n \"a (-\u221e, +\u221e)\",\n \"b (-\u221e, +\u221e)\",\n \"c (-\u221e, +\u221e)\"\n ]\n }\n ]\n }\n],\n \"Plan\":\n {\n \"Node Type\":\"Query\",\n \"PlanNodeType\":\"Query\",\n \"Plans\":\n [\n {\n \"Node Type\":\"ResultSet\",\n \"PlanNodeId\":4,\n \"PlanNodeType\":\"ResultSet\",\n \"Plans\":\n [\n {\n \"Node Type\":\"Aggregate-Limit-Aggregate\",\n \"Operators\":\n [\n {\n \"Name\":\"Aggregate\"\n },\n {\n \"Limit\":\"1\",\n \"Name\":\"Limit\"\n },\n {\n \"Name\":\"Aggregate\"\n }\n ],\n \"PlanNodeId\":3,\n \"Plans\":\n [\n {\n \"Node Type\":\"UnionAll\",\n \"PlanNodeId\":2,\n \"PlanNodeType\":\"Connection\",\n \"Plans\":\n [\n {\n \"Node Type\":\"TableFullScan\",\n \"Operators\":\n [\n {\n \"Name\":\"TableFullScan\",\n \"ReadColumns\":null,\n \"ReadRanges\":\n [\n \"a (-\u221e, +\u221e)\",\n \"b (-\u221e, +\u221e)\",\n \"c (-\u221e, +\u221e)\"\n ],\n \"Table\":\"sqllogictest_insert.test_plan\\/a2\"\n }\n ],\n \"PlanNodeId\":1,\n \"Tables\":\n [\n \"sqllogictest_insert.test_plan\\/a2\"\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n}"
\ No newline at end of file |