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

chengzhang 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 4d6fdca0a40 Refactor VariableAssignSegment (#33750)
4d6fdca0a40 is described below

commit 4d6fdca0a4052fa89a132ad525ac8338d7ba2d55
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Nov 21 14:16:52 2024 +0800

    Refactor VariableAssignSegment (#33750)
    
    * Refactor VariableAssignSegment
    
    * Refactor VariableAssignSegment
    
    * Refactor VariableAssignSegment
    
    * Refactor VariableAssignSegment
---
 .../statement/type/DorisDALStatementVisitor.java   | 105 +++++++++++----------
 .../statement/type/MySQLDALStatementVisitor.java   |  95 ++++++++++---------
 .../type/OpenGaussDALStatementVisitor.java         |  15 +--
 .../type/PostgreSQLDALStatementVisitor.java        |  23 +++--
 .../core/segment/dal/VariableAssignSegment.java    |  12 +--
 .../MySQLSetVariableAdminExecutorTest.java         |  18 +---
 .../PostgreSQLSetVariableAdminExecutorTest.java    |   6 +-
 .../command/query/extended/PortalTest.java         |   8 +-
 8 files changed, 135 insertions(+), 147 deletions(-)

diff --git 
a/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDALStatementVisitor.java
 
b/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDALStatementVisitor.java
index 84eb110699b..1d2c7237c5a 100644
--- 
a/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDALStatementVisitor.java
+++ 
b/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDALStatementVisitor.java
@@ -124,6 +124,9 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromTable
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.LoadTableIndexSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.PartitionDefinitionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.PartitionSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.ResetMasterOptionSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.ResetOptionSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.ResetSlaveOptionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.ShowFilterSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.ShowLikeSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.VariableAssignSegment;
@@ -212,9 +215,6 @@ import 
org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisShutdownSta
 import 
org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisUninstallComponentStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisUninstallPluginStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.doris.dal.DorisUseStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.ResetMasterOptionSegment;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.ResetOptionSegment;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.ResetSlaveOptionSegment;
 
 import java.util.Collection;
 import java.util.LinkedList;
@@ -913,74 +913,77 @@ public final class DorisDALStatementVisitor extends 
DorisStatementVisitor implem
     
     private Collection<VariableAssignSegment> getVariableAssigns(final 
OptionValueListContext ctx) {
         Collection<VariableAssignSegment> result = new LinkedList<>();
-        if (null == ctx.optionValueNoOptionType()) {
-            VariableAssignSegment variableAssign = new VariableAssignSegment();
-            variableAssign.setStartIndex(ctx.start.getStartIndex());
-            
variableAssign.setStopIndex(ctx.setExprOrDefault().stop.getStopIndex());
-            VariableSegment variable = new 
VariableSegment(ctx.internalVariableName().start.getStartIndex(), 
ctx.internalVariableName().stop.getStopIndex(), 
ctx.internalVariableName().getText());
-            variable.setScope(ctx.optionType().getText());
-            variableAssign.setVariable(variable);
-            variableAssign.setAssignValue(ctx.setExprOrDefault().getText());
-            result.add(variableAssign);
-        } else {
-            result.add(getVariableAssign(ctx.optionValueNoOptionType()));
-        }
+        result.add(null == ctx.optionValueNoOptionType() ? 
getVariableAssignSegment(ctx) : 
getVariableAssignSegment(ctx.optionValueNoOptionType()));
         for (OptionValueContext each : ctx.optionValue()) {
-            result.add(getVariableAssign(each));
+            result.add(getVariableAssignSegment(each));
         }
         return result;
     }
     
-    private VariableAssignSegment getVariableAssign(final 
OptionValueNoOptionTypeContext ctx) {
-        VariableAssignSegment result = new VariableAssignSegment();
-        result.setStartIndex(ctx.start.getStartIndex());
-        result.setStopIndex(ctx.stop.getStopIndex());
+    private VariableAssignSegment getVariableAssignSegment(final 
OptionValueContext ctx) {
+        if (null != ctx.optionValueNoOptionType()) {
+            return getVariableAssignSegment(ctx.optionValueNoOptionType());
+        }
+        VariableSegment variable = new 
VariableSegment(ctx.internalVariableName().start.getStartIndex(), 
ctx.internalVariableName().stop.getStopIndex(), 
ctx.internalVariableName().getText());
+        variable.setScope(ctx.optionType().getText());
+        return new VariableAssignSegment(ctx.start.getStartIndex(), 
ctx.stop.getStopIndex(), variable, ctx.setExprOrDefault().getText());
+    }
+    
+    private VariableAssignSegment getVariableAssignSegment(final 
OptionValueListContext ctx) {
+        VariableSegment variable = new 
VariableSegment(ctx.internalVariableName().start.getStartIndex(), 
ctx.internalVariableName().stop.getStopIndex(), 
ctx.internalVariableName().getText());
+        variable.setScope(ctx.optionType().getText());
+        return new VariableAssignSegment(ctx.start.getStartIndex(), 
ctx.setExprOrDefault().stop.getStopIndex(), variable, 
ctx.setExprOrDefault().getText());
+    }
+    
+    private VariableAssignSegment getVariableAssignSegment(final 
OptionValueNoOptionTypeContext ctx) {
+        return new VariableAssignSegment(ctx.start.getStartIndex(), 
ctx.stop.getStopIndex(), getVariableSegment(ctx), getAssignValue(ctx));
+    }
+    
+    private VariableSegment getVariableSegment(final 
OptionValueNoOptionTypeContext ctx) {
         if (null != ctx.NAMES()) {
             // TODO Consider setting all three system variables: 
character_set_client, character_set_results, character_set_connection
-            result.setVariable(new 
VariableSegment(ctx.NAMES().getSymbol().getStartIndex(), 
ctx.NAMES().getSymbol().getStopIndex(), "character_set_client"));
-            result.setAssignValue(ctx.charsetName().getText());
-        } else if (null != ctx.internalVariableName()) {
-            result.setVariable(new 
VariableSegment(ctx.internalVariableName().start.getStartIndex(), 
ctx.internalVariableName().stop.getStopIndex(), 
ctx.internalVariableName().getText()));
-            result.setAssignValue(ctx.setExprOrDefault().getText());
-        } else if (null != ctx.userVariable()) {
-            result.setVariable(new 
VariableSegment(ctx.userVariable().start.getStartIndex(), 
ctx.userVariable().stop.getStopIndex(), ctx.userVariable().getText()));
-            result.setAssignValue(ctx.expr().getText());
-        } else if (null != ctx.setSystemVariable()) {
-            VariableSegment variable = new VariableSegment(
+            return new 
VariableSegment(ctx.NAMES().getSymbol().getStartIndex(), 
ctx.NAMES().getSymbol().getStopIndex(), "character_set_client");
+        }
+        if (null != ctx.internalVariableName()) {
+            return new 
VariableSegment(ctx.internalVariableName().start.getStartIndex(), 
ctx.internalVariableName().stop.getStopIndex(), 
ctx.internalVariableName().getText());
+        }
+        if (null != ctx.userVariable()) {
+            return new 
VariableSegment(ctx.userVariable().start.getStartIndex(), 
ctx.userVariable().stop.getStopIndex(), ctx.userVariable().getText());
+        }
+        if (null != ctx.setSystemVariable()) {
+            VariableSegment result = new VariableSegment(
                     ctx.setSystemVariable().start.getStartIndex(), 
ctx.setSystemVariable().stop.getStopIndex(), 
ctx.setSystemVariable().internalVariableName().getText());
-            result.setVariable(variable);
-            result.setAssignValue(ctx.setExprOrDefault().getText());
             OptionTypeContext optionType = 
ctx.setSystemVariable().optionType();
-            variable.setScope(null != optionType ? optionType.getText() : 
"SESSION");
+            result.setScope(null == optionType ? "SESSION" : 
optionType.getText());
+            return result;
         }
-        return result;
+        return null;
     }
     
-    private VariableAssignSegment getVariableAssign(final OptionValueContext 
ctx) {
-        if (null != ctx.optionValueNoOptionType()) {
-            return getVariableAssign(ctx.optionValueNoOptionType());
+    private String getAssignValue(final OptionValueNoOptionTypeContext ctx) {
+        if (null != ctx.NAMES()) {
+            return ctx.charsetName().getText();
         }
-        VariableAssignSegment result = new VariableAssignSegment();
-        result.setStartIndex(ctx.start.getStartIndex());
-        result.setStopIndex(ctx.stop.getStopIndex());
-        VariableSegment variable = new 
VariableSegment(ctx.internalVariableName().start.getStartIndex(), 
ctx.internalVariableName().stop.getStopIndex(), 
ctx.internalVariableName().getText());
-        variable.setScope(ctx.optionType().getText());
-        result.setVariable(variable);
-        result.setAssignValue(ctx.setExprOrDefault().getText());
-        return result;
+        if (null != ctx.internalVariableName()) {
+            return ctx.setExprOrDefault().getText();
+        }
+        if (null != ctx.userVariable()) {
+            return ctx.expr().getText();
+        }
+        if (null != ctx.setSystemVariable()) {
+            return ctx.setExprOrDefault().getText();
+        }
+        return null;
     }
     
     @Override
     public ASTNode visitSetCharacter(final SetCharacterContext ctx) {
-        VariableAssignSegment characterSet = new VariableAssignSegment();
         int startIndex = null == ctx.CHARSET() ? 
ctx.CHARACTER().getSymbol().getStartIndex() : 
ctx.CHARSET().getSymbol().getStartIndex();
         int stopIndex = null == ctx.CHARSET() ? 
ctx.SET(1).getSymbol().getStopIndex() : 
ctx.CHARSET().getSymbol().getStopIndex();
         // TODO Consider setting all three system variables: 
character_set_client, character_set_results, character_set_connection
-        String variableName = (null != ctx.CHARSET()) ? 
ctx.CHARSET().getText() : "character_set_client";
-        VariableSegment variable = new VariableSegment(startIndex, stopIndex, 
variableName);
-        characterSet.setVariable(variable);
-        String assignValue = (null != ctx.DEFAULT()) ? ctx.DEFAULT().getText() 
: ctx.charsetName().getText();
-        characterSet.setAssignValue(assignValue);
+        VariableSegment variable = new VariableSegment(startIndex, stopIndex, 
(null == ctx.CHARSET()) ? "character_set_client" : ctx.CHARSET().getText());
+        String assignValue = (null == ctx.DEFAULT()) ? 
ctx.charsetName().getText() : ctx.DEFAULT().getText();
+        VariableAssignSegment characterSet = new 
VariableAssignSegment(startIndex, stopIndex, variable, assignValue);
         DorisSetStatement result = new DorisSetStatement();
         result.getVariableAssigns().add(characterSet);
         return result;
diff --git 
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDALStatementVisitor.java
 
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDALStatementVisitor.java
index 99ce94601c2..afd7f05e52d 100644
--- 
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDALStatementVisitor.java
+++ 
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDALStatementVisitor.java
@@ -919,74 +919,75 @@ public final class MySQLDALStatementVisitor extends 
MySQLStatementVisitor implem
     
     private Collection<VariableAssignSegment> getVariableAssigns(final 
OptionValueListContext ctx) {
         Collection<VariableAssignSegment> result = new LinkedList<>();
-        if (null == ctx.optionValueNoOptionType()) {
-            VariableAssignSegment variableAssign = new VariableAssignSegment();
-            variableAssign.setStartIndex(ctx.start.getStartIndex());
-            
variableAssign.setStopIndex(ctx.setExprOrDefault().stop.getStopIndex());
-            VariableSegment variable = new 
VariableSegment(ctx.internalVariableName().start.getStartIndex(), 
ctx.internalVariableName().stop.getStopIndex(), 
ctx.internalVariableName().getText());
-            variable.setScope(ctx.optionType().getText());
-            variableAssign.setVariable(variable);
-            variableAssign.setAssignValue(ctx.setExprOrDefault().getText());
-            result.add(variableAssign);
-        } else {
-            result.add(getVariableAssign(ctx.optionValueNoOptionType()));
-        }
+        result.add(null == ctx.optionValueNoOptionType() ? 
getVariableAssignSegment(ctx) : 
getVariableAssignSegment(ctx.optionValueNoOptionType()));
         for (OptionValueContext each : ctx.optionValue()) {
-            result.add(getVariableAssign(each));
+            result.add(getVariableAssignSegment(each));
         }
         return result;
     }
     
-    private VariableAssignSegment getVariableAssign(final 
OptionValueNoOptionTypeContext ctx) {
-        VariableAssignSegment result = new VariableAssignSegment();
-        result.setStartIndex(ctx.start.getStartIndex());
-        result.setStopIndex(ctx.stop.getStopIndex());
+    private VariableAssignSegment getVariableAssignSegment(final 
OptionValueContext ctx) {
+        if (null != ctx.optionValueNoOptionType()) {
+            return getVariableAssignSegment(ctx.optionValueNoOptionType());
+        }
+        VariableSegment variable = new 
VariableSegment(ctx.internalVariableName().start.getStartIndex(), 
ctx.internalVariableName().stop.getStopIndex(), 
ctx.internalVariableName().getText());
+        variable.setScope(ctx.optionType().getText());
+        return new VariableAssignSegment(ctx.start.getStartIndex(), 
ctx.stop.getStopIndex(), variable, ctx.setExprOrDefault().getText());
+    }
+    
+    private VariableAssignSegment getVariableAssignSegment(final 
OptionValueListContext ctx) {
+        VariableSegment variable = new 
VariableSegment(ctx.internalVariableName().start.getStartIndex(), 
ctx.internalVariableName().stop.getStopIndex(), 
ctx.internalVariableName().getText());
+        variable.setScope(ctx.optionType().getText());
+        return new VariableAssignSegment(ctx.start.getStartIndex(), 
ctx.setExprOrDefault().stop.getStopIndex(), variable, 
ctx.setExprOrDefault().getText());
+    }
+    
+    private VariableAssignSegment getVariableAssignSegment(final 
OptionValueNoOptionTypeContext ctx) {
+        return new VariableAssignSegment(ctx.start.getStartIndex(), 
ctx.stop.getStopIndex(), getVariableSegment(ctx), getAssignValue(ctx));
+    }
+    
+    private VariableSegment getVariableSegment(final 
OptionValueNoOptionTypeContext ctx) {
         if (null != ctx.NAMES()) {
             // TODO Consider setting all three system variables: 
character_set_client, character_set_results, character_set_connection
-            result.setVariable(new 
VariableSegment(ctx.NAMES().getSymbol().getStartIndex(), 
ctx.NAMES().getSymbol().getStopIndex(), "character_set_client"));
-            result.setAssignValue(ctx.charsetName().getText());
-        } else if (null != ctx.internalVariableName()) {
-            result.setVariable(new 
VariableSegment(ctx.internalVariableName().start.getStartIndex(), 
ctx.internalVariableName().stop.getStopIndex(), 
ctx.internalVariableName().getText()));
-            result.setAssignValue(ctx.setExprOrDefault().getText());
-        } else if (null != ctx.userVariable()) {
-            result.setVariable(new 
VariableSegment(ctx.userVariable().start.getStartIndex(), 
ctx.userVariable().stop.getStopIndex(), ctx.userVariable().getText()));
-            result.setAssignValue(ctx.expr().getText());
-        } else if (null != ctx.setSystemVariable()) {
-            VariableSegment variable = new VariableSegment(
+            return new 
VariableSegment(ctx.NAMES().getSymbol().getStartIndex(), 
ctx.NAMES().getSymbol().getStopIndex(), "character_set_client");
+        }
+        if (null != ctx.internalVariableName()) {
+            return new 
VariableSegment(ctx.internalVariableName().start.getStartIndex(), 
ctx.internalVariableName().stop.getStopIndex(), 
ctx.internalVariableName().getText());
+        }
+        if (null != ctx.userVariable()) {
+            return new 
VariableSegment(ctx.userVariable().start.getStartIndex(), 
ctx.userVariable().stop.getStopIndex(), ctx.userVariable().getText());
+        }
+        if (null != ctx.setSystemVariable()) {
+            VariableSegment result = new VariableSegment(
                     ctx.setSystemVariable().start.getStartIndex(), 
ctx.setSystemVariable().stop.getStopIndex(), 
ctx.setSystemVariable().internalVariableName().getText());
-            result.setVariable(variable);
-            result.setAssignValue(ctx.setExprOrDefault().getText());
             OptionTypeContext optionType = 
ctx.setSystemVariable().optionType();
-            variable.setScope(null != optionType ? optionType.getText() : 
"SESSION");
+            result.setScope(null == optionType ? "SESSION" : 
optionType.getText());
+            return result;
         }
-        return result;
+        return null;
     }
     
-    private VariableAssignSegment getVariableAssign(final OptionValueContext 
ctx) {
-        if (null != ctx.optionValueNoOptionType()) {
-            return getVariableAssign(ctx.optionValueNoOptionType());
+    private String getAssignValue(final OptionValueNoOptionTypeContext ctx) {
+        if (null != ctx.NAMES()) {
+            return ctx.charsetName().getText();
+        } else if (null != ctx.internalVariableName()) {
+            return ctx.setExprOrDefault().getText();
+        } else if (null != ctx.userVariable()) {
+            return ctx.expr().getText();
+        } else if (null != ctx.setSystemVariable()) {
+            return ctx.setExprOrDefault().getText();
         }
-        VariableAssignSegment result = new VariableAssignSegment();
-        result.setStartIndex(ctx.start.getStartIndex());
-        result.setStopIndex(ctx.stop.getStopIndex());
-        VariableSegment variable = new 
VariableSegment(ctx.internalVariableName().start.getStartIndex(), 
ctx.internalVariableName().stop.getStopIndex(), 
ctx.internalVariableName().getText());
-        variable.setScope(ctx.optionType().getText());
-        result.setVariable(variable);
-        result.setAssignValue(ctx.setExprOrDefault().getText());
-        return result;
+        return null;
     }
     
     @Override
     public ASTNode visitSetCharacter(final SetCharacterContext ctx) {
-        VariableAssignSegment characterSet = new VariableAssignSegment();
         int startIndex = null == ctx.CHARSET() ? 
ctx.CHARACTER().getSymbol().getStartIndex() : 
ctx.CHARSET().getSymbol().getStartIndex();
         int stopIndex = null == ctx.CHARSET() ? 
ctx.SET(1).getSymbol().getStopIndex() : 
ctx.CHARSET().getSymbol().getStopIndex();
         // TODO Consider setting all three system variables: 
character_set_client, character_set_results, character_set_connection
-        String variableName = (null != ctx.CHARSET()) ? 
ctx.CHARSET().getText() : "character_set_client";
+        String variableName = (null == ctx.CHARSET()) ? "character_set_client" 
: ctx.CHARSET().getText();
         VariableSegment variable = new VariableSegment(startIndex, stopIndex, 
variableName);
-        characterSet.setVariable(variable);
-        String assignValue = (null != ctx.DEFAULT()) ? ctx.DEFAULT().getText() 
: ctx.charsetName().getText();
-        characterSet.setAssignValue(assignValue);
+        String assignValue = (null == ctx.DEFAULT()) ? 
ctx.charsetName().getText() : ctx.DEFAULT().getText();
+        VariableAssignSegment characterSet = new 
VariableAssignSegment(startIndex, stopIndex, variable, assignValue);
         MySQLSetStatement result = new MySQLSetStatement();
         result.getVariableAssigns().add(characterSet);
         return result;
diff --git 
a/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDALStatementVisitor.java
 
b/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDALStatementVisitor.java
index 9b49d1f578e..752e387e5ad 100644
--- 
a/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDALStatementVisitor.java
+++ 
b/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDALStatementVisitor.java
@@ -91,17 +91,18 @@ public final class OpenGaussDALStatementVisitor extends 
OpenGaussStatementVisito
     
     @Override
     public ASTNode visitConfigurationParameterClause(final 
ConfigurationParameterClauseContext ctx) {
-        VariableAssignSegment result = new VariableAssignSegment();
-        result.setStartIndex(ctx.start.getStartIndex());
-        result.setStopIndex(ctx.stop.getStopIndex());
-        result.setVariable(new 
VariableSegment(ctx.varName().start.getStartIndex(), 
ctx.varName().stop.getStopIndex(), ctx.varName().getText()));
+        return new VariableAssignSegment(ctx.start.getStartIndex(), 
ctx.stop.getStopIndex(),
+                new VariableSegment(ctx.varName().start.getStartIndex(), 
ctx.varName().stop.getStopIndex(), ctx.varName().getText()), 
getAssignValue(ctx));
+    }
+    
+    private String getAssignValue(final ConfigurationParameterClauseContext 
ctx) {
         if (null != ctx.varList()) {
-            result.setAssignValue(ctx.varList().getText());
+            return ctx.varList().getText();
         }
         if (null != ctx.DEFAULT()) {
-            result.setAssignValue(ctx.DEFAULT().getText());
+            return ctx.DEFAULT().getText();
         }
-        return result;
+        return null;
     }
     
     @Override
diff --git 
a/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLDALStatementVisitor.java
 
b/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLDALStatementVisitor.java
index 2707e53b36b..eef41e617b0 100644
--- 
a/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLDALStatementVisitor.java
+++ 
b/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLDALStatementVisitor.java
@@ -86,11 +86,9 @@ public final class PostgreSQLDALStatementVisitor extends 
PostgreSQLStatementVisi
             variableAssigns.add(variableAssignSegment);
         }
         if (null != ctx.encoding()) {
-            VariableAssignSegment variableAssignSegment = new 
VariableAssignSegment();
-            variableAssignSegment.setVariable(new 
VariableSegment(ctx.NAMES().getSymbol().getStartIndex(), 
ctx.NAMES().getSymbol().getStopIndex(), "client_encoding"));
-            String value = ctx.encoding().getText();
-            variableAssignSegment.setAssignValue(value);
-            variableAssigns.add(variableAssignSegment);
+            VariableSegment variable = new 
VariableSegment(ctx.NAMES().getSymbol().getStartIndex(), 
ctx.NAMES().getSymbol().getStopIndex(), "client_encoding");
+            VariableAssignSegment variableAssign = new 
VariableAssignSegment(ctx.encoding().start.getStartIndex(), 
ctx.encoding().stop.getStopIndex(), variable, ctx.encoding().getText());
+            variableAssigns.add(variableAssign);
         }
         result.getVariableAssigns().addAll(variableAssigns);
         return result;
@@ -98,17 +96,18 @@ public final class PostgreSQLDALStatementVisitor extends 
PostgreSQLStatementVisi
     
     @Override
     public ASTNode visitConfigurationParameterClause(final 
ConfigurationParameterClauseContext ctx) {
-        VariableAssignSegment result = new VariableAssignSegment();
-        result.setStartIndex(ctx.start.getStartIndex());
-        result.setStopIndex(ctx.stop.getStopIndex());
-        result.setVariable(new 
VariableSegment(ctx.varName().start.getStartIndex(), 
ctx.varName().stop.getStopIndex(), ctx.varName().getText()));
+        return new VariableAssignSegment(ctx.start.getStartIndex(), 
ctx.stop.getStopIndex(),
+                new VariableSegment(ctx.varName().start.getStartIndex(), 
ctx.varName().stop.getStopIndex(), ctx.varName().getText()), 
getAssignValue(ctx));
+    }
+    
+    private String getAssignValue(final ConfigurationParameterClauseContext 
ctx) {
         if (null != ctx.varList()) {
-            result.setAssignValue(ctx.varList().getText());
+            return ctx.varList().getText();
         }
         if (null != ctx.DEFAULT()) {
-            result.setAssignValue(ctx.DEFAULT().getText());
+            return ctx.DEFAULT().getText();
         }
-        return result;
+        return null;
     }
     
     @Override
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/dal/VariableAssignSegment.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/dal/VariableAssignSegment.java
index f0da5b3d4d1..13077a9d9cd 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/dal/VariableAssignSegment.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/dal/VariableAssignSegment.java
@@ -18,18 +18,18 @@
 package org.apache.shardingsphere.sql.parser.statement.core.segment.dal;
 
 import lombok.Getter;
-import lombok.Setter;
+import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.sql.parser.statement.core.segment.SQLSegment;
 
+@RequiredArgsConstructor
 @Getter
-@Setter
 public final class VariableAssignSegment implements SQLSegment {
     
-    private int startIndex;
+    private final int startIndex;
     
-    private int stopIndex;
+    private final int stopIndex;
     
-    private VariableSegment variable;
+    private final VariableSegment variable;
     
-    private String assignValue;
+    private final String assignValue;
 }
diff --git 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLSetVariableAdminExecutorTest.java
 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLSetVariableAdminExecutorTest.java
index 3cabd34a577..be10c6f74da 100644
--- 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLSetVariableAdminExecutorTest.java
+++ 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLSetVariableAdminExecutorTest.java
@@ -87,15 +87,11 @@ class MySQLSetVariableAdminExecutorTest {
     }
     
     private SetStatement prepareSetStatement() {
-        VariableAssignSegment setGlobalMaxConnectionAssignSegment = new 
VariableAssignSegment();
         VariableSegment maxConnectionVariableSegment = new VariableSegment(0, 
0, "max_connections");
         maxConnectionVariableSegment.setScope("global");
-        
setGlobalMaxConnectionAssignSegment.setVariable(maxConnectionVariableSegment);
-        setGlobalMaxConnectionAssignSegment.setAssignValue("151");
-        VariableAssignSegment setCharacterSetClientVariableSegment = new 
VariableAssignSegment();
+        VariableAssignSegment setGlobalMaxConnectionAssignSegment = new 
VariableAssignSegment(0, 0, maxConnectionVariableSegment, "151");
         VariableSegment characterSetClientSegment = new VariableSegment(0, 0, 
"character_set_client");
-        
setCharacterSetClientVariableSegment.setVariable(characterSetClientSegment);
-        setCharacterSetClientVariableSegment.setAssignValue("'utf8mb4'");
+        VariableAssignSegment setCharacterSetClientVariableSegment = new 
VariableAssignSegment(0, 0, characterSetClientSegment, "'utf8mb4'");
         SetStatement result = new MySQLSetStatement();
         result.getVariableAssigns().add(setGlobalMaxConnectionAssignSegment);
         result.getVariableAssigns().add(setCharacterSetClientVariableSegment);
@@ -112,22 +108,16 @@ class MySQLSetVariableAdminExecutorTest {
     
     @Test
     void assertSetUnknownSystemVariable() {
-        VariableAssignSegment unknownVariableAssignSegment = new 
VariableAssignSegment();
-        unknownVariableAssignSegment.setVariable(new VariableSegment(0, 0, 
"unknown_variable"));
-        unknownVariableAssignSegment.setAssignValue("");
         SetStatement setStatement = new MySQLSetStatement();
-        setStatement.getVariableAssigns().add(unknownVariableAssignSegment);
+        setStatement.getVariableAssigns().add(new VariableAssignSegment(0, 0, 
new VariableSegment(0, 0, "unknown_variable"), ""));
         MySQLSetVariableAdminExecutor executor = new 
MySQLSetVariableAdminExecutor(setStatement);
         assertThrows(UnknownSystemVariableException.class, () -> 
executor.execute(mock(ConnectionSession.class)));
     }
     
     @Test
     void assertSetVariableWithIncorrectScope() {
-        VariableAssignSegment variableAssignSegment = new 
VariableAssignSegment();
-        variableAssignSegment.setVariable(new VariableSegment(0, 0, 
"max_connections"));
-        variableAssignSegment.setAssignValue("");
         SetStatement setStatement = new MySQLSetStatement();
-        setStatement.getVariableAssigns().add(variableAssignSegment);
+        setStatement.getVariableAssigns().add(new VariableAssignSegment(0, 0, 
new VariableSegment(0, 0, "max_connections"), ""));
         MySQLSetVariableAdminExecutor executor = new 
MySQLSetVariableAdminExecutor(setStatement);
         assertThrows(ErrorGlobalVariableException.class, () -> 
executor.execute(mock(ConnectionSession.class)));
     }
diff --git 
a/proxy/backend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/backend/postgresql/handler/admin/executor/PostgreSQLSetVariableAdminExecutorTest.java
 
b/proxy/backend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/backend/postgresql/handler/admin/executor/PostgreSQLSetVariableAdminExecutorTest.java
index b6b1c656ecc..b46b7edcb76 100644
--- 
a/proxy/backend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/backend/postgresql/handler/admin/executor/PostgreSQLSetVariableAdminExecutorTest.java
+++ 
b/proxy/backend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/backend/postgresql/handler/admin/executor/PostgreSQLSetVariableAdminExecutorTest.java
@@ -42,12 +42,8 @@ class PostgreSQLSetVariableAdminExecutorTest {
     
     @Test
     void assertExecute() {
-        VariableAssignSegment variableAssignSegment = new 
VariableAssignSegment();
-        VariableSegment variable = new VariableSegment(0, 0, "key");
-        variableAssignSegment.setVariable(variable);
-        variableAssignSegment.setAssignValue("value");
         PostgreSQLSetStatement setStatement = new PostgreSQLSetStatement();
-        setStatement.getVariableAssigns().add(variableAssignSegment);
+        setStatement.getVariableAssigns().add(new VariableAssignSegment(0, 0, 
new VariableSegment(0, 0, "key"), "value"));
         PostgreSQLSetVariableAdminExecutor executor = new 
PostgreSQLSetVariableAdminExecutor(setStatement);
         ConnectionSession connectionSession = mock(ConnectionSession.class);
         RequiredSessionVariableRecorder requiredSessionVariableRecorder = 
mock(RequiredSessionVariableRecorder.class);
diff --git 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PortalTest.java
 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PortalTest.java
index 9cf02a28130..17343047332 100644
--- 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PortalTest.java
+++ 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PortalTest.java
@@ -245,11 +245,9 @@ class PortalTest {
         when(proxyBackendHandler.next()).thenReturn(false);
         String sql = "set client_encoding = utf8";
         PostgreSQLSetStatement setStatement = new PostgreSQLSetStatement();
-        VariableAssignSegment variableAssignSegment = new 
VariableAssignSegment();
-        variableAssignSegment.setVariable(new VariableSegment(0, 0, 
"client_encoding"));
-        setStatement.getVariableAssigns().add(variableAssignSegment);
-        PostgreSQLServerPreparedStatement preparedStatement = new 
PostgreSQLServerPreparedStatement(sql, new 
UnknownSQLStatementContext(setStatement), new HintValueContext(), 
Collections.emptyList(),
-                Collections.emptyList());
+        setStatement.getVariableAssigns().add(new VariableAssignSegment(0, 0, 
new VariableSegment(0, 0, "client_encoding"), null));
+        PostgreSQLServerPreparedStatement preparedStatement = new 
PostgreSQLServerPreparedStatement(
+                sql, new UnknownSQLStatementContext(setStatement), new 
HintValueContext(), Collections.emptyList(), Collections.emptyList());
         Portal portal = new Portal("", preparedStatement, 
Collections.emptyList(), Collections.emptyList(), databaseConnectionManager);
         portal.bind();
         List<DatabasePacket> actualPackets = portal.execute(0);

Reply via email to