@Override public Set<RelOptRule> getRules(OptimizerRulesContext optimizerContext, PlannerPhase phase, SourceType pluginType) { switch(phase){ case LOGICAL: ImmutableSet.Builder<RelOptRule> builder = ImmutableSet.builder(); builder.add(new FileSystemDrule(pluginType)); if(optimizerContext.getPlannerSettings().isPartitionPruningEnabled()){ builder.add(new PruneScanRuleFilterOnProject<>(pluginType, FilesystemScanDrel.class, optimizerContext)); builder.add(new PruneScanRuleFilterOnScan<>(pluginType, FilesystemScanDrel.class, optimizerContext)); } return builder.build(); case PHYSICAL: return ImmutableSet.<RelOptRule>of( new EasyFilesystemScanPrule(pluginType), new ParquetFilesystemScanPrule(pluginType), ConvertCountToDirectScan.getAggOnScan(pluginType), ConvertCountToDirectScan.getAggProjOnScan(pluginType) ); default: return ImmutableSet.<RelOptRule>of(); } }
@Override public Set<RelOptRule> getRules(OptimizerRulesContext optimizerContext, PlannerPhase phase, SourceType pluginType) { switch(phase){ case LOGICAL: ImmutableSet.Builder<RelOptRule> builder = ImmutableSet.builder(); builder.add(new HiveScanDrule(pluginType)); builder.add(EliminateEmptyScans.INSTANCE); final PlannerSettings plannerSettings = optimizerContext.getPlannerSettings(); if(plannerSettings.isPartitionPruningEnabled()){ builder.add(new PruneScanRuleFilterOnProject<>(pluginType, HiveScanDrel.class, optimizerContext)); builder.add(new PruneScanRuleFilterOnScan<>(pluginType, HiveScanDrel.class, optimizerContext)); } final OptionManager options = plannerSettings.getOptions(); if (options.getOption(HivePluginOptions.HIVE_ORC_READER_VECTORIZE) && options.getOption(HivePluginOptions.ENABLE_FILTER_PUSHDOWN_HIVE_ORC)) { builder.add(new ORCFilterPushDownRule(pluginType)); } return builder.build(); case PHYSICAL: return ImmutableSet.<RelOptRule>of( new HiveScanPrule(pluginType) ); default: return ImmutableSet.<RelOptRule>of(); } }