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)