diff options
author | aozeritsky <aozeritsky@ydb.tech> | 2023-09-21 23:07:29 +0300 |
---|---|---|
committer | aozeritsky <aozeritsky@ydb.tech> | 2023-09-21 23:22:31 +0300 |
commit | 509d5166f4a73f954e28835885226e7f4a1635f0 (patch) | |
tree | 48de2b3d6a758de43826f375ea19ca1fb4e8d38b | |
parent | 848bbaf910520e8e91552a9cc5ec81298c9786e8 (diff) | |
download | ydb-509d5166f4a73f954e28835885226e7f4a1635f0.tar.gz |
Don't search sets twice, simplify code
-rw-r--r-- | ydb/library/yql/dq/opt/dq_opt_join_cost_based.cpp | 20 |
1 files changed, 8 insertions, 12 deletions
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 4b226d67350..dfed9e8271c 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 @@ -71,7 +71,7 @@ bool operator < (const TJoinColumn& c1, const TJoinColumn& c2) { struct TEdge { int From; int To; - std::set<std::pair<TJoinColumn, TJoinColumn>> JoinConditions; + mutable std::set<std::pair<TJoinColumn, TJoinColumn>> JoinConditions; TEdge(int f, int t): From(f), To(t) {} @@ -392,19 +392,15 @@ struct TGraph { int leftNodeId = ScopeMapping[left.RelName]; int rightNodeId = ScopeMapping[right.RelName]; - if (! Edges.contains(TEdge(leftNodeId,rightNodeId)) && - ! Edges.contains(TEdge(rightNodeId,leftNodeId))) { + auto maybeEdge1 = Edges.find({leftNodeId, rightNodeId}); + auto maybeEdge2 = Edges.find({rightNodeId, leftNodeId}); + + if (maybeEdge1 == Edges.end() && maybeEdge2 == Edges.end()) { AddEdge(TEdge(leftNodeId,rightNodeId,std::make_pair(left, right))); } else { - TEdge e1 = *Edges.find(TEdge(leftNodeId,rightNodeId)); - if (!e1.JoinConditions.contains(std::make_pair(left, right))) { - e1.JoinConditions.insert(std::make_pair(left, right)); - } - - TEdge e2 = *Edges.find(TEdge(rightNodeId,leftNodeId)); - if (!e2.JoinConditions.contains(std::make_pair(right, left))) { - e2.JoinConditions.insert(std::make_pair(right, left)); - } + Y_VERIFY(maybeEdge1 != Edges.end() && maybeEdge2 != Edges.end()); + maybeEdge1->JoinConditions.emplace(left, right); + maybeEdge2->JoinConditions.emplace(right, left); } } } |