Currently little specific information known to the planner is passed to the operators. For example, see the `joinType` parameter passed to the Join operators (specifying whether this is a LEFT, RIGHT, INNER of FULL join).
The relevant code passes this information explicitly via the constructors' signature (e.g., see HashJoinPOP, AbstractJoinPop, etc), and uses specific fields for this information, and affects all the test code using it, etc.
In the near future many more such "pieces of information" will possibly be added to Drill, including:
(1) Is this a Semi (or Anti-Semi) join.
(5) Which join columns are not needed (DRILL-6758)
(6) Is this operator positioned between Lateral and UnNest.
(7) For Hash-Agg: Which phase (already implemented).
(8) For Hash-Agg: Perform COUNT (DRILL-6836)
Each addition of such information would require a significant code change, and add some code clutter.
Suggestion: Instead pass a single object containing all the needed planner information. So the next time another field is added, only that object needs to be changed. (Ideally the whole plan could be passed, and then each operator could poke and pick its needed fields)