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)