Github user HanumathRao commented on a diff in the pull request:
https://github.com/apache/drill/pull/1152#discussion_r174558063
--- Diff:
exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillFilterItemStarReWriterRule.java
---
@@ -54,83 +44,189 @@
import static
org.apache.drill.exec.planner.logical.FieldsReWriterUtil.FieldsReWriter;
/**
- * Rule will transform filter -> project -> scan call with item star
fields in filter
- * into project -> filter -> project -> scan where item star fields are
pushed into scan
- * and replaced with actual field references.
+ * Rule will transform item star fields in filter and replaced with actual
field references.
*
* This will help partition pruning and push down rules to detect fields
that can be pruned or push downed.
* Item star operator appears when sub-select or cte with star are used as
source.
*/
-public class DrillFilterItemStarReWriterRule extends RelOptRule {
+public class DrillFilterItemStarReWriterRule {
- public static final DrillFilterItemStarReWriterRule INSTANCE = new
DrillFilterItemStarReWriterRule(
- RelOptHelper.some(Filter.class, RelOptHelper.some(Project.class,
RelOptHelper.any( TableScan.class))),
- "DrillFilterItemStarReWriterRule");
+ public static final DrillFilterItemStarReWriterRule.ProjectOnScan
PROJECT_ON_SCAN = new ProjectOnScan(
+ RelOptHelper.some(DrillProjectRel.class,
RelOptHelper.any(DrillScanRel.class)),
+ "DrillFilterItemStarReWriterRule.ProjectOnScan");
- private DrillFilterItemStarReWriterRule(RelOptRuleOperand operand,
String id) {
- super(operand, id);
- }
+ public static final DrillFilterItemStarReWriterRule.FilterOnScan
FILTER_ON_SCAN = new FilterOnScan(
+ RelOptHelper.some(DrillFilterRel.class,
RelOptHelper.any(DrillScanRel.class)),
+ "DrillFilterItemStarReWriterRule.FilterOnScan");
- @Override
- public void onMatch(RelOptRuleCall call) {
- Filter filterRel = call.rel(0);
- Project projectRel = call.rel(1);
- TableScan scanRel = call.rel(2);
+ public static final DrillFilterItemStarReWriterRule.FilterOnProject
FILTER_ON_PROJECT = new FilterOnProject(
--- End diff --
Would it be good to rename this as FILTER_PROJECT_SCAN?
---