boolean initialize() { return collectJoinBatches(viewIndex.getQuery()) && joinBatches != null; }
/** * @param f Table filter. * @return Sub-query. */ private static Query getSubQuery(TableFilter f) { return ((ViewIndex)f.getIndex()).getQuery(); }
columns = new Column[0]; if (!recursive) { query = getQuery(session, masks, filters, filter, sortOrder);
@Override protected Cursor run() throws Exception { viewIndex.setupQueryParameters(viewIndex.getSession(), first, last, null); ArrayList<JoinBatch> joinBatches = batchUnion.joinBatches; for (int i = 0, size = joinBatches.size(); i < size; i++) { assert topFutureCursors[i] != null; joinBatches.get(i).viewTopFutureCursor = topFutureCursors[i]; } ResultInterface localResult; boolean lazy = false; try { localResult = viewIndex.getQuery().query(0); lazy = localResult.isLazy(); } finally { if (!lazy) { resetViewTopFutureCursorAfterQuery(); } } return newCursor(localResult); }
@Override protected Cursor run() throws Exception { if (topFutureCursor == null) { // if the top cursor is empty then the whole query will produce // empty result return EMPTY_CURSOR; } viewIndex.setupQueryParameters(viewIndex.getSession(), first, last, null); JoinBatch.this.viewTopFutureCursor = topFutureCursor; ResultInterface localResult; boolean lazy = false; try { localResult = viewIndex.getQuery().query(0); lazy = localResult.isLazy(); } finally { if (!lazy) { resetViewTopFutureCursorAfterQuery(); } } return newCursor(localResult); }
/** * Create index lookup batch for a view index. * * @param viewIndex view index * @return index lookup batch or {@code null} if batching is not supported * for this query */ public static IndexLookupBatch createViewIndexLookupBatch(ViewIndex viewIndex) { Query query = viewIndex.getQuery(); if (query.isUnion()) { ViewIndexLookupBatchUnion unionBatch = new ViewIndexLookupBatchUnion(viewIndex); return unionBatch.initialize() ? unionBatch : null; } JoinBatch jb = ((Select) query).getJoinBatch(); if (jb == null || jb.getLookupBatch(0) == null) { // our sub-query is not batched or is top batched sub-query return null; } assert !jb.batchedSubQuery; jb.batchedSubQuery = true; return jb.viewIndexLookupBatch(viewIndex); }
/** * @param qry Query. */ private void collectOptimizedTableFiltersOrder(Query qry) { if (qry instanceof SelectUnion) { collectOptimizedTableFiltersOrder(((SelectUnion)qry).getLeft()); collectOptimizedTableFiltersOrder(((SelectUnion)qry).getRight()); } else { Select select = (Select)qry; TableFilter filter = select.getTopTableFilter(); int i = 0; do { assert0(filter != null, select); assert0(filter.getNestedJoin() == null, select); // Here all the table filters must have generated unique aliases, // thus we can store them in the same map for all the subqueries. optimizedTableFilterOrder.put(filter.getTableAlias(), i++); Table tbl = filter.getTable(); // Go down and collect inside of optimized subqueries. if (tbl instanceof TableView) { ViewIndex viewIdx = (ViewIndex)filter.getIndex(); collectOptimizedTableFiltersOrder(viewIdx.getQuery()); } filter = filter.getJoin(); } while (filter != null); } }
session.pushSubQueryInfo(masks, filters, filter, select.getSortOrder()); try { ((ViewIndex) index).getQuery().prepareJoinBatch(); } finally { session.popSubQueryInfo();
/** * @param f Table filter. * @return Sub-query. */ private static Query getSubQuery(TableFilter f) { return ((ViewIndex)f.getIndex()).getQuery(); }
boolean initialize() { return collectJoinBatches(viewIndex.getQuery()) && joinBatches != null; }
boolean initialize() { return collectJoinBatches(viewIndex.getQuery()) && joinBatches != null; }
@Override protected Cursor run() throws Exception { viewIndex.setupQueryParameters(viewIndex.getSession(), first, last, null); ArrayList<JoinBatch> joinBatches = batchUnion.joinBatches; for (int i = 0, size = joinBatches.size(); i < size; i++) { assert topFutureCursors[i] != null; joinBatches.get(i).viewTopFutureCursor = topFutureCursors[i]; } LocalResult localResult; try { localResult = viewIndex.getQuery().query(0); } finally { for (int i = 0, size = joinBatches.size(); i < size; i++) { joinBatches.get(i).viewTopFutureCursor = null; } } return newCursor(localResult); } }
@Override protected Cursor run() throws Exception { viewIndex.setupQueryParameters(viewIndex.getSession(), first, last, null); ArrayList<JoinBatch> joinBatches = batchUnion.joinBatches; for (int i = 0, size = joinBatches.size(); i < size; i++) { assert topFutureCursors[i] != null; joinBatches.get(i).viewTopFutureCursor = topFutureCursors[i]; } LocalResult localResult; try { localResult = viewIndex.getQuery().query(0); } finally { for (int i = 0, size = joinBatches.size(); i < size; i++) { joinBatches.get(i).viewTopFutureCursor = null; } } return newCursor(localResult); } }
public ViewIndex(TableView view, ViewIndex index, Session session, int[] masks) throws SQLException { initBaseIndex(view, 0, null, null, IndexType.createNonUnique(false)); this.querySQL = index.querySQL; this.originalParameters = index.originalParameters; this.recursive = index.recursive; this.masks = masks; this.session = session; columns = new Column[0]; query = getQuery(session, masks); planSQL = query.getPlanSQL(); }
columns = new Column[0]; if (!recursive) { query = getQuery(session, masks, filters, filter, sortOrder);
@Override protected Cursor run() throws Exception { if (topFutureCursor == null) { // if the top cursor is empty then the whole query will produce // empty result return EMPTY_CURSOR; } viewIndex.setupQueryParameters(viewIndex.getSession(), first, last, null); JoinBatch.this.viewTopFutureCursor = topFutureCursor; LocalResult localResult; try { localResult = viewIndex.getQuery().query(0); } finally { JoinBatch.this.viewTopFutureCursor = null; } return newCursor(localResult); } }
@Override protected Cursor run() throws Exception { if (topFutureCursor == null) { // if the top cursor is empty then the whole query will produce // empty result return EMPTY_CURSOR; } viewIndex.setupQueryParameters(viewIndex.getSession(), first, last, null); JoinBatch.this.viewTopFutureCursor = topFutureCursor; LocalResult localResult; try { localResult = viewIndex.getQuery().query(0); } finally { JoinBatch.this.viewTopFutureCursor = null; } return newCursor(localResult); } }
/** * Create index lookup batch for a view index. * * @param viewIndex view index * @return index lookup batch or {@code null} if batching is not supported * for this query */ public static IndexLookupBatch createViewIndexLookupBatch(ViewIndex viewIndex) { Query query = viewIndex.getQuery(); if (query.isUnion()) { ViewIndexLookupBatchUnion unionBatch = new ViewIndexLookupBatchUnion(viewIndex); return unionBatch.initialize() ? unionBatch : null; } JoinBatch jb = ((Select) query).getJoinBatch(); if (jb == null || jb.getLookupBatch(0) == null) { // our sub-query is not batched or is top batched sub-query return null; } assert !jb.batchedSubQuery; jb.batchedSubQuery = true; return jb.viewIndexLookupBatch(viewIndex); }
/** * Create index lookup batch for a view index. * * @param viewIndex view index * @return index lookup batch or {@code null} if batching is not supported * for this query */ public static IndexLookupBatch createViewIndexLookupBatch(ViewIndex viewIndex) { Query query = viewIndex.getQuery(); if (query.isUnion()) { ViewIndexLookupBatchUnion unionBatch = new ViewIndexLookupBatchUnion(viewIndex); return unionBatch.initialize() ? unionBatch : null; } JoinBatch jb = ((Select) query).getJoinBatch(); if (jb == null || jb.getLookupBatch(0) == null) { // our sub-query is not batched or is top batched sub-query return null; } assert !jb.batchedSubQuery; jb.batchedSubQuery = true; return jb.viewIndexLookupBatch(viewIndex); }
/** * @param qry Query. */ private void collectOptimizedTableFiltersOrder(Query qry) { if (qry instanceof SelectUnion) { collectOptimizedTableFiltersOrder(((SelectUnion)qry).getLeft()); collectOptimizedTableFiltersOrder(((SelectUnion)qry).getRight()); } else { Select select = (Select)qry; TableFilter filter = select.getTopTableFilter(); int i = 0; do { assert0(filter != null, select); assert0(filter.getNestedJoin() == null, select); // Here all the table filters must have generated unique aliases, // thus we can store them in the same map for all the subqueries. optimizedTableFilterOrder.put(filter.getTableAlias(), i++); Table tbl = filter.getTable(); // Go down and collect inside of optimized subqueries. if (tbl instanceof TableView) { ViewIndex viewIdx = (ViewIndex)filter.getIndex(); collectOptimizedTableFiltersOrder(viewIdx.getQuery()); } filter = filter.getJoin(); } while (filter != null); } }