Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor reflection to function #11415

Merged
merged 1 commit into from Jul 20, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -18,10 +18,7 @@
package org.apache.shardingsphere.driver.jdbc.adapter;

import com.google.common.io.CharStreams;
import java.sql.Array;
import lombok.Getter;
import lombok.SneakyThrows;
import org.apache.shardingsphere.driver.jdbc.adapter.invocation.SetParameterMethodInvocation;
import org.apache.shardingsphere.driver.jdbc.unsupported.AbstractUnsupportedOperationPreparedStatement;
import org.apache.shardingsphere.infra.exception.ShardingSphereException;

Expand All @@ -30,10 +27,12 @@
import java.io.Reader;
import java.math.BigDecimal;
import java.net.URL;
import java.sql.Array;
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;
Expand All @@ -47,7 +46,7 @@
*/
public abstract class AbstractPreparedStatementAdapter extends AbstractUnsupportedOperationPreparedStatement {

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

@Getter
private final List<Object> parameters = new ArrayList<>();
Expand Down Expand Up @@ -275,27 +274,31 @@ private void setParameter(final int parameterIndex, final Object value) {
parameters.set(parameterIndex - 1, value);
}

protected final void replaySetParameter(final PreparedStatement preparedStatement, final List<Object> parameters) {
protected final void replaySetParameter(final PreparedStatement preparedStatement, final List<Object> parameters) throws SQLException {
setParameterMethodInvocations.clear();
addParameters(parameters);
setParameterMethodInvocations.forEach(each -> each.invoke(preparedStatement));
for (PreparedStatementInvocationReplayer each : setParameterMethodInvocations) {
each.replayOn(preparedStatement);
}
}

private void addParameters(final List<Object> parameters) {
int i = 0;
for (Object each : parameters) {
setParameters(new Class[]{int.class, Object.class}, i++ + 1, each);
int index = i++ + 1;
setParameterMethodInvocations.add(preparedStatement -> preparedStatement.setObject(index, each));
}
}

@SneakyThrows(ReflectiveOperationException.class)
private void setParameters(final Class<?>[] argumentTypes, final Object... arguments) {
setParameterMethodInvocations.add(new SetParameterMethodInvocation(PreparedStatement.class.getMethod("setObject", argumentTypes), arguments, arguments[1]));
}

@Override
public final void clearParameters() {
parameters.clear();
setParameterMethodInvocations.clear();
}

@FunctionalInterface
interface PreparedStatementInvocationReplayer {

void replayOn(PreparedStatement preparedStatement) throws SQLException;
}
}

This file was deleted.

Expand Up @@ -376,20 +376,22 @@ private MergedResult mergeQuery(final List<QueryResult> queryResults) throws SQL
return mergeEngine.merge(queryResults, executionContext.getSqlStatementContext());
}

private void cacheStatements(final Collection<ExecutionGroup<JDBCExecutionUnit>> executionGroups) {
private void cacheStatements(final Collection<ExecutionGroup<JDBCExecutionUnit>> executionGroups) throws SQLException {
for (ExecutionGroup<JDBCExecutionUnit> each : executionGroups) {
statements.addAll(each.getInputs().stream().map(jdbcExecutionUnit -> (PreparedStatement) jdbcExecutionUnit.getStorageResource()).collect(Collectors.toList()));
parameterSets.addAll(each.getInputs().stream().map(input -> input.getExecutionUnit().getSqlUnit().getParameters()).collect(Collectors.toList()));
each.getInputs().forEach(eachInput -> {
statements.add((PreparedStatement) eachInput.getStorageResource());
parameterSets.add(eachInput.getExecutionUnit().getSqlUnit().getParameters());
});
}
replay();
}

private void replay() {
private void replay() throws SQLException {
replaySetParameter();
statements.forEach(this::replayMethodsInvocation);
}

private void replaySetParameter() {
private void replaySetParameter() throws SQLException {
for (int i = 0; i < statements.size(); i++) {
replaySetParameter(statements.get(i), parameterSets.get(i));
}
Expand Down

This file was deleted.