aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzverevgeny <zverevgeny@ydb.tech>2023-09-20 23:25:47 +0300
committerzverevgeny <zverevgeny@ydb.tech>2023-09-20 23:39:29 +0300
commit599ae03d021d62d3b7b12a8483071cac51b5366b (patch)
treea3002fe68bef1285b22c5b995c2fa061f15673a5
parent63145838336123ccf33c4852daab9950e1caece7 (diff)
downloadydb-599ae03d021d62d3b7b12a8483071cac51b5366b.tar.gz
YQL-16325 ExpandMatchRecognize in peephole
-rw-r--r--ydb/library/yql/core/peephole_opt/yql_opt_peephole_physical.cpp38
-rw-r--r--ydb/library/yql/core/yql_opt_match_recognize.cpp2
-rw-r--r--ydb/library/yql/core/yql_opt_match_recognize.h2
-rw-r--r--ydb/library/yql/dq/opt/dq_opt_log.cpp2
-rw-r--r--ydb/library/yql/dq/opt/dq_opt_log.h2
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