Skip to content

Commit d4b3be7

Browse files
committed
fix
1 parent 6585bb8 commit d4b3be7

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

ydb/library/yql/dq/opt/dq_opt_hypergraph_ut.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,19 @@ Y_UNIT_TEST_SUITE(HypergraphBuild) {
351351
UNIT_ASSERT(HaveSameConditions(optimizedJoin, join));
352352
}
353353

354+
Y_UNIT_TEST(OneJoinManyCondsThatMayBreakTransitiveClosure) {
355+
auto join = Join("A", "B", "A.DOTA=B.LOL,A.LOL=B.LOL");
356+
357+
auto graph = MakeJoinHypergraph<TNodeSet64>(join);
358+
Cout << graph.String() << Endl;
359+
for (const auto& e: graph.GetEdges()) {
360+
UNIT_ASSERT(e.IsSimple());
361+
}
362+
363+
auto optimizedJoin = Enumerate(join);
364+
UNIT_ASSERT(HaveSameConditions(optimizedJoin, join));
365+
}
366+
354367
auto MakeClique(size_t size) {
355368
std::shared_ptr<IBaseOptimizerNode> root = Join("R0", "R1", "R0.id=R1.id");
356369

ydb/library/yql/dq/opt/dq_opt_join_hypergraph.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,7 @@ class TTransitiveClosureConstructor {
513513
for (size_t j = 0; j < i; ++j) {
514514
auto iGroup = connectedComponents.CanonicSetElement(i);
515515
auto jGroup = connectedComponents.CanonicSetElement(j);
516-
if (iGroup == jGroup) {
516+
if (iGroup == jGroup && joinCondById[i].RelName != joinCondById[j].RelName) {
517517
auto iNode = Graph_.GetNodesByRelNames({joinCondById[i].RelName});
518518
auto jNode = Graph_.GetNodesByRelNames({joinCondById[j].RelName});
519519

0 commit comments

Comments
 (0)