@@ -168,7 +168,6 @@ void ExplainJoinOrderTestDataQuery(const TString& queryPath, bool useStreamLooku
168
168
NJson::TJsonValue plan;
169
169
NJson::ReadJsonTree (result.GetPlan (), &plan, true );
170
170
Cerr << result.GetPlan () << Endl;
171
- Cerr << CanonizeJoinOrder (result.GetPlan ()) << Endl;
172
171
}
173
172
}
174
173
@@ -194,7 +193,7 @@ Y_UNIT_TEST_SUITE(KqpJoinOrder) {
194
193
TChainTester (65 ).Test ();
195
194
}
196
195
197
- void ExecuteJoinOrderTestDataQueryWithStats (const TString& queryPath, const TString& statsPath, bool useStreamLookupJoin, bool useColumnStore) {
196
+ TString ExecuteJoinOrderTestDataQueryWithStats (const TString& queryPath, const TString& statsPath, bool useStreamLookupJoin, bool useColumnStore) {
198
197
auto kikimr = GetKikimrWithJoinSettings (useStreamLookupJoin, GetStatic (statsPath));
199
198
auto db = kikimr.GetTableClient ();
200
199
auto session = db.CreateSession ().GetValueSync ().GetSession ();
@@ -208,7 +207,9 @@ Y_UNIT_TEST_SUITE(KqpJoinOrder) {
208
207
auto execRes = db.StreamExecuteScanQuery (query, TStreamExecScanQuerySettings ().Explain (true )).ExtractValueSync ();
209
208
execRes.GetIssues ().PrintTo (Cerr);
210
209
UNIT_ASSERT_VALUES_EQUAL (execRes.GetStatus (), EStatus::SUCCESS);
211
- Cerr << CollectStreamResult (execRes).PlanJson ;
210
+ auto plan = CollectStreamResult (execRes).PlanJson ;
211
+ Cerr << plan.GetRef ();
212
+ return plan.GetRef ();
212
213
}
213
214
}
214
215
@@ -256,7 +257,7 @@ Y_UNIT_TEST_SUITE(KqpJoinOrder) {
256
257
);
257
258
}
258
259
259
- Y_UNIT_TEST_XOR_OR_BOTH_FALSE (FiveWayJoinWithPreds, StreamLookupJoin, ColumnStore) {
260
+ Y_UNIT_TEST_XOR_OR_BOTH_FALSE (FiveWayJoinWithPreds, StreamLookupJoin, ColumnStore) {
260
261
ExecuteJoinOrderTestDataQueryWithStats (
261
262
" queries/five_way_join_with_preds.sql" , " stats/basic.json" , StreamLookupJoin, ColumnStore
262
263
);
@@ -362,6 +363,16 @@ Y_UNIT_TEST_SUITE(KqpJoinOrder) {
362
363
ExecuteJoinOrderTestDataQueryWithStats (" queries/tpcds96.sql" , " stats/tpcds1000s.json" , StreamLookupJoin, ColumnStore);
363
364
}
364
365
366
+ Y_UNIT_TEST_XOR_OR_BOTH_FALSE (TestJoinOrderHintsSimple, StreamLookupJoin, ColumnStore) {
367
+ auto plan = ExecuteJoinOrderTestDataQueryWithStats (" queries/join_order_hints_simple.sql" , " stats/basic.json" , StreamLookupJoin, ColumnStore);
368
+ UNIT_ASSERT_VALUES_EQUAL (GetJoinOrder (plan).GetStringRobust (), R"( ["T",["R","S"]])" ) ;
369
+ }
370
+
371
+ Y_UNIT_TEST_XOR_OR_BOTH_FALSE (TestJoinOrderHintsComplex, StreamLookupJoin, ColumnStore) {
372
+ auto plan = ExecuteJoinOrderTestDataQueryWithStats (" queries/join_order_hints_complex.sql" , " stats/basic.json" , StreamLookupJoin, ColumnStore);
373
+ UNIT_ASSERT_VALUES_EQUAL (GetJoinOrder (plan).GetStringRobust (), R"( [[["R","S"],["T","U"]],"V"])" ) ;
374
+ }
375
+
365
376
void JoinOrderTestWithOverridenStats (const TString& queryPath, const TString& statsPath, TString correctJoinOrderPath, bool useStreamLookupJoin, bool useColumnStore
366
377
) {
367
378
auto kikimr = GetKikimrWithJoinSettings (useStreamLookupJoin, GetStatic (statsPath));
@@ -386,7 +397,7 @@ Y_UNIT_TEST_SUITE(KqpJoinOrder) {
386
397
correctJoinOrderPath = correctJoinOrderPath.substr (0 , correctJoinOrderPath.find (" .json" )) + " _column_store.json" ;
387
398
}
388
399
389
- auto currentJoinOrder = CanonizeJoinOrder (result.GetPlan ());
400
+ auto currentJoinOrder = GetDetailedJoinOrder (result.GetPlan ());
390
401
Cerr << currentJoinOrder << Endl;
391
402
/* to canonize the tests use --test-param CANONIZE_JOIN_ORDER_TESTS=TRUE */
392
403
TString canonize = GetTestParam (" CANONIZE_JOIN_ORDER_TESTS" ); canonize.to_lower ();
0 commit comments