Loading sharding-core/src/main/java/io/shardingsphere/core/metadata/ShardingMetaData.java +3 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import io.shardingsphere.core.metadata.table.executor.TableMetaDataConnectionMan import io.shardingsphere.core.metadata.table.executor.TableMetaDataInitializer; import io.shardingsphere.core.rule.ShardingRule; import lombok.Getter; import lombok.RequiredArgsConstructor; import java.util.Map; Loading @@ -33,6 +34,8 @@ import java.util.Map; * * @author zhangliang */ // TODO RequiredArgsConstructor for test only, should remove later @RequiredArgsConstructor @Getter public final class ShardingMetaData { Loading sharding-core/src/main/java/io/shardingsphere/core/routing/PreparedStatementRoutingEngine.java +3 −5 Original line number Diff line number Diff line Loading @@ -18,9 +18,8 @@ package io.shardingsphere.core.routing; import io.shardingsphere.core.constant.DatabaseType; import io.shardingsphere.core.metadata.table.ShardingTableMetaData; import io.shardingsphere.core.metadata.ShardingMetaData; import io.shardingsphere.core.parsing.parser.sql.SQLStatement; import io.shardingsphere.core.metadata.datasource.ShardingDataSourceMetaData; import io.shardingsphere.core.routing.router.masterslave.ShardingMasterSlaveRouter; import io.shardingsphere.core.routing.router.sharding.ShardingRouter; import io.shardingsphere.core.routing.router.sharding.ShardingRouterFactory; Loading @@ -44,10 +43,9 @@ public final class PreparedStatementRoutingEngine { private SQLStatement sqlStatement; public PreparedStatementRoutingEngine(final String logicSQL, final ShardingRule shardingRule, final ShardingTableMetaData shardingTableMetaData, final DatabaseType databaseType, final boolean showSQL, final ShardingDataSourceMetaData shardingDataSourceMetaData) { public PreparedStatementRoutingEngine(final String logicSQL, final ShardingRule shardingRule, final ShardingMetaData shardingMetaData, final DatabaseType databaseType, final boolean showSQL) { this.logicSQL = logicSQL; shardingRouter = ShardingRouterFactory.createSQLRouter(shardingRule, shardingTableMetaData, databaseType, showSQL, shardingDataSourceMetaData); shardingRouter = ShardingRouterFactory.newInstance(shardingRule, shardingMetaData, databaseType, showSQL); masterSlaveRouter = new ShardingMasterSlaveRouter(shardingRule.getMasterSlaveRules()); } Loading sharding-core/src/main/java/io/shardingsphere/core/routing/StatementRoutingEngine.java +3 −5 Original line number Diff line number Diff line Loading @@ -18,8 +18,7 @@ package io.shardingsphere.core.routing; import io.shardingsphere.core.constant.DatabaseType; import io.shardingsphere.core.metadata.datasource.ShardingDataSourceMetaData; import io.shardingsphere.core.metadata.table.ShardingTableMetaData; import io.shardingsphere.core.metadata.ShardingMetaData; import io.shardingsphere.core.parsing.parser.sql.SQLStatement; import io.shardingsphere.core.routing.router.masterslave.ShardingMasterSlaveRouter; import io.shardingsphere.core.routing.router.sharding.ShardingRouter; Loading @@ -40,9 +39,8 @@ public final class StatementRoutingEngine { private final ShardingMasterSlaveRouter masterSlaveRouter; public StatementRoutingEngine(final ShardingRule shardingRule, final ShardingTableMetaData shardingTableMetaData, final DatabaseType databaseType, final boolean showSQL, final ShardingDataSourceMetaData shardingDataSourceMetaData) { shardingRouter = ShardingRouterFactory.createSQLRouter(shardingRule, shardingTableMetaData, databaseType, showSQL, shardingDataSourceMetaData); public StatementRoutingEngine(final ShardingRule shardingRule, final ShardingMetaData shardingMetaData, final DatabaseType databaseType, final boolean showSQL) { shardingRouter = ShardingRouterFactory.newInstance(shardingRule, shardingMetaData, databaseType, showSQL); masterSlaveRouter = new ShardingMasterSlaveRouter(shardingRule.getMasterSlaveRules()); } Loading sharding-core/src/main/java/io/shardingsphere/core/routing/router/sharding/ParsingSQLRouter.java +5 −8 Original line number Diff line number Diff line Loading @@ -23,8 +23,7 @@ import io.shardingsphere.api.algorithm.sharding.ListShardingValue; import io.shardingsphere.api.algorithm.sharding.ShardingValue; import io.shardingsphere.core.constant.DatabaseType; import io.shardingsphere.core.constant.ShardingOperator; import io.shardingsphere.core.metadata.datasource.ShardingDataSourceMetaData; import io.shardingsphere.core.metadata.table.ShardingTableMetaData; import io.shardingsphere.core.metadata.ShardingMetaData; import io.shardingsphere.core.optimizer.OptimizeEngineFactory; import io.shardingsphere.core.optimizer.condition.ShardingCondition; import io.shardingsphere.core.optimizer.condition.ShardingConditions; Loading Loading @@ -66,7 +65,7 @@ public final class ParsingSQLRouter implements ShardingRouter { private final ShardingRule shardingRule; private final ShardingTableMetaData shardingTableMetaData; private final ShardingMetaData shardingMetaData; private final DatabaseType databaseType; Loading @@ -74,15 +73,13 @@ public final class ParsingSQLRouter implements ShardingRouter { private final List<Number> generatedKeys = new LinkedList<>(); private final ShardingDataSourceMetaData shardingDataSourceMetaData; private final ParsingHook parsingHook = new SPIParsingHook(); @Override public SQLStatement parse(final String logicSQL, final boolean useCache) { parsingHook.start(logicSQL); try { SQLStatement result = new SQLParsingEngine(databaseType, logicSQL, shardingRule, shardingTableMetaData).parse(useCache); SQLStatement result = new SQLParsingEngine(databaseType, logicSQL, shardingRule, shardingMetaData.getTable()).parse(useCache); parsingHook.finishSuccess(); return result; } catch (final Exception ex) { Loading @@ -102,14 +99,14 @@ public final class ParsingSQLRouter implements ShardingRouter { if (sqlStatement instanceof SelectStatement && !sqlStatement.getTables().isEmpty() && !((SelectStatement) sqlStatement).getSubQueryStatements().isEmpty()) { mergeShardingValueForSubQuery(sqlStatement.getConditions(), shardingConditions); } RoutingResult routingResult = RoutingEngineFactory.newInstance(shardingRule, shardingDataSourceMetaData, sqlStatement, shardingConditions).route(); RoutingResult routingResult = RoutingEngineFactory.newInstance(shardingRule, shardingMetaData.getDataSource(), sqlStatement, shardingConditions).route(); SQLRewriteEngine rewriteEngine = new SQLRewriteEngine(shardingRule, logicSQL, databaseType, sqlStatement, shardingConditions, parameters); if (sqlStatement instanceof SelectStatement && null != ((SelectStatement) sqlStatement).getLimit()) { processLimit(parameters, (SelectStatement) sqlStatement); } SQLBuilder sqlBuilder = rewriteEngine.rewrite(!routingResult.isSingleRouting()); for (TableUnit each : routingResult.getTableUnits().getTableUnits()) { result.getRouteUnits().add(new RouteUnit(each.getDataSourceName(), rewriteEngine.generateSQL(each, sqlBuilder, shardingDataSourceMetaData))); result.getRouteUnits().add(new RouteUnit(each.getDataSourceName(), rewriteEngine.generateSQL(each, sqlBuilder, shardingMetaData.getDataSource()))); } if (showSQL) { SQLLogger.logSQL(logicSQL, sqlStatement, result.getRouteUnits()); Loading sharding-core/src/main/java/io/shardingsphere/core/routing/router/sharding/ShardingRouterFactory.java +5 −9 Original line number Diff line number Diff line Loading @@ -19,8 +19,7 @@ package io.shardingsphere.core.routing.router.sharding; import io.shardingsphere.core.constant.DatabaseType; import io.shardingsphere.core.hint.HintManagerHolder; import io.shardingsphere.core.metadata.datasource.ShardingDataSourceMetaData; import io.shardingsphere.core.metadata.table.ShardingTableMetaData; import io.shardingsphere.core.metadata.ShardingMetaData; import io.shardingsphere.core.rule.ShardingRule; import lombok.AccessLevel; import lombok.NoArgsConstructor; Loading @@ -35,18 +34,15 @@ import lombok.NoArgsConstructor; public final class ShardingRouterFactory { /** * Create sharding router. * Create new instance of sharding router. * * @param shardingRule sharding rule * @param shardingTableMetaData sharding table meta data * @param shardingMetaData sharding meta data * @param databaseType database type * @param showSQL show SQL or not * @param shardingDataSourceMetaData sharding data source meta data * @return sharding router instance */ public static ShardingRouter createSQLRouter(final ShardingRule shardingRule, final ShardingTableMetaData shardingTableMetaData, final DatabaseType databaseType, final boolean showSQL, final ShardingDataSourceMetaData shardingDataSourceMetaData) { return HintManagerHolder.isDatabaseShardingOnly() ? new DatabaseHintSQLRouter(shardingRule, showSQL) : new ParsingSQLRouter(shardingRule, shardingTableMetaData, databaseType, showSQL, shardingDataSourceMetaData); public static ShardingRouter newInstance(final ShardingRule shardingRule, final ShardingMetaData shardingMetaData, final DatabaseType databaseType, final boolean showSQL) { return HintManagerHolder.isDatabaseShardingOnly() ? new DatabaseHintSQLRouter(shardingRule, showSQL) : new ParsingSQLRouter(shardingRule, shardingMetaData, databaseType, showSQL); } } Loading
sharding-core/src/main/java/io/shardingsphere/core/metadata/ShardingMetaData.java +3 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import io.shardingsphere.core.metadata.table.executor.TableMetaDataConnectionMan import io.shardingsphere.core.metadata.table.executor.TableMetaDataInitializer; import io.shardingsphere.core.rule.ShardingRule; import lombok.Getter; import lombok.RequiredArgsConstructor; import java.util.Map; Loading @@ -33,6 +34,8 @@ import java.util.Map; * * @author zhangliang */ // TODO RequiredArgsConstructor for test only, should remove later @RequiredArgsConstructor @Getter public final class ShardingMetaData { Loading
sharding-core/src/main/java/io/shardingsphere/core/routing/PreparedStatementRoutingEngine.java +3 −5 Original line number Diff line number Diff line Loading @@ -18,9 +18,8 @@ package io.shardingsphere.core.routing; import io.shardingsphere.core.constant.DatabaseType; import io.shardingsphere.core.metadata.table.ShardingTableMetaData; import io.shardingsphere.core.metadata.ShardingMetaData; import io.shardingsphere.core.parsing.parser.sql.SQLStatement; import io.shardingsphere.core.metadata.datasource.ShardingDataSourceMetaData; import io.shardingsphere.core.routing.router.masterslave.ShardingMasterSlaveRouter; import io.shardingsphere.core.routing.router.sharding.ShardingRouter; import io.shardingsphere.core.routing.router.sharding.ShardingRouterFactory; Loading @@ -44,10 +43,9 @@ public final class PreparedStatementRoutingEngine { private SQLStatement sqlStatement; public PreparedStatementRoutingEngine(final String logicSQL, final ShardingRule shardingRule, final ShardingTableMetaData shardingTableMetaData, final DatabaseType databaseType, final boolean showSQL, final ShardingDataSourceMetaData shardingDataSourceMetaData) { public PreparedStatementRoutingEngine(final String logicSQL, final ShardingRule shardingRule, final ShardingMetaData shardingMetaData, final DatabaseType databaseType, final boolean showSQL) { this.logicSQL = logicSQL; shardingRouter = ShardingRouterFactory.createSQLRouter(shardingRule, shardingTableMetaData, databaseType, showSQL, shardingDataSourceMetaData); shardingRouter = ShardingRouterFactory.newInstance(shardingRule, shardingMetaData, databaseType, showSQL); masterSlaveRouter = new ShardingMasterSlaveRouter(shardingRule.getMasterSlaveRules()); } Loading
sharding-core/src/main/java/io/shardingsphere/core/routing/StatementRoutingEngine.java +3 −5 Original line number Diff line number Diff line Loading @@ -18,8 +18,7 @@ package io.shardingsphere.core.routing; import io.shardingsphere.core.constant.DatabaseType; import io.shardingsphere.core.metadata.datasource.ShardingDataSourceMetaData; import io.shardingsphere.core.metadata.table.ShardingTableMetaData; import io.shardingsphere.core.metadata.ShardingMetaData; import io.shardingsphere.core.parsing.parser.sql.SQLStatement; import io.shardingsphere.core.routing.router.masterslave.ShardingMasterSlaveRouter; import io.shardingsphere.core.routing.router.sharding.ShardingRouter; Loading @@ -40,9 +39,8 @@ public final class StatementRoutingEngine { private final ShardingMasterSlaveRouter masterSlaveRouter; public StatementRoutingEngine(final ShardingRule shardingRule, final ShardingTableMetaData shardingTableMetaData, final DatabaseType databaseType, final boolean showSQL, final ShardingDataSourceMetaData shardingDataSourceMetaData) { shardingRouter = ShardingRouterFactory.createSQLRouter(shardingRule, shardingTableMetaData, databaseType, showSQL, shardingDataSourceMetaData); public StatementRoutingEngine(final ShardingRule shardingRule, final ShardingMetaData shardingMetaData, final DatabaseType databaseType, final boolean showSQL) { shardingRouter = ShardingRouterFactory.newInstance(shardingRule, shardingMetaData, databaseType, showSQL); masterSlaveRouter = new ShardingMasterSlaveRouter(shardingRule.getMasterSlaveRules()); } Loading
sharding-core/src/main/java/io/shardingsphere/core/routing/router/sharding/ParsingSQLRouter.java +5 −8 Original line number Diff line number Diff line Loading @@ -23,8 +23,7 @@ import io.shardingsphere.api.algorithm.sharding.ListShardingValue; import io.shardingsphere.api.algorithm.sharding.ShardingValue; import io.shardingsphere.core.constant.DatabaseType; import io.shardingsphere.core.constant.ShardingOperator; import io.shardingsphere.core.metadata.datasource.ShardingDataSourceMetaData; import io.shardingsphere.core.metadata.table.ShardingTableMetaData; import io.shardingsphere.core.metadata.ShardingMetaData; import io.shardingsphere.core.optimizer.OptimizeEngineFactory; import io.shardingsphere.core.optimizer.condition.ShardingCondition; import io.shardingsphere.core.optimizer.condition.ShardingConditions; Loading Loading @@ -66,7 +65,7 @@ public final class ParsingSQLRouter implements ShardingRouter { private final ShardingRule shardingRule; private final ShardingTableMetaData shardingTableMetaData; private final ShardingMetaData shardingMetaData; private final DatabaseType databaseType; Loading @@ -74,15 +73,13 @@ public final class ParsingSQLRouter implements ShardingRouter { private final List<Number> generatedKeys = new LinkedList<>(); private final ShardingDataSourceMetaData shardingDataSourceMetaData; private final ParsingHook parsingHook = new SPIParsingHook(); @Override public SQLStatement parse(final String logicSQL, final boolean useCache) { parsingHook.start(logicSQL); try { SQLStatement result = new SQLParsingEngine(databaseType, logicSQL, shardingRule, shardingTableMetaData).parse(useCache); SQLStatement result = new SQLParsingEngine(databaseType, logicSQL, shardingRule, shardingMetaData.getTable()).parse(useCache); parsingHook.finishSuccess(); return result; } catch (final Exception ex) { Loading @@ -102,14 +99,14 @@ public final class ParsingSQLRouter implements ShardingRouter { if (sqlStatement instanceof SelectStatement && !sqlStatement.getTables().isEmpty() && !((SelectStatement) sqlStatement).getSubQueryStatements().isEmpty()) { mergeShardingValueForSubQuery(sqlStatement.getConditions(), shardingConditions); } RoutingResult routingResult = RoutingEngineFactory.newInstance(shardingRule, shardingDataSourceMetaData, sqlStatement, shardingConditions).route(); RoutingResult routingResult = RoutingEngineFactory.newInstance(shardingRule, shardingMetaData.getDataSource(), sqlStatement, shardingConditions).route(); SQLRewriteEngine rewriteEngine = new SQLRewriteEngine(shardingRule, logicSQL, databaseType, sqlStatement, shardingConditions, parameters); if (sqlStatement instanceof SelectStatement && null != ((SelectStatement) sqlStatement).getLimit()) { processLimit(parameters, (SelectStatement) sqlStatement); } SQLBuilder sqlBuilder = rewriteEngine.rewrite(!routingResult.isSingleRouting()); for (TableUnit each : routingResult.getTableUnits().getTableUnits()) { result.getRouteUnits().add(new RouteUnit(each.getDataSourceName(), rewriteEngine.generateSQL(each, sqlBuilder, shardingDataSourceMetaData))); result.getRouteUnits().add(new RouteUnit(each.getDataSourceName(), rewriteEngine.generateSQL(each, sqlBuilder, shardingMetaData.getDataSource()))); } if (showSQL) { SQLLogger.logSQL(logicSQL, sqlStatement, result.getRouteUnits()); Loading
sharding-core/src/main/java/io/shardingsphere/core/routing/router/sharding/ShardingRouterFactory.java +5 −9 Original line number Diff line number Diff line Loading @@ -19,8 +19,7 @@ package io.shardingsphere.core.routing.router.sharding; import io.shardingsphere.core.constant.DatabaseType; import io.shardingsphere.core.hint.HintManagerHolder; import io.shardingsphere.core.metadata.datasource.ShardingDataSourceMetaData; import io.shardingsphere.core.metadata.table.ShardingTableMetaData; import io.shardingsphere.core.metadata.ShardingMetaData; import io.shardingsphere.core.rule.ShardingRule; import lombok.AccessLevel; import lombok.NoArgsConstructor; Loading @@ -35,18 +34,15 @@ import lombok.NoArgsConstructor; public final class ShardingRouterFactory { /** * Create sharding router. * Create new instance of sharding router. * * @param shardingRule sharding rule * @param shardingTableMetaData sharding table meta data * @param shardingMetaData sharding meta data * @param databaseType database type * @param showSQL show SQL or not * @param shardingDataSourceMetaData sharding data source meta data * @return sharding router instance */ public static ShardingRouter createSQLRouter(final ShardingRule shardingRule, final ShardingTableMetaData shardingTableMetaData, final DatabaseType databaseType, final boolean showSQL, final ShardingDataSourceMetaData shardingDataSourceMetaData) { return HintManagerHolder.isDatabaseShardingOnly() ? new DatabaseHintSQLRouter(shardingRule, showSQL) : new ParsingSQLRouter(shardingRule, shardingTableMetaData, databaseType, showSQL, shardingDataSourceMetaData); public static ShardingRouter newInstance(final ShardingRule shardingRule, final ShardingMetaData shardingMetaData, final DatabaseType databaseType, final boolean showSQL) { return HintManagerHolder.isDatabaseShardingOnly() ? new DatabaseHintSQLRouter(shardingRule, showSQL) : new ParsingSQLRouter(shardingRule, shardingMetaData, databaseType, showSQL); } }