public static ILogicalOperator deepCopy(ILogicalOperator op) throws AlgebricksException { OperatorDeepCopyVisitor visitor = new OperatorDeepCopyVisitor(); AbstractLogicalOperator copiedOperator = (AbstractLogicalOperator) op.accept(visitor, null); copiedOperator.setSourceLocation(op.getSourceLocation()); copiedOperator.setExecutionMode(op.getExecutionMode()); copiedOperator.getAnnotations().putAll(op.getAnnotations()); copiedOperator.setSchema(op.getSchema()); AbstractLogicalOperator sourceOp = (AbstractLogicalOperator) op; copiedOperator.setPhysicalOperator(sourceOp.getPhysicalOperator()); return copiedOperator; }
switch (op.getOperatorTag()) { case AGGREGATE: { op.setPhysicalOperator(new AggregatePOperator()); break; op.setPhysicalOperator(new AssignPOperator()); break; op.setPhysicalOperator(new EmptyTupleSourcePOperator()); break; op.setPhysicalOperator(externalGby); break; op.setPhysicalOperator(new PreclusteredGroupByPOperator(columnList, gby.isGroupAll(), context.getPhysicalOptimizationConfig().getMaxFramesForGroupBy())); } else { op.setPhysicalOperator(new MicroPreclusteredGroupByPOperator(columnList)); op.setPhysicalOperator(new StreamLimitPOperator()); break; op.setPhysicalOperator(new NestedTupleSourcePOperator()); break; op.setPhysicalOperator(new StableSortPOperator( physicalOptimizationConfig.getMaxFramesExternalSort(), oo.getTopK())); } else { op.setPhysicalOperator(new InMemoryStableSortPOperator());
} else { AbstractLogicalOperator beforeExchange = new ExchangeOperator(); beforeExchange.setPhysicalOperator(new OneToOneExchangePOperator()); beforeExchange.setExecutionMode(rop.getExecutionMode()); Mutable<ILogicalOperator> beforeExchangeRef = new MutableObject<ILogicalOperator>(beforeExchange); } else { AbstractLogicalOperator exchange = new ExchangeOperator(); exchange.setPhysicalOperator(new OneToOneExchangePOperator()); exchange.setExecutionMode(rop.getExecutionMode()); MutableObject<ILogicalOperator> exchangeRef = new MutableObject<ILogicalOperator>(exchange); assignOperator.setSourceLocation(refSourceLoc); assignOperator.setExecutionMode(rop.getExecutionMode()); assignOperator.setPhysicalOperator(new AssignPOperator()); AbstractLogicalOperator projectOperator = new ProjectOperator(liveVars); projectOperator.setSourceLocation(refSourceLoc); projectOperator.setPhysicalOperator(new StreamProjectPOperator()); projectOperator.setExecutionMode(rop.getExecutionMode()); AbstractLogicalOperator exchOp = new ExchangeOperator(); exchOp.setPhysicalOperator(new OneToOneExchangePOperator()); exchOp.setExecutionMode(rop.getExecutionMode()); exchOp.getInputs().add(ropRef); exchg.setPhysicalOperator(new OneToOneExchangePOperator()); exchg.setExecutionMode(childOp.getExecutionMode()); exchg.getInputs().add(new MutableObject<ILogicalOperator>(childOp));
op.setPhysicalOperator(new SortGroupByPOperator(groupByOperator.getGroupByList(), context.getPhysicalOptimizationConfig().getMaxFramesForGroupBy(), sortPhysicalOperator.getSortColumns()));
op1.setPhysicalOperator(hpme);
op.setPhysicalOperator(externalGby); setToExternalGby = true; op.setPhysicalOperator(new PreclusteredGroupByPOperator(columnList, gby.isGroupAll(), context.getPhysicalOptimizationConfig().getMaxFramesForGroupBy())); op.setPhysicalOperator(new PreclusteredGroupByPOperator(columnList, gby.isGroupAll(), context.getPhysicalOptimizationConfig().getMaxFramesForGroupBy())); } else { BTreeJobGenParams btreeJobGenParams = new BTreeJobGenParams(); btreeJobGenParams.readFromFuncArgs(f.getArguments()); op.setPhysicalOperator(new BTreeSearchPOperator(dsi, storageDomain, requiresBroadcast, btreeJobGenParams.isPrimaryIndex(), btreeJobGenParams.isEqCondition(), btreeJobGenParams.getLowKeyVarList(), btreeJobGenParams.getHighKeyVarList())); op.setPhysicalOperator(new RTreeSearchPOperator(dsi, storageDomain, requiresBroadcast)); break; op.setPhysicalOperator( new InvertedIndexPOperator(dsi, storageDomain, requiresBroadcast, false)); break; op.setPhysicalOperator( new InvertedIndexPOperator(dsi, storageDomain, requiresBroadcast, true)); break; WindowOperator winOp = (WindowOperator) op; WindowPOperator physOp = createWindowPOperator(winOp);