aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraozeritsky <aozeritsky@ydb.tech>2023-09-21 23:07:29 +0300
committeraozeritsky <aozeritsky@ydb.tech>2023-09-21 23:22:31 +0300
commit509d5166f4a73f954e28835885226e7f4a1635f0 (patch)
tree48de2b3d6a758de43826f375ea19ca1fb4e8d38b
parent848bbaf910520e8e91552a9cc5ec81298c9786e8 (diff)
downloadydb-509d5166f4a73f954e28835885226e7f4a1635f0.tar.gz
Don't search sets twice, simplify code
-rw-r--r--ydb/library/yql/dq/opt/dq_opt_join_cost_based.cpp20
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);
}
}
}