如何在 Calcite 中注册 JdbcToXXXConverter?

问题描述

我有一个方解石约定,名为:XxxConvention, 和一个名为:JdbcToXxxConverterRule的ConverterRule,它需要一个JdbcConventio作为参数。(有多个JdbcSchema,因此在应用程序上下文中有多个JdbcConvention)

我想在 JdbcConvention 中注册 JdbcToXxxConverterRule,但发现很难实现。

在 Jdbc 约定中

 @Override public void register(RelOptPlanner planner) {
    for (RelOptRule rule : Jdbcrules.rules(this)) {
      planner.addRule(rule);
    }
    planner.addRule(CoreRules.FILTER_SET_OP_TRANSPOSE);
    planner.addRule(CoreRules.PROJECT_REMOVE);
  }

JdbcConvention 使用 Jdbcrules.rules(this) 检索规则,Jdbcrules.rules(this) 的结果是不可更改的:

  public static List<RelOptRule> rules(JdbcConvention out) {
    final ImmutableList.Builder<RelOptRule> b = ImmutableList.builder();
    foreachRule(out,b::add);
    return b.build();
  }

 private static void foreachRule(JdbcConvention out,Consumer<RelRule<?>> consumer) {
    consumer.accept(JdbcToEnumerableConverterRule.create(out));
    consumer.accept(JdbcJoinRule.create(out));
    consumer.accept(JdbcCalcrule.create(out));
    consumer.accept(JdbcProjectRule.create(out));
    consumer.accept(JdbcFilterRule.create(out));
    consumer.accept(JdbcAggregateRule.create(out));
    consumer.accept(JdbcSortRule.create(out));
    consumer.accept(JdbcUnionRule.create(out));
    consumer.accept(JdbcIntersectRule.create(out));
    consumer.accept(JdbcMinusRule.create(out));
    consumer.accept(JdbcTableModificationRule.create(out));
    consumer.accept(JdbcValuesRule.create(out));
  }

那么我如何在 Calcite 中注册我的 JdbcToXxxConvention?期待听到您的想法。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)