protected void assertPlan(String sql, LogicalPlanner.Stage stage, PlanMatchPattern pattern) { List<PlanOptimizer> optimizers = queryRunner.getPlanOptimizers(true); assertPlan(sql, stage, pattern, optimizers); }
protected void assertPlan(String sql, LogicalPlanner.Stage stage, PlanMatchPattern pattern, Predicate<PlanOptimizer> optimizerPredicate) { List<PlanOptimizer> optimizers = queryRunner.getPlanOptimizers(true).stream() .filter(optimizerPredicate) .collect(toList()); assertPlan(sql, stage, pattern, optimizers); }
public Plan createPlan(Session session, @Language("SQL") String sql, LogicalPlanner.Stage stage, boolean forceSingleNode, WarningCollector warningCollector) { PreparedQuery preparedQuery = new QueryPreparer(sqlParser).prepareQuery(session, sql); assertFormattedSql(sqlParser, createParsingOptions(session), preparedQuery.getStatement()); return createPlan(session, sql, getPlanOptimizers(forceSingleNode), stage, warningCollector); }
@Test public void testFilteredSelectFromPartitionedTable() { // use all optimizers, including AddExchanges List<PlanOptimizer> allOptimizers = getQueryRunner().getPlanOptimizers(false); assertPlan( "SELECT DISTINCT orderstatus FROM orders", // TODO this could be optimized to VALUES with values from partitions anyTree( tableScan("orders")), allOptimizers); assertPlan( "SELECT orderstatus FROM orders WHERE orderstatus = 'O'", // predicate matches exactly single partition, no FilterNode needed output( exchange( tableScan("orders"))), allOptimizers); assertPlan( "SELECT orderstatus FROM orders WHERE orderstatus = 'no_such_partition_value'", output( values("orderstatus")), allOptimizers); }