This is an automated email from the ASF dual-hosted git repository.

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 93e9ea02d26 Move ProxyContext.getDatabaseType() to ContextManager 
(#36843)
93e9ea02d26 is described below

commit 93e9ea02d26909f916253a59b69ccb44012e97ea
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Oct 10 18:24:20 2025 +0800

    Move ProxyContext.getDatabaseType() to ContextManager (#36843)
    
    * Move ProxyContext.getDatabaseType() to ContextManager
    
    * Move ProxyContext.getDatabaseType() to ContextManager
---
 .../shardingsphere/mode/manager/ContextManager.java     | 13 +++++++++++++
 .../connector/ProxyDatabaseConnectionManager.java       |  2 +-
 .../proxy/backend/connector/ProxySQLExecutor.java       |  2 +-
 .../transaction/ProxyBackendTransactionManager.java     |  6 +++---
 .../proxy/backend/context/ProxyContext.java             | 17 -----------------
 .../connector/ProxyDatabaseConnectionManagerTest.java   | 13 ++++++++++---
 6 files changed, 28 insertions(+), 25 deletions(-)

diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
index 9a221c35cd8..b8ffd235864 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
@@ -19,11 +19,13 @@ package org.apache.shardingsphere.mode.manager;
 
 import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
 import 
org.apache.shardingsphere.database.exception.core.exception.syntax.database.NoDatabaseSelectedException;
 import 
org.apache.shardingsphere.database.exception.core.exception.syntax.database.UnknownDatabaseException;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import org.apache.shardingsphere.infra.database.DatabaseTypeEngine;
 import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
 import org.apache.shardingsphere.infra.exception.ShardingSpherePreconditions;
 import org.apache.shardingsphere.infra.executor.kernel.ExecutorEngine;
@@ -88,6 +90,17 @@ public final class ContextManager implements AutoCloseable {
         ContextManagerLifecycleListenerFactory.getListeners(this).forEach(each 
-> each.onInitialized(this));
     }
     
+    /**
+     * Get database type.
+     *
+     * @return database type
+     */
+    public DatabaseType getDatabaseType() {
+        Collection<ShardingSphereDatabase> databases = 
metaDataContexts.getMetaData().getAllDatabases();
+        return databases.stream().flatMap(each -> 
each.getResourceMetaData().getStorageUnits().values().stream()).findFirst().map(StorageUnit::getStorageType)
+                .orElseGet(DatabaseTypeEngine::getDefaultStorageType);
+    }
+    
     /**
      * Get all database names.
      *
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManager.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManager.java
index f71f6bb73df..68c7901dbc7 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManager.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManager.java
@@ -119,7 +119,7 @@ public final class ProxyDatabaseConnectionManager 
implements DatabaseConnectionM
     @SuppressWarnings({"unchecked", "rawtypes"})
     private void executeTransactionHooksAfterCreateConnections(final 
List<Connection> connections) throws SQLException {
         if (connectionSession.getTransactionStatus().isInTransaction()) {
-            DatabaseType databaseType = 
ProxyContext.getInstance().getDatabaseType();
+            DatabaseType databaseType = 
ProxyContext.getInstance().getContextManager().getDatabaseType();
             for (Entry<ShardingSphereRule, TransactionHook> entry : 
transactionHooks.entrySet()) {
                 entry.getValue().afterCreateConnections(entry.getKey(), 
databaseType, connections, 
connectionSession.getConnectionContext().getTransactionContext());
             }
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
index 2cd242b8b97..bb4b86d09d8 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
@@ -241,7 +241,7 @@ public final class ProxySQLExecutor {
             return;
         }
         for (Entry<ShardingSphereRule, TransactionHook> entry : 
transactionHooks.entrySet()) {
-            entry.getValue().beforeExecuteSQL(entry.getKey(), 
ProxyContext.getInstance().getDatabaseType(),
+            entry.getValue().beforeExecuteSQL(entry.getKey(), 
ProxyContext.getInstance().getContextManager().getDatabaseType(),
                     
connectionSession.getDatabaseConnectionManager().getCachedConnections().values(),
 getTransactionContext(connectionSession),
                     
connectionSession.getIsolationLevel().orElse(TransactionIsolationLevel.READ_COMMITTED));
         }
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/ProxyBackendTransactionManager.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/ProxyBackendTransactionManager.java
index 25e7e051f3f..8ffff3feddc 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/ProxyBackendTransactionManager.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/ProxyBackendTransactionManager.java
@@ -86,7 +86,7 @@ public final class ProxyBackendTransactionManager {
     private void doBegin() {
         connection.closeHandlers(true);
         connection.closeConnections(false);
-        DatabaseType databaseType = 
ProxyContext.getInstance().getDatabaseType();
+        DatabaseType databaseType = 
ProxyContext.getInstance().getContextManager().getDatabaseType();
         for (Entry<ShardingSphereRule, TransactionHook> entry : 
transactionHooks.entrySet()) {
             entry.getValue().beforeBegin(entry.getKey(), databaseType, 
transactionContext);
         }
@@ -109,7 +109,7 @@ public final class ProxyBackendTransactionManager {
         if 
(!connection.getConnectionSession().getTransactionStatus().isInTransaction()) {
             return;
         }
-        DatabaseType databaseType = 
ProxyContext.getInstance().getDatabaseType();
+        DatabaseType databaseType = 
ProxyContext.getInstance().getContextManager().getDatabaseType();
         boolean isNeedLock = isNeedLockWhenCommit();
         if (isNeedLock) {
             // FIXME if timeout when lock required, TSO not assigned, but 
commit will continue, solution is use redis lock in impl to instead of reg 
center's lock. #35041
@@ -161,7 +161,7 @@ public final class ProxyBackendTransactionManager {
         if 
(!connection.getConnectionSession().getTransactionStatus().isInTransaction()) {
             return;
         }
-        DatabaseType databaseType = 
ProxyContext.getInstance().getDatabaseType();
+        DatabaseType databaseType = 
ProxyContext.getInstance().getContextManager().getDatabaseType();
         for (Entry<ShardingSphereRule, TransactionHook> entry : 
transactionHooks.entrySet()) {
             entry.getValue().beforeRollback(entry.getKey(), databaseType, 
connection.getCachedConnections().values(), transactionContext);
         }
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java
index 63f88446d03..12ba5e412ec 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java
@@ -20,15 +20,9 @@ package org.apache.shardingsphere.proxy.backend.context;
 import lombok.AccessLevel;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.DatabaseTypeEngine;
-import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.proxy.backend.connector.jdbc.datasource.JDBCBackendDataSource;
 
-import java.util.Collection;
-
 /**
  * Proxy context.
  */
@@ -59,15 +53,4 @@ public final class ProxyContext {
     public static ProxyContext getInstance() {
         return INSTANCE;
     }
-    
-    /**
-     * Get database type.
-     *
-     * @return database type
-     */
-    public DatabaseType getDatabaseType() {
-        Collection<ShardingSphereDatabase> databases = 
contextManager.getMetaDataContexts().getMetaData().getAllDatabases();
-        return databases.stream().flatMap(each -> 
each.getResourceMetaData().getStorageUnits().values().stream()).findFirst().map(StorageUnit::getStorageType)
-                .orElseGet(DatabaseTypeEngine::getDefaultStorageType);
-    }
 }
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManagerTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManagerTest.java
index de447ac6d5f..798232b8a38 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManagerTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManagerTest.java
@@ -26,6 +26,7 @@ import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMod
 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.unit.StorageUnit;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereStatistics;
 import 
org.apache.shardingsphere.infra.metadata.statistics.builder.ShardingSphereStatisticsFactory;
@@ -95,6 +96,8 @@ class ProxyDatabaseConnectionManagerTest {
     
     private static final String SCHEMA_PATTERN = "schema_%s";
     
+    private final DatabaseType databaseType = 
TypedSPILoader.getService(DatabaseType.class, "FIXTURE");
+    
     @Mock
     private JDBCBackendDataSource backendDataSource;
     
@@ -120,9 +123,13 @@ class ProxyDatabaseConnectionManagerTest {
     
     private ContextManager mockContextManager() {
         ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class, 
RETURNS_DEEP_STUBS);
-        
when(metaData.getDatabase("foo_db")).thenReturn(mock(ShardingSphereDatabase.class,
 RETURNS_DEEP_STUBS));
-        
when(metaData.getAllDatabases()).thenReturn(Collections.singleton(mock(ShardingSphereDatabase.class,
 RETURNS_DEEP_STUBS)));
-        
when(metaData.getAllDatabases().iterator().next().getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "FIXTURE"));
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        StorageUnit storageUnit = mock(StorageUnit.class);
+        when(storageUnit.getStorageType()).thenReturn(databaseType);
+        
when(database.getResourceMetaData().getStorageUnits()).thenReturn(Collections.singletonMap("foo_ds",
 storageUnit));
+        when(database.getProtocolType()).thenReturn(databaseType);
+        when(metaData.getDatabase("foo_db")).thenReturn(database);
+        
when(metaData.getAllDatabases()).thenReturn(Collections.singleton(database));
         
when(metaData.getProps().<Integer>getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE)).thenReturn(0);
         
when(metaData.getProps().<Boolean>getValue(ConfigurationPropertyKey.PERSIST_SCHEMAS_TO_REPOSITORY_ENABLED)).thenReturn(true);
         TransactionRule transactionRule = mock(TransactionRule.class);

Reply via email to