/*
* Copyright 1999-2015 dangdang.com.
* <p>
* 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.
* </p>
*/
package com.dangdang.ddframe.rdb.sharding.merger.resultset.delegate;
import com.dangdang.ddframe.rdb.sharding.jdbc.adapter.AbstractResultSetAdapter;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
import org.slf4j.LoggerFactory;
import java.io.InputStream;
import java.io.Reader;
import java.math.BigDecimal;
import java.net.URL;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
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.List;
import java.util.Map;
/**
* 代理结果集抽象类.
*
* @author zhangliang
*/
public abstract class AbstractDelegateResultSet extends AbstractResultSetAdapter {
@Getter(AccessLevel.PROTECTED)
@Setter(AccessLevel.PROTECTED)
private ResultSet delegate;
private boolean beforeFirst = true;
private int offset;
public AbstractDelegateResultSet(final List<ResultSet> resultSets) throws SQLException {
super(resultSets);
delegate = resultSets.get(0);
LoggerFactory.getLogger(this.getClass().getName()).debug("{} join pipeline", this.hashCode());
}
@Override
public final boolean next() throws SQLException {
boolean result = beforeFirst ? firstNext() : afterFirstNext();
beforeFirst = false;
if (result) {
LoggerFactory.getLogger(this.getClass().getName()).trace(
"Access result set, total size is: {}, result set hashcode is: {}, offset is: {}", getResultSets().size(), delegate.hashCode(), ++offset);
}
return result;
}
protected abstract boolean firstNext() throws SQLException;
protected abstract boolean afterFirstNext() throws SQLException;
@Override
public final boolean getBoolean(final int columnIndex) throws SQLException {
return delegate.getBoolean(columnIndex);
}
@Override
public final boolean getBoolean(final String columnLabel) throws SQLException {
return delegate.getBoolean(columnLabel);
}
@Override
public final byte getByte(final int columnIndex) throws SQLException {
return delegate.getByte(columnIndex);
}
@Override
public final byte getByte(final String columnLabel) throws SQLException {
return delegate.getByte(columnLabel);
}
@Override
public final short getShort(final int columnIndex) throws SQLException {
return delegate.getShort(columnIndex);
}
@Override
public final short getShort(final String columnLabel) throws SQLException {
return delegate.getShort(columnLabel);
}
@Override
public final int getInt(final int columnIndex) throws SQLException {
return delegate.getInt(columnIndex);
}
@Override
public final int getInt(final String columnLabel) throws SQLException {
return delegate.getInt(columnLabel);
}
@Override
public final long getLong(final int columnIndex) throws SQLException {
return delegate.getLong(columnIndex);
}
@Override
public final long getLong(final String columnLabel) throws SQLException {
return delegate.getLong(columnLabel);
}
@Override
public final float getFloat(final int columnIndex) throws SQLException {
return delegate.getFloat(columnIndex);
}
@Override
public final float getFloat(final String columnLabel) throws SQLException {
return delegate.getFloat(columnLabel);
}
@Override
public final double getDouble(final int columnIndex) throws SQLException {
return delegate.getDouble(columnIndex);
}
@Override
public final double getDouble(final String columnLabel) throws SQLException {
return delegate.getDouble(columnLabel);
}
@Override
public final String getString(final int columnIndex) throws SQLException {
return delegate.getString(columnIndex);
}
@Override
public final String getString(final String columnLabel) throws SQLException {
return delegate.getString(columnLabel);
}
@Override
public final BigDecimal getBigDecimal(final int columnIndex) throws SQLException {
return delegate.getBigDecimal(columnIndex);
}
@Override
public final BigDecimal getBigDecimal(final String columnLabel) throws SQLException {
return delegate.getBigDecimal(columnLabel);
}
@SuppressWarnings("deprecation")
@Override
public final BigDecimal getBigDecimal(final int columnIndex, final int scale) throws SQLException {
return delegate.getBigDecimal(columnIndex, scale);
}
@SuppressWarnings("deprecation")
@Override
public final BigDecimal getBigDecimal(final String columnLabel, final int scale) throws SQLException {
return delegate.getBigDecimal(columnLabel, scale);
}
@Override
public final byte[] getBytes(final int columnIndex) throws SQLException {
return delegate.getBytes(columnIndex);
}
@Override
public final byte[] getBytes(final String columnLabel) throws SQLException {
return delegate.getBytes(columnLabel);
}
@Override
public final Date getDate(final int columnIndex) throws SQLException {
return delegate.getDate(columnIndex);
}
@Override
public final Date getDate(final String columnLabel) throws SQLException {
return delegate.getDate(columnLabel);
}
@Override
public final Date getDate(final int columnIndex, final Calendar cal) throws SQLException {
return delegate.getDate(columnIndex, cal);
}
@Override
public final Date getDate(final String columnLabel, final Calendar cal) throws SQLException {
return delegate.getDate(columnLabel, cal);
}
@Override
public final Time getTime(final int columnIndex) throws SQLException {
return delegate.getTime(columnIndex);
}
@Override
public final Time getTime(final String columnLabel) throws SQLException {
return delegate.getTime(columnLabel);
}
@Override
public final Time getTime(final int columnIndex, final Calendar cal) throws SQLException {
return delegate.getTime(columnIndex, cal);
}
@Override
public final Time getTime(final String columnLabel, final Calendar cal) throws SQLException {
return delegate.getTime(columnLabel, cal);
}
@Override
public final Timestamp getTimestamp(final int columnIndex) throws SQLException {
return delegate.getTimestamp(columnIndex);
}
@Override
public final Timestamp getTimestamp(final String columnLabel) throws SQLException {
return delegate.getTimestamp(columnLabel);
}
@Override
public final Timestamp getTimestamp(final int columnIndex, final Calendar cal) throws SQLException {
return delegate.getTimestamp(columnIndex, cal);
}
@Override
public final Timestamp getTimestamp(final String columnLabel, final Calendar cal) throws SQLException {
return delegate.getTimestamp(columnLabel, cal);
}
@Override
public final InputStream getAsciiStream(final int columnIndex) throws SQLException {
return delegate.getAsciiStream(columnIndex);
}
@Override
public final InputStream getAsciiStream(final String columnLabel) throws SQLException {
return delegate.getAsciiStream(columnLabel);
}
@SuppressWarnings("deprecation")
@Override
public final InputStream getUnicodeStream(final int columnIndex) throws SQLException {
return delegate.getUnicodeStream(columnIndex);
}
@SuppressWarnings("deprecation")
@Override
public final InputStream getUnicodeStream(final String columnLabel) throws SQLException {
return delegate.getUnicodeStream(columnLabel);
}
@Override
public final InputStream getBinaryStream(final int columnIndex) throws SQLException {
return delegate.getBinaryStream(columnIndex);
}
@Override
public final InputStream getBinaryStream(final String columnLabel) throws SQLException {
return delegate.getBinaryStream(columnLabel);
}
@Override
public final Reader getCharacterStream(final int columnIndex) throws SQLException {
return delegate.getCharacterStream(columnIndex);
}
@Override
public final Reader getCharacterStream(final String columnLabel) throws SQLException {
return delegate.getCharacterStream(columnLabel);
}
@Override
public final Blob getBlob(final int columnIndex) throws SQLException {
return delegate.getBlob(columnIndex);
}
@Override
public final Blob getBlob(final String columnLabel) throws SQLException {
return delegate.getBlob(columnLabel);
}
@Override
public final Clob getClob(final int columnIndex) throws SQLException {
return delegate.getClob(columnIndex);
}
@Override
public final Clob getClob(final String columnLabel) throws SQLException {
return delegate.getClob(columnLabel);
}
@Override
public final URL getURL(final int columnIndex) throws SQLException {
return delegate.getURL(columnIndex);
}
@Override
public final URL getURL(final String columnLabel) throws SQLException {
return delegate.getURL(columnLabel);
}
@Override
public final SQLXML getSQLXML(final int columnIndex) throws SQLException {
return delegate.getSQLXML(columnIndex);
}
@Override
public final SQLXML getSQLXML(final String columnLabel) throws SQLException {
return delegate.getSQLXML(columnLabel);
}
@Override
public final Object getObject(final int columnIndex) throws SQLException {
return delegate.getObject(columnIndex);
}
@Override
public final Object getObject(final String columnLabel) throws SQLException {
return delegate.getObject(columnLabel);
}
@Override
public final Object getObject(final int columnIndex, final Map<String, Class<?>> map) throws SQLException {
return delegate.getObject(columnIndex, map);
}
@Override
public final Object getObject(final String columnLabel, final Map<String, Class<?>> map) throws SQLException {
return delegate.getObject(columnLabel, map);
}
@Override
public final boolean wasNull() throws SQLException {
return delegate.wasNull();
}
@Override
public final int getFetchDirection() throws SQLException {
return delegate.getFetchDirection();
}
@Override
public final int getFetchSize() throws SQLException {
return delegate.getFetchSize();
}
@Override
public final int getType() throws SQLException {
return delegate.getType();
}
@Override
public final int getConcurrency() throws SQLException {
return delegate.getConcurrency();
}
@Override
public final Statement getStatement() throws SQLException {
return delegate.getStatement();
}
@Override
public final SQLWarning getWarnings() throws SQLException {
return delegate.getWarnings();
}
@Override
public final void clearWarnings() throws SQLException {
delegate.clearWarnings();
}
@Override
public final ResultSetMetaData getMetaData() throws SQLException {
return delegate.getMetaData();
}
@Override
public final int findColumn(final String columnLabel) throws SQLException {
return delegate.findColumn(columnLabel);
}
}