/*
 * Copyright 2004-2019 H2 Group. Multiple-Licensed under the MPL 2.0,
 * and the EPL 1.0 (http://h2database.com/html/license.html).
 * Initial Developer: H2 Group
 */
package org.h2.index;

import org.h2.engine.Session;
import org.h2.message.DbException;
import org.h2.result.Row;
import org.h2.result.SearchRow;
import org.h2.value.Value;

Abstract function cursor. This implementation filters the rows (only returns entries that are larger or equal to "first", and smaller than last or equal to "last").
/** * Abstract function cursor. This implementation filters the rows (only returns * entries that are larger or equal to "first", and smaller than last or equal * to "last"). */
abstract class AbstractFunctionCursor implements Cursor { private final FunctionIndex index; private final SearchRow first; private final SearchRow last; final Session session; Value[] values; Row row;
Params:
  • index – index
  • first – first row
  • last – last row
  • session – session
/** * @param index * index * @param first * first row * @param last * last row * @param session * session */
AbstractFunctionCursor(FunctionIndex index, SearchRow first, SearchRow last, Session session) { this.index = index; this.first = first; this.last = last; this.session = session; } @Override public Row get() { if (values == null) { return null; } if (row == null) { row = session.createRow(values, 1); } return row; } @Override public SearchRow getSearchRow() { return get(); } @Override public boolean next() { final SearchRow first = this.first, last = this.last; if (first == null && last == null) { return nextImpl(); } while (nextImpl()) { Row current = get(); if (first != null) { int comp = index.compareRows(current, first); if (comp < 0) { continue; } } if (last != null) { int comp = index.compareRows(current, last); if (comp > 0) { continue; } } return true; } return false; }
Skip to the next row if one is available. This method does not filter.
Returns:true if another row is available
/** * Skip to the next row if one is available. This method does not filter. * * @return true if another row is available */
abstract boolean nextImpl(); @Override public boolean previous() { throw DbException.throwInternalError(toString()); } }