@Override public Boolean visitEmptyTupleSourceOperator(EmptyTupleSourceOperator op, ILogicalOperator arg) throws AlgebricksException { AbstractLogicalOperator aop = (AbstractLogicalOperator) copyAndSubstituteVar(op, arg); if (aop.getOperatorTag() != LogicalOperatorTag.EMPTYTUPLESOURCE) { return Boolean.FALSE; } return Boolean.TRUE; }
@Override public Boolean visitDelegateOperator(DelegateOperator op, ILogicalOperator arg) throws AlgebricksException { DelegateOperator aop = (DelegateOperator) copyAndSubstituteVar(op, arg); if (aop.getOperatorTag() != LogicalOperatorTag.DELEGATE_OPERATOR) { return Boolean.FALSE; } return Boolean.TRUE; }
@Override public Boolean visitScriptOperator(ScriptOperator op, ILogicalOperator arg) throws AlgebricksException { AbstractLogicalOperator aop = (AbstractLogicalOperator) arg; if (aop.getOperatorTag() != LogicalOperatorTag.SCRIPT) { return Boolean.FALSE; } ScriptOperator scriptOpArg = (ScriptOperator) copyAndSubstituteVar(op, arg); boolean isomorphic = op.getScriptDescription().equals(scriptOpArg.getScriptDescription()); return isomorphic; }
@Override public Boolean visitUnionOperator(UnionAllOperator op, ILogicalOperator arg) throws AlgebricksException { AbstractLogicalOperator aop = (AbstractLogicalOperator) arg; if (aop.getOperatorTag() != LogicalOperatorTag.UNIONALL) { return Boolean.FALSE; } UnionAllOperator unionOpArg = (UnionAllOperator) copyAndSubstituteVar(op, arg); List<Triple<LogicalVariable, LogicalVariable, LogicalVariable>> mapping = op.getVariableMappings(); List<Triple<LogicalVariable, LogicalVariable, LogicalVariable>> mappingArg = unionOpArg.getVariableMappings(); if (mapping.size() != mappingArg.size()) { return Boolean.FALSE; } return VariableUtilities.varListEqualUnordered(mapping, mappingArg); }
@Override public Boolean visitSelectOperator(SelectOperator op, ILogicalOperator arg) throws AlgebricksException { AbstractLogicalOperator aop = (AbstractLogicalOperator) arg; if (aop.getOperatorTag() != LogicalOperatorTag.SELECT) { return Boolean.FALSE; } SelectOperator selectOpArg = (SelectOperator) copyAndSubstituteVar(op, arg); boolean isomorphic = op.getCondition().getValue().equals(selectOpArg.getCondition().getValue()); return isomorphic; }
@Override public Boolean visitSplitOperator(SplitOperator op, ILogicalOperator arg) throws AlgebricksException { AbstractLogicalOperator aop = (AbstractLogicalOperator) arg; if (aop.getOperatorTag() != LogicalOperatorTag.SPLIT) { return Boolean.FALSE; } SplitOperator sOpArg = (SplitOperator) copyAndSubstituteVar(op, arg); boolean isomorphic = op.getBranchingExpression().getValue().equals(sOpArg.getBranchingExpression().getValue()); return isomorphic; }
@Override public Boolean visitInnerJoinOperator(InnerJoinOperator op, ILogicalOperator arg) throws AlgebricksException { AbstractLogicalOperator aop = (AbstractLogicalOperator) arg; if (aop.getOperatorTag() != LogicalOperatorTag.INNERJOIN) { return Boolean.FALSE; } InnerJoinOperator joinOpArg = (InnerJoinOperator) copyAndSubstituteVar(op, arg); boolean isomorphic = op.getCondition().getValue().equals(joinOpArg.getCondition().getValue()); return isomorphic; }
@Override public Boolean visitLeftOuterJoinOperator(LeftOuterJoinOperator op, ILogicalOperator arg) throws AlgebricksException { AbstractLogicalOperator aop = (AbstractLogicalOperator) arg; if (aop.getOperatorTag() != LogicalOperatorTag.LEFTOUTERJOIN) { return Boolean.FALSE; } LeftOuterJoinOperator joinOpArg = (LeftOuterJoinOperator) copyAndSubstituteVar(op, arg); boolean isomorphic = op.getCondition().getValue().equals(joinOpArg.getCondition().getValue()); return isomorphic; }
@Override public Boolean visitOrderOperator(OrderOperator op, ILogicalOperator arg) throws AlgebricksException { AbstractLogicalOperator aop = (AbstractLogicalOperator) arg; if (aop.getOperatorTag() != LogicalOperatorTag.ORDER) { return Boolean.FALSE; } OrderOperator orderOpArg = (OrderOperator) copyAndSubstituteVar(op, arg); boolean isomorphic = compareIOrderAndExpressions(op.getOrderExpressions(), orderOpArg.getOrderExpressions()); return isomorphic; }
@Override public Boolean visitDistributeResultOperator(DistributeResultOperator op, ILogicalOperator arg) throws AlgebricksException { AbstractLogicalOperator aop = (AbstractLogicalOperator) arg; if (aop.getOperatorTag() != LogicalOperatorTag.DISTRIBUTE_RESULT) { return Boolean.FALSE; } DistributeResultOperator writeOpArg = (DistributeResultOperator) copyAndSubstituteVar(op, arg); boolean isomorphic = VariableUtilities.varListEqualUnordered(op.getSchema(), writeOpArg.getSchema()); return isomorphic; }
@Override public Boolean visitProjectOperator(ProjectOperator op, ILogicalOperator arg) throws AlgebricksException { AbstractLogicalOperator aop = (AbstractLogicalOperator) arg; if (aop.getOperatorTag() != LogicalOperatorTag.PROJECT) { return Boolean.FALSE; } ProjectOperator projectOpArg = (ProjectOperator) copyAndSubstituteVar(op, arg); boolean isomorphic = VariableUtilities.varListEqualUnordered(op.getVariables(), projectOpArg.getVariables()); return isomorphic; }
@Override public Boolean visitForwardOperator(ForwardOperator op, ILogicalOperator arg) throws AlgebricksException { AbstractLogicalOperator argOperator = (AbstractLogicalOperator) arg; if (argOperator.getOperatorTag() != LogicalOperatorTag.FORWARD) { return Boolean.FALSE; } ForwardOperator otherOp = (ForwardOperator) copyAndSubstituteVar(op, arg); ILogicalExpression rangeMapExp = op.getRangeMapExpression().getValue(); ILogicalExpression otherRangeMapExp = otherOp.getRangeMapExpression().getValue(); return rangeMapExp.equals(otherRangeMapExp) && op.getRangeMapKey().equals(otherOp.getRangeMapKey()); }
@Override public Boolean visitDistinctOperator(DistinctOperator op, ILogicalOperator arg) throws AlgebricksException { AbstractLogicalOperator aop = (AbstractLogicalOperator) arg; if (aop.getOperatorTag() != LogicalOperatorTag.DISTINCT) { return Boolean.FALSE; } DistinctOperator distinctOpArg = (DistinctOperator) copyAndSubstituteVar(op, arg); boolean isomorphic = compareExpressions(op.getExpressions(), distinctOpArg.getExpressions()); return isomorphic; }
@Override public Boolean visitWriteOperator(WriteOperator op, ILogicalOperator arg) throws AlgebricksException { AbstractLogicalOperator aop = (AbstractLogicalOperator) arg; if (aop.getOperatorTag() != LogicalOperatorTag.WRITE) { return Boolean.FALSE; } WriteOperator writeOpArg = (WriteOperator) copyAndSubstituteVar(op, arg); boolean isomorphic = VariableUtilities.varListEqualUnordered(op.getSchema(), writeOpArg.getSchema()); return isomorphic; }
@Override public Boolean visitTokenizeOperator(TokenizeOperator op, ILogicalOperator arg) throws AlgebricksException { AbstractLogicalOperator aop = (AbstractLogicalOperator) arg; if (aop.getOperatorTag() != LogicalOperatorTag.TOKENIZE) { return Boolean.FALSE; } TokenizeOperator tokenizeOpArg = (TokenizeOperator) copyAndSubstituteVar(op, arg); boolean isomorphic = VariableUtilities.varListEqualUnordered(op.getSchema(), tokenizeOpArg.getSchema()); if (!op.getDataSourceIndex().equals(tokenizeOpArg.getDataSourceIndex())) { isomorphic = false; } return isomorphic; }
@Override public Boolean visitLimitOperator(LimitOperator op, ILogicalOperator arg) throws AlgebricksException { AbstractLogicalOperator aop = (AbstractLogicalOperator) arg; if (aop.getOperatorTag() != LogicalOperatorTag.LIMIT) { return Boolean.FALSE; } LimitOperator limitOpArg = (LimitOperator) copyAndSubstituteVar(op, arg); if (!Objects.equals(op.getOffset().getValue(), limitOpArg.getOffset().getValue())) { return Boolean.FALSE; } boolean isomorphic = op.getMaxObjects().getValue().equals(limitOpArg.getMaxObjects().getValue()); return isomorphic; }
@Override public Boolean visitUnnestMapOperator(UnnestMapOperator op, ILogicalOperator arg) throws AlgebricksException { AbstractLogicalOperator aop = (AbstractLogicalOperator) arg; if (aop.getOperatorTag() != LogicalOperatorTag.UNNEST_MAP) { return Boolean.FALSE; } UnnestMapOperator unnestOpArg = (UnnestMapOperator) copyAndSubstituteVar(op, arg); boolean isomorphic = VariableUtilities.varListEqualUnordered(op.getVariables(), unnestOpArg.getVariables()); if (!isomorphic) { return Boolean.FALSE; } isomorphic = op.getExpressionRef().getValue().equals(unnestOpArg.getExpressionRef().getValue()); return isomorphic; }
@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; }