I mean the rule you write could be placed in the PlannerPhase.JOIN_PlANNING which uses the HepPlanner. This phase is to solve the logical relnode . Hope to help you. Muhammad Gelbana <m.gelb...@gmail.com>于2017年3月30日 周四上午12:07写道:
> Thanks a lot Weijie, I believe I'm very close now. I hope you don't mind > few more questions please: > > > 1. The new rule you are mentioning is a physical rule ? So I should > implement the Prel interface ? > 2. By "traversing the join to find the ScanRel" > - This sounds like I have to "search" for something. Shouldn't I just > work on transforming the left (i.e. DrillJoinRel's getLeft() method) > and > right (i.e. DrillJoinRel's getLeft() method) join objects ? > - The "left" and "right" elements of the DrillJoinRel object are of > type RelSubset, not *ScanRel* and I can't find a type called > *ScanRel*. > I suppose you meant *ScanPrel*, specially because it implements the > *Prel* interface that provides the *getPhysicalOperator* method. > 3. What if multiple physical or logical rules match for a single node, > what decides which rule will be applied and which will be rejected ? Is > it > the *AbstractRelNode.computeSelfCost(RelOptPlanner)* method ? What if > more than one rule produces the same cost ? > > I'll go ahead and see what I can do for now before hopefully you may offer > more guidance. THANKS A LOT. > > *---------------------* > *Muhammad Gelbana* > http://www.linkedin.com/in/mgelbana > > On Wed, Mar 29, 2017 at 4:23 AM, weijie tong <tongweijie...@gmail.com> > wrote: > > > to avoid misunderstanding , the new equivalent ScanRel is to have the > > joined ScanRel nodes's GroupScans, as the GroupScans indirectly hold the > > underlying storage information. > > > > On Wed, Mar 29, 2017 at 10:15 AM, weijie tong <tongweijie...@gmail.com> > > wrote: > > > > > > > > my suggestion is you define a rule which matches the DrillJoinRel > RelNode > > > , then at the onMatch method ,you traverse the join children to find > the > > > ScanRel nodes . You define a new ScanRel which include the ScanRel > nodes > > > you find last step. Then transform the JoinRel to this equivalent new > > > ScanRel. > > > Finally , the plan tree will not have the JoinRel but the ScanRel. > You > > > can let your join plan rule in the PlannerPhase.JOIN_PLANNING. > > > > > >