/* * Copyright 2016 requery.io * * 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 io.requery.android.sqlite; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.SQLFeatureNotSupportedException; import java.sql.SQLWarning; import java.sql.Statement; /** * {@link Statement} implementation using Android's local SQLite database. * * @author Nikhil Purushe */ public abstract class BaseStatement implements Statement { protected final BaseConnection connection; protected ResultSet queryResult; protected ResultSet insertResult; protected int updateCount; private boolean closed; private int timeout; private int maxRows; private int maxFieldSize; private int fetchSize; protected BaseStatement(BaseConnection connection) { if (connection == null) { throw new IllegalArgumentException("null connection"); } this.connection = connection; } protected void throwIfClosed() throws SQLException { if (isClosed()) { throw new SQLException("closed"); } } @Override public void addBatch(String sql) throws SQLException { throw new SQLFeatureNotSupportedException(); } @Override public void cancel() throws SQLException { throw new SQLFeatureNotSupportedException(); } @Override public void clearBatch() throws SQLException { throw new SQLFeatureNotSupportedException(); } @Override public void clearWarnings() throws SQLException { } @Override public void close() throws SQLException { if (queryResult != null) { queryResult.close(); } closed = true; } @Override public boolean execute(String sql) throws SQLException { throwIfClosed(); connection.execSQL(sql); return false; } @Override public boolean execute(String sql, int[] columnIndexes) throws SQLException { throw new SQLFeatureNotSupportedException(); } @Override public boolean execute(String sql, String[] columnNames) throws SQLException { throw new SQLFeatureNotSupportedException(); } @Override public int[] executeBatch() throws SQLException { throw new SQLFeatureNotSupportedException(); } @Override public int executeUpdate(String sql) throws SQLException { return executeUpdate(sql, NO_GENERATED_KEYS); } @Override public int executeUpdate(String sql, int[] columnIndexes) throws SQLException { throw new SQLFeatureNotSupportedException(); } @Override public int executeUpdate(String sql, String[] columnNames) throws SQLException { throw new SQLFeatureNotSupportedException(); } @Override public Connection getConnection() throws SQLException { throwIfClosed(); return connection; } @Override public int getFetchDirection() throws SQLException { return ResultSet.FETCH_FORWARD; } @Override public int getFetchSize() throws SQLException { return fetchSize; } @Override public ResultSet getGeneratedKeys() throws SQLException { return insertResult; } @Override public int getMaxFieldSize() throws SQLException { return maxFieldSize; } @Override public int getMaxRows() throws SQLException { return maxRows; } @Override public boolean getMoreResults() throws SQLException { return getMoreResults(CLOSE_CURRENT_RESULT); } @Override public boolean getMoreResults(int current) throws SQLException { return false; } @Override public int getQueryTimeout() throws SQLException { return timeout; } @Override public ResultSet getResultSet() throws SQLException { throwIfClosed(); return queryResult; } @Override public int getResultSetConcurrency() throws SQLException { return ResultSet.CONCUR_READ_ONLY; } @Override public int getResultSetHoldability() throws SQLException { return connection.getHoldability(); } @Override public int getResultSetType() throws SQLException { return ResultSet.TYPE_SCROLL_INSENSITIVE; } @Override public int getUpdateCount() throws SQLException { return updateCount; } @Override public SQLWarning getWarnings() throws SQLException { return null; } @Override public void setCursorName(String name) throws SQLException { } @Override public void setEscapeProcessing(boolean enable) throws SQLException { } @Override public void setFetchDirection(int direction) throws SQLException { if (direction != ResultSet.FETCH_FORWARD) { throw new SQLFeatureNotSupportedException("only FETCH_FORWARD is supported"); } } @Override public void setFetchSize(int rows) throws SQLException { this.fetchSize = rows; } @Override public void setMaxFieldSize(int max) throws SQLException { this.maxFieldSize = max; } @Override public void setMaxRows(int max) throws SQLException { this.maxRows = max; } @Override public void setQueryTimeout(int seconds) throws SQLException { this.timeout = seconds; } @Override public boolean isClosed() throws SQLException { return closed; } @Override public void setPoolable(boolean poolable) throws SQLException { throw new SQLFeatureNotSupportedException(); } @Override public boolean isPoolable() throws SQLException { return false; } @Override public <T> T unwrap(Class<T> iface) throws SQLException { throw new SQLFeatureNotSupportedException(); } @Override public boolean isWrapperFor(Class<?> iface) throws SQLException { return false; } }