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 de6fb5830ac Refactor TCLStatement (#35569) de6fb5830ac is described below commit de6fb5830ac0ebb7e67fb69c8f0ac6c9952e626d Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Mon Jun 2 11:40:30 2025 +0800 Refactor TCLStatement (#35569) * Refactor TCLStatement * Refactor TCLStatement * Refactor TCLStatement * Refactor TCLStatement --- .../type/ClickHouseTCLStatementVisitor.java | 1 - .../statement/type/DorisTCLStatementVisitor.java | 103 +++++++++++---------- .../type/FirebirdTCLStatementVisitor.java | 2 +- .../statement/type/MySQLTCLStatementVisitor.java | 103 +++++++++++---------- .../type/OpenGaussTCLStatementVisitor.java | 14 +-- .../statement/type/OracleTCLStatementVisitor.java | 14 +-- .../type/PostgreSQLTCLStatementVisitor.java | 76 +++++++-------- .../type/SQLServerTCLStatementVisitor.java | 32 +++---- .../tcl/BeginDistributedTransactionStatement.java | 2 +- .../statement/tcl/BeginTransactionStatement.java | 2 +- .../core/statement/tcl/CheckpointStatement.java | 2 +- .../statement/tcl/CommitPreparedStatement.java | 2 +- .../core/statement/tcl/CommitStatement.java | 2 +- .../core/statement/tcl/LockStatement.java | 7 +- .../statement/tcl/PrepareTransactionStatement.java | 2 +- .../statement/tcl/ReleaseSavepointStatement.java | 8 +- .../statement/tcl/RollbackPreparedStatement.java | 2 +- .../core/statement/tcl/RollbackStatement.java | 14 +-- .../core/statement/tcl/SavepointStatement.java | 8 +- .../core/statement/tcl/SetAutoCommitStatement.java | 8 +- .../statement/tcl/SetConstraintsStatement.java | 2 +- .../statement/tcl/SetTransactionStatement.java | 50 +++++++--- .../statement/tcl/StartTransactionStatement.java | 2 +- .../core/statement/tcl/UnlockStatement.java | 2 +- .../backend/handler/tcl/SetTransactionHandler.java | 9 +- .../handler/tcl/TCLBackendHandlerFactory.java | 2 +- 26 files changed, 236 insertions(+), 235 deletions(-) diff --git a/parser/sql/dialect/clickhouse/src/main/java/org/apache/shardingsphere/sql/parser/clickhouse/visitor/statement/type/ClickHouseTCLStatementVisitor.java b/parser/sql/dialect/clickhouse/src/main/java/org/apache/shardingsphere/sql/parser/clickhouse/visitor/statement/type/ClickHouseTCLStatementVisitor.java index 34b0cfb7b16..b33540a5a3b 100644 --- a/parser/sql/dialect/clickhouse/src/main/java/org/apache/shardingsphere/sql/parser/clickhouse/visitor/statement/type/ClickHouseTCLStatementVisitor.java +++ b/parser/sql/dialect/clickhouse/src/main/java/org/apache/shardingsphere/sql/parser/clickhouse/visitor/statement/type/ClickHouseTCLStatementVisitor.java @@ -24,5 +24,4 @@ import org.apache.shardingsphere.sql.parser.clickhouse.visitor.statement.ClickHo * ClickHouse TCL statement visitor. */ public final class ClickHouseTCLStatementVisitor extends ClickHouseStatementVisitor implements TCLStatementVisitor { - } diff --git a/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisTCLStatementVisitor.java b/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisTCLStatementVisitor.java index 61c71f6841d..7a036d9c973 100644 --- a/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisTCLStatementVisitor.java +++ b/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisTCLStatementVisitor.java @@ -22,13 +22,16 @@ import org.apache.shardingsphere.sql.parser.api.ASTNode; import org.apache.shardingsphere.sql.parser.api.visitor.statement.type.TCLStatementVisitor; import org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.BeginTransactionContext; import org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.CommitContext; +import org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.IsolationTypesContext; import org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.LockContext; +import org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.OptionTypeContext; import org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.ReleaseSavepointContext; import org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.RollbackContext; import org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.SavepointContext; import org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.SetAutoCommitContext; import org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.SetTransactionContext; import org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.TableLockContext; +import org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.TransactionAccessModeContext; import org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.UnlockContext; import org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.XaBeginContext; import org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.XaCommitContext; @@ -61,6 +64,7 @@ import org.apache.shardingsphere.sql.parser.statement.core.statement.tcl.xa.XARo import org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue; import java.util.Collection; +import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -71,46 +75,59 @@ public final class DorisTCLStatementVisitor extends DorisStatementVisitor implem @Override public ASTNode visitSetTransaction(final SetTransactionContext ctx) { - SetTransactionStatement result = new SetTransactionStatement(); - if (null != ctx.optionType()) { - OperationScope scope = null; - if (null != ctx.optionType().SESSION()) { - scope = OperationScope.SESSION; - } else if (null != ctx.optionType().GLOBAL()) { - scope = OperationScope.GLOBAL; - } - result.setScope(scope); + return new SetTransactionStatement(getOperationScope(ctx.optionType()), + getTransactionIsolationLevel(null == ctx.transactionCharacteristics().isolationLevel() ? null : ctx.transactionCharacteristics().isolationLevel().isolationTypes()), + getTransactionAccessType(ctx.transactionCharacteristics().transactionAccessMode())); + } + + private OperationScope getOperationScope(final OptionTypeContext ctx) { + if (null == ctx) { + return null; } - if (null != ctx.transactionCharacteristics().isolationLevel()) { - TransactionIsolationLevel isolationLevel = null; - if (null != ctx.transactionCharacteristics().isolationLevel().isolationTypes().SERIALIZABLE()) { - isolationLevel = TransactionIsolationLevel.SERIALIZABLE; - } else if (null != ctx.transactionCharacteristics().isolationLevel().isolationTypes().COMMITTED()) { - isolationLevel = TransactionIsolationLevel.READ_COMMITTED; - } else if (null != ctx.transactionCharacteristics().isolationLevel().isolationTypes().UNCOMMITTED()) { - isolationLevel = TransactionIsolationLevel.READ_UNCOMMITTED; - } else if (null != ctx.transactionCharacteristics().isolationLevel().isolationTypes().REPEATABLE()) { - isolationLevel = TransactionIsolationLevel.REPEATABLE_READ; - } - result.setIsolationLevel(isolationLevel); + if (null != ctx.SESSION()) { + return OperationScope.SESSION; } - if (null != ctx.transactionCharacteristics().transactionAccessMode()) { - TransactionAccessType accessType = null; - if (null != ctx.transactionCharacteristics().transactionAccessMode().ONLY()) { - accessType = TransactionAccessType.READ_ONLY; - } else if (null != ctx.transactionCharacteristics().transactionAccessMode().WRITE()) { - accessType = TransactionAccessType.READ_WRITE; - } - result.setAccessMode(accessType); + if (null != ctx.GLOBAL()) { + return OperationScope.GLOBAL; } - return result; + return null; + } + + private TransactionIsolationLevel getTransactionIsolationLevel(final IsolationTypesContext ctx) { + if (null == ctx) { + return null; + } + if (null != ctx.SERIALIZABLE()) { + return TransactionIsolationLevel.SERIALIZABLE; + } + if (null != ctx.COMMITTED()) { + return TransactionIsolationLevel.READ_COMMITTED; + } + if (null != ctx.UNCOMMITTED()) { + return TransactionIsolationLevel.READ_UNCOMMITTED; + } + if (null != ctx.REPEATABLE()) { + return TransactionIsolationLevel.REPEATABLE_READ; + } + return null; + } + + private TransactionAccessType getTransactionAccessType(final TransactionAccessModeContext ctx) { + if (null == ctx) { + return null; + } + if (null != ctx.ONLY()) { + return TransactionAccessType.READ_ONLY; + } + if (null != ctx.WRITE()) { + return TransactionAccessType.READ_WRITE; + } + return null; } @Override public ASTNode visitSetAutoCommit(final SetAutoCommitContext ctx) { - SetAutoCommitStatement result = new SetAutoCommitStatement(); - result.setAutoCommit(generateAutoCommitSegment(ctx.autoCommitValue).isAutoCommit()); - return result; + return new SetAutoCommitStatement(generateAutoCommitSegment(ctx.autoCommitValue).isAutoCommit()); } private AutoCommitSegment generateAutoCommitSegment(final Token ctx) { @@ -130,25 +147,17 @@ public final class DorisTCLStatementVisitor extends DorisStatementVisitor implem @Override public ASTNode visitRollback(final RollbackContext ctx) { - RollbackStatement result = new RollbackStatement(); - if (null != ctx.identifier()) { - result.setSavepointName(((IdentifierValue) visit(ctx.identifier())).getValue()); - } - return result; + return null == ctx.identifier() ? new RollbackStatement() : new RollbackStatement(((IdentifierValue) visit(ctx.identifier())).getValue()); } @Override public ASTNode visitSavepoint(final SavepointContext ctx) { - SavepointStatement result = new SavepointStatement(); - result.setSavepointName(((IdentifierValue) visit(ctx.identifier())).getValue()); - return result; + return new SavepointStatement(((IdentifierValue) visit(ctx.identifier())).getValue()); } @Override public ASTNode visitReleaseSavepoint(final ReleaseSavepointContext ctx) { - ReleaseSavepointStatement result = new ReleaseSavepointStatement(); - result.setSavepointName(((IdentifierValue) visit(ctx.identifier())).getValue()); - return result; + return new ReleaseSavepointStatement(((IdentifierValue) visit(ctx.identifier())).getValue()); } @Override @@ -183,11 +192,7 @@ public final class DorisTCLStatementVisitor extends DorisStatementVisitor implem @Override public ASTNode visitLock(final LockContext ctx) { - LockStatement result = new LockStatement(); - if (null != ctx.tableLock()) { - result.getTables().addAll(getLockTables(ctx.tableLock())); - } - return result; + return new LockStatement(null == ctx.tableLock() ? Collections.emptyList() : getLockTables(ctx.tableLock())); } private Collection<SimpleTableSegment> getLockTables(final List<TableLockContext> tableLockContexts) { diff --git a/parser/sql/dialect/firebird/src/main/java/org/apache/shardingsphere/sql/parser/firebird/visitor/statement/type/FirebirdTCLStatementVisitor.java b/parser/sql/dialect/firebird/src/main/java/org/apache/shardingsphere/sql/parser/firebird/visitor/statement/type/FirebirdTCLStatementVisitor.java index e06186c6b22..a5e18f5a918 100644 --- a/parser/sql/dialect/firebird/src/main/java/org/apache/shardingsphere/sql/parser/firebird/visitor/statement/type/FirebirdTCLStatementVisitor.java +++ b/parser/sql/dialect/firebird/src/main/java/org/apache/shardingsphere/sql/parser/firebird/visitor/statement/type/FirebirdTCLStatementVisitor.java @@ -51,6 +51,6 @@ public final class FirebirdTCLStatementVisitor extends FirebirdStatementVisitor @Override public ASTNode visitSavepoint(final SavepointContext ctx) { - return new SavepointStatement(); + return new SavepointStatement(null); } } diff --git a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLTCLStatementVisitor.java b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLTCLStatementVisitor.java index 15d0362b1ad..f33d360c57b 100644 --- a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLTCLStatementVisitor.java +++ b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLTCLStatementVisitor.java @@ -22,13 +22,16 @@ import org.apache.shardingsphere.sql.parser.api.ASTNode; import org.apache.shardingsphere.sql.parser.api.visitor.statement.type.TCLStatementVisitor; import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.BeginTransactionContext; import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CommitContext; +import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.IsolationTypesContext; import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.LockContext; +import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.OptionTypeContext; import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ReleaseSavepointContext; import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.RollbackContext; import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.SavepointContext; import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.SetAutoCommitContext; import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.SetTransactionContext; import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.TableLockContext; +import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.TransactionAccessModeContext; import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.UnlockContext; import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.XaBeginContext; import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.XaCommitContext; @@ -61,6 +64,7 @@ import org.apache.shardingsphere.sql.parser.statement.core.statement.tcl.xa.XARo import org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue; import java.util.Collection; +import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -71,46 +75,59 @@ public final class MySQLTCLStatementVisitor extends MySQLStatementVisitor implem @Override public ASTNode visitSetTransaction(final SetTransactionContext ctx) { - SetTransactionStatement result = new SetTransactionStatement(); - if (null != ctx.optionType()) { - OperationScope scope = null; - if (null != ctx.optionType().SESSION()) { - scope = OperationScope.SESSION; - } else if (null != ctx.optionType().GLOBAL()) { - scope = OperationScope.GLOBAL; - } - result.setScope(scope); + return new SetTransactionStatement(getOperationScope(ctx.optionType()), + getTransactionIsolationLevel(null == ctx.transactionCharacteristics().isolationLevel() ? null : ctx.transactionCharacteristics().isolationLevel().isolationTypes()), + getTransactionAccessType(ctx.transactionCharacteristics().transactionAccessMode())); + } + + private OperationScope getOperationScope(final OptionTypeContext ctx) { + if (null == ctx) { + return null; } - if (null != ctx.transactionCharacteristics().isolationLevel()) { - TransactionIsolationLevel isolationLevel = null; - if (null != ctx.transactionCharacteristics().isolationLevel().isolationTypes().SERIALIZABLE()) { - isolationLevel = TransactionIsolationLevel.SERIALIZABLE; - } else if (null != ctx.transactionCharacteristics().isolationLevel().isolationTypes().COMMITTED()) { - isolationLevel = TransactionIsolationLevel.READ_COMMITTED; - } else if (null != ctx.transactionCharacteristics().isolationLevel().isolationTypes().UNCOMMITTED()) { - isolationLevel = TransactionIsolationLevel.READ_UNCOMMITTED; - } else if (null != ctx.transactionCharacteristics().isolationLevel().isolationTypes().REPEATABLE()) { - isolationLevel = TransactionIsolationLevel.REPEATABLE_READ; - } - result.setIsolationLevel(isolationLevel); + if (null != ctx.SESSION()) { + return OperationScope.SESSION; } - if (null != ctx.transactionCharacteristics().transactionAccessMode()) { - TransactionAccessType accessType = null; - if (null != ctx.transactionCharacteristics().transactionAccessMode().ONLY()) { - accessType = TransactionAccessType.READ_ONLY; - } else if (null != ctx.transactionCharacteristics().transactionAccessMode().WRITE()) { - accessType = TransactionAccessType.READ_WRITE; - } - result.setAccessMode(accessType); + if (null != ctx.GLOBAL()) { + return OperationScope.GLOBAL; } - return result; + return null; + } + + private TransactionIsolationLevel getTransactionIsolationLevel(final IsolationTypesContext ctx) { + if (null == ctx) { + return null; + } + if (null != ctx.SERIALIZABLE()) { + return TransactionIsolationLevel.SERIALIZABLE; + } + if (null != ctx.COMMITTED()) { + return TransactionIsolationLevel.READ_COMMITTED; + } + if (null != ctx.UNCOMMITTED()) { + return TransactionIsolationLevel.READ_UNCOMMITTED; + } + if (null != ctx.REPEATABLE()) { + return TransactionIsolationLevel.REPEATABLE_READ; + } + return null; + } + + private TransactionAccessType getTransactionAccessType(final TransactionAccessModeContext ctx) { + if (null == ctx) { + return null; + } + if (null != ctx.ONLY()) { + return TransactionAccessType.READ_ONLY; + } + if (null != ctx.WRITE()) { + return TransactionAccessType.READ_WRITE; + } + return null; } @Override public ASTNode visitSetAutoCommit(final SetAutoCommitContext ctx) { - SetAutoCommitStatement result = new SetAutoCommitStatement(); - result.setAutoCommit(generateAutoCommitSegment(ctx.autoCommitValue).isAutoCommit()); - return result; + return new SetAutoCommitStatement(generateAutoCommitSegment(ctx.autoCommitValue).isAutoCommit()); } private AutoCommitSegment generateAutoCommitSegment(final Token ctx) { @@ -130,25 +147,17 @@ public final class MySQLTCLStatementVisitor extends MySQLStatementVisitor implem @Override public ASTNode visitRollback(final RollbackContext ctx) { - RollbackStatement result = new RollbackStatement(); - if (null != ctx.identifier()) { - result.setSavepointName(((IdentifierValue) visit(ctx.identifier())).getValue()); - } - return result; + return null == ctx.identifier() ? new RollbackStatement() : new RollbackStatement(((IdentifierValue) visit(ctx.identifier())).getValue()); } @Override public ASTNode visitSavepoint(final SavepointContext ctx) { - SavepointStatement result = new SavepointStatement(); - result.setSavepointName(((IdentifierValue) visit(ctx.identifier())).getValue()); - return result; + return new SavepointStatement(((IdentifierValue) visit(ctx.identifier())).getValue()); } @Override public ASTNode visitReleaseSavepoint(final ReleaseSavepointContext ctx) { - ReleaseSavepointStatement result = new ReleaseSavepointStatement(); - result.setSavepointName(((IdentifierValue) visit(ctx.identifier())).getValue()); - return result; + return new ReleaseSavepointStatement(((IdentifierValue) visit(ctx.identifier())).getValue()); } @Override @@ -183,11 +192,7 @@ public final class MySQLTCLStatementVisitor extends MySQLStatementVisitor implem @Override public ASTNode visitLock(final LockContext ctx) { - LockStatement result = new LockStatement(); - if (null != ctx.tableLock()) { - result.getTables().addAll(getLockTables(ctx.tableLock())); - } - return result; + return new LockStatement(null == ctx.tableLock() ? Collections.emptyList() : getLockTables(ctx.tableLock())); } private Collection<SimpleTableSegment> getLockTables(final List<TableLockContext> tableLockContexts) { diff --git a/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussTCLStatementVisitor.java b/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussTCLStatementVisitor.java index c956425c817..f298fc15dec 100644 --- a/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussTCLStatementVisitor.java +++ b/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussTCLStatementVisitor.java @@ -78,25 +78,17 @@ public final class OpenGaussTCLStatementVisitor extends OpenGaussStatementVisito @Override public ASTNode visitSavepoint(final SavepointContext ctx) { - String savepointName = ctx.colId().getText(); - SavepointStatement result = new SavepointStatement(); - result.setSavepointName(savepointName); - return result; + return new SavepointStatement(ctx.colId().getText()); } @Override public ASTNode visitRollbackToSavepoint(final RollbackToSavepointContext ctx) { - RollbackStatement result = new RollbackStatement(); - result.setSavepointName(ctx.colId().getText()); - return result; + return new RollbackStatement(ctx.colId().getText()); } @Override public ASTNode visitReleaseSavepoint(final ReleaseSavepointContext ctx) { - String savepointName = ctx.colId().getText(); - ReleaseSavepointStatement result = new ReleaseSavepointStatement(); - result.setSavepointName(savepointName); - return result; + return new ReleaseSavepointStatement(ctx.colId().getText()); } @Override diff --git a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleTCLStatementVisitor.java b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleTCLStatementVisitor.java index 7a507af25ca..e7555c9f24a 100644 --- a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleTCLStatementVisitor.java +++ b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleTCLStatementVisitor.java @@ -34,6 +34,8 @@ import org.apache.shardingsphere.sql.parser.statement.core.statement.tcl.SetCons import org.apache.shardingsphere.sql.parser.statement.core.statement.tcl.SetTransactionStatement; import org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue; +import java.util.Collections; + /** * TCL statement visitor for Oracle. */ @@ -51,18 +53,12 @@ public final class OracleTCLStatementVisitor extends OracleStatementVisitor impl @Override public ASTNode visitRollback(final RollbackContext ctx) { - RollbackStatement result = new RollbackStatement(); - if (null != ctx.savepointClause().savepointName()) { - result.setSavepointName(((IdentifierValue) visit(ctx.savepointClause().savepointName())).getValue()); - } - return result; + return null == ctx.savepointClause().savepointName() ? new RollbackStatement() : new RollbackStatement(((IdentifierValue) visit(ctx.savepointClause().savepointName())).getValue()); } @Override public ASTNode visitSavepoint(final SavepointContext ctx) { - SavepointStatement result = new SavepointStatement(); - result.setSavepointName(((IdentifierValue) visit(ctx.savepointName())).getValue()); - return result; + return new SavepointStatement(((IdentifierValue) visit(ctx.savepointName())).getValue()); } @Override @@ -72,6 +68,6 @@ public final class OracleTCLStatementVisitor extends OracleStatementVisitor impl @Override public ASTNode visitLock(final LockContext ctx) { - return new LockStatement(); + return new LockStatement(Collections.emptyList()); } } diff --git a/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLTCLStatementVisitor.java b/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLTCLStatementVisitor.java index 0a20722f8b4..c392c8f4b5e 100644 --- a/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLTCLStatementVisitor.java +++ b/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLTCLStatementVisitor.java @@ -25,6 +25,7 @@ import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.Ch import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.CommitContext; import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.CommitPreparedContext; import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.EndContext; +import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.IsoLevelContext; import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.LockContext; import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.PrepareTransactionContext; import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser.RelationExprContext; @@ -56,8 +57,8 @@ import org.apache.shardingsphere.sql.parser.statement.core.statement.tcl.SetTran import org.apache.shardingsphere.sql.parser.statement.core.statement.tcl.StartTransactionStatement; import java.util.Collection; -import java.util.LinkedList; -import java.util.List; +import java.util.Collections; +import java.util.stream.Collectors; /** * TCL statement visitor for PostgreSQL. @@ -68,43 +69,45 @@ public final class PostgreSQLTCLStatementVisitor extends PostgreSQLStatementVisi public ASTNode visitSetTransaction(final SetTransactionContext ctx) { SetTransactionStatement result = new SetTransactionStatement(); if (null != ctx.transactionModeList()) { - ctx.transactionModeList().transactionModeItem().forEach(each -> { - result.setAccessMode(getTransactionAccessType(each)); - result.setIsolationLevel(getTransactionIsolationLevel(each)); - }); + for (TransactionModeItemContext each : ctx.transactionModeList().transactionModeItem()) { + result = new SetTransactionStatement(null, getTransactionIsolationLevel(each.isoLevel()), getTransactionAccessType(each)); + } } return result; } - private TransactionAccessType getTransactionAccessType(final TransactionModeItemContext modeItemContext) { - if (null != modeItemContext.ONLY()) { - return TransactionAccessType.READ_ONLY; - } - if (null != modeItemContext.WRITE()) { - return TransactionAccessType.READ_WRITE; - } - return null; - } - - private TransactionIsolationLevel getTransactionIsolationLevel(final TransactionModeItemContext modeItemContext) { - if (null == modeItemContext.isoLevel()) { + private TransactionIsolationLevel getTransactionIsolationLevel(final IsoLevelContext ctx) { + if (null == ctx) { return null; } - if (null != modeItemContext.isoLevel().UNCOMMITTED()) { + if (null != ctx.UNCOMMITTED()) { return TransactionIsolationLevel.READ_UNCOMMITTED; } - if (null != modeItemContext.isoLevel().COMMITTED()) { + if (null != ctx.COMMITTED()) { return TransactionIsolationLevel.READ_COMMITTED; } - if (null != modeItemContext.isoLevel().REPEATABLE()) { + if (null != ctx.REPEATABLE()) { return TransactionIsolationLevel.REPEATABLE_READ; } - if (null != modeItemContext.isoLevel().SERIALIZABLE()) { + if (null != ctx.SERIALIZABLE()) { return TransactionIsolationLevel.SERIALIZABLE; } return null; } + private TransactionAccessType getTransactionAccessType(final TransactionModeItemContext ctx) { + if (null == ctx) { + return null; + } + if (null != ctx.ONLY()) { + return TransactionAccessType.READ_ONLY; + } + if (null != ctx.WRITE()) { + return TransactionAccessType.READ_WRITE; + } + return null; + } + @Override public ASTNode visitBeginTransaction(final BeginTransactionContext ctx) { return new BeginTransactionStatement(); @@ -127,25 +130,17 @@ public final class PostgreSQLTCLStatementVisitor extends PostgreSQLStatementVisi @Override public ASTNode visitSavepoint(final SavepointContext ctx) { - String savepointName = ctx.colId().getText(); - SavepointStatement result = new SavepointStatement(); - result.setSavepointName(savepointName); - return result; + return new SavepointStatement(ctx.colId().getText()); } @Override public ASTNode visitRollbackToSavepoint(final RollbackToSavepointContext ctx) { - RollbackStatement result = new RollbackStatement(); - result.setSavepointName(ctx.colId().getText()); - return result; + return new RollbackStatement(ctx.colId().getText()); } @Override public ASTNode visitReleaseSavepoint(final ReleaseSavepointContext ctx) { - String savepointName = ctx.colId().getText(); - ReleaseSavepointStatement result = new ReleaseSavepointStatement(); - result.setSavepointName(savepointName); - return result; + return new ReleaseSavepointStatement(ctx.colId().getText()); } @Override @@ -175,20 +170,11 @@ public final class PostgreSQLTCLStatementVisitor extends PostgreSQLStatementVisi @Override public ASTNode visitLock(final LockContext ctx) { - LockStatement result = new LockStatement(); - if (null != ctx.relationExprList()) { - result.getTables().addAll(getLockTables(ctx.relationExprList().relationExpr())); - } - return result; + return new LockStatement(null == ctx.relationExprList() ? Collections.emptyList() : getLockTables(ctx.relationExprList().relationExpr())); } - private Collection<SimpleTableSegment> getLockTables(final List<RelationExprContext> relationExprContexts) { - Collection<SimpleTableSegment> result = new LinkedList<>(); - for (RelationExprContext each : relationExprContexts) { - SimpleTableSegment tableSegment = (SimpleTableSegment) visit(each.qualifiedName()); - result.add(tableSegment); - } - return result; + private Collection<SimpleTableSegment> getLockTables(final Collection<RelationExprContext> relationExprContexts) { + return relationExprContexts.stream().map(each -> (SimpleTableSegment) visit(each.qualifiedName())).collect(Collectors.toList()); } @Override diff --git a/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/type/SQLServerTCLStatementVisitor.java b/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/type/SQLServerTCLStatementVisitor.java index 18124b63cd5..2e5685f3746 100644 --- a/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/type/SQLServerTCLStatementVisitor.java +++ b/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/type/SQLServerTCLStatementVisitor.java @@ -46,32 +46,28 @@ public final class SQLServerTCLStatementVisitor extends SQLServerStatementVisito @Override public ASTNode visitSetTransaction(final SetTransactionContext ctx) { - SetTransactionStatement result = new SetTransactionStatement(); - result.setIsolationLevel(getTransactionIsolationLevel(ctx.isolationLevel())); - return result; + return new SetTransactionStatement(null, getTransactionIsolationLevel(ctx.isolationLevel()), null); } private TransactionIsolationLevel getTransactionIsolationLevel(final IsolationLevelContext ctx) { - TransactionIsolationLevel result; if (null != ctx.UNCOMMITTED()) { - result = TransactionIsolationLevel.READ_UNCOMMITTED; - } else if (null != ctx.COMMITTED()) { - result = TransactionIsolationLevel.READ_COMMITTED; - } else if (null != ctx.REPEATABLE()) { - result = TransactionIsolationLevel.REPEATABLE_READ; - } else if (null != ctx.SNAPSHOT()) { - result = TransactionIsolationLevel.SNAPSHOT; - } else { - result = TransactionIsolationLevel.SERIALIZABLE; + return TransactionIsolationLevel.READ_UNCOMMITTED; } - return result; + if (null != ctx.COMMITTED()) { + return TransactionIsolationLevel.READ_COMMITTED; + } + if (null != ctx.REPEATABLE()) { + return TransactionIsolationLevel.REPEATABLE_READ; + } + if (null != ctx.SNAPSHOT()) { + return TransactionIsolationLevel.SNAPSHOT; + } + return TransactionIsolationLevel.SERIALIZABLE; } @Override public ASTNode visitSetImplicitTransactions(final SetImplicitTransactionsContext ctx) { - SetAutoCommitStatement result = new SetAutoCommitStatement(); - result.setAutoCommit("ON".equalsIgnoreCase(ctx.implicitTransactionsValue().getText())); - return result; + return new SetAutoCommitStatement("ON".equalsIgnoreCase(ctx.implicitTransactionsValue().getText())); } @Override @@ -106,6 +102,6 @@ public final class SQLServerTCLStatementVisitor extends SQLServerStatementVisito @Override public ASTNode visitSavepoint(final SavepointContext ctx) { - return new SavepointStatement(); + return new SavepointStatement(null); } } diff --git a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/BeginDistributedTransactionStatement.java b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/BeginDistributedTransactionStatement.java index cf5dd8b1987..a0865b8deca 100644 --- a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/BeginDistributedTransactionStatement.java +++ b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/BeginDistributedTransactionStatement.java @@ -22,5 +22,5 @@ import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQL /** * Begin distributed transaction statement. */ -public class BeginDistributedTransactionStatement extends AbstractSQLStatement implements TCLStatement { +public final class BeginDistributedTransactionStatement extends AbstractSQLStatement implements TCLStatement { } diff --git a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/BeginTransactionStatement.java b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/BeginTransactionStatement.java index cf00c85731d..d6720705ba2 100644 --- a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/BeginTransactionStatement.java +++ b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/BeginTransactionStatement.java @@ -22,5 +22,5 @@ import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQL /** * Begin transaction statement. */ -public class BeginTransactionStatement extends AbstractSQLStatement implements TCLStatement { +public final class BeginTransactionStatement extends AbstractSQLStatement implements TCLStatement { } diff --git a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/CheckpointStatement.java b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/CheckpointStatement.java index e8422a8effa..de761d1f630 100644 --- a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/CheckpointStatement.java +++ b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/CheckpointStatement.java @@ -22,5 +22,5 @@ import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQL /** * Checkpoint statement. */ -public class CheckpointStatement extends AbstractSQLStatement implements TCLStatement { +public final class CheckpointStatement extends AbstractSQLStatement implements TCLStatement { } diff --git a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/CommitPreparedStatement.java b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/CommitPreparedStatement.java index 892d7394782..90036bd2f2c 100644 --- a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/CommitPreparedStatement.java +++ b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/CommitPreparedStatement.java @@ -22,5 +22,5 @@ import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQL /** * Commit prepared statement. */ -public class CommitPreparedStatement extends AbstractSQLStatement implements TCLStatement { +public final class CommitPreparedStatement extends AbstractSQLStatement implements TCLStatement { } diff --git a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/CommitStatement.java b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/CommitStatement.java index a99b0203453..9e0d8d18a9e 100644 --- a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/CommitStatement.java +++ b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/CommitStatement.java @@ -22,5 +22,5 @@ import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQL /** * Commit statement. */ -public class CommitStatement extends AbstractSQLStatement implements TCLStatement { +public final class CommitStatement extends AbstractSQLStatement implements TCLStatement { } diff --git a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/LockStatement.java b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/LockStatement.java index 854598e4175..fadea63fc2e 100644 --- a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/LockStatement.java +++ b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/LockStatement.java @@ -18,17 +18,18 @@ package org.apache.shardingsphere.sql.parser.statement.core.statement.tcl; import lombok.Getter; +import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment; import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement; import java.util.Collection; -import java.util.LinkedList; /** * Lock statement. */ +@RequiredArgsConstructor @Getter -public class LockStatement extends AbstractSQLStatement implements TCLStatement { +public final class LockStatement extends AbstractSQLStatement implements TCLStatement { - private final Collection<SimpleTableSegment> tables = new LinkedList<>(); + private final Collection<SimpleTableSegment> tables; } diff --git a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/PrepareTransactionStatement.java b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/PrepareTransactionStatement.java index 3c809f56890..485b7214329 100644 --- a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/PrepareTransactionStatement.java +++ b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/PrepareTransactionStatement.java @@ -22,5 +22,5 @@ import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQL /** * Prepare transaction statement. */ -public class PrepareTransactionStatement extends AbstractSQLStatement implements TCLStatement { +public final class PrepareTransactionStatement extends AbstractSQLStatement implements TCLStatement { } diff --git a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/ReleaseSavepointStatement.java b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/ReleaseSavepointStatement.java index b769e2a28a6..873ca39338d 100644 --- a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/ReleaseSavepointStatement.java +++ b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/ReleaseSavepointStatement.java @@ -18,15 +18,15 @@ package org.apache.shardingsphere.sql.parser.statement.core.statement.tcl; import lombok.Getter; -import lombok.Setter; +import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement; /** * Release savepoint statement. */ +@RequiredArgsConstructor @Getter -@Setter -public class ReleaseSavepointStatement extends AbstractSQLStatement implements TCLStatement { +public final class ReleaseSavepointStatement extends AbstractSQLStatement implements TCLStatement { - private String savepointName; + private final String savepointName; } diff --git a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/RollbackPreparedStatement.java b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/RollbackPreparedStatement.java index aaf1573a765..ba7b9e48e1b 100644 --- a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/RollbackPreparedStatement.java +++ b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/RollbackPreparedStatement.java @@ -22,5 +22,5 @@ import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQL /** * Rollback prepared statement. */ -public class RollbackPreparedStatement extends AbstractSQLStatement implements TCLStatement { +public final class RollbackPreparedStatement extends AbstractSQLStatement implements TCLStatement { } diff --git a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/RollbackStatement.java b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/RollbackStatement.java index d1d805f355f..bf94155fa6c 100644 --- a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/RollbackStatement.java +++ b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/RollbackStatement.java @@ -17,8 +17,7 @@ package org.apache.shardingsphere.sql.parser.statement.core.statement.tcl; -import lombok.Getter; -import lombok.Setter; +import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement; import java.util.Optional; @@ -26,11 +25,14 @@ import java.util.Optional; /** * Rollback statement. */ -@Getter -@Setter -public class RollbackStatement extends AbstractSQLStatement implements TCLStatement { +@RequiredArgsConstructor +public final class RollbackStatement extends AbstractSQLStatement implements TCLStatement { - private String savepointName; + private final String savepointName; + + public RollbackStatement() { + this(null); + } /** * Get save point name. diff --git a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/SavepointStatement.java b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/SavepointStatement.java index 8d39ab8f4ad..c98c0a7cdfe 100644 --- a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/SavepointStatement.java +++ b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/SavepointStatement.java @@ -18,15 +18,15 @@ package org.apache.shardingsphere.sql.parser.statement.core.statement.tcl; import lombok.Getter; -import lombok.Setter; +import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement; /** * Savepoint statement. */ +@RequiredArgsConstructor @Getter -@Setter -public class SavepointStatement extends AbstractSQLStatement implements TCLStatement { +public final class SavepointStatement extends AbstractSQLStatement implements TCLStatement { - private String savepointName; + private final String savepointName; } diff --git a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/SetAutoCommitStatement.java b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/SetAutoCommitStatement.java index 674f2292a11..e45ca2ed3b5 100644 --- a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/SetAutoCommitStatement.java +++ b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/SetAutoCommitStatement.java @@ -18,15 +18,15 @@ package org.apache.shardingsphere.sql.parser.statement.core.statement.tcl; import lombok.Getter; -import lombok.Setter; +import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement; /** * Set auto commit statement. */ +@RequiredArgsConstructor @Getter -@Setter -public class SetAutoCommitStatement extends AbstractSQLStatement implements TCLStatement { +public final class SetAutoCommitStatement extends AbstractSQLStatement implements TCLStatement { - private boolean autoCommit; + private final boolean autoCommit; } diff --git a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/SetConstraintsStatement.java b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/SetConstraintsStatement.java index 49d468f884a..40990180e06 100644 --- a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/SetConstraintsStatement.java +++ b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/SetConstraintsStatement.java @@ -22,5 +22,5 @@ import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQL /** * Set constraints statement. */ -public class SetConstraintsStatement extends AbstractSQLStatement implements TCLStatement { +public final class SetConstraintsStatement extends AbstractSQLStatement implements TCLStatement { } diff --git a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/SetTransactionStatement.java b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/SetTransactionStatement.java index d4609d4a2dd..4aea0f5ec84 100644 --- a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/SetTransactionStatement.java +++ b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/SetTransactionStatement.java @@ -17,8 +17,7 @@ package org.apache.shardingsphere.sql.parser.statement.core.statement.tcl; -import lombok.Getter; -import lombok.Setter; +import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.sql.parser.statement.core.enums.OperationScope; import org.apache.shardingsphere.sql.parser.statement.core.enums.TransactionAccessType; import org.apache.shardingsphere.sql.parser.statement.core.enums.TransactionIsolationLevel; @@ -29,31 +28,54 @@ import java.util.Optional; /** * Set transaction statement. */ -@Getter -@Setter -public class SetTransactionStatement extends AbstractSQLStatement implements TCLStatement { +@RequiredArgsConstructor +public final class SetTransactionStatement extends AbstractSQLStatement implements TCLStatement { - private TransactionIsolationLevel isolationLevel; + private final OperationScope scope; - private OperationScope scope; + private final TransactionIsolationLevel isolationLevel; - private TransactionAccessType accessMode; + private final TransactionAccessType accessMode; + + public SetTransactionStatement() { + this(null, null, null); + } + + /** + * Whether to contain transaction scope. + * + * @return contains transaction scope or not + */ + public boolean containsScope() { + return null != scope; + } + + /** + * Whether is desired transaction scope. + * + * @param scope desired transaction scope + * @return is desired transaction scope or not + */ + public boolean isDesiredScope(final OperationScope scope) { + return this.scope == scope; + } /** - * Get isolation level. + * Get transaction isolation level. * - * @return isolation level + * @return transaction isolation level */ public Optional<TransactionIsolationLevel> getIsolationLevel() { return Optional.ofNullable(isolationLevel); } /** - * Get access mode. + * Whether is desired transaction access mode. * - * @return access mode + * @param accessMode desired transaction access mode + * @return is desired transaction access mode or not */ - public Optional<TransactionAccessType> getAccessMode() { - return Optional.ofNullable(accessMode); + public boolean isDesiredAccessMode(final TransactionAccessType accessMode) { + return this.accessMode == accessMode; } } diff --git a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/StartTransactionStatement.java b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/StartTransactionStatement.java index 7d642d0b58c..ab891862860 100644 --- a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/StartTransactionStatement.java +++ b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/StartTransactionStatement.java @@ -22,5 +22,5 @@ import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQL /** * Start transaction statement. */ -public class StartTransactionStatement extends AbstractSQLStatement implements TCLStatement { +public final class StartTransactionStatement extends AbstractSQLStatement implements TCLStatement { } diff --git a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/UnlockStatement.java b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/UnlockStatement.java index f8797a837bc..5af9eccd1db 100644 --- a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/UnlockStatement.java +++ b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/tcl/UnlockStatement.java @@ -22,5 +22,5 @@ import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQL /** * Unlock statement. */ -public class UnlockStatement extends AbstractSQLStatement implements TCLStatement { +public final class UnlockStatement extends AbstractSQLStatement implements TCLStatement { } diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/tcl/SetTransactionHandler.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/tcl/SetTransactionHandler.java index 9a5727491d9..72e2e4829bd 100644 --- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/tcl/SetTransactionHandler.java +++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/tcl/SetTransactionHandler.java @@ -45,19 +45,16 @@ public final class SetTransactionHandler implements ProxyBackendHandler { @Override public ResponseHeader execute() { - ShardingSpherePreconditions.checkState(null != sqlStatement.getScope() || !connectionSession.getTransactionStatus().isInTransaction(), SwitchTypeInTransactionException::new); + ShardingSpherePreconditions.checkState(sqlStatement.containsScope() || !connectionSession.getTransactionStatus().isInTransaction(), SwitchTypeInTransactionException::new); setReadOnly(); setTransactionIsolationLevel(); return new UpdateResponseHeader(sqlStatement); } private void setReadOnly() { - if (!sqlStatement.getAccessMode().isPresent()) { - return; - } - if (TransactionAccessType.READ_ONLY == sqlStatement.getAccessMode().get()) { + if (sqlStatement.isDesiredAccessMode(TransactionAccessType.READ_ONLY)) { connectionSession.setReadOnly(true); - } else if (TransactionAccessType.READ_WRITE == sqlStatement.getAccessMode().get()) { + } else if (sqlStatement.isDesiredAccessMode(TransactionAccessType.READ_WRITE)) { connectionSession.setReadOnly(false); } } diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/tcl/TCLBackendHandlerFactory.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/tcl/TCLBackendHandlerFactory.java index affb36eddba..977db9c488a 100644 --- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/tcl/TCLBackendHandlerFactory.java +++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/tcl/TCLBackendHandlerFactory.java @@ -77,7 +77,7 @@ public final class TCLBackendHandlerFactory { ? new TCLBackendHandler(tclStatement, TransactionOperationType.ROLLBACK_TO_SAVEPOINT, connectionSession) : new TCLBackendHandler(tclStatement, TransactionOperationType.ROLLBACK, connectionSession); } - if (tclStatement instanceof SetTransactionStatement && OperationScope.GLOBAL != ((SetTransactionStatement) tclStatement).getScope()) { + if (tclStatement instanceof SetTransactionStatement && !((SetTransactionStatement) tclStatement).isDesiredScope(OperationScope.GLOBAL)) { return new SetTransactionHandler((SetTransactionStatement) tclStatement, connectionSession, sqlStatementContext.getDatabaseType()); } if (tclStatement instanceof XAStatement) {