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

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 3819ea66272 Refactor ColumnConverter (#37364)
3819ea66272 is described below

commit 3819ea66272f9b92ad77ec9c5e4f5e5ba3d04b43
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Dec 12 17:35:24 2025 +0800

    Refactor ColumnConverter (#37364)
---
 .../segment/expression/ExpressionConverter.java    |  2 +-
 .../segment/expression/impl/ColumnConverter.java   |  6 +--
 .../segment/from/impl/JoinTableConverter.java      | 10 ++---
 .../orderby/item/ColumnOrderByItemConverter.java   | 12 ++----
 .../orderby/item/OrderByItemConverterUtils.java    |  2 +-
 .../segment/projection/ProjectionsConverter.java   |  2 +-
 .../projection/impl/ColumnProjectionConverter.java |  7 ++--
 .../ast/converter/segment/with/WithConverter.java  |  2 +-
 .../statement/type/InsertStatementConverter.java   |  4 +-
 .../statement/type/MergeStatementConverter.java    | 17 ++------
 .../statement/type/UpdateStatementConverter.java   | 15 +------
 .../expression/ExpressionConverterTest.java        |  5 ++-
 .../expression/impl/ColumnConverterTest.java       |  7 +---
 .../segment/from/impl/JoinTableConverterTest.java  |  5 ++-
 .../item/ColumnOrderByItemConverterTest.java       | 47 +++++++---------------
 .../item/OrderByItemConverterUtilsTest.java        |  6 ++-
 .../projection/ProjectionsConverterTest.java       |  2 +-
 .../impl/ColumnProjectionConverterTest.java        | 25 ++++--------
 18 files changed, 59 insertions(+), 117 deletions(-)

diff --git 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/ExpressionConverter.java
 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/ExpressionConverter.java
index 770fa147628..872fad37e2b 100644
--- 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/ExpressionConverter.java
+++ 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/ExpressionConverter.java
@@ -103,7 +103,7 @@ public final class ExpressionConverter {
             return 
Optional.of(BinaryOperationExpressionConverter.convert((BinaryOperationExpression)
 segment));
         }
         if (segment instanceof ColumnSegment) {
-            return ColumnConverter.convert((ColumnSegment) segment);
+            return Optional.of(ColumnConverter.convert((ColumnSegment) 
segment));
         }
         if (segment instanceof ExistsSubqueryExpression) {
             return 
ExistsSubqueryExpressionConverter.convert((ExistsSubqueryExpression) segment);
diff --git 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/ColumnConverter.java
 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/ColumnConverter.java
index a5c127409b6..7648ec512d8 100644
--- 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/ColumnConverter.java
+++ 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/ColumnConverter.java
@@ -20,14 +20,12 @@ package 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segme
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.calcite.sql.SqlIdentifier;
-import org.apache.calcite.sql.SqlNode;
 import org.apache.calcite.sql.parser.SqlParserPos;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.OwnerSegment;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Optional;
 
 /**
  * Column converter.
@@ -41,11 +39,11 @@ public final class ColumnConverter {
      * @param segment column segment
      * @return SQL node
      */
-    public static Optional<SqlNode> convert(final ColumnSegment segment) {
+    public static SqlIdentifier convert(final ColumnSegment segment) {
         List<String> names = new ArrayList<>();
         segment.getOwner().ifPresent(optional -> addOwnerNames(names, 
optional));
         names.add(segment.getIdentifier().getValue());
-        return Optional.of(new SqlIdentifier(names, SqlParserPos.ZERO));
+        return new SqlIdentifier(names, SqlParserPos.ZERO);
     }
     
     private static void addOwnerNames(final List<String> names, final 
OwnerSegment owner) {
diff --git 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/from/impl/JoinTableConverter.java
 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/from/impl/JoinTableConverter.java
index 84449f94ff5..21eddbf7cac 100644
--- 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/from/impl/JoinTableConverter.java
+++ 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/from/impl/JoinTableConverter.java
@@ -26,15 +26,14 @@ import org.apache.calcite.sql.SqlLiteral;
 import org.apache.calcite.sql.SqlNode;
 import org.apache.calcite.sql.SqlNodeList;
 import org.apache.calcite.sql.parser.SqlParserPos;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.JoinTableSegment;
-import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.expression.impl.ColumnConverter;
 import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.expression.ExpressionConverter;
+import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.expression.impl.ColumnConverter;
 import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.from.TableConverter;
 
 import java.util.Collection;
-import java.util.LinkedList;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 /**
  * Join converter.
@@ -78,10 +77,7 @@ public final class JoinTableConverter {
         if (segment.getUsing().isEmpty()) {
             return Optional.empty();
         }
-        Collection<SqlNode> sqlNodes = new LinkedList<>();
-        for (ColumnSegment each : segment.getUsing()) {
-            ColumnConverter.convert(each).ifPresent(sqlNodes::add);
-        }
+        Collection<SqlNode> sqlNodes = 
segment.getUsing().stream().map(ColumnConverter::convert).collect(Collectors.toList());
         return Optional.of(new SqlNodeList(sqlNodes, SqlParserPos.ZERO));
     }
 }
diff --git 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/orderby/item/ColumnOrderByItemConverter.java
 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/orderby/item/ColumnOrderByItemConverter.java
index f542eaea548..64d4f1b6be2 100644
--- 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/orderby/item/ColumnOrderByItemConverter.java
+++ 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/orderby/item/ColumnOrderByItemConverter.java
@@ -30,7 +30,6 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.order.ite
 import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.expression.impl.ColumnConverter;
 
 import java.util.Collections;
-import java.util.Optional;
 
 /**
  *  Column of order by item converter. 
@@ -44,17 +43,14 @@ public final class ColumnOrderByItemConverter {
      * @param segment column order by item segment
      * @return SQL node
      */
-    public static Optional<SqlNode> convert(final ColumnOrderByItemSegment 
segment) {
-        Optional<SqlNode> result = 
ColumnConverter.convert(segment.getColumn());
-        if (!result.isPresent()) {
-            return Optional.empty();
-        }
+    public static SqlNode convert(final ColumnOrderByItemSegment segment) {
+        SqlNode result = ColumnConverter.convert(segment.getColumn());
         if (OrderDirection.DESC == segment.getOrderDirection()) {
-            result = Optional.of(new SqlBasicCall(SqlStdOperatorTable.DESC, 
Collections.singletonList(result.get()), SqlParserPos.ZERO));
+            result = new SqlBasicCall(SqlStdOperatorTable.DESC, 
Collections.singletonList(result), SqlParserPos.ZERO);
         }
         if (segment.getNullsOrderType().isPresent()) {
             SqlPostfixOperator nullsOrderType = NullsOrderType.FIRST == 
segment.getNullsOrderType().get() ? SqlStdOperatorTable.NULLS_FIRST : 
SqlStdOperatorTable.NULLS_LAST;
-            result = Optional.of(new SqlBasicCall(nullsOrderType, 
Collections.singletonList(result.get()), SqlParserPos.ZERO));
+            result = new SqlBasicCall(nullsOrderType, 
Collections.singletonList(result), SqlParserPos.ZERO);
         }
         return result;
     }
diff --git 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/orderby/item/OrderByItemConverterUtils.java
 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/orderby/item/OrderByItemConverterUtils.java
index 9b186d5804c..26d2f76ea97 100644
--- 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/orderby/item/OrderByItemConverterUtils.java
+++ 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/orderby/item/OrderByItemConverterUtils.java
@@ -47,7 +47,7 @@ public final class OrderByItemConverterUtils {
         Collection<SqlNode> result = new LinkedList<>();
         for (OrderByItemSegment each : orderByItems) {
             if (each instanceof ColumnOrderByItemSegment) {
-                ColumnOrderByItemConverter.convert((ColumnOrderByItemSegment) 
each).ifPresent(result::add);
+                
result.add(ColumnOrderByItemConverter.convert((ColumnOrderByItemSegment) each));
             } else if (each instanceof ExpressionOrderByItemSegment) {
                 
ExpressionOrderByItemConverter.convert((ExpressionOrderByItemSegment) 
each).ifPresent(result::add);
             } else if (each instanceof IndexOrderByItemSegment) {
diff --git 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/projection/ProjectionsConverter.java
 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/projection/ProjectionsConverter.java
index 753e30b9b1a..75e03c6fd49 100644
--- 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/projection/ProjectionsConverter.java
+++ 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/projection/ProjectionsConverter.java
@@ -63,7 +63,7 @@ public final class ProjectionsConverter {
     
     private static Optional<SqlNode> getProjectionSQLNode(final 
ProjectionSegment segment) {
         if (segment instanceof ColumnProjectionSegment) {
-            return ColumnProjectionConverter.convert((ColumnProjectionSegment) 
segment);
+            return 
Optional.of(ColumnProjectionConverter.convert((ColumnProjectionSegment) 
segment));
         }
         if (segment instanceof ExpressionProjectionSegment) {
             return 
ExpressionProjectionConverter.convert((ExpressionProjectionSegment) segment);
diff --git 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/projection/impl/ColumnProjectionConverter.java
 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/projection/impl/ColumnProjectionConverter.java
index 78907940e09..7bf7be40ad2 100644
--- 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/projection/impl/ColumnProjectionConverter.java
+++ 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/projection/impl/ColumnProjectionConverter.java
@@ -28,7 +28,6 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.Colu
 import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.expression.impl.ColumnConverter;
 
 import java.util.Arrays;
-import java.util.Optional;
 
 /**
  * Column projection converter. 
@@ -42,11 +41,11 @@ public final class ColumnProjectionConverter {
      * @param segment column projection segment
      * @return SQL node
      */
-    public static Optional<SqlNode> convert(final ColumnProjectionSegment 
segment) {
+    public static SqlNode convert(final ColumnProjectionSegment segment) {
         if (segment.getAliasName().isPresent()) {
-            Optional<SqlNode> column = 
ColumnConverter.convert(segment.getColumn());
+            SqlNode column = ColumnConverter.convert(segment.getColumn());
             SqlIdentifier alias = new 
SqlIdentifier(segment.getAliasName().get(), SqlParserPos.ZERO);
-            return column.map(optional -> new SqlBasicCall(new 
SqlAsOperator(), Arrays.asList(optional, alias), SqlParserPos.ZERO));
+            return new SqlBasicCall(new SqlAsOperator(), Arrays.asList(column, 
alias), SqlParserPos.ZERO);
         }
         return ColumnConverter.convert(segment.getColumn());
     }
diff --git 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/with/WithConverter.java
 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/with/WithConverter.java
index c01bda3a618..2571543dcd4 100644
--- 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/with/WithConverter.java
+++ 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/with/WithConverter.java
@@ -63,6 +63,6 @@ public final class WithConverter {
     }
     
     private static SqlNodeList convertColumns(final Collection<ColumnSegment> 
columnSegments) {
-        return new SqlNodeList(columnSegments.stream().map(each -> 
ColumnConverter.convert(each).orElseThrow(IllegalStateException::new)).collect(Collectors.toList()),
 SqlParserPos.ZERO);
+        return new 
SqlNodeList(columnSegments.stream().map(ColumnConverter::convert).collect(Collectors.toList()),
 SqlParserPos.ZERO);
     }
 }
diff --git 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/InsertStatementConverter.java
 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/InsertStatementConverter.java
index be379b82149..409ef07c257 100644
--- 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/InsertStatementConverter.java
+++ 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/InsertStatementConverter.java
@@ -92,7 +92,7 @@ public final class InsertStatementConverter implements 
SQLStatementConverter<Ins
         List<SqlNode> columns = new ArrayList<>();
         insertStatement.getSetAssignment().ifPresent(optional -> 
columns.addAll(convertSetAssignmentColumns(optional)));
         for (ColumnSegment each : insertStatement.getColumns()) {
-            
columns.add(ColumnConverter.convert(each).orElseThrow(IllegalStateException::new));
+            columns.add(ColumnConverter.convert(each));
         }
         return columns.isEmpty() ? null : new SqlNodeList(columns, 
SqlParserPos.ZERO);
     }
@@ -101,7 +101,7 @@ public final class InsertStatementConverter implements 
SQLStatementConverter<Ins
         List<SqlNode> result = new ArrayList<>();
         for (ColumnAssignmentSegment each : setAssignment.getAssignments()) {
             for (ColumnSegment column : each.getColumns()) {
-                
result.add(ColumnConverter.convert(column).orElseThrow(IllegalStateException::new));
+                result.add(ColumnConverter.convert(column));
             }
         }
         return result;
diff --git 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/MergeStatementConverter.java
 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/MergeStatementConverter.java
index b9aea227e5f..1edf081c4d1 100644
--- 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/MergeStatementConverter.java
+++ 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/MergeStatementConverter.java
@@ -23,17 +23,14 @@ import org.apache.calcite.sql.SqlNodeList;
 import org.apache.calcite.sql.SqlUpdate;
 import org.apache.calcite.sql.parser.SqlParserPos;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.assignment.ColumnAssignmentSegment;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.MergeStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.UpdateStatement;
-import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.expression.impl.ColumnConverter;
 import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.expression.ExpressionConverter;
+import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.expression.impl.ColumnConverter;
 import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.from.TableConverter;
 import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.where.WhereConverter;
 import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.statement.SQLStatementConverter;
 
-import java.util.List;
 import java.util.stream.Collectors;
 
 /**
@@ -56,17 +53,9 @@ public final class MergeStatementConverter implements 
SQLStatementConverter<Merg
         SqlNodeList columns = new SqlNodeList(SqlParserPos.ZERO);
         SqlNodeList expressions = new SqlNodeList(SqlParserPos.ZERO);
         for (ColumnAssignmentSegment each : 
updateStatement.getAssignment().orElseThrow(IllegalStateException::new).getAssignments())
 {
-            columns.addAll(convertColumn(each.getColumns()));
-            expressions.add(convertExpression(each.getValue()));
+            
columns.addAll(each.getColumns().stream().map(ColumnConverter::convert).collect(Collectors.toList()));
+            
expressions.add(ExpressionConverter.convert(each.getValue()).orElseThrow(IllegalStateException::new));
         }
         return new SqlUpdate(SqlParserPos.ZERO, table, columns, expressions, 
condition, null, null);
     }
-    
-    private List<SqlNode> convertColumn(final List<ColumnSegment> 
columnSegments) {
-        return columnSegments.stream().map(each -> 
ColumnConverter.convert(each).orElseThrow(IllegalStateException::new)).collect(Collectors.toList());
-    }
-    
-    private SqlNode convertExpression(final ExpressionSegment 
expressionSegment) {
-        return 
ExpressionConverter.convert(expressionSegment).orElseThrow(IllegalStateException::new);
-    }
 }
diff --git 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/UpdateStatementConverter.java
 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/UpdateStatementConverter.java
index a7b7c229ce2..1c2c4ad94d0 100644
--- 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/UpdateStatementConverter.java
+++ 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/UpdateStatementConverter.java
@@ -25,8 +25,6 @@ import org.apache.calcite.sql.SqlOrderBy;
 import org.apache.calcite.sql.SqlUpdate;
 import org.apache.calcite.sql.parser.SqlParserPos;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.assignment.ColumnAssignmentSegment;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.pagination.limit.LimitSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.UpdateStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
@@ -38,7 +36,6 @@ import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segmen
 import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.where.WhereConverter;
 import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.statement.SQLStatementConverter;
 
-import java.util.List;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
@@ -67,8 +64,8 @@ public final class UpdateStatementConverter implements 
SQLStatementConverter<Upd
         SqlNodeList columns = new SqlNodeList(SqlParserPos.ZERO);
         SqlNodeList expressions = new SqlNodeList(SqlParserPos.ZERO);
         for (ColumnAssignmentSegment each : 
updateStatement.getAssignment().orElseThrow(IllegalStateException::new).getAssignments())
 {
-            columns.addAll(convertColumn(each.getColumns()));
-            expressions.add(convertExpression(each.getValue()));
+            
columns.addAll(each.getColumns().stream().map(ColumnConverter::convert).collect(Collectors.toList()));
+            
expressions.add(ExpressionConverter.convert(each.getValue()).orElseThrow(IllegalStateException::new));
         }
         return new SqlUpdate(SqlParserPos.ZERO, getTargetTableName(table), 
columns, expressions, condition, null, alias);
     }
@@ -81,14 +78,6 @@ public final class UpdateStatementConverter implements 
SQLStatementConverter<Upd
         return null;
     }
     
-    private List<SqlNode> convertColumn(final List<ColumnSegment> 
columnSegments) {
-        return columnSegments.stream().map(each -> 
ColumnConverter.convert(each).orElseThrow(IllegalStateException::new)).collect(Collectors.toList());
-    }
-    
-    private SqlNode convertExpression(final ExpressionSegment 
expressionSegment) {
-        return 
ExpressionConverter.convert(expressionSegment).orElseThrow(IllegalStateException::new);
-    }
-    
     private SqlNode getTargetTableName(final SqlNode deleteTable) {
         return deleteTable instanceof SqlBasicCall ? ((SqlBasicCall) 
deleteTable).getOperandList().iterator().next() : deleteTable;
     }
diff --git 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/ExpressionConverterTest.java
 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/ExpressionConverterTest.java
index 90e67e3f8b4..b5b0a7f6545 100644
--- 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/ExpressionConverterTest.java
+++ 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/ExpressionConverterTest.java
@@ -18,6 +18,7 @@
 package 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.expression;
 
 import org.apache.calcite.sql.SqlBasicCall;
+import org.apache.calcite.sql.SqlIdentifier;
 import org.apache.calcite.sql.SqlNode;
 import org.apache.calcite.sql.fun.SqlCase;
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
@@ -119,9 +120,9 @@ class ExpressionConverterTest {
         SqlBasicCall expectedBinaryNode = mock(SqlBasicCall.class);
         BinaryOperationExpression binarySegment = new 
BinaryOperationExpression(0, 0, literalSegment, literalSegment, "+", "text");
         
when(BinaryOperationExpressionConverter.convert(binarySegment)).thenReturn(expectedBinaryNode);
-        SqlNode expectedColumnNode = mock(SqlNode.class);
+        SqlIdentifier expectedColumnNode = mock(SqlIdentifier.class);
         ColumnSegment columnSegment = new ColumnSegment(0, 0, new 
IdentifierValue("col"));
-        
when(ColumnConverter.convert(columnSegment)).thenReturn(Optional.of(expectedColumnNode));
+        
when(ColumnConverter.convert(columnSegment)).thenReturn(expectedColumnNode);
         SqlNode expectedExistsSubqueryNode = mock(SqlNode.class);
         SubquerySegment subquerySegment = new SubquerySegment(0, 0, new 
SelectStatement(databaseType), "sub");
         ExistsSubqueryExpression existsSubqueryExpression = new 
ExistsSubqueryExpression(0, 0, subquerySegment);
diff --git 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/ColumnConverterTest.java
 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/ColumnConverterTest.java
index bd472e9a011..291340efb37 100644
--- 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/ColumnConverterTest.java
+++ 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/ColumnConverterTest.java
@@ -28,15 +28,13 @@ import java.util.Collections;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 class ColumnConverterTest {
     
     @Test
     void assertConvertColumnWithoutOwner() {
         ColumnSegment columnSegment = new ColumnSegment(0, 0, new 
IdentifierValue("col"));
-        SqlIdentifier actual = (SqlIdentifier) 
ColumnConverter.convert(columnSegment).orElse(null);
-        assertNotNull(actual);
+        SqlIdentifier actual = ColumnConverter.convert(columnSegment);
         assertThat(actual.getSimple(), is("col"));
         assertThat(actual.names, is(Collections.singletonList("col")));
     }
@@ -47,8 +45,7 @@ class ColumnConverterTest {
         owner.setOwner(new OwnerSegment(0, 0, new IdentifierValue("catalog")));
         ColumnSegment columnSegment = new ColumnSegment(0, 0, new 
IdentifierValue("col"));
         columnSegment.setOwner(owner);
-        SqlIdentifier actual = (SqlIdentifier) 
ColumnConverter.convert(columnSegment).orElse(null);
-        assertNotNull(actual);
+        SqlIdentifier actual = ColumnConverter.convert(columnSegment);
         assertThat(actual.names, is(Arrays.asList("catalog", "schema", 
"col")));
     }
 }
diff --git 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/from/impl/JoinTableConverterTest.java
 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/from/impl/JoinTableConverterTest.java
index 583a638f9d3..4a5c87e5938 100644
--- 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/from/impl/JoinTableConverterTest.java
+++ 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/from/impl/JoinTableConverterTest.java
@@ -19,6 +19,7 @@ package 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segme
 
 import org.apache.calcite.sql.JoinConditionType;
 import org.apache.calcite.sql.JoinType;
+import org.apache.calcite.sql.SqlIdentifier;
 import org.apache.calcite.sql.SqlJoin;
 import org.apache.calcite.sql.SqlNode;
 import org.apache.calcite.sql.SqlNodeList;
@@ -91,8 +92,8 @@ class JoinTableConverterTest {
         segment.setNatural(true);
         ColumnSegment usingColumn = new ColumnSegment(0, 0, new 
IdentifierValue("id"));
         segment.setUsing(new 
ArrayList<>(Collections.singletonList(usingColumn)));
-        SqlNode usingNode = mock(SqlNode.class);
-        
when(ColumnConverter.convert(usingColumn)).thenReturn(Optional.of(usingNode));
+        SqlIdentifier usingNode = mock(SqlIdentifier.class);
+        when(ColumnConverter.convert(usingColumn)).thenReturn(usingNode);
         SqlJoin actual = (SqlJoin) 
JoinTableConverter.convert(segment).orElse(null);
         assertNotNull(actual);
         assertThat(actual.getJoinType(), is(JoinType.INNER));
diff --git 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/orderby/item/ColumnOrderByItemConverterTest.java
 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/orderby/item/ColumnOrderByItemConverterTest.java
index ac4b629f5f0..d1fa1403481 100644
--- 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/orderby/item/ColumnOrderByItemConverterTest.java
+++ 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/orderby/item/ColumnOrderByItemConverterTest.java
@@ -18,6 +18,7 @@
 package 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.orderby.item;
 
 import org.apache.calcite.sql.SqlBasicCall;
+import org.apache.calcite.sql.SqlIdentifier;
 import org.apache.calcite.sql.SqlNode;
 import org.apache.calcite.sql.fun.SqlStdOperatorTable;
 import 
org.apache.shardingsphere.database.connector.core.metadata.database.enums.NullsOrderType;
@@ -31,13 +32,8 @@ import 
org.apache.shardingsphere.test.infra.framework.extension.mock.StaticMockS
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 
-import java.util.Optional;
-
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.isA;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -45,33 +41,23 @@ import static org.mockito.Mockito.when;
 @StaticMockSettings(ColumnConverter.class)
 class ColumnOrderByItemConverterTest {
     
-    @Test
-    void assertConvertReturnsEmptyWhenColumnConverterReturnsEmpty() {
-        ColumnSegment columnSegment = new ColumnSegment(0, 0, new 
IdentifierValue("col"));
-        
when(ColumnConverter.convert(columnSegment)).thenReturn(Optional.empty());
-        assertFalse(ColumnOrderByItemConverter.convert(new 
ColumnOrderByItemSegment(columnSegment, OrderDirection.ASC, null)).isPresent());
-    }
-    
     @Test
     void assertConvertReturnsOriginalNodeWhenAscAndNullsAbsent() {
         ColumnSegment columnSegment = new ColumnSegment(0, 0, new 
IdentifierValue("col"));
-        SqlNode expectedNode = mock(SqlNode.class);
-        
when(ColumnConverter.convert(columnSegment)).thenReturn(Optional.of(expectedNode));
-        Optional<SqlNode> actual = ColumnOrderByItemConverter.convert(new 
ColumnOrderByItemSegment(columnSegment, OrderDirection.ASC, null));
-        assertTrue(actual.isPresent());
-        assertThat(actual.get(), is(expectedNode));
+        SqlIdentifier expectedNode = mock(SqlIdentifier.class);
+        when(ColumnConverter.convert(columnSegment)).thenReturn(expectedNode);
+        SqlNode actual = ColumnOrderByItemConverter.convert(new 
ColumnOrderByItemSegment(columnSegment, OrderDirection.ASC, null));
+        assertThat(actual, is(expectedNode));
     }
     
     @Test
     void assertConvertWrapsDescAndNullsFirst() {
         ColumnSegment columnSegment = new ColumnSegment(0, 0, new 
IdentifierValue("col"));
-        SqlNode expectedNode = mock(SqlNode.class);
-        
when(ColumnConverter.convert(columnSegment)).thenReturn(Optional.of(expectedNode));
-        Optional<SqlNode> actual = ColumnOrderByItemConverter.convert(new 
ColumnOrderByItemSegment(columnSegment, OrderDirection.DESC, 
NullsOrderType.FIRST));
-        assertTrue(actual.isPresent());
-        SqlBasicCall nullsFirstCall = (SqlBasicCall) actual.get();
-        assertThat(nullsFirstCall.getOperator(), 
is(SqlStdOperatorTable.NULLS_FIRST));
-        SqlBasicCall descCall = (SqlBasicCall) 
nullsFirstCall.getOperandList().get(0);
+        SqlIdentifier expectedNode = mock(SqlIdentifier.class);
+        when(ColumnConverter.convert(columnSegment)).thenReturn(expectedNode);
+        SqlBasicCall actual = (SqlBasicCall) 
ColumnOrderByItemConverter.convert(new ColumnOrderByItemSegment(columnSegment, 
OrderDirection.DESC, NullsOrderType.FIRST));
+        assertThat(actual.getOperator(), is(SqlStdOperatorTable.NULLS_FIRST));
+        SqlBasicCall descCall = (SqlBasicCall) actual.getOperandList().get(0);
         assertThat(descCall.getOperator(), is(SqlStdOperatorTable.DESC));
         assertThat(descCall.getOperandList().get(0), is(expectedNode));
     }
@@ -80,13 +66,10 @@ class ColumnOrderByItemConverterTest {
     void assertConvertWrapsNullsLastWithoutDesc() {
         ColumnSegment columnSegment = new ColumnSegment(0, 0, new 
IdentifierValue("col"));
         ColumnOrderByItemSegment segment = new 
ColumnOrderByItemSegment(columnSegment, OrderDirection.ASC, 
NullsOrderType.LAST);
-        SqlNode expectedNode = mock(SqlNode.class);
-        
when(ColumnConverter.convert(columnSegment)).thenReturn(Optional.of(expectedNode));
-        Optional<SqlNode> actual = ColumnOrderByItemConverter.convert(segment);
-        assertTrue(actual.isPresent());
-        SqlBasicCall nullsLastCall = (SqlBasicCall) actual.get();
-        assertThat(nullsLastCall, isA(SqlBasicCall.class));
-        assertThat(nullsLastCall.getOperator(), 
is(SqlStdOperatorTable.NULLS_LAST));
-        assertThat(nullsLastCall.getOperandList().get(0), is(expectedNode));
+        SqlIdentifier expectedNode = mock(SqlIdentifier.class);
+        when(ColumnConverter.convert(columnSegment)).thenReturn(expectedNode);
+        SqlBasicCall actual = (SqlBasicCall) 
ColumnOrderByItemConverter.convert(segment);
+        assertThat(actual.getOperator(), is(SqlStdOperatorTable.NULLS_LAST));
+        assertThat(actual.getOperandList().get(0), is(expectedNode));
     }
 }
diff --git 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/orderby/item/OrderByItemConverterUtilsTest.java
 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/orderby/item/OrderByItemConverterUtilsTest.java
index 7f21cc80e24..bb09dadd274 100644
--- 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/orderby/item/OrderByItemConverterUtilsTest.java
+++ 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/orderby/item/OrderByItemConverterUtilsTest.java
@@ -53,7 +53,8 @@ class OrderByItemConverterUtilsTest {
     @Test
     void assertConvertCoversSupportedBranches() {
         ColumnOrderByItemSegment columnItem = new ColumnOrderByItemSegment(new 
ColumnSegment(0, 0, new IdentifierValue("col")), OrderDirection.ASC, null);
-        
when(ColumnOrderByItemConverter.convert(columnItem)).thenReturn(Optional.empty());
+        SqlNode expectedColumnNode = mock(SqlNode.class);
+        
when(ColumnOrderByItemConverter.convert(columnItem)).thenReturn(expectedColumnNode);
         ExpressionOrderByItemSegment expressionItem = new 
ExpressionOrderByItemSegment(0, 0, "expr", OrderDirection.ASC, null, 
mock(ExpressionSegment.class));
         SqlNode expectedExpressionNode = mock(SqlNode.class);
         
when(ExpressionOrderByItemConverter.convert(expressionItem)).thenReturn(Optional.of(expectedExpressionNode));
@@ -68,8 +69,9 @@ class OrderByItemConverterUtilsTest {
         orderByItems.add(indexItem);
         orderByItems.add(unsupportedItem);
         Collection<SqlNode> actual = 
OrderByItemConverterUtils.convert(orderByItems);
-        assertThat(actual.size(), is(2));
+        assertThat(actual.size(), is(3));
         Iterator<SqlNode> iterator = actual.iterator();
+        assertThat(iterator.next(), is(expectedColumnNode));
         assertThat(iterator.next(), is(expectedExpressionNode));
         assertThat(iterator.next(), is(expectedIndexNode));
     }
diff --git 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/projection/ProjectionsConverterTest.java
 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/projection/ProjectionsConverterTest.java
index a119ee2efb6..a9584c9303b 100644
--- 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/projection/ProjectionsConverterTest.java
+++ 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/projection/ProjectionsConverterTest.java
@@ -59,7 +59,7 @@ class ProjectionsConverterTest {
         ProjectionsSegment projectionsSegment = new ProjectionsSegment(0, 0);
         SqlNode expectedColumnNode = mock(SqlNode.class);
         ColumnProjectionSegment columnProjectionSegment = 
mock(ColumnProjectionSegment.class);
-        
when(ColumnProjectionConverter.convert(columnProjectionSegment)).thenReturn(Optional.of(expectedColumnNode));
+        
when(ColumnProjectionConverter.convert(columnProjectionSegment)).thenReturn(expectedColumnNode);
         projectionsSegment.getProjections().add(columnProjectionSegment);
         SqlNode expectedExpressionNode = mock(SqlNode.class);
         ExpressionProjectionSegment expressionProjectionSegment = 
mock(ExpressionProjectionSegment.class);
diff --git 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/projection/impl/ColumnProjectionConverterTest.java
 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/projection/impl/ColumnProjectionConverterTest.java
index ab4ab65f1fc..25cfd55a98b 100644
--- 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/projection/impl/ColumnProjectionConverterTest.java
+++ 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/projection/impl/ColumnProjectionConverterTest.java
@@ -20,7 +20,6 @@ package 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segme
 import org.apache.calcite.sql.SqlAsOperator;
 import org.apache.calcite.sql.SqlBasicCall;
 import org.apache.calcite.sql.SqlIdentifier;
-import org.apache.calcite.sql.SqlNode;
 import org.apache.calcite.sql.parser.SqlParserPos;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ColumnProjectionSegment;
@@ -33,13 +32,10 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 
 import java.util.Collections;
-import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -53,23 +49,18 @@ class ColumnProjectionConverterTest {
         ColumnProjectionSegment projectionSegment = new 
ColumnProjectionSegment(columnSegment);
         projectionSegment.setAlias(new AliasSegment(0, 0, new 
IdentifierValue("alias")));
         SqlIdentifier columnNode = new SqlIdentifier("col", SqlParserPos.ZERO);
-        
when(ColumnConverter.convert(columnSegment)).thenReturn(Optional.of(columnNode));
-        Optional<SqlNode> actual = 
ColumnProjectionConverter.convert(projectionSegment);
-        SqlBasicCall sqlBasicCall = (SqlBasicCall) actual.orElse(null);
-        assertNotNull(sqlBasicCall);
-        assertThat(sqlBasicCall.getOperator(), 
instanceOf(SqlAsOperator.class));
-        assertThat(sqlBasicCall.getOperandList().get(0), is(columnNode));
-        assertThat(((SqlIdentifier) 
sqlBasicCall.getOperandList().get(1)).names, 
is(Collections.singletonList("alias")));
+        when(ColumnConverter.convert(columnSegment)).thenReturn(columnNode);
+        SqlBasicCall actual = (SqlBasicCall) 
ColumnProjectionConverter.convert(projectionSegment);
+        assertThat(actual.getOperator(), instanceOf(SqlAsOperator.class));
+        assertThat(actual.getOperandList().get(0), is(columnNode));
+        assertThat(((SqlIdentifier) actual.getOperandList().get(1)).names, 
is(Collections.singletonList("alias")));
     }
     
     @Test
     void assertConvertDelegatesWhenAliasAbsent() {
         ColumnSegment columnSegment = new ColumnSegment(0, 0, new 
IdentifierValue("col"));
-        ColumnProjectionSegment projectionSegment = new 
ColumnProjectionSegment(columnSegment);
-        SqlNode expected = mock(SqlNode.class);
-        
when(ColumnConverter.convert(columnSegment)).thenReturn(Optional.of(expected));
-        Optional<SqlNode> actual = 
ColumnProjectionConverter.convert(projectionSegment);
-        assertTrue(actual.isPresent());
-        assertThat(actual.get(), is(expected));
+        SqlIdentifier expected = mock(SqlIdentifier.class);
+        when(ColumnConverter.convert(columnSegment)).thenReturn(expected);
+        assertThat(ColumnProjectionConverter.convert(new 
ColumnProjectionSegment(columnSegment)), is(expected));
     }
 }


Reply via email to