aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexey Ozeritskiy <aozeritsky@ydb.tech>2024-02-14 13:34:58 +0100
committerGitHub <noreply@github.com>2024-02-14 13:34:58 +0100
commit8654e50c3ca87620a46c002f6df7332aaecf33d4 (patch)
tree4a29b1f4880a883d73ff11ea97867b2711d2d4b0
parent706670abefaf649e88b8aa19ed6de306ea178bb7 (diff)
downloadydb-8654e50c3ca87620a46c002f6df7332aaecf33d4.tar.gz
DqOptimizeEquiJoinWithCosts uses abstract CBO API YQL-17437 (#1912)
-rw-r--r--ydb/core/kqp/opt/logical/kqp_opt_log.cpp5
-rw-r--r--ydb/library/yql/dq/opt/dq_opt_join_cost_based.cpp3
-rw-r--r--ydb/library/yql/dq/opt/dq_opt_log.h3
3 files changed, 5 insertions, 6 deletions
diff --git a/ydb/core/kqp/opt/logical/kqp_opt_log.cpp b/ydb/core/kqp/opt/logical/kqp_opt_log.cpp
index 7ec98aa7f56..be278f67dc2 100644
--- a/ydb/core/kqp/opt/logical/kqp_opt_log.cpp
+++ b/ydb/core/kqp/opt/logical/kqp_opt_log.cpp
@@ -136,8 +136,9 @@ protected:
TMaybeNode<TExprBase> OptimizeEquiJoinWithCosts(TExprBase node, TExprContext& ctx) {
auto maxDPccpDPTableSize = Config->MaxDPccpDPTableSize.Get().GetOrElse(TDqSettings::TDefault::MaxDPccpDPTableSize);
- TExprBase output = DqOptimizeEquiJoinWithCosts(node, ctx, TypesCtx, Config->CostBasedOptimizationLevel.Get().GetOrElse(TDqSettings::TDefault::CostBasedOptimizationLevel),
- maxDPccpDPTableSize, Pctx, [](auto& rels, auto label, auto node, auto stat) {
+ auto opt = std::unique_ptr<IOptimizerNew>(MakeNativeOptimizerNew(Pctx, maxDPccpDPTableSize));
+ TExprBase output = DqOptimizeEquiJoinWithCosts(node, ctx, TypesCtx, Config->CostBasedOptimizationLevel.Get().GetOrElse(TDqSettings::TDefault::CostBasedOptimizationLevel),
+ *opt, [](auto& rels, auto label, auto node, auto stat) {
rels.emplace_back(std::make_shared<TKqpRelOptimizerNode>(TString(label), stat, node));
});
DumpAppliedRule("OptimizeEquiJoinWithCosts", node.Ptr(), output.Ptr(), ctx);
diff --git a/ydb/library/yql/dq/opt/dq_opt_join_cost_based.cpp b/ydb/library/yql/dq/opt/dq_opt_join_cost_based.cpp
index 0fbe02d2165..0ca7910050e 100644
--- a/ydb/library/yql/dq/opt/dq_opt_join_cost_based.cpp
+++ b/ydb/library/yql/dq/opt/dq_opt_join_cost_based.cpp
@@ -1294,7 +1294,7 @@ public:
* and finally optimizes the root of the tree
*/
TExprBase DqOptimizeEquiJoinWithCosts(const TExprBase& node, TExprContext& ctx, TTypeAnnotationContext& typesCtx,
- ui32 optLevel, ui32 maxDPccpDPTableSize, IProviderContext& providerCtx,
+ ui32 optLevel, IOptimizerNew& opt,
const std::function<void(TVector<std::shared_ptr<TRelOptimizerNode>>&, TStringBuf, const TExprNode::TPtr, const std::shared_ptr<TOptimizerStatistics>&)>& providerCollect) {
if (optLevel==0) {
@@ -1338,7 +1338,6 @@ TExprBase DqOptimizeEquiJoinWithCosts(const TExprBase& node, TExprContext& ctx,
YQL_CLOG(TRACE, CoreDq) << str.str();
}
- auto opt = TOptimizerNativeNew(providerCtx, maxDPccpDPTableSize);
joinTree = opt.JoinSearch(joinTree);
// rewrite the join tree and record the output statistics
diff --git a/ydb/library/yql/dq/opt/dq_opt_log.h b/ydb/library/yql/dq/opt/dq_opt_log.h
index 335026cbacc..08fd33ace65 100644
--- a/ydb/library/yql/dq/opt/dq_opt_log.h
+++ b/ydb/library/yql/dq/opt/dq_opt_log.h
@@ -29,8 +29,7 @@ NNodes::TExprBase DqOptimizeEquiJoinWithCosts(
TExprContext& ctx,
TTypeAnnotationContext& typesCtx,
ui32 optLevel,
- ui32 maxDPccpDPTableSize,
- IProviderContext& providerCtx,
+ IOptimizerNew& optimizer,
const std::function<void(TVector<std::shared_ptr<TRelOptimizerNode>>&, TStringBuf, const TExprNode::TPtr, const std::shared_ptr<TOptimizerStatistics>&)>& providerCollect);
NNodes::TExprBase DqOptimizeEquiJoinWithCosts(