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