Loading sharding-jdbc-core/src/main/java/io/shardingjdbc/core/routing/router/ParsingSQLRouter.java +2 −2 Original line number Diff line number Diff line Loading @@ -36,11 +36,11 @@ import io.shardingjdbc.core.routing.type.RoutingEngine; import io.shardingjdbc.core.routing.type.RoutingResult; import io.shardingjdbc.core.routing.type.TableUnit; import io.shardingjdbc.core.routing.type.all.DatabaseAllRoutingEngine; import io.shardingjdbc.core.routing.type.broadcast.BroadcastRoutingEngine; import io.shardingjdbc.core.routing.type.complex.CartesianDataSource; import io.shardingjdbc.core.routing.type.complex.CartesianRoutingResult; import io.shardingjdbc.core.routing.type.complex.CartesianTableReference; import io.shardingjdbc.core.routing.type.complex.ComplexRoutingEngine; import io.shardingjdbc.core.routing.type.ddl.DDLRoutingEngine; import io.shardingjdbc.core.routing.type.ignore.IgnoreRoutingEngine; import io.shardingjdbc.core.routing.type.show.ShowRoutingEngine; import io.shardingjdbc.core.routing.type.simple.SimpleRoutingEngine; Loading Loading @@ -120,7 +120,7 @@ public final class ParsingSQLRouter implements SQLRouter { if (sqlStatement instanceof IgnoreStatement) { routingEngine = new IgnoreRoutingEngine(); } else if (sqlStatement instanceof DDLStatement) { routingEngine = new DDLRoutingEngine(shardingRule, parameters, (DDLStatement) sqlStatement); routingEngine = new BroadcastRoutingEngine(shardingRule, sqlStatement); } else if (sqlStatement instanceof ShowStatement) { routingEngine = new ShowRoutingEngine(shardingRule, (ShowStatement) sqlStatement); } else if (sqlStatement instanceof DescStatement) { Loading sharding-jdbc-core/src/main/java/io/shardingjdbc/core/routing/type/ddl/DDLRoutingEngine.java→sharding-jdbc-core/src/main/java/io/shardingjdbc/core/routing/type/broadcast/BroadcastRoutingEngine.java +81 −0 Original line number Diff line number Diff line Loading @@ -15,47 +15,67 @@ * </p> */ package io.shardingjdbc.core.routing.type.ddl; package io.shardingjdbc.core.routing.type.broadcast; import com.google.common.base.Preconditions; import io.shardingjdbc.core.parsing.parser.sql.SQLStatement; import io.shardingjdbc.core.parsing.parser.sql.ddl.DDLStatement; import io.shardingjdbc.core.parsing.parser.token.IndexToken; import io.shardingjdbc.core.routing.type.RoutingEngine; import io.shardingjdbc.core.routing.type.RoutingResult; import io.shardingjdbc.core.routing.type.simple.SimpleRoutingEngine; import io.shardingjdbc.core.routing.type.TableUnit; import io.shardingjdbc.core.rule.DataNode; import io.shardingjdbc.core.rule.ShardingRule; import io.shardingjdbc.core.rule.TableRule; import lombok.RequiredArgsConstructor; import java.util.List; import java.util.Collection; import java.util.Collections; import java.util.LinkedList; /** * DDL routing engine. * Broadcast routing engine. * * @author caohao * @author zhangliang */ @RequiredArgsConstructor public final class DDLRoutingEngine implements RoutingEngine { public final class BroadcastRoutingEngine implements RoutingEngine { private final ShardingRule shardingRule; private final List<Object> parameters; private final DDLStatement ddlStatement; private final SQLStatement sqlStatement; @Override public RoutingResult route() { return new SimpleRoutingEngine(shardingRule, parameters, getLogicTableName(), ddlStatement).route(); RoutingResult result = new RoutingResult(); for (String each : getLogicTableNames()) { result.getTableUnits().getTableUnits().addAll(getAllTableUnits(each)); } return result; } private String getLogicTableName() { if (ddlStatement.getTables().isEmpty()) { return shardingRule.getLogicTableName(getIndexToken().getIndexName()); private Collection<String> getLogicTableNames() { if (isOperateIndexWithoutTable()) { return Collections.singletonList(shardingRule.getLogicTableName(getIndexToken().getIndexName())); } return ddlStatement.getTables().getSingleTableName(); return sqlStatement.getTables().getTableNames(); } private boolean isOperateIndexWithoutTable() { return sqlStatement instanceof DDLStatement && sqlStatement.getTables().isEmpty(); } private IndexToken getIndexToken() { Preconditions.checkState(1 == ddlStatement.getSqlTokens().size()); return (IndexToken) ddlStatement.getSqlTokens().get(0); Preconditions.checkState(1 == sqlStatement.getSqlTokens().size()); return (IndexToken) sqlStatement.getSqlTokens().get(0); } private Collection<TableUnit> getAllTableUnits(final String logicTableName) { Collection<TableUnit> result = new LinkedList<>(); TableRule tableRule = shardingRule.getTableRule(logicTableName); for (DataNode each : tableRule.getActualDataNodes()) { result.add(new TableUnit(each.getDataSourceName(), logicTableName, each.getTableName())); } return result; } } Loading
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/routing/router/ParsingSQLRouter.java +2 −2 Original line number Diff line number Diff line Loading @@ -36,11 +36,11 @@ import io.shardingjdbc.core.routing.type.RoutingEngine; import io.shardingjdbc.core.routing.type.RoutingResult; import io.shardingjdbc.core.routing.type.TableUnit; import io.shardingjdbc.core.routing.type.all.DatabaseAllRoutingEngine; import io.shardingjdbc.core.routing.type.broadcast.BroadcastRoutingEngine; import io.shardingjdbc.core.routing.type.complex.CartesianDataSource; import io.shardingjdbc.core.routing.type.complex.CartesianRoutingResult; import io.shardingjdbc.core.routing.type.complex.CartesianTableReference; import io.shardingjdbc.core.routing.type.complex.ComplexRoutingEngine; import io.shardingjdbc.core.routing.type.ddl.DDLRoutingEngine; import io.shardingjdbc.core.routing.type.ignore.IgnoreRoutingEngine; import io.shardingjdbc.core.routing.type.show.ShowRoutingEngine; import io.shardingjdbc.core.routing.type.simple.SimpleRoutingEngine; Loading Loading @@ -120,7 +120,7 @@ public final class ParsingSQLRouter implements SQLRouter { if (sqlStatement instanceof IgnoreStatement) { routingEngine = new IgnoreRoutingEngine(); } else if (sqlStatement instanceof DDLStatement) { routingEngine = new DDLRoutingEngine(shardingRule, parameters, (DDLStatement) sqlStatement); routingEngine = new BroadcastRoutingEngine(shardingRule, sqlStatement); } else if (sqlStatement instanceof ShowStatement) { routingEngine = new ShowRoutingEngine(shardingRule, (ShowStatement) sqlStatement); } else if (sqlStatement instanceof DescStatement) { Loading
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/routing/type/ddl/DDLRoutingEngine.java→sharding-jdbc-core/src/main/java/io/shardingjdbc/core/routing/type/broadcast/BroadcastRoutingEngine.java +81 −0 Original line number Diff line number Diff line Loading @@ -15,47 +15,67 @@ * </p> */ package io.shardingjdbc.core.routing.type.ddl; package io.shardingjdbc.core.routing.type.broadcast; import com.google.common.base.Preconditions; import io.shardingjdbc.core.parsing.parser.sql.SQLStatement; import io.shardingjdbc.core.parsing.parser.sql.ddl.DDLStatement; import io.shardingjdbc.core.parsing.parser.token.IndexToken; import io.shardingjdbc.core.routing.type.RoutingEngine; import io.shardingjdbc.core.routing.type.RoutingResult; import io.shardingjdbc.core.routing.type.simple.SimpleRoutingEngine; import io.shardingjdbc.core.routing.type.TableUnit; import io.shardingjdbc.core.rule.DataNode; import io.shardingjdbc.core.rule.ShardingRule; import io.shardingjdbc.core.rule.TableRule; import lombok.RequiredArgsConstructor; import java.util.List; import java.util.Collection; import java.util.Collections; import java.util.LinkedList; /** * DDL routing engine. * Broadcast routing engine. * * @author caohao * @author zhangliang */ @RequiredArgsConstructor public final class DDLRoutingEngine implements RoutingEngine { public final class BroadcastRoutingEngine implements RoutingEngine { private final ShardingRule shardingRule; private final List<Object> parameters; private final DDLStatement ddlStatement; private final SQLStatement sqlStatement; @Override public RoutingResult route() { return new SimpleRoutingEngine(shardingRule, parameters, getLogicTableName(), ddlStatement).route(); RoutingResult result = new RoutingResult(); for (String each : getLogicTableNames()) { result.getTableUnits().getTableUnits().addAll(getAllTableUnits(each)); } return result; } private String getLogicTableName() { if (ddlStatement.getTables().isEmpty()) { return shardingRule.getLogicTableName(getIndexToken().getIndexName()); private Collection<String> getLogicTableNames() { if (isOperateIndexWithoutTable()) { return Collections.singletonList(shardingRule.getLogicTableName(getIndexToken().getIndexName())); } return ddlStatement.getTables().getSingleTableName(); return sqlStatement.getTables().getTableNames(); } private boolean isOperateIndexWithoutTable() { return sqlStatement instanceof DDLStatement && sqlStatement.getTables().isEmpty(); } private IndexToken getIndexToken() { Preconditions.checkState(1 == ddlStatement.getSqlTokens().size()); return (IndexToken) ddlStatement.getSqlTokens().get(0); Preconditions.checkState(1 == sqlStatement.getSqlTokens().size()); return (IndexToken) sqlStatement.getSqlTokens().get(0); } private Collection<TableUnit> getAllTableUnits(final String logicTableName) { Collection<TableUnit> result = new LinkedList<>(); TableRule tableRule = shardingRule.getTableRule(logicTableName); for (DataNode each : tableRule.getActualDataNodes()) { result.add(new TableUnit(each.getDataSourceName(), logicTableName, each.getTableName())); } return result; } }