| /* |
| * Copyright (C) 2006 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package android.database.sqlite; |
| |
| import android.database.CursorWindow; |
| import android.os.CancellationSignal; |
| import android.os.OperationCanceledException; |
| import android.util.Log; |
| |
| /** |
| * Represents a query that reads the resulting rows into a {@link SQLiteQuery}. |
| * This class is used by {@link SQLiteCursor} and isn't useful itself. |
| * <p> |
| * This class is not thread-safe. |
| * </p> |
| */ |
| public final class SQLiteQuery extends SQLiteProgram { |
| private static final String TAG = "SQLiteQuery"; |
| |
| private final CancellationSignal mCancellationSignal; |
| |
| SQLiteQuery(SQLiteDatabase db, String query, CancellationSignal cancellationSignal) { |
| super(db, query, null, cancellationSignal); |
| |
| mCancellationSignal = cancellationSignal; |
| } |
| |
| /** |
| * Reads rows into a buffer. |
| * |
| * @param window The window to fill into |
| * @param startPos The start position for filling the window. |
| * @param requiredPos The position of a row that MUST be in the window. |
| * If it won't fit, then the query should discard part of what it filled. |
| * @param countAllRows True to count all rows that the query would |
| * return regardless of whether they fit in the window. |
| * @return Number of rows that were enumerated. Might not be all rows |
| * unless countAllRows is true. |
| * |
| * @throws SQLiteException if an error occurs. |
| * @throws OperationCanceledException if the operation was canceled. |
| */ |
| int fillWindow(CursorWindow window, int startPos, int requiredPos, boolean countAllRows) { |
| acquireReference(); |
| try { |
| window.acquireReference(); |
| try { |
| int numRows = getSession().executeForCursorWindow(getSql(), getBindArgs(), |
| window, startPos, requiredPos, countAllRows, getConnectionFlags(), |
| mCancellationSignal); |
| return numRows; |
| } catch (SQLiteDatabaseCorruptException ex) { |
| onCorruption(); |
| throw ex; |
| } catch (SQLiteException ex) { |
| Log.e(TAG, "exception: " + ex.getMessage() + "; query: " + getSql()); |
| throw ex; |
| } finally { |
| window.releaseReference(); |
| } |
| } finally { |
| releaseReference(); |
| } |
| } |
| |
| @Override |
| public String toString() { |
| return "SQLiteQuery: " + getSql(); |
| } |
| } |