Hi, I am trying to create a two stage planner using HepPlanner and then VolcanoPlanner
Which is the correct sequence of steps to pass from SQL to Enumerable ? My goal is to use Hep for very simple queries like simple INSERTs, SELECT * FROM TABLE, SELECT * FROM TABLE WHERE pk=?.... Volcano is overkill for such stuff. This is my idea: 1) get a Planner (that's Volcano) Planner planner = Frameworks.getPlanner(config); 2) Get the logical plan SqlNode n = planner.parse(query); n = planner.validate(n); RelNode logicalPlan = planner.rel(n).project(); 3) Create HepPlanner HepProgram hepProgram = HepProgram. builder() . ?? which Rules ? .build(); HepPlanner hepPlanner = new HepPlanner(hepProgram); hepPlanner.addRelTraitDef(ConventionTraitDef.INSTANCE); hepPlanner.setRoot(logicalPlan); 4) Run HepPlanner RelNode bestForHep = hepPlanner.findBestExp(); 5) Pick Volcano final RelOptPlanner optPlanner = cluster.getPlanner(); 6) Convert to Enumerable final RelOptPlanner optPlanner = cluster.getPlanner(); optPlanner.addRule(CoreRules.FILTER_REDUCE_EXPRESSIONS); RelTraitSet desiredTraits = cluster.traitSet() .replace(EnumerableConvention.INSTANCE); final RelCollation collation = logicalPlan instanceof Sort ? ((Sort) logicalPlan).collation : null; if (collation != null) { desiredTraits = desiredTraits.replace(collation); } final RelNode newRoot = optPlanner.changeTraits(logicalPlan, desiredTraits); optPlanner.setRoot(newRoot); RelNode bestExp = optPlanner.findBestExp(); Any hint/pointer is very appreciated The alternative is to detect such simple queries and use a little set of Rules and not Programs.ofRules(Programs.RULE_SET) Best regards Enrico