/** * Route Master slave after sharding. * * @param sqlRouteResult SQL route result * @return route result */ public SQLRouteResult route(final SQLRouteResult sqlRouteResult) { for (MasterSlaveRule each : masterSlaveRules) { route(each, sqlRouteResult); } return sqlRouteResult; }
private boolean isMasterRoute(final SQLType sqlType) { return SQLType.DQL != sqlType || MasterVisitedManager.isMasterVisited() || HintManagerHolder.isMasterRouteOnly(); } }
private Collection<String> route(final SQLType sqlType) { if (isMasterRoute(sqlType)) { MasterVisitedManager.setMasterVisited(); return Collections.singletonList(masterSlaveRule.getMasterDataSourceName()); } return Collections.singletonList(masterSlaveRule.getLoadBalanceAlgorithm().getDataSource( masterSlaveRule.getName(), masterSlaveRule.getMasterDataSourceName(), new ArrayList<>(masterSlaveRule.getSlaveDataSourceNames()))); }
public MasterSlavePreparedStatement(final MasterSlaveConnection connection, final String sql, final int autoGeneratedKeys) throws SQLException { this.connection = connection; masterSlaveRouter = new MasterSlaveRouter(connection.getMasterSlaveDataSource().getMasterSlaveRule(), connection.getMasterSlaveDataSource().getShardingProperties().<Boolean>getValue(ShardingPropertiesConstant.SQL_SHOW)); for (String each : masterSlaveRouter.route(sql)) { PreparedStatement preparedStatement = connection.getConnection(each).prepareStatement(sql, autoGeneratedKeys); routedStatements.add(preparedStatement); } }
@Override public int executeUpdate(final String sql, final int[] columnIndexes) throws SQLException { clearPrevious(); int result = 0; for (String each : masterSlaveRouter.route(sql)) { Statement statement = connection.getConnection(each).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(statement); result += statement.executeUpdate(sql, columnIndexes); } return result; }
public MasterSlaveStatement(final MasterSlaveConnection connection, final int resultSetType, final int resultSetConcurrency, final int resultSetHoldability) { super(Statement.class); this.connection = connection; masterSlaveRouter = new MasterSlaveRouter(connection.getMasterSlaveDataSource().getMasterSlaveRule(), connection.getMasterSlaveDataSource().getShardingProperties().<Boolean>getValue(ShardingPropertiesConstant.SQL_SHOW)); this.resultSetType = resultSetType; this.resultSetConcurrency = resultSetConcurrency; this.resultSetHoldability = resultSetHoldability; }
public PreparedStatementRoutingEngine(final String logicSQL, final ShardingRule shardingRule, final ShardingMetaData shardingMetaData, final DatabaseType databaseType, final boolean showSQL) { this.logicSQL = logicSQL; shardingRouter = ShardingRouterFactory.newInstance(shardingRule, shardingMetaData, databaseType, showSQL); masterSlaveRouter = new ShardingMasterSlaveRouter(shardingRule.getMasterSlaveRules()); }
public MasterSlavePreparedStatement(final MasterSlaveConnection connection, final String sql, final String[] columnNames) throws SQLException { this.connection = connection; masterSlaveRouter = new MasterSlaveRouter(connection.getMasterSlaveDataSource().getMasterSlaveRule(), connection.getMasterSlaveDataSource().getShardingProperties().<Boolean>getValue(ShardingPropertiesConstant.SQL_SHOW)); for (String each : masterSlaveRouter.route(sql)) { PreparedStatement preparedStatement = connection.getConnection(each).prepareStatement(sql, columnNames); routedStatements.add(preparedStatement); } }
@Override public boolean execute(final String sql) throws SQLException { clearPrevious(); boolean result = false; for (String each : masterSlaveRouter.route(sql)) { Statement statement = connection.getConnection(each).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(statement); result = statement.execute(sql); } return result; }
/** * SQL route. * * @param logicSQL logic SQL * @return route result */ public SQLRouteResult route(final String logicSQL) { SQLStatement sqlStatement = shardingRouter.parse(logicSQL, false); return masterSlaveRouter.route(shardingRouter.route(logicSQL, Collections.emptyList(), sqlStatement)); } }
private boolean isMasterRoute(final SQLType sqlType) { return SQLType.DQL != sqlType || MasterVisitedManager.isMasterVisited() || HintManagerHolder.isMasterRouteOnly(); } }
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()); }
public MasterSlavePreparedStatement(final MasterSlaveConnection connection, final String sql, final int[] columnIndexes) throws SQLException { this.connection = connection; masterSlaveRouter = new MasterSlaveRouter(connection.getMasterSlaveDataSource().getMasterSlaveRule(), connection.getMasterSlaveDataSource().getShardingProperties().<Boolean>getValue(ShardingPropertiesConstant.SQL_SHOW)); for (String each : masterSlaveRouter.route(sql)) { PreparedStatement preparedStatement = connection.getConnection(each).prepareStatement(sql, columnIndexes); routedStatements.add(preparedStatement); } }
@Override public int executeUpdate(final String sql, final int autoGeneratedKeys) throws SQLException { clearPrevious(); int result = 0; for (String each : masterSlaveRouter.route(sql)) { Statement statement = connection.getConnection(each).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(statement); result += statement.executeUpdate(sql, autoGeneratedKeys); } return result; }
/** * SQL route. * * <p>First routing time will parse SQL, after second time will reuse first parsed result.</p> * * @param parameters parameters of SQL placeholder * @return route result */ public SQLRouteResult route(final List<Object> parameters) { if (null == sqlStatement) { sqlStatement = shardingRouter.parse(logicSQL, true); } return masterSlaveRouter.route(shardingRouter.route(logicSQL, parameters, sqlStatement)); } }
public MasterSlavePreparedStatement( final MasterSlaveConnection connection, final String sql, final int resultSetType, final int resultSetConcurrency, final int resultSetHoldability) throws SQLException { this.connection = connection; masterSlaveRouter = new MasterSlaveRouter(connection.getMasterSlaveDataSource().getMasterSlaveRule(), connection.getMasterSlaveDataSource().getShardingProperties().<Boolean>getValue(ShardingPropertiesConstant.SQL_SHOW)); for (String each : masterSlaveRouter.route(sql)) { PreparedStatement preparedStatement = connection.getConnection(each).prepareStatement(sql, resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(preparedStatement); } }
@Override public int executeUpdate(final String sql, final String[] columnNames) throws SQLException { clearPrevious(); int result = 0; for (String each : masterSlaveRouter.route(sql)) { Statement statement = connection.getConnection(each).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(statement); result += statement.executeUpdate(sql, columnNames); } return result; }
@Override public boolean execute(final String sql, final int autoGeneratedKeys) throws SQLException { clearPrevious(); boolean result = false; for (String each : masterSlaveRouter.route(sql)) { Statement statement = connection.getConnection(each).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(statement); result = statement.execute(sql, autoGeneratedKeys); } return result; }
@Override public boolean execute(final String sql, final int[] columnIndexes) throws SQLException { clearPrevious(); boolean result = false; for (String each : masterSlaveRouter.route(sql)) { Statement statement = connection.getConnection(each).createStatement(resultSetType, resultSetConcurrency, resultSetHoldability); routedStatements.add(statement); result = statement.execute(sql, columnIndexes); } return result; }
/** * Route Master slave. * * @param sql SQL * @return data source names */ // TODO for multiple masters may return more than one data source public Collection<String> route(final String sql) { Collection<String> result = route(new SQLJudgeEngine(sql).judge().getType()); if (showSQL) { SQLLogger.logSQL(sql, result); } return result; }