use of org.apache.calcite.rel.mutable.MutableRel in project calcite by apache.
the class SubstitutionVisitor method matchRecurse.
private UnifyResult matchRecurse(MutableRel target) {
// not called
assert false;
final List<MutableRel> targetInputs = target.getInputs();
MutableRel queryParent = null;
for (MutableRel targetInput : targetInputs) {
UnifyResult unifyResult = matchRecurse(targetInput);
if (unifyResult == null) {
return null;
}
queryParent = unifyResult.call.query.replaceInParent(unifyResult.result);
}
if (targetInputs.isEmpty()) {
for (MutableRel queryLeaf : queryLeaves) {
for (UnifyRule rule : applicableRules(queryLeaf, target)) {
final UnifyResult x = apply(rule, queryLeaf, target);
if (x != null) {
if (DEBUG) {
System.out.println("Rule: " + rule + "\nQuery:\n" + queryParent + (x.call.query != queryParent ? "\nQuery (original):\n" + queryParent : "") + "\nTarget:\n" + target.deep() + "\nResult:\n" + x.result.deep() + "\n");
}
return x;
}
}
}
} else {
assert queryParent != null;
for (UnifyRule rule : applicableRules(queryParent, target)) {
final UnifyResult x = apply(rule, queryParent, target);
if (x != null) {
if (DEBUG) {
System.out.println("Rule: " + rule + "\nQuery:\n" + queryParent.deep() + (x.call.query != queryParent ? "\nQuery (original):\n" + queryParent.toString() : "") + "\nTarget:\n" + target.deep() + "\nResult:\n" + x.result.deep() + "\n");
}
return x;
}
}
}
if (DEBUG) {
System.out.println("Unify failed:" + "\nQuery:\n" + queryParent.toString() + "\nTarget:\n" + target.toString() + "\n");
}
return null;
}
Aggregations