aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorudovichenko-r <udovichenko-r@yandex-team.com>2025-01-31 18:06:49 +0300
committerudovichenko-r <udovichenko-r@yandex-team.com>2025-01-31 18:29:12 +0300
commit1cc0a0cdbd6981938122cdca7ddc8c7a8a50f0f2 (patch)
treeaec2ef22150fceb141527febbef675b9b63b8694
parenta71348eea33c4994ac09f98889c952705040fa9c (diff)
downloadydb-1cc0a0cdbd6981938122cdca7ddc8c7a8a50f0f2.tar.gz
More strict yson checks in optimizers
commit_hash:f35ce42e177d81a10b1f1133cb449ab70538bf8d
-rw-r--r--yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_content.cpp4
-rw-r--r--yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_join.cpp3
-rw-r--r--yt/yql/providers/yt/provider/phy_opt/yql_yt_phy_opt_misc.cpp9
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")),