All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hazelcast.jdbc.JdbcResultSet Maven / Gradle / Ivy

There is a newer version: 5.5.0
Show newest version
/*
 * Copyright (c) 2008-2020, Hazelcast, Inc. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.hazelcast.jdbc;

import com.hazelcast.sql.SqlResult;
import com.hazelcast.sql.SqlRow;
import com.hazelcast.sql.SqlRowMetadata;

import java.io.InputStream;
import java.io.Reader;
import java.math.BigDecimal;
import java.math.RoundingMode;
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.Calendar;
import java.util.Collections;
import java.util.Iterator;
import java.util.Map;

import static com.hazelcast.jdbc.TypeConverter.convertTo;
import static com.hazelcast.jdbc.TypeConverter.convertToBigDecimal;
import static com.hazelcast.jdbc.TypeConverter.convertToBoolean;
import static com.hazelcast.jdbc.TypeConverter.convertToByte;
import static com.hazelcast.jdbc.TypeConverter.convertToDate;
import static com.hazelcast.jdbc.TypeConverter.convertToDouble;
import static com.hazelcast.jdbc.TypeConverter.convertToFloat;
import static com.hazelcast.jdbc.TypeConverter.convertToInt;
import static com.hazelcast.jdbc.TypeConverter.convertToLong;
import static com.hazelcast.jdbc.TypeConverter.convertToShort;
import static com.hazelcast.jdbc.TypeConverter.convertToString;
import static com.hazelcast.jdbc.TypeConverter.convertToTime;
import static com.hazelcast.jdbc.TypeConverter.convertToTimestamp;

public class JdbcResultSet implements ResultSet {

    static final JdbcResultSet EMPTY = new EmptyJdbcResultSet();

    private final SqlResult sqlResult;
    private final Iterator iterator;
    private SqlRow currentRow;

    /** Whether the last read column was null. */
    private boolean wasNull;

    /** Whether the result set is closed. */
    private boolean closed;

    /**
     * Whether the result set is in the closing process.
     * Needed to break the loop (ResultSet -> Statement -> ResultSet)
     * that may occur when {@link Statement#isCloseOnCompletion()} is set to true.
     */
    private boolean closing;

    /** Parent statement */
    private final JdbcStatement statement;

    /** Fetch direction. */
    private int fetchDirection;
    /** Fetch size */
    private int fetchSize;
    /** Max rows */
    private final int maxRows;
    /** Number of the returned rows or -1 after all rows were returned. */
    private int rowsReturned;


    JdbcResultSet(SqlResult sqlResult, JdbcStatement statement) throws SQLException {
        this.sqlResult = sqlResult;
        iterator = sqlResult.iterator();
        this.statement = statement;
        maxRows = statement.getMaxRows();
    }

    private JdbcResultSet(SqlResult sqlResult) {
        this.sqlResult = sqlResult;
        iterator = sqlResult.iterator();
        this.statement = null;
        maxRows = 0;
    }

    @Override
    public boolean next() throws SQLException {
        checkClosed();
        if (iterator.hasNext() && isNextRowAvailable()) {
            currentRow = iterator.next();
            rowsReturned++;
            return true;
        }
        rowsReturned = -1;
        return false;
    }

    private boolean isNextRowAvailable() {
        return (maxRows == 0 || rowsReturned < maxRows) && rowsReturned != -1;
    }

    @Override
    public void close() throws SQLException {
        if (!isClosed()) {
            if (closing) {
                return;
            }
            closing = true;
            sqlResult.close();
            statement.tryCloseOnCompletion();
            closed = true;
        }
    }

    @Override
    public boolean wasNull() throws SQLException {
        checkClosed();
        return wasNull;
    }

    @Override
    public String getString(int columnIndex) throws SQLException {
        return convertToString(get(columnIndex), sqlResult.getRowMetadata().getColumn(columnIndex - 1).getType());
    }

    @Override
    public boolean getBoolean(int columnIndex) throws SQLException {
        return convertToBoolean(get(columnIndex), sqlResult.getRowMetadata().getColumn(columnIndex - 1).getType());
    }

    @Override
    public byte getByte(int columnIndex) throws SQLException {
        return convertToByte(get(columnIndex), sqlResult.getRowMetadata().getColumn(columnIndex - 1).getType());
    }

    @Override
    public short getShort(int columnIndex) throws SQLException {
        return convertToShort(get(columnIndex), sqlResult.getRowMetadata().getColumn(columnIndex - 1).getType());
    }

    @Override
    public int getInt(int columnIndex) throws SQLException {
        return convertToInt(get(columnIndex), sqlResult.getRowMetadata().getColumn(columnIndex - 1).getType());
    }

    @Override
    public long getLong(int columnIndex) throws SQLException {
        return convertToLong(get(columnIndex), sqlResult.getRowMetadata().getColumn(columnIndex - 1).getType());
    }

    @Override
    public float getFloat(int columnIndex) throws SQLException {
        return convertToFloat(get(columnIndex), sqlResult.getRowMetadata().getColumn(columnIndex - 1).getType());
    }

    @Override
    public double getDouble(int columnIndex) throws SQLException {
        return convertToDouble(get(columnIndex), sqlResult.getRowMetadata().getColumn(columnIndex - 1).getType());
    }

    @Override
    public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException {
        return getBigDecimal(columnIndex).setScale(scale, RoundingMode.HALF_UP);
    }

    @Override
    public byte[] getBytes(int columnIndex) throws SQLException {
        return get(columnIndex);
    }

    @Override
    public Date getDate(int columnIndex) throws SQLException {
        return convertToDate(get(columnIndex), sqlResult.getRowMetadata().getColumn(columnIndex - 1).getType());
    }

    @Override
    public Time getTime(int columnIndex) throws SQLException {
        return convertToTime(get(columnIndex), sqlResult.getRowMetadata().getColumn(columnIndex - 1).getType());
    }

    @Override
    public Timestamp getTimestamp(int columnIndex) throws SQLException {
        return convertToTimestamp(get(columnIndex), sqlResult.getRowMetadata().getColumn(columnIndex - 1).getType());
    }

    @Override
    public InputStream getAsciiStream(int columnIndex) throws SQLException {
        throw JdbcUtils.unsupported("Ascii Stream is not supported");
    }

    @Override
    public InputStream getUnicodeStream(int columnIndex) throws SQLException {
        throw JdbcUtils.unsupported("Unicode Stream is not supported");
    }

    @Override
    public InputStream getBinaryStream(int columnIndex) throws SQLException {
        throw JdbcUtils.unsupported("Binary Stream is not supported");
    }

    @Override
    public String getString(String columnLabel) throws SQLException {
        int column = findColumn(columnLabel);
        return convertToString(getByIndex(column), sqlResult.getRowMetadata().getColumn(column).getType());
    }

    @Override
    public boolean getBoolean(String columnLabel) throws SQLException {
        int column = findColumn(columnLabel);
        return convertToBoolean(getByIndex(column), sqlResult.getRowMetadata().getColumn(column).getType());
    }

    @Override
    public byte getByte(String columnLabel) throws SQLException {
        int column = findColumn(columnLabel);
        return convertToByte(getByIndex(column), sqlResult.getRowMetadata().getColumn(column).getType());
    }

    @Override
    public short getShort(String columnLabel) throws SQLException {
        int column = findColumn(columnLabel);
        return convertToShort(getByIndex(column), sqlResult.getRowMetadata().getColumn(column).getType());
    }

    @Override
    public int getInt(String columnLabel) throws SQLException {
        int column = findColumn(columnLabel);
        return convertToInt(getByIndex(column), sqlResult.getRowMetadata().getColumn(column).getType());
    }

    @Override
    public long getLong(String columnLabel) throws SQLException {
        int column = findColumn(columnLabel);
        return convertToLong(getByIndex(column), sqlResult.getRowMetadata().getColumn(column).getType());
    }

    @Override
    public float getFloat(String columnLabel) throws SQLException {
        int column = findColumn(columnLabel);
        return convertToFloat(getByIndex(column), sqlResult.getRowMetadata().getColumn(column).getType());
    }

    @Override
    public double getDouble(String columnLabel) throws SQLException {
        int column = findColumn(columnLabel);
        return convertToDouble(getByIndex(column), sqlResult.getRowMetadata().getColumn(column).getType());
    }

    @Override
    public BigDecimal getBigDecimal(String columnLabel, int scale) throws SQLException {
        return getBigDecimal(columnLabel).setScale(scale, RoundingMode.HALF_UP);
    }

    @Override
    public byte[] getBytes(String columnLabel) throws SQLException {
        return get(columnLabel);
    }

    @Override
    public Date getDate(String columnLabel) throws SQLException {
        int column = findColumn(columnLabel);
        return convertToDate(getByIndex(column), sqlResult.getRowMetadata().getColumn(column).getType());
    }

    @Override
    public Time getTime(String columnLabel) throws SQLException {
        int column = findColumn(columnLabel);
        return convertToTime(getByIndex(column), sqlResult.getRowMetadata().getColumn(column).getType());
    }

    @Override
    public Timestamp getTimestamp(String columnLabel) throws SQLException {
        int column = findColumn(columnLabel);
        return convertToTimestamp(getByIndex(column), sqlResult.getRowMetadata().getColumn(column).getType());
    }

    @Override
    public InputStream getAsciiStream(String columnLabel) throws SQLException {
        throw JdbcUtils.unsupported("Ascii Stream is not supported");
    }

    @Override
    public InputStream getUnicodeStream(String columnLabel) throws SQLException {
        throw JdbcUtils.unsupported("Unicode Stream is not supported");
    }

    @Override
    public InputStream getBinaryStream(String columnLabel) throws SQLException {
        throw JdbcUtils.unsupported("Binary Stream is not supported");
    }

    @Override
    public SQLWarning getWarnings() throws SQLException {
        checkClosed();
        return null;
    }

    @Override
    public void clearWarnings() throws SQLException {
        checkClosed();
    }

    @Override
    public String getCursorName() throws SQLException {
        throw JdbcUtils.unsupported("Cursor Name is not supported");
    }

    @Override
    public ResultSetMetaData getMetaData() throws SQLException {
        checkClosed();
        return new JdbcResultSetMetaData(sqlResult.getRowMetadata());
    }

    @Override
    public Object getObject(int columnIndex) throws SQLException {
        return get(columnIndex);
    }

    @Override
    public Object getObject(String columnLabel) throws SQLException {
        return get(columnLabel);
    }

    @Override
    public int findColumn(String columnLabel) throws SQLException {
        checkClosed();
        int index = sqlResult.getRowMetadata().findColumn(columnLabel);
        if (index == -1) {
            throw new SQLException("ResultSet does not contain column \"" + columnLabel + "\"");
        }
        return index;
    }

    @Override
    public Reader getCharacterStream(int columnIndex) throws SQLException {
        throw JdbcUtils.unsupported("Character Stream is not supported");
    }

    @Override
    public Reader getCharacterStream(String columnLabel) throws SQLException {
        throw JdbcUtils.unsupported("Character Stream is not supported");
    }

    @Override
    public BigDecimal getBigDecimal(int columnIndex) throws SQLException {
        return convertToBigDecimal(get(columnIndex), sqlResult.getRowMetadata().getColumn(columnIndex - 1).getType());
    }

    @Override
    public BigDecimal getBigDecimal(String columnLabel) throws SQLException {
        int column = findColumn(columnLabel);
        return convertToBigDecimal(getByIndex(column), sqlResult.getRowMetadata().getColumn(column).getType());
    }

    @Override
    public boolean isBeforeFirst() throws SQLException {
        checkClosed();
        return rowsReturned == 0;
    }

    @Override
    public boolean isAfterLast() throws SQLException {
        checkClosed();
        return rowsReturned == -1;
    }

    @Override
    public boolean isFirst() throws SQLException {
        checkClosed();
        return rowsReturned == 1;
    }

    @Override
    public boolean isLast() throws SQLException {
        throw JdbcUtils.unsupported("Method not supported");
    }

    @Override
    public void beforeFirst() throws SQLException {
        throw JdbcUtils.unsupported("Method not supported");
    }

    @Override
    public void afterLast() throws SQLException {
        throw JdbcUtils.unsupported("Method not supported");
    }

    @Override
    public boolean first() throws SQLException {
        throw JdbcUtils.unsupported("Method not supported");
    }

    @Override
    public boolean last() throws SQLException {
        throw JdbcUtils.unsupported("Method not supported");
    }

    @Override
    public int getRow() throws SQLException {
        if (isAfterLast()) {
            return 0;
        }
        return rowsReturned;
    }

    @Override
    public boolean absolute(int row) throws SQLException {
        throw JdbcUtils.unsupported("Method not supported");
    }

    @Override
    public boolean relative(int rows) throws SQLException {
        throw JdbcUtils.unsupported("Method not supported");
    }

    @Override
    public boolean previous() throws SQLException {
        throw JdbcUtils.unsupported("Method not supported");
    }

    @Override
    public void setFetchDirection(int direction) throws SQLException {
        checkClosed();
        switch (direction) {
            case ResultSet.FETCH_FORWARD:
            case ResultSet.FETCH_REVERSE:
            case ResultSet.FETCH_UNKNOWN:
                this.fetchDirection = direction;
                break;
            default:
                throw new SQLException("Invalid fetch direction value: " + direction);
        }
    }

    @Override
    public int getFetchDirection() throws SQLException {
        checkClosed();
        return fetchDirection;
    }

    /**
     * If the fetch size specified is zero the default value will be used.
     */
    @Override
    public void setFetchSize(int rows) throws SQLException {
        checkClosed();
        fetchSize = rows;
    }

    @Override
    public int getFetchSize() throws SQLException {
        checkClosed();
        if (fetchSize == 0) {
            return statement.getFetchSize();
        }
        return fetchSize;
    }

    @Override
    public int getType() throws SQLException {
        checkClosed();
        return ResultSet.TYPE_FORWARD_ONLY;
    }

    @Override
    public int getConcurrency() throws SQLException {
        checkClosed();
        return ResultSet.CONCUR_READ_ONLY;
    }

    @Override
    public boolean rowUpdated() throws SQLException {
        throw JdbcUtils.unsupported("Method not supported");
    }

    @Override
    public boolean rowInserted() throws SQLException {
        throw JdbcUtils.unsupported("Method not supported");
    }

    @Override
    public boolean rowDeleted() throws SQLException {
        throw JdbcUtils.unsupported("Method not supported");
    }

    @Override
    public void updateNull(int columnIndex) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateBoolean(int columnIndex, boolean x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateByte(int columnIndex, byte x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateShort(int columnIndex, short x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateInt(int columnIndex, int x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateLong(int columnIndex, long x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateFloat(int columnIndex, float x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateDouble(int columnIndex, double x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateBigDecimal(int columnIndex, BigDecimal x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateString(int columnIndex, String x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateBytes(int columnIndex, byte[] x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateDate(int columnIndex, Date x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateTime(int columnIndex, Time x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateTimestamp(int columnIndex, Timestamp x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateAsciiStream(int columnIndex, InputStream x, int length) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateBinaryStream(int columnIndex, InputStream x, int length) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateCharacterStream(int columnIndex, Reader x, int length) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateObject(int columnIndex, Object x, int scaleOrLength) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateObject(int columnIndex, Object x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateNull(String columnLabel) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateBoolean(String columnLabel, boolean x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateByte(String columnLabel, byte x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateShort(String columnLabel, short x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateInt(String columnLabel, int x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateLong(String columnLabel, long x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateFloat(String columnLabel, float x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateDouble(String columnLabel, double x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateBigDecimal(String columnLabel, BigDecimal x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateString(String columnLabel, String x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateBytes(String columnLabel, byte[] x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateDate(String columnLabel, Date x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateTime(String columnLabel, Time x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateTimestamp(String columnLabel, Timestamp x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateAsciiStream(String columnLabel, InputStream x, int length) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateBinaryStream(String columnLabel, InputStream x, int length) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateCharacterStream(String columnLabel, Reader reader, int length) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateObject(String columnLabel, Object x, int scaleOrLength) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateObject(String columnLabel, Object x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void insertRow() throws SQLException {
        throw JdbcUtils.unsupported("Method not supported");
    }

    @Override
    public void updateRow() throws SQLException {
        throw JdbcUtils.unsupported("Method not supported");
    }

    @Override
    public void deleteRow() throws SQLException {
        throw JdbcUtils.unsupported("Method not supported");
    }

    @Override
    public void refreshRow() throws SQLException {
        throw JdbcUtils.unsupported("Method not supported");
    }

    @Override
    public void cancelRowUpdates() throws SQLException {
        throw JdbcUtils.unsupported("Method not supported");
    }

    @Override
    public void moveToInsertRow() throws SQLException {
        throw JdbcUtils.unsupported("Method not supported");
    }

    @Override
    public void moveToCurrentRow() throws SQLException {
        throw JdbcUtils.unsupported("Method not supported");
    }

    @Override
    public Statement getStatement() throws SQLException {
        checkClosed();
        return statement;
    }

    @Override
    public Object getObject(int columnIndex, Map> map) throws SQLException {
        return get(columnIndex);
    }

    @Override
    public Ref getRef(int columnIndex) throws SQLException {
        throw JdbcUtils.unsupported("Ref is not supported");
    }

    @Override
    public Blob getBlob(int columnIndex) throws SQLException {
        throw JdbcUtils.unsupported("Blob is not supported");
    }

    @Override
    public Clob getClob(int columnIndex) throws SQLException {
        throw JdbcUtils.unsupported("Clob is not supported");
    }

    @Override
    public Array getArray(int columnIndex) throws SQLException {
        throw JdbcUtils.unsupported("Array is not supported");
    }

    @Override
    public Object getObject(String columnLabel, Map> map) throws SQLException {
        return get(columnLabel);
    }

    @Override
    public Ref getRef(String columnLabel) throws SQLException {
        throw JdbcUtils.unsupported("Ref is not supported");
    }

    @Override
    public Blob getBlob(String columnLabel) throws SQLException {
        throw JdbcUtils.unsupported("Blob is not supported");
    }

    @Override
    public Clob getClob(String columnLabel) throws SQLException {
        throw JdbcUtils.unsupported("Clob is not supported");
    }

    @Override
    public Array getArray(String columnLabel) throws SQLException {
        throw JdbcUtils.unsupported("Array is not supported");
    }

    @Override
    public Date getDate(int columnIndex, Calendar cal) throws SQLException {
        throw JdbcUtils.unsupported("Date is not supported");
    }

    @Override
    public Date getDate(String columnLabel, Calendar cal) throws SQLException {
        throw JdbcUtils.unsupported("Date is not supported");
    }

    @Override
    public Time getTime(int columnIndex, Calendar cal) throws SQLException {
        throw JdbcUtils.unsupported("Time is not supported");
    }

    @Override
    public Time getTime(String columnLabel, Calendar cal) throws SQLException {
        throw JdbcUtils.unsupported("Time is not supported");
    }

    @Override
    public Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException {
        throw JdbcUtils.unsupported("Timestamp is not supported");
    }

    @Override
    public Timestamp getTimestamp(String columnLabel, Calendar cal) throws SQLException {
        throw JdbcUtils.unsupported("Timestamp is not supported");
    }

    @Override
    public URL getURL(int columnIndex) throws SQLException {
        throw JdbcUtils.unsupported("URL is not supported");
    }

    @Override
    public URL getURL(String columnLabel) throws SQLException {
        throw JdbcUtils.unsupported("URL is not supported");
    }

    @Override
    public void updateRef(int columnIndex, Ref x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateRef(String columnLabel, Ref x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateBlob(int columnIndex, Blob x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateBlob(String columnLabel, Blob x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateClob(int columnIndex, Clob x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateClob(String columnLabel, Clob x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateArray(int columnIndex, Array x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateArray(String columnLabel, Array x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public RowId getRowId(int columnIndex) throws SQLException {
        throw JdbcUtils.unsupported("RowId is not supported");
    }

    @Override
    public RowId getRowId(String columnLabel) throws SQLException {
        throw JdbcUtils.unsupported("RowId is not supported");
    }

    @Override
    public void updateRowId(int columnIndex, RowId x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateRowId(String columnLabel, RowId x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public int getHoldability() throws SQLException {
        checkClosed();
        return ResultSet.CLOSE_CURSORS_AT_COMMIT;
    }

    @Override
    public boolean isClosed() {
        return closed;
    }

    @Override
    public void updateNString(int columnIndex, String nString) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateNString(String columnLabel, String nString) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateNClob(int columnIndex, NClob nClob) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateNClob(String columnLabel, NClob nClob) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public NClob getNClob(int columnIndex) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public NClob getNClob(String columnLabel) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public SQLXML getSQLXML(int columnIndex) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public SQLXML getSQLXML(String columnLabel) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateSQLXML(int columnIndex, SQLXML xmlObject) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateSQLXML(String columnLabel, SQLXML xmlObject) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public String getNString(int columnIndex) throws SQLException {
        return get(columnIndex);
    }

    @Override
    public String getNString(String columnLabel) throws SQLException {
        return get(columnLabel);
    }

    @Override
    public Reader getNCharacterStream(int columnIndex) throws SQLException {
        throw JdbcUtils.unsupported("NCharacter stream is not supported");
    }

    @Override
    public Reader getNCharacterStream(String columnLabel) throws SQLException {
        throw JdbcUtils.unsupported("NCharacter stream is not supported");
    }

    @Override
    public void updateNCharacterStream(int columnIndex, Reader x, long length) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateNCharacterStream(String columnLabel, Reader reader, long length) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateAsciiStream(int columnIndex, InputStream x, long length) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateBinaryStream(int columnIndex, InputStream x, long length) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateCharacterStream(int columnIndex, Reader x, long length) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateAsciiStream(String columnLabel, InputStream x, long length) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateBinaryStream(String columnLabel, InputStream x, long length) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateCharacterStream(String columnLabel, Reader reader, long length) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateBlob(int columnIndex, InputStream inputStream, long length) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateBlob(String columnLabel, InputStream inputStream, long length) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateClob(int columnIndex, Reader reader, long length) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateClob(String columnLabel, Reader reader, long length) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateNClob(int columnIndex, Reader reader, long length) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateNClob(String columnLabel, Reader reader, long length) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateNCharacterStream(int columnIndex, Reader x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateNCharacterStream(String columnLabel, Reader reader) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateAsciiStream(int columnIndex, InputStream x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateBinaryStream(int columnIndex, InputStream x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateCharacterStream(int columnIndex, Reader x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateAsciiStream(String columnLabel, InputStream x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateBinaryStream(String columnLabel, InputStream x) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateCharacterStream(String columnLabel, Reader reader) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateBlob(int columnIndex, InputStream inputStream) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateBlob(String columnLabel, InputStream inputStream) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateClob(int columnIndex, Reader reader) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateClob(String columnLabel, Reader reader) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public void updateNClob(int columnIndex, Reader reader) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");

    }

    @Override
    public void updateNClob(String columnLabel, Reader reader) throws SQLException {
        throw JdbcUtils.unsupported("Update ResultSet not supported");
    }

    @Override
    public  T getObject(int columnIndex, Class type) throws SQLException {
        return convertTo(get(columnIndex), type);
    }

    @Override
    public  T getObject(String columnLabel, Class type) throws SQLException {
        return convertTo(get(columnLabel), type);
    }

    @Override
    public  T unwrap(Class iface) {
        return JdbcUtils.unwrap(this, iface);
    }

    @Override
    public boolean isWrapperFor(Class iface) {
        return JdbcUtils.isWrapperFor(this, iface);
    }

    private  T get(String columnLabel) throws SQLException {
        checkClosed();
        return getByIndex(findColumn(columnLabel));
    }

    private  T get(int columnIndex) throws SQLException {
        checkClosed();
        if (sqlResult.getRowMetadata().getColumnCount() < columnIndex) {
            throw new SQLException("ResultSet does not contain column with index " + columnIndex);
        }
        return getByIndex(columnIndex - 1);
    }

    private  T getByIndex(int columnIndex) {
        T result = currentRow.getObject(columnIndex);
        wasNull = result == null;
        return result;
    }

    private void checkClosed() throws SQLException {
        if (isClosed()) {
            throw new SQLException("Result set is closed");
        }
    }

    /**
     * ResultSet with empty results
     */
    private static class EmptyJdbcResultSet extends JdbcResultSet {
        EmptyJdbcResultSet() {
            super(new SqlResult() {
                @Override
                public SqlRowMetadata getRowMetadata() {
                    return new SqlRowMetadata(Collections.emptyList());
                }
                @Override
                public Iterator iterator() {
                    return Collections.emptyIterator();
                }
                @Override
                public long updateCount() {
                    return -1;
                }
                @Override
                public void close() {
                }
            });
        }

        @Override
        public ResultSetMetaData getMetaData() throws SQLException {
            throw JdbcUtils.unsupported("ResultSet.getMetaData not supported in this result");
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy