Skip to content

Commit

Permalink
for #1205, SQLExecutionUnit => RouteUnit
Browse files Browse the repository at this point in the history
  • Loading branch information
terrymanu committed Sep 1, 2018
1 parent 1636e7b commit 8b21eae
Show file tree
Hide file tree
Showing 35 changed files with 145 additions and 146 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

package io.shardingsphere.core.event.executor.sql;

import io.shardingsphere.core.routing.SQLExecutionUnit;
import io.shardingsphere.core.routing.RouteUnit;

import java.util.List;

Expand All @@ -29,7 +29,7 @@
*/
public final class DMLExecutionEvent extends SQLExecutionEvent {

public DMLExecutionEvent(final SQLExecutionUnit sqlExecutionUnit, final List<Object> parameters) {
super(sqlExecutionUnit, parameters);
public DMLExecutionEvent(final RouteUnit routeUnit, final List<Object> parameters) {
super(routeUnit, parameters);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

package io.shardingsphere.core.event.executor.sql;

import io.shardingsphere.core.routing.SQLExecutionUnit;
import io.shardingsphere.core.routing.RouteUnit;

import java.util.List;

Expand All @@ -29,7 +29,7 @@
*/
public final class DQLExecutionEvent extends SQLExecutionEvent {

public DQLExecutionEvent(final SQLExecutionUnit sqlExecutionUnit, final List<Object> parameters) {
super(sqlExecutionUnit, parameters);
public DQLExecutionEvent(final RouteUnit routeUnit, final List<Object> parameters) {
super(routeUnit, parameters);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
package io.shardingsphere.core.event.executor.sql;

import io.shardingsphere.core.event.ShardingEvent;
import io.shardingsphere.core.routing.SQLExecutionUnit;
import io.shardingsphere.core.routing.RouteUnit;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

Expand All @@ -34,7 +34,7 @@
@Getter
public class SQLExecutionEvent extends ShardingEvent {

private final SQLExecutionUnit sqlExecutionUnit;
private final RouteUnit routeUnit;

private final List<Object> parameters;
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,11 @@ public final class SQLExecutionEventFactory {
*/
public static SQLExecutionEvent createEvent(final SQLType sqlType, final StatementExecuteUnit executeUnit, final List<Object> parameters) {
if (SQLType.DQL == sqlType) {
return new DQLExecutionEvent(executeUnit.getSqlExecutionUnit(), parameters);
return new DQLExecutionEvent(executeUnit.getRouteUnit(), parameters);
}
if (SQLType.DML == sqlType) {
return new DMLExecutionEvent(executeUnit.getSqlExecutionUnit(), parameters);
return new DMLExecutionEvent(executeUnit.getRouteUnit(), parameters);
}
return new SQLExecutionEvent(executeUnit.getSqlExecutionUnit(), parameters);
return new SQLExecutionEvent(executeUnit.getRouteUnit(), parameters);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

package io.shardingsphere.core.executor.sql;

import io.shardingsphere.core.routing.SQLExecutionUnit;
import io.shardingsphere.core.routing.RouteUnit;

import java.sql.Statement;

Expand All @@ -29,11 +29,11 @@
public interface StatementExecuteUnit {

/**
* Get SQL execute unit.
* Get route unit.
*
* @return SQL execute unit
* @return route unit
*/
SQLExecutionUnit getSqlExecutionUnit();
RouteUnit getRouteUnit();

/**
* Get statement.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ private T execute0(final StatementExecuteUnit executeUnit) throws SQLException {
ExecutorExceptionHandler.setExceptionThrown(isExceptionThrown);
ExecutorDataMap.setDataMap(dataMap);
List<SQLExecutionEvent> events = new LinkedList<>();
for (List<Object> each : executeUnit.getSqlExecutionUnit().getSqlUnit().getParameterSets()) {
for (List<Object> each : executeUnit.getRouteUnit().getSqlUnit().getParameterSets()) {
SQLExecutionEvent event = SQLExecutionEventFactory.createEvent(sqlType, executeUnit, each);
events.add(event);
shardingEventBus.post(event);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
package io.shardingsphere.core.executor.sql.prepare;

import io.shardingsphere.core.executor.sql.StatementExecuteUnit;
import io.shardingsphere.core.routing.SQLExecutionUnit;
import io.shardingsphere.core.routing.RouteUnit;

import java.sql.Connection;
import java.sql.SQLException;
Expand All @@ -43,9 +43,9 @@ public interface SQLExecutePrepareCallback {
* Create statement execute unit.
*
* @param connection connection
* @param sqlExecutionUnit SQL execution unit
* @param routeUnit route unit
* @return statement execute unit
* @throws SQLException SQL exception
*/
StatementExecuteUnit createStatementExecuteUnit(Connection connection, SQLExecutionUnit sqlExecutionUnit) throws SQLException;
StatementExecuteUnit createStatementExecuteUnit(Connection connection, RouteUnit routeUnit) throws SQLException;
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
import com.google.common.collect.Lists;
import io.shardingsphere.core.executor.ShardingExecuteGroup;
import io.shardingsphere.core.executor.sql.StatementExecuteUnit;
import io.shardingsphere.core.routing.SQLExecutionUnit;
import io.shardingsphere.core.routing.RouteUnit;
import io.shardingsphere.core.routing.SQLUnit;
import lombok.RequiredArgsConstructor;

Expand All @@ -47,28 +47,27 @@ public final class SQLExecutePrepareTemplate {
/**
* Get statement execute unit groups.
*
* @param sqlExecutionUnits units execution SQL units
* @param routeUnits route units
* @param callback SQL execute prepare callback
* @return statement execute unit groups
* @throws SQLException SQL exception
*/
public Collection<ShardingExecuteGroup<StatementExecuteUnit>> getStatementExecuteUnitGroups(
final Collection<SQLExecutionUnit> sqlExecutionUnits, final SQLExecutePrepareCallback callback) throws SQLException {
Map<String, List<SQLUnit>> sqlUnitGroups = getSQLUnitGroups(sqlExecutionUnits);
public Collection<ShardingExecuteGroup<StatementExecuteUnit>> getStatementExecuteUnitGroups(final Collection<RouteUnit> routeUnits, final SQLExecutePrepareCallback callback) throws SQLException {
Map<String, List<SQLUnit>> sqlUnitGroups = getSQLUnitGroups(routeUnits);
Collection<ShardingExecuteGroup<StatementExecuteUnit>> result = new LinkedList<>();
for (Entry<String, List<SQLUnit>> entry : sqlUnitGroups.entrySet()) {
result.addAll(partitionSQLUnits(entry.getKey(), entry.getValue(), callback));
}
return result;
}

private Map<String, List<SQLUnit>> getSQLUnitGroups(final Collection<SQLExecutionUnit> sqlExecutionUnits) {
Map<String, List<SQLUnit>> result = new LinkedHashMap<>(sqlExecutionUnits.size(), 1);
for (SQLExecutionUnit each : sqlExecutionUnits) {
if (!result.containsKey(each.getDataSource())) {
result.put(each.getDataSource(), new LinkedList<SQLUnit>());
private Map<String, List<SQLUnit>> getSQLUnitGroups(final Collection<RouteUnit> routeUnits) {
Map<String, List<SQLUnit>> result = new LinkedHashMap<>(routeUnits.size(), 1);
for (RouteUnit each : routeUnits) {
if (!result.containsKey(each.getDataSourceName())) {
result.put(each.getDataSourceName(), new LinkedList<SQLUnit>());
}
result.get(each.getDataSource()).add(each.getSqlUnit());
result.get(each.getDataSourceName()).add(each.getSqlUnit());
}
return result;
}
Expand All @@ -88,7 +87,7 @@ private ShardingExecuteGroup<StatementExecuteUnit> getStatementExecuteUnitGroup(
final Connection connection, final String dataSourceName, final List<SQLUnit> sqlUnitGroup, final SQLExecutePrepareCallback callback) throws SQLException {
List<StatementExecuteUnit> result = new LinkedList<>();
for (SQLUnit each : sqlUnitGroup) {
result.add(callback.createStatementExecuteUnit(connection, new SQLExecutionUnit(dataSourceName, each)));
result.add(callback.createStatementExecuteUnit(connection, new RouteUnit(dataSourceName, each)));
}
return new ShardingExecuteGroup<>(result);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import lombok.ToString;

/**
* SQL execution unit.
* Route unit.
*
* @author gaohongtao
* @author maxiaoguang
Expand All @@ -32,9 +32,9 @@
@Getter
@EqualsAndHashCode
@ToString
public final class SQLExecutionUnit {
public final class RouteUnit {

private final String dataSource;
private final String dataSourceName;

private final SQLUnit sqlUnit;
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public final class SQLRouteResult {

private final GeneratedKey generatedKey;

private final Set<SQLExecutionUnit> executionUnits = new LinkedHashSet<>();
private final Set<RouteUnit> executionUnits = new LinkedHashSet<>();

public SQLRouteResult(final SQLStatement sqlStatement) {
this(sqlStatement, null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

import io.shardingsphere.core.constant.SQLType;
import io.shardingsphere.core.hint.HintManagerHolder;
import io.shardingsphere.core.routing.SQLExecutionUnit;
import io.shardingsphere.core.routing.RouteUnit;
import io.shardingsphere.core.routing.SQLRouteResult;
import io.shardingsphere.core.rule.MasterSlaveRule;
import lombok.RequiredArgsConstructor;
Expand Down Expand Up @@ -52,18 +52,18 @@ public SQLRouteResult route(final SQLRouteResult sqlRouteResult) {
}

private void route(final MasterSlaveRule masterSlaveRule, final SQLRouteResult sqlRouteResult) {
Collection<SQLExecutionUnit> toBeRemoved = new LinkedList<>();
Collection<SQLExecutionUnit> toBeAdded = new LinkedList<>();
for (SQLExecutionUnit each : sqlRouteResult.getExecutionUnits()) {
if (!masterSlaveRule.getName().equalsIgnoreCase(each.getDataSource())) {
Collection<RouteUnit> toBeRemoved = new LinkedList<>();
Collection<RouteUnit> toBeAdded = new LinkedList<>();
for (RouteUnit each : sqlRouteResult.getExecutionUnits()) {
if (!masterSlaveRule.getName().equalsIgnoreCase(each.getDataSourceName())) {
continue;
}
toBeRemoved.add(each);
if (isMasterRoute(sqlRouteResult.getSqlStatement().getType())) {
MasterVisitedManager.setMasterVisited();
toBeAdded.add(new SQLExecutionUnit(masterSlaveRule.getMasterDataSourceName(), each.getSqlUnit()));
toBeAdded.add(new RouteUnit(masterSlaveRule.getMasterDataSourceName(), each.getSqlUnit()));
} else {
toBeAdded.add(new SQLExecutionUnit(masterSlaveRule.getLoadBalanceAlgorithm().getDataSource(
toBeAdded.add(new RouteUnit(masterSlaveRule.getLoadBalanceAlgorithm().getDataSource(
masterSlaveRule.getName(), masterSlaveRule.getMasterDataSourceName(), new ArrayList<>(masterSlaveRule.getSlaveDataSourceNames())), each.getSqlUnit()));
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

import io.shardingsphere.core.parsing.SQLJudgeEngine;
import io.shardingsphere.core.parsing.parser.sql.SQLStatement;
import io.shardingsphere.core.routing.SQLExecutionUnit;
import io.shardingsphere.core.routing.RouteUnit;
import io.shardingsphere.core.routing.SQLRouteResult;
import io.shardingsphere.core.routing.SQLUnit;
import io.shardingsphere.core.routing.strategy.hint.HintShardingStrategy;
Expand Down Expand Up @@ -59,7 +59,7 @@ public SQLRouteResult route(final String logicSQL, final List<Object> parameters
RoutingResult routingResult = new DatabaseHintRoutingEngine(
shardingRule.getShardingDataSourceNames().getDataSourceNames(), (HintShardingStrategy) shardingRule.getDefaultDatabaseShardingStrategy()).route();
for (TableUnit each : routingResult.getTableUnits().getTableUnits()) {
result.getExecutionUnits().add(new SQLExecutionUnit(each.getDataSourceName(), new SQLUnit(logicSQL, new ArrayList<>(Collections.singleton(parameters)))));
result.getExecutionUnits().add(new RouteUnit(each.getDataSourceName(), new SQLUnit(logicSQL, new ArrayList<>(Collections.singleton(parameters)))));
}
if (showSQL) {
SQLLogger.logSQL(logicSQL, sqlStatement, result.getExecutionUnits());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
import io.shardingsphere.core.metadata.datasource.ShardingDataSourceMetaData;
import io.shardingsphere.core.rewrite.SQLBuilder;
import io.shardingsphere.core.rewrite.SQLRewriteEngine;
import io.shardingsphere.core.routing.SQLExecutionUnit;
import io.shardingsphere.core.routing.RouteUnit;
import io.shardingsphere.core.routing.SQLRouteResult;
import io.shardingsphere.core.routing.type.RoutingEngine;
import io.shardingsphere.core.routing.type.RoutingResult;
Expand Down Expand Up @@ -104,7 +104,7 @@ public SQLRouteResult route(final String logicSQL, final List<Object> parameters
}
SQLBuilder sqlBuilder = rewriteEngine.rewrite(!isSingleRouting);
for (TableUnit each : routingResult.getTableUnits().getTableUnits()) {
result.getExecutionUnits().add(new SQLExecutionUnit(each.getDataSourceName(), rewriteEngine.generateSQL(each, sqlBuilder, shardingDataSourceMetaData)));
result.getExecutionUnits().add(new RouteUnit(each.getDataSourceName(), rewriteEngine.generateSQL(each, sqlBuilder, shardingDataSourceMetaData)));
}
if (showSQL) {
SQLLogger.logSQL(logicSQL, sqlStatement, result.getExecutionUnits());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

import com.google.common.base.Joiner;
import io.shardingsphere.core.parsing.parser.sql.SQLStatement;
import io.shardingsphere.core.routing.SQLExecutionUnit;
import io.shardingsphere.core.routing.RouteUnit;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
Expand All @@ -41,17 +41,17 @@ public final class SQLLogger {
*
* @param logicSQL logic SQL
* @param sqlStatement SQL statement
* @param sqlExecutionUnits SQL execution units
* @param routeUnits route units
*/
public static void logSQL(final String logicSQL, final SQLStatement sqlStatement, final Collection<SQLExecutionUnit> sqlExecutionUnits) {
public static void logSQL(final String logicSQL, final SQLStatement sqlStatement, final Collection<RouteUnit> routeUnits) {
log("Rule Type: sharding");
log("Logic SQL: {}", logicSQL);
log("SQLStatement: {}", sqlStatement);
for (SQLExecutionUnit each : sqlExecutionUnits) {
for (RouteUnit each : routeUnits) {
if (each.getSqlUnit().getParameterSets().get(0).isEmpty()) {
log("Actual SQL: {} ::: {}", each.getDataSource(), each.getSqlUnit().getSql());
log("Actual SQL: {} ::: {}", each.getDataSourceName(), each.getSqlUnit().getSql());
} else {
log("Actual SQL: {} ::: {} ::: {}", each.getDataSource(), each.getSqlUnit().getSql(), each.getSqlUnit().getParameterSets());
log("Actual SQL: {} ::: {} ::: {}", each.getDataSourceName(), each.getSqlUnit().getSql(), each.getSqlUnit().getParameterSets());
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,19 +74,19 @@ public void assertDatabaseAllRoutingSQL() {
String originSql = "select * from tesT";
SQLRouteResult actual = new StatementRoutingEngine(shardingRule, null, DatabaseType.MySQL, false, null).route(originSql);
assertThat(actual.getExecutionUnits().size(), is(1));
Set<String> actualDataSources = new HashSet<>(Collections2.transform(actual.getExecutionUnits(), new Function<SQLExecutionUnit, String>() {
Set<String> actualDataSources = new HashSet<>(Collections2.transform(actual.getExecutionUnits(), new Function<RouteUnit, String>() {

@Override
public String apply(final SQLExecutionUnit input) {
return input.getDataSource();
public String apply(final RouteUnit input) {
return input.getDataSourceName();
}
}));
assertThat(actualDataSources.size(), is(1));
assertThat(actualDataSources, hasItems("ds_0"));
Collection<String> actualSQLs = Collections2.transform(actual.getExecutionUnits(), new Function<SQLExecutionUnit, String>() {
Collection<String> actualSQLs = Collections2.transform(actual.getExecutionUnits(), new Function<RouteUnit, String>() {

@Override
public String apply(final SQLExecutionUnit input) {
public String apply(final RouteUnit input) {
return input.getSqlUnit().getSql();
}
});
Expand All @@ -96,19 +96,19 @@ public String apply(final SQLExecutionUnit input) {
private void assertTarget(final String originSql, final String targetDataSource) {
SQLRouteResult actual = new StatementRoutingEngine(shardingRule, null, DatabaseType.MySQL, false, null).route(originSql);
assertThat(actual.getExecutionUnits().size(), is(1));
Set<String> actualDataSources = new HashSet<>(Collections2.transform(actual.getExecutionUnits(), new Function<SQLExecutionUnit, String>() {
Set<String> actualDataSources = new HashSet<>(Collections2.transform(actual.getExecutionUnits(), new Function<RouteUnit, String>() {

@Override
public String apply(final SQLExecutionUnit input) {
return input.getDataSource();
public String apply(final RouteUnit input) {
return input.getDataSourceName();
}
}));
assertThat(actualDataSources.size(), is(1));
assertThat(actualDataSources, hasItems(targetDataSource));
Collection<String> actualSQLs = Collections2.transform(actual.getExecutionUnits(), new Function<SQLExecutionUnit, String>() {
Collection<String> actualSQLs = Collections2.transform(actual.getExecutionUnits(), new Function<RouteUnit, String>() {

@Override
public String apply(final SQLExecutionUnit input) {
public String apply(final RouteUnit input) {
return input.getSqlUnit().getSql();
}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public void listen(final DMLExecutionEvent event) {
case BEFORE_EXECUTE:
//TODO for batch SQL need split to 2-level records
transactionLogStorage.add(new TransactionLog(event.getId(), bedSoftTransaction.getTransactionId(), bedSoftTransaction.getTransactionType(),
event.getSqlExecutionUnit().getDataSource(), event.getSqlExecutionUnit().getSqlUnit().getSql(), event.getParameters(), System.currentTimeMillis(), 0));
event.getRouteUnit().getDataSourceName(), event.getRouteUnit().getSqlUnit().getSql(), event.getParameters(), System.currentTimeMillis(), 0));
return;
case EXECUTE_SUCCESS:
transactionLogStorage.remove(event.getId());
Expand All @@ -76,13 +76,13 @@ public void listen(final DMLExecutionEvent event) {
Connection conn = null;
PreparedStatement preparedStatement = null;
try {
conn = bedSoftTransaction.getConnection().getConnection(event.getSqlExecutionUnit().getDataSource());
conn = bedSoftTransaction.getConnection().getConnection(event.getRouteUnit().getDataSourceName());
if (!isValidConnection(conn)) {
bedSoftTransaction.getConnection().release(conn);
conn = bedSoftTransaction.getConnection().getConnection(event.getSqlExecutionUnit().getDataSource());
conn = bedSoftTransaction.getConnection().getConnection(event.getRouteUnit().getDataSourceName());
isNewConnection = true;
}
preparedStatement = conn.prepareStatement(event.getSqlExecutionUnit().getSqlUnit().getSql());
preparedStatement = conn.prepareStatement(event.getRouteUnit().getSqlUnit().getSql());
//TODO for batch event need split to 2-level records
for (int parameterIndex = 0; parameterIndex < event.getParameters().size(); parameterIndex++) {
preparedStatement.setObject(parameterIndex + 1, event.getParameters().get(parameterIndex));
Expand Down
Loading

0 comments on commit 8b21eae

Please sign in to comment.