Skip to content

Commit

Permalink
Merge pull request #1350 from cherrylzhao/dev-new
Browse files Browse the repository at this point in the history
resolve parameters of proxy prepare statement can't set correctly.
  • Loading branch information
terrymanu authored Oct 17, 2018
2 parents 91ad664 + 2dd0d56 commit d141ba4
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ public List<Connection> getConnections(final ConnectionMode connectionMode, fina

@Override
public StatementExecuteUnit createStatementExecuteUnit(final Connection connection, final RouteUnit routeUnit, final ConnectionMode connectionMode) throws SQLException {
Statement statement = getJdbcExecutorWrapper().createStatement(connection, routeUnit.getSqlUnit().getSql(), isReturnGeneratedKeys);
Statement statement = getJdbcExecutorWrapper().createStatement(connection, routeUnit.getSqlUnit(), isReturnGeneratedKeys);
if (connectionMode.equals(ConnectionMode.MEMORY_STRICTLY)) {
statement.setFetchSize(MEMORY_FETCH_ONE_ROW_A_TIME);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

import io.shardingsphere.core.constant.DatabaseType;
import io.shardingsphere.core.routing.SQLRouteResult;
import io.shardingsphere.core.routing.SQLUnit;

import java.sql.Connection;
import java.sql.SQLException;
Expand All @@ -44,12 +45,12 @@ public interface JDBCExecutorWrapper {
* Create statement.
*
* @param connection connection
* @param sql SQL
* @param sqlUnit sql unit
* @param isReturnGeneratedKeys is return generated keys
* @return statement
* @throws SQLException SQL exception
*/
Statement createStatement(Connection connection, String sql, boolean isReturnGeneratedKeys) throws SQLException;
Statement createStatement(Connection connection, SQLUnit sqlUnit, boolean isReturnGeneratedKeys) throws SQLException;

/**
* Execute SQL.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

/**
Expand Down Expand Up @@ -72,8 +73,9 @@ private SQLRouteResult doShardingRoute(final String sql, final DatabaseType data
}

@Override
public Statement createStatement(final Connection connection, final String sql, final boolean isReturnGeneratedKeys) throws SQLException {
PreparedStatement result = isReturnGeneratedKeys ? connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS) : connection.prepareStatement(sql);
public Statement createStatement(final Connection connection, final SQLUnit sqlUnit, final boolean isReturnGeneratedKeys) throws SQLException {
PreparedStatement result = isReturnGeneratedKeys ? connection.prepareStatement(sqlUnit.getSql(), Statement.RETURN_GENERATED_KEYS) : connection.prepareStatement(sqlUnit.getSql());
List<Object> parameters = getRoutedParameters(sqlUnit);
for (int i = 0; i < parameters.size(); i++) {
result.setObject(i + 1, parameters.get(i));
}
Expand All @@ -84,4 +86,12 @@ public Statement createStatement(final Connection connection, final String sql,
public boolean executeSQL(final Statement statement, final String sql, final boolean isReturnGeneratedKeys) throws SQLException {
return ((PreparedStatement) statement).execute();
}

private List<Object> getRoutedParameters(final SQLUnit sqlUnit) {
List<Object> result = new LinkedList<>();
for (List<Object> each : sqlUnit.getParameterSets()) {
result.addAll(each);
}
return result;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ private SQLRouteResult doShardingRoute(final String sql, final DatabaseType data
}

@Override
public Statement createStatement(final Connection connection, final String sql, final boolean isReturnGeneratedKeys) throws SQLException {
public Statement createStatement(final Connection connection, final SQLUnit sqlUnit, final boolean isReturnGeneratedKeys) throws SQLException {
return connection.createStatement();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
# inline:
# shardingColumn: order_id
# algorithmExpression: t_order_item_${order_id % 2}
# keyGeneratorColumnName: order_item_id
# bindingTables:
# - t_order,t_order_item
# defaultDatabaseStrategy:
Expand Down

0 comments on commit d141ba4

Please sign in to comment.