@Override public Row next() { if (TAP_NEXT_ENABLED) { TAP_NEXT.in(); } try { if (CURSOR_LIFECYCLE_ENABLED) { CursorLifecycle.checkIdleOrActive(this); } Row row; do { row = inputCursor.next(); if (row == null) { close(); } else if (!filter.maybePresent(hashProjectedRow(row)) || !rowReallyHasMatch(row)) { row = null; } } while (!idle && row == null); if (LOG_EXECUTION) { LOG.debug("Select_BloomFilter: yield {}", row); } return row; } finally { if (TAP_NEXT_ENABLED) { TAP_NEXT.out(); } } }
@Override public void close() { CursorLifecycle.checkIdleOrActive(this); if (!idle) { inputCursor.close(); idle = true; } }
@Override public void open() { TAP_OPEN.in(); try { CursorLifecycle.checkIdle(this); filter = bindings.getBloomFilter(bindingPosition); bindings.setBloomFilter(bindingPosition, null); inputCursor.open(); idle = false; } finally { TAP_OPEN.out(); } }
@Override public Row next() { if (TAP_NEXT_ENABLED) { TAP_NEXT.in(); } try { if (CURSOR_LIFECYCLE_ENABLED) { CursorLifecycle.checkIdleOrActive(this); } checkQueryCancelation(); Row row = null; while (true) { QueryBindings bindings = input.nextBindings(); if (bindings == null) { openBindings = null; break; } if (bindings.getDepth() < depth) { pendingBindings = bindings; openBindings = null; break; } assert (bindings.getDepth() == depth); input.open(); inputOpenBindings = bindings; row = input.next(); input.close(); inputOpenBindings = null; if (row != null) { row = bindings.getRow(bindingPosition); break; } } if (LOG_EXECUTION) { LOG.debug("Select_BloomFilter: yield {}", row); } return row; } finally { if (TAP_NEXT_ENABLED) { TAP_NEXT.out(); } } }