@Override public Double visit(UnionPlan plan) { int count = plan.getSubPlans().size(); double[] inputRows = new double[count]; for (int i = 0; i < count; i++) { Double b = plan.getSubPlans().get(i).accept(this); if (b != null) { inputRows[i] = b.doubleValue(); } else { return null; } } return limit(union(true, inputRows),plan.getLimit()); }
@Override public Long getEstimateInfoTimestamp() throws SQLException { if (!getEstimatesCalled) { getEstimates(); } return estimateInfoTs; }
@Override public ResultIterator iterator(ParallelScanGrouper scanGrouper) throws SQLException { return iterator(scanGrouper, null); }
@Override public Double visit(UnionPlan plan) { Double sum = 0.0; for (QueryPlan subPlan : plan.getSubPlans()) { Double avgWidth = subPlan.accept(this); if (avgWidth == null) { return null; } sum += avgWidth; } return sum / plan.getSubPlans().size(); }
public QueryPlan compileUnionAll(SelectStatement select) throws SQLException { List<SelectStatement> unionAllSelects = select.getSelects(); List<QueryPlan> plans = new ArrayList<QueryPlan>(); for (int i=0; i < unionAllSelects.size(); i++ ) { SelectStatement subSelect = unionAllSelects.get(i); // Push down order-by and limit into sub-selects. if (!select.getOrderBy().isEmpty() || select.getLimit() != null) { if (select.getOffset() == null) { subSelect = NODE_FACTORY.select(subSelect, select.getOrderBy(), select.getLimit(), null); } else { subSelect = NODE_FACTORY.select(subSelect, select.getOrderBy(), null, null); } } QueryPlan subPlan = compileSubquery(subSelect, true); plans.add(subPlan); } TableRef tableRef = UnionCompiler.contructSchemaTable(statement, plans, select.hasWildcard() ? null : select.getSelect()); ColumnResolver resolver = FromCompiler.getResolver(tableRef); StatementContext context = new StatementContext(statement, resolver, scan, sequenceManager); QueryPlan plan = compileSingleFlatQuery(context, select, statement.getParameters(), false, false, null, null, false); plan = new UnionPlan(context, select, tableRef, plan.getProjector(), plan.getLimit(), plan.getOffset(), plan.getOrderBy(), GroupBy.EMPTY_GROUP_BY, plans, context.getBindManager().getParameterMetaData()); return plan; }
@Override public List<QueryPlan> visit(UnionPlan plan) { return plan.getSubPlans(); }
public QueryPlan compileUnionAll(SelectStatement select) throws SQLException { List<SelectStatement> unionAllSelects = select.getSelects(); List<QueryPlan> plans = new ArrayList<QueryPlan>(); for (int i=0; i < unionAllSelects.size(); i++ ) { SelectStatement subSelect = unionAllSelects.get(i); // Push down order-by and limit into sub-selects. if (!select.getOrderBy().isEmpty() || select.getLimit() != null) { if (select.getOffset() == null) { subSelect = NODE_FACTORY.select(subSelect, select.getOrderBy(), select.getLimit(), null); } else { subSelect = NODE_FACTORY.select(subSelect, select.getOrderBy(), null, null); } } QueryPlan subPlan = compileSubquery(subSelect, true); plans.add(subPlan); } TableRef tableRef = UnionCompiler.contructSchemaTable(statement, plans, select.hasWildcard() ? null : select.getSelect()); ColumnResolver resolver = FromCompiler.getResolver(tableRef); StatementContext context = new StatementContext(statement, resolver, scan, sequenceManager); QueryPlan plan = compileSingleFlatQuery(context, select, statement.getParameters(), false, false, null, null, false); plan = new UnionPlan(context, select, tableRef, plan.getProjector(), plan.getLimit(), plan.getOffset(), plan.getOrderBy(), GroupBy.EMPTY_GROUP_BY, plans, context.getBindManager().getParameterMetaData()); return plan; }
@Override public Double visit(UnionPlan plan) { int count = plan.getSubPlans().size(); double[] inputRows = new double[count]; for (int i = 0; i < count; i++) { Double b = plan.getSubPlans().get(i).accept(this); if (b != null) { inputRows[i] = b.doubleValue(); } else { return null; } } return limit(union(true, inputRows),plan.getLimit()); }
@Override public Long getEstimatedBytesToScan() throws SQLException { if (!getEstimatesCalled) { getEstimates(); } return estimatedBytes; }
@Override public ResultIterator iterator() throws SQLException { return iterator(DefaultParallelScanGrouper.getInstance()); }
@Override public Double visit(UnionPlan plan) { Double sum = 0.0; for (QueryPlan subPlan : plan.getSubPlans()) { Double avgWidth = subPlan.accept(this); if (avgWidth == null) { return null; } sum += avgWidth; } return sum / plan.getSubPlans().size(); }
public QueryPlan compileUnionAll(SelectStatement select) throws SQLException { List<SelectStatement> unionAllSelects = select.getSelects(); List<QueryPlan> plans = new ArrayList<QueryPlan>(); for (int i=0; i < unionAllSelects.size(); i++ ) { SelectStatement subSelect = unionAllSelects.get(i); // Push down order-by and limit into sub-selects. if (!select.getOrderBy().isEmpty() || select.getLimit() != null) { if (select.getOffset() == null) { subSelect = NODE_FACTORY.select(subSelect, select.getOrderBy(), select.getLimit(), null); } else { subSelect = NODE_FACTORY.select(subSelect, select.getOrderBy(), null, null); } } QueryPlan subPlan = compileSubquery(subSelect, true); plans.add(subPlan); } TableRef tableRef = UnionCompiler.contructSchemaTable(statement, plans, select.hasWildcard() ? null : select.getSelect()); ColumnResolver resolver = FromCompiler.getResolver(tableRef); StatementContext context = new StatementContext(statement, resolver, scan, sequenceManager); QueryPlan plan = compileSingleFlatQuery(context, select, statement.getParameters(), false, false, null, null, false); plan = new UnionPlan(context, select, tableRef, plan.getProjector(), plan.getLimit(), plan.getOffset(), plan.getOrderBy(), GroupBy.EMPTY_GROUP_BY, plans, context.getBindManager().getParameterMetaData()); return plan; }
@Override public Double visit(UnionPlan plan) { int count = plan.getSubPlans().size(); double[] inputRows = new double[count]; for (int i = 0; i < count; i++) { Double b = plan.getSubPlans().get(i).accept(this); if (b != null) { inputRows[i] = b.doubleValue(); } else { return null; } } return limit(union(true, inputRows),plan.getLimit()); }
@Override public Long getEstimatedRowsToScan() throws SQLException { if (!getEstimatesCalled) { getEstimates(); } return estimatedRows; }
@Override public ExplainPlan getExplainPlan() throws SQLException { List<String> steps = new ArrayList<String>(); steps.add("UNION ALL OVER " + this.plans.size() + " QUERIES"); ResultIterator iterator = iterator(); iterator.explain(steps); // Indent plans steps nested under union, except last client-side merge/concat step (if there is one) int offset = !orderBy.getOrderByExpressions().isEmpty() && limit != null ? 2 : limit != null ? 1 : 0; for (int i = 1 ; i < steps.size()-offset; i++) { steps.set(i, " " + steps.get(i)); } return new ExplainPlan(steps); }
@Override public Double visit(UnionPlan plan) { Double sum = 0.0; for (QueryPlan subPlan : plan.getSubPlans()) { Double avgWidth = subPlan.accept(this); if (avgWidth == null) { return null; } sum += avgWidth; } return sum / plan.getSubPlans().size(); }
@Override public Long getEstimatedRowsToScan() throws SQLException { if (!getEstimatesCalled) { getEstimates(); } return estimatedRows; }
@Override public ResultIterator iterator(ParallelScanGrouper scanGrouper) throws SQLException { return iterator(scanGrouper, null); }
@Override public Long getEstimateInfoTimestamp() throws SQLException { if (!getEstimatesCalled) { getEstimates(); } return estimateInfoTs; }
@Override public ResultIterator iterator(ParallelScanGrouper scanGrouper) throws SQLException { return iterator(scanGrouper, null); }