Loading sharding-proxy/src/main/java/io/shardingsphere/shardingproxy/backend/AbstractBackendHandler.java +39 −10 Original line number Diff line number Diff line Loading @@ -18,6 +18,13 @@ package io.shardingsphere.shardingproxy.backend; import com.google.common.base.Optional; import io.shardingsphere.core.metadata.table.TableMetaData; import io.shardingsphere.core.metadata.table.TableMetaDataFactory; import io.shardingsphere.core.parsing.antlr.sql.statement.ddl.AlterTableStatement; import io.shardingsphere.core.parsing.antlr.sql.statement.ddl.CreateTableStatement; import io.shardingsphere.core.parsing.antlr.sql.statement.ddl.DropTableStatement; import io.shardingsphere.core.parsing.parser.sql.SQLStatement; import io.shardingsphere.shardingproxy.runtime.schema.LogicSchema; import io.shardingsphere.shardingproxy.transport.mysql.constant.ServerErrorCode; import io.shardingsphere.shardingproxy.transport.mysql.packet.command.CommandResponsePackets; import io.shardingsphere.shardingproxy.transport.mysql.packet.generic.ErrPacket; Loading Loading @@ -70,23 +77,45 @@ public abstract class AbstractBackendHandler implements BackendHandler { return Optional.absent(); } /** * default next implement for adapter . * * @return false */ @Override public boolean next() throws SQLException { return false; } /** * default {@code getResultValue} implement for adapter. * * @return result packet */ @Override public ResultPacket getResultValue() throws SQLException { return null; } protected final void refreshTableMetaData(final LogicSchema logicSchema, final SQLStatement sqlStatement) { if (sqlStatement instanceof CreateTableStatement) { refreshTableMetaData(logicSchema, (CreateTableStatement) sqlStatement); } else if (sqlStatement instanceof AlterTableStatement) { refreshTableMetaData(logicSchema, (AlterTableStatement) sqlStatement); } else if (sqlStatement instanceof DropTableStatement) { refreshTableMetaData(logicSchema, (DropTableStatement) sqlStatement); } } private void refreshTableMetaData(final LogicSchema logicSchema, final CreateTableStatement createTableStatement) { logicSchema.getMetaData().getTable().put(createTableStatement.getTables().getSingleTableName(), TableMetaDataFactory.newInstance(createTableStatement)); } private void refreshTableMetaData(final LogicSchema logicSchema, final AlterTableStatement alterTableStatement) { String logicTableName = alterTableStatement.getTables().getSingleTableName(); TableMetaData newTableMetaData = TableMetaDataFactory.newInstance(alterTableStatement, logicSchema.getMetaData().getTable().get(logicTableName)); Optional<String> newTableName = alterTableStatement.getNewTableName(); if (newTableName.isPresent()) { logicSchema.getMetaData().getTable().put(newTableName.get(), newTableMetaData); logicSchema.getMetaData().getTable().remove(logicTableName); } else { logicSchema.getMetaData().getTable().put(logicTableName, newTableMetaData); } } private void refreshTableMetaData(final LogicSchema logicSchema, final DropTableStatement dropTableStatement) { for (String each : dropTableStatement.getTables().getTableNames()) { logicSchema.getMetaData().getTable().remove(each); } } } sharding-proxy/src/main/java/io/shardingsphere/shardingproxy/backend/jdbc/JDBCBackendHandler.java +2 −36 Original line number Diff line number Diff line Loading @@ -17,26 +17,17 @@ package io.shardingsphere.shardingproxy.backend.jdbc; import com.google.common.base.Function; import com.google.common.collect.Lists; import io.shardingsphere.api.config.rule.ShardingRuleConfiguration; import io.shardingsphere.core.constant.DatabaseType; import io.shardingsphere.core.constant.SQLType; import io.shardingsphere.core.constant.properties.ShardingPropertiesConstant; import io.shardingsphere.core.merger.MergeEngineFactory; import io.shardingsphere.core.merger.MergedResult; import io.shardingsphere.core.merger.dal.show.ShowTablesMergedResult; import io.shardingsphere.core.metadata.table.ColumnMetaData; import io.shardingsphere.core.metadata.table.TableMetaData; import io.shardingsphere.core.metadata.table.executor.TableMetaDataLoader; import io.shardingsphere.core.parsing.antlr.sql.segment.definition.column.ColumnDefinitionSegment; import io.shardingsphere.core.parsing.antlr.sql.statement.ddl.CreateTableStatement; import io.shardingsphere.core.parsing.parser.constant.DerivedColumn; import io.shardingsphere.core.parsing.parser.sql.SQLStatement; import io.shardingsphere.core.routing.SQLRouteResult; import io.shardingsphere.core.rule.ShardingRule; import io.shardingsphere.shardingproxy.backend.AbstractBackendHandler; import io.shardingsphere.shardingproxy.backend.BackendExecutorContext; import io.shardingsphere.shardingproxy.backend.ResultPacket; import io.shardingsphere.shardingproxy.backend.jdbc.connection.BackendConnection; import io.shardingsphere.shardingproxy.backend.jdbc.connection.ConnectionStatus; Loading @@ -44,8 +35,6 @@ import io.shardingsphere.shardingproxy.backend.jdbc.execute.JDBCExecuteEngine; import io.shardingsphere.shardingproxy.backend.jdbc.execute.response.ExecuteQueryResponse; import io.shardingsphere.shardingproxy.backend.jdbc.execute.response.ExecuteResponse; import io.shardingsphere.shardingproxy.backend.jdbc.execute.response.ExecuteUpdateResponse; import io.shardingsphere.shardingproxy.runtime.GlobalRegistry; import io.shardingsphere.shardingproxy.runtime.metadata.ProxyTableMetaDataConnectionManager; import io.shardingsphere.shardingproxy.runtime.schema.LogicSchema; import io.shardingsphere.shardingproxy.runtime.schema.ShardingSchema; import io.shardingsphere.shardingproxy.transport.mysql.constant.ServerErrorCode; Loading Loading @@ -74,8 +63,6 @@ import java.util.List; @RequiredArgsConstructor public final class JDBCBackendHandler extends AbstractBackendHandler { private static final GlobalRegistry GLOBAL_REGISTRY = GlobalRegistry.getInstance(); private final LogicSchema logicSchema; private final String sql; Loading Loading @@ -105,33 +92,12 @@ public final class JDBCBackendHandler extends AbstractBackendHandler { ServerErrorCode.ER_ERROR_ON_MODIFYING_GTID_EXECUTED_TABLE, sqlStatement.getTables().isSingleTable() ? sqlStatement.getTables().getSingleTableName() : "unknown_table")); } executeResponse = executeEngine.execute(routeResult); if (logicSchema instanceof ShardingSchema && SQLType.DDL == sqlStatement.getType() && !sqlStatement.getTables().isEmpty()) { String logicTableName = sqlStatement.getTables().getSingleTableName(); if (routeResult.getSqlStatement() instanceof CreateTableStatement) { createTable(logicTableName, logicSchema, (CreateTableStatement) routeResult.getSqlStatement()); }else { // TODO refresh table meta data by SQL parse result TableMetaDataLoader tableMetaDataLoader = new TableMetaDataLoader(logicSchema.getMetaData().getDataSource(), BackendExecutorContext.getInstance().getExecuteEngine(), new ProxyTableMetaDataConnectionManager(logicSchema.getBackendDataSource()), GLOBAL_REGISTRY.getShardingProperties().<Integer>getValue(ShardingPropertiesConstant.MAX_CONNECTIONS_SIZE_PER_QUERY), GLOBAL_REGISTRY.getShardingProperties().<Boolean>getValue(ShardingPropertiesConstant.CHECK_TABLE_METADATA_ENABLED)); logicSchema.getMetaData().getTable().put(logicTableName, tableMetaDataLoader.load(logicTableName, ((ShardingSchema) logicSchema).getShardingRule())); } if (logicSchema instanceof ShardingSchema) { refreshTableMetaData(logicSchema, routeResult.getSqlStatement()); } return merge(sqlStatement); } private void createTable(final String logicTableName, final LogicSchema logicSchema, final CreateTableStatement createTableStatement) { TableMetaData tableMetaData = new TableMetaData(Lists.transform(createTableStatement.getColumnDefinitions(), new Function<ColumnDefinitionSegment, ColumnMetaData>() { @Override public ColumnMetaData apply(final ColumnDefinitionSegment input) { return new ColumnMetaData(input.getColumnName(), input.getDataType(), input.isPrimaryKey()); } })); logicSchema.getMetaData().getTable().put(logicTableName, tableMetaData); } private boolean isUnsupportedXA(final SQLType sqlType) { BackendConnection connection = executeEngine.getBackendConnection(); return TransactionType.XA == connection.getTransactionType() && SQLType.DDL == sqlType && ConnectionStatus.TRANSACTION == connection.getStateHandler().getStatus(); Loading sharding-proxy/src/main/java/io/shardingsphere/shardingproxy/backend/netty/NettyBackendHandler.java +3 −18 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import io.shardingsphere.core.constant.properties.ShardingPropertiesConstant; import io.shardingsphere.core.merger.MergeEngineFactory; import io.shardingsphere.core.merger.MergedResult; import io.shardingsphere.core.merger.QueryResult; import io.shardingsphere.core.metadata.table.executor.TableMetaDataLoader; import io.shardingsphere.core.parsing.SQLJudgeEngine; import io.shardingsphere.core.parsing.parser.sql.SQLStatement; import io.shardingsphere.core.routing.RouteUnit; Loading @@ -33,7 +32,6 @@ import io.shardingsphere.core.routing.SQLRouteResult; import io.shardingsphere.core.routing.StatementRoutingEngine; import io.shardingsphere.core.routing.router.masterslave.MasterSlaveRouter; import io.shardingsphere.shardingproxy.backend.AbstractBackendHandler; import io.shardingsphere.shardingproxy.backend.BackendExecutorContext; import io.shardingsphere.shardingproxy.backend.ResultPacket; import io.shardingsphere.shardingproxy.backend.netty.client.BackendNettyClientManager; import io.shardingsphere.shardingproxy.backend.netty.client.response.mysql.MySQLQueryResult; Loading @@ -41,7 +39,6 @@ import io.shardingsphere.shardingproxy.backend.netty.future.FutureRegistry; import io.shardingsphere.shardingproxy.backend.netty.future.SynchronizedFuture; import io.shardingsphere.shardingproxy.runtime.ChannelRegistry; import io.shardingsphere.shardingproxy.runtime.GlobalRegistry; import io.shardingsphere.shardingproxy.runtime.metadata.ProxyTableMetaDataConnectionManager; import io.shardingsphere.shardingproxy.runtime.schema.LogicSchema; import io.shardingsphere.shardingproxy.runtime.schema.MasterSlaveSchema; import io.shardingsphere.shardingproxy.runtime.schema.ShardingSchema; Loading Loading @@ -102,7 +99,7 @@ public final class NettyBackendHandler extends AbstractBackendHandler { private MergedResult mergedResult; @Override protected CommandResponsePackets execute0() throws InterruptedException, ExecutionException, TimeoutException, SQLException { protected CommandResponsePackets execute0() throws InterruptedException, ExecutionException, TimeoutException { return logicSchema instanceof MasterSlaveSchema ? executeForMasterSlave() : executeForSharding(); } Loading @@ -122,7 +119,7 @@ public final class NettyBackendHandler extends AbstractBackendHandler { return merge(new SQLJudgeEngine(sql).judge(), packets, queryResults); } private CommandResponsePackets executeForSharding() throws InterruptedException, ExecutionException, TimeoutException, SQLException { private CommandResponsePackets executeForSharding() throws InterruptedException, ExecutionException, TimeoutException { StatementRoutingEngine routingEngine = new StatementRoutingEngine( ((ShardingSchema) logicSchema).getShardingRule(), logicSchema.getMetaData().getTable(), databaseType, GLOBAL_REGISTRY.getShardingProperties().<Boolean>getValue(ShardingPropertiesConstant.SQL_SHOW), logicSchema.getMetaData().getDataSource()); Loading Loading @@ -151,9 +148,7 @@ public final class NettyBackendHandler extends AbstractBackendHandler { } SQLStatement sqlStatement = routeResult.getSqlStatement(); CommandResponsePackets result = merge(sqlStatement, packets, queryResults); if (SQLType.DDL == sqlStatement.getType() && !sqlStatement.getTables().isEmpty()) { refreshTableMetaData(sqlStatement.getTables().getSingleTableName()); } refreshTableMetaData(logicSchema, sqlStatement); return result; } Loading Loading @@ -212,16 +207,6 @@ public final class NettyBackendHandler extends AbstractBackendHandler { return packets.get(0); } // TODO :jiaqi use sql packet to refresh meta data // TODO refresh table meta data by SQL parse result private void refreshTableMetaData(final String logicTableName) throws SQLException { TableMetaDataLoader tableMetaDataLoader = new TableMetaDataLoader( logicSchema.getMetaData().getDataSource(), BackendExecutorContext.getInstance().getExecuteEngine(), new ProxyTableMetaDataConnectionManager(logicSchema.getBackendDataSource()), GLOBAL_REGISTRY.getShardingProperties().<Integer>getValue(ShardingPropertiesConstant.MAX_CONNECTIONS_SIZE_PER_QUERY), GLOBAL_REGISTRY.getShardingProperties().<Boolean>getValue(ShardingPropertiesConstant.CHECK_TABLE_METADATA_ENABLED)); logicSchema.getMetaData().getTable().put(logicTableName, tableMetaDataLoader.load(logicTableName, ((ShardingSchema) logicSchema).getShardingRule())); } @Override public boolean next() throws SQLException { if (null == mergedResult || !mergedResult.next()) { Loading Loading
sharding-proxy/src/main/java/io/shardingsphere/shardingproxy/backend/AbstractBackendHandler.java +39 −10 Original line number Diff line number Diff line Loading @@ -18,6 +18,13 @@ package io.shardingsphere.shardingproxy.backend; import com.google.common.base.Optional; import io.shardingsphere.core.metadata.table.TableMetaData; import io.shardingsphere.core.metadata.table.TableMetaDataFactory; import io.shardingsphere.core.parsing.antlr.sql.statement.ddl.AlterTableStatement; import io.shardingsphere.core.parsing.antlr.sql.statement.ddl.CreateTableStatement; import io.shardingsphere.core.parsing.antlr.sql.statement.ddl.DropTableStatement; import io.shardingsphere.core.parsing.parser.sql.SQLStatement; import io.shardingsphere.shardingproxy.runtime.schema.LogicSchema; import io.shardingsphere.shardingproxy.transport.mysql.constant.ServerErrorCode; import io.shardingsphere.shardingproxy.transport.mysql.packet.command.CommandResponsePackets; import io.shardingsphere.shardingproxy.transport.mysql.packet.generic.ErrPacket; Loading Loading @@ -70,23 +77,45 @@ public abstract class AbstractBackendHandler implements BackendHandler { return Optional.absent(); } /** * default next implement for adapter . * * @return false */ @Override public boolean next() throws SQLException { return false; } /** * default {@code getResultValue} implement for adapter. * * @return result packet */ @Override public ResultPacket getResultValue() throws SQLException { return null; } protected final void refreshTableMetaData(final LogicSchema logicSchema, final SQLStatement sqlStatement) { if (sqlStatement instanceof CreateTableStatement) { refreshTableMetaData(logicSchema, (CreateTableStatement) sqlStatement); } else if (sqlStatement instanceof AlterTableStatement) { refreshTableMetaData(logicSchema, (AlterTableStatement) sqlStatement); } else if (sqlStatement instanceof DropTableStatement) { refreshTableMetaData(logicSchema, (DropTableStatement) sqlStatement); } } private void refreshTableMetaData(final LogicSchema logicSchema, final CreateTableStatement createTableStatement) { logicSchema.getMetaData().getTable().put(createTableStatement.getTables().getSingleTableName(), TableMetaDataFactory.newInstance(createTableStatement)); } private void refreshTableMetaData(final LogicSchema logicSchema, final AlterTableStatement alterTableStatement) { String logicTableName = alterTableStatement.getTables().getSingleTableName(); TableMetaData newTableMetaData = TableMetaDataFactory.newInstance(alterTableStatement, logicSchema.getMetaData().getTable().get(logicTableName)); Optional<String> newTableName = alterTableStatement.getNewTableName(); if (newTableName.isPresent()) { logicSchema.getMetaData().getTable().put(newTableName.get(), newTableMetaData); logicSchema.getMetaData().getTable().remove(logicTableName); } else { logicSchema.getMetaData().getTable().put(logicTableName, newTableMetaData); } } private void refreshTableMetaData(final LogicSchema logicSchema, final DropTableStatement dropTableStatement) { for (String each : dropTableStatement.getTables().getTableNames()) { logicSchema.getMetaData().getTable().remove(each); } } }
sharding-proxy/src/main/java/io/shardingsphere/shardingproxy/backend/jdbc/JDBCBackendHandler.java +2 −36 Original line number Diff line number Diff line Loading @@ -17,26 +17,17 @@ package io.shardingsphere.shardingproxy.backend.jdbc; import com.google.common.base.Function; import com.google.common.collect.Lists; import io.shardingsphere.api.config.rule.ShardingRuleConfiguration; import io.shardingsphere.core.constant.DatabaseType; import io.shardingsphere.core.constant.SQLType; import io.shardingsphere.core.constant.properties.ShardingPropertiesConstant; import io.shardingsphere.core.merger.MergeEngineFactory; import io.shardingsphere.core.merger.MergedResult; import io.shardingsphere.core.merger.dal.show.ShowTablesMergedResult; import io.shardingsphere.core.metadata.table.ColumnMetaData; import io.shardingsphere.core.metadata.table.TableMetaData; import io.shardingsphere.core.metadata.table.executor.TableMetaDataLoader; import io.shardingsphere.core.parsing.antlr.sql.segment.definition.column.ColumnDefinitionSegment; import io.shardingsphere.core.parsing.antlr.sql.statement.ddl.CreateTableStatement; import io.shardingsphere.core.parsing.parser.constant.DerivedColumn; import io.shardingsphere.core.parsing.parser.sql.SQLStatement; import io.shardingsphere.core.routing.SQLRouteResult; import io.shardingsphere.core.rule.ShardingRule; import io.shardingsphere.shardingproxy.backend.AbstractBackendHandler; import io.shardingsphere.shardingproxy.backend.BackendExecutorContext; import io.shardingsphere.shardingproxy.backend.ResultPacket; import io.shardingsphere.shardingproxy.backend.jdbc.connection.BackendConnection; import io.shardingsphere.shardingproxy.backend.jdbc.connection.ConnectionStatus; Loading @@ -44,8 +35,6 @@ import io.shardingsphere.shardingproxy.backend.jdbc.execute.JDBCExecuteEngine; import io.shardingsphere.shardingproxy.backend.jdbc.execute.response.ExecuteQueryResponse; import io.shardingsphere.shardingproxy.backend.jdbc.execute.response.ExecuteResponse; import io.shardingsphere.shardingproxy.backend.jdbc.execute.response.ExecuteUpdateResponse; import io.shardingsphere.shardingproxy.runtime.GlobalRegistry; import io.shardingsphere.shardingproxy.runtime.metadata.ProxyTableMetaDataConnectionManager; import io.shardingsphere.shardingproxy.runtime.schema.LogicSchema; import io.shardingsphere.shardingproxy.runtime.schema.ShardingSchema; import io.shardingsphere.shardingproxy.transport.mysql.constant.ServerErrorCode; Loading Loading @@ -74,8 +63,6 @@ import java.util.List; @RequiredArgsConstructor public final class JDBCBackendHandler extends AbstractBackendHandler { private static final GlobalRegistry GLOBAL_REGISTRY = GlobalRegistry.getInstance(); private final LogicSchema logicSchema; private final String sql; Loading Loading @@ -105,33 +92,12 @@ public final class JDBCBackendHandler extends AbstractBackendHandler { ServerErrorCode.ER_ERROR_ON_MODIFYING_GTID_EXECUTED_TABLE, sqlStatement.getTables().isSingleTable() ? sqlStatement.getTables().getSingleTableName() : "unknown_table")); } executeResponse = executeEngine.execute(routeResult); if (logicSchema instanceof ShardingSchema && SQLType.DDL == sqlStatement.getType() && !sqlStatement.getTables().isEmpty()) { String logicTableName = sqlStatement.getTables().getSingleTableName(); if (routeResult.getSqlStatement() instanceof CreateTableStatement) { createTable(logicTableName, logicSchema, (CreateTableStatement) routeResult.getSqlStatement()); }else { // TODO refresh table meta data by SQL parse result TableMetaDataLoader tableMetaDataLoader = new TableMetaDataLoader(logicSchema.getMetaData().getDataSource(), BackendExecutorContext.getInstance().getExecuteEngine(), new ProxyTableMetaDataConnectionManager(logicSchema.getBackendDataSource()), GLOBAL_REGISTRY.getShardingProperties().<Integer>getValue(ShardingPropertiesConstant.MAX_CONNECTIONS_SIZE_PER_QUERY), GLOBAL_REGISTRY.getShardingProperties().<Boolean>getValue(ShardingPropertiesConstant.CHECK_TABLE_METADATA_ENABLED)); logicSchema.getMetaData().getTable().put(logicTableName, tableMetaDataLoader.load(logicTableName, ((ShardingSchema) logicSchema).getShardingRule())); } if (logicSchema instanceof ShardingSchema) { refreshTableMetaData(logicSchema, routeResult.getSqlStatement()); } return merge(sqlStatement); } private void createTable(final String logicTableName, final LogicSchema logicSchema, final CreateTableStatement createTableStatement) { TableMetaData tableMetaData = new TableMetaData(Lists.transform(createTableStatement.getColumnDefinitions(), new Function<ColumnDefinitionSegment, ColumnMetaData>() { @Override public ColumnMetaData apply(final ColumnDefinitionSegment input) { return new ColumnMetaData(input.getColumnName(), input.getDataType(), input.isPrimaryKey()); } })); logicSchema.getMetaData().getTable().put(logicTableName, tableMetaData); } private boolean isUnsupportedXA(final SQLType sqlType) { BackendConnection connection = executeEngine.getBackendConnection(); return TransactionType.XA == connection.getTransactionType() && SQLType.DDL == sqlType && ConnectionStatus.TRANSACTION == connection.getStateHandler().getStatus(); Loading
sharding-proxy/src/main/java/io/shardingsphere/shardingproxy/backend/netty/NettyBackendHandler.java +3 −18 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import io.shardingsphere.core.constant.properties.ShardingPropertiesConstant; import io.shardingsphere.core.merger.MergeEngineFactory; import io.shardingsphere.core.merger.MergedResult; import io.shardingsphere.core.merger.QueryResult; import io.shardingsphere.core.metadata.table.executor.TableMetaDataLoader; import io.shardingsphere.core.parsing.SQLJudgeEngine; import io.shardingsphere.core.parsing.parser.sql.SQLStatement; import io.shardingsphere.core.routing.RouteUnit; Loading @@ -33,7 +32,6 @@ import io.shardingsphere.core.routing.SQLRouteResult; import io.shardingsphere.core.routing.StatementRoutingEngine; import io.shardingsphere.core.routing.router.masterslave.MasterSlaveRouter; import io.shardingsphere.shardingproxy.backend.AbstractBackendHandler; import io.shardingsphere.shardingproxy.backend.BackendExecutorContext; import io.shardingsphere.shardingproxy.backend.ResultPacket; import io.shardingsphere.shardingproxy.backend.netty.client.BackendNettyClientManager; import io.shardingsphere.shardingproxy.backend.netty.client.response.mysql.MySQLQueryResult; Loading @@ -41,7 +39,6 @@ import io.shardingsphere.shardingproxy.backend.netty.future.FutureRegistry; import io.shardingsphere.shardingproxy.backend.netty.future.SynchronizedFuture; import io.shardingsphere.shardingproxy.runtime.ChannelRegistry; import io.shardingsphere.shardingproxy.runtime.GlobalRegistry; import io.shardingsphere.shardingproxy.runtime.metadata.ProxyTableMetaDataConnectionManager; import io.shardingsphere.shardingproxy.runtime.schema.LogicSchema; import io.shardingsphere.shardingproxy.runtime.schema.MasterSlaveSchema; import io.shardingsphere.shardingproxy.runtime.schema.ShardingSchema; Loading Loading @@ -102,7 +99,7 @@ public final class NettyBackendHandler extends AbstractBackendHandler { private MergedResult mergedResult; @Override protected CommandResponsePackets execute0() throws InterruptedException, ExecutionException, TimeoutException, SQLException { protected CommandResponsePackets execute0() throws InterruptedException, ExecutionException, TimeoutException { return logicSchema instanceof MasterSlaveSchema ? executeForMasterSlave() : executeForSharding(); } Loading @@ -122,7 +119,7 @@ public final class NettyBackendHandler extends AbstractBackendHandler { return merge(new SQLJudgeEngine(sql).judge(), packets, queryResults); } private CommandResponsePackets executeForSharding() throws InterruptedException, ExecutionException, TimeoutException, SQLException { private CommandResponsePackets executeForSharding() throws InterruptedException, ExecutionException, TimeoutException { StatementRoutingEngine routingEngine = new StatementRoutingEngine( ((ShardingSchema) logicSchema).getShardingRule(), logicSchema.getMetaData().getTable(), databaseType, GLOBAL_REGISTRY.getShardingProperties().<Boolean>getValue(ShardingPropertiesConstant.SQL_SHOW), logicSchema.getMetaData().getDataSource()); Loading Loading @@ -151,9 +148,7 @@ public final class NettyBackendHandler extends AbstractBackendHandler { } SQLStatement sqlStatement = routeResult.getSqlStatement(); CommandResponsePackets result = merge(sqlStatement, packets, queryResults); if (SQLType.DDL == sqlStatement.getType() && !sqlStatement.getTables().isEmpty()) { refreshTableMetaData(sqlStatement.getTables().getSingleTableName()); } refreshTableMetaData(logicSchema, sqlStatement); return result; } Loading Loading @@ -212,16 +207,6 @@ public final class NettyBackendHandler extends AbstractBackendHandler { return packets.get(0); } // TODO :jiaqi use sql packet to refresh meta data // TODO refresh table meta data by SQL parse result private void refreshTableMetaData(final String logicTableName) throws SQLException { TableMetaDataLoader tableMetaDataLoader = new TableMetaDataLoader( logicSchema.getMetaData().getDataSource(), BackendExecutorContext.getInstance().getExecuteEngine(), new ProxyTableMetaDataConnectionManager(logicSchema.getBackendDataSource()), GLOBAL_REGISTRY.getShardingProperties().<Integer>getValue(ShardingPropertiesConstant.MAX_CONNECTIONS_SIZE_PER_QUERY), GLOBAL_REGISTRY.getShardingProperties().<Boolean>getValue(ShardingPropertiesConstant.CHECK_TABLE_METADATA_ENABLED)); logicSchema.getMetaData().getTable().put(logicTableName, tableMetaDataLoader.load(logicTableName, ((ShardingSchema) logicSchema).getShardingRule())); } @Override public boolean next() throws SQLException { if (null == mergedResult || !mergedResult.next()) { Loading