/*
* 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.tools;
import java.io.InputStream;
import java.io.Reader;
import java.math.BigDecimal;
import java.math.BigInteger;
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.sql.Types;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Map;
import java.util.UUID;
import org.h2.api.ErrorCode;
import org.h2.jdbc.JdbcResultSetBackwardsCompat;
import org.h2.message.DbException;
import org.h2.util.Bits;
import org.h2.util.JdbcUtils;
import org.h2.util.MathUtils;
import org.h2.util.SimpleColumnInfo;
import org.h2.util.Utils;
import org.h2.value.DataType;
This class is a simple result set and meta data implementation.
It can be used in Java functions that return a result set.
Only the most basic methods are implemented, the others throw an exception.
This implementation is standalone, and only relies on standard classes.
It can be extended easily if required.
An application can create a result set using the following code:
SimpleResultSet rs = new SimpleResultSet();
rs.addColumn("ID", Types.INTEGER, 10, 0);
rs.addColumn("NAME", Types.VARCHAR, 255, 0);
rs.addRow(0, "Hello" });
rs.addRow(1, "World" });
/**
* This class is a simple result set and meta data implementation.
* It can be used in Java functions that return a result set.
* Only the most basic methods are implemented, the others throw an exception.
* This implementation is standalone, and only relies on standard classes.
* It can be extended easily if required.
*
* An application can create a result set using the following code:
*
* <pre>
* SimpleResultSet rs = new SimpleResultSet();
* rs.addColumn("ID", Types.INTEGER, 10, 0);
* rs.addColumn("NAME", Types.VARCHAR, 255, 0);
* rs.addRow(0, "Hello" });
* rs.addRow(1, "World" });
* </pre>
*
*/
public class SimpleResultSet implements ResultSet, ResultSetMetaData,
JdbcResultSetBackwardsCompat {
private ArrayList<Object[]> rows;
private Object[] currentRow;
private int rowId = -1;
private boolean wasNull;
private SimpleRowSource source;
private ArrayList<SimpleColumnInfo> columns = Utils.newSmallArrayList();
private boolean autoClose = true;
This constructor is used if the result set is later populated with
addRow.
/**
* This constructor is used if the result set is later populated with
* addRow.
*/
public SimpleResultSet() {
rows = Utils.newSmallArrayList();
}
This constructor is used if the result set should retrieve the rows using
the specified row source object.
Params: - source – the row source
/**
* This constructor is used if the result set should retrieve the rows using
* the specified row source object.
*
* @param source the row source
*/
public SimpleResultSet(SimpleRowSource source) {
this.source = source;
}
Adds a column to the result set.
All columns must be added before adding rows.
This method uses the default SQL type names.
Params: - name – null is replaced with C1, C2,...
- sqlType – the value returned in getColumnType(..)
- precision – the precision
- scale – the scale
/**
* Adds a column to the result set.
* All columns must be added before adding rows.
* This method uses the default SQL type names.
*
* @param name null is replaced with C1, C2,...
* @param sqlType the value returned in getColumnType(..)
* @param precision the precision
* @param scale the scale
*/
public void addColumn(String name, int sqlType, int precision, int scale) {
int valueType = DataType.convertSQLTypeToValueType(sqlType);
addColumn(name, sqlType, DataType.getDataType(valueType).name,
precision, scale);
}
Adds a column to the result set.
All columns must be added before adding rows.
Params: - name – null is replaced with C1, C2,...
- sqlType – the value returned in getColumnType(..)
- sqlTypeName – the type name return in getColumnTypeName(..)
- precision – the precision
- scale – the scale
/**
* Adds a column to the result set.
* All columns must be added before adding rows.
*
* @param name null is replaced with C1, C2,...
* @param sqlType the value returned in getColumnType(..)
* @param sqlTypeName the type name return in getColumnTypeName(..)
* @param precision the precision
* @param scale the scale
*/
public void addColumn(String name, int sqlType, String sqlTypeName,
int precision, int scale) {
if (rows != null && !rows.isEmpty()) {
throw new IllegalStateException(
"Cannot add a column after adding rows");
}
if (name == null) {
name = "C" + (columns.size() + 1);
}
columns.add(new SimpleColumnInfo(name, sqlType, sqlTypeName, precision, scale));
}
Add a new row to the result set.
Do not use this method when using a RowSource.
Params: - row – the row as an array of objects
/**
* Add a new row to the result set.
* Do not use this method when using a RowSource.
*
* @param row the row as an array of objects
*/
public void addRow(Object... row) {
if (rows == null) {
throw new IllegalStateException(
"Cannot add a row when using RowSource");
}
rows.add(row);
}
Returns ResultSet.CONCUR_READ_ONLY.
Returns: CONCUR_READ_ONLY
/**
* Returns ResultSet.CONCUR_READ_ONLY.
*
* @return CONCUR_READ_ONLY
*/
@Override
public int getConcurrency() {
return ResultSet.CONCUR_READ_ONLY;
}
Returns ResultSet.FETCH_FORWARD.
Returns: FETCH_FORWARD
/**
* Returns ResultSet.FETCH_FORWARD.
*
* @return FETCH_FORWARD
*/
@Override
public int getFetchDirection() {
return ResultSet.FETCH_FORWARD;
}
Returns 0.
Returns: 0
/**
* Returns 0.
*
* @return 0
*/
@Override
public int getFetchSize() {
return 0;
}
Returns the row number (1, 2,...) or 0 for no row.
Returns: 0
/**
* Returns the row number (1, 2,...) or 0 for no row.
*
* @return 0
*/
@Override
public int getRow() {
return currentRow == null ? 0 : rowId + 1;
}
Returns the result set type. This is ResultSet.TYPE_FORWARD_ONLY for
auto-close result sets, and ResultSet.TYPE_SCROLL_INSENSITIVE for others.
Returns: TYPE_FORWARD_ONLY or TYPE_SCROLL_INSENSITIVE
/**
* Returns the result set type. This is ResultSet.TYPE_FORWARD_ONLY for
* auto-close result sets, and ResultSet.TYPE_SCROLL_INSENSITIVE for others.
*
* @return TYPE_FORWARD_ONLY or TYPE_SCROLL_INSENSITIVE
*/
@Override
public int getType() {
if (autoClose) {
return ResultSet.TYPE_FORWARD_ONLY;
}
return ResultSet.TYPE_SCROLL_INSENSITIVE;
}
Closes the result set and releases the resources.
/**
* Closes the result set and releases the resources.
*/
@Override
public void close() {
currentRow = null;
rows = null;
columns = null;
rowId = -1;
if (source != null) {
source.close();
source = null;
}
}
Moves the cursor to the next row of the result set.
Returns: true if successful, false if there are no more rows
/**
* Moves the cursor to the next row of the result set.
*
* @return true if successful, false if there are no more rows
*/
@Override
public boolean next() throws SQLException {
if (source != null) {
rowId++;
currentRow = source.readRow();
if (currentRow != null) {
return true;
}
} else if (rows != null && rowId < rows.size()) {
rowId++;
if (rowId < rows.size()) {
currentRow = rows.get(rowId);
return true;
}
currentRow = null;
}
if (autoClose) {
close();
}
return false;
}
Moves the current position to before the first row, that means the result
set is reset.
/**
* Moves the current position to before the first row, that means the result
* set is reset.
*/
@Override
public void beforeFirst() throws SQLException {
if (autoClose) {
throw DbException.getJdbcSQLException(ErrorCode.RESULT_SET_NOT_SCROLLABLE);
}
rowId = -1;
if (source != null) {
source.reset();
}
}
Returns whether the last column accessed was null.
Returns: true if the last column accessed was null
/**
* Returns whether the last column accessed was null.
*
* @return true if the last column accessed was null
*/
@Override
public boolean wasNull() {
return wasNull;
}
Searches for a specific column in the result set. A case-insensitive
search is made.
Params: - columnLabel – the column label
Throws: - SQLException – if the column is not found or if the result set is
closed
Returns: the column index (1,2,...)
/**
* Searches for a specific column in the result set. A case-insensitive
* search is made.
*
* @param columnLabel the column label
* @return the column index (1,2,...)
* @throws SQLException if the column is not found or if the result set is
* closed
*/
@Override
public int findColumn(String columnLabel) throws SQLException {
if (columnLabel != null && columns != null) {
for (int i = 0, size = columns.size(); i < size; i++) {
if (columnLabel.equalsIgnoreCase(getColumn(i).name)) {
return i + 1;
}
}
}
throw DbException.getJdbcSQLException(ErrorCode.COLUMN_NOT_FOUND_1, columnLabel);
}
Returns a reference to itself.
Returns: this
/**
* Returns a reference to itself.
*
* @return this
*/
@Override
public ResultSetMetaData getMetaData() {
return this;
}
Returns null.
Returns: null
/**
* Returns null.
*
* @return null
*/
@Override
public SQLWarning getWarnings() {
return null;
}
Returns null.
Returns: null
/**
* Returns null.
*
* @return null
*/
@Override
public Statement getStatement() {
return null;
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void clearWarnings() {
// nothing to do
}
// ---- get ---------------------------------------------
Returns the value as a java.sql.Array.
Params: - columnIndex – (1,2,...)
Returns: the value
/**
* Returns the value as a java.sql.Array.
*
* @param columnIndex (1,2,...)
* @return the value
*/
@Override
public Array getArray(int columnIndex) throws SQLException {
Object[] o = (Object[]) get(columnIndex);
return o == null ? null : new SimpleArray(o);
}
Returns the value as a java.sql.Array.
Params: - columnLabel – the column label
Returns: the value
/**
* Returns the value as a java.sql.Array.
*
* @param columnLabel the column label
* @return the value
*/
@Override
public Array getArray(String columnLabel) throws SQLException {
return getArray(findColumn(columnLabel));
}
INTERNAL
/**
* INTERNAL
*/
@Override
public InputStream getAsciiStream(int columnIndex) throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public InputStream getAsciiStream(String columnLabel) throws SQLException {
throw getUnsupportedException();
}
Returns the value as a java.math.BigDecimal.
Params: - columnIndex – (1,2,...)
Returns: the value
/**
* Returns the value as a java.math.BigDecimal.
*
* @param columnIndex (1,2,...)
* @return the value
*/
@Override
public BigDecimal getBigDecimal(int columnIndex) throws SQLException {
Object o = get(columnIndex);
if (o != null && !(o instanceof BigDecimal)) {
o = new BigDecimal(o.toString());
}
return (BigDecimal) o;
}
Returns the value as a java.math.BigDecimal.
Params: - columnLabel – the column label
Returns: the value
/**
* Returns the value as a java.math.BigDecimal.
*
* @param columnLabel the column label
* @return the value
*/
@Override
public BigDecimal getBigDecimal(String columnLabel) throws SQLException {
return getBigDecimal(findColumn(columnLabel));
}
Deprecated: INTERNAL
/**
* @deprecated INTERNAL
*/
@Deprecated
@Override
public BigDecimal getBigDecimal(int columnIndex, int scale)
throws SQLException {
throw getUnsupportedException();
}
Deprecated: INTERNAL
/**
* @deprecated INTERNAL
*/
@Deprecated
@Override
public BigDecimal getBigDecimal(String columnLabel, int scale)
throws SQLException {
throw getUnsupportedException();
}
Returns the value as a java.io.InputStream.
Params: - columnIndex – (1,2,...)
Returns: the value
/**
* Returns the value as a java.io.InputStream.
*
* @param columnIndex (1,2,...)
* @return the value
*/
@Override
public InputStream getBinaryStream(int columnIndex) throws SQLException {
return asInputStream(get(columnIndex));
}
private static InputStream asInputStream(Object o) throws SQLException {
if (o == null) {
return null;
} else if (o instanceof Blob) {
return ((Blob) o).getBinaryStream();
}
return (InputStream) o;
}
Returns the value as a java.io.InputStream.
Params: - columnLabel – the column label
Returns: the value
/**
* Returns the value as a java.io.InputStream.
*
* @param columnLabel the column label
* @return the value
*/
@Override
public InputStream getBinaryStream(String columnLabel) throws SQLException {
return getBinaryStream(findColumn(columnLabel));
}
Returns the value as a java.sql.Blob.
This is only supported if the
result set was created using a Blob object.
Params: - columnIndex – (1,2,...)
Returns: the value
/**
* Returns the value as a java.sql.Blob.
* This is only supported if the
* result set was created using a Blob object.
*
* @param columnIndex (1,2,...)
* @return the value
*/
@Override
public Blob getBlob(int columnIndex) throws SQLException {
return (Blob) get(columnIndex);
}
Returns the value as a java.sql.Blob.
This is only supported if the
result set was created using a Blob object.
Params: - columnLabel – the column label
Returns: the value
/**
* Returns the value as a java.sql.Blob.
* This is only supported if the
* result set was created using a Blob object.
*
* @param columnLabel the column label
* @return the value
*/
@Override
public Blob getBlob(String columnLabel) throws SQLException {
return getBlob(findColumn(columnLabel));
}
Returns the value as a boolean.
Params: - columnIndex – (1,2,...)
Returns: the value
/**
* Returns the value as a boolean.
*
* @param columnIndex (1,2,...)
* @return the value
*/
@Override
public boolean getBoolean(int columnIndex) throws SQLException {
Object o = get(columnIndex);
if (o == null) {
return false;
}
if (o instanceof Boolean) {
return (Boolean) o;
}
if (o instanceof Number) {
Number n = (Number) o;
if (n instanceof Double || n instanceof Float) {
return n.doubleValue() != 0;
}
if (n instanceof BigDecimal) {
return ((BigDecimal) n).signum() != 0;
}
if (n instanceof BigInteger) {
return ((BigInteger) n).signum() != 0;
}
return n.longValue() != 0;
}
return Utils.parseBoolean(o.toString(), false, true);
}
Returns the value as a boolean.
Params: - columnLabel – the column label
Returns: the value
/**
* Returns the value as a boolean.
*
* @param columnLabel the column label
* @return the value
*/
@Override
public boolean getBoolean(String columnLabel) throws SQLException {
return getBoolean(findColumn(columnLabel));
}
Returns the value as a byte.
Params: - columnIndex – (1,2,...)
Returns: the value
/**
* Returns the value as a byte.
*
* @param columnIndex (1,2,...)
* @return the value
*/
@Override
public byte getByte(int columnIndex) throws SQLException {
Object o = get(columnIndex);
if (o != null && !(o instanceof Number)) {
o = Byte.decode(o.toString());
}
return o == null ? 0 : ((Number) o).byteValue();
}
Returns the value as a byte.
Params: - columnLabel – the column label
Returns: the value
/**
* Returns the value as a byte.
*
* @param columnLabel the column label
* @return the value
*/
@Override
public byte getByte(String columnLabel) throws SQLException {
return getByte(findColumn(columnLabel));
}
Returns the value as a byte array.
Params: - columnIndex – (1,2,...)
Returns: the value
/**
* Returns the value as a byte array.
*
* @param columnIndex (1,2,...)
* @return the value
*/
@Override
public byte[] getBytes(int columnIndex) throws SQLException {
Object o = get(columnIndex);
if (o == null || o instanceof byte[]) {
return (byte[]) o;
}
if (o instanceof UUID) {
return Bits.uuidToBytes((UUID) o);
}
return JdbcUtils.serialize(o, null);
}
Returns the value as a byte array.
Params: - columnLabel – the column label
Returns: the value
/**
* Returns the value as a byte array.
*
* @param columnLabel the column label
* @return the value
*/
@Override
public byte[] getBytes(String columnLabel) throws SQLException {
return getBytes(findColumn(columnLabel));
}
Returns the value as a java.io.Reader.
This is only supported if the
result set was created using a Clob or Reader object.
Params: - columnIndex – (1,2,...)
Returns: the value
/**
* Returns the value as a java.io.Reader.
* This is only supported if the
* result set was created using a Clob or Reader object.
*
* @param columnIndex (1,2,...)
* @return the value
*/
@Override
public Reader getCharacterStream(int columnIndex) throws SQLException {
return asReader(get(columnIndex));
}
private static Reader asReader(Object o) throws SQLException {
if (o == null) {
return null;
} else if (o instanceof Clob) {
return ((Clob) o).getCharacterStream();
}
return (Reader) o;
}
Returns the value as a java.io.Reader.
This is only supported if the
result set was created using a Clob or Reader object.
Params: - columnLabel – the column label
Returns: the value
/**
* Returns the value as a java.io.Reader.
* This is only supported if the
* result set was created using a Clob or Reader object.
*
* @param columnLabel the column label
* @return the value
*/
@Override
public Reader getCharacterStream(String columnLabel) throws SQLException {
return getCharacterStream(findColumn(columnLabel));
}
Returns the value as a java.sql.Clob.
This is only supported if the
result set was created using a Clob object.
Params: - columnIndex – (1,2,...)
Returns: the value
/**
* Returns the value as a java.sql.Clob.
* This is only supported if the
* result set was created using a Clob object.
*
* @param columnIndex (1,2,...)
* @return the value
*/
@Override
public Clob getClob(int columnIndex) throws SQLException {
return (Clob) get(columnIndex);
}
Returns the value as a java.sql.Clob.
This is only supported if the
result set was created using a Clob object.
Params: - columnLabel – the column label
Returns: the value
/**
* Returns the value as a java.sql.Clob.
* This is only supported if the
* result set was created using a Clob object.
*
* @param columnLabel the column label
* @return the value
*/
@Override
public Clob getClob(String columnLabel) throws SQLException {
return getClob(findColumn(columnLabel));
}
Returns the value as an java.sql.Date.
Params: - columnIndex – (1,2,...)
Returns: the value
/**
* Returns the value as an java.sql.Date.
*
* @param columnIndex (1,2,...)
* @return the value
*/
@Override
public Date getDate(int columnIndex) throws SQLException {
return (Date) get(columnIndex);
}
Returns the value as a java.sql.Date.
Params: - columnLabel – the column label
Returns: the value
/**
* Returns the value as a java.sql.Date.
*
* @param columnLabel the column label
* @return the value
*/
@Override
public Date getDate(String columnLabel) throws SQLException {
return getDate(findColumn(columnLabel));
}
INTERNAL
/**
* INTERNAL
*/
@Override
public Date getDate(int columnIndex, Calendar cal) throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public Date getDate(String columnLabel, Calendar cal) throws SQLException {
throw getUnsupportedException();
}
Returns the value as an double.
Params: - columnIndex – (1,2,...)
Returns: the value
/**
* Returns the value as an double.
*
* @param columnIndex (1,2,...)
* @return the value
*/
@Override
public double getDouble(int columnIndex) throws SQLException {
Object o = get(columnIndex);
if (o != null && !(o instanceof Number)) {
return Double.parseDouble(o.toString());
}
return o == null ? 0 : ((Number) o).doubleValue();
}
Returns the value as a double.
Params: - columnLabel – the column label
Returns: the value
/**
* Returns the value as a double.
*
* @param columnLabel the column label
* @return the value
*/
@Override
public double getDouble(String columnLabel) throws SQLException {
return getDouble(findColumn(columnLabel));
}
Returns the value as a float.
Params: - columnIndex – (1,2,...)
Returns: the value
/**
* Returns the value as a float.
*
* @param columnIndex (1,2,...)
* @return the value
*/
@Override
public float getFloat(int columnIndex) throws SQLException {
Object o = get(columnIndex);
if (o != null && !(o instanceof Number)) {
return Float.parseFloat(o.toString());
}
return o == null ? 0 : ((Number) o).floatValue();
}
Returns the value as a float.
Params: - columnLabel – the column label
Returns: the value
/**
* Returns the value as a float.
*
* @param columnLabel the column label
* @return the value
*/
@Override
public float getFloat(String columnLabel) throws SQLException {
return getFloat(findColumn(columnLabel));
}
Returns the value as an int.
Params: - columnIndex – (1,2,...)
Returns: the value
/**
* Returns the value as an int.
*
* @param columnIndex (1,2,...)
* @return the value
*/
@Override
public int getInt(int columnIndex) throws SQLException {
Object o = get(columnIndex);
if (o != null && !(o instanceof Number)) {
o = Integer.decode(o.toString());
}
return o == null ? 0 : ((Number) o).intValue();
}
Returns the value as an int.
Params: - columnLabel – the column label
Returns: the value
/**
* Returns the value as an int.
*
* @param columnLabel the column label
* @return the value
*/
@Override
public int getInt(String columnLabel) throws SQLException {
return getInt(findColumn(columnLabel));
}
Returns the value as a long.
Params: - columnIndex – (1,2,...)
Returns: the value
/**
* Returns the value as a long.
*
* @param columnIndex (1,2,...)
* @return the value
*/
@Override
public long getLong(int columnIndex) throws SQLException {
Object o = get(columnIndex);
if (o != null && !(o instanceof Number)) {
o = Long.decode(o.toString());
}
return o == null ? 0 : ((Number) o).longValue();
}
Returns the value as a long.
Params: - columnLabel – the column label
Returns: the value
/**
* Returns the value as a long.
*
* @param columnLabel the column label
* @return the value
*/
@Override
public long getLong(String columnLabel) throws SQLException {
return getLong(findColumn(columnLabel));
}
INTERNAL
/**
* INTERNAL
*/
@Override
public Reader getNCharacterStream(int columnIndex) throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public Reader getNCharacterStream(String columnLabel) throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public NClob getNClob(int columnIndex) throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public NClob getNClob(String columnLabel) throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public String getNString(int columnIndex) throws SQLException {
return getString(columnIndex);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public String getNString(String columnLabel) throws SQLException {
return getString(columnLabel);
}
Returns the value as an Object.
Params: - columnIndex – (1,2,...)
Returns: the value
/**
* Returns the value as an Object.
*
* @param columnIndex (1,2,...)
* @return the value
*/
@Override
public Object getObject(int columnIndex) throws SQLException {
return get(columnIndex);
}
Returns the value as an Object.
Params: - columnLabel – the column label
Returns: the value
/**
* Returns the value as an Object.
*
* @param columnLabel the column label
* @return the value
*/
@Override
public Object getObject(String columnLabel) throws SQLException {
return getObject(findColumn(columnLabel));
}
Returns the value as an Object of the specified type.
Params: - columnIndex – the column index (1, 2, ...)
- type – the class of the returned value
Returns: the value
/**
* Returns the value as an Object of the specified type.
*
* @param columnIndex the column index (1, 2, ...)
* @param type the class of the returned value
* @return the value
*/
@Override
public <T> T getObject(int columnIndex, Class<T> type) throws SQLException {
if (wasNull()) {
return null;
}
if (type == BigDecimal.class) {
return type.cast(getBigDecimal(columnIndex));
} else if (type == BigInteger.class) {
return type.cast(getBigDecimal(columnIndex).toBigInteger());
} else if (type == String.class) {
return type.cast(getString(columnIndex));
} else if (type == Boolean.class) {
return type.cast(getBoolean(columnIndex));
} else if (type == Byte.class) {
return type.cast(getByte(columnIndex));
} else if (type == Short.class) {
return type.cast(getShort(columnIndex));
} else if (type == Integer.class) {
return type.cast(getInt(columnIndex));
} else if (type == Long.class) {
return type.cast(getLong(columnIndex));
} else if (type == Float.class) {
return type.cast(getFloat(columnIndex));
} else if (type == Double.class) {
return type.cast(getDouble(columnIndex));
} else if (type == Date.class) {
return type.cast(getDate(columnIndex));
} else if (type == Time.class) {
return type.cast(getTime(columnIndex));
} else if (type == Timestamp.class) {
return type.cast(getTimestamp(columnIndex));
} else if (type == UUID.class) {
return type.cast(getObject(columnIndex));
} else if (type == byte[].class) {
return type.cast(getBytes(columnIndex));
} else if (type == java.sql.Array.class) {
return type.cast(getArray(columnIndex));
} else if (type == Blob.class) {
return type.cast(getBlob(columnIndex));
} else if (type == Clob.class) {
return type.cast(getClob(columnIndex));
} else {
throw getUnsupportedException();
}
}
Returns the value as an Object of the specified type.
Params: - columnName – the column name
- type – the class of the returned value
Returns: the value
/**
* Returns the value as an Object of the specified type.
*
* @param columnName the column name
* @param type the class of the returned value
* @return the value
*/
@Override
public <T> T getObject(String columnName, Class<T> type) throws SQLException {
return getObject(findColumn(columnName), type);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public Object getObject(int columnIndex, Map<String, Class<?>> map)
throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public Object getObject(String columnLabel, Map<String, Class<?>> map)
throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public Ref getRef(int columnIndex) throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public Ref getRef(String columnLabel) throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public RowId getRowId(int columnIndex) throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public RowId getRowId(String columnLabel) throws SQLException {
throw getUnsupportedException();
}
Returns the value as a short.
Params: - columnIndex – (1,2,...)
Returns: the value
/**
* Returns the value as a short.
*
* @param columnIndex (1,2,...)
* @return the value
*/
@Override
public short getShort(int columnIndex) throws SQLException {
Object o = get(columnIndex);
if (o != null && !(o instanceof Number)) {
o = Short.decode(o.toString());
}
return o == null ? 0 : ((Number) o).shortValue();
}
Returns the value as a short.
Params: - columnLabel – the column label
Returns: the value
/**
* Returns the value as a short.
*
* @param columnLabel the column label
* @return the value
*/
@Override
public short getShort(String columnLabel) throws SQLException {
return getShort(findColumn(columnLabel));
}
INTERNAL
/**
* INTERNAL
*/
@Override
public SQLXML getSQLXML(int columnIndex) throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public SQLXML getSQLXML(String columnLabel) throws SQLException {
throw getUnsupportedException();
}
Returns the value as a String.
Params: - columnIndex – (1,2,...)
Returns: the value
/**
* Returns the value as a String.
*
* @param columnIndex (1,2,...)
* @return the value
*/
@Override
public String getString(int columnIndex) throws SQLException {
Object o = get(columnIndex);
if (o == null) {
return null;
}
switch (columns.get(columnIndex - 1).type) {
case Types.CLOB:
Clob c = (Clob) o;
return c.getSubString(1, MathUtils.convertLongToInt(c.length()));
}
return o.toString();
}
Returns the value as a String.
Params: - columnLabel – the column label
Returns: the value
/**
* Returns the value as a String.
*
* @param columnLabel the column label
* @return the value
*/
@Override
public String getString(String columnLabel) throws SQLException {
return getString(findColumn(columnLabel));
}
Returns the value as an java.sql.Time.
Params: - columnIndex – (1,2,...)
Returns: the value
/**
* Returns the value as an java.sql.Time.
*
* @param columnIndex (1,2,...)
* @return the value
*/
@Override
public Time getTime(int columnIndex) throws SQLException {
return (Time) get(columnIndex);
}
Returns the value as a java.sql.Time.
Params: - columnLabel – the column label
Returns: the value
/**
* Returns the value as a java.sql.Time.
*
* @param columnLabel the column label
* @return the value
*/
@Override
public Time getTime(String columnLabel) throws SQLException {
return getTime(findColumn(columnLabel));
}
INTERNAL
/**
* INTERNAL
*/
@Override
public Time getTime(int columnIndex, Calendar cal) throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public Time getTime(String columnLabel, Calendar cal) throws SQLException {
throw getUnsupportedException();
}
Returns the value as an java.sql.Timestamp.
Params: - columnIndex – (1,2,...)
Returns: the value
/**
* Returns the value as an java.sql.Timestamp.
*
* @param columnIndex (1,2,...)
* @return the value
*/
@Override
public Timestamp getTimestamp(int columnIndex) throws SQLException {
return (Timestamp) get(columnIndex);
}
Returns the value as a java.sql.Timestamp.
Params: - columnLabel – the column label
Returns: the value
/**
* Returns the value as a java.sql.Timestamp.
*
* @param columnLabel the column label
* @return the value
*/
@Override
public Timestamp getTimestamp(String columnLabel) throws SQLException {
return getTimestamp(findColumn(columnLabel));
}
INTERNAL
/**
* INTERNAL
*/
@Override
public Timestamp getTimestamp(int columnIndex, Calendar cal)
throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public Timestamp getTimestamp(String columnLabel, Calendar cal)
throws SQLException {
throw getUnsupportedException();
}
Deprecated: INTERNAL
/**
* @deprecated INTERNAL
*/
@Deprecated
@Override
public InputStream getUnicodeStream(int columnIndex) throws SQLException {
throw getUnsupportedException();
}
Deprecated: INTERNAL
/**
* @deprecated INTERNAL
*/
@Deprecated
@Override
public InputStream getUnicodeStream(String columnLabel) throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public URL getURL(int columnIndex) throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public URL getURL(String columnLabel) throws SQLException {
throw getUnsupportedException();
}
// ---- update ---------------------------------------------
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateArray(int columnIndex, Array x) throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateArray(String columnLabel, Array x) throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateAsciiStream(int columnIndex, InputStream x)
throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateAsciiStream(String columnLabel, InputStream x)
throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateAsciiStream(int columnIndex, InputStream x, int length)
throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateAsciiStream(String columnLabel, InputStream x, int length)
throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateAsciiStream(int columnIndex, InputStream x, long length)
throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateAsciiStream(String columnLabel, InputStream x, long length)
throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateBigDecimal(int columnIndex, BigDecimal x)
throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateBigDecimal(String columnLabel, BigDecimal x)
throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateBinaryStream(int columnIndex, InputStream x)
throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateBinaryStream(String columnLabel, InputStream x)
throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateBinaryStream(int columnIndex, InputStream x, int length)
throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateBinaryStream(String columnLabel, InputStream x, int length)
throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateBinaryStream(int columnIndex, InputStream x, long length)
throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateBinaryStream(String columnLabel, InputStream x, long length)
throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateBlob(int columnIndex, Blob x) throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateBlob(String columnLabel, Blob x) throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateBlob(int columnIndex, InputStream x) throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateBlob(String columnLabel, InputStream x)
throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateBlob(int columnIndex, InputStream x, long length)
throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateBlob(String columnLabel, InputStream x, long length)
throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateBoolean(int columnIndex, boolean x) throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateBoolean(String columnLabel, boolean x)
throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateByte(int columnIndex, byte x) throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateByte(String columnLabel, byte x) throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateBytes(int columnIndex, byte[] x) throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateBytes(String columnLabel, byte[] x) throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateCharacterStream(int columnIndex, Reader x)
throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateCharacterStream(String columnLabel, Reader x)
throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateCharacterStream(int columnIndex, Reader x, int length)
throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateCharacterStream(String columnLabel, Reader x, int length)
throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateCharacterStream(int columnIndex, Reader x, long length)
throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateCharacterStream(String columnLabel, Reader x, long length)
throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateClob(int columnIndex, Clob x) throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateClob(String columnLabel, Clob x) throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateClob(int columnIndex, Reader x) throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateClob(String columnLabel, Reader x) throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateClob(int columnIndex, Reader x, long length)
throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateClob(String columnLabel, Reader x, long length)
throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateDate(int columnIndex, Date x) throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateDate(String columnLabel, Date x) throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateDouble(int columnIndex, double x) throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateDouble(String columnLabel, double x) throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateFloat(int columnIndex, float x) throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateFloat(String columnLabel, float x) throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateInt(int columnIndex, int x) throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateInt(String columnLabel, int x) throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateLong(int columnIndex, long x) throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateLong(String columnLabel, long x) throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateNCharacterStream(int columnIndex, Reader x)
throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateNCharacterStream(String columnLabel, Reader x)
throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateNCharacterStream(int columnIndex, Reader x, long length)
throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateNCharacterStream(String columnLabel, Reader x, long length)
throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateNClob(int columnIndex, NClob x) throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateNClob(String columnLabel, NClob x) throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateNClob(int columnIndex, Reader x) throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateNClob(String columnLabel, Reader x) throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateNClob(int columnIndex, Reader x, long length)
throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateNClob(String columnLabel, Reader x, long length)
throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateNString(int columnIndex, String x) throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateNString(String columnLabel, String x) throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateNull(int columnIndex) throws SQLException {
update(columnIndex, null);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateNull(String columnLabel) throws SQLException {
update(columnLabel, null);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateObject(int columnIndex, Object x) throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateObject(String columnLabel, Object x) throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateObject(int columnIndex, Object x, int scale)
throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateObject(String columnLabel, Object x, int scale)
throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateRef(int columnIndex, Ref x) throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateRef(String columnLabel, Ref x) throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateRowId(int columnIndex, RowId x) throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateRowId(String columnLabel, RowId x) throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateShort(int columnIndex, short x) throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateShort(String columnLabel, short x) throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateSQLXML(int columnIndex, SQLXML x) throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateSQLXML(String columnLabel, SQLXML x) throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateString(int columnIndex, String x) throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateString(String columnLabel, String x) throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateTime(int columnIndex, Time x) throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateTime(String columnLabel, Time x) throws SQLException {
update(columnLabel, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateTimestamp(int columnIndex, Timestamp x)
throws SQLException {
update(columnIndex, x);
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateTimestamp(String columnLabel, Timestamp x)
throws SQLException {
update(columnLabel, x);
}
// ---- result set meta data ---------------------------------------------
Returns the column count.
Returns: the column count
/**
* Returns the column count.
*
* @return the column count
*/
@Override
public int getColumnCount() {
return columns.size();
}
Returns 15.
Params: - columnIndex – (1,2,...)
Returns: 15
/**
* Returns 15.
*
* @param columnIndex (1,2,...)
* @return 15
*/
@Override
public int getColumnDisplaySize(int columnIndex) {
return 15;
}
Returns the SQL type.
Params: - columnIndex – (1,2,...)
Returns: the SQL type
/**
* Returns the SQL type.
*
* @param columnIndex (1,2,...)
* @return the SQL type
*/
@Override
public int getColumnType(int columnIndex) throws SQLException {
return getColumn(columnIndex - 1).type;
}
Returns the precision.
Params: - columnIndex – (1,2,...)
Returns: the precision
/**
* Returns the precision.
*
* @param columnIndex (1,2,...)
* @return the precision
*/
@Override
public int getPrecision(int columnIndex) throws SQLException {
return getColumn(columnIndex - 1).precision;
}
Returns the scale.
Params: - columnIndex – (1,2,...)
Returns: the scale
/**
* Returns the scale.
*
* @param columnIndex (1,2,...)
* @return the scale
*/
@Override
public int getScale(int columnIndex) throws SQLException {
return getColumn(columnIndex - 1).scale;
}
Returns ResultSetMetaData.columnNullableUnknown.
Params: - columnIndex – (1,2,...)
Returns: columnNullableUnknown
/**
* Returns ResultSetMetaData.columnNullableUnknown.
*
* @param columnIndex (1,2,...)
* @return columnNullableUnknown
*/
@Override
public int isNullable(int columnIndex) {
return ResultSetMetaData.columnNullableUnknown;
}
Returns false.
Params: - columnIndex – (1,2,...)
Returns: false
/**
* Returns false.
*
* @param columnIndex (1,2,...)
* @return false
*/
@Override
public boolean isAutoIncrement(int columnIndex) {
return false;
}
Returns true.
Params: - columnIndex – (1,2,...)
Returns: true
/**
* Returns true.
*
* @param columnIndex (1,2,...)
* @return true
*/
@Override
public boolean isCaseSensitive(int columnIndex) {
return true;
}
Returns false.
Params: - columnIndex – (1,2,...)
Returns: false
/**
* Returns false.
*
* @param columnIndex (1,2,...)
* @return false
*/
@Override
public boolean isCurrency(int columnIndex) {
return false;
}
Returns false.
Params: - columnIndex – (1,2,...)
Returns: false
/**
* Returns false.
*
* @param columnIndex (1,2,...)
* @return false
*/
@Override
public boolean isDefinitelyWritable(int columnIndex) {
return false;
}
Returns true.
Params: - columnIndex – (1,2,...)
Returns: true
/**
* Returns true.
*
* @param columnIndex (1,2,...)
* @return true
*/
@Override
public boolean isReadOnly(int columnIndex) {
return true;
}
Returns true.
Params: - columnIndex – (1,2,...)
Returns: true
/**
* Returns true.
*
* @param columnIndex (1,2,...)
* @return true
*/
@Override
public boolean isSearchable(int columnIndex) {
return true;
}
Returns true.
Params: - columnIndex – (1,2,...)
Returns: true
/**
* Returns true.
*
* @param columnIndex (1,2,...)
* @return true
*/
@Override
public boolean isSigned(int columnIndex) {
return true;
}
Returns false.
Params: - columnIndex – (1,2,...)
Returns: false
/**
* Returns false.
*
* @param columnIndex (1,2,...)
* @return false
*/
@Override
public boolean isWritable(int columnIndex) {
return false;
}
Returns empty string.
Params: - columnIndex – (1,2,...)
Returns: empty string
/**
* Returns empty string.
*
* @param columnIndex (1,2,...)
* @return empty string
*/
@Override
public String getCatalogName(int columnIndex) {
return "";
}
Returns the Java class name if this column.
Params: - columnIndex – (1,2,...)
Returns: the class name
/**
* Returns the Java class name if this column.
*
* @param columnIndex (1,2,...)
* @return the class name
*/
@Override
public String getColumnClassName(int columnIndex) throws SQLException {
int type = DataType.getValueTypeFromResultSet(this, columnIndex);
return DataType.getTypeClassName(type, true);
}
Returns the column label.
Params: - columnIndex – (1,2,...)
Returns: the column label
/**
* Returns the column label.
*
* @param columnIndex (1,2,...)
* @return the column label
*/
@Override
public String getColumnLabel(int columnIndex) throws SQLException {
return getColumn(columnIndex - 1).name;
}
Returns the column name.
Params: - columnIndex – (1,2,...)
Returns: the column name
/**
* Returns the column name.
*
* @param columnIndex (1,2,...)
* @return the column name
*/
@Override
public String getColumnName(int columnIndex) throws SQLException {
return getColumnLabel(columnIndex);
}
Returns the data type name of a column.
Params: - columnIndex – (1,2,...)
Returns: the type name
/**
* Returns the data type name of a column.
*
* @param columnIndex (1,2,...)
* @return the type name
*/
@Override
public String getColumnTypeName(int columnIndex) throws SQLException {
return getColumn(columnIndex - 1).typeName;
}
Returns empty string.
Params: - columnIndex – (1,2,...)
Returns: empty string
/**
* Returns empty string.
*
* @param columnIndex (1,2,...)
* @return empty string
*/
@Override
public String getSchemaName(int columnIndex) {
return "";
}
Returns empty string.
Params: - columnIndex – (1,2,...)
Returns: empty string
/**
* Returns empty string.
*
* @param columnIndex (1,2,...)
* @return empty string
*/
@Override
public String getTableName(int columnIndex) {
return "";
}
// ---- unsupported / result set -----------------------------------
INTERNAL
/**
* INTERNAL
*/
@Override
public void afterLast() throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void cancelRowUpdates() throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void deleteRow() throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void insertRow() throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void moveToCurrentRow() throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void moveToInsertRow() throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void refreshRow() throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void updateRow() throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public boolean first() throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public boolean isAfterLast() throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public boolean isBeforeFirst() throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public boolean isFirst() throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public boolean isLast() throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public boolean last() throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public boolean previous() throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public boolean rowDeleted() throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public boolean rowInserted() throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public boolean rowUpdated() throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void setFetchDirection(int direction) throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void setFetchSize(int rows) throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public boolean absolute(int row) throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public boolean relative(int offset) throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public String getCursorName() throws SQLException {
throw getUnsupportedException();
}
// --- private -----------------------------
private void update(int columnIndex, Object obj) throws SQLException {
checkClosed();
checkColumnIndex(columnIndex);
this.currentRow[columnIndex - 1] = obj;
}
private void update(String columnLabel, Object obj) throws SQLException {
this.currentRow[findColumn(columnLabel) - 1] = obj;
}
INTERNAL
/**
* INTERNAL
*/
static SQLException getUnsupportedException() {
return DbException.getJdbcSQLException(ErrorCode.FEATURE_NOT_SUPPORTED_1);
}
private void checkClosed() throws SQLException {
if (columns == null) {
throw DbException.getJdbcSQLException(ErrorCode.OBJECT_CLOSED);
}
}
private void checkColumnIndex(int columnIndex) throws SQLException {
if (columnIndex < 1 || columnIndex > columns.size()) {
throw DbException.getInvalidValueException(
"columnIndex", columnIndex).getSQLException();
}
}
private Object get(int columnIndex) throws SQLException {
if (currentRow == null) {
throw DbException.getJdbcSQLException(ErrorCode.NO_DATA_AVAILABLE);
}
checkColumnIndex(columnIndex);
columnIndex--;
Object o = columnIndex < currentRow.length ?
currentRow[columnIndex] : null;
wasNull = o == null;
return o;
}
private SimpleColumnInfo getColumn(int i) throws SQLException {
checkColumnIndex(i + 1);
return columns.get(i);
}
Returns the current result set holdability.
Returns: the holdability
/**
* Returns the current result set holdability.
*
* @return the holdability
*/
@Override
public int getHoldability() {
return ResultSet.HOLD_CURSORS_OVER_COMMIT;
}
Returns whether this result set has been closed.
Returns: true if the result set was closed
/**
* Returns whether this result set has been closed.
*
* @return true if the result set was closed
*/
@Override
public boolean isClosed() {
return rows == null && source == null;
}
INTERNAL
/**
* INTERNAL
*/
@Override
public <T> T unwrap(Class<T> iface) throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public boolean isWrapperFor(Class<?> iface) throws SQLException {
throw getUnsupportedException();
}
Set the auto-close behavior. If enabled (the default), the result set is
closed after reading the last row.
Params: - autoClose – the new value
/**
* Set the auto-close behavior. If enabled (the default), the result set is
* closed after reading the last row.
*
* @param autoClose the new value
*/
public void setAutoClose(boolean autoClose) {
this.autoClose = autoClose;
}
Get the current auto-close behavior.
Returns: the auto-close value
/**
* Get the current auto-close behavior.
*
* @return the auto-close value
*/
public boolean getAutoClose() {
return autoClose;
}
A simple array implementation,
backed by an object array
/**
* A simple array implementation,
* backed by an object array
*/
public static class SimpleArray implements Array {
private final Object[] value;
SimpleArray(Object[] value) {
this.value = value;
}
Get the object array.
Returns: the object array
/**
* Get the object array.
*
* @return the object array
*/
@Override
public Object getArray() {
return value;
}
INTERNAL
/**
* INTERNAL
*/
@Override
public Object getArray(Map<String, Class<?>> map) throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public Object getArray(long index, int count) throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public Object getArray(long index, int count, Map<String, Class<?>> map)
throws SQLException {
throw getUnsupportedException();
}
Get the base type of this array.
Returns: Types.NULL
/**
* Get the base type of this array.
*
* @return Types.NULL
*/
@Override
public int getBaseType() {
return Types.NULL;
}
Get the base type name of this array.
Returns: "NULL"
/**
* Get the base type name of this array.
*
* @return "NULL"
*/
@Override
public String getBaseTypeName() {
return "NULL";
}
INTERNAL
/**
* INTERNAL
*/
@Override
public ResultSet getResultSet() throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public ResultSet getResultSet(Map<String, Class<?>> map)
throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public ResultSet getResultSet(long index, int count)
throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public ResultSet getResultSet(long index, int count,
Map<String, Class<?>> map) throws SQLException {
throw getUnsupportedException();
}
INTERNAL
/**
* INTERNAL
*/
@Override
public void free() {
// nothing to do
}
}
}