未验证 提交 3d25a5ee 编写于 作者: L Liang Zhang 提交者: GitHub

Remove ShardingSphereSchema.dataSourcesMetaData (#8042)

* Refactor ShardingSphereDatabaseMetaData

* Decouple usage of ShardingSphereSchema.dataSourcesMetaData

* Remove ShardingSphereSchema.dataSourcesMetaData
上级 34cbbeaf
......@@ -39,7 +39,6 @@ import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.ShardingSphereRulesBuilder;
import org.apache.shardingsphere.infra.schema.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.schema.model.addressing.TableAddressingMetaData;
import org.apache.shardingsphere.infra.schema.model.datasource.DataSourcesMetaData;
import org.apache.shardingsphere.infra.schema.model.schema.physical.model.schema.PhysicalSchemaMetaData;
import org.apache.shardingsphere.infra.yaml.config.YamlRootRuleConfigurations;
import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
......@@ -98,6 +97,6 @@ public final class EncryptSQLRewriterParameterizedTest extends AbstractSQLRewrit
PhysicalSchemaMetaData schemaMetaData = mock(PhysicalSchemaMetaData.class);
when(schemaMetaData.getAllColumnNames("t_account")).thenReturn(Arrays.asList("account_id", "certificate_number", "password", "amount", "status"));
when(schemaMetaData.getAllColumnNames("t_account_bak")).thenReturn(Arrays.asList("account_id", "certificate_number", "password", "amount", "status"));
return new ShardingSphereSchema(mock(DataSourcesMetaData.class), mock(TableAddressingMetaData.class), schemaMetaData);
return new ShardingSphereSchema(mock(TableAddressingMetaData.class), schemaMetaData);
}
}
......@@ -39,7 +39,6 @@ import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.ShardingSphereRulesBuilder;
import org.apache.shardingsphere.infra.schema.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.schema.model.addressing.TableAddressingMetaData;
import org.apache.shardingsphere.infra.schema.model.datasource.DataSourcesMetaData;
import org.apache.shardingsphere.infra.schema.model.schema.physical.model.column.PhysicalColumnMetaData;
import org.apache.shardingsphere.infra.schema.model.schema.physical.model.index.PhysicalIndexMetaData;
import org.apache.shardingsphere.infra.schema.model.schema.physical.model.schema.PhysicalSchemaMetaData;
......@@ -118,7 +117,7 @@ public final class MixSQLRewriterParameterizedTest extends AbstractSQLRewriterPa
when(schemaMetaData.get("t_account_detail")).thenReturn(mock(PhysicalTableMetaData.class));
when(schemaMetaData.getAllColumnNames("t_account")).thenReturn(Arrays.asList("account_id", "password", "amount", "status"));
when(schemaMetaData.getAllColumnNames("t_account_bak")).thenReturn(Arrays.asList("account_id", "password", "amount", "status"));
return new ShardingSphereSchema(mock(DataSourcesMetaData.class), mock(TableAddressingMetaData.class), schemaMetaData);
return new ShardingSphereSchema(mock(TableAddressingMetaData.class), schemaMetaData);
}
private Map<String, PhysicalColumnMetaData> createColumnMetaDataMap() {
......
......@@ -39,7 +39,6 @@ import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.ShardingSphereRulesBuilder;
import org.apache.shardingsphere.infra.schema.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.schema.model.addressing.TableAddressingMetaData;
import org.apache.shardingsphere.infra.schema.model.datasource.DataSourcesMetaData;
import org.apache.shardingsphere.infra.schema.model.schema.physical.model.column.PhysicalColumnMetaData;
import org.apache.shardingsphere.infra.schema.model.schema.physical.model.index.PhysicalIndexMetaData;
import org.apache.shardingsphere.infra.schema.model.schema.physical.model.schema.PhysicalSchemaMetaData;
......@@ -113,7 +112,7 @@ public final class ShardingSQLRewriterParameterizedTest extends AbstractSQLRewri
when(schemaMetaData.get("t_account")).thenReturn(accountTableMetaData);
when(schemaMetaData.get("t_account_detail")).thenReturn(mock(PhysicalTableMetaData.class));
when(schemaMetaData.getAllColumnNames("t_account")).thenReturn(Arrays.asList("account_id", "amount", "status"));
return new ShardingSphereSchema(mock(DataSourcesMetaData.class), mock(TableAddressingMetaData.class), schemaMetaData);
return new ShardingSphereSchema(mock(TableAddressingMetaData.class), schemaMetaData);
}
private Map<String, PhysicalColumnMetaData> createColumnMetaDataMap() {
......
......@@ -67,7 +67,7 @@ public final class ShardingSQLRouter implements SQLRouter<ShardingRule> {
checkSubqueryShardingValues(logicSQL.getSqlStatementContext(), rule, shardingConditions);
mergeShardingConditions(shardingConditions);
}
ShardingRouteEngineFactory.newInstance(rule, metaData.getSchema(), logicSQL.getSqlStatementContext(), shardingConditions, props).route(result, rule);
ShardingRouteEngineFactory.newInstance(rule, metaData, logicSQL.getSqlStatementContext(), shardingConditions, props).route(result, rule);
validator.ifPresent(v -> v.postValidate(sqlStatement, result));
return result;
}
......
......@@ -22,7 +22,7 @@ import lombok.NoArgsConstructor;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.type.TableAvailable;
import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
import org.apache.shardingsphere.infra.schema.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.sharding.route.engine.condition.ShardingConditions;
import org.apache.shardingsphere.sharding.route.engine.type.broadcast.ShardingDataSourceGroupBroadcastRoutingEngine;
import org.apache.shardingsphere.sharding.route.engine.type.broadcast.ShardingDatabaseBroadcastRoutingEngine;
......@@ -30,8 +30,8 @@ import org.apache.shardingsphere.sharding.route.engine.type.broadcast.ShardingIn
import org.apache.shardingsphere.sharding.route.engine.type.broadcast.ShardingTableBroadcastRoutingEngine;
import org.apache.shardingsphere.sharding.route.engine.type.complex.ShardingComplexRoutingEngine;
import org.apache.shardingsphere.sharding.route.engine.type.ignore.ShardingIgnoreRoutingEngine;
import org.apache.shardingsphere.sharding.route.engine.type.standard.ShardingStandardRoutingEngine;
import org.apache.shardingsphere.sharding.route.engine.type.single.SingleTableRoutingEngine;
import org.apache.shardingsphere.sharding.route.engine.type.standard.ShardingStandardRoutingEngine;
import org.apache.shardingsphere.sharding.route.engine.type.unicast.ShardingUnicastRoutingEngine;
import org.apache.shardingsphere.sharding.rule.ShardingRule;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
......@@ -64,13 +64,13 @@ public final class ShardingRouteEngineFactory {
* Create new instance of routing engine.
*
* @param shardingRule sharding rule
* @param schema ShardingSphere schema
* @param metaData ShardingSphere metaData
* @param sqlStatementContext SQL statement context
* @param shardingConditions shardingConditions
* @param props ShardingSphere properties
* @return new instance of routing engine
*/
public static ShardingRouteEngine newInstance(final ShardingRule shardingRule, final ShardingSphereSchema schema,
public static ShardingRouteEngine newInstance(final ShardingRule shardingRule, final ShardingSphereMetaData metaData,
final SQLStatementContext sqlStatementContext, final ShardingConditions shardingConditions, final ConfigurationProperties props) {
SQLStatement sqlStatement = sqlStatementContext.getSqlStatement();
Collection<String> tableNames = sqlStatementContext.getTablesContext().getTableNames();
......@@ -78,13 +78,13 @@ public final class ShardingRouteEngineFactory {
return new ShardingDatabaseBroadcastRoutingEngine();
}
if (sqlStatement instanceof DDLStatement) {
return getDDLRoutingEngine(shardingRule, schema, sqlStatementContext);
return getDDLRoutingEngine(shardingRule, metaData, sqlStatementContext);
}
if (sqlStatement instanceof DALStatement) {
return getDALRoutingEngine(shardingRule, schema, sqlStatement, tableNames);
return getDALRoutingEngine(shardingRule, metaData, sqlStatement, tableNames);
}
if (sqlStatement instanceof DCLStatement) {
return getDCLRoutingEngine(shardingRule, schema, sqlStatementContext);
return getDCLRoutingEngine(shardingRule, metaData, sqlStatementContext);
}
if (shardingRule.isAllBroadcastTables(tableNames)) {
return sqlStatement instanceof SelectStatement ? new ShardingUnicastRoutingEngine(tableNames) : new ShardingDatabaseBroadcastRoutingEngine();
......@@ -93,12 +93,12 @@ public final class ShardingRouteEngineFactory {
return new ShardingUnicastRoutingEngine(tableNames);
}
if (!shardingRule.tableRuleExists(tableNames)) {
return new SingleTableRoutingEngine(tableNames, schema.getTableAddressingMetaData(), sqlStatement);
return new SingleTableRoutingEngine(tableNames, metaData.getSchema().getTableAddressingMetaData(), sqlStatement);
}
return getShardingRoutingEngine(shardingRule, shardingConditions, tableNames, props);
}
private static ShardingRouteEngine getDDLRoutingEngine(final ShardingRule shardingRule, final ShardingSphereSchema schema, final SQLStatementContext<?> sqlStatementContext) {
private static ShardingRouteEngine getDDLRoutingEngine(final ShardingRule shardingRule, final ShardingSphereMetaData metaData, final SQLStatementContext<?> sqlStatementContext) {
SQLStatement sqlStatement = sqlStatementContext.getSqlStatement();
boolean functionStatement = sqlStatement instanceof CreateFunctionStatement || sqlStatement instanceof AlterFunctionStatement || sqlStatement instanceof DropFunctionStatement;
boolean procedureStatement = sqlStatement instanceof CreateProcedureStatement || sqlStatement instanceof AlterProcedureStatement || sqlStatement instanceof DropProcedureStatement;
......@@ -107,12 +107,12 @@ public final class ShardingRouteEngineFactory {
}
Collection<String> tableNames = sqlStatementContext.getTablesContext().getTableNames();
if (!tableNames.isEmpty() && !shardingRule.tableRuleExists(tableNames)) {
return new SingleTableRoutingEngine(tableNames, schema.getTableAddressingMetaData(), sqlStatement);
return new SingleTableRoutingEngine(tableNames, metaData.getSchema().getTableAddressingMetaData(), sqlStatement);
}
return new ShardingTableBroadcastRoutingEngine(schema.getSchemaMetaData(), sqlStatementContext);
return new ShardingTableBroadcastRoutingEngine(metaData.getSchema().getSchemaMetaData(), sqlStatementContext);
}
private static ShardingRouteEngine getDALRoutingEngine(final ShardingRule shardingRule, final ShardingSphereSchema schema,
private static ShardingRouteEngine getDALRoutingEngine(final ShardingRule shardingRule, final ShardingSphereMetaData metaData,
final SQLStatement sqlStatement, final Collection<String> tableNames) {
if (sqlStatement instanceof MySQLUseStatement) {
return new ShardingIgnoreRoutingEngine();
......@@ -121,7 +121,7 @@ public final class ShardingRouteEngineFactory {
return new ShardingDatabaseBroadcastRoutingEngine();
}
if (!tableNames.isEmpty() && !shardingRule.tableRuleExists(tableNames)) {
return new SingleTableRoutingEngine(tableNames, schema.getTableAddressingMetaData(), sqlStatement);
return new SingleTableRoutingEngine(tableNames, metaData.getSchema().getTableAddressingMetaData(), sqlStatement);
}
if (!tableNames.isEmpty()) {
return new ShardingUnicastRoutingEngine(tableNames);
......@@ -129,14 +129,14 @@ public final class ShardingRouteEngineFactory {
return new ShardingDataSourceGroupBroadcastRoutingEngine();
}
private static ShardingRouteEngine getDCLRoutingEngine(final ShardingRule shardingRule, final ShardingSphereSchema schema, final SQLStatementContext<?> sqlStatementContext) {
private static ShardingRouteEngine getDCLRoutingEngine(final ShardingRule shardingRule, final ShardingSphereMetaData metaData, final SQLStatementContext<?> sqlStatementContext) {
if (isDCLForSingleTable(sqlStatementContext)) {
Collection<String> tableNames = sqlStatementContext.getTablesContext().getTableNames();
return shardingRule.tableRuleExists(tableNames)
? new ShardingTableBroadcastRoutingEngine(schema.getSchemaMetaData(), sqlStatementContext)
: new SingleTableRoutingEngine(tableNames, schema.getTableAddressingMetaData(), sqlStatementContext.getSqlStatement());
? new ShardingTableBroadcastRoutingEngine(metaData.getSchema().getSchemaMetaData(), sqlStatementContext)
: new SingleTableRoutingEngine(tableNames, metaData.getSchema().getTableAddressingMetaData(), sqlStatementContext.getSqlStatement());
} else {
return new ShardingInstanceBroadcastRoutingEngine(schema.getDataSourcesMetaData());
return new ShardingInstanceBroadcastRoutingEngine(metaData.getResource().getDataSourcesMetaData());
}
}
......
......@@ -21,7 +21,7 @@ import org.apache.shardingsphere.infra.binder.segment.table.TablesContext;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.statement.dcl.GrantStatementContext;
import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
import org.apache.shardingsphere.infra.schema.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.schema.model.schema.physical.model.schema.PhysicalSchemaMetaData;
import org.apache.shardingsphere.sharding.route.engine.condition.ShardingConditions;
import org.apache.shardingsphere.sharding.route.engine.type.broadcast.ShardingDataSourceGroupBroadcastRoutingEngine;
......@@ -56,6 +56,7 @@ import org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl.
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
......@@ -75,8 +76,8 @@ public final class ShardingRouteEngineFactoryTest {
@Mock
private ShardingRule shardingRule;
@Mock
private ShardingSphereSchema schema;
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private ShardingSphereMetaData metaData;
@Mock
private SQLStatementContext sqlStatementContext;
......@@ -94,7 +95,7 @@ public final class ShardingRouteEngineFactoryTest {
@Before
public void setUp() {
when(sqlStatementContext.getTablesContext()).thenReturn(tablesContext);
when(schema.getSchemaMetaData()).thenReturn(mock(PhysicalSchemaMetaData.class));
when(metaData.getSchema().getSchemaMetaData()).thenReturn(mock(PhysicalSchemaMetaData.class));
tableNames = new ArrayList<>();
when(tablesContext.getTableNames()).thenReturn(tableNames);
}
......@@ -103,7 +104,7 @@ public final class ShardingRouteEngineFactoryTest {
public void assertNewInstanceForTCL() {
TCLStatement tclStatement = mock(TCLStatement.class);
when(sqlStatementContext.getSqlStatement()).thenReturn(tclStatement);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, schema, sqlStatementContext, shardingConditions, props);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, metaData, sqlStatementContext, shardingConditions, props);
assertThat(actual, instanceOf(ShardingDatabaseBroadcastRoutingEngine.class));
}
......@@ -112,7 +113,7 @@ public final class ShardingRouteEngineFactoryTest {
when(sqlStatementContext.getSqlStatement()).thenReturn(mock(DDLStatement.class));
when(sqlStatementContext.getTablesContext().getTableNames()).thenReturn(Collections.singletonList("tbl"));
when(shardingRule.tableRuleExists(sqlStatementContext.getTablesContext().getTableNames())).thenReturn(true);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, schema, sqlStatementContext, shardingConditions, props);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, metaData, sqlStatementContext, shardingConditions, props);
assertThat(actual, instanceOf(ShardingTableBroadcastRoutingEngine.class));
}
......@@ -121,7 +122,7 @@ public final class ShardingRouteEngineFactoryTest {
when(sqlStatementContext.getSqlStatement()).thenReturn(mock(DDLStatement.class));
when(sqlStatementContext.getTablesContext().getTableNames()).thenReturn(Collections.singletonList("tbl"));
when(shardingRule.tableRuleExists(sqlStatementContext.getTablesContext().getTableNames())).thenReturn(false);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, schema, sqlStatementContext, shardingConditions, props);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, metaData, sqlStatementContext, shardingConditions, props);
assertThat(actual, instanceOf(SingleTableRoutingEngine.class));
}
......@@ -131,7 +132,7 @@ public final class ShardingRouteEngineFactoryTest {
when(shardingRule.tableRuleExists(tableNames)).thenReturn(true);
DALStatement dalStatement = mock(DALStatement.class);
when(sqlStatementContext.getSqlStatement()).thenReturn(dalStatement);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, schema, sqlStatementContext, shardingConditions, props);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, metaData, sqlStatementContext, shardingConditions, props);
assertThat(actual, instanceOf(ShardingUnicastRoutingEngine.class));
}
......@@ -139,7 +140,7 @@ public final class ShardingRouteEngineFactoryTest {
public void assertNewInstanceForDALWithoutTables() {
DALStatement dalStatement = mock(DALStatement.class);
when(sqlStatementContext.getSqlStatement()).thenReturn(dalStatement);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, schema, sqlStatementContext, shardingConditions, props);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, metaData, sqlStatementContext, shardingConditions, props);
assertThat(actual, instanceOf(ShardingDataSourceGroupBroadcastRoutingEngine.class));
}
......@@ -147,7 +148,7 @@ public final class ShardingRouteEngineFactoryTest {
public void assertNewInstanceForDALShow() {
DALStatement dalStatement = mock(MySQLShowDatabasesStatement.class);
when(sqlStatementContext.getSqlStatement()).thenReturn(dalStatement);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, schema, sqlStatementContext, shardingConditions, props);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, metaData, sqlStatementContext, shardingConditions, props);
assertThat(actual, instanceOf(ShardingDatabaseBroadcastRoutingEngine.class));
}
......@@ -163,7 +164,7 @@ public final class ShardingRouteEngineFactoryTest {
private void assertNewInstanceForDALSet(final DALStatement dalStatement) {
when(sqlStatementContext.getSqlStatement()).thenReturn(dalStatement);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, schema, sqlStatementContext, shardingConditions, props);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, metaData, sqlStatementContext, shardingConditions, props);
assertThat(actual, instanceOf(ShardingDatabaseBroadcastRoutingEngine.class));
}
......@@ -201,14 +202,14 @@ public final class ShardingRouteEngineFactoryTest {
grantStatement.getTables().add(new SimpleTableSegment(0, 0, new IdentifierValue("tbl")));
GrantStatementContext sqlStatementContext = new GrantStatementContext(grantStatement);
when(shardingRule.tableRuleExists(sqlStatementContext.getTablesContext().getTableNames())).thenReturn(true);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, schema, sqlStatementContext, shardingConditions, props);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, metaData, sqlStatementContext, shardingConditions, props);
assertThat(actual, instanceOf(ShardingTableBroadcastRoutingEngine.class));
}
private void assertNewInstanceForDCLForSingleTableWithoutShardingRule(final GrantStatement grantStatement) {
grantStatement.getTables().add(new SimpleTableSegment(0, 0, new IdentifierValue("tbl")));
GrantStatementContext sqlStatementContext = new GrantStatementContext(grantStatement);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, schema, sqlStatementContext, shardingConditions, props);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, metaData, sqlStatementContext, shardingConditions, props);
assertThat(actual, instanceOf(ShardingTableBroadcastRoutingEngine.class));
}
......@@ -216,7 +217,7 @@ public final class ShardingRouteEngineFactoryTest {
public void assertNewInstanceForDCLForNoSingleTable() {
DCLStatement dclStatement = mock(DCLStatement.class);
when(sqlStatementContext.getSqlStatement()).thenReturn(dclStatement);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, schema, sqlStatementContext, shardingConditions, props);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, metaData, sqlStatementContext, shardingConditions, props);
assertThat(actual, instanceOf(ShardingInstanceBroadcastRoutingEngine.class));
}
......@@ -226,7 +227,7 @@ public final class ShardingRouteEngineFactoryTest {
when(shardingRule.tableRuleExists(tableNames)).thenReturn(false);
SQLStatement sqlStatement = mock(SQLStatement.class);
when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, schema, sqlStatementContext, shardingConditions, props);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, metaData, sqlStatementContext, shardingConditions, props);
assertThat(actual, instanceOf(SingleTableRoutingEngine.class));
}
......@@ -236,7 +237,7 @@ public final class ShardingRouteEngineFactoryTest {
when(shardingRule.tableRuleExists(tableNames)).thenReturn(false);
SQLStatement sqlStatement = mock(MySQLSelectStatement.class);
when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, schema, sqlStatementContext, shardingConditions, props);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, metaData, sqlStatementContext, shardingConditions, props);
assertThat(actual, instanceOf(SingleTableRoutingEngine.class));
}
......@@ -244,7 +245,7 @@ public final class ShardingRouteEngineFactoryTest {
public void assertNewInstanceForSelectWithoutSingleTable() {
SQLStatement sqlStatement = mock(MySQLSelectStatement.class);
when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, schema, sqlStatementContext, shardingConditions, props);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, metaData, sqlStatementContext, shardingConditions, props);
assertThat(actual, instanceOf(ShardingUnicastRoutingEngine.class));
}
......@@ -253,7 +254,7 @@ public final class ShardingRouteEngineFactoryTest {
when(shardingRule.isAllBroadcastTables(tableNames)).thenReturn(true);
SQLStatement sqlStatement = mock(InsertStatement.class);
when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, schema, sqlStatementContext, shardingConditions, props);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, metaData, sqlStatementContext, shardingConditions, props);
assertThat(actual, instanceOf(ShardingDatabaseBroadcastRoutingEngine.class));
}
......@@ -262,7 +263,7 @@ public final class ShardingRouteEngineFactoryTest {
when(shardingRule.isAllBroadcastTables(tableNames)).thenReturn(true);
SQLStatement sqlStatement = mock(MySQLSelectStatement.class);
when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, schema, sqlStatementContext, shardingConditions, props);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, metaData, sqlStatementContext, shardingConditions, props);
assertThat(actual, instanceOf(ShardingUnicastRoutingEngine.class));
}
......@@ -270,7 +271,7 @@ public final class ShardingRouteEngineFactoryTest {
public void assertNewInstanceForAlwaysFalse() {
SQLStatement sqlStatement = mock(SQLStatement.class);
when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, schema, sqlStatementContext, shardingConditions, props);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, metaData, sqlStatementContext, shardingConditions, props);
assertThat(actual, instanceOf(ShardingUnicastRoutingEngine.class));
}
......@@ -281,7 +282,7 @@ public final class ShardingRouteEngineFactoryTest {
tableNames.add("");
when(shardingRule.getShardingLogicTableNames(tableNames)).thenReturn(tableNames);
when(shardingRule.tableRuleExists(tableNames)).thenReturn(true);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, schema, sqlStatementContext, shardingConditions, props);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, metaData, sqlStatementContext, shardingConditions, props);
assertThat(actual, instanceOf(ShardingStandardRoutingEngine.class));
}
......@@ -293,7 +294,7 @@ public final class ShardingRouteEngineFactoryTest {
tableNames.add("2");
when(shardingRule.getShardingLogicTableNames(tableNames)).thenReturn(tableNames);
when(shardingRule.tableRuleExists(tableNames)).thenReturn(true);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, schema, sqlStatementContext, shardingConditions, props);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, metaData, sqlStatementContext, shardingConditions, props);
assertThat(actual, instanceOf(ShardingComplexRoutingEngine.class));
}
......@@ -303,7 +304,7 @@ public final class ShardingRouteEngineFactoryTest {
when(sqlStatementContext.getSqlStatement()).thenReturn(dalStatement);
when(shardingRule.tableRuleExists(tableNames)).thenReturn(true);
tableNames.add("table_1");
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, schema, sqlStatementContext, shardingConditions, props);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, metaData, sqlStatementContext, shardingConditions, props);
assertThat(actual, instanceOf(ShardingUnicastRoutingEngine.class));
}
......@@ -313,7 +314,7 @@ public final class ShardingRouteEngineFactoryTest {
when(sqlStatementContext.getSqlStatement()).thenReturn(dalStatement);
when(shardingRule.tableRuleExists(tableNames)).thenReturn(false);
tableNames.add("table_1");
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, schema, sqlStatementContext, shardingConditions, props);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, metaData, sqlStatementContext, shardingConditions, props);
assertThat(actual, instanceOf(SingleTableRoutingEngine.class));
}
......@@ -323,7 +324,7 @@ public final class ShardingRouteEngineFactoryTest {
when(sqlStatementContext.getSqlStatement()).thenReturn(dalStatement);
when(shardingRule.tableRuleExists(tableNames)).thenReturn(true);
tableNames.add("table_1");
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, schema, sqlStatementContext, shardingConditions, props);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, metaData, sqlStatementContext, shardingConditions, props);
assertThat(actual, instanceOf(ShardingUnicastRoutingEngine.class));
}
......@@ -333,7 +334,7 @@ public final class ShardingRouteEngineFactoryTest {
when(sqlStatementContext.getSqlStatement()).thenReturn(dalStatement);
when(shardingRule.tableRuleExists(tableNames)).thenReturn(false);
tableNames.add("table_1");
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, schema, sqlStatementContext, shardingConditions, props);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, metaData, sqlStatementContext, shardingConditions, props);
assertThat(actual, instanceOf(SingleTableRoutingEngine.class));
}
......
......@@ -20,9 +20,7 @@ package org.apache.shardingsphere.sharding.route.engine.type.standard;
import org.apache.shardingsphere.infra.binder.LogicSQL;
import org.apache.shardingsphere.infra.binder.SQLStatementContextFactory;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.config.DatabaseAccessConfiguration;
import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeRegistry;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
import org.apache.shardingsphere.infra.parser.sql.SQLStatementParserEngine;
......@@ -30,7 +28,6 @@ import org.apache.shardingsphere.infra.route.context.RouteContext;
import org.apache.shardingsphere.infra.route.engine.SQLRouteEngine;
import org.apache.shardingsphere.infra.schema.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.schema.model.addressing.TableAddressingMetaData;
import org.apache.shardingsphere.infra.schema.model.datasource.DataSourcesMetaData;
import org.apache.shardingsphere.infra.schema.model.schema.physical.model.column.PhysicalColumnMetaData;
import org.apache.shardingsphere.infra.schema.model.schema.physical.model.schema.PhysicalSchemaMetaData;
import org.apache.shardingsphere.infra.schema.model.schema.physical.model.table.PhysicalTableMetaData;
......@@ -56,7 +53,7 @@ public abstract class AbstractSQLRouteTest extends AbstractRoutingEngineTest {
ShardingRule shardingRule = createAllShardingRule();
TableAddressingMetaData tableAddressingMetaData = new TableAddressingMetaData();
tableAddressingMetaData.getTableDataSourceNamesMapper().put("t_category", Collections.singletonList("single_db"));
ShardingSphereSchema schema = new ShardingSphereSchema(buildDataSourceMetas(), tableAddressingMetaData, buildPhysicalSchemaMetaData());
ShardingSphereSchema schema = new ShardingSphereSchema(tableAddressingMetaData, buildPhysicalSchemaMetaData());
ConfigurationProperties props = new ConfigurationProperties(new Properties());
SQLStatementParserEngine sqlStatementParserEngine = new SQLStatementParserEngine("MySQL");
SQLStatementContext<?> sqlStatementContext = SQLStatementContextFactory.newInstance(schema.getSchemaMetaData(), parameters, sqlStatementParserEngine.parse(sql, false));
......@@ -68,17 +65,6 @@ public abstract class AbstractSQLRouteTest extends AbstractRoutingEngineTest {
return result;
}
private DataSourcesMetaData buildDataSourceMetas() {
Map<String, DatabaseAccessConfiguration> dataSourceInfoMap = new HashMap<>(3, 1);
DatabaseAccessConfiguration mainDatabaseAccessConfig = new DatabaseAccessConfiguration("jdbc:mysql://127.0.0.1:3306/actual_db", "test");
DatabaseAccessConfiguration databaseAccessConfiguration0 = new DatabaseAccessConfiguration("jdbc:mysql://127.0.0.1:3306/actual_db", "test");
DatabaseAccessConfiguration databaseAccessConfiguration1 = new DatabaseAccessConfiguration("jdbc:mysql://127.0.0.1:3306/actual_db", "test");
dataSourceInfoMap.put("main", mainDatabaseAccessConfig);
dataSourceInfoMap.put("ds_0", databaseAccessConfiguration0);
dataSourceInfoMap.put("ds_1", databaseAccessConfiguration1);
return new DataSourcesMetaData(DatabaseTypeRegistry.getActualDatabaseType("MySQL"), dataSourceInfoMap);
}
private PhysicalSchemaMetaData buildPhysicalSchemaMetaData() {
Map<String, PhysicalTableMetaData> tableMetaDataMap = new HashMap<>(3, 1);
tableMetaDataMap.put("t_order", new PhysicalTableMetaData(Arrays.asList(new PhysicalColumnMetaData("order_id", Types.INTEGER, "int", true, false, false),
......
......@@ -300,7 +300,7 @@ public final class GovernanceSchemaContexts implements SchemaContexts {
private ShardingSphereMetaData getChangedMetaData(final ShardingSphereMetaData oldMetaData, final PhysicalSchemaMetaData newSchemaMetaData, final String schemaName) {
// TODO refresh tableAddressingMetaData
ShardingSphereSchema schema = new ShardingSphereSchema(oldMetaData.getSchema().getDataSourcesMetaData(), oldMetaData.getSchema().getTableAddressingMetaData(), newSchemaMetaData);
ShardingSphereSchema schema = new ShardingSphereSchema(oldMetaData.getSchema().getTableAddressingMetaData(), newSchemaMetaData);
return new ShardingSphereMetaData(schemaName, oldMetaData.getConfigurations(), oldMetaData.getRules(), oldMetaData.getResource(), schema);
}
......
......@@ -20,7 +20,6 @@ package org.apache.shardingsphere.infra.schema.model;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.schema.model.addressing.TableAddressingMetaData;
import org.apache.shardingsphere.infra.schema.model.datasource.DataSourcesMetaData;
import org.apache.shardingsphere.infra.schema.model.schema.physical.model.schema.PhysicalSchemaMetaData;
/**
......@@ -30,8 +29,6 @@ import org.apache.shardingsphere.infra.schema.model.schema.physical.model.schema
@Getter
public final class ShardingSphereSchema {
private final DataSourcesMetaData dataSourcesMetaData;
private final TableAddressingMetaData tableAddressingMetaData;
private final PhysicalSchemaMetaData schemaMetaData;
......
......@@ -44,7 +44,7 @@ public abstract class AbstractMetaDataRefreshStrategyTest {
private ShardingSphereSchema buildSchema() {
PhysicalSchemaMetaData schemaMetaData = new PhysicalSchemaMetaData(ImmutableMap.of("t_order", new PhysicalTableMetaData(
Collections.singletonList(new PhysicalColumnMetaData("order_id", 1, "String", false, false, false)), Collections.singletonList(new PhysicalIndexMetaData("index")))));
return new ShardingSphereSchema(null, mock(TableAddressingMetaData.class), schemaMetaData);
return new ShardingSphereSchema(mock(TableAddressingMetaData.class), schemaMetaData);
}
}
......@@ -132,10 +132,9 @@ public final class SchemaContextsBuilder {
private ShardingSphereSchema buildSchema(final String schemaName, final Map<String, DataSource> dataSourceMap, final Collection<ShardingSphereRule> rules) throws SQLException {
long start = System.currentTimeMillis();
DataSourcesMetaData dataSourceMetas = new DataSourcesMetaData(databaseType, getDatabaseAccessConfigurationMap(dataSourceMap));
TableAddressingMetaData tableAddressingMetaData = TableAddressingMetaDataLoader.load(databaseType, dataSourceMap, rules);
PhysicalSchemaMetaData physicalSchemaMetaData = new SchemaMetaDataLoader(rules).load(databaseType, dataSourceMap, props);
ShardingSphereSchema result = new ShardingSphereSchema(dataSourceMetas, tableAddressingMetaData, physicalSchemaMetaData);
ShardingSphereSchema result = new ShardingSphereSchema(tableAddressingMetaData, physicalSchemaMetaData);
log.info("Load meta data for schema {} finished, cost {} milliseconds.", schemaName, System.currentTimeMillis() - start);
return result;
}
......
......@@ -59,7 +59,7 @@ public final class ExecutionContextBuilderTest {
String firstDataSourceName = "firstDataSourceName";
when(dataSourcesMetaData.getAllInstanceDataSourceNames()).thenReturn(Arrays.asList(firstDataSourceName, "lastDataSourceName"));
ShardingSphereResource resource = new ShardingSphereResource(Collections.emptyMap(), dataSourcesMetaData, mock(CachedDatabaseMetaData.class));
ShardingSphereSchema schema = new ShardingSphereSchema(dataSourcesMetaData, mock(TableAddressingMetaData.class), buildPhysicalSchemaMetaData());
ShardingSphereSchema schema = new ShardingSphereSchema(mock(TableAddressingMetaData.class), buildPhysicalSchemaMetaData());
ShardingSphereMetaData metaData = new ShardingSphereMetaData("name", Collections.emptyList(), Collections.emptyList(), resource, schema);
Collection<ExecutionUnit> actual = ExecutionContextBuilder.build(metaData, genericSQLRewriteResult, mock(SQLStatementContext.class));
Collection<ExecutionUnit> expected = Collections.singletonList(new ExecutionUnit(firstDataSourceName, new SQLUnit(sql, parameters)));
......@@ -76,8 +76,7 @@ public final class ExecutionContextBuilderTest {
sqlRewriteUnits.put(routeUnit1, sqlRewriteUnit1);
sqlRewriteUnits.put(routeUnit2, sqlRewriteUnit2);
ShardingSphereResource resource = new ShardingSphereResource(Collections.emptyMap(), mock(DataSourcesMetaData.class), mock(CachedDatabaseMetaData.class));
ShardingSphereSchema schema = new ShardingSphereSchema(
mock(DataSourcesMetaData.class), mock(TableAddressingMetaData.class), buildPhysicalSchemaMetaData());
ShardingSphereSchema schema = new ShardingSphereSchema(mock(TableAddressingMetaData.class), buildPhysicalSchemaMetaData());
ShardingSphereMetaData metaData = new ShardingSphereMetaData("name", Collections.emptyList(), Collections.emptyList(), resource, schema);
Collection<ExecutionUnit> actual = ExecutionContextBuilder.build(metaData, new RouteSQLRewriteResult(sqlRewriteUnits), mock(SQLStatementContext.class));
ExecutionUnit expectedUnit1 = new ExecutionUnit("actualName1", new SQLUnit("sql1", Collections.singletonList("parameter1")));
......@@ -96,7 +95,7 @@ public final class ExecutionContextBuilderTest {
Map<RouteUnit, SQLRewriteUnit> sqlRewriteUnits = new HashMap<>(2, 1);
sqlRewriteUnits.put(routeUnit2, sqlRewriteUnit2);
ShardingSphereResource resource = new ShardingSphereResource(Collections.emptyMap(), mock(DataSourcesMetaData.class), mock(CachedDatabaseMetaData.class));
ShardingSphereSchema schema = new ShardingSphereSchema(mock(DataSourcesMetaData.class), mock(TableAddressingMetaData.class), buildPhysicalSchemaMetaDataWithoutPrimaryKey());
ShardingSphereSchema schema = new ShardingSphereSchema(mock(TableAddressingMetaData.class), buildPhysicalSchemaMetaDataWithoutPrimaryKey());
ShardingSphereMetaData metaData = new ShardingSphereMetaData("name", Collections.emptyList(), Collections.emptyList(), resource, schema);
Collection<ExecutionUnit> actual = ExecutionContextBuilder.build(metaData, new RouteSQLRewriteResult(sqlRewriteUnits), mock(SQLStatementContext.class));
ExecutionUnit expectedUnit2 = new ExecutionUnit("actualName2", new SQLUnit("sql2", Collections.singletonList("parameter2")));
......
......@@ -22,9 +22,9 @@ import org.apache.shardingsphere.driver.jdbc.adapter.AbstractConnectionAdapter;
import org.apache.shardingsphere.driver.jdbc.adapter.AdaptedDatabaseMetaData;
import org.apache.shardingsphere.driver.jdbc.core.resultset.DatabaseMetaDataResultSet;
import org.apache.shardingsphere.infra.database.DefaultSchema;
import org.apache.shardingsphere.infra.schema.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.rule.DataNodeRoutedRule;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.schema.model.datasource.DataSourcesMetaData;
import java.security.SecureRandom;
import java.sql.Connection;
......@@ -48,7 +48,7 @@ public final class ShardingSphereDatabaseMetaData extends AdaptedDatabaseMetaDat
private final Collection<String> datasourceNames;
private final ShardingSphereSchema schema;
private final DataSourcesMetaData dataSourcesMetaData;
private final Random random = new SecureRandom();
......@@ -61,7 +61,7 @@ public final class ShardingSphereDatabaseMetaData extends AdaptedDatabaseMetaDat
this.connection = connection;
rules = connection.getSchemaContexts().getDefaultMetaData().getRules();
datasourceNames = connection.getDataSourceMap().keySet();
schema = connection.getSchemaContexts().getDefaultMetaData().getSchema();
dataSourcesMetaData = connection.getSchemaContexts().getDefaultMetaData().getResource().getDataSourcesMetaData();
}
@Override
......@@ -232,11 +232,11 @@ public final class ShardingSphereDatabaseMetaData extends AdaptedDatabaseMetaDat
}
private String getActualCatalog(final String catalog) {
return null != catalog && catalog.contains(DefaultSchema.LOGIC_NAME) ? schema.getDataSourcesMetaData().getDataSourceMetaData(getDataSourceName()).getCatalog() : catalog;
return null != catalog && catalog.contains(DefaultSchema.LOGIC_NAME) ? dataSourcesMetaData.getDataSourceMetaData(getDataSourceName()).getCatalog() : catalog;
}
private String getActualSchema(final String schema) {
return null != schema && schema.contains(DefaultSchema.LOGIC_NAME) ? this.schema.getDataSourcesMetaData().getDataSourceMetaData(getDataSourceName()).getSchema() : schema;
return null != schema && schema.contains(DefaultSchema.LOGIC_NAME) ? dataSourcesMetaData.getDataSourceMetaData(getDataSourceName()).getSchema() : schema;
}
private String getDataSourceName() {
......
......@@ -42,6 +42,7 @@ import java.util.Optional;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
......@@ -126,7 +127,7 @@ public final class QueryHeaderBuilderTest {
}
private ShardingSphereMetaData createMetaData() {
ShardingSphereMetaData result = mock(ShardingSphereMetaData.class);
ShardingSphereMetaData result = mock(ShardingSphereMetaData.class, RETURNS_DEEP_STUBS);
PhysicalColumnMetaData columnMetaData = new PhysicalColumnMetaData("order_id", Types.INTEGER, "int", true, false, false);
PhysicalSchemaMetaData schemaMetaData = mock(PhysicalSchemaMetaData.class);
when(schemaMetaData.get("t_logic_order")).thenReturn(new PhysicalTableMetaData(Collections.singletonList(columnMetaData), Collections.singletonList(new PhysicalIndexMetaData("order_id"))));
......@@ -134,7 +135,7 @@ public final class QueryHeaderBuilderTest {
when(schema.getSchemaMetaData()).thenReturn(schemaMetaData);
DataSourcesMetaData dataSourcesMetaData = mock(DataSourcesMetaData.class);
when(dataSourcesMetaData.getDataSourceMetaData("ds_0")).thenReturn(mock(DataSourceMetaData.class));
when(schema.getDataSourcesMetaData()).thenReturn(dataSourcesMetaData);
when(result.getResource().getDataSourcesMetaData()).thenReturn(dataSourcesMetaData);
when(result.getSchema()).thenReturn(schema);
ShardingRule shardingRule = mock(ShardingRule.class);
when(shardingRule.findLogicTableByActualTable("t_order")).thenReturn(Optional.of("t_logic_order"));
......
......@@ -29,7 +29,6 @@ import org.apache.shardingsphere.infra.hint.HintManager;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.schema.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.schema.model.addressing.TableAddressingMetaData;
import org.apache.shardingsphere.infra.schema.model.datasource.DataSourcesMetaData;
import org.apache.shardingsphere.infra.schema.model.schema.physical.model.schema.PhysicalSchemaMetaData;
import org.apache.shardingsphere.infra.schema.model.schema.physical.model.table.PhysicalTableMetaData;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
......@@ -205,8 +204,7 @@ public final class ShardingCTLHintBackendHandlerTest {
private Map<String, ShardingSphereMetaData> getMetaDataMap() {
ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class);
when(metaData.getSchema()).thenReturn(new ShardingSphereSchema(mock(DataSourcesMetaData.class), mock(TableAddressingMetaData.class),
new PhysicalSchemaMetaData(ImmutableMap.of("user", mock(PhysicalTableMetaData.class)))));
when(metaData.getSchema()).thenReturn(new ShardingSphereSchema(mock(TableAddressingMetaData.class), new PhysicalSchemaMetaData(ImmutableMap.of("user", mock(PhysicalTableMetaData.class)))));
when(metaData.isComplete()).thenReturn(true);
return Collections.singletonMap("schema", metaData);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册