public void checkPlanIsDeterministic(String sql) { checkPlanIsDeterministic(localQueryRunner.getDefaultSession(), sql); }
@BeforeClass public void setUp() { determinismChecker = new PlanDeterminismChecker((LocalQueryRunner) getQueryRunner()); }
public void checkPlanIsDeterministic(Session session, String sql) { IntStream.range(1, MINIMUM_SUBSEQUENT_SAME_PLANS) .mapToObj(attempt -> getPlanText(session, sql)) .map(planEquivalenceFunction) .reduce((previous, current) -> { assertEquals(previous, current); return current; }); }
@Test public void testTpcdsQ6deterministic() { //This is a query inspired on TPC-DS Q6 that reproduces its plan nondeterminism problems determinismChecker.checkPlanIsDeterministic("SELECT orderdate " + "FROM orders o,\n" + " lineitem i\n" + "WHERE o.orderdate =\n" + " (SELECT DISTINCT (orderdate)\n" + " FROM orders\n" + " WHERE totalprice > 2)\n" + " AND i.quantity > 1.2 *\n" + " (SELECT avg(j.quantity)\n" + " FROM lineitem j\n" + " )\n"); } }
public void checkPlanIsDeterministic(Session session, String sql) { IntStream.range(1, MINIMUM_SUBSEQUENT_SAME_PLANS) .mapToObj(attempt -> getPlanText(session, sql)) .map(planEquivalenceFunction) .reduce((previous, current) -> { assertEquals(previous, current); return current; }); }
@BeforeClass public void setUp() { determinismChecker = new PlanDeterminismChecker((LocalQueryRunner) getQueryRunner()); }
@Override protected void assertUpdate(@Language("SQL") String sql, long count) { determinismChecker.checkPlanIsDeterministic(sql); }
@Override protected void assertQuery(@Language("SQL") String sql) { determinismChecker.checkPlanIsDeterministic(sql); }
determinismChecker.checkPlanIsDeterministic("SELECT\n" + " nation,\n" + " o_year,\n" +
@Override public void assertQueryOrdered(@Language("SQL") String sql) { determinismChecker.checkPlanIsDeterministic(sql); }
@Override protected void assertUpdate(@Language("SQL") String sql) { determinismChecker.checkPlanIsDeterministic(sql); }
@Override protected void assertQuery(Session session, @Language("SQL") String sql) { determinismChecker.checkPlanIsDeterministic(session, sql); }
@Override protected void assertUpdate(Session session, @Language("SQL") String sql) { determinismChecker.checkPlanIsDeterministic(session, sql); }
@Override protected void assertUpdate(Session session, @Language("SQL") String sql, long count) { determinismChecker.checkPlanIsDeterministic(session, sql); }
@Override protected MaterializedResult computeActual(@Language("SQL") String sql) { determinismChecker.checkPlanIsDeterministic(sql); return super.computeActual(sql); }
@Override protected void assertQuery(Session session, @Language("SQL") String actual, @Language("SQL") String expected) { determinismChecker.checkPlanIsDeterministic(session, actual); }
@Override protected void assertQuery(@Language("SQL") String actual, @Language("SQL") String expected) { determinismChecker.checkPlanIsDeterministic(actual); }
@Override protected void assertQueryOrdered(@Language("SQL") String actual, @Language("SQL") String expected) { determinismChecker.checkPlanIsDeterministic(actual); }
@Override protected void assertUpdate(@Language("SQL") String actual, @Language("SQL") String expected) { determinismChecker.checkPlanIsDeterministic(actual); }
@Override protected MaterializedResult computeExpected(@Language("SQL") String sql, List<? extends Type> resultTypes) { determinismChecker.checkPlanIsDeterministic(sql); return super.computeExpected(sql, resultTypes); }