diff options
author | zverevgeny <zverevgeny@ydb.tech> | 2023-09-20 23:25:47 +0300 |
---|---|---|
committer | zverevgeny <zverevgeny@ydb.tech> | 2023-09-20 23:39:29 +0300 |
commit | 599ae03d021d62d3b7b12a8483071cac51b5366b (patch) | |
tree | a3002fe68bef1285b22c5b995c2fa061f15673a5 | |
parent | 63145838336123ccf33c4852daab9950e1caece7 (diff) | |
download | ydb-599ae03d021d62d3b7b12a8483071cac51b5366b.tar.gz |
YQL-16325 ExpandMatchRecognize in peephole
-rw-r--r-- | ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp | 38 | ||||
-rw-r--r-- | ydb/library/yql/core/yql_opt_match_recognize.cpp | 2 | ||||
-rw-r--r-- | ydb/library/yql/core/yql_opt_match_recognize.h | 2 | ||||
-rw-r--r-- | ydb/library/yql/dq/opt/dq_opt_log.cpp | 2 | ||||
-rw-r--r-- | ydb/library/yql/dq/opt/dq_opt_log.h | 2 |
5 files changed, 14 insertions, 32 deletions
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 460f5b776b6..4cffdf68f09 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 @@ -7301,7 +7301,7 @@ ui64 ToDatetime(ui64 now) { return std::min<ui64>(NUdf::MAX_DATETIME - 1U, now ui64 ToTimestamp(ui64 now) { return std::min<ui64>(NUdf::MAX_TIMESTAMP - 1ULL, now); } struct TPeepHoleRules { - static constexpr std::initializer_list<TPeepHoleOptimizerMap::value_type> CommonStageRulesInit = { + const TPeepHoleOptimizerMap CommonStageRules = { {"EquiJoin", &ExpandEquiJoin}, {"SafeCast", &ExpandCast<false>}, {"StrictCast", &ExpandCast<true>}, @@ -7368,10 +7368,9 @@ struct TPeepHoleRules { {"CheckedMinus", &ExpandCheckedMinus}, {"JsonValue", &ExpandJsonValue}, {"JsonExists", &ExpandJsonExists}, - //TODO(zverevgeny): add me {"MatchRecognize", &ExpandMatchRecognize} }; - static constexpr std::initializer_list<TExtPeepHoleOptimizerMap::value_type> CommonStageExtRulesInit = { + const TExtPeepHoleOptimizerMap CommonStageExtRules = { {"Aggregate", &ExpandAggregatePeephole}, {"AggregateCombine", &ExpandAggregatePeephole}, {"AggregateCombineState", &ExpandAggregatePeephole}, @@ -7381,9 +7380,10 @@ struct TPeepHoleRules { {"AggregateFinalize", &ExpandAggregatePeephole}, {"CostsOf", &ExpandCostsOf}, {"JsonQuery", &ExpandJsonQuery}, + {"MatchRecognize", &ExpandMatchRecognize} }; - static constexpr std::initializer_list<TPeepHoleOptimizerMap::value_type> SimplifyStageRulesInit = { + const TPeepHoleOptimizerMap SimplifyStageRules = { {"Map", &OptimizeMap<false>}, {"OrderedMap", &OptimizeMap<true>}, {"FlatMap", &ExpandFlatMap<false>}, @@ -7395,7 +7395,7 @@ struct TPeepHoleRules { {"IfPresent", &OptimizeIfPresent<false>} }; - static constexpr std::initializer_list<TPeepHoleOptimizerMap::value_type> FinalStageRulesInit = { + const TPeepHoleOptimizerMap FinalStageRules = { {"Take", &OptimizeTake}, {"Skip", &OptimizeSkip}, {"Likely", &ReplaceWithFirstArg}, @@ -7417,8 +7417,8 @@ struct TPeepHoleRules { {"FlattenStructs", &ExpandFlattenStructs}, {"FlattenByColumns", &ExpandFlattenByColumns}, {"CastStruct", &ExpandCastStruct}, - {"Filter", &ExpandFilter}, - {"OrderedFilter", &ExpandFilter}, + {"Filter", &ExpandFilter<>}, + {"OrderedFilter", &ExpandFilter<>}, {"TakeWhile", &ExpandFilter<false>}, {"SkipWhile", &ExpandFilter<true>}, {"LMap", &ExpandLMapOrShuffleByKeys}, @@ -7459,9 +7459,9 @@ struct TPeepHoleRules { {"AggrGreaterOrEqual", &ExpandAggrCompare<false, true>}, }; - static constexpr std::initializer_list<TExtPeepHoleOptimizerMap::value_type> FinalStageExtRulesInit = {}; + const TExtPeepHoleOptimizerMap FinalStageExtRules = {}; - static constexpr std::initializer_list<TExtPeepHoleOptimizerMap::value_type> FinalStageNonDetRulesInit = { + const TExtPeepHoleOptimizerMap FinalStageNonDetRules = { {"Random", &Random0Arg<double>}, {"RandomNumber", &Random0Arg<ui64>}, {"RandomUuid", &Random0Arg<TGUID>}, @@ -7471,7 +7471,7 @@ struct TPeepHoleRules { {"CurrentUtcTimestamp", &Now0Arg<&ToTimestamp>} }; - static constexpr std::initializer_list<TExtPeepHoleOptimizerMap::value_type> BlockStageExtRulesInit = { + const TExtPeepHoleOptimizerMap BlockStageExtRules = { {"NarrowFlatMap", &OptimizeWideMapBlocks}, {"NarrowMultiMap", &OptimizeWideMapBlocks}, {"WideMap", &OptimizeWideMapBlocks}, @@ -7487,27 +7487,9 @@ struct TPeepHoleRules { {"WideSort", &OptimizeTopOrSortBlocks}, }; - TPeepHoleRules() - : CommonStageRules(CommonStageRulesInit) - , CommonStageExtRules(CommonStageExtRulesInit) - , FinalStageRules(FinalStageRulesInit) - , FinalStageExtRules(FinalStageExtRulesInit) - , SimplifyStageRules(SimplifyStageRulesInit) - , FinalStageNonDetRules(FinalStageNonDetRulesInit) - , BlockStageExtRules(BlockStageExtRulesInit) - {} - static const TPeepHoleRules& Instance() { return *Singleton<TPeepHoleRules>(); } - - const TPeepHoleOptimizerMap CommonStageRules; - const TExtPeepHoleOptimizerMap CommonStageExtRules; - const TPeepHoleOptimizerMap FinalStageRules; - const TExtPeepHoleOptimizerMap FinalStageExtRules; - const TPeepHoleOptimizerMap SimplifyStageRules; - const TExtPeepHoleOptimizerMap FinalStageNonDetRules; - const TExtPeepHoleOptimizerMap BlockStageExtRules; }; THolder<IGraphTransformer> CreatePeepHoleCommonStageTransformer(TTypeAnnotationContext& types, diff --git a/ydb/library/yql/core/yql_opt_match_recognize.cpp b/ydb/library/yql/core/yql_opt_match_recognize.cpp index 10598d08337..6350e428681 100644 --- a/ydb/library/yql/core/yql_opt_match_recognize.cpp +++ b/ydb/library/yql/core/yql_opt_match_recognize.cpp @@ -31,7 +31,7 @@ bool IsStreaming(const TExprNode::TPtr& input, const TTypeAnnotationContext& typ } } //namespace -TExprNode::TPtr ExpandMatchRecognize(const TExprNode::TPtr& node, TExprContext& ctx, const TTypeAnnotationContext& typeAnnCtx) { +TExprNode::TPtr ExpandMatchRecognize(const TExprNode::TPtr& node, TExprContext& ctx, TTypeAnnotationContext& typeAnnCtx) { YQL_ENSURE(node->IsCallable({"MatchRecognize"})); const auto& input = node->ChildRef(0); const auto& partitionKeySelector = node->ChildRef(1); diff --git a/ydb/library/yql/core/yql_opt_match_recognize.h b/ydb/library/yql/core/yql_opt_match_recognize.h index 0eed26ecc90..34537289ece 100644 --- a/ydb/library/yql/core/yql_opt_match_recognize.h +++ b/ydb/library/yql/core/yql_opt_match_recognize.h @@ -4,6 +4,6 @@ namespace NYql { -TExprNode::TPtr ExpandMatchRecognize(const TExprNode::TPtr &node, TExprContext &ctx, const TTypeAnnotationContext& typeAnnCtx); +TExprNode::TPtr ExpandMatchRecognize(const TExprNode::TPtr &node, TExprContext &ctx, TTypeAnnotationContext& typeAnnCtx); } //namespace NYql diff --git a/ydb/library/yql/dq/opt/dq_opt_log.cpp b/ydb/library/yql/dq/opt/dq_opt_log.cpp index 079a0f116b1..8199db0b033 100644 --- a/ydb/library/yql/dq/opt/dq_opt_log.cpp +++ b/ydb/library/yql/dq/opt/dq_opt_log.cpp @@ -293,7 +293,7 @@ IGraphTransformer::TStatus DqWrapRead(const TExprNode::TPtr& input, TExprNode::T return status; } -TExprBase DqExpandMatchRecognize(TExprBase node, TExprContext& ctx, const TTypeAnnotationContext& typeAnnCtx) { +TExprBase DqExpandMatchRecognize(TExprBase node, TExprContext& ctx, TTypeAnnotationContext& typeAnnCtx) { YQL_ENSURE(node.Maybe<TCoMatchRecognize>(), "Expected MatchRecognize"); return TExprBase(ExpandMatchRecognize(node.Ptr(), ctx, typeAnnCtx)); } diff --git a/ydb/library/yql/dq/opt/dq_opt_log.h b/ydb/library/yql/dq/opt/dq_opt_log.h index 622bf92c726..f1ae7b4978b 100644 --- a/ydb/library/yql/dq/opt/dq_opt_log.h +++ b/ydb/library/yql/dq/opt/dq_opt_log.h @@ -34,6 +34,6 @@ NNodes::TExprBase DqSqlInDropCompact(NNodes::TExprBase node, TExprContext& ctx); IGraphTransformer::TStatus DqWrapRead(const TExprNode::TPtr& input, TExprNode::TPtr& output, TExprContext& ctx, TTypeAnnotationContext& typesCtx, const TDqSettings& config); -NNodes::TExprBase DqExpandMatchRecognize(NNodes::TExprBase node, TExprContext& ctx, const TTypeAnnotationContext& typeAnnCtx); +NNodes::TExprBase DqExpandMatchRecognize(NNodes::TExprBase node, TExprContext& ctx, TTypeAnnotationContext& typeAnnCtx); } // namespace NYql::NDq |