Skip to content

Commit 7a36d05

Browse files
authored
[CBO] Join Order test improvement (#8602)
1 parent f499f08 commit 7a36d05

File tree

1 file changed

+5
-30
lines changed

1 file changed

+5
-30
lines changed

ydb/core/kqp/ut/join/kqp_join_order_ut.cpp

Lines changed: 5 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -374,40 +374,15 @@ Y_UNIT_TEST_SUITE(KqpJoinOrder) {
374374

375375
Y_UNIT_TEST_XOR_OR_BOTH_FALSE(TestJoinOrderHintsComplex, StreamLookupJoin, ColumnStore) {
376376
auto plan = ExecuteJoinOrderTestDataQueryWithStats("queries/join_order_hints_complex.sql", "stats/basic.json", StreamLookupJoin, ColumnStore);
377-
UNIT_ASSERT_VALUES_EQUAL(GetJoinOrder(plan).GetStringRobust(), R"([[["R","S"],["T","U"]],"V"])") ;
378-
}
379-
380-
void TraverseJoinTree(
381-
const NJson::TJsonValue& tree,
382-
std::function<void(const NJson::TJsonValue&, const NJson::TJsonValue&)> joinVisitFunc
383-
) {
384-
if (tree.IsArray()) {
385-
auto join = tree.GetArray();
386-
Y_ENSURE(join.size() == 2, Sprintf("Incorrect join tree piece, expected 2 children for join, got : %s", tree.GetStringRobust().c_str()));
387-
joinVisitFunc(join[0], join[1]);
388-
TraverseJoinTree(join[0], joinVisitFunc);
389-
TraverseJoinTree(join[1], joinVisitFunc);
390-
} else if (tree.IsString()) {
391-
} else {
392-
Y_ENSURE(false, Sprintf("Incorrect join tree piece: %s", tree.GetStringRobust().c_str()));
393-
}
377+
auto joinOrder = GetJoinOrder(plan).GetStringRobust();
378+
UNIT_ASSERT_C(joinOrder.find(R"([["R","S"],["T","U"]])") != TString::npos, joinOrder);
394379
}
395380

396381
Y_UNIT_TEST_XOR_OR_BOTH_FALSE(TestJoinOrderHintsManyHintTrees, StreamLookupJoin, ColumnStore) {
397382
auto plan = ExecuteJoinOrderTestDataQueryWithStats("queries/join_order_hints_many_hint_trees.sql", "stats/basic.json", StreamLookupJoin, ColumnStore);
398-
auto joinOrder = GetJoinOrder(plan);
399-
400-
THashSet<TString> expectedJoins = { "R, S", "T, U" };
401-
TraverseJoinTree(
402-
joinOrder,
403-
[&expectedJoins](const NJson::TJsonValue& joinLhs, const NJson::TJsonValue& joinRhs){
404-
if (joinLhs.IsString() && joinRhs.IsString()) {
405-
expectedJoins.erase(Sprintf("%s, %s", joinLhs.GetString().c_str(), joinRhs.GetString().c_str()));
406-
}
407-
}
408-
);
409-
410-
UNIT_ASSERT_C(expectedJoins.empty(), Sprintf("%s wasn't found in '%s' join order!", JoinSeq(", ", expectedJoins).c_str(), joinOrder.GetStringRobust().c_str()));
383+
auto joinOrder = GetJoinOrder(plan).GetStringRobust();
384+
UNIT_ASSERT_C(joinOrder.find(R"(["R","S"])") != TString::npos, joinOrder);
385+
UNIT_ASSERT_C(joinOrder.find(R"(["T","U"])") != TString::npos, joinOrder);
411386
}
412387

413388
void JoinOrderTestWithOverridenStats(const TString& queryPath, const TString& statsPath, TString correctJoinOrderPath, bool useStreamLookupJoin, bool useColumnStore

0 commit comments

Comments
 (0)