You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by su...@apache.org on 2022/11/30 10:12:20 UTC

[shardingsphere] branch master updated: Refactor CaseWhenExpression parse logic (#22535)

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

sunnianjun 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 51306de476e Refactor CaseWhenExpression parse logic (#22535)
51306de476e is described below

commit 51306de476e1a2ddf95fe52bee62fc077ffb430b
Author: Zhengqiang Duan <du...@apache.org>
AuthorDate: Wed Nov 30 18:12:10 2022 +0800

    Refactor CaseWhenExpression parse logic (#22535)
---
 .../segment/expression/ExpressionConverter.java    |  8 ++---
 ...erter.java => CaseWhenExpressionConverter.java} | 36 +++++++++++-----------
 .../impl/OpenGaussStatementSQLVisitor.java         | 20 ++++++------
 .../impl/PostgreSQLStatementSQLVisitor.java        | 20 ++++++------
 ...aseWhenSegment.java => CaseWhenExpression.java} | 12 ++++----
 .../segment/expression/ExpressionAssert.java       | 28 ++++++++---------
 .../impl/expr/ExpectedCaseWhenExpression.java      | 16 +++++-----
 .../main/resources/case/dml/select-expression.xml  | 32 +++++++++----------
 8 files changed, 86 insertions(+), 86 deletions(-)

diff --git a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/expression/ExpressionConverter.java b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/expression/ExpressionConverter.java
index b943744a04c..a4bad66841b 100644
--- a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/expression/ExpressionConverter.java
+++ b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/expression/ExpressionConverter.java
@@ -22,7 +22,7 @@ import org.apache.shardingsphere.infra.util.exception.external.sql.type.generic.
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BetweenExpression;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.CaseWhenSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.CaseWhenExpression;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExistsSubqueryExpression;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.FunctionSegment;
@@ -37,7 +37,7 @@ import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.DataTypeS
 import org.apache.shardingsphere.sqlfederation.optimizer.converter.segment.SQLSegmentConverter;
 import org.apache.shardingsphere.sqlfederation.optimizer.converter.segment.expression.impl.BetweenExpressionConverter;
 import org.apache.shardingsphere.sqlfederation.optimizer.converter.segment.expression.impl.BinaryOperationExpressionConverter;
-import org.apache.shardingsphere.sqlfederation.optimizer.converter.segment.expression.impl.CaseWhenConverter;
+import org.apache.shardingsphere.sqlfederation.optimizer.converter.segment.expression.impl.CaseWhenExpressionConverter;
 import org.apache.shardingsphere.sqlfederation.optimizer.converter.segment.expression.impl.ColumnConverter;
 import org.apache.shardingsphere.sqlfederation.optimizer.converter.segment.expression.impl.ExistsSubqueryExpressionConverter;
 import org.apache.shardingsphere.sqlfederation.optimizer.converter.segment.expression.impl.FunctionConverter;
@@ -101,8 +101,8 @@ public final class ExpressionConverter implements SQLSegmentConverter<Expression
         if (segment instanceof DataTypeSegment) {
             return new DataTypeConverter().convert((DataTypeSegment) segment);
         }
-        if (segment instanceof CaseWhenSegment) {
-            return new CaseWhenConverter().convert((CaseWhenSegment) segment);
+        if (segment instanceof CaseWhenExpression) {
+            return new CaseWhenExpressionConverter().convert((CaseWhenExpression) segment);
         }
         throw new UnsupportedSQLOperationException("unsupported TableSegment type: " + segment.getClass());
     }
diff --git a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/expression/impl/CaseWhenConverter.java b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/expression/impl/CaseWhenExpressionConverter.java
similarity index 64%
rename from kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/expression/impl/CaseWhenConverter.java
rename to kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/expression/impl/CaseWhenExpressionConverter.java
index 9db5040b00a..2c694d96295 100644
--- a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/expression/impl/CaseWhenConverter.java
+++ b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/expression/impl/CaseWhenExpressionConverter.java
@@ -24,7 +24,7 @@ import org.apache.calcite.sql.SqlNodeList;
 import org.apache.calcite.sql.fun.SqlCase;
 import org.apache.calcite.sql.fun.SqlStdOperatorTable;
 import org.apache.calcite.sql.parser.SqlParserPos;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.CaseWhenSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.CaseWhenExpression;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
 import org.apache.shardingsphere.sqlfederation.optimizer.converter.segment.SQLSegmentConverter;
 import org.apache.shardingsphere.sqlfederation.optimizer.converter.segment.expression.ExpressionConverter;
@@ -35,25 +35,25 @@ import java.util.LinkedList;
 import java.util.Optional;
 
 /**
- * Case when converter.
+ * Case when expression converter.
  */
-public final class CaseWhenConverter implements SQLSegmentConverter<CaseWhenSegment, SqlNode> {
+public final class CaseWhenExpressionConverter implements SQLSegmentConverter<CaseWhenExpression, SqlNode> {
     
     @Override
-    public Optional<SqlNode> convert(final CaseWhenSegment segment) {
-        Collection<SqlNode> whenList = convertWhenList(segment.getCaseArg(), segment.getWhenList());
-        Collection<SqlNode> thenList = new LinkedList<>();
-        segment.getThenList().forEach(each -> new ExpressionConverter().convert(each).ifPresent(thenList::add));
-        Optional<SqlNode> elseExpr = new ExpressionConverter().convert(segment.getElseExpression());
-        return Optional.of(new SqlCase(SqlParserPos.ZERO, null, new SqlNodeList(whenList, SqlParserPos.ZERO), new SqlNodeList(thenList, SqlParserPos.ZERO),
+    public Optional<SqlNode> convert(final CaseWhenExpression segment) {
+        Collection<SqlNode> whenExprs = convertWhenExprs(segment.getCaseExpr(), segment.getWhenExprs());
+        Collection<SqlNode> thenExprs = new LinkedList<>();
+        segment.getThenExprs().forEach(each -> new ExpressionConverter().convert(each).ifPresent(thenExprs::add));
+        Optional<SqlNode> elseExpr = new ExpressionConverter().convert(segment.getElseExpr());
+        return Optional.of(new SqlCase(SqlParserPos.ZERO, null, new SqlNodeList(whenExprs, SqlParserPos.ZERO), new SqlNodeList(thenExprs, SqlParserPos.ZERO),
                 elseExpr.orElseGet(() -> SqlLiteral.createCharString("NULL", SqlParserPos.ZERO))));
     }
     
-    private Collection<SqlNode> convertWhenList(final ExpressionSegment caseArg, final Collection<ExpressionSegment> whenList) {
+    private Collection<SqlNode> convertWhenExprs(final ExpressionSegment caseExpr, final Collection<ExpressionSegment> whenExprs) {
         Collection<SqlNode> result = new LinkedList<>();
-        for (ExpressionSegment each : whenList) {
-            if (null != caseArg) {
-                convertWithCaseArg(caseArg, each, result);
+        for (ExpressionSegment each : whenExprs) {
+            if (null != caseExpr) {
+                convertCaseExpr(caseExpr, each).ifPresent(result::add);
             } else {
                 new ExpressionConverter().convert(each).ifPresent(result::add);
             }
@@ -61,12 +61,12 @@ public final class CaseWhenConverter implements SQLSegmentConverter<CaseWhenSegm
         return result;
     }
     
-    private void convertWithCaseArg(final ExpressionSegment caseArg, final ExpressionSegment expressionSegment, final Collection<SqlNode> result) {
-        Optional<SqlNode> leftExpr = new ExpressionConverter().convert(caseArg);
-        Optional<SqlNode> rightExpr = new ExpressionConverter().convert(expressionSegment);
+    private Optional<SqlNode> convertCaseExpr(final ExpressionSegment caseExpr, final ExpressionSegment whenExpr) {
+        Optional<SqlNode> leftExpr = new ExpressionConverter().convert(caseExpr);
+        Optional<SqlNode> rightExpr = new ExpressionConverter().convert(whenExpr);
         if (leftExpr.isPresent() && rightExpr.isPresent()) {
-            new ExpressionConverter().convert(expressionSegment).ifPresent(optional -> result.add(
-                    new SqlBasicCall(SqlStdOperatorTable.EQUALS, Arrays.asList(leftExpr.get(), rightExpr.get()), SqlParserPos.ZERO)));
+            return new ExpressionConverter().convert(whenExpr).map(optional -> new SqlBasicCall(SqlStdOperatorTable.EQUALS, Arrays.asList(leftExpr.get(), rightExpr.get()), SqlParserPos.ZERO));
         }
+        return Optional.empty();
     }
 }
diff --git a/sql-parser/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussStatementSQLVisitor.java b/sql-parser/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussStatementSQLVisitor.java
index 9c755dd5023..2d30493d2ef 100644
--- a/sql-parser/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussStatementSQLVisitor.java
+++ b/sql-parser/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussStatementSQLVisitor.java
@@ -128,7 +128,7 @@ import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.OnDupl
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.combine.CombineSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BetweenExpression;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.CaseWhenSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.CaseWhenExpression;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExistsSubqueryExpression;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.FunctionSegment;
@@ -406,15 +406,15 @@ public abstract class OpenGaussStatementSQLVisitor extends OpenGaussStatementBas
     
     @Override
     public ASTNode visitCaseExpr(final CaseExprContext ctx) {
-        Collection<ExpressionSegment> whenList = new LinkedList<>();
-        Collection<ExpressionSegment> thenList = new LinkedList<>();
+        Collection<ExpressionSegment> whenExprs = new LinkedList<>();
+        Collection<ExpressionSegment> thenExprs = new LinkedList<>();
         for (WhenClauseContext each : ctx.whenClauseList().whenClause()) {
-            whenList.add((ExpressionSegment) visit(each.aExpr(0)));
-            thenList.add((ExpressionSegment) visit(each.aExpr(1)));
+            whenExprs.add((ExpressionSegment) visit(each.aExpr(0)));
+            thenExprs.add((ExpressionSegment) visit(each.aExpr(1)));
         }
-        ExpressionSegment argExpression = null == ctx.caseArg() ? null : (ExpressionSegment) visit(ctx.caseArg().aExpr());
-        ExpressionSegment elseExpression = null == ctx.caseDefault() ? null : (ExpressionSegment) visit(ctx.caseDefault().aExpr());
-        return new CaseWhenSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), argExpression, whenList, thenList, elseExpression);
+        ExpressionSegment caseExpr = null == ctx.caseArg() ? null : (ExpressionSegment) visit(ctx.caseArg().aExpr());
+        ExpressionSegment elseExpr = null == ctx.caseDefault() ? null : (ExpressionSegment) visit(ctx.caseDefault().aExpr());
+        return new CaseWhenExpression(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), caseExpr, whenExprs, thenExprs, elseExpr);
     }
     
     @Override
@@ -1090,8 +1090,8 @@ public abstract class OpenGaussStatementSQLVisitor extends OpenGaussStatementBas
         if (projection instanceof LiteralExpressionSegment) {
             return Optional.of(new ExpressionProjectionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), getOriginalText(expr), (LiteralExpressionSegment) projection));
         }
-        if (projection instanceof CaseWhenSegment) {
-            return Optional.of(new ExpressionProjectionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), getOriginalText(expr), (CaseWhenSegment) projection));
+        if (projection instanceof CaseWhenExpression) {
+            return Optional.of(new ExpressionProjectionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), getOriginalText(expr), (CaseWhenExpression) projection));
         }
         return Optional.empty();
     }
diff --git a/sql-parser/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLStatementSQLVisitor.java b/sql-parser/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLStatementSQLVisitor.java
index 2d346ffa0e2..8d3c6bb3f51 100644
--- a/sql-parser/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLStatementSQLVisitor.java
+++ b/sql-parser/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLStatementSQLVisitor.java
@@ -128,7 +128,7 @@ import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.OnDupl
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.combine.CombineSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BetweenExpression;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.CaseWhenSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.CaseWhenExpression;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExistsSubqueryExpression;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.FunctionSegment;
@@ -403,15 +403,15 @@ public abstract class PostgreSQLStatementSQLVisitor extends PostgreSQLStatementP
     
     @Override
     public ASTNode visitCaseExpr(final CaseExprContext ctx) {
-        Collection<ExpressionSegment> whenList = new LinkedList<>();
-        Collection<ExpressionSegment> thenList = new LinkedList<>();
+        Collection<ExpressionSegment> whenExprs = new LinkedList<>();
+        Collection<ExpressionSegment> thenExprs = new LinkedList<>();
         for (WhenClauseContext each : ctx.whenClauseList().whenClause()) {
-            whenList.add((ExpressionSegment) visit(each.aExpr(0)));
-            thenList.add((ExpressionSegment) visit(each.aExpr(1)));
+            whenExprs.add((ExpressionSegment) visit(each.aExpr(0)));
+            thenExprs.add((ExpressionSegment) visit(each.aExpr(1)));
         }
-        ExpressionSegment argExpression = null == ctx.caseArg() ? null : (ExpressionSegment) visit(ctx.caseArg().aExpr());
-        ExpressionSegment elseExpression = null == ctx.caseDefault() ? null : (ExpressionSegment) visit(ctx.caseDefault().aExpr());
-        return new CaseWhenSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), argExpression, whenList, thenList, elseExpression);
+        ExpressionSegment caseExpr = null == ctx.caseArg() ? null : (ExpressionSegment) visit(ctx.caseArg().aExpr());
+        ExpressionSegment elseExpr = null == ctx.caseDefault() ? null : (ExpressionSegment) visit(ctx.caseDefault().aExpr());
+        return new CaseWhenExpression(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), caseExpr, whenExprs, thenExprs, elseExpr);
     }
     
     @Override
@@ -1057,8 +1057,8 @@ public abstract class PostgreSQLStatementSQLVisitor extends PostgreSQLStatementP
         if (projection instanceof LiteralExpressionSegment) {
             return Optional.of(new ExpressionProjectionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), getOriginalText(expr), (LiteralExpressionSegment) projection));
         }
-        if (projection instanceof CaseWhenSegment) {
-            return Optional.of(new ExpressionProjectionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), getOriginalText(expr), (CaseWhenSegment) projection));
+        if (projection instanceof CaseWhenExpression) {
+            return Optional.of(new ExpressionProjectionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), getOriginalText(expr), (CaseWhenExpression) projection));
         }
         return Optional.empty();
     }
diff --git a/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/CaseWhenSegment.java b/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/CaseWhenExpression.java
similarity index 79%
rename from sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/CaseWhenSegment.java
rename to sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/CaseWhenExpression.java
index b6a8ddb4456..81368d6c790 100644
--- a/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/CaseWhenSegment.java
+++ b/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/CaseWhenExpression.java
@@ -24,22 +24,22 @@ import lombok.ToString;
 import java.util.Collection;
 
 /**
- * Case when segment.
+ * Case when expression.
  */
 @RequiredArgsConstructor
 @Getter
 @ToString
-public final class CaseWhenSegment implements ExpressionSegment {
+public final class CaseWhenExpression implements ExpressionSegment {
     
     private final int startIndex;
     
     private final int stopIndex;
     
-    private final ExpressionSegment caseArg;
+    private final ExpressionSegment caseExpr;
     
-    private final Collection<ExpressionSegment> whenList;
+    private final Collection<ExpressionSegment> whenExprs;
     
-    private final Collection<ExpressionSegment> thenList;
+    private final Collection<ExpressionSegment> thenExprs;
     
-    private final ExpressionSegment elseExpression;
+    private final ExpressionSegment elseExpr;
 }
diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/asserts/segment/expression/ExpressionAssert.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/asserts/segment/expression/ExpressionAssert.java
index b29f88d9828..49a9fe1c6a2 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/asserts/segment/expression/ExpressionAssert.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/asserts/segment/expression/ExpressionAssert.java
@@ -22,7 +22,7 @@ import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BetweenExpression;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.CaseWhenSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.CaseWhenExpression;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.CollateExpression;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExistsSubqueryExpression;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
@@ -334,19 +334,19 @@ public final class ExpressionAssert {
      * @param actual actual case when expression
      * @param expected expected case when expression
      */
-    public static void assertCaseWhenExpression(final SQLCaseAssertContext assertContext, final CaseWhenSegment actual, final ExpectedCaseWhenExpression expected) {
-        assertThat(assertContext.getText("When list size is not same!"), actual.getWhenList().size(), is(expected.getWhenList().size()));
-        assertThat(assertContext.getText("Then list size is not same!"), actual.getThenList().size(), is(expected.getThenList().size()));
-        Iterator<ExpectedExpression> whenListIterator = expected.getWhenList().iterator();
-        for (ExpressionSegment each : actual.getWhenList()) {
-            assertExpression(assertContext, each, whenListIterator.next());
+    public static void assertCaseWhenExpression(final SQLCaseAssertContext assertContext, final CaseWhenExpression actual, final ExpectedCaseWhenExpression expected) {
+        assertThat(assertContext.getText("When list size is not same!"), actual.getWhenExprs().size(), is(expected.getWhenExprs().size()));
+        assertThat(assertContext.getText("Then list size is not same!"), actual.getThenExprs().size(), is(expected.getThenExprs().size()));
+        Iterator<ExpectedExpression> whenExprsIterator = expected.getWhenExprs().iterator();
+        for (ExpressionSegment each : actual.getWhenExprs()) {
+            assertExpression(assertContext, each, whenExprsIterator.next());
         }
-        Iterator<ExpectedExpression> thenListIterator = expected.getThenList().iterator();
-        for (ExpressionSegment each : actual.getThenList()) {
-            assertExpression(assertContext, each, thenListIterator.next());
+        Iterator<ExpectedExpression> thenExprsIterator = expected.getThenExprs().iterator();
+        for (ExpressionSegment each : actual.getThenExprs()) {
+            assertExpression(assertContext, each, thenExprsIterator.next());
         }
-        assertExpression(assertContext, actual.getCaseArg(), expected.getCaseArg());
-        assertExpression(assertContext, actual.getElseExpression(), expected.getElseExpr());
+        assertExpression(assertContext, actual.getCaseExpr(), expected.getCaseExpr());
+        assertExpression(assertContext, actual.getElseExpr(), expected.getElseExpr());
     }
     
     /**
@@ -397,8 +397,8 @@ public final class ExpressionAssert {
             assertFunction(assertContext, (FunctionSegment) actual, expected.getFunction());
         } else if (actual instanceof CollateExpression) {
             assertCollateExpression(assertContext, (CollateExpression) actual, expected.getCollateExpression());
-        } else if (actual instanceof CaseWhenSegment) {
-            assertCaseWhenExpression(assertContext, (CaseWhenSegment) actual, expected.getCaseWhenExpression());
+        } else if (actual instanceof CaseWhenExpression) {
+            assertCaseWhenExpression(assertContext, (CaseWhenExpression) actual, expected.getCaseWhenExpression());
         } else {
             throw new UnsupportedOperationException(String.format("Unsupported expression: %s", actual.getClass().getName()));
         }
diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/jaxb/segment/impl/expr/ExpectedCaseWhenExpression.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/jaxb/segment/impl/expr/ExpectedCaseWhenExpression.java
index e8d630c190a..f308b9270d4 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/jaxb/segment/impl/expr/ExpectedCaseWhenExpression.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/internal/cases/parser/jaxb/segment/impl/expr/ExpectedCaseWhenExpression.java
@@ -26,21 +26,21 @@ import java.util.LinkedList;
 import java.util.List;
 
 /**
- * Expected case when in expression.
+ * Expected case when expression.
  */
 @Getter
 @Setter
 public final class ExpectedCaseWhenExpression extends AbstractExpectedSQLSegment implements ExpectedExpressionSegment {
     
-    @XmlElement(name = "case-arg")
-    private ExpectedExpression caseArg;
+    @XmlElement(name = "case-expr")
+    private ExpectedExpression caseExpr;
     
-    @XmlElement(name = "when-list")
-    private final List<ExpectedExpression> whenList = new LinkedList<>();
+    @XmlElement(name = "when-exprs")
+    private final List<ExpectedExpression> whenExprs = new LinkedList<>();
     
-    @XmlElement(name = "then-list")
-    private final List<ExpectedExpression> thenList = new LinkedList<>();
+    @XmlElement(name = "then-exprs")
+    private final List<ExpectedExpression> thenExprs = new LinkedList<>();
     
-    @XmlElement(name = "else-expression")
+    @XmlElement(name = "else-expr")
     private ExpectedExpression elseExpr;
 }
diff --git a/test/parser/src/main/resources/case/dml/select-expression.xml b/test/parser/src/main/resources/case/dml/select-expression.xml
index 9a4663f358a..92a9899ccbb 100644
--- a/test/parser/src/main/resources/case/dml/select-expression.xml
+++ b/test/parser/src/main/resources/case/dml/select-expression.xml
@@ -1897,18 +1897,18 @@
             <expression-projection start-index="13" stop-index="56" text="CASE order_id WHEN 1 THEN '11' ELSE '00' END">
                 <expr>
                     <case-when-expression>
-                        <case-arg>
+                        <case-expr>
                             <column name="order_id" start-index="18" stop-index="25" />
-                        </case-arg>
-                        <when-list>
+                        </case-expr>
+                        <when-exprs>
                             <literal-expression value="1" start-index="32" stop-index="32" />
-                        </when-list>
-                        <then-list>
+                        </when-exprs>
+                        <then-exprs>
                             <literal-expression value="11" start-index="39" stop-index="42" />
-                        </then-list>
-                        <else-expression>
+                        </then-exprs>
+                        <else-expr>
                             <literal-expression value="00" start-index="49" stop-index="52" />
-                        </else-expression>
+                        </else-expr>
                     </case-when-expression>
                 </expr>
             </expression-projection>
@@ -1928,18 +1928,18 @@
             <expression-projection start-index="7" stop-index="50" text="CASE order_id WHEN 1 THEN '11' ELSE '00' END">
                 <expr>
                     <case-when-expression>
-                        <case-arg>
+                        <case-expr>
                             <column name="order_id" start-index="12" stop-index="19" />
-                        </case-arg>
-                        <when-list>
+                        </case-expr>
+                        <when-exprs>
                             <literal-expression value="1" start-index="26" stop-index="26" />
-                        </when-list>
-                        <then-list>
+                        </when-exprs>
+                        <then-exprs>
                             <literal-expression value="11" start-index="33" stop-index="36" />
-                        </then-list>
-                        <else-expression>
+                        </then-exprs>
+                        <else-expr>
                             <literal-expression value="00" start-index="43" stop-index="46" />
-                        </else-expression>
+                        </else-expr>
                     </case-when-expression>
                 </expr>
             </expression-projection>