private boolean isScanPushable(DataSourceScanOperator op, Set<LogicalVariable> selectedVariables) { if (op.getOutputLimit() >= 0) { return false; } if (!op.getInputs().isEmpty() && op.getInputs().get(0).getValue().getOperatorTag() != LogicalOperatorTag.EMPTYTUPLESOURCE) { return false; } if (((DataSource) op.getDataSource()).getDatasourceType() != DataSource.Type.INTERNAL_DATASET) { return false; } if (!op.getScanVariables().containsAll(selectedVariables)) { return false; } return true; }
@Override public Void visitDataScanOperator(DataSourceScanOperator op, IOptimizationContext ctx) throws AlgebricksException { ILogicalOperator inp1 = op.getInputs().get(0).getValue(); Map<LogicalVariable, EquivalenceClass> eqClasses = getOrCreateEqClasses(op, ctx); Map<LogicalVariable, EquivalenceClass> propagatedEqClasses = getOrComputeEqClasses(inp1, ctx); eqClasses.putAll(propagatedEqClasses); ctx.putEquivalenceClassMap(op, eqClasses); List<FunctionalDependency> fds = new ArrayList<FunctionalDependency>(getOrComputeFDs(inp1, ctx)); ctx.putFDList(op, fds); op.getDataSource().computeFDs(op.getVariables(), fds); return null; }
DataSourceScanOperator scan = new DataSourceScanOperator(variables, datasource); scan.setSourceLocation(unnest.getSourceLocation()); List<Mutable<ILogicalOperator>> scanInpList = scan.getInputs(); scanInpList.addAll(unnest.getInputs()); opRef.setValue(scan);
List<Mutable<ILogicalOperator>> scanInpList = scan.getInputs(); scanInpList.addAll(unnest.getInputs()); opRef.setValue(scan);
dssOp.getInputs().add(new MutableObject<>(etsOp)); dssOp.setSourceLocation(sourceLoc);
opNew.getInputs().addAll(assign.getInputs()); opRef2.setValue(opNew); return true;
List<Mutable<ILogicalOperator>> scanInpList = scan.getInputs(); scanInpList.addAll(unnest.getInputs()); opRef.setValue(scan);
OperatorManipulationUtil.deepCopy(dataSourceScan.getInputs().get(0).getValue()))); context.computeAndSetTypeEnvironmentForOperator(inputOp); inputOp.setExecutionMode(dataSourceScan.getExecutionMode());
ILogicalOperator srcExchange = scan.getInputs().get(0).getValue(); builder.contributeGraphEdge(srcExchange, 0, scan, 0);
scanOperator.getInputs().add(new MutableObject<>(ets));
scanOperator.getInputs().add(new MutableObject<>(ets));