diff --git a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/SQLRouteCountAdviceTest.java b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/SQLRouteCountAdviceTest.java index b2739baf92122..a2c00bc5915a3 100644 --- a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/SQLRouteCountAdviceTest.java +++ b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/SQLRouteCountAdviceTest.java @@ -24,6 +24,7 @@ import org.apache.shardingsphere.agent.plugin.metrics.core.fixture.collector.MetricsCollectorFixture; import org.apache.shardingsphere.infra.binder.context.statement.UnknownSQLStatementContext; import org.apache.shardingsphere.infra.hint.HintValueContext; +import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; import org.apache.shardingsphere.infra.session.connection.ConnectionContext; import org.apache.shardingsphere.infra.session.query.QueryContext; import org.apache.shardingsphere.sql.parser.statement.mysql.dml.MySQLDeleteStatement; @@ -53,25 +54,29 @@ void reset() { @Test void assertInsertRoute() { - QueryContext queryContext = new QueryContext(new UnknownSQLStatementContext(new MySQLInsertStatement()), "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(new UnknownSQLStatementContext(new MySQLInsertStatement()), "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), + mock(ShardingSphereMetaData.class)); assertRoute(queryContext, "INSERT=1"); } @Test void assertUpdateRoute() { - QueryContext queryContext = new QueryContext(new UnknownSQLStatementContext(new MySQLUpdateStatement()), "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(new UnknownSQLStatementContext(new MySQLUpdateStatement()), "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), + mock(ShardingSphereMetaData.class)); assertRoute(queryContext, "UPDATE=1"); } @Test void assertDeleteRoute() { - QueryContext queryContext = new QueryContext(new UnknownSQLStatementContext(new MySQLDeleteStatement()), "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(new UnknownSQLStatementContext(new MySQLDeleteStatement()), "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), + mock(ShardingSphereMetaData.class)); assertRoute(queryContext, "DELETE=1"); } @Test void assertSelectRoute() { - QueryContext queryContext = new QueryContext(new UnknownSQLStatementContext(new MySQLSelectStatement()), "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(new UnknownSQLStatementContext(new MySQLSelectStatement()), "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), + mock(ShardingSphereMetaData.class)); assertRoute(queryContext, "SELECT=1"); } diff --git a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/BroadcastSqlRouterTest.java b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/BroadcastSqlRouterTest.java index d90a436e76a4b..64ae094e2f1d7 100644 --- a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/BroadcastSqlRouterTest.java +++ b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/BroadcastSqlRouterTest.java @@ -27,6 +27,7 @@ import org.apache.shardingsphere.infra.datanode.DataNode; import org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties; import org.apache.shardingsphere.infra.hint.HintValueContext; +import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; import org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNode; import org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit; @@ -132,7 +133,8 @@ private ShardingSphereDatabase mockSingleDatabase() { private QueryContext createQueryContext() { CreateTableStatement createTableStatement = new MySQLCreateTableStatement(false); createTableStatement.setTable(new SimpleTableSegment(new TableNameSegment(1, 2, new IdentifierValue("t_order")))); - return new QueryContext(new CreateTableStatementContext(createTableStatement, DefaultDatabase.LOGIC_NAME), "CREATE TABLE", new LinkedList<>(), new HintValueContext()); + return new QueryContext(new CreateTableStatementContext(createTableStatement, DefaultDatabase.LOGIC_NAME), "CREATE TABLE", new LinkedList<>(), new HintValueContext(), + mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); } private Map createMultiDataSourceMap() throws SQLException { diff --git a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingSQLRouterTest.java b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingSQLRouterTest.java index aa25e6f850cff..17270567f7ea7 100644 --- a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingSQLRouterTest.java +++ b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingSQLRouterTest.java @@ -24,6 +24,7 @@ import org.apache.shardingsphere.infra.database.core.type.DatabaseType; import org.apache.shardingsphere.infra.hint.HintValueContext; import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext; +import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; import org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData; import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData; @@ -84,7 +85,8 @@ void setUp() { @Test void assertDecorateRouteContextToPrimaryDataSource() { RouteContext actual = mockRouteContext(); - QueryContext queryContext = new QueryContext(mock(SQLStatementContext.class), "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = + new QueryContext(mock(SQLStatementContext.class), "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); RuleMetaData ruleMetaData = new RuleMetaData(Collections.singleton(staticRule)); ShardingSphereDatabase database = new ShardingSphereDatabase(DefaultDatabase.LOGIC_NAME, mock(DatabaseType.class), mock(ResourceMetaData.class, RETURNS_DEEP_STUBS), ruleMetaData, Collections.emptyMap()); @@ -100,7 +102,7 @@ void assertDecorateRouteContextToReplicaDataSource() { MySQLSelectStatement selectStatement = mock(MySQLSelectStatement.class); when(sqlStatementContext.getSqlStatement()).thenReturn(selectStatement); when(selectStatement.getLock()).thenReturn(Optional.empty()); - QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); RuleMetaData ruleMetaData = new RuleMetaData(Collections.singleton(staticRule)); ShardingSphereDatabase database = new ShardingSphereDatabase(DefaultDatabase.LOGIC_NAME, mock(DatabaseType.class), mock(ResourceMetaData.class, RETURNS_DEEP_STUBS), ruleMetaData, Collections.emptyMap()); @@ -116,7 +118,7 @@ void assertDecorateRouteContextToPrimaryDataSourceWithLock() { MySQLSelectStatement selectStatement = mock(MySQLSelectStatement.class); when(sqlStatementContext.getSqlStatement()).thenReturn(selectStatement); when(selectStatement.getLock()).thenReturn(Optional.of(mock(LockSegment.class))); - QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); RuleMetaData ruleMetaData = new RuleMetaData(Collections.singleton(staticRule)); ShardingSphereDatabase database = new ShardingSphereDatabase(DefaultDatabase.LOGIC_NAME, mock(DatabaseType.class), mock(ResourceMetaData.class, RETURNS_DEEP_STUBS), ruleMetaData, Collections.emptyMap()); diff --git a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/route/engine/ShadowRouteEngineFactoryTest.java b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/route/engine/ShadowRouteEngineFactoryTest.java index a3165afc63169..b297858e7583f 100644 --- a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/route/engine/ShadowRouteEngineFactoryTest.java +++ b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/route/engine/ShadowRouteEngineFactoryTest.java @@ -18,6 +18,8 @@ package org.apache.shardingsphere.shadow.route.engine; import org.apache.shardingsphere.infra.hint.HintValueContext; +import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; +import org.apache.shardingsphere.infra.session.connection.ConnectionContext; import org.apache.shardingsphere.infra.session.query.QueryContext; import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext; import org.apache.shardingsphere.infra.binder.context.statement.dml.DeleteStatementContext; @@ -46,13 +48,17 @@ class ShadowRouteEngineFactoryTest { @Test void assertNewInstance() { - ShadowRouteEngine shadowInsertRouteEngine = ShadowRouteEngineFactory.newInstance(new QueryContext(createInsertSqlStatementContext(), "", Collections.emptyList(), new HintValueContext())); + ShadowRouteEngine shadowInsertRouteEngine = ShadowRouteEngineFactory.newInstance( + new QueryContext(createInsertSqlStatementContext(), "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class))); assertThat(shadowInsertRouteEngine, instanceOf(ShadowInsertStatementRoutingEngine.class)); - ShadowRouteEngine shadowUpdateRouteEngine = ShadowRouteEngineFactory.newInstance(new QueryContext(createUpdateSqlStatementContext(), "", Collections.emptyList(), new HintValueContext())); + ShadowRouteEngine shadowUpdateRouteEngine = ShadowRouteEngineFactory.newInstance( + new QueryContext(createUpdateSqlStatementContext(), "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class))); assertThat(shadowUpdateRouteEngine, instanceOf(ShadowUpdateStatementRoutingEngine.class)); - ShadowRouteEngine shadowDeleteRouteEngine = ShadowRouteEngineFactory.newInstance(new QueryContext(createDeleteSqlStatementContext(), "", Collections.emptyList(), new HintValueContext())); + ShadowRouteEngine shadowDeleteRouteEngine = ShadowRouteEngineFactory.newInstance( + new QueryContext(createDeleteSqlStatementContext(), "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class))); assertThat(shadowDeleteRouteEngine, instanceOf(ShadowDeleteStatementRoutingEngine.class)); - ShadowRouteEngine shadowSelectRouteEngine = ShadowRouteEngineFactory.newInstance(new QueryContext(createSelectSqlStatementContext(), "", Collections.emptyList(), new HintValueContext())); + ShadowRouteEngine shadowSelectRouteEngine = ShadowRouteEngineFactory.newInstance( + new QueryContext(createSelectSqlStatementContext(), "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class))); assertThat(shadowSelectRouteEngine, instanceOf(ShadowSelectStatementRoutingEngine.class)); } diff --git a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/auditor/ShardingSQLAuditorTest.java b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/auditor/ShardingSQLAuditorTest.java index 8e1d5f9ed1180..57efb794450c2 100644 --- a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/auditor/ShardingSQLAuditorTest.java +++ b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/auditor/ShardingSQLAuditorTest.java @@ -20,8 +20,10 @@ import org.apache.shardingsphere.infra.binder.context.statement.CommonSQLStatementContext; import org.apache.shardingsphere.infra.binder.context.type.TableAvailable; import org.apache.shardingsphere.infra.hint.HintValueContext; +import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData; +import org.apache.shardingsphere.infra.session.connection.ConnectionContext; import org.apache.shardingsphere.infra.session.query.QueryContext; import org.apache.shardingsphere.sharding.api.config.strategy.audit.ShardingAuditStrategyConfiguration; import org.apache.shardingsphere.sharding.exception.audit.DMLWithoutShardingKeyException; @@ -79,7 +81,8 @@ void setUp() { @Test void assertCheckSuccess() { RuleMetaData globalRuleMetaData = mock(RuleMetaData.class); - new ShardingSQLAuditor().audit(new QueryContext(sqlStatementContext, "", Collections.emptyList(), hintValueContext), globalRuleMetaData, databases.get("foo_db"), rule); + new ShardingSQLAuditor().audit(new QueryContext(sqlStatementContext, "", Collections.emptyList(), hintValueContext, mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)), + globalRuleMetaData, databases.get("foo_db"), rule); verify(rule.getAuditors().get("auditor_1")).check(sqlStatementContext, Collections.emptyList(), globalRuleMetaData, databases.get("foo_db")); } @@ -87,7 +90,8 @@ void assertCheckSuccess() { void assertCheckSuccessByDisableAuditNames() { when(auditStrategy.isAllowHintDisable()).thenReturn(true); RuleMetaData globalRuleMetaData = mock(RuleMetaData.class); - new ShardingSQLAuditor().audit(new QueryContext(sqlStatementContext, "", Collections.emptyList(), hintValueContext), globalRuleMetaData, databases.get("foo_db"), rule); + new ShardingSQLAuditor().audit(new QueryContext(sqlStatementContext, "", Collections.emptyList(), hintValueContext, mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)), + globalRuleMetaData, databases.get("foo_db"), rule); verify(rule.getAuditors().get("auditor_1"), times(0)).check(sqlStatementContext, Collections.emptyList(), globalRuleMetaData, databases.get("foo_db")); } @@ -97,7 +101,8 @@ void assertCheckFailed() { RuleMetaData globalRuleMetaData = mock(RuleMetaData.class); doThrow(new DMLWithoutShardingKeyException()).when(auditAlgorithm).check(sqlStatementContext, Collections.emptyList(), globalRuleMetaData, databases.get("foo_db")); DMLWithoutShardingKeyException ex = assertThrows(DMLWithoutShardingKeyException.class, () -> new ShardingSQLAuditor().audit( - new QueryContext(sqlStatementContext, "", Collections.emptyList(), hintValueContext), globalRuleMetaData, databases.get("foo_db"), rule)); + new QueryContext(sqlStatementContext, "", Collections.emptyList(), hintValueContext, mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)), globalRuleMetaData, + databases.get("foo_db"), rule)); assertThat(ex.getMessage(), is("Not allow DML operation without sharding conditions.")); verify(rule.getAuditors().get("auditor_1")).check(sqlStatementContext, Collections.emptyList(), globalRuleMetaData, databases.get("foo_db")); } diff --git a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/cache/checker/ShardingRouteCacheableCheckerTest.java b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/cache/checker/ShardingRouteCacheableCheckerTest.java index c12e5476e43d8..8ccf9fd8ed718 100644 --- a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/cache/checker/ShardingRouteCacheableCheckerTest.java +++ b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/cache/checker/ShardingRouteCacheableCheckerTest.java @@ -34,6 +34,7 @@ import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable; import org.apache.shardingsphere.infra.parser.sql.SQLStatementParserEngine; +import org.apache.shardingsphere.infra.session.connection.ConnectionContext; import org.apache.shardingsphere.infra.session.query.QueryContext; import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader; import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration; @@ -145,7 +146,7 @@ private ShardingSphereDatabase createDatabase(final ShardingRule shardingRule, f private QueryContext createQueryContext(final ShardingSphereDatabase database, final String sql, final List params) { SQLStatementContext sqlStatementContext = new SQLBindEngine(createShardingSphereMetaData(database), DATABASE_NAME, new HintValueContext()).bind(parse(sql), params); - return new QueryContext(sqlStatementContext, sql, params, new HintValueContext()); + return new QueryContext(sqlStatementContext, sql, params, new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); } private ShardingSphereMetaData createShardingSphereMetaData(final ShardingSphereDatabase database) { diff --git a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/cache/route/CachedShardingSQLRouterTest.java b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/cache/route/CachedShardingSQLRouterTest.java index 1871eaccad834..6f05f0ae553bb 100644 --- a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/cache/route/CachedShardingSQLRouterTest.java +++ b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/cache/route/CachedShardingSQLRouterTest.java @@ -20,10 +20,12 @@ import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext; import org.apache.shardingsphere.infra.datanode.DataNode; import org.apache.shardingsphere.infra.hint.HintValueContext; +import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData; import org.apache.shardingsphere.infra.route.context.RouteContext; import org.apache.shardingsphere.infra.route.context.RouteMapper; import org.apache.shardingsphere.infra.route.context.RouteUnit; +import org.apache.shardingsphere.infra.session.connection.ConnectionContext; import org.apache.shardingsphere.infra.session.query.QueryContext; import org.apache.shardingsphere.sharding.api.config.cache.ShardingCacheConfiguration; import org.apache.shardingsphere.sharding.cache.ShardingCache; @@ -65,14 +67,16 @@ class CachedShardingSQLRouterTest { @Test void assertCreateRouteContextWithSQLExceedMaxAllowedLength() { when(shardingCache.getConfiguration()).thenReturn(new ShardingCacheConfiguration(1, null)); - QueryContext queryContext = new QueryContext(sqlStatementContext, "select 1", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = + new QueryContext(sqlStatementContext, "select 1", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); Optional actual = new CachedShardingSQLRouter().loadRouteContext(null, queryContext, mock(RuleMetaData.class), null, shardingCache, null, null); assertFalse(actual.isPresent()); } @Test void assertCreateRouteContextWithNotCacheableQuery() { - QueryContext queryContext = new QueryContext(sqlStatementContext, "insert into t values (?), (?)", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, "insert into t values (?), (?)", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), + mock(ShardingSphereMetaData.class)); when(shardingCache.getConfiguration()).thenReturn(new ShardingCacheConfiguration(100, null)); when(shardingCache.getRouteCacheableChecker()).thenReturn(mock(ShardingRouteCacheableChecker.class)); when(shardingCache.getRouteCacheableChecker().check(null, queryContext)).thenReturn(new ShardingRouteCacheableCheckResult(false, Collections.emptyList())); @@ -82,7 +86,8 @@ void assertCreateRouteContextWithNotCacheableQuery() { @Test void assertCreateRouteContextWithUnmatchedActualParameterSize() { - QueryContext queryContext = new QueryContext(sqlStatementContext, "insert into t values (?, ?)", Collections.singletonList(0), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, "insert into t values (?, ?)", Collections.singletonList(0), new HintValueContext(), mock(ConnectionContext.class), + mock(ShardingSphereMetaData.class)); when(shardingCache.getConfiguration()).thenReturn(new ShardingCacheConfiguration(100, null)); when(shardingCache.getRouteCacheableChecker()).thenReturn(mock(ShardingRouteCacheableChecker.class)); when(shardingCache.getRouteCacheableChecker().check(null, queryContext)).thenReturn(new ShardingRouteCacheableCheckResult(true, Collections.singletonList(1))); @@ -92,7 +97,8 @@ void assertCreateRouteContextWithUnmatchedActualParameterSize() { @Test void assertCreateRouteContextWithCacheableQueryButCacheMissed() { - QueryContext queryContext = new QueryContext(sqlStatementContext, "insert into t values (?, ?)", Arrays.asList(0, 1), new HintValueContext()); + QueryContext queryContext = + new QueryContext(sqlStatementContext, "insert into t values (?, ?)", Arrays.asList(0, 1), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); when(shardingCache.getConfiguration()).thenReturn(new ShardingCacheConfiguration(100, null)); when(shardingCache.getRouteCacheableChecker()).thenReturn(mock(ShardingRouteCacheableChecker.class)); when(shardingCache.getRouteCacheableChecker().check(null, queryContext)).thenReturn(new ShardingRouteCacheableCheckResult(true, Collections.singletonList(1))); @@ -110,7 +116,8 @@ void assertCreateRouteContextWithCacheableQueryButCacheMissed() { @Test void assertCreateRouteContextWithCacheHit() { - QueryContext queryContext = new QueryContext(sqlStatementContext, "insert into t values (?, ?)", Arrays.asList(0, 1), new HintValueContext()); + QueryContext queryContext = + new QueryContext(sqlStatementContext, "insert into t values (?, ?)", Arrays.asList(0, 1), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); when(shardingCache.getConfiguration()).thenReturn(new ShardingCacheConfiguration(100, null)); when(shardingCache.getRouteCacheableChecker()).thenReturn(mock(ShardingRouteCacheableChecker.class)); when(shardingCache.getRouteCacheableChecker().check(null, queryContext)).thenReturn(new ShardingRouteCacheableCheckResult(true, Collections.singletonList(1))); @@ -129,7 +136,8 @@ void assertCreateRouteContextWithCacheHit() { @Test void assertCreateRouteContextWithQueryRoutedToMultiDataNodes() { - QueryContext queryContext = new QueryContext(sqlStatementContext, "select * from t", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = + new QueryContext(sqlStatementContext, "select * from t", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); when(shardingCache.getConfiguration()).thenReturn(new ShardingCacheConfiguration(100, null)); when(shardingCache.getRouteCacheableChecker()).thenReturn(mock(ShardingRouteCacheableChecker.class)); when(shardingCache.getRouteCacheableChecker().check(null, queryContext)).thenReturn(new ShardingRouteCacheableCheckResult(true, Collections.emptyList())); diff --git a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/ShardingRouteEngineFactoryTest.java b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/ShardingRouteEngineFactoryTest.java index 97af7e0add7e3..2da5d47101b73 100644 --- a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/ShardingRouteEngineFactoryTest.java +++ b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/ShardingRouteEngineFactoryTest.java @@ -27,6 +27,7 @@ import org.apache.shardingsphere.infra.config.props.ConfigurationProperties; import org.apache.shardingsphere.infra.database.core.DefaultDatabase; import org.apache.shardingsphere.infra.hint.HintValueContext; +import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema; import org.apache.shardingsphere.infra.session.connection.ConnectionContext; @@ -123,7 +124,7 @@ void setUp() { void assertNewInstanceForTCL() { TCLStatement tclStatement = mock(TCLStatement.class); when(sqlStatementContext.getSqlStatement()).thenReturn(tclStatement); - QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, database, queryContext, shardingConditions, props, new ConnectionContext(Collections::emptySet)); assertThat(actual, instanceOf(ShardingDatabaseBroadcastRoutingEngine.class)); @@ -132,7 +133,7 @@ void assertNewInstanceForTCL() { @Test void assertNewInstanceForDDLWithShardingRule() { when(sqlStatementContext.getSqlStatement()).thenReturn(mock(DDLStatement.class)); - QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, database, queryContext, shardingConditions, props, new ConnectionContext(Collections::emptySet)); assertThat(actual, instanceOf(ShardingTableBroadcastRoutingEngine.class)); } @@ -143,7 +144,7 @@ void assertNewInstanceForDALWithTables() { when(shardingRule.getShardingRuleTableNames(tableNames)).thenReturn(tableNames); DALStatement dalStatement = mock(DALStatement.class); when(sqlStatementContext.getSqlStatement()).thenReturn(dalStatement); - QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, database, queryContext, shardingConditions, props, new ConnectionContext(Collections::emptySet)); assertThat(actual, instanceOf(ShardingUnicastRoutingEngine.class)); @@ -153,7 +154,7 @@ void assertNewInstanceForDALWithTables() { void assertNewInstanceForDALWithoutTables() { DALStatement dalStatement = mock(DALStatement.class); when(sqlStatementContext.getSqlStatement()).thenReturn(dalStatement); - QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, database, queryContext, shardingConditions, props, new ConnectionContext(Collections::emptySet)); assertThat(actual, instanceOf(ShardingDataSourceGroupBroadcastRoutingEngine.class)); @@ -163,7 +164,7 @@ void assertNewInstanceForDALWithoutTables() { void assertNewInstanceForDALShow() { DALStatement dalStatement = mock(MySQLShowDatabasesStatement.class); when(sqlStatementContext.getSqlStatement()).thenReturn(dalStatement); - QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, database, queryContext, shardingConditions, props, new ConnectionContext(Collections::emptySet)); assertThat(actual, instanceOf(ShardingDatabaseBroadcastRoutingEngine.class)); @@ -181,7 +182,7 @@ void assertNewInstanceForDALSetForPostgreSQL() { private void assertNewInstanceForDALSet(final DALStatement dalStatement) { when(sqlStatementContext.getSqlStatement()).thenReturn(dalStatement); - QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, database, queryContext, shardingConditions, props, new ConnectionContext(Collections::emptySet)); assertThat(actual, instanceOf(ShardingDatabaseBroadcastRoutingEngine.class)); @@ -220,7 +221,7 @@ void assertNewInstanceForDCLForSingleTableForSQL92() { private void assertNewInstanceForDCLForSingleTableWithShardingRule(final GrantStatement grantStatement) { grantStatement.getTables().add(new SimpleTableSegment(new TableNameSegment(0, 0, new IdentifierValue("tbl")))); GrantStatementContext sqlStatementContext = new GrantStatementContext(grantStatement, DefaultDatabase.LOGIC_NAME); - QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, database, queryContext, shardingConditions, props, new ConnectionContext(Collections::emptySet)); assertThat(actual, instanceOf(ShardingIgnoreRoutingEngine.class)); @@ -229,7 +230,7 @@ private void assertNewInstanceForDCLForSingleTableWithShardingRule(final GrantSt private void assertNewInstanceForDCLForSingleTableWithoutShardingRule(final GrantStatement grantStatement) { grantStatement.getTables().add(new SimpleTableSegment(new TableNameSegment(0, 0, new IdentifierValue("tbl")))); GrantStatementContext sqlStatementContext = new GrantStatementContext(grantStatement, DefaultDatabase.LOGIC_NAME); - QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, database, queryContext, shardingConditions, props, new ConnectionContext(Collections::emptySet)); assertThat(actual, instanceOf(ShardingIgnoreRoutingEngine.class)); @@ -239,7 +240,7 @@ private void assertNewInstanceForDCLForSingleTableWithoutShardingRule(final Gran void assertNewInstanceForDCLForNoSingleTable() { DCLStatement dclStatement = mock(DCLStatement.class); when(sqlStatementContext.getSqlStatement()).thenReturn(dclStatement); - QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, database, queryContext, shardingConditions, props, new ConnectionContext(Collections::emptySet)); assertThat(actual, instanceOf(ShardingInstanceBroadcastRoutingEngine.class)); @@ -249,7 +250,7 @@ void assertNewInstanceForDCLForNoSingleTable() { void assertNewInstanceForSelectWithoutSingleTable() { SQLStatement sqlStatement = mock(MySQLSelectStatement.class); when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement); - QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, database, queryContext, shardingConditions, props, new ConnectionContext(Collections::emptySet)); assertThat(actual, instanceOf(ShardingUnicastRoutingEngine.class)); @@ -259,7 +260,7 @@ void assertNewInstanceForSelectWithoutSingleTable() { void assertNewInstanceForSelectBroadcastTable() { SQLStatement sqlStatement = mock(MySQLSelectStatement.class); when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement); - QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, database, queryContext, shardingConditions, props, new ConnectionContext(Collections::emptySet)); assertThat(actual, instanceOf(ShardingUnicastRoutingEngine.class)); @@ -269,7 +270,7 @@ void assertNewInstanceForSelectBroadcastTable() { void assertNewInstanceForAlwaysFalse() { SQLStatement sqlStatement = mock(SQLStatement.class); when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement); - QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, database, queryContext, shardingConditions, props, new ConnectionContext(Collections::emptySet)); assertThat(actual, instanceOf(ShardingUnicastRoutingEngine.class)); @@ -282,7 +283,7 @@ void assertNewInstanceForStandard() { tableNames.add(""); when(shardingRule.getShardingLogicTableNames(((TableAvailable) sqlStatementContext).getTablesContext().getTableNames())).thenReturn(tableNames); when(shardingRule.isAllShardingTables(tableNames)).thenReturn(true); - QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, database, queryContext, shardingConditions, props, new ConnectionContext(Collections::emptySet)); assertThat(actual, instanceOf(ShardingStandardRoutingEngine.class)); @@ -295,7 +296,7 @@ void assertNewInstanceForComplex() { tableNames.add("1"); tableNames.add("2"); when(shardingRule.getShardingLogicTableNames(tableNames)).thenReturn(tableNames); - QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, database, queryContext, shardingConditions, props, new ConnectionContext(Collections::emptySet)); assertThat(actual, instanceOf(ShardingComplexRoutingEngine.class)); @@ -307,7 +308,7 @@ void assertNewInstanceForShowCreateTableWithTableRule() { when(sqlStatementContext.getSqlStatement()).thenReturn(dalStatement); tableNames.add("table_1"); when(shardingRule.getShardingRuleTableNames(tableNames)).thenReturn(tableNames); - QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, database, queryContext, shardingConditions, props, new ConnectionContext(Collections::emptySet)); assertThat(actual, instanceOf(ShardingUnicastRoutingEngine.class)); @@ -319,7 +320,7 @@ void assertNewInstanceForShowColumnsWithTableRule() { when(sqlStatementContext.getSqlStatement()).thenReturn(dalStatement); tableNames.add("table_1"); when(shardingRule.getShardingRuleTableNames(tableNames)).thenReturn(tableNames); - QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, database, queryContext, shardingConditions, props, new ConnectionContext(Collections::emptySet)); assertThat(actual, instanceOf(ShardingUnicastRoutingEngine.class)); @@ -334,7 +335,7 @@ void assertNewInstanceForSubqueryWithSameConditions() { when(shardingRule.getShardingLogicTableNames(tableNames)).thenReturn(tableNames); when(shardingRule.getShardingTable("t_order").getActualDataSourceNames()).thenReturn(Arrays.asList("ds_0", "ds_1")); when(shardingRule.isAllShardingTables(Collections.singletonList("t_order"))).thenReturn(true); - QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, database, queryContext, shardingConditions, mock(ConfigurationProperties.class), new ConnectionContext(Collections::emptySet)); assertThat(actual, instanceOf(ShardingStandardRoutingEngine.class)); @@ -344,7 +345,7 @@ void assertNewInstanceForSubqueryWithSameConditions() { void assertNewInstanceForCreateResourceGroup() { MySQLCreateResourceGroupStatement resourceGroupStatement = mock(MySQLCreateResourceGroupStatement.class); when(sqlStatementContext.getSqlStatement()).thenReturn(resourceGroupStatement); - QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, database, queryContext, shardingConditions, props, new ConnectionContext(Collections::emptySet)); assertThat(actual, instanceOf(ShardingInstanceBroadcastRoutingEngine.class)); @@ -354,7 +355,7 @@ void assertNewInstanceForCreateResourceGroup() { void assertNewInstanceForSetResourceGroup() { MySQLSetResourceGroupStatement resourceGroupStatement = mock(MySQLSetResourceGroupStatement.class); when(sqlStatementContext.getSqlStatement()).thenReturn(resourceGroupStatement); - QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, database, queryContext, shardingConditions, props, new ConnectionContext(Collections::emptySet)); assertThat(actual, instanceOf(ShardingInstanceBroadcastRoutingEngine.class)); @@ -366,7 +367,7 @@ void assertNewInstanceForOptimizeTableWithShardingTable() { when(sqlStatementContext.getSqlStatement()).thenReturn(optimizeTableStatement); tableNames.add("table_1"); when(shardingRule.getShardingRuleTableNames(tableNames)).thenReturn(tableNames); - QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, database, queryContext, shardingConditions, props, new ConnectionContext(Collections::emptySet)); assertThat(actual, instanceOf(ShardingTableBroadcastRoutingEngine.class)); @@ -378,7 +379,7 @@ void assertNewInstanceForOptimizeTableWithSingleTable() { when(sqlStatementContext.getSqlStatement()).thenReturn(optimizeTableStatement); tableNames.add("table_1"); when(shardingRule.getShardingRuleTableNames(tableNames)).thenReturn(Collections.emptyList()); - QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, database, queryContext, shardingConditions, props, new ConnectionContext(Collections::emptySet)); assertThat(actual, instanceOf(ShardingIgnoreRoutingEngine.class)); @@ -396,7 +397,7 @@ void assertNewInstanceForCursorStatementWithShardingTable() { when(shardingRule.isAllShardingTables(tableNames)).thenReturn(true); when(shardingRule.getShardingRuleTableNames(tableNames)).thenReturn(tableNames); when(shardingRule.getShardingLogicTableNames(tableNames)).thenReturn(tableNames); - QueryContext queryContext = new QueryContext(cursorStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(cursorStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, database, queryContext, shardingConditions, props, new ConnectionContext(Collections::emptySet)); assertThat(actual, instanceOf(ShardingStandardRoutingEngine.class)); @@ -409,7 +410,7 @@ void assertNewInstanceForCursorStatementWithSingleTable() { when(cursorStatementContext.getSqlStatement()).thenReturn(cursorStatement); Collection tableSegments = createSimpleTableSegments(); when(cursorStatementContext.getTablesContext().getSimpleTables()).thenReturn(tableSegments); - QueryContext queryContext = new QueryContext(cursorStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(cursorStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, database, queryContext, shardingConditions, props, new ConnectionContext(Collections::emptySet)); assertThat(actual, instanceOf(ShardingIgnoreRoutingEngine.class)); @@ -424,7 +425,7 @@ void assertNewInstanceForCloseAllStatement() { when(closeStatementContext.getTablesContext().getTableNames()).thenReturn(tableNames); when(closeStatementContext.getSqlStatement()).thenReturn(closeStatement); when(shardingRule.getShardingRuleTableNames(tableNames)).thenReturn(tableNames); - QueryContext queryContext = new QueryContext(closeStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(closeStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, database, queryContext, shardingConditions, props, new ConnectionContext(Collections::emptySet)); assertThat(actual, instanceOf(ShardingDatabaseBroadcastRoutingEngine.class)); diff --git a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/assertion/ShardingRouteAssert.java b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/assertion/ShardingRouteAssert.java index e244b5554dc62..49e3ed46f8ed2 100644 --- a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/assertion/ShardingRouteAssert.java +++ b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/assertion/ShardingRouteAssert.java @@ -79,10 +79,11 @@ public static RouteContext assertRoute(final String sql, final List para new CacheOption(2000, 65535L), new CacheOption(128, 1024L)); RuleMetaData ruleMetaData = new RuleMetaData(Arrays.asList(shardingRule, singleRule, timestampServiceRule)); ShardingSphereDatabase database = new ShardingSphereDatabase(DefaultDatabase.LOGIC_NAME, databaseType, mock(ResourceMetaData.class, RETURNS_DEEP_STUBS), ruleMetaData, schemas); - SQLStatementContext sqlStatementContext = - new SQLBindEngine(createShardingSphereMetaData(database), DefaultDatabase.LOGIC_NAME, new HintValueContext()).bind(sqlStatementParserEngine.parse(sql, false), params); - QueryContext queryContext = new QueryContext(sqlStatementContext, sql, params, new HintValueContext()); - return new SQLRouteEngine(Arrays.asList(shardingRule, singleRule), props).route(new ConnectionContext(Collections::emptySet), queryContext, mock(RuleMetaData.class), database); + ShardingSphereMetaData metaData = createShardingSphereMetaData(database); + SQLStatementContext sqlStatementContext = new SQLBindEngine(metaData, DefaultDatabase.LOGIC_NAME, new HintValueContext()).bind(sqlStatementParserEngine.parse(sql, false), params); + ConnectionContext connectionContext = new ConnectionContext(Collections::emptySet); + QueryContext queryContext = new QueryContext(sqlStatementContext, sql, params, new HintValueContext(), connectionContext, metaData); + return new SQLRouteEngine(Arrays.asList(shardingRule, singleRule), props).route(connectionContext, queryContext, mock(RuleMetaData.class), database); } private static ShardingSphereMetaData createShardingSphereMetaData(final ShardingSphereDatabase database) { diff --git a/infra/context/src/test/java/org/apache/shardingsphere/infra/connection/kernel/KernelProcessorTest.java b/infra/context/src/test/java/org/apache/shardingsphere/infra/connection/kernel/KernelProcessorTest.java index c99dbf3df3a0f..0c48e743b158b 100644 --- a/infra/context/src/test/java/org/apache/shardingsphere/infra/connection/kernel/KernelProcessorTest.java +++ b/infra/context/src/test/java/org/apache/shardingsphere/infra/connection/kernel/KernelProcessorTest.java @@ -25,6 +25,7 @@ import org.apache.shardingsphere.infra.database.core.type.DatabaseType; import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext; import org.apache.shardingsphere.infra.hint.HintValueContext; +import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; import org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData; import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData; @@ -55,7 +56,8 @@ class KernelProcessorTest { void assertGenerateExecutionContext() { SQLStatementContext sqlStatementContext = mock(CommonSQLStatementContext.class); when(sqlStatementContext.getSqlStatement()).thenReturn(mock(SelectStatement.class)); - QueryContext queryContext = new QueryContext(sqlStatementContext, "SELECT * FROM tbl", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = + new QueryContext(sqlStatementContext, "SELECT * FROM tbl", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ResourceMetaData resourceMetaData = mock(ResourceMetaData.class, RETURNS_DEEP_STUBS); when(resourceMetaData.getStorageUnits()).thenReturn(Collections.emptyMap()); ShardingSphereDatabase database = new ShardingSphereDatabase(DefaultDatabase.LOGIC_NAME, mock(DatabaseType.class), diff --git a/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/log/SQLLoggerTest.java b/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/log/SQLLoggerTest.java index e7599c0195e12..db7f5a7da4fea 100644 --- a/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/log/SQLLoggerTest.java +++ b/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/log/SQLLoggerTest.java @@ -25,7 +25,9 @@ import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit; import org.apache.shardingsphere.infra.executor.sql.context.SQLUnit; import org.apache.shardingsphere.infra.hint.HintValueContext; +import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; import org.apache.shardingsphere.infra.route.context.RouteContext; +import org.apache.shardingsphere.infra.session.connection.ConnectionContext; import org.apache.shardingsphere.infra.session.query.QueryContext; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; @@ -50,7 +52,8 @@ class SQLLoggerTest { private static List appenderList; - private final QueryContext queryContext = new QueryContext(mock(SQLStatementContext.class), SQL, Collections.emptyList(), new HintValueContext()); + private final QueryContext queryContext = + new QueryContext(mock(SQLStatementContext.class), SQL, Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); private Collection executionUnits; diff --git a/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/process/ProcessEngineTest.java b/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/process/ProcessEngineTest.java index a00f2c5a7fd19..fc932409bacfc 100644 --- a/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/process/ProcessEngineTest.java +++ b/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/process/ProcessEngineTest.java @@ -23,6 +23,8 @@ import org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupReportContext; import org.apache.shardingsphere.infra.executor.sql.execute.engine.SQLExecutionUnit; import org.apache.shardingsphere.infra.hint.HintValueContext; +import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; +import org.apache.shardingsphere.infra.session.connection.ConnectionContext; import org.apache.shardingsphere.infra.session.query.QueryContext; import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.assignment.SetAssignmentSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment; @@ -59,7 +61,8 @@ void setUp() { @Test void assertExecuteSQL() { ExecutionGroupContext executionGroupContext = mockExecutionGroupContext(); - new ProcessEngine().executeSQL(executionGroupContext, new QueryContext(new UpdateStatementContext(getSQLStatement(), DefaultDatabase.LOGIC_NAME), null, null, new HintValueContext())); + new ProcessEngine().executeSQL(executionGroupContext, new QueryContext(new UpdateStatementContext(getSQLStatement(), DefaultDatabase.LOGIC_NAME), null, null, new HintValueContext(), + mock(ConnectionContext.class), mock(ShardingSphereMetaData.class))); verify(processRegistry).add(any()); } diff --git a/infra/route/src/test/java/org/apache/shardingsphere/infra/route/engine/SQLRouteEngineTest.java b/infra/route/src/test/java/org/apache/shardingsphere/infra/route/engine/SQLRouteEngineTest.java index 47c371750bcba..396de5a8dd370 100644 --- a/infra/route/src/test/java/org/apache/shardingsphere/infra/route/engine/SQLRouteEngineTest.java +++ b/infra/route/src/test/java/org/apache/shardingsphere/infra/route/engine/SQLRouteEngineTest.java @@ -18,6 +18,7 @@ package org.apache.shardingsphere.infra.route.engine; import org.apache.shardingsphere.infra.hint.HintValueContext; +import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; import org.apache.shardingsphere.infra.session.query.QueryContext; import org.apache.shardingsphere.infra.binder.context.statement.CommonSQLStatementContext; import org.apache.shardingsphere.infra.config.props.ConfigurationProperties; @@ -46,7 +47,8 @@ class SQLRouteEngineTest { @Test void assertRouteSuccess() { - QueryContext queryContext = new QueryContext(mock(CommonSQLStatementContext.class), "SELECT 1", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = + new QueryContext(mock(CommonSQLStatementContext.class), "SELECT 1", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); RuleMetaData ruleMetaData = new RuleMetaData(Collections.singleton(new RouteRuleFixture())); ShardingSphereDatabase database = new ShardingSphereDatabase("logic_schema", mock(DatabaseType.class), mock(ResourceMetaData.class, RETURNS_DEEP_STUBS), ruleMetaData, Collections.emptyMap()); @@ -61,7 +63,8 @@ void assertRouteSuccess() { @Test void assertRouteFailure() { - QueryContext queryContext = new QueryContext(mock(CommonSQLStatementContext.class), "SELECT 1", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = + new QueryContext(mock(CommonSQLStatementContext.class), "SELECT 1", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); RuleMetaData ruleMetaData = new RuleMetaData(Collections.singleton(new RouteRuleFixture())); ShardingSphereDatabase database = new ShardingSphereDatabase("logic_schema", mock(DatabaseType.class), mock(ResourceMetaData.class, RETURNS_DEEP_STUBS), ruleMetaData, Collections.emptyMap()); diff --git a/infra/route/src/test/java/org/apache/shardingsphere/infra/route/engine/impl/PartialSQLRouteExecutorTest.java b/infra/route/src/test/java/org/apache/shardingsphere/infra/route/engine/impl/PartialSQLRouteExecutorTest.java index c57ab8812899e..9255fb58c7a21 100644 --- a/infra/route/src/test/java/org/apache/shardingsphere/infra/route/engine/impl/PartialSQLRouteExecutorTest.java +++ b/infra/route/src/test/java/org/apache/shardingsphere/infra/route/engine/impl/PartialSQLRouteExecutorTest.java @@ -22,6 +22,7 @@ import org.apache.shardingsphere.infra.hint.HintManager; import org.apache.shardingsphere.infra.hint.HintValueContext; import org.apache.shardingsphere.infra.exception.kernel.syntax.hint.DataSourceHintNotExistsException; +import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; import org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit; import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData; @@ -74,7 +75,7 @@ void setup() { @Test void assertRouteBySQLCommentHint() { when(hintValueContext.findHintDataSourceName()).thenReturn(Optional.of("ds_1")); - QueryContext queryContext = new QueryContext(commonSQLStatementContext, "", Collections.emptyList(), hintValueContext); + QueryContext queryContext = new QueryContext(commonSQLStatementContext, "", Collections.emptyList(), hintValueContext, mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); RouteContext routeContext = partialSQLRouteExecutor.route(connectionContext, queryContext, mock(RuleMetaData.class), database); assertThat(routeContext.getRouteUnits().size(), is(1)); assertThat(routeContext.getRouteUnits().iterator().next().getDataSourceMapper().getActualName(), is("ds_1")); @@ -84,7 +85,8 @@ void assertRouteBySQLCommentHint() { void assertRouteByHintManagerHint() { try (HintManager hintManager = HintManager.getInstance()) { hintManager.setDataSourceName("ds_1"); - QueryContext queryContext = new QueryContext(commonSQLStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = + new QueryContext(commonSQLStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); RouteContext routeContext = partialSQLRouteExecutor.route(connectionContext, queryContext, mock(RuleMetaData.class), database); assertThat(routeContext.getRouteUnits().size(), is(1)); assertThat(routeContext.getRouteUnits().iterator().next().getDataSourceMapper().getActualName(), is("ds_1")); @@ -94,7 +96,7 @@ void assertRouteByHintManagerHint() { @Test void assertRouteBySQLCommentHintWithException() { when(hintValueContext.findHintDataSourceName()).thenReturn(Optional.of("ds_3")); - QueryContext queryContext = new QueryContext(commonSQLStatementContext, "", Collections.emptyList(), hintValueContext); + QueryContext queryContext = new QueryContext(commonSQLStatementContext, "", Collections.emptyList(), hintValueContext, mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); assertThrows(DataSourceHintNotExistsException.class, () -> partialSQLRouteExecutor.route(connectionContext, queryContext, mock(RuleMetaData.class), database)); } @@ -102,7 +104,7 @@ void assertRouteBySQLCommentHintWithException() { void assertRouteByHintManagerHintWithException() { try (HintManager hintManager = HintManager.getInstance()) { hintManager.setDataSourceName("ds-3"); - QueryContext logicSQL = new QueryContext(commonSQLStatementContext, "", Collections.emptyList(), new HintValueContext()); + QueryContext logicSQL = new QueryContext(commonSQLStatementContext, "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); assertThrows(DataSourceHintNotExistsException.class, () -> partialSQLRouteExecutor.route(connectionContext, logicSQL, mock(RuleMetaData.class), database)); } } diff --git a/infra/session/src/main/java/org/apache/shardingsphere/infra/session/connection/ConnectionContext.java b/infra/session/src/main/java/org/apache/shardingsphere/infra/session/connection/ConnectionContext.java index f54f0cf02ac42..d457ab0d861e4 100644 --- a/infra/session/src/main/java/org/apache/shardingsphere/infra/session/connection/ConnectionContext.java +++ b/infra/session/src/main/java/org/apache/shardingsphere/infra/session/connection/ConnectionContext.java @@ -48,7 +48,7 @@ public final class ConnectionContext implements AutoCloseable { private final TransactionConnectionContext transactionContext = new TransactionConnectionContext(); @Setter(AccessLevel.NONE) - private String databaseName; + private String currentDatabaseName; public ConnectionContext(final UsedDataSourceProvider usedDataSourceProvider) { this(usedDataSourceProvider, null); @@ -84,21 +84,21 @@ public void clearTransactionContext() { /** * Set current database name. * - * @param databaseName database name + * @param currentDatabaseName current database name */ - public void setCurrentDatabase(final String databaseName) { - if (null != databaseName && !databaseName.equals(this.databaseName)) { - this.databaseName = databaseName; + public void setCurrentDatabaseName(final String currentDatabaseName) { + if (null != currentDatabaseName && !currentDatabaseName.equals(this.currentDatabaseName)) { + this.currentDatabaseName = currentDatabaseName; } } /** - * Get database name. + * Get current database name. * - * @return database name + * @return current database name */ - public Optional getDatabaseName() { - return Optional.ofNullable(databaseName); + public Optional getCurrentDatabaseName() { + return Optional.ofNullable(currentDatabaseName); } @Override diff --git a/infra/session/src/main/java/org/apache/shardingsphere/infra/session/query/QueryContext.java b/infra/session/src/main/java/org/apache/shardingsphere/infra/session/query/QueryContext.java index 3bc7ab1c4f2b6..797cb9d201533 100644 --- a/infra/session/src/main/java/org/apache/shardingsphere/infra/session/query/QueryContext.java +++ b/infra/session/src/main/java/org/apache/shardingsphere/infra/session/query/QueryContext.java @@ -20,6 +20,8 @@ import lombok.Getter; import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext; import org.apache.shardingsphere.infra.hint.HintValueContext; +import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; +import org.apache.shardingsphere.infra.session.connection.ConnectionContext; import java.util.List; @@ -37,17 +39,25 @@ public final class QueryContext { private final HintValueContext hintValueContext; + private final ConnectionContext connectionContext; + + private final ShardingSphereMetaData metaData; + private final boolean useCache; - public QueryContext(final SQLStatementContext sqlStatementContext, final String sql, final List params, final HintValueContext hintValueContext) { - this(sqlStatementContext, sql, params, hintValueContext, false); + public QueryContext(final SQLStatementContext sqlStatementContext, final String sql, final List params, final HintValueContext hintValueContext, final ConnectionContext connectionContext, + final ShardingSphereMetaData metaData) { + this(sqlStatementContext, sql, params, hintValueContext, connectionContext, metaData, false); } - public QueryContext(final SQLStatementContext sqlStatementContext, final String sql, final List params, final HintValueContext hintValueContext, final boolean useCache) { + public QueryContext(final SQLStatementContext sqlStatementContext, final String sql, final List params, final HintValueContext hintValueContext, final ConnectionContext connectionContext, + final ShardingSphereMetaData metaData, final boolean useCache) { this.sqlStatementContext = sqlStatementContext; this.sql = sql; parameters = params; this.hintValueContext = hintValueContext; + this.connectionContext = connectionContext; + this.metaData = metaData; this.useCache = useCache; } } diff --git a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManager.java b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManager.java index 6182d131cb5a1..8e78588537b5e 100644 --- a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManager.java +++ b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManager.java @@ -75,7 +75,7 @@ public DriverDatabaseConnectionManager(final String currentDatabaseName, final C dataSourceMap = contextManager.getStorageUnits(currentDatabaseName).entrySet() .stream().collect(Collectors.toMap(entry -> getKey(currentDatabaseName, entry.getKey()), entry -> entry.getValue().getDataSource())); connectionContext = new ConnectionContext(cachedConnections::keySet); - connectionContext.setCurrentDatabase(currentDatabaseName); + connectionContext.setCurrentDatabaseName(currentDatabaseName); } private String getKey(final String databaseName, final String dataSourceName) { diff --git a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java index e6ea9d16faaa6..0b585e01c22e5 100644 --- a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java +++ b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java @@ -144,7 +144,7 @@ private ShardingSpherePreparedStatement(final ShardingSphereConnection connectio String usedDatabaseName = sqlStatementContext instanceof TableAvailable ? ((TableAvailable) sqlStatementContext).getTablesContext().getDatabaseName().orElse(connection.getCurrentDatabaseName()) : connection.getCurrentDatabaseName(); - connection.getDatabaseConnectionManager().getConnectionContext().setCurrentDatabase(connection.getCurrentDatabaseName()); + connection.getDatabaseConnectionManager().getConnectionContext().setCurrentDatabaseName(connection.getCurrentDatabaseName()); usedDatabase = metaData.getDatabase(usedDatabaseName); statementOption = returnGeneratedKeys ? new StatementOption(true, columns) : new StatementOption(resultSetType, resultSetConcurrency, resultSetHoldability); statementManager = new StatementManager(); @@ -273,7 +273,7 @@ private QueryContext createQueryContext() { if (sqlStatementContext instanceof ParameterAware) { ((ParameterAware) sqlStatementContext).setUpParameters(params); } - return new QueryContext(sqlStatementContext, sql, params, hintValueContext, true); + return new QueryContext(sqlStatementContext, sql, params, hintValueContext, connection.getDatabaseConnectionManager().getConnectionContext(), metaData, true); } private void replay() throws SQLException { diff --git a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java index 6e6d73cb38cc9..dbb8885a40b8d 100644 --- a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java +++ b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java @@ -259,7 +259,7 @@ private QueryContext createQueryContext(final String originSQL) throws SQLExcept String sql = SQLHintUtils.removeHint(originSQL); SQLStatement sqlStatement = sqlParserRule.getSQLParserEngine(metaData.getDatabase(usedDatabaseName).getProtocolType()).parse(sql, false); SQLStatementContext sqlStatementContext = new SQLBindEngine(metaData, connection.getCurrentDatabaseName(), hintValueContext).bind(sqlStatement, Collections.emptyList()); - return new QueryContext(sqlStatementContext, sql, Collections.emptyList(), hintValueContext); + return new QueryContext(sqlStatementContext, sql, Collections.emptyList(), hintValueContext, connection.getDatabaseConnectionManager().getConnectionContext(), metaData); } private void prepareExecute(final QueryContext queryContext) throws SQLException { @@ -267,7 +267,7 @@ private void prepareExecute(final QueryContext queryContext) throws SQLException usedDatabaseName = sqlStatementContext instanceof TableAvailable ? ((TableAvailable) sqlStatementContext).getTablesContext().getDatabaseName().orElse(connection.getCurrentDatabaseName()) : connection.getCurrentDatabaseName(); - connection.getDatabaseConnectionManager().getConnectionContext().setCurrentDatabase(connection.getCurrentDatabaseName()); + connection.getDatabaseConnectionManager().getConnectionContext().setCurrentDatabaseName(connection.getCurrentDatabaseName()); sqlStatementContext = queryContext.getSqlStatementContext(); clearStatements(); } diff --git a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/generator/PipelineDDLGenerator.java b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/generator/PipelineDDLGenerator.java index 787e9047a7008..274d99e269b09 100644 --- a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/generator/PipelineDDLGenerator.java +++ b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/generator/PipelineDDLGenerator.java @@ -34,7 +34,6 @@ import org.apache.shardingsphere.infra.hint.HintValueContext; import org.apache.shardingsphere.infra.metadata.database.schema.util.IndexMetaDataUtils; import org.apache.shardingsphere.infra.parser.SQLParserEngine; -import org.apache.shardingsphere.infra.session.query.QueryContext; import org.apache.shardingsphere.sql.parser.statement.core.segment.SQLSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.ConstraintSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.index.IndexSegment; @@ -104,8 +103,7 @@ private Optional decorate(final DatabaseType databaseType, final DataSou } private String decorateActualSQL(final String databaseName, final String targetTableName, final SQLParserEngine parserEngine, final String sql) { - QueryContext queryContext = getQueryContext(databaseName, parserEngine, sql); - SQLStatementContext sqlStatementContext = queryContext.getSqlStatementContext(); + SQLStatementContext sqlStatementContext = parseSQL(databaseName, parserEngine, sql); Map replaceMap = new TreeMap<>(Comparator.comparing(SQLSegment::getStartIndex)); if (sqlStatementContext instanceof CreateTableStatementContext) { appendFromIndexAndConstraint(replaceMap, targetTableName, sqlStatementContext); @@ -125,9 +123,8 @@ private String decorateActualSQL(final String databaseName, final String targetT return doDecorateActualTable(replaceMap, sql); } - private QueryContext getQueryContext(final String databaseName, final SQLParserEngine parserEngine, final String sql) { - SQLStatementContext sqlStatementContext = new SQLBindEngine(null, databaseName, new HintValueContext()).bind(parserEngine.parse(sql, true), Collections.emptyList()); - return new QueryContext(sqlStatementContext, sql, Collections.emptyList(), new HintValueContext()); + private SQLStatementContext parseSQL(final String databaseName, final SQLParserEngine parserEngine, final String sql) { + return new SQLBindEngine(null, databaseName, new HintValueContext()).bind(parserEngine.parse(sql, true), Collections.emptyList()); } private void appendFromIndexAndConstraint(final Map replaceMap, final String targetTableName, final SQLStatementContext sqlStatementContext) { @@ -183,8 +180,7 @@ private Optional decorateOpenGauss(final String databaseName, final Stri } private String replaceTableNameWithPrefix(final String sql, final String prefix, final String databaseName, final SQLParserEngine parserEngine) { - QueryContext queryContext = getQueryContext(databaseName, parserEngine, sql); - SQLStatementContext sqlStatementContext = queryContext.getSqlStatementContext(); + SQLStatementContext sqlStatementContext = parseSQL(databaseName, parserEngine, sql); if (sqlStatementContext instanceof CreateTableStatementContext || sqlStatementContext instanceof CommentStatementContext || sqlStatementContext instanceof CreateIndexStatementContext || sqlStatementContext instanceof AlterTableStatementContext) { if (((TableAvailable) sqlStatementContext).getTablesContext().getSimpleTables().isEmpty()) { diff --git a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/SingleSQLRouterTest.java b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/SingleSQLRouterTest.java index eed797280bcae..5eca1bf42f1dc 100644 --- a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/SingleSQLRouterTest.java +++ b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/SingleSQLRouterTest.java @@ -26,6 +26,7 @@ import org.apache.shardingsphere.infra.datanode.DataNode; import org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties; import org.apache.shardingsphere.infra.hint.HintValueContext; +import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; import org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData; import org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNode; @@ -215,6 +216,7 @@ void assertDecorateRouteContextWithMultiDataSource() throws SQLException { private QueryContext createQueryContext() { CreateTableStatement createTableStatement = new MySQLCreateTableStatement(false); createTableStatement.setTable(new SimpleTableSegment(new TableNameSegment(1, 2, new IdentifierValue("t_order")))); - return new QueryContext(new CreateTableStatementContext(createTableStatement, DefaultDatabase.LOGIC_NAME), "CREATE TABLE", new LinkedList<>(), new HintValueContext()); + return new QueryContext(new CreateTableStatementContext(createTableStatement, DefaultDatabase.LOGIC_NAME), "CREATE TABLE", new LinkedList<>(), new HintValueContext(), + mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); } } diff --git a/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/EnumerableScanExecutor.java b/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/EnumerableScanExecutor.java index 70318de45b1b3..c0b2273b455e8 100644 --- a/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/EnumerableScanExecutor.java +++ b/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/EnumerableScanExecutor.java @@ -210,7 +210,7 @@ private QueryContext createQueryContext(final ShardingSphereMetaData metaData, f List params = getParameters(sqlString.getParamIndexes()); HintValueContext hintValueContext = new HintValueContext(); SQLStatementContext sqlStatementContext = new SQLBindEngine(metaData, executorContext.getDatabaseName(), hintValueContext).bind(sqlStatement, params); - return new QueryContext(sqlStatementContext, sql, params, hintValueContext, useCache); + return new QueryContext(sqlStatementContext, sql, params, hintValueContext, new ConnectionContext(Collections::emptySet), metaData, useCache); } private List getParameters(final int[] paramIndexes) { diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java index ace087bc320f4..fd2f23711457a 100644 --- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java +++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java @@ -92,7 +92,8 @@ public static ProxyBackendHandler newInstance(final DatabaseType databaseType, f SQLStatementContext sqlStatementContext = sqlStatement instanceof DistSQLStatement ? new DistSQLStatementContext((DistSQLStatement) sqlStatement) : new SQLBindEngine(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData(), connectionSession.getCurrentDatabaseName(), hintValueContext).bind(sqlStatement, Collections.emptyList()); - QueryContext queryContext = new QueryContext(sqlStatementContext, sql, Collections.emptyList(), hintValueContext); + QueryContext queryContext = new QueryContext(sqlStatementContext, sql, Collections.emptyList(), hintValueContext, connectionSession.getConnectionContext(), + ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData()); connectionSession.setQueryContext(queryContext); return newInstance(databaseType, queryContext, connectionSession, false); } diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseBackendHandler.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseBackendHandler.java index 6870b4da3897b..b378f77c539e1 100644 --- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseBackendHandler.java +++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseBackendHandler.java @@ -58,11 +58,11 @@ public ResponseHeader execute() throws SQLException { ShardingSpherePreconditions.checkState(ProxyContext.getInstance().getContextManager().getDatabase(unicastDatabaseName).containsDataSource(), () -> new EmptyStorageUnitException(unicastDatabaseName)); try { - connectionSession.setCurrentDatabase(unicastDatabaseName); + connectionSession.setCurrentDatabaseName(unicastDatabaseName); databaseConnector = databaseConnectorFactory.newInstance(queryContext, connectionSession.getDatabaseConnectionManager(), false); return databaseConnector.execute(); } finally { - connectionSession.setCurrentDatabase(originalDatabaseName); + connectionSession.setCurrentDatabaseName(originalDatabaseName); } } diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/DropDatabaseBackendHandler.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/DropDatabaseBackendHandler.java index cd6f8c7acac6c..a2b57338c49be 100644 --- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/DropDatabaseBackendHandler.java +++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/DropDatabaseBackendHandler.java @@ -49,7 +49,7 @@ public ResponseHeader execute() { check(sqlStatement, connectionSession.getConnectionContext().getGrantee()); if (isDropCurrentDatabase(sqlStatement.getDatabaseName())) { checkSupportedDropCurrentDatabase(connectionSession); - connectionSession.setCurrentDatabase(null); + connectionSession.setCurrentDatabaseName(null); } if (ProxyContext.getInstance().databaseExists(sqlStatement.getDatabaseName())) { ProxyContext.getInstance().getContextManager().getPersistServiceFacade().getMetaDataManagerPersistService().dropDatabase(sqlStatement.getDatabaseName()); diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/PreviewExecutor.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/PreviewExecutor.java index e7f04d78227d4..8b8d8659ef2cd 100644 --- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/PreviewExecutor.java +++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/PreviewExecutor.java @@ -93,7 +93,7 @@ public Collection getRows(final PreviewStatement sqlSta HintValueContext hintValueContext = SQLHintUtils.extractHint(sqlStatement.getSql()); SQLStatement toBePreviewedStatement = metaData.getGlobalRuleMetaData().getSingleRule(SQLParserRule.class).getSQLParserEngine(database.getProtocolType()).parse(toBePreviewedSQL, false); SQLStatementContext toBePreviewedStatementContext = new SQLBindEngine(metaData, database.getName(), hintValueContext).bind(toBePreviewedStatement, Collections.emptyList()); - QueryContext queryContext = new QueryContext(toBePreviewedStatementContext, toBePreviewedSQL, Collections.emptyList(), hintValueContext); + QueryContext queryContext = new QueryContext(toBePreviewedStatementContext, toBePreviewedSQL, Collections.emptyList(), hintValueContext, connectionContext.getConnectionContext(), metaData); if (toBePreviewedStatementContext instanceof CursorAvailable && toBePreviewedStatementContext instanceof CursorDefinitionAware) { setUpCursorDefinition(toBePreviewedStatementContext); } diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionBackendHandlerFactory.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionBackendHandlerFactory.java index 0cd4234a9eb9d..feb3e86c26e6f 100644 --- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionBackendHandlerFactory.java +++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionBackendHandlerFactory.java @@ -19,12 +19,13 @@ import lombok.AccessLevel; import lombok.NoArgsConstructor; +import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext; import org.apache.shardingsphere.infra.hint.HintValueContext; import org.apache.shardingsphere.infra.session.query.QueryContext; -import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext; import org.apache.shardingsphere.proxy.backend.connector.DatabaseConnectorFactory; -import org.apache.shardingsphere.proxy.backend.session.ConnectionSession; +import org.apache.shardingsphere.proxy.backend.context.ProxyContext; import org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler; +import org.apache.shardingsphere.proxy.backend.session.ConnectionSession; import org.apache.shardingsphere.sql.parser.statement.core.enums.OperationScope; import org.apache.shardingsphere.sql.parser.statement.core.statement.tcl.BeginTransactionStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.tcl.CommitStatement; @@ -82,7 +83,8 @@ public static ProxyBackendHandler newInstance(final SQLStatementContext sqlState if (tclStatement instanceof XAStatement) { return new TransactionXAHandler(sqlStatementContext, sql, connectionSession); } - QueryContext queryContext = new QueryContext(sqlStatementContext, sql, Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, sql, Collections.emptyList(), new HintValueContext(), connectionSession.getConnectionContext(), + ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData()); return DatabaseConnectorFactory.getInstance().newInstance(queryContext, connectionSession.getDatabaseConnectionManager(), false); } } diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionXAHandler.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionXAHandler.java index 1f5ee84a4da1f..2cce1c63bac7d 100644 --- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionXAHandler.java +++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionXAHandler.java @@ -24,6 +24,7 @@ import org.apache.shardingsphere.infra.session.query.QueryContext; import org.apache.shardingsphere.proxy.backend.connector.DatabaseConnector; import org.apache.shardingsphere.proxy.backend.connector.DatabaseConnectorFactory; +import org.apache.shardingsphere.proxy.backend.context.ProxyContext; import org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler; import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseRow; import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader; @@ -56,8 +57,8 @@ public final class TransactionXAHandler implements ProxyBackendHandler { public TransactionXAHandler(final SQLStatementContext sqlStatementContext, final String sql, final ConnectionSession connectionSession) { xaStatement = (XAStatement) sqlStatementContext.getSqlStatement(); this.connectionSession = connectionSession; - backendHandler = DatabaseConnectorFactory.getInstance().newInstance( - new QueryContext(sqlStatementContext, sql, Collections.emptyList(), new HintValueContext()), connectionSession.getDatabaseConnectionManager(), false); + backendHandler = DatabaseConnectorFactory.getInstance().newInstance(new QueryContext(sqlStatementContext, sql, Collections.emptyList(), new HintValueContext(), + connectionSession.getConnectionContext(), ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData()), connectionSession.getDatabaseConnectionManager(), false); } @Override diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java index fc181440d5bba..c7258522a90a9 100644 --- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java +++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java @@ -98,9 +98,10 @@ public void setGrantee(final Grantee grantee) { * * @param currentDatabaseName current database name */ - public void setCurrentDatabase(final String currentDatabaseName) { + public void setCurrentDatabaseName(final String currentDatabaseName) { if (null == currentDatabaseName || !currentDatabaseName.equals(this.currentDatabaseName)) { this.currentDatabaseName = currentDatabaseName; + connectionContext.get().setCurrentDatabaseName(currentDatabaseName); } } diff --git a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnectorFactoryTest.java b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnectorFactoryTest.java index c13e6ed86aa36..bbda3ee038dee 100644 --- a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnectorFactoryTest.java +++ b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnectorFactoryTest.java @@ -25,6 +25,7 @@ import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; import org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData; import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData; +import org.apache.shardingsphere.infra.session.connection.ConnectionContext; import org.apache.shardingsphere.infra.session.query.QueryContext; import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader; import org.apache.shardingsphere.metadata.persist.MetaDataPersistService; @@ -59,7 +60,8 @@ void assertNewDatabaseConnectorWithoutParameter() { when(databaseConnectionManager.getConnectionSession().getCurrentDatabaseName()).thenReturn("foo_db"); SQLStatementContext sqlStatementContext = mock(SQLStatementContext.class, RETURNS_DEEP_STUBS); when(sqlStatementContext.getDatabaseType()).thenReturn(databaseType); - QueryContext queryContext = new QueryContext(sqlStatementContext, "schemaName", Collections.emptyList(), new HintValueContext()); + QueryContext queryContext = + new QueryContext(sqlStatementContext, "schemaName", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)); ShardingSphereDatabase database = mockDatabase(); ContextManager contextManager = mockContextManager(database); when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager); @@ -78,7 +80,9 @@ void assertNewDatabaseConnectorWithParameters() { ContextManager contextManager = mockContextManager(database); when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager); assertThat( - DatabaseConnectorFactory.getInstance().newInstance(new QueryContext(sqlStatementContext, "schemaName", Collections.emptyList(), new HintValueContext()), databaseConnectionManager, + DatabaseConnectorFactory.getInstance().newInstance( + new QueryContext(sqlStatementContext, "schemaName", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)), + databaseConnectionManager, false), instanceOf(DatabaseConnector.class)); } diff --git a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnectorTest.java b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnectorTest.java index ef0d3bd6c22db..ebf452fd03360 100644 --- a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnectorTest.java +++ b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnectorTest.java @@ -38,6 +38,7 @@ import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable; import org.apache.shardingsphere.infra.metadata.database.schema.util.SystemSchemaUtils; import org.apache.shardingsphere.infra.rule.ShardingSphereRule; +import org.apache.shardingsphere.infra.session.connection.ConnectionContext; import org.apache.shardingsphere.infra.session.query.QueryContext; import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader; import org.apache.shardingsphere.metadata.persist.MetaDataPersistService; @@ -144,7 +145,8 @@ private Map mockDatabases() { void assertBinaryProtocolQueryHeader() throws SQLException, NoSuchFieldException, IllegalAccessException { SQLStatementContext sqlStatementContext = mock(SQLStatementContext.class, RETURNS_DEEP_STUBS); when(sqlStatementContext.getDatabaseType()).thenReturn(TypedSPILoader.getService(DatabaseType.class, "FIXTURE")); - DatabaseConnector engine = DatabaseConnectorFactory.getInstance().newInstance(new QueryContext(sqlStatementContext, "schemaName", Collections.emptyList(), new HintValueContext()), + DatabaseConnector engine = DatabaseConnectorFactory.getInstance().newInstance( + new QueryContext(sqlStatementContext, "schemaName", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)), databaseConnectionManager, true); assertNotNull(engine); assertThat(engine, instanceOf(DatabaseConnector.class)); @@ -195,7 +197,8 @@ private QueryResultMetaData createQueryResultMetaData() throws SQLException { void assertAddStatementCorrectly() { SQLStatementContext sqlStatementContext = mock(SQLStatementContext.class, RETURNS_DEEP_STUBS); when(sqlStatementContext.getDatabaseType()).thenReturn(TypedSPILoader.getService(DatabaseType.class, "FIXTURE")); - DatabaseConnector engine = DatabaseConnectorFactory.getInstance().newInstance(new QueryContext(sqlStatementContext, "schemaName", Collections.emptyList(), new HintValueContext()), + DatabaseConnector engine = DatabaseConnectorFactory.getInstance().newInstance( + new QueryContext(sqlStatementContext, "schemaName", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)), databaseConnectionManager, false); engine.add(statement); Collection actual = getField(engine, "cachedStatements"); @@ -207,7 +210,8 @@ void assertAddStatementCorrectly() { void assertAddResultSetCorrectly() { SQLStatementContext sqlStatementContext = mock(SQLStatementContext.class, RETURNS_DEEP_STUBS); when(sqlStatementContext.getDatabaseType()).thenReturn(TypedSPILoader.getService(DatabaseType.class, "FIXTURE")); - DatabaseConnector engine = DatabaseConnectorFactory.getInstance().newInstance(new QueryContext(sqlStatementContext, "schemaName", Collections.emptyList(), new HintValueContext()), + DatabaseConnector engine = DatabaseConnectorFactory.getInstance().newInstance( + new QueryContext(sqlStatementContext, "schemaName", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)), databaseConnectionManager, false); engine.add(resultSet); Collection actual = getField(engine, "cachedResultSets"); @@ -219,7 +223,8 @@ void assertAddResultSetCorrectly() { void assertCloseCorrectly() throws SQLException { SQLStatementContext sqlStatementContext = mock(SQLStatementContext.class, RETURNS_DEEP_STUBS); when(sqlStatementContext.getDatabaseType()).thenReturn(TypedSPILoader.getService(DatabaseType.class, "FIXTURE")); - DatabaseConnector engine = DatabaseConnectorFactory.getInstance().newInstance(new QueryContext(sqlStatementContext, "schemaName", Collections.emptyList(), new HintValueContext()), + DatabaseConnector engine = DatabaseConnectorFactory.getInstance().newInstance( + new QueryContext(sqlStatementContext, "schemaName", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)), databaseConnectionManager, false); Collection cachedResultSets = getField(engine, "cachedResultSets"); cachedResultSets.add(resultSet); @@ -237,7 +242,8 @@ void assertCloseCorrectly() throws SQLException { void assertCloseResultSetsWithExceptionThrown() throws SQLException { SQLStatementContext sqlStatementContext = mock(SQLStatementContext.class, RETURNS_DEEP_STUBS); when(sqlStatementContext.getDatabaseType()).thenReturn(TypedSPILoader.getService(DatabaseType.class, "FIXTURE")); - DatabaseConnector engine = DatabaseConnectorFactory.getInstance().newInstance(new QueryContext(sqlStatementContext, "schemaName", Collections.emptyList(), new HintValueContext()), + DatabaseConnector engine = DatabaseConnectorFactory.getInstance().newInstance( + new QueryContext(sqlStatementContext, "schemaName", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)), databaseConnectionManager, false); Collection cachedResultSets = getField(engine, "cachedResultSets"); SQLException sqlExceptionByResultSet = new SQLException("ResultSet"); diff --git a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java index ce513b2cf301f..49ead4d1effdd 100644 --- a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java +++ b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java @@ -40,6 +40,7 @@ import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema; import org.apache.shardingsphere.infra.route.context.RouteContext; +import org.apache.shardingsphere.infra.session.connection.ConnectionContext; import org.apache.shardingsphere.infra.session.query.QueryContext; import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader; import org.apache.shardingsphere.metadata.persist.MetaDataPersistService; @@ -122,7 +123,8 @@ void setUp() { @Test void assertCheckExecutePrerequisitesWhenExecuteDDLInXATransaction() { ExecutionContext executionContext = new ExecutionContext( - new QueryContext(createMySQLCreateTableStatementContext(), "", Collections.emptyList(), new HintValueContext()), Collections.emptyList(), mock(RouteContext.class)); + new QueryContext(createMySQLCreateTableStatementContext(), "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)), + Collections.emptyList(), mock(RouteContext.class)); assertThrows(TableModifyInTransactionException.class, () -> new ProxySQLExecutor(JDBCDriverType.STATEMENT, databaseConnectionManager, mock(DatabaseConnector.class), mockQueryContext()).checkExecutePrerequisites(executionContext)); } @@ -130,7 +132,8 @@ void assertCheckExecutePrerequisitesWhenExecuteDDLInXATransaction() { @Test void assertCheckExecutePrerequisitesWhenExecuteTruncateInMySQLXATransaction() { ExecutionContext executionContext = new ExecutionContext( - new QueryContext(createMySQLTruncateStatementContext(), "", Collections.emptyList(), new HintValueContext()), Collections.emptyList(), mock(RouteContext.class)); + new QueryContext(createMySQLTruncateStatementContext(), "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)), + Collections.emptyList(), mock(RouteContext.class)); assertThrows(TableModifyInTransactionException.class, () -> new ProxySQLExecutor(JDBCDriverType.STATEMENT, databaseConnectionManager, mock(DatabaseConnector.class), mockQueryContext()).checkExecutePrerequisites(executionContext)); } @@ -139,14 +142,16 @@ void assertCheckExecutePrerequisitesWhenExecuteTruncateInMySQLXATransaction() { void assertCheckExecutePrerequisitesWhenExecuteTruncateInMySQLLocalTransaction() { when(transactionRule.getDefaultType()).thenReturn(TransactionType.LOCAL); ExecutionContext executionContext = new ExecutionContext( - new QueryContext(createMySQLTruncateStatementContext(), "", Collections.emptyList(), new HintValueContext()), Collections.emptyList(), mock(RouteContext.class)); + new QueryContext(createMySQLTruncateStatementContext(), "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)), + Collections.emptyList(), mock(RouteContext.class)); new ProxySQLExecutor(JDBCDriverType.STATEMENT, databaseConnectionManager, mock(DatabaseConnector.class), mockQueryContext()).checkExecutePrerequisites(executionContext); } @Test void assertCheckExecutePrerequisitesWhenExecuteDMLInXATransaction() { ExecutionContext executionContext = new ExecutionContext( - new QueryContext(createMySQLInsertStatementContext(), "", Collections.emptyList(), new HintValueContext()), Collections.emptyList(), mock(RouteContext.class)); + new QueryContext(createMySQLInsertStatementContext(), "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)), + Collections.emptyList(), mock(RouteContext.class)); new ProxySQLExecutor(JDBCDriverType.STATEMENT, databaseConnectionManager, mock(DatabaseConnector.class), mockQueryContext()).checkExecutePrerequisites(executionContext); } @@ -154,7 +159,8 @@ void assertCheckExecutePrerequisitesWhenExecuteDMLInXATransaction() { void assertCheckExecutePrerequisitesWhenExecuteDDLInBaseTransaction() { when(transactionRule.getDefaultType()).thenReturn(TransactionType.BASE); ExecutionContext executionContext = new ExecutionContext( - new QueryContext(createMySQLCreateTableStatementContext(), "", Collections.emptyList(), new HintValueContext()), Collections.emptyList(), mock(RouteContext.class)); + new QueryContext(createMySQLCreateTableStatementContext(), "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)), + Collections.emptyList(), mock(RouteContext.class)); new ProxySQLExecutor(JDBCDriverType.STATEMENT, databaseConnectionManager, mock(DatabaseConnector.class), mockQueryContext()).checkExecutePrerequisites(executionContext); } @@ -162,7 +168,8 @@ void assertCheckExecutePrerequisitesWhenExecuteDDLInBaseTransaction() { void assertCheckExecutePrerequisitesWhenExecuteDDLNotInXATransaction() { when(connectionSession.getTransactionStatus().isInTransaction()).thenReturn(false); ExecutionContext executionContext = new ExecutionContext( - new QueryContext(createMySQLCreateTableStatementContext(), "", Collections.emptyList(), new HintValueContext()), Collections.emptyList(), mock(RouteContext.class)); + new QueryContext(createMySQLCreateTableStatementContext(), "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)), + Collections.emptyList(), mock(RouteContext.class)); new ProxySQLExecutor(JDBCDriverType.STATEMENT, databaseConnectionManager, mock(DatabaseConnector.class), mockQueryContext()).checkExecutePrerequisites(executionContext); } @@ -170,7 +177,8 @@ void assertCheckExecutePrerequisitesWhenExecuteDDLNotInXATransaction() { void assertCheckExecutePrerequisitesWhenExecuteDDLInPostgreSQLTransaction() { when(transactionRule.getDefaultType()).thenReturn(TransactionType.LOCAL); ExecutionContext executionContext = new ExecutionContext( - new QueryContext(createPostgreSQLCreateTableStatementContext(), "", Collections.emptyList(), new HintValueContext()), Collections.emptyList(), mock(RouteContext.class)); + new QueryContext(createPostgreSQLCreateTableStatementContext(), "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)), + Collections.emptyList(), mock(RouteContext.class)); assertThrows(TableModifyInTransactionException.class, () -> new ProxySQLExecutor(JDBCDriverType.STATEMENT, databaseConnectionManager, mock(DatabaseConnector.class), mockQueryContext()).checkExecutePrerequisites(executionContext)); } @@ -179,7 +187,8 @@ void assertCheckExecutePrerequisitesWhenExecuteDDLInPostgreSQLTransaction() { void assertCheckExecutePrerequisitesWhenExecuteTruncateInPostgreSQLTransaction() { when(transactionRule.getDefaultType()).thenReturn(TransactionType.LOCAL); ExecutionContext executionContext = new ExecutionContext( - new QueryContext(createPostgreSQLTruncateStatementContext(), "", Collections.emptyList(), new HintValueContext()), Collections.emptyList(), mock(RouteContext.class)); + new QueryContext(createPostgreSQLTruncateStatementContext(), "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)), + Collections.emptyList(), mock(RouteContext.class)); new ProxySQLExecutor(JDBCDriverType.STATEMENT, databaseConnectionManager, mock(DatabaseConnector.class), mockQueryContext()).checkExecutePrerequisites(executionContext); } @@ -187,7 +196,8 @@ void assertCheckExecutePrerequisitesWhenExecuteTruncateInPostgreSQLTransaction() void assertCheckExecutePrerequisitesWhenExecuteCursorInPostgreSQLTransaction() { when(transactionRule.getDefaultType()).thenReturn(TransactionType.LOCAL); ExecutionContext executionContext = new ExecutionContext( - new QueryContext(createCursorStatementContext(), "", Collections.emptyList(), new HintValueContext()), Collections.emptyList(), mock(RouteContext.class)); + new QueryContext(createCursorStatementContext(), "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)), + Collections.emptyList(), mock(RouteContext.class)); new ProxySQLExecutor(JDBCDriverType.STATEMENT, databaseConnectionManager, mock(DatabaseConnector.class), mockQueryContext()).checkExecutePrerequisites(executionContext); } @@ -195,7 +205,8 @@ void assertCheckExecutePrerequisitesWhenExecuteCursorInPostgreSQLTransaction() { void assertCheckExecutePrerequisitesWhenExecuteDMLInPostgreSQLTransaction() { when(transactionRule.getDefaultType()).thenReturn(TransactionType.LOCAL); ExecutionContext executionContext = new ExecutionContext( - new QueryContext(createPostgreSQLInsertStatementContext(), "", Collections.emptyList(), new HintValueContext()), Collections.emptyList(), mock(RouteContext.class)); + new QueryContext(createPostgreSQLInsertStatementContext(), "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)), + Collections.emptyList(), mock(RouteContext.class)); new ProxySQLExecutor(JDBCDriverType.STATEMENT, databaseConnectionManager, mock(DatabaseConnector.class), mockQueryContext()).checkExecutePrerequisites(executionContext); } @@ -203,7 +214,8 @@ void assertCheckExecutePrerequisitesWhenExecuteDMLInPostgreSQLTransaction() { void assertCheckExecutePrerequisitesWhenExecuteDDLInMySQLTransaction() { when(transactionRule.getDefaultType()).thenReturn(TransactionType.LOCAL); ExecutionContext executionContext = new ExecutionContext( - new QueryContext(createMySQLCreateTableStatementContext(), "", Collections.emptyList(), new HintValueContext()), Collections.emptyList(), mock(RouteContext.class)); + new QueryContext(createMySQLCreateTableStatementContext(), "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)), + Collections.emptyList(), mock(RouteContext.class)); new ProxySQLExecutor(JDBCDriverType.STATEMENT, databaseConnectionManager, mock(DatabaseConnector.class), mockQueryContext()).checkExecutePrerequisites(executionContext); } @@ -221,7 +233,8 @@ void assertCheckExecutePrerequisitesWhenExecuteDDLNotInPostgreSQLTransaction() { when(transactionRule.getDefaultType()).thenReturn(TransactionType.LOCAL); when(connectionSession.getTransactionStatus().isInTransaction()).thenReturn(false); ExecutionContext executionContext = new ExecutionContext( - new QueryContext(createPostgreSQLCreateTableStatementContext(), "", Collections.emptyList(), new HintValueContext()), Collections.emptyList(), mock(RouteContext.class)); + new QueryContext(createPostgreSQLCreateTableStatementContext(), "", Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)), + Collections.emptyList(), mock(RouteContext.class)); new ProxySQLExecutor(JDBCDriverType.STATEMENT, databaseConnectionManager, mock(DatabaseConnector.class), mockQueryContext()).checkExecutePrerequisites(executionContext); } diff --git a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/data/DatabaseBackendHandlerFactoryTest.java b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/data/DatabaseBackendHandlerFactoryTest.java index dcad67cd9f9aa..6dc205c958e05 100644 --- a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/data/DatabaseBackendHandlerFactoryTest.java +++ b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/data/DatabaseBackendHandlerFactoryTest.java @@ -19,6 +19,8 @@ import org.apache.shardingsphere.infra.binder.context.type.TableAvailable; import org.apache.shardingsphere.infra.hint.HintValueContext; +import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; +import org.apache.shardingsphere.infra.session.connection.ConnectionContext; import org.apache.shardingsphere.infra.session.query.QueryContext; import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext; import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; @@ -60,7 +62,9 @@ void assertNewInstanceReturnedUnicastDatabaseBackendHandlerWithDAL() { SQLStatementContext sqlStatementContext = mock(SQLStatementContext.class); when(sqlStatementContext.getSqlStatement()).thenReturn(mock(DALStatement.class)); DatabaseBackendHandler actual = - DatabaseBackendHandlerFactory.newInstance(new QueryContext(sqlStatementContext, sql, Collections.emptyList(), new HintValueContext()), mock(ConnectionSession.class), false); + DatabaseBackendHandlerFactory.newInstance( + new QueryContext(sqlStatementContext, sql, Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)), + mock(ConnectionSession.class), false); assertThat(actual, instanceOf(UnicastDatabaseBackendHandler.class)); } @@ -70,7 +74,9 @@ void assertNewInstanceReturnedUnicastDatabaseBackendHandlerWithQueryWithoutFrom( SQLStatementContext sqlStatementContext = mock(SQLStatementContext.class); when(sqlStatementContext.getSqlStatement()).thenReturn(mock(SelectStatement.class)); DatabaseBackendHandler actual = - DatabaseBackendHandlerFactory.newInstance(new QueryContext(sqlStatementContext, sql, Collections.emptyList(), new HintValueContext()), mock(ConnectionSession.class), false); + DatabaseBackendHandlerFactory.newInstance( + new QueryContext(sqlStatementContext, sql, Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)), + mock(ConnectionSession.class), false); assertThat(actual, instanceOf(UnicastDatabaseBackendHandler.class)); } @@ -82,7 +88,9 @@ void assertNewInstanceReturnedSchemaAssignedDatabaseBackendHandler() { ContextManager contextManager = mockContextManager(); when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager); DatabaseBackendHandler actual = - DatabaseBackendHandlerFactory.newInstance(new QueryContext(sqlStatementContext, sql, Collections.emptyList(), new HintValueContext()), connectionSession, false); + DatabaseBackendHandlerFactory.newInstance( + new QueryContext(sqlStatementContext, sql, Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), mock(ShardingSphereMetaData.class)), + connectionSession, false); assertThat(actual, instanceOf(DatabaseConnector.class)); } diff --git a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseBackendHandlerTest.java b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseBackendHandlerTest.java index 3dd69f27c3426..6e51d327b830e 100644 --- a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseBackendHandlerTest.java +++ b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseBackendHandlerTest.java @@ -26,6 +26,7 @@ import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; import org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData; import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData; +import org.apache.shardingsphere.infra.session.connection.ConnectionContext; import org.apache.shardingsphere.infra.session.query.QueryContext; import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader; import org.apache.shardingsphere.metadata.persist.MetaDataPersistService; @@ -92,7 +93,8 @@ void setUp() throws SQLException { when(connectionSession.getDatabaseConnectionManager()).thenReturn(mock(ProxyDatabaseConnectionManager.class)); mockDatabaseConnector(new UpdateResponseHeader(mock(SQLStatement.class))); unicastDatabaseBackendHandler = - new UnicastDatabaseBackendHandler(new QueryContext(mock(SQLStatementContext.class), EXECUTE_SQL, Collections.emptyList(), new HintValueContext()), connectionSession); + new UnicastDatabaseBackendHandler(new QueryContext(mock(SQLStatementContext.class), EXECUTE_SQL, Collections.emptyList(), new HintValueContext(), mock(ConnectionContext.class), + mock(ShardingSphereMetaData.class)), connectionSession); setBackendHandlerFactory(unicastDatabaseBackendHandler); } diff --git a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/DropDatabaseBackendHandlerTest.java b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/DropDatabaseBackendHandlerTest.java index 67471a0c79f7d..08d448f99a763 100644 --- a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/DropDatabaseBackendHandlerTest.java +++ b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/DropDatabaseBackendHandlerTest.java @@ -110,7 +110,7 @@ void assertExecuteDropNotExistDatabaseWithIfExists() { void assertExecuteDropWithoutCurrentDatabase() { when(sqlStatement.getDatabaseName()).thenReturn("foo_db"); ResponseHeader responseHeader = handler.execute(); - verify(connectionSession, times(0)).setCurrentDatabase(null); + verify(connectionSession, times(0)).setCurrentDatabaseName(null); assertThat(responseHeader, instanceOf(UpdateResponseHeader.class)); } @@ -120,7 +120,7 @@ void assertExecuteDropCurrentDatabaseWithMySQL() { when(connectionSession.getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class, "MySQL")); when(sqlStatement.getDatabaseName()).thenReturn("foo_db"); ResponseHeader responseHeader = handler.execute(); - verify(connectionSession).setCurrentDatabase(null); + verify(connectionSession).setCurrentDatabaseName(null); assertThat(responseHeader, instanceOf(UpdateResponseHeader.class)); } @@ -137,7 +137,7 @@ void assertExecuteDropOtherDatabase() { when(connectionSession.getUsedDatabaseName()).thenReturn("foo_db"); when(sqlStatement.getDatabaseName()).thenReturn("bar_db"); ResponseHeader responseHeader = handler.execute(); - verify(connectionSession, times(0)).setCurrentDatabase(null); + verify(connectionSession, times(0)).setCurrentDatabaseName(null); assertThat(responseHeader, instanceOf(UpdateResponseHeader.class)); } } diff --git a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSessionTest.java b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSessionTest.java index 111ff6d00d150..96da820ed6335 100644 --- a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSessionTest.java +++ b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSessionTest.java @@ -66,17 +66,17 @@ void setup() { @Test void assertSetCurrentSchema() { - connectionSession.setCurrentDatabase("currentDatabase"); + connectionSession.setCurrentDatabaseName("currentDatabase"); assertThat(connectionSession.getUsedDatabaseName(), is("currentDatabase")); } @Test void assertSwitchSchemaWhileBegin() { - connectionSession.setCurrentDatabase("db"); + connectionSession.setCurrentDatabaseName("db"); ContextManager contextManager = mockContextManager(); when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager); new BackendTransactionManager(databaseConnectionManager).begin(); - connectionSession.setCurrentDatabase("newDB"); + connectionSession.setCurrentDatabaseName("newDB"); assertThat(connectionSession.getCurrentDatabaseName(), is("newDB")); } diff --git a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLSetVariableAdminExecutor.java b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLSetVariableAdminExecutor.java index 8fd80b59cb342..a9d66fc0836bf 100644 --- a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLSetVariableAdminExecutor.java +++ b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLSetVariableAdminExecutor.java @@ -93,8 +93,9 @@ private void executeSetGlobalVariablesIfPresent(final ConnectionSession connecti SQLStatement sqlStatement = sqlParserRule.getSQLParserEngine(TypedSPILoader.getService(DatabaseType.class, "MySQL")).parse(sql, false); SQLStatementContext sqlStatementContext = new SQLBindEngine(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData(), connectionSession.getCurrentDatabaseName(), new HintValueContext()).bind(sqlStatement, Collections.emptyList()); - DatabaseBackendHandler databaseBackendHandler = DatabaseConnectorFactory.getInstance() - .newInstance(new QueryContext(sqlStatementContext, sql, Collections.emptyList(), new HintValueContext()), connectionSession.getDatabaseConnectionManager(), false); + DatabaseBackendHandler databaseBackendHandler = DatabaseConnectorFactory.getInstance().newInstance( + new QueryContext(sqlStatementContext, sql, Collections.emptyList(), new HintValueContext(), connectionSession.getConnectionContext(), metaDataContexts.getMetaData()), + connectionSession.getDatabaseConnectionManager(), false); try { databaseBackendHandler.execute(); } finally { diff --git a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UnicastResourceShowExecutor.java b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UnicastResourceShowExecutor.java index 8db7bb810dff3..5149334ed1120 100644 --- a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UnicastResourceShowExecutor.java +++ b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UnicastResourceShowExecutor.java @@ -80,15 +80,17 @@ public void execute(final ConnectionSession connectionSession) throws SQLExcepti ShardingSpherePreconditions.checkState(ProxyContext.getInstance().getContextManager().getDatabase(databaseName).containsDataSource(), () -> new EmptyStorageUnitException(databaseName)); HintValueContext hintValueContext = SQLHintUtils.extractHint(sql); try { - connectionSession.setCurrentDatabase(databaseName); + connectionSession.setCurrentDatabaseName(databaseName); SQLStatementContext sqlStatementContext = new SQLBindEngine(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData(), connectionSession.getCurrentDatabaseName(), hintValueContext).bind(sqlStatement, Collections.emptyList()); - databaseConnector = databaseConnectorFactory.newInstance(new QueryContext(sqlStatementContext, sql, Collections.emptyList(), hintValueContext), + databaseConnector = databaseConnectorFactory.newInstance( + new QueryContext(sqlStatementContext, sql, Collections.emptyList(), hintValueContext, connectionSession.getConnectionContext(), + ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData()), connectionSession.getDatabaseConnectionManager(), false); responseHeader = databaseConnector.execute(); mergedResult = new TransparentMergedResult(createQueryResult()); } finally { - connectionSession.setCurrentDatabase(originDatabase); + connectionSession.setCurrentDatabaseName(originDatabase); databaseConnector.close(); } } diff --git a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutor.java b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutor.java index 062324b718484..27514fd5c5cfa 100644 --- a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutor.java +++ b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutor.java @@ -43,6 +43,6 @@ public void execute(final ConnectionSession connectionSession) { AuthorityChecker authorityChecker = new AuthorityChecker(authorityRule, connectionSession.getConnectionContext().getGrantee()); ShardingSpherePreconditions.checkState(ProxyContext.getInstance().databaseExists(databaseName) && authorityChecker.isAuthorized(databaseName), () -> new UnknownDatabaseException(databaseName)); - connectionSession.setCurrentDatabase(databaseName); + connectionSession.setCurrentDatabaseName(databaseName); } } diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutorTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutorTest.java index 18e4a3fc1e2dd..9b83674eafb4c 100644 --- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutorTest.java +++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UseDatabaseExecutorTest.java @@ -69,7 +69,7 @@ void assertExecuteUseStatementBackendHandler() { UseDatabaseExecutor executor = new UseDatabaseExecutor(useStatement); when(connectionSession.getConnectionContext().getGrantee()).thenReturn(null); executor.execute(connectionSession); - verify(connectionSession).setCurrentDatabase(anyString()); + verify(connectionSession).setCurrentDatabaseName(anyString()); } @Test diff --git a/proxy/backend/type/opengauss/src/main/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/OpenGaussSystemCatalogAdminQueryExecutor.java b/proxy/backend/type/opengauss/src/main/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/OpenGaussSystemCatalogAdminQueryExecutor.java index 3d5f671a938e2..abc39abd66055 100644 --- a/proxy/backend/type/opengauss/src/main/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/OpenGaussSystemCatalogAdminQueryExecutor.java +++ b/proxy/backend/type/opengauss/src/main/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/OpenGaussSystemCatalogAdminQueryExecutor.java @@ -86,9 +86,9 @@ public void execute(final ConnectionSession connectionSession) throws SQLExcepti JDBCExecutor jdbcExecutor = new JDBCExecutor(BackendExecutorContext.getInstance().getExecutorEngine(), connectionSession.getConnectionContext()); try (SQLFederationEngine sqlFederationEngine = new SQLFederationEngine(databaseName, PG_CATALOG, metaDataContexts.getMetaData(), metaDataContexts.getStatistics(), jdbcExecutor)) { DriverExecutionPrepareEngine prepareEngine = createDriverExecutionPrepareEngine(metaDataContexts, connectionSession); - SQLFederationContext context = - new SQLFederationContext(false, new QueryContext(sqlStatementContext, sql, parameters, SQLHintUtils.extractHint(sql)), metaDataContexts.getMetaData(), - connectionSession.getProcessId()); + SQLFederationContext context = new SQLFederationContext(false, + new QueryContext(sqlStatementContext, sql, parameters, SQLHintUtils.extractHint(sql), connectionSession.getConnectionContext(), metaDataContexts.getMetaData()), + metaDataContexts.getMetaData(), connectionSession.getProcessId()); ShardingSphereDatabase database = metaDataContexts.getMetaData().getDatabase(databaseName); ResultSet resultSet = sqlFederationEngine.executeQuery(prepareEngine, createOpenGaussSystemCatalogAdminQueryCallback(database.getProtocolType(), database.getResourceMetaData(), sqlStatementContext.getSqlStatement()), context); diff --git a/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandler.java b/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandler.java index 17d1215954960..fcfb4300252dd 100644 --- a/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandler.java +++ b/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandler.java @@ -77,7 +77,7 @@ private boolean authenticate(final ChannelHandlerContext context, final ByteBuf databaseProtocolFrontendEngine.getCodecEngine().createPacketPayload(message, context.channel().attr(CommonConstants.CHARSET_ATTRIBUTE_KEY).get())); if (authResult.isFinished()) { connectionSession.setGrantee(new Grantee(authResult.getUsername(), authResult.getHostname())); - connectionSession.setCurrentDatabase(authResult.getDatabase()); + connectionSession.setCurrentDatabaseName(authResult.getDatabase()); connectionSession.setProcessId(processEngine.connect(connectionSession.getUsedDatabaseName(), connectionSession.getConnectionContext().getGrantee())); } return authResult.isFinished(); diff --git a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/admin/initdb/MySQLComInitDbExecutor.java b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/admin/initdb/MySQLComInitDbExecutor.java index a5b9dd4a85b2b..ec6aee85c0801 100644 --- a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/admin/initdb/MySQLComInitDbExecutor.java +++ b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/admin/initdb/MySQLComInitDbExecutor.java @@ -51,7 +51,7 @@ public Collection execute() { AuthorityChecker authorityChecker = new AuthorityChecker(authorityRule, connectionSession.getConnectionContext().getGrantee()); ShardingSpherePreconditions.checkState(ProxyContext.getInstance().databaseExists(databaseName) && authorityChecker.isAuthorized(databaseName), () -> new UnknownDatabaseException(packet.getSchema())); - connectionSession.setCurrentDatabase(packet.getSchema()); + connectionSession.setCurrentDatabaseName(packet.getSchema()); return Collections.singleton(new MySQLOKPacket(ServerStatusFlagCalculator.calculateFor(connectionSession))); } } diff --git a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java index da2f22c7422ae..47c6f05520f4b 100644 --- a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java +++ b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java @@ -33,6 +33,7 @@ import org.apache.shardingsphere.infra.database.core.type.DatabaseType; import org.apache.shardingsphere.infra.session.query.QueryContext; import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader; +import org.apache.shardingsphere.proxy.backend.context.ProxyContext; import org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler; import org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandlerFactory; import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseCell; @@ -76,7 +77,8 @@ public Collection execute() throws SQLException { if (sqlStatementContext instanceof ParameterAware) { ((ParameterAware) sqlStatementContext).setUpParameters(params); } - QueryContext queryContext = new QueryContext(sqlStatementContext, preparedStatement.getSql(), params, preparedStatement.getHintValueContext(), true); + QueryContext queryContext = new QueryContext(sqlStatementContext, preparedStatement.getSql(), params, preparedStatement.getHintValueContext(), connectionSession.getConnectionContext(), + ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData(), true); connectionSession.setQueryContext(queryContext); proxyBackendHandler = ProxyBackendHandlerFactory.newInstance(TypedSPILoader.getService(DatabaseType.class, "MySQL"), queryContext, connectionSession, true); ResponseHeader responseHeader = proxyBackendHandler.execute(); diff --git a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/fieldlist/MySQLComFieldListPacketExecutor.java b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/fieldlist/MySQLComFieldListPacketExecutor.java index a01b1c7bc1d51..cc29801ba827d 100644 --- a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/fieldlist/MySQLComFieldListPacketExecutor.java +++ b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/fieldlist/MySQLComFieldListPacketExecutor.java @@ -71,7 +71,7 @@ public Collection execute() throws SQLException { HintValueContext hintValueContext = SQLHintUtils.extractHint(sql); SQLStatementContext sqlStatementContext = new SQLBindEngine(metaDataContexts.getMetaData(), databaseName, hintValueContext).bind(sqlStatement, Collections.emptyList()); ProxyDatabaseConnectionManager databaseConnectionManager = connectionSession.getDatabaseConnectionManager(); - QueryContext queryContext = new QueryContext(sqlStatementContext, sql, Collections.emptyList(), hintValueContext); + QueryContext queryContext = new QueryContext(sqlStatementContext, sql, Collections.emptyList(), hintValueContext, connectionSession.getConnectionContext(), metaDataContexts.getMetaData()); databaseConnector = DatabaseConnectorFactory.getInstance().newInstance(queryContext, databaseConnectionManager, false); databaseConnector.execute(); return createColumnDefinition41Packets(databaseName); diff --git a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java index 4feaf914525d2..1e29e5ef70f80 100644 --- a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java +++ b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java @@ -120,7 +120,7 @@ private QueryContext createQueryContext(final String sql, final SQLStatement sql HintValueContext hintValueContext = SQLHintUtils.extractHint(sql); SQLStatementContext sqlStatementContext = new SQLBindEngine(metaDataContexts.getMetaData(), connectionSession.getUsedDatabaseName(), hintValueContext).bind(sqlStatement, Collections.emptyList()); - return new QueryContext(sqlStatementContext, sql, Collections.emptyList(), hintValueContext); + return new QueryContext(sqlStatementContext, sql, Collections.emptyList(), hintValueContext, connectionSession.getConnectionContext(), metaDataContexts.getMetaData()); } @Override diff --git a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutorTest.java b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutorTest.java index af9dbcf91ac87..ff578306d8924 100644 --- a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutorTest.java +++ b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutorTest.java @@ -34,8 +34,10 @@ import org.apache.shardingsphere.infra.binder.context.statement.dml.UpdateStatementContext; import org.apache.shardingsphere.infra.database.mysql.type.MySQLDatabaseType; import org.apache.shardingsphere.infra.hint.HintValueContext; +import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; import org.apache.shardingsphere.infra.session.query.QueryContext; import org.apache.shardingsphere.proxy.backend.connector.ProxyDatabaseConnectionManager; +import org.apache.shardingsphere.proxy.backend.context.ProxyContext; import org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler; import org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandlerFactory; import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseCell; @@ -85,7 +87,7 @@ import static org.mockito.Mockito.when; @ExtendWith(AutoMockExtension.class) -@StaticMockSettings(ProxyBackendHandlerFactory.class) +@StaticMockSettings({ProxyBackendHandlerFactory.class, ProxyContext.class}) @MockitoSettings(strictness = Strictness.LENIENT) class MySQLComStmtExecuteExecutorTest { @@ -111,6 +113,7 @@ void setUp() { .thenReturn(new MySQLServerPreparedStatement("UPDATE tbl SET col=1 WHERE id = ?", updateStatementContext, new HintValueContext(), Collections.emptyList())); when(connectionSession.getServerPreparedStatementRegistry().getPreparedStatement(3)) .thenReturn(new MySQLServerPreparedStatement("COMMIT", new UnknownSQLStatementContext(new MySQLCommitStatement()), new HintValueContext(), Collections.emptyList())); + when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData()).thenReturn(new ShardingSphereMetaData()); } private SQLStatementContext prepareSelectStatementContext() { diff --git a/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/Portal.java b/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/Portal.java index 93ffd2fd1f274..7b5dd86abd597 100644 --- a/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/Portal.java +++ b/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/Portal.java @@ -92,7 +92,8 @@ public Portal(final String name, final PostgreSQLServerPreparedStatement prepare ((ParameterAware) sqlStatementContext).setUpParameters(params); } DatabaseType protocolType = ProxyContext.getInstance().getContextManager().getDatabase(databaseName).getProtocolType(); - QueryContext queryContext = new QueryContext(sqlStatementContext, preparedStatement.getSql(), params, preparedStatement.getHintValueContext(), true); + QueryContext queryContext = new QueryContext(sqlStatementContext, preparedStatement.getSql(), params, preparedStatement.getHintValueContext(), + databaseConnectionManager.getConnectionSession().getConnectionContext(), ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData(), true); databaseConnectionManager.getConnectionSession().setQueryContext(queryContext); proxyBackendHandler = ProxyBackendHandlerFactory.newInstance(protocolType, queryContext, databaseConnectionManager.getConnectionSession(), true); } diff --git a/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java b/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java index ff0dbe8eadd70..d0b6515961ab6 100644 --- a/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java +++ b/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java @@ -124,7 +124,7 @@ private void prepareForRestOfParametersSet(final Iterator> paramSet } private QueryContext createQueryContext(final SQLStatementContext sqlStatementContext, final List params, final HintValueContext hintValueContext) { - return new QueryContext(sqlStatementContext, preparedStatement.getSql(), params, hintValueContext); + return new QueryContext(sqlStatementContext, preparedStatement.getSql(), params, hintValueContext, connectionSession.getConnectionContext(), metaDataContexts.getMetaData()); } private ExecutionContext createExecutionContext(final QueryContext queryContext) { diff --git a/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutor.java b/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutor.java index 16cdacd49b167..450591f3ada7e 100644 --- a/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutor.java +++ b/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutor.java @@ -239,7 +239,8 @@ private void tryDescribePreparedStatementByJDBC(final PostgreSQLServerPreparedSt String databaseName = connectionSession.getUsedDatabaseName(); SQLStatementContext sqlStatementContext = new SQLBindEngine(metaDataContexts.getMetaData(), connectionSession.getCurrentDatabaseName(), logicPreparedStatement.getHintValueContext()) .bind(logicPreparedStatement.getSqlStatementContext().getSqlStatement(), Collections.emptyList()); - QueryContext queryContext = new QueryContext(sqlStatementContext, logicPreparedStatement.getSql(), Collections.emptyList(), logicPreparedStatement.getHintValueContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, logicPreparedStatement.getSql(), Collections.emptyList(), logicPreparedStatement.getHintValueContext(), + connectionSession.getConnectionContext(), metaDataContexts.getMetaData()); ShardingSphereDatabase database = ProxyContext.getInstance().getContextManager().getDatabase(databaseName); ExecutionContext executionContext = new KernelProcessor().generateExecutionContext( queryContext, database, metaDataContexts.getMetaData().getGlobalRuleMetaData(), metaDataContexts.getMetaData().getProps(), connectionSession.getConnectionContext()); diff --git a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/bind/PostgreSQLComBindExecutorTest.java b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/bind/PostgreSQLComBindExecutorTest.java index 3cb8ba57aea39..b746da764d971 100644 --- a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/bind/PostgreSQLComBindExecutorTest.java +++ b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/bind/PostgreSQLComBindExecutorTest.java @@ -25,6 +25,7 @@ import org.apache.shardingsphere.infra.database.core.type.DatabaseType; import org.apache.shardingsphere.infra.hint.HintValueContext; import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; +import org.apache.shardingsphere.infra.metadata.user.Grantee; import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader; import org.apache.shardingsphere.mode.manager.ContextManager; import org.apache.shardingsphere.proxy.backend.connector.ProxyDatabaseConnectionManager; @@ -38,6 +39,7 @@ import org.apache.shardingsphere.sql.parser.statement.postgresql.dal.PostgreSQLEmptyStatement; import org.apache.shardingsphere.test.mock.AutoMockExtension; import org.apache.shardingsphere.test.mock.StaticMockSettings; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Answers; @@ -68,12 +70,17 @@ class PostgreSQLComBindExecutorTest { @Mock private PostgreSQLComBindPacket bindPacket; - @Mock(answer = Answers.CALLS_REAL_METHODS) + @Mock private ConnectionSession connectionSession; @InjectMocks private PostgreSQLComBindExecutor executor; + @BeforeEach + void setup() { + connectionSession.setGrantee(mock(Grantee.class)); + } + @Test void assertExecuteBind() throws SQLException { String databaseName = "postgres"; @@ -124,7 +131,8 @@ void assertExecuteBindParameters() throws SQLException { ContextManager contextManager = mock(ContextManager.class, Answers.RETURNS_DEEP_STUBS); when(contextManager.getDatabase(databaseName)).thenReturn(database); when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager); - executor.execute(); - assertThat(connectionSession.getQueryContext().getParameters(), is(Arrays.asList(parameters.get(1), parameters.get(0)))); + Collection actual = executor.execute(); + assertThat(actual.size(), is(1)); + assertThat(actual.iterator().next(), is(PostgreSQLBindCompletePacket.getInstance())); } } diff --git a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java index b11aa1cd48a51..12b5c38b537a0 100644 --- a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java +++ b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java @@ -144,12 +144,12 @@ private Collection createSQLRewriteUnits(final SQLRewriteEngineT if (sqlStatementContext instanceof CursorDefinitionAware) { ((CursorDefinitionAware) sqlStatementContext).setUpCursorDefinition(createCursorDefinition(databaseName, metaData, sqlStatementParserEngine)); } - QueryContext queryContext = new QueryContext(sqlStatementContext, sql, testParams.getInputParameters(), hintValueContext); - ConfigurationProperties props = new ConfigurationProperties(rootConfig.getProps()); - RouteContext routeContext = new SQLRouteEngine(databaseRules, props).route(new ConnectionContext(Collections::emptySet), queryContext, globalRuleMetaData, database); - SQLRewriteEntry sqlRewriteEntry = new SQLRewriteEntry(database, globalRuleMetaData, props); ConnectionContext connectionContext = mock(ConnectionContext.class); when(connectionContext.getCursorContext()).thenReturn(new CursorConnectionContext()); + QueryContext queryContext = new QueryContext(sqlStatementContext, sql, testParams.getInputParameters(), hintValueContext, connectionContext, metaData); + ConfigurationProperties props = new ConfigurationProperties(rootConfig.getProps()); + RouteContext routeContext = new SQLRouteEngine(databaseRules, props).route(connectionContext, queryContext, globalRuleMetaData, database); + SQLRewriteEntry sqlRewriteEntry = new SQLRewriteEntry(database, globalRuleMetaData, props); SQLRewriteResult sqlRewriteResult = sqlRewriteEntry.rewrite(queryContext, routeContext, connectionContext); return sqlRewriteResult instanceof GenericSQLRewriteResult ? Collections.singleton(((GenericSQLRewriteResult) sqlRewriteResult).getSqlRewriteUnit())