protected boolean performBottomUpAction(AbstractLogicalOperator op) throws AlgebricksException { // Only inline variables in operators that can deal with arbitrary expressions. if (!op.requiresVariableReferenceExpressions()) { inlineVisitor.setOperator(op); return op.accept(inlineVisitor, inlineVisitor); } return false; }
private IPhysicalPropertiesVector newPropertiesDiff(AbstractLogicalOperator newChild, IPhysicalPropertiesVector required, boolean mayExpandPartitioningProperties, IOptimizationContext context) throws AlgebricksException { IPhysicalPropertiesVector newDelivered = newChild.getDeliveredPhysicalProperties(); Map<LogicalVariable, EquivalenceClass> newChildEqClasses = context.getEquivalenceClassMap(newChild); List<FunctionalDependency> newChildFDs = context.getFDList(newChild); if (newChildEqClasses == null || newChildFDs == null) { FDsAndEquivClassesVisitor fdsVisitor = new FDsAndEquivClassesVisitor(); newChild.accept(fdsVisitor, context); newChildEqClasses = context.getEquivalenceClassMap(newChild); newChildFDs = context.getFDList(newChild); } if (AlgebricksConfig.ALGEBRICKS_LOGGER.isTraceEnabled()) { AlgebricksConfig.ALGEBRICKS_LOGGER.trace( ">>>> Required properties for new op. " + newChild.getPhysicalOperator() + ": " + required + "\n"); } return newDelivered.getUnsatisfiedPropertiesFrom(required, mayExpandPartitioningProperties, newChildEqClasses, newChildFDs); }
@Override public void printOperator(AbstractLogicalOperator op, int indent) throws AlgebricksException { final AlgebricksAppendable out = this.get(); op.accept(this, indent); IPhysicalOperator pOp = op.getPhysicalOperator(); if (pOp != null) { out.append("\n"); pad(out, indent); appendln(out, "-- " + pOp.toString() + " |" + op.getExecutionMode() + "|"); } else { appendln(out, " -- |" + op.getExecutionMode() + "|"); } for (Mutable<ILogicalOperator> i : op.getInputs()) { printOperator((AbstractLogicalOperator) i.getValue(), indent + 2); } }
appendln(out, "{"); currentIndent++; op.accept(this, currentIndent); appendln(out, ","); pad(out, currentIndent);