/*
* Copyright (c) 2003, 2004, 2005, 2006 Israfil Consulting Services Corporation
* Copyright (c) 2003, 2004, 2005, 2006 Christian Edward Gruber
* All Rights Reserved
*
* This software is licensed under the Berkeley Standard Distribution license,
* (BSD license), as defined below:
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of Israfil Consulting Services nor the names of its contributors
* may be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
*
* $Id: MockResultSet.java 517M 2007-07-09 20:00:15Z (local) $
*/
package net.israfil.foundation.mock.sql;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.math.BigDecimal;
import java.net.URL;
import java.sql.Array;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.Date;
import java.sql.NClob;
import java.sql.Ref;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.RowId;
import java.sql.SQLException;
import java.sql.SQLWarning;
import java.sql.SQLXML;
import java.sql.Statement;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
import net.israfil.foundation.mock.sql.MockResultSetMetaData.ColSpec;
/**
* A Mock implementation of ResultSet that takes an array of column
* names and an array or rows, where rows are arrays of data. A Mock
* ResultSet can be used in unit testing where database access needs
* to be stubbed out.
*
* @author Christian Edward Gruber
*/
public class MockResultSet implements ResultSet {
public MockResultSetMetaData metadata;
protected List data;
public List getData() { return data; }
int cursorPosition = 0;
boolean insertRow = false;
private final static int BEFOREFIRST = 0;
private final int AFTERLAST;
protected int concurrency = CONCUR_READ_ONLY;
protected int fetchDirection = FETCH_UNKNOWN;
protected int fetchSize = 0;
protected Statement statement = null;
protected boolean wasNull = false;
boolean open = false;
private MockResultSet(int size) {
AFTERLAST = size+1;
}
/**
* The main constructor, which takes an array of strings representing
* the columns of the supposed DataReader, and an array of string arrays
* representing the row data. With this, one can simulate a call to the
* database.
*
* @param columns the columns to be simulated
* @param rows the rows to be simulated
*
*/
public MockResultSet(String[] columns, Object[][] rows) {
this((rows==null)?0:rows.length);
metadata = new MockResultSetMetaData(columns);
primeRows(rows);
}
/**
* The main constructor, which takes an array of strings representing
* the columns of the supposed DataReader, and an array of string arrays
* representing the row data. With this, one can simulate a call to the
* database.
*
* @param columns the columns to be simulated
* @param rows the rows to be simulated
*
*/
public MockResultSet(ColSpec[] columns, Object[][] rows) {
this((rows==null)?0:rows.length);
metadata = new MockResultSetMetaData(columns);
primeRows(rows);
}
/**
* Private method that takes given row data and populates the internal
* structures with said data.
* @param rows
*/
private void primeRows(Object[][] rows) {
if (rows == null) rows = new String[][]{};
try {
data = new ArrayList(metadata.getColumnCount());
for (int rowNum = 0; rowNum < rows.length; rowNum++) {
data.add(new Row(metadata,new ArrayList(Arrays.asList(rows[rowNum]))));
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
cursorPosition = 0;
open = true;
}
public void finalize() throws Throwable {
data = null;
metadata = null;
super.finalize();
}
/**
* Moves the cursor to the given row number in this ResultSet object.
*
* If the row number is positive, the cursor moves to the given row number
* with respect to the beginning of the result set. The first row is row 1,
* the second is row 2, and so on.
*
* If the given row number is negative, the cursor moves to an absolute row
* position with respect to the end of the result set. For example, calling
* the method absolute(-1) positions the cursor on the last row; calling the
* method absolute(-2) moves the cursor to the next-to-last row, and so on.
*
* An attempt to position the cursor beyond the first/last row in the result
* set leaves the cursor before the first row or after the last row.
*
* Note: Calling absolute(1) is the same as calling first(). Calling
* absolute(-1) is the same as calling last().
*
* @param row - the number of the row to which the cursor should move. A positive number indicates the row number counting from the beginning of the result set; a negative number indicates the row number counting from the end of the result set
* @return true if the cursor is on the result set; false otherwise
*/
public boolean absolute(int row) throws SQLException {
// the number of the row to which the cursor should move.
// A positive number indicates the row number counting from
// the beginning of the result set; a negative number indicates
// the row number counting from the end of the result set.
if (row > 0) {
if (BEFOREFIRST + row < AFTERLAST) {
cursorPosition = BEFOREFIRST + row;
return true;
} else {
cursorPosition = AFTERLAST;
return false;
}
} else if (row < 0) {
if (AFTERLAST + row > BEFOREFIRST) {
cursorPosition = AFTERLAST + row;
return true;
} else {
cursorPosition = BEFOREFIRST;
return false;
}
} else /* offset == 0 */ {
// This is essentially beforeFirst();
cursorPosition = 0;
return false;
}
}
public void afterLast() throws SQLException {
absolute(data.size()+1);
}
public void beforeFirst() throws SQLException {
absolute(0);
}
public void cancelRowUpdates() throws SQLException {
throw new UnsupportedOperationException("Not yet implemented.");
}
public void clearWarnings() throws SQLException {
throw new UnsupportedOperationException("Not yet implemented.");
}
public void close() throws SQLException {
open = false;
}
public void deleteRow() throws SQLException {
if (insertRow) throw new SQLException("Cannot delete the insert row.");
throw new UnsupportedOperationException("Not yet implemented.");
}
public int findColumn(String column) throws SQLException {
throw new UnsupportedOperationException("Not yet implemented.");
}
public boolean first() throws SQLException {
return absolute(1);
}
public Object getInternalValue(int rowNumber, int column) {
try {
return processAccessedObject(data.get(rowNumber-1).get(column));
} catch (SQLException e) { throw new RuntimeException(e); }
}
public Object getInternalValue(int rowNumber, String column) {
try {
return processAccessedObject(data.get(rowNumber-1).get(column));
} catch (SQLException e) { throw new RuntimeException(e); }
}
public Object processAccessedObject(Object o) {
if (o == null) wasNull = true;
return o;
}
public Array getArray(int column) throws SQLException {
return (Array)getInternalValue(cursorPosition,column);
}
public Array getArray(String column) throws SQLException {
return (Array)getInternalValue(cursorPosition,column);
}
public InputStream getAsciiStream(int column) throws SQLException {
return (InputStream)getInternalValue(cursorPosition,column);
}
public InputStream getAsciiStream(String column) throws SQLException {
return (InputStream)getInternalValue(cursorPosition,column);
}
public BigDecimal getBigDecimal(int column, int scale) throws SQLException {
Object o = getInternalValue(cursorPosition,column);
if (o == null) return null;
BigDecimal bd;
if (o instanceof String) bd = new BigDecimal((String)o);
else if (o instanceof Number) bd = new BigDecimal(((Number)o).doubleValue());
else if (o instanceof java.util.Date) bd = new BigDecimal(((java.util.Date)o).getTime());
else if (o instanceof Calendar) bd = new BigDecimal(((Calendar)o).getTimeInMillis());
else if (o instanceof char[]) bd = new BigDecimal(((char[])o));
else if (o instanceof Boolean) return new BigDecimal(((Boolean)o).booleanValue() ? 1 : 0);
else bd = new BigDecimal(String.valueOf(o));
bd.setScale(scale);
return bd;
}
public BigDecimal getBigDecimal(int column) throws SQLException {
Object o = getInternalValue(cursorPosition,column);
if (o == null) return null;
BigDecimal bd;
if (o instanceof String) bd = new BigDecimal((String)o);
else if (o instanceof Number) bd = new BigDecimal(((Number)o).doubleValue());
else if (o instanceof java.util.Date) bd = new BigDecimal(((java.util.Date)o).getTime());
else if (o instanceof Calendar) bd = new BigDecimal(((Calendar)o).getTimeInMillis());
else if (o instanceof char[]) bd = new BigDecimal(((char[])o));
else if (o instanceof Boolean) return new BigDecimal(((Boolean)o).booleanValue() ? 1 : 0);
else bd = new BigDecimal(String.valueOf(o));
return bd;
}
public BigDecimal getBigDecimal(String column, int scale) throws SQLException {
Object o = getInternalValue(cursorPosition,column);
if (o == null) return null;
BigDecimal bd;
if (o instanceof String) bd = new BigDecimal((String)o);
else if (o instanceof Number) bd = new BigDecimal(((Number)o).doubleValue());
else if (o instanceof java.util.Date) bd = new BigDecimal(((java.util.Date)o).getTime());
else if (o instanceof Calendar) bd = new BigDecimal(((Calendar)o).getTimeInMillis());
else if (o instanceof char[]) bd = new BigDecimal(((char[])o));
else if (o instanceof Boolean) return new BigDecimal(((Boolean)o).booleanValue() ? 1 : 0);
else bd = new BigDecimal(String.valueOf(o));
bd.setScale(scale);
return bd;
}
public BigDecimal getBigDecimal(String column) throws SQLException {
Object o = getInternalValue(cursorPosition,column);
if (o == null) return null;
BigDecimal bd;
if (o instanceof String) bd = new BigDecimal((String)o);
else if (o instanceof Number) bd = new BigDecimal(((Number)o).doubleValue());
else if (o instanceof java.util.Date) bd = new BigDecimal(((java.util.Date)o).getTime());
else if (o instanceof Calendar) bd = new BigDecimal(((Calendar)o).getTimeInMillis());
else if (o instanceof char[]) bd = new BigDecimal(((char[])o));
else if (o instanceof Boolean) return new BigDecimal(((Boolean)o).booleanValue() ? 1 : 0);
else bd = new BigDecimal(String.valueOf(o));
return bd;
}
public InputStream getBinaryStream(int column) throws SQLException {
return (InputStream)getInternalValue(cursorPosition,column);
}
public InputStream getBinaryStream(String column) throws SQLException {
return (InputStream)getInternalValue(cursorPosition,column);
}
public Blob getBlob(int column) throws SQLException {
return new MockBlob(getBytes(column));
}
public Blob getBlob(String column) throws SQLException {
return new MockBlob(getBytes(column));
}
public boolean getBoolean(int column) throws SQLException {
if (getInternalValue(cursorPosition,column) == null) return false;
Object o = getInternalValue(cursorPosition,column);
if (o instanceof Number) return ((Number)o).byteValue() != 0;
else return Boolean.valueOf(String.valueOf(o));
}
public boolean getBoolean(String column) throws SQLException {
if (getInternalValue(cursorPosition,column) == null) return false;
Object o = getInternalValue(cursorPosition,column);
if (o instanceof Number) return ((Number)o).byteValue() != 0;
else return Boolean.valueOf(String.valueOf(o));
}
public byte getByte(int column) throws SQLException {
if (getInternalValue(cursorPosition,column) == null) return 0;
Object o = getInternalValue(cursorPosition,column);
if (o instanceof Number) {
return ((Number)o).byteValue();
} else if (o instanceof Boolean) {
return ((Boolean)o).booleanValue() ? (byte)1 : (byte)0 ;
} else return Byte.valueOf(String.valueOf(o));
}
public byte getByte(String column) throws SQLException {
if (getInternalValue(cursorPosition,column) == null) return 0;
Object o = getInternalValue(cursorPosition,column);
if (o instanceof Number) {
return ((Number)o).byteValue();
} else if (o instanceof Boolean) {
return ((Boolean)o).booleanValue() ? (byte)1 : (byte)0 ;
} else return Byte.valueOf(String.valueOf(o));
}
public byte[] getBytes(int column) throws SQLException {
throw new UnsupportedOperationException("Not yet implemented.");
}
public byte[] getBytes(String column) throws SQLException {
throw new UnsupportedOperationException("Not yet implemented.");
}
public Reader getCharacterStream(int column) throws SQLException {
return (Reader)getInternalValue(cursorPosition,column);
}
public Reader getCharacterStream(String column) throws SQLException {
return (Reader)getInternalValue(cursorPosition,column);
}
public Clob getClob(int column) throws SQLException {
return (Clob)getInternalValue(cursorPosition,column);
}
public Clob getClob(String column) throws SQLException {
return (Clob)getInternalValue(cursorPosition,column);
}
public int getConcurrency() throws SQLException {
return concurrency;
}
public void setConcurrency(int concurrency) {
this.concurrency = concurrency;
}
public String getCursorName() throws SQLException {
throw new UnsupportedOperationException("Not yet implemented.");
}
public Date getDate(int column, Calendar cal) throws SQLException {
throw new UnsupportedOperationException("Not yet implemented.");
}
public Date getDate(int column) throws SQLException {
Object o = getInternalValue(cursorPosition,column);
if (o == null) return null;
if (o instanceof Date) return (Date)o;
if (o instanceof java.util.Date)
return new Date(((java.util.Date)o).getTime());
if (o instanceof Calendar)
return new Date(((Calendar)o).getTimeInMillis());
return Date.valueOf(String.valueOf(o));
}
public Date getDate(String column, Calendar cal) throws SQLException {
throw new UnsupportedOperationException("Not yet implemented.");
}
public Date getDate(String column) throws SQLException {
Object o = getInternalValue(cursorPosition,column);
if (o == null) return null;
if (o instanceof Date) return (Date)o;
if (o instanceof java.util.Date)
return new Date(((java.util.Date)o).getTime());
if (o instanceof Calendar)
return new Date(((Calendar)o).getTimeInMillis());
return Date.valueOf(String.valueOf(o));
}
public double getDouble(int column) throws SQLException {
if (getInternalValue(cursorPosition,column) == null) return 0;
Object o = getInternalValue(cursorPosition,column);
if (o instanceof Number) {
return ((Number)o).doubleValue();
} else if (o instanceof Boolean) {
return ((Boolean)o).booleanValue() ? 1 : 0 ;
} else return Double.valueOf(String.valueOf(o));
}
public double getDouble(String column) throws SQLException {
if (getInternalValue(cursorPosition,column) == null) return 0;
Object o = getInternalValue(cursorPosition,column);
if (o instanceof Number) {
return ((Number)o).doubleValue();
} else if (o instanceof Boolean) {
return ((Boolean)o).booleanValue() ? 1 : 0 ;
} else return Double.valueOf(String.valueOf(o));
}
public int getFetchDirection() throws SQLException {
throw new UnsupportedOperationException("Not yet implemented.");
}
public int getFetchSize() throws SQLException {
throw new UnsupportedOperationException("Not yet implemented.");
}
public float getFloat(int column) throws SQLException {
if (getInternalValue(cursorPosition,column) == null) return 0;
Object o = getInternalValue(cursorPosition,column);
if (o instanceof Number) {
return ((Number)o).floatValue();
} else if (o instanceof Boolean) {
return ((Boolean)o).booleanValue() ? 1 :0 ;
} else return Float.valueOf(String.valueOf(o));
}
public float getFloat(String column) throws SQLException {
if (getInternalValue(cursorPosition,column) == null) return 0;
Object o = getInternalValue(cursorPosition,column);
if (o instanceof Number) {
return ((Number)o).floatValue();
} else if (o instanceof Boolean) {
return ((Boolean)o).booleanValue() ? 1 :0 ;
} else return Float.valueOf(String.valueOf(o));
}
public int getInt(int column) throws SQLException {
if (getInternalValue(cursorPosition,column) == null) return 0;
Object o = getInternalValue(cursorPosition,column);
if (o instanceof Number) {
return ((Number)o).intValue();
} else if (o instanceof Boolean) {
return ((Boolean)o).booleanValue() ? 1 :0 ;
} else return Integer.valueOf(String.valueOf(o));
}
public int getInt(String column) throws SQLException {
if (getInternalValue(cursorPosition,column) == null) return 0;
Object o = getInternalValue(cursorPosition,column);
if (o instanceof Number) {
return ((Number)o).intValue();
} else if (o instanceof Boolean) {
return ((Boolean)o).booleanValue() ? 1 :0 ;
} else return Integer.valueOf(String.valueOf(o));
}
public long getLong(int column) throws SQLException {
if (getInternalValue(cursorPosition,column) == null) return 0;
Object o = getInternalValue(cursorPosition,column);
if (o instanceof Number) {
return ((Number)o).longValue();
} else if (o instanceof Boolean) {
return ((Boolean)o).booleanValue() ? 1 :0 ;
} else return Long.valueOf(String.valueOf(o));
}
public long getLong(String column) throws SQLException {
if (getInternalValue(cursorPosition,column) == null) return 0;
Object o = getInternalValue(cursorPosition,column);
if (o instanceof Number) {
return ((Number)o).longValue();
} else if (o instanceof Boolean) {
return ((Boolean)o).booleanValue() ? 1 :0 ;
} else return Long.valueOf(String.valueOf(o));
}
public ResultSetMetaData getMetaData() throws SQLException {
return metadata;
}
public Object getObject(int column, Map> mapping) throws SQLException {
throw new UnsupportedOperationException("Unimplented feature.");
}
public Object getObject(int column) throws SQLException {
return (Object)getInternalValue(cursorPosition,column);
}
public Object getObject(String column, Map> mapping) throws SQLException {
throw new UnsupportedOperationException("Unimplented feature.");
}
public Object getObject(String column) throws SQLException {
return (Object)getInternalValue(cursorPosition,column);
}
public Ref getRef(int column) throws SQLException {
throw new UnsupportedOperationException("Unimplented feature.");
}
public Ref getRef(String column) throws SQLException {
throw new UnsupportedOperationException("Unimplented feature.");
}
public int getRow() throws SQLException {
return (cursorPosition > BEFOREFIRST && cursorPosition < AFTERLAST) ? cursorPosition : 0;
}
public short getShort(int column) throws SQLException {
if (getInternalValue(cursorPosition,column) == null) return 0;
Object o = getInternalValue(cursorPosition,column);
if (o instanceof Number) {
return ((Number)o).shortValue();
} else if (o instanceof Boolean) {
return ((Boolean)o).booleanValue() ? (short)1 : (short)0 ;
} else return Short.valueOf(String.valueOf(o));
}
public short getShort(String column) throws SQLException {
if (getInternalValue(cursorPosition,column) == null) return 0;
Object o = getInternalValue(cursorPosition,column);
if (o instanceof Number) {
return ((Number)o).shortValue();
} else if (o instanceof Boolean) {
return ((Boolean)o).booleanValue() ? (short)1 : (short)0 ;
} else return Short.valueOf(String.valueOf(o));
}
public Statement getStatement() throws SQLException {
return null;
}
public String getString(int column) throws SQLException {
Object o = getInternalValue(cursorPosition,column);
return (o == null) ? null : String.valueOf(o);
}
public String getString(String column) throws SQLException {
Object o = getInternalValue(cursorPosition,column);
return (o == null) ? null : String.valueOf(o);
}
public Time getTime(int column, Calendar cal) throws SQLException {
return (Time)getInternalValue(cursorPosition,column);
}
public Time getTime(int column) throws SQLException {
Object o = getInternalValue(cursorPosition,column);
if (o == null) return null;
if (o instanceof Time) return (Time)o;
if (o instanceof java.util.Date)
return new Time(((java.util.Date)o).getTime());
if (o instanceof Calendar)
return new Time(((Calendar)o).getTimeInMillis());
return Time.valueOf(String.valueOf(o));
}
public Time getTime(String column, Calendar cal) throws SQLException {
return (Time)getInternalValue(cursorPosition,column);
}
public Time getTime(String column) throws SQLException {
Object o = getInternalValue(cursorPosition,column);
if (o == null) return null;
if (o instanceof Time) return (Time)o;
if (o instanceof java.util.Date)
return new Time(((java.util.Date)o).getTime());
if (o instanceof Calendar)
return new Time(((Calendar)o).getTimeInMillis());
return Time.valueOf(String.valueOf(o));
}
public Timestamp getTimestamp(int column, Calendar cal) throws SQLException {
return (Timestamp)getInternalValue(cursorPosition,column);
}
public Timestamp getTimestamp(int column) throws SQLException {
Object o = getInternalValue(cursorPosition,column);
if (o == null) return null;
if (o instanceof Timestamp) return (Timestamp)o;
if (o instanceof java.util.Date)
return new Timestamp(((java.util.Date)o).getTime());
if (o instanceof Calendar)
return new Timestamp(((Calendar)o).getTimeInMillis());
return Timestamp.valueOf(String.valueOf(o));
}
public Timestamp getTimestamp(String column, Calendar cal) throws SQLException {
return (Timestamp)getInternalValue(cursorPosition,column);
}
public Timestamp getTimestamp(String column) throws SQLException {
Object o = getInternalValue(cursorPosition,column);
if (o == null) return null;
if (o instanceof Timestamp) return (Timestamp)o;
if (o instanceof java.util.Date)
return new Timestamp(((java.util.Date)o).getTime());
if (o instanceof Calendar)
return new Timestamp(((Calendar)o).getTimeInMillis());
return Timestamp.valueOf(String.valueOf(o));
}
public int getType() throws SQLException {
return TYPE_SCROLL_INSENSITIVE;
}
public InputStream getUnicodeStream(int column) throws SQLException {
return (InputStream)getInternalValue(cursorPosition,column);
}
public InputStream getUnicodeStream(String column) throws SQLException {
return (InputStream)getInternalValue(cursorPosition,column);
}
public URL getURL(int column) throws SQLException {
return (URL)getInternalValue(cursorPosition,column);
}
public URL getURL(String column) throws SQLException {
return (URL)getInternalValue(cursorPosition,column);
}
public SQLWarning getWarnings() throws SQLException {
// TODO Auto-generated method stub
return null;
}
public void insertRow() throws SQLException {
if (!insertRow) throw new SQLException("Cannot insert any row except the insert row.");
// TODO: Add logic to check nullability.
}
public boolean isAfterLast() throws SQLException {
return cursorPosition >= AFTERLAST;
}
public boolean isBeforeFirst() throws SQLException {
return cursorPosition <= BEFOREFIRST;
}
public boolean isFirst() throws SQLException {
return data.size() > 0 && !insertRow && cursorPosition == BEFOREFIRST + 1;
}
public boolean isLast() throws SQLException {
return data.size() > 0 && !insertRow && cursorPosition == AFTERLAST - 1;
}
public boolean last() throws SQLException {
return absolute(-1);
}
public void moveToCurrentRow() throws SQLException {
insertRow = false;
}
public void moveToInsertRow() throws SQLException {
insertRow = true;
}
public boolean next() throws SQLException {
return relative(1);
}
public boolean previous() throws SQLException {
return relative(-1);
}
public void refreshRow() throws SQLException {
// TODO: blow away update row
}
public boolean relative(int offset) throws SQLException {
return absolute(cursorPosition+offset);
}
public boolean rowDeleted() throws SQLException {
// TODO: Possibly implement deletion detection
return false;
}
public boolean rowInserted() throws SQLException {
// TODO: Possibly implement insertion detection
return false;
}
public boolean rowUpdated() throws SQLException {
// TODO: Possibly implement update detection.
return false;
}
public void setFetchDirection(int direction) throws SQLException {
this.fetchDirection = direction;
}
public void setFetchSize(int rows) throws SQLException {
if (rows < 0 || (this.statement != null && rows > statement.getMaxRows()))
throw new SQLException("Fetch size less than zero or greater than statement's maximum rows.");
else this.fetchSize = rows;
}
public void updateArray(int column, Array x) throws SQLException {
// TODO Auto-generated method stub
}
public void updateArray(String column, Array x) throws SQLException {
updateArray(findColumn(column),x);
}
public void updateAsciiStream(int column, InputStream x, int length) throws SQLException {
// TODO Auto-generated method stub
}
public void updateAsciiStream(String column, InputStream x, int length) throws SQLException {
updateAsciiStream(findColumn(column),x,length);
}
public void updateBigDecimal(int column, BigDecimal x) throws SQLException {
// TODO Auto-generated method stub
}
public void updateBigDecimal(String column, BigDecimal x) throws SQLException {
updateBigDecimal(findColumn(column),x);
}
public void updateBinaryStream(int column, InputStream x, int length) throws SQLException {
// TODO Auto-generated method stub
}
public void updateBinaryStream(String column, InputStream x, int length) throws SQLException {
updateBinaryStream(findColumn(column),x,length);
}
public void updateBlob(int column, Blob x) throws SQLException {
// TODO Auto-generated method stub
}
public void updateBlob(String column, Blob x) throws SQLException {
updateBlob(findColumn(column),x);
}
public void updateBoolean(int column, boolean x) throws SQLException {
// TODO Auto-generated method stub
}
public void updateBoolean(String column, boolean x) throws SQLException {
updateBoolean(findColumn(column),x);
}
public void updateByte(int column, byte x) throws SQLException {
// TODO Auto-generated method stub
}
public void updateByte(String column, byte x) throws SQLException {
updateByte(findColumn(column),x);
}
public void updateBytes(int column, byte[] x) throws SQLException {
// TODO Auto-generated method stub
}
public void updateBytes(String column, byte[] x) throws SQLException {
updateBytes(findColumn(column),x);
}
public void updateCharacterStream(int column, Reader x, int length) throws SQLException {
// TODO Auto-generated method stub
}
public void updateCharacterStream(String column, Reader reader, int length) throws SQLException {
updateCharacterStream(findColumn(column),reader,length);
}
public void updateClob(int column, Clob x) throws SQLException {
// TODO Auto-generated method stub
}
public void updateClob(String column, Clob x) throws SQLException {
updateClob(findColumn(column),x);
}
public void updateDate(int column, Date x) throws SQLException {
// TODO Auto-generated method stub
}
public void updateDate(String column, Date x) throws SQLException {
updateDate(findColumn(column),x);
}
public void updateDouble(int column, double x) throws SQLException {
// TODO Auto-generated method stub
}
public void updateDouble(String column, double x) throws SQLException {
updateDouble(findColumn(column),x);
}
public void updateFloat(int column, float x) throws SQLException {
// TODO Auto-generated method stub
}
public void updateFloat(String column, float x) throws SQLException {
updateFloat(findColumn(column),x);
}
public void updateInt(int column, int x) throws SQLException {
// TODO Auto-generated method stub
}
public void updateInt(String column, int x) throws SQLException {
updateInt(findColumn(column),x);
}
public void updateLong(int column, long x) throws SQLException {
// TODO Auto-generated method stub
}
public void updateLong(String column, long x) throws SQLException {
updateLong(findColumn(column),x);
}
public void updateNull(int column) throws SQLException {
// TODO Auto-generated method stub
}
public void updateNull(String column) throws SQLException {
updateNull(findColumn(column));
}
public void updateObject(int column, Object x, int scale) throws SQLException {
// TODO Auto-generated method stub
}
public void updateObject(int column, Object x) throws SQLException {
// TODO Auto-generated method stub
}
public void updateObject(String column, Object x, int scale) throws SQLException {
updateObject(findColumn(column),x,scale);
}
public void updateObject(String column, Object x) throws SQLException {
updateObject(findColumn(column),x);
}
public void updateRef(int column, Ref x) throws SQLException {
// TODO Auto-generated method stub
}
public void updateRef(String column, Ref x) throws SQLException {
updateRef(findColumn(column),x);
}
public void updateRow() throws SQLException {
// TODO: Implement update call.
throw new UnsupportedOperationException("Not yet implemented");
}
public void updateShort(int column, short x) throws SQLException {
// TODO Auto-generated method stub
}
public void updateShort(String column, short x) throws SQLException {
updateShort(findColumn(column),x);
}
public void updateString(int column, String x) throws SQLException {
// TODO Auto-generated method stub
}
public void updateString(String column, String x) throws SQLException {
updateString(findColumn(column),x);
}
public void updateTime(int column, Time x) throws SQLException {
// TODO Auto-generated method stub
}
public void updateTime(String column, Time x) throws SQLException {
updateTime(findColumn(column),x);
}
public void updateTimestamp(int column, Timestamp x) throws SQLException {
// TODO Auto-generated method stub
}
public void updateTimestamp(String column, Timestamp x) throws SQLException {
updateTimestamp(findColumn(column),x);
}
public boolean wasNull() throws SQLException {
// TODO: Implement very awkward wasNull() method.
return false;
}
class MockBlob implements Blob {
private byte[] bytes;
public MockBlob(byte[] bytes) {
this.bytes=bytes;
}
public InputStream getBinaryStream() throws SQLException {
// TODO Implement getBinaryStream()
return null;
}
public byte[] getBytes(long pos, int length) throws SQLException {
// TODO Implement getBinaryStream()
if (false) bytes.hashCode();
return null;
}
public long length() throws SQLException {
// TODO Implement length()
return 0;
}
public long position(Blob pattern, long start) throws SQLException {
// TODO Implement position(Blob,long)
return 0;
}
public long position(byte[] pattern, long start) throws SQLException {
// TODO Implement position(byte[],long)
return 0;
}
public OutputStream setBinaryStream(long pos) throws SQLException {
// TODO Implement setBinaryStream(long)
return null;
}
public int setBytes(long pos, byte[] bytes, int offset, int len) throws SQLException {
// TODO Implement setBytes(long,byte[],int,int)
return 0;
}
public int setBytes(long pos, byte[] bytes) throws SQLException {
// TODO Implement setBytes(long,byte[])
return 0;
}
public void truncate(long len) throws SQLException {
// TODO Implement truncate(long)
}
@Override
public void free() throws SQLException {
// TODO Auto-generated method stub
}
@Override
public InputStream getBinaryStream(long pos, long length) throws SQLException {
// TODO Auto-generated method stub
return null;
}
}
@Override
public T unwrap(Class iface) throws SQLException {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean isWrapperFor(Class> iface) throws SQLException {
// TODO Auto-generated method stub
return false;
}
@Override
public RowId getRowId(int columnIndex) throws SQLException {
// TODO Auto-generated method stub
return null;
}
@Override
public RowId getRowId(String columnLabel) throws SQLException {
// TODO Auto-generated method stub
return null;
}
@Override
public void updateRowId(int columnIndex, RowId x) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateRowId(String columnLabel, RowId x) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public int getHoldability() throws SQLException {
// TODO Auto-generated method stub
return 0;
}
@Override
public boolean isClosed() throws SQLException {
// TODO Auto-generated method stub
return false;
}
@Override
public void updateNString(int columnIndex, String nString) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateNString(String columnLabel, String nString) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateNClob(int columnIndex, NClob nClob) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateNClob(String columnLabel, NClob nClob) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public NClob getNClob(int columnIndex) throws SQLException {
// TODO Auto-generated method stub
return null;
}
@Override
public NClob getNClob(String columnLabel) throws SQLException {
// TODO Auto-generated method stub
return null;
}
@Override
public SQLXML getSQLXML(int columnIndex) throws SQLException {
// TODO Auto-generated method stub
return null;
}
@Override
public SQLXML getSQLXML(String columnLabel) throws SQLException {
// TODO Auto-generated method stub
return null;
}
@Override
public void updateSQLXML(int columnIndex, SQLXML xmlObject) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateSQLXML(String columnLabel, SQLXML xmlObject) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public String getNString(int columnIndex) throws SQLException {
// TODO Auto-generated method stub
return null;
}
@Override
public String getNString(String columnLabel) throws SQLException {
// TODO Auto-generated method stub
return null;
}
@Override
public Reader getNCharacterStream(int columnIndex) throws SQLException {
// TODO Auto-generated method stub
return null;
}
@Override
public Reader getNCharacterStream(String columnLabel) throws SQLException {
// TODO Auto-generated method stub
return null;
}
@Override
public void updateNCharacterStream(int columnIndex, Reader x, long length) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateNCharacterStream(String columnLabel, Reader reader, long length) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateAsciiStream(int columnIndex, InputStream x, long length) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateBinaryStream(int columnIndex, InputStream x, long length) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateCharacterStream(int columnIndex, Reader x, long length) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateAsciiStream(String columnLabel, InputStream x, long length) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateBinaryStream(String columnLabel, InputStream x, long length) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateCharacterStream(String columnLabel, Reader reader, long length) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateBlob(int columnIndex, InputStream inputStream, long length) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateBlob(String columnLabel, InputStream inputStream, long length) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateClob(int columnIndex, Reader reader, long length) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateClob(String columnLabel, Reader reader, long length) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateNClob(int columnIndex, Reader reader, long length) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateNClob(String columnLabel, Reader reader, long length) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateNCharacterStream(int columnIndex, Reader x) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateNCharacterStream(String columnLabel, Reader reader) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateAsciiStream(int columnIndex, InputStream x) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateBinaryStream(int columnIndex, InputStream x) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateCharacterStream(int columnIndex, Reader x) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateAsciiStream(String columnLabel, InputStream x) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateBinaryStream(String columnLabel, InputStream x) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateCharacterStream(String columnLabel, Reader reader) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateBlob(int columnIndex, InputStream inputStream) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateBlob(String columnLabel, InputStream inputStream) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateClob(int columnIndex, Reader reader) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateClob(String columnLabel, Reader reader) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateNClob(int columnIndex, Reader reader) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public void updateNClob(String columnLabel, Reader reader) throws SQLException {
// TODO Auto-generated method stub
}
@Override
public T getObject(int columnIndex, Class type) throws SQLException {
// TODO Auto-generated method stub
return null;
}
@Override
public T getObject(String columnLabel, Class type) throws SQLException {
// TODO Auto-generated method stub
return null;
};
}