未验证 提交 2127438e 编写于 作者: L Liang Zhang 提交者: GitHub

Add TableContainedRule check for table refresh (#8118)

* Add TableContainedRule check for table refresh

* Add TableContainedRule check for table refresh
上级 8c151b27
......@@ -21,6 +21,8 @@ import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
import org.apache.shardingsphere.infra.metadata.schema.builder.SchemaBuilderMaterials;
import org.apache.shardingsphere.infra.metadata.schema.builder.TableMetaDataBuilder;
import org.apache.shardingsphere.infra.metadata.schema.refresher.SchemaRefresher;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.type.TableContainedRule;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterTableStatement;
import java.sql.SQLException;
......@@ -35,8 +37,20 @@ public final class AlterTableStatementSchemaRefresher implements SchemaRefresher
public void refresh(final ShardingSphereSchema schema,
final Collection<String> routeDataSourceNames, final AlterTableStatement sqlStatement, final SchemaBuilderMaterials materials) throws SQLException {
String tableName = sqlStatement.getTable().getTableName().getIdentifier().getValue();
if (!containsInTableContainedRule(tableName, materials)) {
return;
}
if (null != schema && schema.containsTable(tableName)) {
TableMetaDataBuilder.build(tableName, materials).ifPresent(tableMetaData -> schema.put(tableName, tableMetaData));
}
}
private boolean containsInTableContainedRule(final String tableName, final SchemaBuilderMaterials materials) {
for (ShardingSphereRule each : materials.getRules()) {
if (each instanceof TableContainedRule && ((TableContainedRule) each).getTables().contains(tableName)) {
return true;
}
}
return false;
}
}
......@@ -36,8 +36,8 @@ public final class CreateIndexStatementSchemaRefresher implements SchemaRefreshe
if (null == sqlStatement.getIndex()) {
return;
}
String indexName = sqlStatement.getIndex().getIdentifier().getValue();
String tableName = sqlStatement.getTable().getTableName().getIdentifier().getValue();
String indexName = sqlStatement.getIndex().getIdentifier().getValue();
schema.get(tableName).getIndexes().put(indexName, new IndexMetaData(indexName));
}
}
......@@ -22,6 +22,8 @@ import org.apache.shardingsphere.infra.metadata.schema.builder.SchemaBuilderMate
import org.apache.shardingsphere.infra.metadata.schema.builder.TableMetaDataBuilder;
import org.apache.shardingsphere.infra.metadata.schema.model.TableMetaData;
import org.apache.shardingsphere.infra.metadata.schema.refresher.SchemaRefresher;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.type.TableContainedRule;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateTableStatement;
import java.sql.SQLException;
......@@ -36,8 +38,22 @@ public final class CreateTableStatementSchemaRefresher implements SchemaRefreshe
public void refresh(final ShardingSphereSchema schema,
final Collection<String> routeDataSourceNames, final CreateTableStatement sqlStatement, final SchemaBuilderMaterials materials) throws SQLException {
String tableName = sqlStatement.getTable().getTableName().getIdentifier().getValue();
TableMetaData tableMetaData = TableMetaDataBuilder.build(tableName, materials).orElse(new TableMetaData());
TableMetaData tableMetaData;
if (containsInTableContainedRule(tableName, materials)) {
tableMetaData = TableMetaDataBuilder.build(tableName, materials).orElse(new TableMetaData());
} else {
tableMetaData = new TableMetaData();
}
schema.put(tableName, tableMetaData);
schema.get(tableName).getAddressingDataSources().addAll(routeDataSourceNames);
}
private boolean containsInTableContainedRule(final String tableName, final SchemaBuilderMaterials materials) {
for (ShardingSphereRule each : materials.getRules()) {
if (each instanceof TableContainedRule && ((TableContainedRule) each).getTables().contains(tableName)) {
return true;
}
}
return false;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册