@Override public PhysicalPlan getPlan(SqlHandlerConfig config, String sql, SqlNode sqlNode) throws Exception { try{ final ConvertedRelNode convertedRelNode = PrelTransformer.validateAndConvert(config, sqlNode); final RelDataType validatedRowType = convertedRelNode.getValidatedRowType(); final RelNode queryRelNode = convertedRelNode.getConvertedNode(); final Rel drel = PrelTransformer.convertToDrel(config, queryRelNode, validatedRowType); final Pair<Prel, String> convertToPrel = PrelTransformer.convertToPrel(config, drel); final Prel prel = convertToPrel.getKey(); textPlan = convertToPrel.getValue(); final PhysicalOperator pop = PrelTransformer.convertToPop(config, prel); final PhysicalPlan plan = PrelTransformer.convertToPlan(config, pop); logger.debug("Final Physical Plan {}", textPlan); PrelTransformer.log(config, "Dremio Plan", plan, logger); return plan; }catch(Exception ex){ throw SqlExceptionHelper.coerceException(logger, sql, ex, true); } }
@Override public Prel visitPrel(Prel prel, Void value) throws IOException { if (prel instanceof LimitPrel) { LimitPrel limit = (LimitPrel) prel; if(isLimit0(limit.getFetch())){ PhysicalOperator op = PrelTransformer.convertToPop(config, prel); BatchSchema schema = op.getSchema(config.getContext().getFunctionRegistry()); // make sure to remove any selection vector modes since we're now the leaf node. schema = schema.clone(SelectionVectorMode.NONE); return new EmptyPrel(prel.getCluster(), prel.getTraitSet(), prel.getRowType(), schema); } } List<RelNode> children = new ArrayList<>(); for(Prel child : prel){ children.add(child.accept(this, null)); } return (Prel) prel.copy(prel.getTraitSet(), children); }
final Prel prel = convertToPrel.getKey(); this.textPlan = convertToPrel.getValue(); PhysicalOperator pop = PrelTransformer.convertToPop(config, prel); PhysicalPlan plan = PrelTransformer.convertToPlan(config, pop);
final Prel prel = convertToPrel.getKey(); this.textPlan = convertToPrel.getValue(); PhysicalOperator pop = PrelTransformer.convertToPop(config, prel); PhysicalPlan plan = PrelTransformer.convertToPlan(config, pop); if (logger.isTraceEnabled()) {
assertThat(prePhysicaltextPlan, CoreMatchers.containsString("EasyScan")); final PhysicalOperator pop = PrelTransformer.convertToPop(config, prel); final PhysicalPlan plan = PrelTransformer.convertToPlan(config, pop); final String postPhysicaltextPlan = plan.unparse(config.getContext().getLpPersistence().getMapper().writer());
final Prel prel = convertToPrel.getKey(); final PhysicalOperator pop = PrelTransformer.convertToPop(config, prel); final PhysicalPlan plan = PrelTransformer.convertToPlan(config, pop);
final Prel prel = convertToPrel.getKey(); textPlan = convertToPrel.getValue(); PhysicalOperator pop = PrelTransformer.convertToPop(config, prel); PhysicalPlan plan = PrelTransformer.convertToPlan(config, pop); PrelTransformer.log(config, "Dremio Plan", plan, logger);