Search in sources :

Example 6 with MutableRel

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;
}
Also used : MutableRel(org.apache.calcite.rel.mutable.MutableRel)

Aggregations

MutableRel (org.apache.calcite.rel.mutable.MutableRel)6 ImmutableList (com.google.common.collect.ImmutableList)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 List (java.util.List)1 HepPlanner (org.apache.calcite.plan.hep.HepPlanner)1 HepProgram (org.apache.calcite.plan.hep.HepProgram)1 HepProgramBuilder (org.apache.calcite.plan.hep.HepProgramBuilder)1 RelNode (org.apache.calcite.rel.RelNode)1 AggregateCall (org.apache.calcite.rel.core.AggregateCall)1 MutableFilter (org.apache.calcite.rel.mutable.MutableFilter)1 RelDataType (org.apache.calcite.rel.type.RelDataType)1 RexExecutorImpl (org.apache.calcite.rex.RexExecutorImpl)1 RelBuilder (org.apache.calcite.tools.RelBuilder)1 ImmutableBitSet (org.apache.calcite.util.ImmutableBitSet)1