|
38 | 38 | public class TablePruningTest extends TablePruningTestBase { |
39 | 39 | @BeforeAll |
40 | 40 | public static void setUp() throws Exception { |
| 41 | + FeConstants.runningUnitTest = true; |
41 | 42 | UtFrameUtils.createMinStarRocksCluster(); |
42 | 43 | ctx = UtFrameUtils.createDefaultCtx(); |
43 | 44 | ctx.getSessionVariable().setEnablePipelineEngine(true); |
44 | 45 | ctx.getSessionVariable().setCboPushDownAggregateMode(-1); |
45 | | - FeConstants.runningUnitTest = true; |
| 46 | + ctx.getSessionVariable().setOptimizerExecuteTimeout(10000); |
46 | 47 | starRocksAssert = new StarRocksAssert(ctx); |
47 | 48 | starRocksAssert.withDatabase(StatsConstants.STATISTICS_DB_NAME) |
48 | 49 | .useDatabase(StatsConstants.STATISTICS_DB_NAME) |
@@ -443,41 +444,48 @@ public void testPermuteFromClausesRandomlyAndMoveOnJoinPredicatesToWhereClauses( |
443 | 444 | "E", |
444 | 445 | "FI", |
445 | 446 | "FII"); |
446 | | - List<String> predicates = Lists.newArrayList( |
447 | | - "A0.a_pk = A1.a_pk", |
448 | | - "A0.a_pk = A2.a_pk", |
449 | | - "A2.a_pk = D0.d_pk", |
450 | | - "D0.d_pk = D1.d_pk", |
451 | | - "D0.d_pk = D2.d_pk", |
452 | | - "A0.a_b_fk = B.b_pk", |
453 | | - "B.b_ci_fk = CI.ci_pk", |
454 | | - "B.b_cii_fk0 = CII.cii_pk0", |
455 | | - "B.b_cii_fk1 = CII.cii_pk1", |
456 | | - "D0.d_e_fk = E.e_pk", |
457 | | - "E.e_fi_fk = FI.fi_pk", |
458 | | - "E.e_fii_fk0 = FII.fii_pk0", |
459 | | - "E.e_fii_fk1 = FII.fii_pk1", |
460 | | - "D2.d_c3>100" |
461 | | - ); |
| 447 | + |
462 | 448 | Object[][] testCases = new Object[][] { |
463 | 449 | {"avg(A0.a_c0+A1.a_c1), sum(A2.a_c2), max(B.b_pk), min(D0.d_c0), min(D1.d_c1)", "", 1, 1}, |
464 | 450 | {"A0.a_c0+A1.a_c1, A2.a_c2, B.b_pk, D0.d_c0, D1.d_c1", "limit 1", 1, 1}, |
465 | 451 | {"sum(FII.fii_c0), sum(FII.fii_c0+1)", "limit 1", 1, 1}, |
466 | 452 | {"sum(FII.fii_c0), sum(CII.cii_c0)", "limit 1", 1, 1, 1}, |
467 | 453 | }; |
| 454 | + String[] whereClauses = new String[] { |
| 455 | + "A0.a_pk = A2.a_pk AND A0.a_pk = A1.a_pk AND E.e_fii_fk1 = FII.fii_pk1 AND D0.d_e_fk = E.e_pk " + |
| 456 | + "AND D0.d_pk = D2.d_pk AND A2.a_pk = D0.d_pk AND D0.d_pk = D1.d_pk AND A0.a_b_fk = B.b_pk " + |
| 457 | + "AND B.b_cii_fk1 = CII.cii_pk1 AND B.b_ci_fk = CI.ci_pk AND B.b_cii_fk0 = CII.cii_pk0 " + |
| 458 | + "AND D2.d_c3>100 AND E.e_fi_fk = FI.fi_pk AND E.e_fii_fk0 = FII.fii_pk0", |
| 459 | + "A0.a_pk = A1.a_pk AND D0.d_pk = D1.d_pk AND A0.a_pk = A2.a_pk AND D0.d_pk = D2.d_pk " + |
| 460 | + "AND D0.d_e_fk = E.e_pk AND A2.a_pk = D0.d_pk AND D2.d_c3>100 AND A0.a_b_fk = B.b_pk " + |
| 461 | + "AND B.b_ci_fk = CI.ci_pk AND B.b_cii_fk1 = CII.cii_pk1 AND B.b_cii_fk0 = CII.cii_pk0 " + |
| 462 | + "AND E.e_fii_fk0 = FII.fii_pk0 AND E.e_fi_fk = FI.fi_pk AND E.e_fii_fk1 = FII.fii_pk1", |
| 463 | + "A0.a_pk = A1.a_pk AND E.e_fii_fk0 = FII.fii_pk0 AND A0.a_b_fk = B.b_pk AND A0.a_pk = A2.a_pk " + |
| 464 | + "AND B.b_cii_fk0 = CII.cii_pk0 AND B.b_cii_fk1 = CII.cii_pk1 AND D2.d_c3>100 " + |
| 465 | + "AND B.b_ci_fk = CI.ci_pk AND D0.d_pk = D1.d_pk AND A2.a_pk = D0.d_pk " + |
| 466 | + "AND E.e_fi_fk = FI.fi_pk AND D0.d_pk = D2.d_pk AND D0.d_e_fk = E.e_pk " + |
| 467 | + "AND E.e_fii_fk1 = FII.fii_pk1", |
| 468 | + "A0.a_pk = A1.a_pk AND A0.a_pk = A2.a_pk AND D2.d_c3>100 AND A2.a_pk = D0.d_pk " + |
| 469 | + "AND D0.d_pk = D1.d_pk AND D0.d_e_fk = E.e_pk AND E.e_fi_fk = FI.fi_pk " + |
| 470 | + "AND D0.d_pk = D2.d_pk AND E.e_fii_fk0 = FII.fii_pk0 AND A0.a_b_fk = B.b_pk " + |
| 471 | + "AND B.b_ci_fk = CI.ci_pk AND B.b_cii_fk1 = CII.cii_pk1 AND B.b_cii_fk0 = CII.cii_pk0 " + |
| 472 | + "AND E.e_fii_fk1 = FII.fii_pk1", |
| 473 | + "A0.a_pk = A1.a_pk AND A0.a_pk = A2.a_pk AND D0.d_pk = D1.d_pk AND D2.d_c3>100 " + |
| 474 | + "AND A2.a_pk = D0.d_pk AND A0.a_b_fk = B.b_pk AND D0.d_pk = D2.d_pk " + |
| 475 | + "AND B.b_ci_fk = CI.ci_pk AND B.b_cii_fk0 = CII.cii_pk0 AND D0.d_e_fk = E.e_pk " + |
| 476 | + "AND B.b_cii_fk1 = CII.cii_pk1 AND E.e_fi_fk = FI.fi_pk AND E.e_fii_fk0 = FII.fii_pk0 " + |
| 477 | + "AND E.e_fii_fk1 = FII.fii_pk1", |
| 478 | + |
| 479 | + }; |
468 | 480 | String sqlFmt = "select %s from %s where %s %s"; |
469 | 481 | for (Object[] tc : testCases) { |
470 | 482 | String selectItems = (String) tc[0]; |
471 | 483 | String extraLimit = (String) tc[1]; |
472 | 484 | int rboNumHashJoins = (Integer) tc[2]; |
473 | 485 | int finalNmHashJoins = (Integer) tc[3]; |
474 | 486 |
|
475 | | - for (int i = 0; i < 10; ++i) { |
476 | | - String fromClause = |
477 | | - tables.stream().sorted((a, b) -> new Random().nextInt(3) - 1) |
478 | | - .collect(Collectors.joining(",\n")); |
479 | | - String whereClause = predicates.stream().sorted((a, b) -> new Random().nextInt(3) - 1) |
480 | | - .collect(Collectors.joining("\nAND ")); |
| 487 | + for (String whereClause : whereClauses) { |
| 488 | + String fromClause = tables.stream().collect(Collectors.joining(",\n")); |
481 | 489 | String sql = String.format(sqlFmt, selectItems, fromClause, whereClause, extraLimit); |
482 | 490 | checkHashJoinCountWithBothRBOAndCBOLessThan(sql, 12); |
483 | 491 | } |
|
0 commit comments