Skip to content

Commit 1283f9e

Browse files
Fixed join order unit test, broken by bad merge (#9631) (#9685)
1 parent 0b65df2 commit 1283f9e

File tree

1 file changed

+33
-37
lines changed

1 file changed

+33
-37
lines changed

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

+33-37
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,11 @@ static TKikimrRunner GetKikimrWithJoinSettings(bool useStreamLookupJoin = false,
7575
return TKikimrRunner(serverSettings);
7676
}
7777

78-
class TChainConstructor {
78+
void PrintPlan(const TString& plan) {
79+
Cout << plan << Endl;
80+
}
81+
82+
class TChainTester {
7983
public:
8084
TChainTester(size_t chainSize)
8185
: Kikimr(GetKikimrWithJoinSettings(false, GetStats(chainSize)))
@@ -107,22 +111,17 @@ class TChainConstructor {
107111

108112
private:
109113
void CreateTables() {
110-
for (size_t i = 0; i < ChainSize_; ++i) {
111-
TString tableName;
112-
113-
tableName
114-
.append("/Root/table_").append(ToString(i));;
115-
116-
TString createTable;
117-
createTable
118-
+= "CREATE TABLE `" + tableName + "` (id"
119-
+ ToString(i) + " Int32, "
120-
+ "PRIMARY KEY (id" + ToString(i) + "));";
121-
122-
std::cout << createTable << std::endl;
123-
auto res = Session_.ExecuteSchemeQuery(createTable).GetValueSync();
124-
std::cout << res.GetIssues().ToString() << std::endl;
125-
UNIT_ASSERT(res.IsSuccess());
114+
for (size_t i = 0; i < ChainSize; ++i) {
115+
TString tableName = Sprintf("/Root/table_%ld", i);
116+
117+
TString createTable = Sprintf(
118+
"CREATE TABLE `%s` (id%ld Int32, PRIMARY KEY (id%ld));",
119+
tableName.c_str(), i, i
120+
);
121+
122+
auto result = Session.ExecuteSchemeQuery(createTable).GetValueSync();
123+
result.GetIssues().PrintTo(Cerr);
124+
UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
126125
}
127126
}
128127

@@ -131,30 +130,29 @@ class TChainConstructor {
131130

132131
joinRequest.append("SELECT * FROM `/Root/table_0` as t0 ");
133132

134-
for (size_t i = 1; i < ChainSize_; ++i) {
135-
TString table = "/Root/table_" + ToString(i);
133+
for (size_t i = 1; i < ChainSize; ++i) {
134+
TString table = Sprintf("/Root/table_%ld", i);
136135

137-
TString prevAliasTable = "t" + ToString(i - 1);
138-
TString aliasTable = "t" + ToString(i);
136+
TString prevAliasTable = Sprintf("t%ld", i - 1);
137+
TString aliasTable = Sprintf("t%ld", i);
139138

140-
joinRequest
141-
+= "INNER JOIN `" + table + "`" + " AS " + aliasTable + " ON "
142-
+ aliasTable + ".id" + ToString(i) + "=" + prevAliasTable + ".id"
143-
+ ToString(i-1) + " ";
139+
joinRequest +=
140+
Sprintf(
141+
"INNER JOIN `%s` AS %s ON %s.id%ld = %s.id%ld ",
142+
table.c_str(), aliasTable.c_str(), aliasTable.c_str(), i, prevAliasTable.c_str(), i - 1
143+
);
144144
}
145145

146-
auto result = Session_.ExecuteDataQuery(joinRequest, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
147-
148-
std::cout << result.GetIssues().ToString() << std::endl;
149-
std::cout << joinRequest << std::endl;
146+
auto result = Session.ExplainDataQuery(joinRequest).ExtractValueSync();
147+
result.GetIssues().PrintTo(Cerr);
150148
UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
149+
PrintPlan(result.GetPlan());
151150
}
152151

153-
private:
154-
TKikimrRunner Kikimr_;
155-
NYdb::NTable::TTableClient TableClient_;
156-
TSession Session_;
157-
size_t ChainSize_;
152+
TKikimrRunner Kikimr;
153+
NYdb::NTable::TTableClient TableClient;
154+
TSession Session;
155+
size_t ChainSize;
158156
};
159157

160158
void ExplainJoinOrderTestDataQuery(const TString& queryPath, bool useStreamLookupJoin) {
@@ -197,9 +195,7 @@ void ExecuteJoinOrderTestDataQuery(const TString& queryPath, bool useStreamLooku
197195

198196
Y_UNIT_TEST_SUITE(KqpJoinOrder) {
199197
Y_UNIT_TEST(Chain65Nodes) {
200-
TChainConstructor chain(65);
201-
chain.CreateTables();
202-
chain.JoinTables();
198+
TChainTester(65).Test();
203199
}
204200

205201
Y_UNIT_TEST_TWIN(FiveWayJoin, StreamLookupJoin) {

0 commit comments

Comments
 (0)