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);