@Override public void onMatch(RelOptRuleCall call) { LOG.debug("MyAggregationPushDownRule.onMatch has been called"); final HiveAggregate agg = call.rel(0); final HiveJdbcConverter converter = call.rel(1); Aggregate newHiveAggregate = agg.copy(agg.getTraitSet(), converter.getInput(), agg.getIndicatorCount() !=0, agg.getGroupSet(), agg.getGroupSets(), agg.getAggCallList()); JdbcAggregate newJdbcAggregate = (JdbcAggregate) new JdbcAggregateRule(converter.getJdbcConvention()).convert(newHiveAggregate); if (newJdbcAggregate != null) { RelNode converterRes = converter.copy(converter.getTraitSet(), Arrays.asList(newJdbcAggregate)); call.transformTo(converterRes); } }
public RelNode convert(RelNode rel) { final Aggregate agg = (Aggregate) rel; if (agg.getGroupSets().size() != 1) { // GROUPING SETS not supported; see // [CALCITE-734] Push GROUPING SETS to underlying SQL via JDBC adapter return null; } final RelTraitSet traitSet = agg.getTraitSet().replace(out); try { return new JdbcAggregate(rel.getCluster(), traitSet, convert(agg.getInput(), out), agg.indicator, agg.getGroupSet(), agg.getGroupSets(), agg.getAggCallList()); } catch (InvalidRelException e) { LOGGER.debug(e.toString()); return null; } } }
public RelNode convert(RelNode rel) { final Aggregate agg = (Aggregate) rel; if (agg.getGroupSets().size() != 1) { // GROUPING SETS not supported; see // [CALCITE-734] Push GROUPING SETS to underlying SQL via JDBC adapter return null; } final RelTraitSet traitSet = agg.getTraitSet().replace(out); try { return new JdbcAggregate(rel.getCluster(), traitSet, convert(agg.getInput(), out), agg.indicator, agg.getGroupSet(), agg.getGroupSets(), agg.getAggCallList()); } catch (InvalidRelException e) { LOGGER.debug(e.toString()); return null; } } }
public static List<RelOptRule> rules(JdbcConvention out, RelBuilderFactory relBuilderFactory) { return ImmutableList.of( new JdbcToEnumerableConverterRule(out, relBuilderFactory), new JdbcJoinRule(out, relBuilderFactory), new JdbcCalcRule(out, relBuilderFactory), new JdbcProjectRule(out, relBuilderFactory), new JdbcFilterRule(out, relBuilderFactory), new JdbcAggregateRule(out, relBuilderFactory), new JdbcSortRule(out, relBuilderFactory), new JdbcUnionRule(out, relBuilderFactory), new JdbcIntersectRule(out, relBuilderFactory), new JdbcMinusRule(out, relBuilderFactory), new JdbcTableModificationRule(out, relBuilderFactory), new JdbcValuesRule(out, relBuilderFactory)); }
public static List<RelOptRule> rules(JdbcConvention out, RelBuilderFactory relBuilderFactory) { return ImmutableList.of( new JdbcToEnumerableConverterRule(out, relBuilderFactory), new JdbcJoinRule(out, relBuilderFactory), new JdbcCalcRule(out, relBuilderFactory), new JdbcProjectRule(out, relBuilderFactory), new JdbcFilterRule(out, relBuilderFactory), new JdbcAggregateRule(out, relBuilderFactory), new JdbcSortRule(out, relBuilderFactory), new JdbcUnionRule(out, relBuilderFactory), new JdbcIntersectRule(out, relBuilderFactory), new JdbcMinusRule(out, relBuilderFactory), new JdbcTableModificationRule(out, relBuilderFactory), new JdbcValuesRule(out, relBuilderFactory)); }