Julian Hyde created CALCITE-2064: ------------------------------------ Summary: Allow a Convention to declare which sub-classes of RelNode it handles Key: CALCITE-2064 URL: https://issues.apache.org/jira/browse/CALCITE-2064 Project: Calcite Issue Type: Bug Reporter: Julian Hyde Assignee: Julian Hyde
Extend {{interface Convention}} so that a convention can declare which sub-classes of RelNode it uses. The method is as follows: {code} interface Convention { <R extends RelNode> Pair<Class<? extends R>, RelFactory<R>> getRelClass(Class<R> clazz); } interface RelFactory<R extends RelNode> { RelNode copy(R r); } interface FilterFactory extends RelFactory<Filter> { RelNode createFilter(RelNode input, RexNode condition); } {code} For example, {{FooConvention}} might have classes {{FooFilter}} and {{FooProject}}. So, {{fooConvention.getRelClass(Filter.class)}} would return a pair, {{(FooFilter.class, new FooFilterFactory())}}. This is a step towards self-describing conventions. A convention could, for example, walk over a tree of logical RelNodes and transcribe them all to its own sub-class of RelNode. And we could have a RelBuilder produce RelNodes to match a particular convention (emulating what is currently done using RelNode.copy). -- This message was sent by Atlassian JIRA (v6.4.14#64029)