You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by "Vladimir Sitnikov (Jira)" <ji...@apache.org> on 2020/10/11 13:16:00 UTC
[jira] [Created] (CALCITE-4327) RelBuilder#scan(...) should work
when used in RelRule#onMatch as call.builder()
Vladimir Sitnikov created CALCITE-4327:
------------------------------------------
Summary: RelBuilder#scan(...) should work when used in RelRule#onMatch as call.builder()
Key: CALCITE-4327
URL: https://issues.apache.org/jira/browse/CALCITE-4327
Project: Calcite
Issue Type: Sub-task
Components: core
Affects Versions: 1.26.0
Reporter: Vladimir Sitnikov
It turns out {{RelBuilder#relOptSchema}} is often null.
For instance,
{code:java}
public abstract class RelOptRuleCall {
public RelBuilder builder() {
return rule.relBuilderFactory.create(rel(0).getCluster(), /* schema= */ null);
}
{code}
It leads to NPE in user code.
I suggest either populate {{relOptSchema}} with root schema by default or remove the field to avoid confusion for those who would try {{scan(...)}} method.
It might make sense to add RelOptSchema parameter to {{scan(Iterable<String>)}} method as well.
Sample use case:
{code:java}
@Override
public void onMatch(RelOptRuleCall call) {
List<String> indexName = ...;
RelBuilder relBuilder = call.builder()
.scan(indexName);
{code}
{noformat}
Caused by: java.lang.NullPointerException
at org.apache.calcite.tools.RelBuilder.scan(RelBuilder.java:1094)
at com.github.vlsi.mat.calcite.schema.objects.InstanceAccessByClassIdRule.onMatch(InstanceAccessByClassIdRule.java:44)
at org.apache.calcite.plan.volcano.VolcanoRuleCall.onMatch(VolcanoRuleCall.java:229)
... 75 more
{noformat}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)