diff options
author | udovichenko-r <udovichenko-r@yandex-team.com> | 2025-01-31 18:06:49 +0300 |
---|---|---|
committer | udovichenko-r <udovichenko-r@yandex-team.com> | 2025-01-31 18:29:12 +0300 |
commit | 1cc0a0cdbd6981938122cdca7ddc8c7a8a50f0f2 (patch) | |
tree | aec2ef22150fceb141527febbef675b9b63b8694 | |
parent | a71348eea33c4994ac09f98889c952705040fa9c (diff) | |
download | ydb-1cc0a0cdbd6981938122cdca7ddc8c7a8a50f0f2.tar.gz |
More strict yson checks in optimizers
commit_hash:f35ce42e177d81a10b1f1133cb449ab70538bf8d
3 files changed, 16 insertions, 0 deletions
diff --git a/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_content.cpp b/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_content.cpp index 0afdbe789a1..107d17bd478 100644 --- a/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_content.cpp +++ b/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_content.cpp @@ -2,6 +2,7 @@ #include <yt/yql/providers/yt/provider/yql_yt_helpers.h> #include <yt/yql/providers/yt/provider/yql_yt_optimize.h> +#include <yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_helper.h> namespace NYql { @@ -154,6 +155,9 @@ TMaybeNode<TExprBase> TYtPhysicalOptProposalTransformer::NonOptimalTableContent( } } if (materialize) { + if (!NPrivate::EnsurePersistableYsonTypes(section.Pos(), *section.Ref().GetTypeAnn()->Cast<TListExprType>()->GetItemType(), ctx, state)) { + return {}; + } auto path = CopyOrTrivialMap(section.Pos(), TExprBase(world), TYtDSink(ctx.RenameNode(read.DataSource().Ref(), "DataSink")), diff --git a/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_join.cpp b/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_join.cpp index 918aec0795d..c175bcade9b 100644 --- a/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_join.cpp +++ b/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_join.cpp @@ -223,6 +223,9 @@ TMaybeNode<TExprBase> TYtPhysicalOptProposalTransformer::EquiJoin(TExprBase node if (NYql::HasSetting(sectionNode.Settings().Ref(), EYtSettingType::Sample)) { auto scheme = list.Ref().GetTypeAnn()->Cast<TListExprType>()->GetItemType(); + if (!NPrivate::EnsurePersistableYsonTypes(sectionNode.Pos(), *scheme, ctx, State_)) { + return {}; + } auto path = CopyOrTrivialMap(sectionNode.Pos(), TExprBase(world ? world : ctx.NewWorld(sectionNode.Pos())), dataSink.Cast(), diff --git a/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_misc.cpp b/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_misc.cpp index 30e21070dad..8ec8d9f1ec0 100644 --- a/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_misc.cpp +++ b/yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_misc.cpp @@ -445,6 +445,9 @@ TMaybeNode<TExprBase> TYtPhysicalOptProposalTransformer::Extend(TExprBase node, return node; } auto scheme = section.Ref().GetTypeAnn()->Cast<TListExprType>()->GetItemType(); + if (!NPrivate::EnsurePersistableYsonTypes(section.Pos(), *scheme, ctx, State_)) { + return {}; + } auto path = CopyOrTrivialMap(section.Pos(), read.Cast().World(), dataSink, *scheme, @@ -492,6 +495,9 @@ TMaybeNode<TExprBase> TYtPhysicalOptProposalTransformer::Extend(TExprBase node, if (State_->Types->EvaluationInProgress) { return node; } + if (!NPrivate::EnsurePersistableYsonTypes(extend.Pos(), *scheme, ctx, State_)) { + return {}; + } auto path = CopyOrTrivialMap(extend.Pos(), world, dataSink, *scheme, @@ -818,6 +824,9 @@ TMaybeNode<TExprBase> TYtPhysicalOptProposalTransformer::ResPull(TExprBase node, bool keepSorted = ctx.IsConstraintEnabled<TSortedConstraintNode>() ? (!NYql::HasSetting(section.Settings().Ref(), EYtSettingType::Unordered) && !hasNonTemp && section.Paths().Size() == 1) // single sorted input from operation : (!hasDynamic || !NYql::HasAnySetting(section.Settings().Ref(), EYtSettingType::Take | EYtSettingType::Skip)); // compatibility - all except dynamic with limit + if (!NPrivate::EnsurePersistableYsonTypes(read.Pos(), *scheme, ctx, State_)) { + return {}; + } auto path = CopyOrTrivialMap(read.Pos(), read.World(), TYtDSink(ctx.RenameNode(read.DataSource().Ref(), "DataSink")), |