This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 3df0f4b21fe Replace TransactionStatus.transactionType with
transactionRule.defaultType (#31021)
3df0f4b21fe is described below
commit 3df0f4b21fef654e7840c7442b3c33ab242f8318
Author: ZhangCheng <[email protected]>
AuthorDate: Fri Apr 26 13:54:25 2024 +0800
Replace TransactionStatus.transactionType with transactionRule.defaultType
(#31021)
* Replace TransactionStatus.transactionType with transactionRule.defaultType
* Replace TransactionStatus.transactionType with transactionRule.defaultType
* Replace TransactionStatus.transactionType with transactionRule.defaultType
* Replace TransactionStatus.transactionType with transactionRule.defaultType
* Replace TransactionStatus.transactionType with transactionRule.defaultType
* Replace TransactionStatus.transactionType with transactionRule.defaultType
* Replace TransactionStatus.transactionType with transactionRule.defaultType
---
.../proxy/backend/connector/DatabaseConnector.java | 6 +++--
.../connector/ProxyDatabaseConnectionManager.java | 2 +-
.../proxy/backend/connector/ProxySQLExecutor.java | 4 +++-
.../transaction/BackendTransactionManager.java | 12 +++-------
.../handler/transaction/TransactionXAHandler.java | 5 +++-
.../proxy/backend/session/ConnectionSession.java | 5 ++--
.../session/transaction/TransactionStatus.java | 12 +++-------
.../proxy/backend/util/TransactionUtils.java | 17 ++++++++++++++
.../ProxyDatabaseConnectionManagerTest.java | 27 +++++++++++++++++++++-
.../backend/connector/ProxySQLExecutorTest.java | 27 +++++++++++++---------
.../transaction/BackendTransactionManagerTest.java | 3 ++-
.../handler/ProxyBackendHandlerFactoryTest.java | 2 --
...DistVariableUpdatableRALBackendHandlerTest.java | 3 +--
.../backend/session/ConnectionSessionTest.java | 3 +--
.../session/transaction/TransactionStatusTest.java | 13 +++--------
.../executor/ShowProcessListExecutorTest.java | 3 +--
.../TransactionIsolationValueProviderTest.java | 3 +--
.../TransactionReadOnlyValueProviderTest.java | 3 +--
.../sysvar/provider/VersionValueProviderTest.java | 3 +--
.../netty/FrontendChannelInboundHandler.java | 5 +---
.../proxy/frontend/state/impl/OKProxyState.java | 3 ++-
.../frontend/state/impl/OKProxyStateTest.java | 26 +++++++++++++++++++--
.../admin/MySQLComResetConnectionExecutorTest.java | 3 +--
.../reset/MySQLComStmtResetExecutorTest.java | 3 +--
.../PostgreSQLCommandExecuteEngineTest.java | 3 +--
.../sync/PostgreSQLComSyncExecutorTest.java | 3 +--
26 files changed, 121 insertions(+), 78 deletions(-)
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
index d53b658791b..9946dcc9c85 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
@@ -32,8 +32,8 @@ import
org.apache.shardingsphere.infra.connection.refresher.MetaDataRefreshEngin
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
import
org.apache.shardingsphere.infra.exception.dialect.SQLExceptionTransformEngine;
-import
org.apache.shardingsphere.infra.exception.kernel.metadata.rule.EmptyRuleException;
import
org.apache.shardingsphere.infra.exception.kernel.metadata.resource.storageunit.EmptyStorageUnitException;
+import
org.apache.shardingsphere.infra.exception.kernel.metadata.rule.EmptyRuleException;
import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
import
org.apache.shardingsphere.infra.executor.sql.execute.engine.SQLExecutorExceptionHandler;
import
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
@@ -67,6 +67,7 @@ import
org.apache.shardingsphere.proxy.backend.response.header.query.QueryRespon
import
org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import
org.apache.shardingsphere.proxy.backend.session.transaction.TransactionStatus;
+import org.apache.shardingsphere.proxy.backend.util.TransactionUtils;
import
org.apache.shardingsphere.sharding.merge.common.IteratorStreamMergedResult;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.DMLStatement;
@@ -183,8 +184,9 @@ public final class DatabaseConnector implements
DatabaseBackendHandler {
if (!databaseConnectionManager.getConnectionSession().isAutoCommit()) {
return false;
}
+ TransactionType transactionType =
TransactionUtils.getTransactionType(databaseConnectionManager.getConnectionSession().getConnectionContext().getTransactionContext());
TransactionStatus transactionStatus =
databaseConnectionManager.getConnectionSession().getTransactionStatus();
- if
(!TransactionType.isDistributedTransaction(transactionStatus.getTransactionType())
|| transactionStatus.isInTransaction()) {
+ if (!TransactionType.isDistributedTransaction(transactionType) ||
transactionStatus.isInTransaction()) {
return false;
}
return isWriteDMLStatement(sqlStatement) && multiExecutionUnits;
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 99e7df7d50e..f5c3b3d3d71 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
@@ -247,7 +247,7 @@ public final class ProxyDatabaseConnectionManager
implements OnlineDatabaseConne
public void closeExecutionResources() throws BackendConnectionException {
synchronized (this) {
Collection<Exception> result = new
LinkedList<>(closeHandlers(false));
- if
(!connectionSession.getTransactionStatus().isInConnectionHeldTransaction()) {
+ if
(!connectionSession.getTransactionStatus().isInConnectionHeldTransaction(TransactionUtils.getTransactionType(connectionSession.getConnectionContext().getTransactionContext())))
{
result.addAll(closeHandlers(true));
result.addAll(closeConnections(false));
} else if (closed.get()) {
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 83cea2047df..4b0a5154597 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
@@ -52,6 +52,7 @@ import
org.apache.shardingsphere.proxy.backend.context.BackendExecutorContext;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import
org.apache.shardingsphere.proxy.backend.session.transaction.TransactionStatus;
+import org.apache.shardingsphere.proxy.backend.util.TransactionUtils;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CloseStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DDLStatement;
@@ -121,8 +122,9 @@ public final class ProxySQLExecutor {
}
private boolean isExecuteDDLInXATransaction(final SQLStatement
sqlStatement) {
+ TransactionType transactionType =
TransactionUtils.getTransactionType(databaseConnectionManager.getConnectionSession().getConnectionContext().getTransactionContext());
TransactionStatus transactionStatus =
databaseConnectionManager.getConnectionSession().getTransactionStatus();
- return TransactionType.XA == transactionStatus.getTransactionType() &&
transactionStatus.isInTransaction() && isUnsupportedDDLStatement(sqlStatement);
+ return TransactionType.XA == transactionType &&
transactionStatus.isInTransaction() && isUnsupportedDDLStatement(sqlStatement);
}
private boolean isExecuteDDLInPostgreSQLOpenGaussTransaction(final
SQLStatement sqlStatement) {
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/BackendTransactionManager.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/BackendTransactionManager.java
index 2bb7d600c12..34611c3896b 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/BackendTransactionManager.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/BackendTransactionManager.java
@@ -22,6 +22,7 @@ import
org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
import
org.apache.shardingsphere.proxy.backend.connector.ProxyDatabaseConnectionManager;
import org.apache.shardingsphere.proxy.backend.connector.TransactionManager;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
+import org.apache.shardingsphere.proxy.backend.util.TransactionUtils;
import org.apache.shardingsphere.transaction.ConnectionSavepointManager;
import
org.apache.shardingsphere.transaction.ShardingSphereTransactionManagerEngine;
import org.apache.shardingsphere.transaction.api.TransactionType;
@@ -88,7 +89,7 @@ public final class BackendTransactionManager implements
TransactionManager {
}
if
(connection.getConnectionSession().getTransactionStatus().isInTransaction()) {
try {
- if (TransactionType.LOCAL == getTransactionType() || null ==
shardingSphereTransactionManager) {
+ if (TransactionType.LOCAL ==
TransactionUtils.getTransactionType(getTransactionContext()) || null ==
shardingSphereTransactionManager) {
localTransactionManager.commit();
} else {
shardingSphereTransactionManager.commit(connection.getConnectionSession().getTransactionStatus().isExceptionOccur());
@@ -105,13 +106,6 @@ public final class BackendTransactionManager implements
TransactionManager {
}
}
- private TransactionType getTransactionType() {
- if (getTransactionContext().getTransactionType().isPresent()) {
- return
TransactionType.valueOf(getTransactionContext().getTransactionType().get());
- }
- return transactionType;
- }
-
@Override
public void rollback() throws SQLException {
for (TransactionHook each : transactionHooks) {
@@ -119,7 +113,7 @@ public final class BackendTransactionManager implements
TransactionManager {
}
if
(connection.getConnectionSession().getTransactionStatus().isInTransaction()) {
try {
- if (TransactionType.LOCAL == getTransactionType() || null ==
shardingSphereTransactionManager) {
+ if (TransactionType.LOCAL ==
TransactionUtils.getTransactionType(getTransactionContext()) || null ==
shardingSphereTransactionManager) {
localTransactionManager.rollback();
} else {
shardingSphereTransactionManager.rollback();
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 8e9fb34b500..b66ff7ce308 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
@@ -28,11 +28,13 @@ 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;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
+import org.apache.shardingsphere.proxy.backend.util.TransactionUtils;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.tcl.xa.XABeginStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.tcl.xa.XACommitStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.tcl.xa.XARecoveryStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.tcl.xa.XARollbackStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.tcl.xa.XAStatement;
+import org.apache.shardingsphere.transaction.api.TransactionType;
import
org.apache.shardingsphere.transaction.xa.jta.exception.XATransactionNestedBeginException;
import java.sql.SQLException;
@@ -85,7 +87,8 @@ public final class TransactionXAHandler implements
ProxyBackendHandler {
private ResponseHeader begin() throws SQLException {
ShardingSpherePreconditions.checkState(!connectionSession.getTransactionStatus().isInTransaction(),
XATransactionNestedBeginException::new);
ResponseHeader result = backendHandler.execute();
-
connectionSession.getConnectionContext().getTransactionContext().beginTransaction(String.valueOf(connectionSession.getTransactionStatus().getTransactionType()));
+ TransactionType transactionType =
TransactionUtils.getTransactionType(connectionSession.getConnectionContext().getTransactionContext());
+
connectionSession.getConnectionContext().getTransactionContext().beginTransaction(String.valueOf(transactionType));
return result;
}
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 d82d7d15bc1..1273c9aee70 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
@@ -30,7 +30,6 @@ import
org.apache.shardingsphere.proxy.backend.connector.ProxyDatabaseConnection
import
org.apache.shardingsphere.proxy.backend.connector.jdbc.statement.JDBCBackendStatement;
import
org.apache.shardingsphere.proxy.backend.session.transaction.TransactionStatus;
import
org.apache.shardingsphere.sql.parser.sql.common.enums.TransactionIsolationLevel;
-import org.apache.shardingsphere.transaction.api.TransactionType;
/**
* Connection session.
@@ -75,9 +74,9 @@ public final class ConnectionSession {
private QueryContext queryContext;
- public ConnectionSession(final DatabaseType protocolType, final
TransactionType initialTransactionType, final AttributeMap attributeMap) {
+ public ConnectionSession(final DatabaseType protocolType, final
AttributeMap attributeMap) {
this.protocolType = protocolType;
- transactionStatus = new TransactionStatus(initialTransactionType);
+ transactionStatus = new TransactionStatus();
this.attributeMap = attributeMap;
databaseConnectionManager = new ProxyDatabaseConnectionManager(this);
statementManager = new JDBCBackendStatement();
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/session/transaction/TransactionStatus.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/session/transaction/TransactionStatus.java
index 290c28c12d4..081e34188ea 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/session/transaction/TransactionStatus.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/session/transaction/TransactionStatus.java
@@ -24,27 +24,21 @@ import
org.apache.shardingsphere.transaction.api.TransactionType;
/**
* Transaction status.
*/
+@Setter
@Getter
public final class TransactionStatus {
- @Setter
private volatile boolean inTransaction;
- private final TransactionType transactionType;
-
- @Setter
private volatile boolean exceptionOccur;
- public TransactionStatus(final TransactionType initialTransactionType) {
- transactionType = initialTransactionType;
- }
-
/**
* Judge whether in connection held transaction.
*
+ * @param transactionType transaction type
* @return is in connection held transaction or not
*/
- public boolean isInConnectionHeldTransaction() {
+ public boolean isInConnectionHeldTransaction(final TransactionType
transactionType) {
return inTransaction && TransactionType.BASE != transactionType;
}
}
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/TransactionUtils.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/TransactionUtils.java
index 5a2a2d7daaa..e2640ca778c 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/TransactionUtils.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/TransactionUtils.java
@@ -19,7 +19,11 @@ package org.apache.shardingsphere.proxy.backend.util;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
+import
org.apache.shardingsphere.infra.session.connection.transaction.TransactionConnectionContext;
+import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import
org.apache.shardingsphere.sql.parser.sql.common.enums.TransactionIsolationLevel;
+import org.apache.shardingsphere.transaction.api.TransactionType;
+import org.apache.shardingsphere.transaction.rule.TransactionRule;
import java.sql.Connection;
@@ -70,4 +74,17 @@ public final class TransactionUtils {
return TransactionIsolationLevel.NONE;
}
}
+
+ /**
+ * Get transaction type.
+ *
+ * @param transactionContext transaction context
+ * @return transaction type
+ */
+ public static TransactionType getTransactionType(final
TransactionConnectionContext transactionContext) {
+ if (transactionContext.getTransactionType().isPresent()) {
+ return
TransactionType.valueOf(transactionContext.getTransactionType().get());
+ }
+ return
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(TransactionRule.class).getDefaultType();
+ }
}
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 4daad708469..a46b0ef54b1 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
@@ -19,7 +19,18 @@ package org.apache.shardingsphere.proxy.backend.connector;
import com.google.common.collect.Multimap;
import lombok.SneakyThrows;
+import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
+import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import
org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
+import org.apache.shardingsphere.infra.instance.InstanceContext;
+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.spi.type.typed.TypedSPILoader;
+import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import
org.apache.shardingsphere.proxy.backend.connector.jdbc.connection.ConnectionPostProcessor;
import
org.apache.shardingsphere.proxy.backend.connector.jdbc.datasource.JDBCBackendDataSource;
import
org.apache.shardingsphere.proxy.backend.connector.jdbc.statement.JDBCBackendStatement;
@@ -33,6 +44,7 @@ import
org.apache.shardingsphere.proxy.backend.session.transaction.TransactionSt
import org.apache.shardingsphere.test.mock.AutoMockExtension;
import org.apache.shardingsphere.test.mock.StaticMockSettings;
import org.apache.shardingsphere.transaction.api.TransactionType;
+import org.apache.shardingsphere.transaction.rule.TransactionRule;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -91,16 +103,29 @@ class ProxyDatabaseConnectionManagerTest {
@BeforeEach
void setUp() {
+ ContextManager contextManager = mockContextManager();
+
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
when(ProxyContext.getInstance().getBackendDataSource()).thenReturn(backendDataSource);
+ when(connectionSession.getTransactionStatus()).thenReturn(new
TransactionStatus());
when(connectionSession.getDatabaseName()).thenReturn(String.format(SCHEMA_PATTERN,
0));
databaseConnectionManager = new
ProxyDatabaseConnectionManager(connectionSession);
when(connectionSession.getDatabaseConnectionManager()).thenReturn(databaseConnectionManager);
- when(connectionSession.getTransactionStatus()).thenReturn(new
TransactionStatus(TransactionType.LOCAL));
JDBCBackendStatement backendStatement = new JDBCBackendStatement();
when(connectionSession.getStatementManager()).thenReturn(backendStatement);
when(connectionSession.getRequiredSessionVariableRecorder()).thenReturn(new
RequiredSessionVariableRecorder());
}
+ private ContextManager mockContextManager() {
+ ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class,
RETURNS_DEEP_STUBS);
+
when(metaData.getDatabase(DefaultDatabase.LOGIC_NAME)).thenReturn(mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS));
+
when(metaData.getDatabases().values().iterator().next().getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
"FIXTURE"));
+
when(metaData.getProps().<Integer>getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE)).thenReturn(0);
+ TransactionRule transactionRule = mock(TransactionRule.class);
+
when(transactionRule.getDefaultType()).thenReturn(TransactionType.LOCAL);
+ when(metaData.getGlobalRuleMetaData()).thenReturn(new
RuleMetaData(Collections.singletonList(transactionRule)));
+ return new ContextManager(new
MetaDataContexts(mock(MetaDataPersistService.class), metaData),
mock(InstanceContext.class));
+ }
+
@AfterEach
void clean() throws ReflectiveOperationException {
Field field =
ProxyContext.getInstance().getClass().getDeclaredField("backendDataSource");
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 d6a5b28c337..06cef4cdb1c 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
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.proxy.backend.connector;
-import
org.apache.shardingsphere.infra.exception.dialect.exception.transaction.TableModifyInTransactionException;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.binder.context.statement.ddl.CreateTableStatementContext;
import
org.apache.shardingsphere.infra.binder.context.statement.ddl.CursorStatementContext;
@@ -28,6 +27,7 @@ import
org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
+import
org.apache.shardingsphere.infra.exception.dialect.exception.transaction.TableModifyInTransactionException;
import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
import
org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.JDBCDriverType;
import org.apache.shardingsphere.infra.hint.HintValueContext;
@@ -62,6 +62,7 @@ import
org.apache.shardingsphere.sqlfederation.rule.SQLFederationRule;
import org.apache.shardingsphere.test.mock.AutoMockExtension;
import org.apache.shardingsphere.test.mock.StaticMockSettings;
import org.apache.shardingsphere.transaction.api.TransactionType;
+import org.apache.shardingsphere.transaction.rule.TransactionRule;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -70,6 +71,7 @@ import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;
+import java.util.Arrays;
import java.util.Collections;
import java.util.Optional;
@@ -91,9 +93,11 @@ class ProxySQLExecutorTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private ProxyDatabaseConnectionManager databaseConnectionManager;
+ @Mock
+ private TransactionRule transactionRule;
+
@BeforeEach
void setUp() {
-
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(TransactionType.XA);
when(connectionSession.getTransactionStatus().isInTransaction()).thenReturn(true);
when(connectionSession.getDatabaseConnectionManager()).thenReturn(databaseConnectionManager);
when(databaseConnectionManager.getConnectionSession()).thenReturn(connectionSession);
@@ -102,7 +106,8 @@ class ProxySQLExecutorTest {
when(metaData.getDatabase(DefaultDatabase.LOGIC_NAME)).thenReturn(mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS));
when(metaData.getDatabases().values().iterator().next().getProtocolType()).thenReturn(databaseType);
when(metaData.getProps().<Integer>getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE)).thenReturn(0);
- when(metaData.getGlobalRuleMetaData()).thenReturn(new
RuleMetaData(Collections.singletonList(mock(SQLFederationRule.class))));
+ when(transactionRule.getDefaultType()).thenReturn(TransactionType.XA);
+ when(metaData.getGlobalRuleMetaData()).thenReturn(new
RuleMetaData(Arrays.asList(mock(SQLFederationRule.class), transactionRule)));
ContextManager contextManager = new ContextManager(new
MetaDataContexts(mock(MetaDataPersistService.class), metaData),
mock(InstanceContext.class));
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
}
@@ -125,7 +130,7 @@ class ProxySQLExecutorTest {
@Test
void
assertCheckExecutePrerequisitesWhenExecuteTruncateInMySQLLocalTransaction() {
-
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(TransactionType.LOCAL);
+
when(transactionRule.getDefaultType()).thenReturn(TransactionType.LOCAL);
ExecutionContext executionContext = new ExecutionContext(
new QueryContext(createMySQLTruncateStatementContext(), "",
Collections.emptyList(), new HintValueContext()), Collections.emptyList(),
mock(RouteContext.class));
new ProxySQLExecutor(JDBCDriverType.STATEMENT,
databaseConnectionManager, mock(DatabaseConnector.class),
mockQueryContext()).checkExecutePrerequisites(executionContext);
@@ -140,7 +145,7 @@ class ProxySQLExecutorTest {
@Test
void assertCheckExecutePrerequisitesWhenExecuteDDLInBaseTransaction() {
-
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(TransactionType.BASE);
+
when(transactionRule.getDefaultType()).thenReturn(TransactionType.BASE);
ExecutionContext executionContext = new ExecutionContext(
new QueryContext(createMySQLCreateTableStatementContext(), "",
Collections.emptyList(), new HintValueContext()), Collections.emptyList(),
mock(RouteContext.class));
new ProxySQLExecutor(JDBCDriverType.STATEMENT,
databaseConnectionManager, mock(DatabaseConnector.class),
mockQueryContext()).checkExecutePrerequisites(executionContext);
@@ -156,7 +161,7 @@ class ProxySQLExecutorTest {
@Test
void
assertCheckExecutePrerequisitesWhenExecuteDDLInPostgreSQLTransaction() {
-
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(TransactionType.LOCAL);
+
when(transactionRule.getDefaultType()).thenReturn(TransactionType.LOCAL);
ExecutionContext executionContext = new ExecutionContext(
new
QueryContext(createPostgreSQLCreateTableStatementContext(), "",
Collections.emptyList(), new HintValueContext()), Collections.emptyList(),
mock(RouteContext.class));
assertThrows(TableModifyInTransactionException.class,
@@ -165,7 +170,7 @@ class ProxySQLExecutorTest {
@Test
void
assertCheckExecutePrerequisitesWhenExecuteTruncateInPostgreSQLTransaction() {
-
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(TransactionType.LOCAL);
+
when(transactionRule.getDefaultType()).thenReturn(TransactionType.LOCAL);
ExecutionContext executionContext = new ExecutionContext(
new QueryContext(createPostgreSQLTruncateStatementContext(),
"", Collections.emptyList(), new HintValueContext()), Collections.emptyList(),
mock(RouteContext.class));
new ProxySQLExecutor(JDBCDriverType.STATEMENT,
databaseConnectionManager, mock(DatabaseConnector.class),
mockQueryContext()).checkExecutePrerequisites(executionContext);
@@ -173,7 +178,7 @@ class ProxySQLExecutorTest {
@Test
void
assertCheckExecutePrerequisitesWhenExecuteCursorInPostgreSQLTransaction() {
-
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(TransactionType.LOCAL);
+
when(transactionRule.getDefaultType()).thenReturn(TransactionType.LOCAL);
ExecutionContext executionContext = new ExecutionContext(
new QueryContext(createCursorStatementContext(), "",
Collections.emptyList(), new HintValueContext()), Collections.emptyList(),
mock(RouteContext.class));
new ProxySQLExecutor(JDBCDriverType.STATEMENT,
databaseConnectionManager, mock(DatabaseConnector.class),
mockQueryContext()).checkExecutePrerequisites(executionContext);
@@ -181,7 +186,7 @@ class ProxySQLExecutorTest {
@Test
void
assertCheckExecutePrerequisitesWhenExecuteDMLInPostgreSQLTransaction() {
-
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(TransactionType.LOCAL);
+
when(transactionRule.getDefaultType()).thenReturn(TransactionType.LOCAL);
ExecutionContext executionContext = new ExecutionContext(
new QueryContext(createPostgreSQLInsertStatementContext(), "",
Collections.emptyList(), new HintValueContext()), Collections.emptyList(),
mock(RouteContext.class));
new ProxySQLExecutor(JDBCDriverType.STATEMENT,
databaseConnectionManager, mock(DatabaseConnector.class),
mockQueryContext()).checkExecutePrerequisites(executionContext);
@@ -189,7 +194,7 @@ class ProxySQLExecutorTest {
@Test
void assertCheckExecutePrerequisitesWhenExecuteDDLInMySQLTransaction() {
-
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(TransactionType.LOCAL);
+
when(transactionRule.getDefaultType()).thenReturn(TransactionType.LOCAL);
ExecutionContext executionContext = new ExecutionContext(
new QueryContext(createMySQLCreateTableStatementContext(), "",
Collections.emptyList(), new HintValueContext()), Collections.emptyList(),
mock(RouteContext.class));
new ProxySQLExecutor(JDBCDriverType.STATEMENT,
databaseConnectionManager, mock(DatabaseConnector.class),
mockQueryContext()).checkExecutePrerequisites(executionContext);
@@ -204,7 +209,7 @@ class ProxySQLExecutorTest {
@Test
void
assertCheckExecutePrerequisitesWhenExecuteDDLNotInPostgreSQLTransaction() {
-
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(TransactionType.LOCAL);
+
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));
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/BackendTransactionManagerTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/BackendTransactionManagerTest.java
index 14c19ebecd5..7c83644727b 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/BackendTransactionManagerTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/BackendTransactionManagerTest.java
@@ -167,7 +167,8 @@ class BackendTransactionManagerTest {
}
private void newBackendTransactionManager(final TransactionType
transactionType, final boolean inTransaction) {
-
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(transactionType);
+
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(TransactionRule.class).getDefaultType())
+ .thenReturn(transactionType);
when(transactionStatus.isInTransaction()).thenReturn(inTransaction);
backendTransactionManager = new
BackendTransactionManager(databaseConnectionManager);
setLocalTransactionManager();
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactoryTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactoryTest.java
index 271308ae308..0df3a5603e2 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactoryTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactoryTest.java
@@ -48,7 +48,6 @@ import
org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.EmptyStatement;
import org.apache.shardingsphere.test.mock.AutoMockExtension;
import org.apache.shardingsphere.test.mock.StaticMockSettings;
-import org.apache.shardingsphere.transaction.api.TransactionType;
import org.apache.shardingsphere.transaction.rule.TransactionRule;
import
org.apache.shardingsphere.transaction.rule.builder.DefaultTransactionRuleConfigurationBuilder;
import org.junit.jupiter.api.BeforeEach;
@@ -92,7 +91,6 @@ class ProxyBackendHandlerFactoryTest {
@BeforeEach
void setUp() {
when(connectionSession.getGrantee()).thenReturn(new
Grantee(DefaultUser.USERNAME, "%"));
-
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(TransactionType.LOCAL);
when(connectionSession.getDefaultDatabaseName()).thenReturn("db");
when(connectionSession.getDatabaseName()).thenReturn("db");
ProxyDatabaseConnectionManager databaseConnectionManager =
mock(ProxyDatabaseConnectionManager.class);
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableUpdatableRALBackendHandlerTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableUpdatableRALBackendHandlerTest.java
index 81a7b117aa7..4c82ef2e409 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableUpdatableRALBackendHandlerTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableUpdatableRALBackendHandlerTest.java
@@ -23,7 +23,6 @@ import
org.apache.shardingsphere.infra.database.mysql.type.MySQLDatabaseType;
import
org.apache.shardingsphere.infra.exception.kernel.syntax.UnsupportedVariableException;
import
org.apache.shardingsphere.proxy.backend.handler.distsql.DistSQLUpdateBackendHandler;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.transaction.api.TransactionType;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -36,7 +35,7 @@ class SetDistVariableUpdatableRALBackendHandlerTest {
@BeforeEach
void setUp() {
- connectionSession = new
ConnectionSession(mock(MySQLDatabaseType.class), TransactionType.LOCAL, new
DefaultAttributeMap());
+ connectionSession = new
ConnectionSession(mock(MySQLDatabaseType.class), new DefaultAttributeMap());
}
@Test
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 bf1e56dc06d..a1fbc0a0eef 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
@@ -26,7 +26,6 @@ import
org.apache.shardingsphere.proxy.backend.connector.jdbc.transaction.Backen
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.test.mock.AutoMockExtension;
import org.apache.shardingsphere.test.mock.StaticMockSettings;
-import org.apache.shardingsphere.transaction.api.TransactionType;
import org.apache.shardingsphere.transaction.rule.TransactionRule;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -59,7 +58,7 @@ class ConnectionSessionTest {
@BeforeEach
void setup() {
- connectionSession = new
ConnectionSession(mock(MySQLDatabaseType.class), TransactionType.LOCAL, null);
+ connectionSession = new
ConnectionSession(mock(MySQLDatabaseType.class), null);
when(databaseConnectionManager.getConnectionSession()).thenReturn(connectionSession);
}
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/session/transaction/TransactionStatusTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/session/transaction/TransactionStatusTest.java
index bfff4b7d011..10a4fa6e33c 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/session/transaction/TransactionStatusTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/session/transaction/TransactionStatusTest.java
@@ -18,24 +18,17 @@
package org.apache.shardingsphere.proxy.backend.session.transaction;
import org.apache.shardingsphere.transaction.api.TransactionType;
-import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;
class TransactionStatusTest {
- private TransactionStatus transactionStatus;
-
- @BeforeEach
- void setUp() {
- transactionStatus = new TransactionStatus(TransactionType.XA);
- }
-
@Test
- void assertSetInTransaction() {
+ void assertIsInConnectionHeldTransaction() {
+ TransactionStatus transactionStatus = new TransactionStatus();
transactionStatus.setInTransaction(true);
- boolean actual = transactionStatus.isInConnectionHeldTransaction();
+ boolean actual =
transactionStatus.isInConnectionHeldTransaction(TransactionType.XA);
assertTrue(actual);
}
}
diff --git
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcessListExecutorTest.java
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcessListExecutorTest.java
index a9e3f80b3e7..01568cc2362 100644
---
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcessListExecutorTest.java
+++
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcessListExecutorTest.java
@@ -26,7 +26,6 @@ import
org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import org.apache.shardingsphere.test.mock.AutoMockExtension;
import org.apache.shardingsphere.test.mock.StaticMockSettings;
-import org.apache.shardingsphere.transaction.api.TransactionType;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.internal.configuration.plugins.Plugins;
@@ -52,7 +51,7 @@ class ShowProcessListExecutorTest {
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
ShowProcessListExecutor showProcessListExecutor = new
ShowProcessListExecutor(false);
setupProcesses(showProcessListExecutor);
- showProcessListExecutor.execute(new
ConnectionSession(mock(MySQLDatabaseType.class), TransactionType.LOCAL, new
DefaultAttributeMap()));
+ showProcessListExecutor.execute(new
ConnectionSession(mock(MySQLDatabaseType.class), new DefaultAttributeMap()));
assertThat(showProcessListExecutor.getQueryResultMetaData().getColumnCount(),
is(8));
MergedResult mergedResult = showProcessListExecutor.getMergedResult();
while (mergedResult.next()) {
diff --git
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/sysvar/provider/TransactionIsolationValueProviderTest.java
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/sysvar/provider/TransactionIsolationValueProviderTest.java
index b5a3fe6e3a0..27b65fa25be 100644
---
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/sysvar/provider/TransactionIsolationValueProviderTest.java
+++
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/sysvar/provider/TransactionIsolationValueProviderTest.java
@@ -24,7 +24,6 @@ import
org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.sysv
import
org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.sysvar.Scope;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import
org.apache.shardingsphere.sql.parser.sql.common.enums.TransactionIsolationLevel;
-import org.apache.shardingsphere.transaction.api.TransactionType;
import org.junit.jupiter.api.Test;
import static org.hamcrest.CoreMatchers.is;
@@ -40,7 +39,7 @@ class TransactionIsolationValueProviderTest {
@Test
void assertGetSessionValue() {
- ConnectionSession connectionSession = new
ConnectionSession(TypedSPILoader.getService(DatabaseType.class, "MySQL"),
TransactionType.LOCAL, new DefaultAttributeMap());
+ ConnectionSession connectionSession = new
ConnectionSession(TypedSPILoader.getService(DatabaseType.class, "MySQL"), new
DefaultAttributeMap());
assertThat(new TransactionIsolationValueProvider().get(Scope.SESSION,
connectionSession, MySQLSystemVariable.TRANSACTION_ISOLATION),
is("REPEATABLE-READ"));
assertThat(new TransactionIsolationValueProvider().get(Scope.SESSION,
connectionSession, MySQLSystemVariable.TX_ISOLATION), is("REPEATABLE-READ"));
connectionSession.setIsolationLevel(TransactionIsolationLevel.READ_COMMITTED);
diff --git
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/sysvar/provider/TransactionReadOnlyValueProviderTest.java
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/sysvar/provider/TransactionReadOnlyValueProviderTest.java
index 959971c5495..470b250542b 100644
---
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/sysvar/provider/TransactionReadOnlyValueProviderTest.java
+++
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/sysvar/provider/TransactionReadOnlyValueProviderTest.java
@@ -23,7 +23,6 @@ import
org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import
org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.sysvar.MySQLSystemVariable;
import
org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.sysvar.Scope;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.transaction.api.TransactionType;
import org.junit.jupiter.api.Test;
import static org.hamcrest.CoreMatchers.is;
@@ -39,7 +38,7 @@ class TransactionReadOnlyValueProviderTest {
@Test
void assertGetSessionValue() {
- ConnectionSession connectionSession = new
ConnectionSession(TypedSPILoader.getService(DatabaseType.class, "MySQL"),
TransactionType.LOCAL, new DefaultAttributeMap());
+ ConnectionSession connectionSession = new
ConnectionSession(TypedSPILoader.getService(DatabaseType.class, "MySQL"), new
DefaultAttributeMap());
assertThat(new TransactionReadOnlyValueProvider().get(Scope.SESSION,
connectionSession, MySQLSystemVariable.TX_READ_ONLY), is("0"));
assertThat(new TransactionReadOnlyValueProvider().get(Scope.SESSION,
connectionSession, MySQLSystemVariable.TRANSACTION_READ_ONLY), is("0"));
connectionSession.setReadOnly(true);
diff --git
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/sysvar/provider/VersionValueProviderTest.java
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/sysvar/provider/VersionValueProviderTest.java
index 6b695b44317..593cd5d8f0d 100644
---
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/sysvar/provider/VersionValueProviderTest.java
+++
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/sysvar/provider/VersionValueProviderTest.java
@@ -24,7 +24,6 @@ import
org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import
org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.sysvar.MySQLSystemVariable;
import
org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.sysvar.Scope;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.transaction.api.TransactionType;
import org.junit.jupiter.api.Test;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
@@ -39,7 +38,7 @@ class VersionValueProviderTest {
DatabaseType databaseType =
TypedSPILoader.getService(DatabaseType.class, "MySQL");
try (MockedStatic<DatabaseProtocolServerInfo> mockedStatic =
Mockito.mockStatic(DatabaseProtocolServerInfo.class)) {
mockedStatic.when(() ->
DatabaseProtocolServerInfo.getProtocolVersion(null,
databaseType)).thenReturn("8.0");
- ConnectionSession connectionSession = new
ConnectionSession(databaseType, TransactionType.LOCAL, new
DefaultAttributeMap());
+ ConnectionSession connectionSession = new
ConnectionSession(databaseType, new DefaultAttributeMap());
assertThat(new VersionValueProvider().get(Scope.GLOBAL,
connectionSession, MySQLSystemVariable.VERSION), is("8.0"));
}
}
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 ed57d6e3c5a..50e2dac80d1 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
@@ -25,7 +25,6 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.db.protocol.constant.CommonConstants;
import org.apache.shardingsphere.infra.executor.sql.process.ProcessEngine;
import org.apache.shardingsphere.infra.metadata.user.Grantee;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import org.apache.shardingsphere.authentication.result.AuthenticationResult;
import org.apache.shardingsphere.proxy.frontend.exception.ExpectedExceptions;
@@ -33,7 +32,6 @@ import
org.apache.shardingsphere.proxy.frontend.executor.ConnectionThreadExecuto
import org.apache.shardingsphere.proxy.frontend.executor.UserExecutorGroup;
import
org.apache.shardingsphere.proxy.frontend.spi.DatabaseProtocolFrontendEngine;
import org.apache.shardingsphere.proxy.frontend.state.ProxyStateContext;
-import org.apache.shardingsphere.transaction.rule.TransactionRule;
import java.util.Optional;
@@ -53,8 +51,7 @@ public final class FrontendChannelInboundHandler extends
ChannelInboundHandlerAd
public FrontendChannelInboundHandler(final DatabaseProtocolFrontendEngine
databaseProtocolFrontendEngine, final Channel channel) {
this.databaseProtocolFrontendEngine = databaseProtocolFrontendEngine;
- connectionSession = new
ConnectionSession(databaseProtocolFrontendEngine.getType(),
-
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(TransactionRule.class).getDefaultType(),
channel);
+ connectionSession = new
ConnectionSession(databaseProtocolFrontendEngine.getType(), channel);
}
@Override
diff --git
a/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyState.java
b/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyState.java
index e3d71f5d1ad..f42af6a8aa5 100644
---
a/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyState.java
+++
b/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyState.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.proxy.frontend.state.impl;
import io.netty.channel.ChannelHandlerContext;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
+import org.apache.shardingsphere.proxy.backend.util.TransactionUtils;
import org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask;
import
org.apache.shardingsphere.proxy.frontend.executor.ConnectionThreadExecutorGroup;
import org.apache.shardingsphere.proxy.frontend.executor.UserExecutorGroup;
@@ -46,6 +47,6 @@ public final class OKProxyState implements ProxyState {
}
private boolean requireOccupyThreadForConnection(final ConnectionSession
connectionSession) {
- return
TransactionType.isDistributedTransaction(connectionSession.getTransactionStatus().getTransactionType());
+ return
TransactionType.isDistributedTransaction(TransactionUtils.getTransactionType(connectionSession.getConnectionContext().getTransactionContext()));
}
}
diff --git
a/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyStateTest.java
b/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyStateTest.java
index b4f4d47f877..a55846ca340 100644
---
a/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyStateTest.java
+++
b/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyStateTest.java
@@ -20,7 +20,17 @@ package org.apache.shardingsphere.proxy.frontend.state.impl;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.embedded.EmbeddedChannel;
import lombok.SneakyThrows;
+import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
+import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
+import org.apache.shardingsphere.infra.instance.InstanceContext;
+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.spi.type.typed.TypedSPILoader;
+import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.mode.manager.ContextManager;
+import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask;
@@ -29,12 +39,14 @@ import
org.apache.shardingsphere.proxy.frontend.spi.DatabaseProtocolFrontendEngi
import org.apache.shardingsphere.test.mock.AutoMockExtension;
import org.apache.shardingsphere.test.mock.StaticMockSettings;
import org.apache.shardingsphere.transaction.api.TransactionType;
+import org.apache.shardingsphere.transaction.rule.TransactionRule;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.internal.configuration.plugins.Plugins;
+import java.util.Collections;
import java.util.Map;
import java.util.concurrent.ExecutorService;
@@ -63,10 +75,9 @@ class OKProxyStateTest {
@Test
void assertExecuteWithDistributedTransaction() {
- ContextManager contextManager = mock(ContextManager.class,
RETURNS_DEEP_STUBS);
+ ContextManager contextManager = mockContextManager();
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
ConnectionSession connectionSession = mock(ConnectionSession.class,
RETURNS_DEEP_STUBS);
-
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(TransactionType.XA);
when(connectionSession.getConnectionId()).thenReturn(1);
ExecutorService executorService = registerMockExecutorService(1);
new OKProxyState().execute(context, null,
mock(DatabaseProtocolFrontendEngine.class), connectionSession);
@@ -74,6 +85,17 @@ class OKProxyStateTest {
ConnectionThreadExecutorGroup.getInstance().unregisterAndAwaitTermination(1);
}
+ private ContextManager mockContextManager() {
+ ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class,
RETURNS_DEEP_STUBS);
+
when(metaData.getDatabase(DefaultDatabase.LOGIC_NAME)).thenReturn(mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS));
+
when(metaData.getDatabases().values().iterator().next().getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
"FIXTURE"));
+
when(metaData.getProps().<Integer>getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE)).thenReturn(0);
+ TransactionRule transactionRule = mock(TransactionRule.class);
+ when(transactionRule.getDefaultType()).thenReturn(TransactionType.XA);
+ when(metaData.getGlobalRuleMetaData()).thenReturn(new
RuleMetaData(Collections.singletonList(transactionRule)));
+ return new ContextManager(new
MetaDataContexts(mock(MetaDataPersistService.class), metaData),
mock(InstanceContext.class));
+ }
+
@SuppressWarnings({"unchecked", "SameParameterValue"})
@SneakyThrows(ReflectiveOperationException.class)
private ExecutorService registerMockExecutorService(final int
connectionId) {
diff --git
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/admin/MySQLComResetConnectionExecutorTest.java
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/admin/MySQLComResetConnectionExecutorTest.java
index cb431b18cfd..200850c3f76 100644
---
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/admin/MySQLComResetConnectionExecutorTest.java
+++
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/admin/MySQLComResetConnectionExecutorTest.java
@@ -28,7 +28,6 @@ import
org.apache.shardingsphere.proxy.backend.session.transaction.TransactionSt
import
org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.MySQLServerPreparedStatement;
import org.apache.shardingsphere.test.mock.AutoMockExtension;
import org.apache.shardingsphere.test.mock.ConstructionMockSettings;
-import org.apache.shardingsphere.transaction.api.TransactionType;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -53,7 +52,7 @@ class MySQLComResetConnectionExecutorTest {
ConnectionSession connectionSession = mock(ConnectionSession.class);
ProxyDatabaseConnectionManager databaseConnectionManager =
mock(ProxyDatabaseConnectionManager.class);
when(connectionSession.getDatabaseConnectionManager()).thenReturn(databaseConnectionManager);
- when(connectionSession.getTransactionStatus()).thenReturn(new
TransactionStatus(TransactionType.LOCAL));
+ when(connectionSession.getTransactionStatus()).thenReturn(new
TransactionStatus());
when(connectionSession.getServerPreparedStatementRegistry()).thenReturn(new
ServerPreparedStatementRegistry());
int statementId = 1;
connectionSession.getServerPreparedStatementRegistry().addPreparedStatement(statementId,
new MySQLServerPreparedStatement("", null, new HintValueContext(),
Collections.emptyList()));
diff --git
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/reset/MySQLComStmtResetExecutorTest.java
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/reset/MySQLComStmtResetExecutorTest.java
index c38a989baf3..053abb2718d 100644
---
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/reset/MySQLComStmtResetExecutorTest.java
+++
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/reset/MySQLComStmtResetExecutorTest.java
@@ -26,7 +26,6 @@ import
org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import
org.apache.shardingsphere.proxy.backend.session.ServerPreparedStatementRegistry;
import
org.apache.shardingsphere.proxy.backend.session.transaction.TransactionStatus;
import
org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.MySQLServerPreparedStatement;
-import org.apache.shardingsphere.transaction.api.TransactionType;
import org.junit.jupiter.api.Test;
import java.util.Collection;
@@ -45,7 +44,7 @@ class MySQLComStmtResetExecutorTest {
void assertExecute() {
ConnectionSession connectionSession = mock(ConnectionSession.class);
when(connectionSession.getServerPreparedStatementRegistry()).thenReturn(new
ServerPreparedStatementRegistry());
- when(connectionSession.getTransactionStatus()).thenReturn(new
TransactionStatus(TransactionType.LOCAL));
+ when(connectionSession.getTransactionStatus()).thenReturn(new
TransactionStatus());
MySQLServerPreparedStatement preparedStatement = new
MySQLServerPreparedStatement("", mock(SQLStatementContext.class), new
HintValueContext(), Collections.emptyList());
preparedStatement.getLongData().put(0, new byte[0]);
connectionSession.getServerPreparedStatementRegistry().addPreparedStatement(1,
preparedStatement);
diff --git
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngineTest.java
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngineTest.java
index 1d4deb29e77..34cbc11b8cf 100644
---
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngineTest.java
+++
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngineTest.java
@@ -36,7 +36,6 @@ import
org.apache.shardingsphere.proxy.frontend.command.executor.ResponseType;
import
org.apache.shardingsphere.proxy.frontend.postgresql.command.query.simple.PostgreSQLComQueryExecutor;
import org.apache.shardingsphere.test.mock.AutoMockExtension;
import org.apache.shardingsphere.test.mock.StaticMockSettings;
-import org.apache.shardingsphere.transaction.api.TransactionType;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -73,7 +72,7 @@ class PostgreSQLCommandExecuteEngineTest {
@BeforeEach
void setUp() {
when(channelHandlerContext.channel()).thenReturn(channel);
- when(connectionSession.getTransactionStatus()).thenReturn(new
TransactionStatus(TransactionType.LOCAL));
+ when(connectionSession.getTransactionStatus()).thenReturn(new
TransactionStatus());
}
@Test
diff --git
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/sync/PostgreSQLComSyncExecutorTest.java
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/sync/PostgreSQLComSyncExecutorTest.java
index c61f70db9c4..24b05bd83e4 100644
---
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/sync/PostgreSQLComSyncExecutorTest.java
+++
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/sync/PostgreSQLComSyncExecutorTest.java
@@ -20,7 +20,6 @@ package
org.apache.shardingsphere.proxy.frontend.postgresql.command.query.extend
import
org.apache.shardingsphere.db.protocol.postgresql.packet.generic.PostgreSQLReadyForQueryPacket;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import
org.apache.shardingsphere.proxy.backend.session.transaction.TransactionStatus;
-import org.apache.shardingsphere.transaction.api.TransactionType;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
@@ -39,7 +38,7 @@ class PostgreSQLComSyncExecutorTest {
@Test
void assertNewInstance() {
- when(connectionSession.getTransactionStatus()).thenReturn(new
TransactionStatus(TransactionType.LOCAL));
+ when(connectionSession.getTransactionStatus()).thenReturn(new
TransactionStatus());
PostgreSQLComSyncExecutor actual = new
PostgreSQLComSyncExecutor(connectionSession);
assertThat(actual.execute().iterator().next(),
is(instanceOf(PostgreSQLReadyForQueryPacket.class)));
}