Hello All,

I was looking at a bug (in Apache Drill) where in a join query with table
options with different configurations but having same table name is causing
a NULL pointer exception. In the case of the table function it preprocesses
and converts the TranslatableTable to DrillScanRel (here it is a subclass
of AbstractRelNode).

Please do not worry about Drill specific nodes here. However during the
HepPlanning phase drill calls setRoot

    public void setRoot(RelNode rel) {
        this.root = this.addRelToGraph(rel);
        this.dumpGraph();
    }

This prepares the graph. But during debugging this code what I observed is
the

AbstractRelNode.java

  public String recomputeDigest() {
    String tempDigest = computeDigest();
    assert tempDigest != null : "post: return != null";
    String prefix = "rel#" + id + ":";

    // Substring uses the same underlying array of chars, so saves a bit
    // of memory.
    this.desc = prefix + tempDigest;
    this.digest = this.desc.substring(prefix.length());
    return this.digest;
  }


original value for digest is assigned as follows
    this.digest = getRelTypeName() + "#" + id;

This is unique because id value is unique wheres in recomputeDigest digest
will not be unique as this.desc.substring(prefix.length()) is skipping the
id part


I am not sure as to whether is this an issue. I could fix the particular
drill case by overriding the recomputeDigest in DrillScanRel.


Please advise me if this is an issue at the calcite code.


Thanks,
-Hanu

Reply via email to