Skip to content

Commit

Permalink
fix #362
Browse files Browse the repository at this point in the history
  • Loading branch information
terrymanu committed Sep 6, 2017
1 parent d709b63 commit 59450b9
Show file tree
Hide file tree
Showing 4 changed files with 264 additions and 23 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,245 @@
/*
* 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.jdbc.adapter;

import com.dangdang.ddframe.rdb.sharding.jdbc.unsupported.AbstractUnsupportedOperationPreparedStatement;

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.PreparedStatement;
import java.sql.SQLException;
import java.sql.SQLXML;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.Calendar;

/**
* Master-slave adapter for {@code PreparedStatement}.
*
* @author zhangliang
*/
public abstract class AbstractMasterSlavePreparedStatementAdapter extends AbstractUnsupportedOperationPreparedStatement {

@Override
public final void setNull(final int parameterIndex, final int sqlType) throws SQLException {
getTargetStatement().setNull(parameterIndex, sqlType);
}

@Override
public final void setNull(final int parameterIndex, final int sqlType, final String typeName) throws SQLException {
getTargetStatement().setNull(parameterIndex, sqlType, typeName);
}

@Override
public final void setBoolean(final int parameterIndex, final boolean x) throws SQLException {
getTargetStatement().setBoolean(parameterIndex, x);
}

@Override
public final void setByte(final int parameterIndex, final byte x) throws SQLException {
getTargetStatement().setByte(parameterIndex, x);
}

@Override
public final void setShort(final int parameterIndex, final short x) throws SQLException {
getTargetStatement().setShort(parameterIndex, x);
}

@Override
public final void setInt(final int parameterIndex, final int x) throws SQLException {
getTargetStatement().setInt(parameterIndex, x);
}

@Override
public final void setLong(final int parameterIndex, final long x) throws SQLException {
getTargetStatement().setLong(parameterIndex, x);
}

@Override
public final void setFloat(final int parameterIndex, final float x) throws SQLException {
getTargetStatement().setFloat(parameterIndex, x);
}

@Override
public final void setDouble(final int parameterIndex, final double x) throws SQLException {
getTargetStatement().setDouble(parameterIndex, x);
}

@Override
public final void setString(final int parameterIndex, final String x) throws SQLException {
getTargetStatement().setString(parameterIndex, x);
}

@Override
public final void setBigDecimal(final int parameterIndex, final BigDecimal x) throws SQLException {
getTargetStatement().setBigDecimal(parameterIndex, x);
}

@Override
public final void setDate(final int parameterIndex, final Date x) throws SQLException {
getTargetStatement().setDate(parameterIndex, x);
}

@Override
public final void setDate(final int parameterIndex, final Date x, final Calendar cal) throws SQLException {
getTargetStatement().setDate(parameterIndex, x, cal);
}

@Override
public final void setTime(final int parameterIndex, final Time x) throws SQLException {
getTargetStatement().setTime(parameterIndex, x);
}

@Override
public final void setTime(final int parameterIndex, final Time x, final Calendar cal) throws SQLException {
getTargetStatement().setTime(parameterIndex, x, cal);
}

@Override
public final void setTimestamp(final int parameterIndex, final Timestamp x) throws SQLException {
getTargetStatement().setTimestamp(parameterIndex, x);
}

@Override
public final void setTimestamp(final int parameterIndex, final Timestamp x, final Calendar cal) throws SQLException {
getTargetStatement().setTimestamp(parameterIndex, x, cal);
}

@Override
public final void setBytes(final int parameterIndex, final byte[] x) throws SQLException {
getTargetStatement().setBytes(parameterIndex, x);
}

@Override
public final void setBlob(final int parameterIndex, final Blob x) throws SQLException {
getTargetStatement().setBlob(parameterIndex, x);
}

@Override
public final void setBlob(final int parameterIndex, final InputStream x) throws SQLException {
getTargetStatement().setBlob(parameterIndex, x);
}

@Override
public final void setBlob(final int parameterIndex, final InputStream x, final long length) throws SQLException {
getTargetStatement().setBlob(parameterIndex, x, length);
}

@Override
public final void setClob(final int parameterIndex, final Clob x) throws SQLException {
getTargetStatement().setClob(parameterIndex, x);
}

@Override
public final void setClob(final int parameterIndex, final Reader x) throws SQLException {
getTargetStatement().setClob(parameterIndex, x);
}

@Override
public final void setClob(final int parameterIndex, final Reader x, final long length) throws SQLException {
getTargetStatement().setClob(parameterIndex, x, length);
}

@Override
public final void setAsciiStream(final int parameterIndex, final InputStream x) throws SQLException {
getTargetStatement().setAsciiStream(parameterIndex, x);
}

@Override
public final void setAsciiStream(final int parameterIndex, final InputStream x, final int length) throws SQLException {
getTargetStatement().setAsciiStream(parameterIndex, x, length);
}

@Override
public final void setAsciiStream(final int parameterIndex, final InputStream x, final long length) throws SQLException {
getTargetStatement().setAsciiStream(parameterIndex, x, length);
}

@SuppressWarnings("deprecation")
@Override
public final void setUnicodeStream(final int parameterIndex, final InputStream x, final int length) throws SQLException {
getTargetStatement().setUnicodeStream(parameterIndex, x, length);
}

@Override
public final void setBinaryStream(final int parameterIndex, final InputStream x) throws SQLException {
getTargetStatement().setBinaryStream(parameterIndex, x);
}

@Override
public final void setBinaryStream(final int parameterIndex, final InputStream x, final int length) throws SQLException {
getTargetStatement().setBinaryStream(parameterIndex, x, length);
}

@Override
public final void setBinaryStream(final int parameterIndex, final InputStream x, final long length) throws SQLException {
getTargetStatement().setBinaryStream(parameterIndex, x, length);
}

@Override
public final void setCharacterStream(final int parameterIndex, final Reader x) throws SQLException {
getTargetStatement().setCharacterStream(parameterIndex, x);
}

@Override
public final void setCharacterStream(final int parameterIndex, final Reader x, final int length) throws SQLException {
getTargetStatement().setCharacterStream(parameterIndex, x, length);
}

@Override
public final void setCharacterStream(final int parameterIndex, final Reader x, final long length) throws SQLException {
getTargetStatement().setCharacterStream(parameterIndex, x, length);
}

@Override
public void setSQLXML(final int parameterIndex, final SQLXML x) throws SQLException {
getTargetStatement().setSQLXML(parameterIndex, x);
}

@Override
public void setURL(final int parameterIndex, final URL x) throws SQLException {
getTargetStatement().setURL(parameterIndex, x);
}

@Override
public void setObject(final int parameterIndex, final Object x) throws SQLException {
getTargetStatement().setObject(parameterIndex, x);
}

@Override
public void setObject(final int parameterIndex, final Object x, final int targetSqlType) throws SQLException {
getTargetStatement().setObject(parameterIndex, x, targetSqlType);
}

@Override
public void setObject(final int parameterIndex, final Object x, final int targetSqlType, final int scaleOrLength) throws SQLException {
getTargetStatement().setObject(parameterIndex, x, targetSqlType, scaleOrLength);
}

@Override
public final void clearParameters() throws SQLException {
getTargetStatement().clearParameters();
}

protected abstract PreparedStatement getTargetStatement();
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,11 @@
import java.util.Objects;

/**
* Adapter for {@code PreparedStatement}.
* Sharding adapter for {@code PreparedStatement}.
*
* @author zhangliang
*/
public abstract class AbstractPreparedStatementAdapter extends AbstractUnsupportedOperationPreparedStatement {
public abstract class AbstractShardingPreparedStatementAdapter extends AbstractUnsupportedOperationPreparedStatement {

private final List<SetParameterMethodInvocation> setParameterMethodInvocations = new LinkedList<>();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

package com.dangdang.ddframe.rdb.sharding.jdbc.core.statement;

import com.dangdang.ddframe.rdb.sharding.jdbc.adapter.AbstractPreparedStatementAdapter;
import com.dangdang.ddframe.rdb.sharding.jdbc.adapter.AbstractMasterSlavePreparedStatementAdapter;
import com.dangdang.ddframe.rdb.sharding.jdbc.core.connection.MasterSlaveConnection;
import com.dangdang.ddframe.rdb.sharding.parsing.SQLJudgeEngine;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.SQLStatement;
Expand All @@ -37,7 +37,7 @@
* @author zhangliang
*/
@Getter
public final class MasterSlavePreparedStatement extends AbstractPreparedStatementAdapter {
public final class MasterSlavePreparedStatement extends AbstractMasterSlavePreparedStatementAdapter {

private final MasterSlaveConnection connection;

Expand Down Expand Up @@ -91,28 +91,19 @@ public MasterSlavePreparedStatement(final MasterSlaveConnection connection, fina
@Override
public ResultSet executeQuery() throws SQLException {
Preconditions.checkState(1 == routedStatements.size());
replaySetParameter();
return routedStatements.iterator().next().executeQuery();
return getTargetStatement().executeQuery();
}

@Override
public int executeUpdate() throws SQLException {
Preconditions.checkState(1 == routedStatements.size());
replaySetParameter();
return routedStatements.iterator().next().executeUpdate();
}

private void replaySetParameter() {
for (PreparedStatement preparedStatement : routedStatements) {
replaySetParameter(preparedStatement);
}
return getTargetStatement().executeUpdate();
}

@Override
public boolean execute() throws SQLException {
boolean result = false;
for (PreparedStatement each : routedStatements) {
replaySetParameter(each);
result = each.execute();
}
return result;
Expand All @@ -135,33 +126,38 @@ public void addBatch() throws SQLException {
@Override
public int[] executeBatch() throws SQLException {
Preconditions.checkState(1 == routedStatements.size());
return routedStatements.iterator().next().executeBatch();
return getTargetStatement().executeBatch();
}

@Override
public ResultSet getResultSet() throws SQLException {
Preconditions.checkState(1 == routedStatements.size());
return routedStatements.iterator().next().getResultSet();
return getTargetStatement().getResultSet();
}

@Override
public ResultSet getGeneratedKeys() throws SQLException {
Preconditions.checkState(1 == routedStatements.size());
return routedStatements.iterator().next().getGeneratedKeys();
return getTargetStatement().getGeneratedKeys();
}

@Override
public int getResultSetHoldability() throws SQLException {
return routedStatements.iterator().next().getResultSetHoldability();
return getTargetStatement().getResultSetHoldability();
}

@Override
public int getResultSetConcurrency() throws SQLException {
return routedStatements.iterator().next().getResultSetConcurrency();
return getTargetStatement().getResultSetConcurrency();
}

@Override
public int getResultSetType() throws SQLException {
return routedStatements.iterator().next().getResultSetType();
return getTargetStatement().getResultSetType();
}

@Override
protected PreparedStatement getTargetStatement() {
return routedStatements.iterator().next();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import com.dangdang.ddframe.rdb.sharding.executor.type.batch.BatchPreparedStatementUnit;
import com.dangdang.ddframe.rdb.sharding.executor.type.prepared.PreparedStatementExecutor;
import com.dangdang.ddframe.rdb.sharding.executor.type.prepared.PreparedStatementUnit;
import com.dangdang.ddframe.rdb.sharding.jdbc.adapter.AbstractPreparedStatementAdapter;
import com.dangdang.ddframe.rdb.sharding.jdbc.adapter.AbstractShardingPreparedStatementAdapter;
import com.dangdang.ddframe.rdb.sharding.jdbc.core.connection.ShardingConnection;
import com.dangdang.ddframe.rdb.sharding.jdbc.core.resultset.GeneratedKeysResultSet;
import com.dangdang.ddframe.rdb.sharding.jdbc.core.resultset.ShardingResultSet;
Expand Down Expand Up @@ -57,7 +57,7 @@
* @author caohao
*/
@Getter
public final class ShardingPreparedStatement extends AbstractPreparedStatementAdapter {
public final class ShardingPreparedStatement extends AbstractShardingPreparedStatementAdapter {

private final ShardingConnection connection;

Expand Down

0 comments on commit 59450b9

Please sign in to comment.