@Override public Boolean visitAssignOperator(AssignOperator op, ILogicalOperator arg) throws AlgebricksException { AbstractLogicalOperator aop = (AbstractLogicalOperator) arg; if (aop.getOperatorTag() != LogicalOperatorTag.ASSIGN) { return Boolean.FALSE; } AssignOperator assignOpArg = (AssignOperator) copyAndSubstituteVar(op, arg); boolean isomorphic = VariableUtilities.varListEqualUnordered(getPairList(op.getVariables(), op.getExpressions()), getPairList(assignOpArg.getVariables(), assignOpArg.getExpressions())); return isomorphic; }
@Override public Boolean visitAggregateOperator(AggregateOperator op, ILogicalOperator arg) throws AlgebricksException { AbstractLogicalOperator aop = (AbstractLogicalOperator) arg; if (aop.getOperatorTag() != LogicalOperatorTag.AGGREGATE) { return Boolean.FALSE; } AggregateOperator aggOpArg = (AggregateOperator) copyAndSubstituteVar(op, arg); boolean isomorphic = VariableUtilities.varListEqualUnordered(getPairList(op.getVariables(), op.getExpressions()), getPairList(aggOpArg.getVariables(), aggOpArg.getExpressions())); return isomorphic; }
@Override public Boolean visitRunningAggregateOperator(RunningAggregateOperator op, ILogicalOperator arg) throws AlgebricksException { AbstractLogicalOperator aop = (AbstractLogicalOperator) arg; if (aop.getOperatorTag() != LogicalOperatorTag.RUNNINGAGGREGATE) { return Boolean.FALSE; } RunningAggregateOperator aggOpArg = (RunningAggregateOperator) copyAndSubstituteVar(op, arg); boolean isomorphic = VariableUtilities.varListEqualUnordered(getPairList(op.getVariables(), op.getExpressions()), getPairList(aggOpArg.getVariables(), aggOpArg.getExpressions())); return isomorphic; }
@Override public Boolean visitWindowOperator(WindowOperator op, ILogicalOperator arg) throws AlgebricksException { AbstractLogicalOperator aop = (AbstractLogicalOperator) arg; if (aop.getOperatorTag() != LogicalOperatorTag.WINDOW) { return false; } WindowOperator windowOpArg = (WindowOperator) copyAndSubstituteVar(op, arg); if (!compareWindowPartitionSpec(op, windowOpArg)) { return false; } if (!compareWindowFrameSpec(op, windowOpArg)) { return false; } if (!VariableUtilities.varListEqualUnordered(getPairList(op.getVariables(), op.getExpressions()), getPairList(windowOpArg.getVariables(), windowOpArg.getExpressions()))) { return false; } List<ILogicalPlan> plans = op.getNestedPlans(); List<ILogicalPlan> plansArg = windowOpArg.getNestedPlans(); boolean isomorphic = compareSubplans(plans, plansArg); return isomorphic; }