diff options
author | ngc224 <ngc224@yandex-team.com> | 2022-08-05 18:18:44 +0300 |
---|---|---|
committer | ngc224 <ngc224@yandex-team.com> | 2022-08-05 18:18:44 +0300 |
commit | 7b4f8921a24ccfcc22a3114c6b1b6222b14a836a (patch) | |
tree | ceecbb00cce2c802f8b91503a39300eaacfedcec | |
parent | 18d6e1a62a6bef20b8547089b142cc976092cbae (diff) | |
download | ydb-7b4f8921a24ccfcc22a3114c6b1b6222b14a836a.tar.gz |
Repeat EvaluateExpressions step after view substitution
-rw-r--r-- | ydb/library/yql/core/type_ann/type_ann_expr.cpp | 14 | ||||
-rw-r--r-- | ydb/library/yql/core/yql_opt_proposed_by_data.cpp | 9 | ||||
-rw-r--r-- | ydb/library/yql/core/yql_opt_rewrite_io.cpp | 3 |
3 files changed, 22 insertions, 4 deletions
diff --git a/ydb/library/yql/core/type_ann/type_ann_expr.cpp b/ydb/library/yql/core/type_ann/type_ann_expr.cpp index f67d3b41200..38760e8290f 100644 --- a/ydb/library/yql/core/type_ann/type_ann_expr.cpp +++ b/ydb/library/yql/core/type_ann/type_ann_expr.cpp @@ -592,6 +592,20 @@ TAutoPtr<IGraphTransformer> CreateFullTypeAnnotationTransformer( CreateConfigureTransformer(typeAnnotationContext), "Configure", issueCode)); + + // NOTE: add fake EvaluateExpression step to break infinite loop + // (created by Repeat on ExprEval step after RewriteIO completion) + transformers.push_back(TTransformStage( + CreateFunctorTransformer( + [](const TExprNode::TPtr& input, TExprNode::TPtr& output, TExprContext& ctx) { + output = input; + ctx.Step.Done(TExprStep::ExprEval); + return IGraphTransformer::TStatus::Ok; + } + ), + "EvaluateExpression", + issueCode)); + transformers.push_back(TTransformStage( CreateIODiscoveryTransformer(typeAnnotationContext), "IODiscovery", diff --git a/ydb/library/yql/core/yql_opt_proposed_by_data.cpp b/ydb/library/yql/core/yql_opt_proposed_by_data.cpp index 23a912303fb..dcb0625c95f 100644 --- a/ydb/library/yql/core/yql_opt_proposed_by_data.cpp +++ b/ydb/library/yql/core/yql_opt_proposed_by_data.cpp @@ -124,9 +124,12 @@ private: bool hasRepeats = HasRepeats; HasRepeats = false; if (NewRoots.empty()) { - return hasRepeats - ? TStatus::Repeat - : TStatus::Ok; + if (hasRepeats) { + return TStatus::Repeat; + } + + Finish(ctx); + return TStatus::Ok; } ChooseRoot(std::move(input), output); diff --git a/ydb/library/yql/core/yql_opt_rewrite_io.cpp b/ydb/library/yql/core/yql_opt_rewrite_io.cpp index 40fc5aa22d7..6c844ca829c 100644 --- a/ydb/library/yql/core/yql_opt_rewrite_io.cpp +++ b/ydb/library/yql/core/yql_opt_rewrite_io.cpp @@ -36,7 +36,8 @@ IGraphTransformer::TStatus RewriteIO(const TExprNode::TPtr& input, TExprNode::TP if ( !ctx.Step.IsDone(TExprStep::DiscoveryIO) || - !ctx.Step.IsDone(TExprStep::ExpandApplyForLambdas) + !ctx.Step.IsDone(TExprStep::ExpandApplyForLambdas) || + !ctx.Step.IsDone(TExprStep::ExprEval) ) { return IGraphTransformer::TStatus(IGraphTransformer::TStatus::Repeat, true); } |