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 30e7d197bb6 Refactor Converter (#37368)
30e7d197bb6 is described below

commit 30e7d197bb68776a54810878843e7d0b3283726d
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Dec 12 18:25:23 2025 +0800

    Refactor Converter (#37368)
    
    * Refactor InExpressionConverter
    
    * Refactor IntervalExpressionConverter
    
    * Refactor LiteralExpressionConverter
    
    * Refactor MatchExpressionConverter
    
    * Refactor NotExpressionConverter
    
    * Refactor ParameterMarkerExpressionConverter
    
    * Refactor QuantifySubqueryExpressionConverter
    
    * Refactor RowExpressionConverter
    
    * Refactor SubqueryExpressionConverter
    
    * Refactor TrimFunctionConverter
    
    * Refactor UnaryOperationExpressionConverter
    
    * Refactor VariableSegmentConverter
    
    * Refactor WindowFunctionConverter
---
 .../segment/expression/ExpressionConverter.java    | 20 ++++++-------
 .../segment/expression/impl/FunctionConverter.java |  4 +--
 .../expression/impl/InExpressionConverter.java     |  8 ++---
 .../impl/IntervalExpressionConverter.java          |  6 ++--
 .../impl/LiteralExpressionConverter.java           | 32 ++++++++++----------
 .../expression/impl/MatchExpressionConverter.java  |  7 ++---
 .../expression/impl/NotExpressionConverter.java    |  8 ++---
 .../impl/ParameterMarkerExpressionConverter.java   |  7 ++---
 .../impl/QuantifySubqueryExpressionConverter.java  |  6 ++--
 .../expression/impl/RowExpressionConverter.java    |  5 ++--
 .../impl/SubqueryExpressionConverter.java          |  6 ++--
 .../expression/impl/TrimFunctionConverter.java     |  5 ++--
 .../impl/UnaryOperationExpressionConverter.java    |  5 ++--
 .../expression/impl/VariableSegmentConverter.java  |  7 ++---
 .../expression/impl/WindowFunctionConverter.java   |  9 +++---
 .../segment/projection/ProjectionsConverter.java   |  2 +-
 .../expression/ExpressionConverterTest.java        | 35 +++++++++++-----------
 .../expression/impl/FunctionConverterTest.java     |  8 ++---
 .../expression/impl/InExpressionConverterTest.java | 13 ++------
 .../impl/IntervalExpressionConverterTest.java      |  4 +--
 .../impl/MatchExpressionConverterTest.java         |  9 ++----
 .../impl/NotExpressionConverterTest.java           |  7 ++---
 .../ParameterMarkerExpressionConverterTest.java    |  8 ++---
 .../QuantifySubqueryExpressionConverterTest.java   | 10 +------
 .../impl/RowExpressionConverterTest.java           |  4 +--
 .../impl/SubqueryExpressionConverterTest.java      | 10 +------
 .../expression/impl/TrimFunctionConverterTest.java |  7 ++---
 .../UnaryOperationExpressionConverterTest.java     |  4 +--
 .../impl/VariableSegmentConverterTest.java         |  8 +----
 .../impl/WindowFunctionConverterTest.java          |  7 ++---
 .../projection/ProjectionsConverterTest.java       |  5 ++--
 31 files changed, 99 insertions(+), 177 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 ac7d9516dda..0d07bfe9770 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
@@ -109,16 +109,16 @@ public final class ExpressionConverter {
             return 
Optional.of(ExistsSubqueryExpressionConverter.convert((ExistsSubqueryExpression)
 segment));
         }
         if (segment instanceof SubqueryExpressionSegment) {
-            return 
SubqueryExpressionConverter.convert((SubqueryExpressionSegment) segment);
+            return 
Optional.of(SubqueryExpressionConverter.convert((SubqueryExpressionSegment) 
segment));
         }
         if (segment instanceof InExpression) {
-            return InExpressionConverter.convert((InExpression) segment);
+            return Optional.of(InExpressionConverter.convert((InExpression) 
segment));
         }
         if (segment instanceof BetweenExpression) {
             return 
Optional.of(BetweenExpressionConverter.convert((BetweenExpression) segment));
         }
         if (segment instanceof ParameterMarkerExpressionSegment) {
-            return 
ParameterMarkerExpressionConverter.convert((ParameterMarkerExpressionSegment) 
segment);
+            return 
Optional.of(ParameterMarkerExpressionConverter.convert((ParameterMarkerExpressionSegment)
 segment));
         }
         if (segment instanceof FunctionSegment) {
             return FunctionConverter.convert((FunctionSegment) segment);
@@ -133,7 +133,7 @@ public final class ExpressionConverter {
             return 
Optional.of(CaseWhenExpressionConverter.convert((CaseWhenExpression) segment));
         }
         if (segment instanceof NotExpression) {
-            return NotExpressionConverter.convert((NotExpression) segment);
+            return Optional.of(NotExpressionConverter.convert((NotExpression) 
segment));
         }
         if (segment instanceof TypeCastExpression) {
             return TypeCastExpressionConverter.convert((TypeCastExpression) 
segment);
@@ -142,25 +142,25 @@ public final class ExpressionConverter {
             return 
Optional.of(ExtractArgExpressionConverter.convert((ExtractArgExpression) 
segment));
         }
         if (segment instanceof MatchAgainstExpression) {
-            return MatchExpressionConverter.convert((MatchAgainstExpression) 
segment);
+            return 
Optional.of(MatchExpressionConverter.convert((MatchAgainstExpression) segment));
         }
         if (segment instanceof CollateExpression) {
             return 
Optional.of(CollateExpressionConverter.convert((CollateExpression) segment));
         }
         if (segment instanceof RowExpression) {
-            return RowExpressionConverter.convert((RowExpression) segment);
+            return Optional.of(RowExpressionConverter.convert((RowExpression) 
segment));
         }
         if (segment instanceof VariableSegment) {
-            return VariableSegmentConverter.convert((VariableSegment) segment);
+            return 
Optional.of(VariableSegmentConverter.convert((VariableSegment) segment));
         }
         if (segment instanceof UnaryOperationExpression) {
-            return 
UnaryOperationExpressionConverter.convert((UnaryOperationExpression) segment);
+            return 
Optional.of(UnaryOperationExpressionConverter.convert((UnaryOperationExpression)
 segment));
         }
         if (segment instanceof IntervalExpression) {
-            return IntervalExpressionConverter.convert((IntervalExpression) 
segment);
+            return 
Optional.of(IntervalExpressionConverter.convert((IntervalExpression) segment));
         }
         if (segment instanceof QuantifySubqueryExpression) {
-            return 
QuantifySubqueryExpressionConverter.convert((QuantifySubqueryExpression) 
segment);
+            return 
Optional.of(QuantifySubqueryExpressionConverter.convert((QuantifySubqueryExpression)
 segment));
         }
         throw new UnsupportedSQLOperationException("unsupported TableSegment 
type: " + segment.getClass());
     }
diff --git 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/FunctionConverter.java
 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/FunctionConverter.java
index 87a8c8ce1c8..f7e4478641b 100644
--- 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/FunctionConverter.java
+++ 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/FunctionConverter.java
@@ -62,10 +62,10 @@ public final class FunctionConverter {
             return Optional.of(functionName);
         }
         if ("TRIM".equalsIgnoreCase(functionName.getSimple())) {
-            return TrimFunctionConverter.convert(segment);
+            return Optional.of(TrimFunctionConverter.convert(segment));
         }
         if ("OVER".equalsIgnoreCase(functionName.getSimple())) {
-            return WindowFunctionConverter.convert(segment);
+            return Optional.of(WindowFunctionConverter.convert(segment));
         }
         List<SqlOperator> functions = new LinkedList<>();
         SqlStdOperatorTable.instance().lookupOperatorOverloads(functionName, 
null, SqlSyntax.FUNCTION, functions, SqlNameMatchers.withCaseSensitive(false));
diff --git 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/InExpressionConverter.java
 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/InExpressionConverter.java
index 2bd387635d4..d6ab6707551 100644
--- 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/InExpressionConverter.java
+++ 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/InExpressionConverter.java
@@ -30,7 +30,6 @@ import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segmen
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.LinkedList;
-import java.util.Optional;
 
 /**
  * In expression converter.
@@ -44,14 +43,11 @@ public final class InExpressionConverter {
      * @param expression in expression
      * @return SQL node
      */
-    public static Optional<SqlNode> convert(final InExpression expression) {
-        if (null == expression) {
-            return Optional.empty();
-        }
+    public static SqlBasicCall convert(final InExpression expression) {
         Collection<SqlNode> sqlNodes = new LinkedList<>();
         
ExpressionConverter.convert(expression.getLeft()).ifPresent(sqlNodes::add);
         ExpressionConverter.convert(expression.getRight())
                 .ifPresent(optional -> sqlNodes.add(optional instanceof 
SqlBasicCall ? new SqlNodeList(((SqlBasicCall) optional).getOperandList(), 
SqlParserPos.ZERO) : optional));
-        return Optional.of(new SqlBasicCall(expression.isNot() ? 
SqlStdOperatorTable.NOT_IN : SqlStdOperatorTable.IN, new ArrayList<>(sqlNodes), 
SqlParserPos.ZERO));
+        return new SqlBasicCall(expression.isNot() ? 
SqlStdOperatorTable.NOT_IN : SqlStdOperatorTable.IN, new ArrayList<>(sqlNodes), 
SqlParserPos.ZERO);
     }
 }
diff --git 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/IntervalExpressionConverter.java
 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/IntervalExpressionConverter.java
index e287faabfb6..91df5ce6e31 100644
--- 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/IntervalExpressionConverter.java
+++ 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/IntervalExpressionConverter.java
@@ -31,7 +31,6 @@ import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segmen
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Optional;
 
 /**
  * Interval expression converter.
@@ -45,13 +44,12 @@ public final class IntervalExpressionConverter {
      * @param segment unary operation expression
      * @return SQL node
      */
-    public static Optional<SqlNode> convert(final IntervalExpression segment) {
+    public static SqlBasicCall convert(final IntervalExpression segment) {
         TimeUnit timeUnit = getTimeUnit(segment.getIntervalUnit());
         List<SqlNode> sqlNodes = new ArrayList<>();
         
ExpressionConverter.convert(segment.getValue()).ifPresent(sqlNodes::add);
         sqlNodes.add(new SqlIntervalQualifier(timeUnit, timeUnit, 
SqlParserPos.ZERO));
-        SqlBasicCall result = new 
SqlBasicCall(SQLExtensionOperatorTable.INTERVAL_OPERATOR, sqlNodes, 
SqlParserPos.ZERO);
-        return Optional.of(result);
+        return new SqlBasicCall(SQLExtensionOperatorTable.INTERVAL_OPERATOR, 
sqlNodes, SqlParserPos.ZERO);
     }
     
     private static TimeUnit getTimeUnit(final IntervalUnit unit) {
diff --git 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/LiteralExpressionConverter.java
 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/LiteralExpressionConverter.java
index a2462645031..0360102f366 100644
--- 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/LiteralExpressionConverter.java
+++ 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/LiteralExpressionConverter.java
@@ -87,7 +87,7 @@ public final class LiteralExpressionConverter {
             return Optional.of(new 
SqlIntervalQualifier(TimeUnit.valueOf(literalValue.toUpperCase()), null, 
SqlParserPos.ZERO));
         }
         if (segment.getLiterals() instanceof Number) {
-            return convertNumber(segment, literalValue);
+            return Optional.of(convertNumber(segment, literalValue));
         }
         if (segment.getLiterals() instanceof String) {
             return Optional.of(SqlLiteral.createCharString(literalValue, 
SqlParserPos.ZERO));
@@ -96,10 +96,10 @@ public final class LiteralExpressionConverter {
             return 
Optional.of(SqlLiteral.createBoolean(Boolean.parseBoolean(literalValue), 
SqlParserPos.ZERO));
         }
         if (segment.getLiterals() instanceof Calendar) {
-            return convertCalendar(segment);
+            return Optional.of(convertCalendar(segment));
         }
         if (segment.getLiterals() instanceof Date) {
-            return convertDate(segment, literalValue);
+            return Optional.of(convertDate(segment, literalValue));
         }
         if (segment.getLiterals() instanceof LocalDate) {
             return 
Optional.of(SqlLiteral.createDate(DateString.fromDaysSinceEpoch((int) 
((LocalDate) segment.getLiterals()).toEpochDay()), SqlParserPos.ZERO));
@@ -122,33 +122,31 @@ public final class LiteralExpressionConverter {
         return Optional.empty();
     }
     
-    private static Optional<SqlNode> convertNumber(final 
LiteralExpressionSegment segment, final String literalValue) {
-        if (segment.getLiterals() instanceof BigDecimal || 
segment.getLiterals() instanceof BigInteger) {
-            return Optional.of(SqlLiteral.createApproxNumeric(literalValue, 
SqlParserPos.ZERO));
-        }
-        return Optional.of(SqlLiteral.createExactNumeric(literalValue, 
SqlParserPos.ZERO));
+    private static SqlNode convertNumber(final LiteralExpressionSegment 
segment, final String literalValue) {
+        return segment.getLiterals() instanceof BigDecimal || 
segment.getLiterals() instanceof BigInteger
+                ? SqlLiteral.createApproxNumeric(literalValue, 
SqlParserPos.ZERO)
+                : SqlLiteral.createExactNumeric(literalValue, 
SqlParserPos.ZERO);
     }
     
-    private static Optional<SqlNode> convertCalendar(final 
LiteralExpressionSegment segment) {
+    private static SqlNode convertCalendar(final LiteralExpressionSegment 
segment) {
         Calendar calendar = (Calendar) segment.getLiterals();
-        if (hasTimePart(calendar)) {
-            return 
Optional.of(SqlLiteral.createTimestamp(SqlTypeName.TIMESTAMP, 
TimestampString.fromCalendarFields(calendar), 1, SqlParserPos.ZERO));
-        }
-        return 
Optional.of(SqlLiteral.createDate(DateString.fromCalendarFields(calendar), 
SqlParserPos.ZERO));
+        return hasTimePart(calendar)
+                ? SqlLiteral.createTimestamp(SqlTypeName.TIMESTAMP, 
TimestampString.fromCalendarFields(calendar), 1, SqlParserPos.ZERO)
+                : 
SqlLiteral.createDate(DateString.fromCalendarFields(calendar), 
SqlParserPos.ZERO);
     }
     
     private static boolean hasTimePart(final Calendar calendar) {
         return 0 != calendar.get(Calendar.HOUR_OF_DAY) || 0 != 
calendar.get(Calendar.MINUTE) || 0 != calendar.get(Calendar.SECOND) || 0 != 
calendar.get(Calendar.MILLISECOND);
     }
     
-    private static Optional<SqlNode> convertDate(final 
LiteralExpressionSegment segment, final String literalValue) {
+    private static SqlNode convertDate(final LiteralExpressionSegment segment, 
final String literalValue) {
         if (segment.getLiterals() instanceof Timestamp) {
             Timestamp timestamp = (Timestamp) segment.getLiterals();
-            return 
Optional.of(SqlLiteral.createTimestamp(SqlTypeName.TIMESTAMP, 
TimestampString.fromMillisSinceEpoch(timestamp.getTime()), 1, 
SqlParserPos.ZERO));
+            return SqlLiteral.createTimestamp(SqlTypeName.TIMESTAMP, 
TimestampString.fromMillisSinceEpoch(timestamp.getTime()), 1, 
SqlParserPos.ZERO);
         }
         if (segment.getLiterals() instanceof Time) {
-            return Optional.of(SqlLiteral.createTime(new 
TimeString(literalValue), 1, SqlParserPos.ZERO));
+            return SqlLiteral.createTime(new TimeString(literalValue), 1, 
SqlParserPos.ZERO);
         }
-        return Optional.of(SqlLiteral.createDate(new DateString(literalValue), 
SqlParserPos.ZERO));
+        return SqlLiteral.createDate(new DateString(literalValue), 
SqlParserPos.ZERO);
     }
 }
diff --git 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/MatchExpressionConverter.java
 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/MatchExpressionConverter.java
index 0b6d82e25ee..8630f6315b3 100644
--- 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/MatchExpressionConverter.java
+++ 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/MatchExpressionConverter.java
@@ -25,15 +25,14 @@ import org.apache.calcite.sql.SqlLiteral;
 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.match.MatchAgainstExpression;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.OwnerSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.match.MatchAgainstExpression;
 import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.operator.common.SQLExtensionOperatorTable;
 import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.expression.ExpressionConverter;
 
 import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Optional;
 
 /**
  * Match expression converter.
@@ -47,7 +46,7 @@ public final class MatchExpressionConverter {
      * @param segment match against expression
      * @return SQL node
      */
-    public static Optional<SqlNode> convert(final MatchAgainstExpression 
segment) {
+    public static SqlBasicCall convert(final MatchAgainstExpression segment) {
         List<SqlNode> sqlNodes = new LinkedList<>();
         List<String> names = new ArrayList<>();
         for (ColumnSegment each : segment.getColumns()) {
@@ -60,7 +59,7 @@ public final class MatchExpressionConverter {
         
ExpressionConverter.convert(segment.getExpr()).ifPresent(sqlNodes::add);
         SqlNode searchModifier = 
SqlLiteral.createCharString(segment.getSearchModifier(), SqlParserPos.ZERO);
         sqlNodes.add(searchModifier);
-        return Optional.of(new 
SqlBasicCall(SQLExtensionOperatorTable.MATCH_AGAINST, sqlNodes, 
SqlParserPos.ZERO));
+        return new SqlBasicCall(SQLExtensionOperatorTable.MATCH_AGAINST, 
sqlNodes, 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/expression/impl/NotExpressionConverter.java
 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/NotExpressionConverter.java
index ac83ec68191..3c564e93c3f 100644
--- 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/NotExpressionConverter.java
+++ 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/NotExpressionConverter.java
@@ -28,7 +28,6 @@ import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segmen
 
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Optional;
 
 /**
  * Not expression converter.
@@ -42,13 +41,10 @@ public final class NotExpressionConverter {
      * @param segment not expression
      * @return SQL node
      */
-    public static Optional<SqlNode> convert(final NotExpression segment) {
+    public static SqlBasicCall convert(final NotExpression segment) {
         SqlNode expression = 
ExpressionConverter.convert(segment.getExpression()).orElseThrow(IllegalStateException::new);
         List<SqlNode> sqlNodes = new LinkedList<>();
         sqlNodes.add(expression);
-        if (segment.getNotSign().equals(true)) {
-            return Optional.of(new 
SqlBasicCall(SQLExtensionOperatorTable.NOT_SIGN, sqlNodes, SqlParserPos.ZERO));
-        }
-        return Optional.of(new SqlBasicCall(SQLExtensionOperatorTable.NOT, 
sqlNodes, SqlParserPos.ZERO));
+        return new SqlBasicCall(segment.getNotSign() ? 
SQLExtensionOperatorTable.NOT_SIGN : SQLExtensionOperatorTable.NOT, sqlNodes, 
SqlParserPos.ZERO);
     }
 }
diff --git 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/ParameterMarkerExpressionConverter.java
 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/ParameterMarkerExpressionConverter.java
index 460985c9acb..0f2f8d67860 100644
--- 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/ParameterMarkerExpressionConverter.java
+++ 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/ParameterMarkerExpressionConverter.java
@@ -20,12 +20,9 @@ package 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segme
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.calcite.sql.SqlDynamicParam;
-import org.apache.calcite.sql.SqlNode;
 import org.apache.calcite.sql.parser.SqlParserPos;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.simple.ParameterMarkerExpressionSegment;
 
-import java.util.Optional;
-
 /**
  * Parameter marker expression converter.
  */
@@ -38,7 +35,7 @@ public final class ParameterMarkerExpressionConverter {
      * @param segment parameter marker expression segment
      * @return SQL node
      */
-    public static Optional<SqlNode> convert(final 
ParameterMarkerExpressionSegment segment) {
-        return Optional.of(new 
SqlDynamicParam(segment.getParameterMarkerIndex(), SqlParserPos.ZERO));
+    public static SqlDynamicParam convert(final 
ParameterMarkerExpressionSegment segment) {
+        return new SqlDynamicParam(segment.getParameterMarkerIndex(), 
SqlParserPos.ZERO);
     }
 }
diff --git 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/QuantifySubqueryExpressionConverter.java
 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/QuantifySubqueryExpressionConverter.java
index 76c15bd5a9c..ea582bc7a78 100644
--- 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/QuantifySubqueryExpressionConverter.java
+++ 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/QuantifySubqueryExpressionConverter.java
@@ -23,8 +23,6 @@ import org.apache.calcite.sql.SqlNode;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.QuantifySubqueryExpression;
 import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.statement.type.SelectStatementConverter;
 
-import java.util.Optional;
-
 /**
  * Quantify subquery expression converter.
  */
@@ -37,7 +35,7 @@ public final class QuantifySubqueryExpressionConverter {
      * @param expression quantify subquery expression
      * @return SQL node
      */
-    public static Optional<SqlNode> convert(final QuantifySubqueryExpression 
expression) {
-        return null == expression ? Optional.empty() : Optional.of(new 
SelectStatementConverter().convert(expression.getSubquery().getSelect()));
+    public static SqlNode convert(final QuantifySubqueryExpression expression) 
{
+        return new 
SelectStatementConverter().convert(expression.getSubquery().getSelect());
     }
 }
diff --git 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/RowExpressionConverter.java
 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/RowExpressionConverter.java
index 3cd4b4359ed..b4846a83ab5 100644
--- 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/RowExpressionConverter.java
+++ 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/RowExpressionConverter.java
@@ -28,7 +28,6 @@ import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segmen
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Optional;
 
 /**
  * Row expression converter.
@@ -42,11 +41,11 @@ public final class RowExpressionConverter {
      * @param segment row expression
      * @return SQL node
      */
-    public static Optional<SqlNode> convert(final RowExpression segment) {
+    public static SqlNode convert(final RowExpression segment) {
         List<SqlNode> sqlNodes = new ArrayList<>(segment.getItems().size());
         for (ExpressionSegment each : segment.getItems()) {
             ExpressionConverter.convert(each).ifPresent(sqlNodes::add);
         }
-        return 
Optional.of(SqlStdOperatorTable.ROW.createCall(SqlParserPos.ZERO, sqlNodes));
+        return SqlStdOperatorTable.ROW.createCall(SqlParserPos.ZERO, sqlNodes);
     }
 }
diff --git 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/SubqueryExpressionConverter.java
 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/SubqueryExpressionConverter.java
index 7ffa60d1bf2..d5dd21a6752 100644
--- 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/SubqueryExpressionConverter.java
+++ 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/SubqueryExpressionConverter.java
@@ -23,8 +23,6 @@ import org.apache.calcite.sql.SqlNode;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.subquery.SubqueryExpressionSegment;
 import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.statement.type.SelectStatementConverter;
 
-import java.util.Optional;
-
 /**
  * Subquery expression converter.
  */
@@ -37,7 +35,7 @@ public final class SubqueryExpressionConverter {
      * @param expression subquery expression segment
      * @return SQL node
      */
-    public static Optional<SqlNode> convert(final SubqueryExpressionSegment 
expression) {
-        return null == expression ? Optional.empty() : Optional.of(new 
SelectStatementConverter().convert(expression.getSubquery().getSelect()));
+    public static SqlNode convert(final SubqueryExpressionSegment expression) {
+        return new 
SelectStatementConverter().convert(expression.getSubquery().getSelect());
     }
 }
diff --git 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/TrimFunctionConverter.java
 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/TrimFunctionConverter.java
index 65129224788..b2a2fac603a 100644
--- 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/TrimFunctionConverter.java
+++ 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/TrimFunctionConverter.java
@@ -36,7 +36,6 @@ import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segmen
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Optional;
 
 /**
  * Trim function converter.
@@ -50,11 +49,11 @@ public final class TrimFunctionConverter {
      * @param segment function segment
      * @return SQL node
      */
-    public static Optional<SqlNode> convert(final FunctionSegment segment) {
+    public static SqlBasicCall convert(final FunctionSegment segment) {
         SqlIdentifier functionName = new 
SqlIdentifier(segment.getFunctionName(), SqlParserPos.ZERO);
         List<SqlOperator> functions = new LinkedList<>();
         SqlStdOperatorTable.instance().lookupOperatorOverloads(functionName, 
null, SqlSyntax.FUNCTION, functions, SqlNameMatchers.withCaseSensitive(false));
-        return Optional.of(new SqlBasicCall(functions.iterator().next(), 
getTrimFunctionParameters(segment.getParameters()), SqlParserPos.ZERO));
+        return new SqlBasicCall(functions.iterator().next(), 
getTrimFunctionParameters(segment.getParameters()), SqlParserPos.ZERO);
     }
     
     private static List<SqlNode> getTrimFunctionParameters(final 
Collection<ExpressionSegment> sqlSegments) {
diff --git 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/UnaryOperationExpressionConverter.java
 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/UnaryOperationExpressionConverter.java
index ff48bd5c509..e8f00dc3f15 100644
--- 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/UnaryOperationExpressionConverter.java
+++ 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/UnaryOperationExpressionConverter.java
@@ -33,7 +33,6 @@ import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segmen
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 
 /**
  * Unary operation expression converter.
@@ -63,10 +62,10 @@ public final class UnaryOperationExpressionConverter {
      * @param segment unary operation expression
      * @return SQL node
      */
-    public static Optional<SqlNode> convert(final UnaryOperationExpression 
segment) {
+    public static SqlBasicCall convert(final UnaryOperationExpression segment) 
{
         SqlOperator operator = convertOperator(segment);
         List<SqlNode> sqlNodes = convertSqlNodes(segment);
-        return Optional.of(new SqlBasicCall(operator, sqlNodes, 
SqlParserPos.ZERO));
+        return new SqlBasicCall(operator, sqlNodes, SqlParserPos.ZERO);
     }
     
     private static SqlOperator convertOperator(final UnaryOperationExpression 
segment) {
diff --git 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/VariableSegmentConverter.java
 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/VariableSegmentConverter.java
index b5c220aef10..22a9d695594 100644
--- 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/VariableSegmentConverter.java
+++ 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/VariableSegmentConverter.java
@@ -20,12 +20,9 @@ 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.dal.VariableSegment;
 
-import java.util.Optional;
-
 /**
  * Variable segment converter.
  */
@@ -38,7 +35,7 @@ public final class VariableSegmentConverter {
      * @param segment variable segment
      * @return SQL node
      */
-    public static Optional<SqlNode> convert(final VariableSegment segment) {
-        return Optional.of(new SqlIdentifier(segment.getText(), 
SqlParserPos.ZERO));
+    public static SqlIdentifier convert(final VariableSegment segment) {
+        return new SqlIdentifier(segment.getText(), SqlParserPos.ZERO);
     }
 }
diff --git 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/WindowFunctionConverter.java
 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/WindowFunctionConverter.java
index 4d4b9f4d024..84fc0a41316 100644
--- 
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/WindowFunctionConverter.java
+++ 
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/WindowFunctionConverter.java
@@ -37,7 +37,6 @@ import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segmen
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Optional;
 
 /**
  * Window function converter.
@@ -51,11 +50,11 @@ public final class WindowFunctionConverter {
      * @param segment function segment
      * @return SQL node
      */
-    public static Optional<SqlNode> convert(final FunctionSegment segment) {
+    public static SqlBasicCall convert(final FunctionSegment segment) {
         SqlIdentifier functionName = new 
SqlIdentifier(segment.getFunctionName(), SqlParserPos.ZERO);
         List<SqlOperator> functions = new LinkedList<>();
         SqlStdOperatorTable.instance().lookupOperatorOverloads(functionName, 
null, SqlSyntax.BINARY, functions, SqlNameMatchers.withCaseSensitive(false));
-        return Optional.of(new SqlBasicCall(functions.iterator().next(), 
getWindowFunctionParameters(segment.getParameters()), SqlParserPos.ZERO));
+        return new SqlBasicCall(functions.iterator().next(), 
getWindowFunctionParameters(segment.getParameters()), SqlParserPos.ZERO);
     }
     
     private static List<SqlNode> getWindowFunctionParameters(final 
Collection<ExpressionSegment> sqlSegments) {
@@ -64,8 +63,8 @@ public final class WindowFunctionConverter {
             ExpressionConverter.convert(each).ifPresent(result::add);
         }
         if (1 == result.size()) {
-            result.add(new SqlWindow(SqlParserPos.ZERO, null, null, new 
SqlNodeList(SqlParserPos.ZERO), new SqlNodeList(SqlParserPos.ZERO), 
SqlLiteral.createBoolean(false, SqlParserPos.ZERO), null,
-                    null, null));
+            result.add(new SqlWindow(
+                    SqlParserPos.ZERO, null, null, new 
SqlNodeList(SqlParserPos.ZERO), new SqlNodeList(SqlParserPos.ZERO), 
SqlLiteral.createBoolean(false, SqlParserPos.ZERO), null, null, null));
         }
         return result;
     }
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 75e03c6fd49..01780e1fadd 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
@@ -78,7 +78,7 @@ public final class ProjectionsConverter {
             return 
AggregationProjectionConverter.convert((AggregationProjectionSegment) segment);
         }
         if (segment instanceof ParameterMarkerExpressionSegment) {
-            return 
ParameterMarkerExpressionConverter.convert((ParameterMarkerExpressionSegment) 
segment);
+            return 
Optional.of(ParameterMarkerExpressionConverter.convert((ParameterMarkerExpressionSegment)
 segment));
         }
         // TODO process other projection
         return Optional.empty();
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 a5f12a7a9eb..c52a8d468ab 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.SqlDynamicParam;
 import org.apache.calcite.sql.SqlIdentifier;
 import org.apache.calcite.sql.SqlNode;
 import org.apache.calcite.sql.fun.SqlCase;
@@ -129,16 +130,16 @@ class ExpressionConverterTest {
         
when(ExistsSubqueryExpressionConverter.convert(existsSubqueryExpression)).thenReturn(expectedExistsSubqueryNode);
         SqlNode expectedSubqueryNode = mock(SqlNode.class);
         SubqueryExpressionSegment subqueryExpressionSegment = new 
SubqueryExpressionSegment(subquerySegment);
-        
when(SubqueryExpressionConverter.convert(subqueryExpressionSegment)).thenReturn(Optional.of(expectedSubqueryNode));
-        SqlNode expectedInNode = mock(SqlNode.class);
+        
when(SubqueryExpressionConverter.convert(subqueryExpressionSegment)).thenReturn(expectedSubqueryNode);
+        SqlBasicCall expectedInNode = mock(SqlBasicCall.class);
         InExpression inExpression = new InExpression(0, 0, literalSegment, 
literalSegment, false);
-        
when(InExpressionConverter.convert(inExpression)).thenReturn(Optional.of(expectedInNode));
+        
when(InExpressionConverter.convert(inExpression)).thenReturn(expectedInNode);
         SqlBasicCall expectedBetweenNode = mock(SqlBasicCall.class);
         BetweenExpression betweenExpression = new BetweenExpression(0, 0, 
literalSegment, literalSegment, literalSegment, false);
         
when(BetweenExpressionConverter.convert(betweenExpression)).thenReturn(expectedBetweenNode);
-        SqlNode expectedParameterNode = mock(SqlNode.class);
+        SqlDynamicParam expectedParameterNode = mock(SqlDynamicParam.class);
         ParameterMarkerExpressionSegment parameterSegment = new 
ParameterMarkerExpressionSegment(0, 0, 0);
-        
when(ParameterMarkerExpressionConverter.convert(parameterSegment)).thenReturn(Optional.of(expectedParameterNode));
+        
when(ParameterMarkerExpressionConverter.convert(parameterSegment)).thenReturn(expectedParameterNode);
         SqlNode expectedFunctionNode = mock(SqlNode.class);
         FunctionSegment functionSegment = new FunctionSegment(0, 0, "func", 
"func_text");
         
when(FunctionConverter.convert(functionSegment)).thenReturn(Optional.of(expectedFunctionNode));
@@ -154,36 +155,36 @@ class ExpressionConverterTest {
         SqlCase expectedCaseWhenNode = mock(SqlCase.class);
         CaseWhenExpression caseWhenExpression = new CaseWhenExpression(0, 0, 
literalSegment, Collections.singleton(literalSegment), 
Collections.singleton(literalSegment), literalSegment);
         
when(CaseWhenExpressionConverter.convert(caseWhenExpression)).thenReturn(expectedCaseWhenNode);
-        SqlNode expectedNotNode = mock(SqlNode.class);
+        SqlBasicCall expectedNotNode = mock(SqlBasicCall.class);
         NotExpression notExpression = new NotExpression(0, 0, literalSegment, 
true);
-        
when(NotExpressionConverter.convert(notExpression)).thenReturn(Optional.of(expectedNotNode));
+        
when(NotExpressionConverter.convert(notExpression)).thenReturn(expectedNotNode);
         SqlNode expectedTypeCastNode = mock(SqlNode.class);
         TypeCastExpression typeCastExpression = new TypeCastExpression(0, 0, 
"text", literalSegment, "int");
         
when(TypeCastExpressionConverter.convert(typeCastExpression)).thenReturn(Optional.of(expectedTypeCastNode));
         SqlIdentifier expectedExtractNode = mock(SqlIdentifier.class);
         ExtractArgExpression extractArgExpression = new 
ExtractArgExpression(0, 0, "extract");
         
when(ExtractArgExpressionConverter.convert(extractArgExpression)).thenReturn(expectedExtractNode);
-        SqlNode expectedMatchNode = mock(SqlNode.class);
+        SqlBasicCall expectedMatchNode = mock(SqlBasicCall.class);
         MatchAgainstExpression matchAgainstExpression = new 
MatchAgainstExpression(0, 0, literalSegment, "search", "text");
-        
when(MatchExpressionConverter.convert(matchAgainstExpression)).thenReturn(Optional.of(expectedMatchNode));
+        
when(MatchExpressionConverter.convert(matchAgainstExpression)).thenReturn(expectedMatchNode);
         SqlBasicCall expectedCollateNode = mock(SqlBasicCall.class);
         CollateExpression collateExpression = new CollateExpression(0, 0, 
literalSegment, literalSegment);
         
when(CollateExpressionConverter.convert(collateExpression)).thenReturn(expectedCollateNode);
         SqlNode expectedRowNode = mock(SqlNode.class);
         RowExpression rowExpression = new RowExpression(0, 0, "row");
-        
when(RowExpressionConverter.convert(rowExpression)).thenReturn(Optional.of(expectedRowNode));
-        SqlNode expectedVariableNode = mock(SqlNode.class);
+        
when(RowExpressionConverter.convert(rowExpression)).thenReturn(expectedRowNode);
+        SqlIdentifier expectedVariableNode = mock(SqlIdentifier.class);
         VariableSegment variableSegment = new VariableSegment(0, 0, 
"@@session");
-        
when(VariableSegmentConverter.convert(variableSegment)).thenReturn(Optional.of(expectedVariableNode));
-        SqlNode expectedUnaryNode = mock(SqlNode.class);
+        
when(VariableSegmentConverter.convert(variableSegment)).thenReturn(expectedVariableNode);
+        SqlBasicCall expectedUnaryNode = mock(SqlBasicCall.class);
         UnaryOperationExpression unaryOperationExpression = new 
UnaryOperationExpression(0, 0, literalSegment, "+", "text");
-        
when(UnaryOperationExpressionConverter.convert(unaryOperationExpression)).thenReturn(Optional.of(expectedUnaryNode));
-        SqlNode expectedIntervalNode = mock(SqlNode.class);
+        
when(UnaryOperationExpressionConverter.convert(unaryOperationExpression)).thenReturn(expectedUnaryNode);
+        SqlBasicCall expectedIntervalNode = mock(SqlBasicCall.class);
         IntervalExpression intervalExpression = new IntervalExpression(0, 0, 
literalSegment, IntervalUnit.DAY, "interval");
-        
when(IntervalExpressionConverter.convert(intervalExpression)).thenReturn(Optional.of(expectedIntervalNode));
+        
when(IntervalExpressionConverter.convert(intervalExpression)).thenReturn(expectedIntervalNode);
         SqlNode expectedQuantifyNode = mock(SqlNode.class);
         QuantifySubqueryExpression quantifySubqueryExpression = new 
QuantifySubqueryExpression(0, 0, new SubquerySegment(0, 0, new 
SelectStatement(databaseType), "sub"), "ALL");
-        
when(QuantifySubqueryExpressionConverter.convert(quantifySubqueryExpression)).thenReturn(Optional.of(expectedQuantifyNode));
+        
when(QuantifySubqueryExpressionConverter.convert(quantifySubqueryExpression)).thenReturn(expectedQuantifyNode);
         Map<ExpressionSegment, SqlNode> expectations = new LinkedHashMap<>(23, 
1F);
         expectations.put(literalSegment, expectedLiteralNode);
         expectations.put(listSegment, expectedListNode);
diff --git 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/FunctionConverterTest.java
 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/FunctionConverterTest.java
index cdb0c18f79c..39ef00d5efb 100644
--- 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/FunctionConverterTest.java
+++ 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/FunctionConverterTest.java
@@ -66,8 +66,8 @@ class FunctionConverterTest {
     @Test
     void assertConvertDelegatesToTrimFunctionConverter() {
         FunctionSegment segment = new FunctionSegment(0, 0, "TRIM", "TRIM");
-        SqlNode expected = mock(SqlNode.class);
-        
when(TrimFunctionConverter.convert(segment)).thenReturn(Optional.of(expected));
+        SqlBasicCall expected = mock(SqlBasicCall.class);
+        when(TrimFunctionConverter.convert(segment)).thenReturn(expected);
         SqlNode actual = FunctionConverter.convert(segment).orElse(null);
         assertThat(actual, is(expected));
     }
@@ -75,8 +75,8 @@ class FunctionConverterTest {
     @Test
     void assertConvertDelegatesToWindowFunctionConverter() {
         FunctionSegment segment = new FunctionSegment(0, 0, "OVER", "OVER");
-        SqlNode expected = mock(SqlNode.class);
-        
when(WindowFunctionConverter.convert(segment)).thenReturn(Optional.of(expected));
+        SqlBasicCall expected = mock(SqlBasicCall.class);
+        when(WindowFunctionConverter.convert(segment)).thenReturn(expected);
         SqlNode actual = FunctionConverter.convert(segment).orElse(null);
         assertThat(actual, is(expected));
     }
diff --git 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/InExpressionConverterTest.java
 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/InExpressionConverterTest.java
index ed0bd303754..fa74cd2d70d 100644
--- 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/InExpressionConverterTest.java
+++ 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/InExpressionConverterTest.java
@@ -37,8 +37,6 @@ 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.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -46,11 +44,6 @@ import static org.mockito.Mockito.when;
 @StaticMockSettings(ExpressionConverter.class)
 class InExpressionConverterTest {
     
-    @Test
-    void assertConvertReturnsEmptyWhenExpressionIsNull() {
-        assertFalse(InExpressionConverter.convert(null).isPresent());
-    }
-    
     @Test
     void assertConvertWrapsSqlBasicCallRightAsListForNotIn() {
         LiteralExpressionSegment left = new LiteralExpressionSegment(0, 0, 1);
@@ -60,8 +53,7 @@ class InExpressionConverterTest {
         SqlBasicCall rightBasicCall = new 
SqlBasicCall(SqlStdOperatorTable.PLUS, Collections.singletonList(rightOperand), 
SqlParserPos.ZERO);
         
when(ExpressionConverter.convert(left)).thenReturn(Optional.of(leftNode));
         
when(ExpressionConverter.convert(right)).thenReturn(Optional.of(rightBasicCall));
-        SqlBasicCall actual = (SqlBasicCall) InExpressionConverter.convert(new 
InExpression(0, 0, left, right, true)).orElse(null);
-        assertNotNull(actual);
+        SqlBasicCall actual = InExpressionConverter.convert(new 
InExpression(0, 0, left, right, true));
         assertThat(actual.getOperator(), is(SqlStdOperatorTable.NOT_IN));
         SqlNode secondOperand = actual.getOperandList().get(1);
         assertThat(secondOperand, instanceOf(SqlNodeList.class));
@@ -77,8 +69,7 @@ class InExpressionConverterTest {
         SqlNode rightNode = mock(SqlNode.class);
         
when(ExpressionConverter.convert(left)).thenReturn(Optional.of(leftNode));
         
when(ExpressionConverter.convert(right)).thenReturn(Optional.of(rightNode));
-        SqlBasicCall actual = (SqlBasicCall) InExpressionConverter.convert(new 
InExpression(0, 0, left, right, false)).orElse(null);
-        assertNotNull(actual);
+        SqlBasicCall actual = InExpressionConverter.convert(new 
InExpression(0, 0, left, right, false));
         assertThat(actual.getOperator(), is(SqlStdOperatorTable.IN));
         assertThat(actual.getOperandList(), is(Arrays.asList(leftNode, 
rightNode)));
     }
diff --git 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/IntervalExpressionConverterTest.java
 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/IntervalExpressionConverterTest.java
index ea958f4caad..66300b03eeb 100644
--- 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/IntervalExpressionConverterTest.java
+++ 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/IntervalExpressionConverterTest.java
@@ -41,7 +41,6 @@ import java.util.stream.Stream;
 
 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.assertThrows;
 import static org.mockito.Mockito.when;
 
@@ -63,8 +62,7 @@ class IntervalExpressionConverterTest {
         SqlNode literalNode = SqlLiteral.createExactNumeric("1", 
SqlParserPos.ZERO);
         
when(ExpressionConverter.convert(value)).thenReturn(Optional.of(literalNode));
         IntervalExpression intervalExpression = new IntervalExpression(0, 0, 
value, intervalUnit, "INTERVAL 1");
-        SqlBasicCall actual = (SqlBasicCall) 
IntervalExpressionConverter.convert(intervalExpression).orElse(null);
-        assertNotNull(actual);
+        SqlBasicCall actual = 
IntervalExpressionConverter.convert(intervalExpression);
         assertThat(actual.getOperator(), 
is(SQLExtensionOperatorTable.INTERVAL_OPERATOR));
         assertThat(actual.getOperandList().get(0), is(literalNode));
         SqlIntervalQualifier qualifier = (SqlIntervalQualifier) 
actual.getOperandList().get(1);
diff --git 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/MatchExpressionConverterTest.java
 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/MatchExpressionConverterTest.java
index 0a7bad46420..888f61ff4ce 100644
--- 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/MatchExpressionConverterTest.java
+++ 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/MatchExpressionConverterTest.java
@@ -24,10 +24,10 @@ import org.apache.calcite.sql.SqlNode;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.simple.LiteralExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.OwnerSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.match.MatchAgainstExpression;
 import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.operator.common.SQLExtensionOperatorTable;
 import 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.expression.ExpressionConverter;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.match.MatchAgainstExpression;
 import 
org.apache.shardingsphere.test.infra.framework.extension.mock.AutoMockExtension;
 import 
org.apache.shardingsphere.test.infra.framework.extension.mock.StaticMockSettings;
 import org.junit.jupiter.api.Test;
@@ -39,7 +39,6 @@ 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.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -59,8 +58,7 @@ class MatchExpressionConverterTest {
         
when(ExpressionConverter.convert(expr)).thenReturn(Optional.of(exprNode));
         MatchAgainstExpression segment = new MatchAgainstExpression(0, 0, 
expr, "modifier", "");
         segment.getColumns().add(columnSegment);
-        SqlBasicCall actual = (SqlBasicCall) 
MatchExpressionConverter.convert(segment).orElse(null);
-        assertNotNull(actual);
+        SqlBasicCall actual = MatchExpressionConverter.convert(segment);
         assertThat(actual.getOperator(), 
is(SQLExtensionOperatorTable.MATCH_AGAINST));
         SqlIdentifier identifier = (SqlIdentifier) 
actual.getOperandList().get(0);
         assertThat(identifier.names, is(Arrays.asList("schema", "table", 
"column")));
@@ -76,8 +74,7 @@ class MatchExpressionConverterTest {
         when(ExpressionConverter.convert(expr)).thenReturn(Optional.empty());
         MatchAgainstExpression segment = new MatchAgainstExpression(0, 0, 
expr, "modifier", "");
         segment.getColumns().add(columnSegment);
-        SqlBasicCall actual = (SqlBasicCall) 
MatchExpressionConverter.convert(segment).orElse(null);
-        assertNotNull(actual);
+        SqlBasicCall actual = MatchExpressionConverter.convert(segment);
         assertThat(actual.getOperandList().size(), is(2));
         assertThat(actual.getOperandList().get(0), 
instanceOf(SqlIdentifier.class));
         SqlLiteral modifier = (SqlLiteral) actual.getOperandList().get(1);
diff --git 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/NotExpressionConverterTest.java
 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/NotExpressionConverterTest.java
index 4053a4ee14a..98907617075 100644
--- 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/NotExpressionConverterTest.java
+++ 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/NotExpressionConverterTest.java
@@ -32,7 +32,6 @@ import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -45,8 +44,7 @@ class NotExpressionConverterTest {
         LiteralExpressionSegment expression = new LiteralExpressionSegment(0, 
0, 1);
         SqlNode expressionNode = mock(SqlNode.class);
         
when(ExpressionConverter.convert(expression)).thenReturn(Optional.of(expressionNode));
-        SqlBasicCall actual = (SqlBasicCall) 
NotExpressionConverter.convert(new NotExpression(0, 0, expression, 
true)).orElse(null);
-        assertNotNull(actual);
+        SqlBasicCall actual = NotExpressionConverter.convert(new 
NotExpression(0, 0, expression, true));
         assertThat(actual.getOperator(), 
is(SQLExtensionOperatorTable.NOT_SIGN));
         assertThat(actual.getOperandList().get(0), is(expressionNode));
     }
@@ -56,8 +54,7 @@ class NotExpressionConverterTest {
         LiteralExpressionSegment expression = new LiteralExpressionSegment(0, 
0, 1);
         SqlNode expressionNode = mock(SqlNode.class);
         
when(ExpressionConverter.convert(expression)).thenReturn(Optional.of(expressionNode));
-        SqlBasicCall actual = (SqlBasicCall) 
NotExpressionConverter.convert(new NotExpression(0, 0, expression, 
false)).orElse(null);
-        assertNotNull(actual);
+        SqlBasicCall actual = NotExpressionConverter.convert(new 
NotExpression(0, 0, expression, false));
         assertThat(actual.getOperator(), is(SQLExtensionOperatorTable.NOT));
     }
 }
diff --git 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/ParameterMarkerExpressionConverterTest.java
 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/ParameterMarkerExpressionConverterTest.java
index 28932e7aa29..c1885ba40c3 100644
--- 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/ParameterMarkerExpressionConverterTest.java
+++ 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/ParameterMarkerExpressionConverterTest.java
@@ -18,21 +18,17 @@
 package 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.expression.impl;
 
 import org.apache.calcite.sql.SqlDynamicParam;
-import org.apache.calcite.sql.SqlNode;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.simple.ParameterMarkerExpressionSegment;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 class ParameterMarkerExpressionConverterTest {
     
     @Test
     void assertConvertParameterMarker() {
-        SqlNode actual = ParameterMarkerExpressionConverter.convert(new 
ParameterMarkerExpressionSegment(0, 0, 5)).orElse(null);
-        assertNotNull(actual);
-        SqlDynamicParam param = (SqlDynamicParam) actual;
-        assertThat(param.getIndex(), is(5));
+        SqlDynamicParam actual = 
ParameterMarkerExpressionConverter.convert(new 
ParameterMarkerExpressionSegment(0, 0, 5));
+        assertThat(actual.getIndex(), is(5));
     }
 }
diff --git 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/QuantifySubqueryExpressionConverterTest.java
 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/QuantifySubqueryExpressionConverterTest.java
index 1c1adbfdce2..f59f5fd24e4 100644
--- 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/QuantifySubqueryExpressionConverterTest.java
+++ 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/QuantifySubqueryExpressionConverterTest.java
@@ -17,7 +17,6 @@
 
 package 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.expression.impl;
 
-import org.apache.calcite.sql.SqlNode;
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.QuantifySubqueryExpression;
@@ -27,18 +26,12 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.Proj
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.SelectStatement;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 class QuantifySubqueryExpressionConverterTest {
     
     private final DatabaseType databaseType = 
TypedSPILoader.getService(DatabaseType.class, "FIXTURE");
     
-    @Test
-    void assertConvertReturnsEmptyWhenExpressionIsNull() {
-        
assertFalse(QuantifySubqueryExpressionConverter.convert(null).isPresent());
-    }
-    
     @Test
     void assertConvertQuantifySubqueryExpression() {
         SelectStatement selectStatement = new SelectStatement(databaseType);
@@ -47,7 +40,6 @@ class QuantifySubqueryExpressionConverterTest {
         selectStatement.setProjections(projections);
         SubquerySegment subquerySegment = new SubquerySegment(0, 0, 
selectStatement, "sub");
         QuantifySubqueryExpression expression = new 
QuantifySubqueryExpression(0, 0, subquerySegment, "ALL");
-        SqlNode actual = 
QuantifySubqueryExpressionConverter.convert(expression).orElse(null);
-        assertNotNull(actual);
+        assertNotNull(QuantifySubqueryExpressionConverter.convert(expression));
     }
 }
diff --git 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/RowExpressionConverterTest.java
 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/RowExpressionConverterTest.java
index 42bdb33ec65..372870f1413 100644
--- 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/RowExpressionConverterTest.java
+++ 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/RowExpressionConverterTest.java
@@ -35,7 +35,6 @@ import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.mockito.Mockito.when;
 
 @ExtendWith(AutoMockExtension.class)
@@ -53,8 +52,7 @@ class RowExpressionConverterTest {
         SqlNode secondNode = SqlLiteral.createExactNumeric("2", 
SqlParserPos.ZERO);
         
when(ExpressionConverter.convert(first)).thenReturn(Optional.of(firstNode));
         
when(ExpressionConverter.convert(second)).thenReturn(Optional.of(secondNode));
-        SqlBasicCall actual = (SqlBasicCall) 
RowExpressionConverter.convert(expression).orElse(null);
-        assertNotNull(actual);
+        SqlBasicCall actual = (SqlBasicCall) 
RowExpressionConverter.convert(expression);
         assertThat(actual.getOperator(), is(SqlStdOperatorTable.ROW));
         assertThat(actual.getOperandList(), is(Arrays.asList(firstNode, 
secondNode)));
     }
diff --git 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/SubqueryExpressionConverterTest.java
 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/SubqueryExpressionConverterTest.java
index 5199874a879..8f83c83c077 100644
--- 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/SubqueryExpressionConverterTest.java
+++ 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/SubqueryExpressionConverterTest.java
@@ -17,7 +17,6 @@
 
 package 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.expression.impl;
 
-import org.apache.calcite.sql.SqlNode;
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.simple.ParameterMarkerExpressionSegment;
@@ -27,18 +26,12 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.Proj
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.SelectStatement;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 class SubqueryExpressionConverterTest {
     
     private final DatabaseType databaseType = 
TypedSPILoader.getService(DatabaseType.class, "FIXTURE");
     
-    @Test
-    void assertConvertReturnsEmptyWhenExpressionIsNull() {
-        assertFalse(SubqueryExpressionConverter.convert(null).isPresent());
-    }
-    
     @Test
     void assertConvertSubqueryExpression() {
         SelectStatement selectStatement = new SelectStatement(databaseType);
@@ -46,7 +39,6 @@ class SubqueryExpressionConverterTest {
         projections.getProjections().add(new 
ParameterMarkerExpressionSegment(0, 0, 0));
         selectStatement.setProjections(projections);
         SubquerySegment subquerySegment = new SubquerySegment(0, 0, 
selectStatement, "sub");
-        SqlNode actual = SubqueryExpressionConverter.convert(new 
SubqueryExpressionSegment(subquerySegment)).orElse(null);
-        assertNotNull(actual);
+        assertNotNull(SubqueryExpressionConverter.convert(new 
SubqueryExpressionSegment(subquerySegment)));
     }
 }
diff --git 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/TrimFunctionConverterTest.java
 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/TrimFunctionConverterTest.java
index d39890de717..ba90e76b969 100644
--- 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/TrimFunctionConverterTest.java
+++ 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/TrimFunctionConverterTest.java
@@ -33,7 +33,6 @@ import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -48,8 +47,7 @@ class TrimFunctionConverterTest {
         segment.getParameters().add(parameter);
         SqlNode paramNode = mock(SqlNode.class);
         
when(ExpressionConverter.convert(parameter)).thenReturn(Optional.of(paramNode));
-        SqlBasicCall actual = (SqlBasicCall) 
TrimFunctionConverter.convert(segment).orElse(null);
-        assertNotNull(actual);
+        SqlBasicCall actual = TrimFunctionConverter.convert(segment);
         SqlLiteral trimFlag = (SqlLiteral) actual.getOperandList().get(0);
         assertThat(trimFlag.getValueAs(Flag.class), is(Flag.BOTH));
         SqlLiteral padding = (SqlLiteral) actual.getOperandList().get(1);
@@ -68,8 +66,7 @@ class TrimFunctionConverterTest {
         SqlNode secondNode = mock(SqlNode.class);
         
when(ExpressionConverter.convert(first)).thenReturn(Optional.of(firstNode));
         
when(ExpressionConverter.convert(second)).thenReturn(Optional.of(secondNode));
-        SqlBasicCall actual = (SqlBasicCall) 
TrimFunctionConverter.convert(segment).orElse(null);
-        assertNotNull(actual);
+        SqlBasicCall actual = TrimFunctionConverter.convert(segment);
         SqlLiteral trimFlag = (SqlLiteral) actual.getOperandList().get(0);
         assertThat(trimFlag.getValueAs(Flag.class), is(Flag.BOTH));
         assertThat(actual.getOperandList().get(1), is(firstNode));
diff --git 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/UnaryOperationExpressionConverterTest.java
 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/UnaryOperationExpressionConverterTest.java
index b957ba7f986..daeabf2a42c 100644
--- 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/UnaryOperationExpressionConverterTest.java
+++ 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/UnaryOperationExpressionConverterTest.java
@@ -32,7 +32,6 @@ import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -46,8 +45,7 @@ class UnaryOperationExpressionConverterTest {
         SqlNode expressionNode = mock(SqlNode.class);
         
when(ExpressionConverter.convert(expression)).thenReturn(Optional.of(expressionNode));
         UnaryOperationExpression unaryOperationExpression = new 
UnaryOperationExpression(0, 0, expression, "~", "~1");
-        SqlBasicCall actual = (SqlBasicCall) 
UnaryOperationExpressionConverter.convert(unaryOperationExpression).orElse(null);
-        assertNotNull(actual);
+        SqlBasicCall actual = 
UnaryOperationExpressionConverter.convert(unaryOperationExpression);
         assertThat(actual.getOperator(), is(SQLExtensionOperatorTable.TILDE));
         assertThat(actual.getOperandList().get(0), is(expressionNode));
     }
diff --git 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/VariableSegmentConverterTest.java
 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/VariableSegmentConverterTest.java
index 3effa280804..322a976277c 100644
--- 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/VariableSegmentConverterTest.java
+++ 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/VariableSegmentConverterTest.java
@@ -17,23 +17,17 @@
 
 package 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.expression.impl;
 
-import org.apache.calcite.sql.SqlIdentifier;
-import org.apache.calcite.sql.SqlNode;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.VariableSegment;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 class VariableSegmentConverterTest {
     
     @Test
     void assertConvertVariableSegment() {
         VariableSegment variableSegment = new VariableSegment(0, 0, 
"@@session.tx");
-        SqlNode actual = 
VariableSegmentConverter.convert(variableSegment).orElse(null);
-        assertNotNull(actual);
-        SqlIdentifier identifier = (SqlIdentifier) actual;
-        assertThat(identifier.getSimple(), is("@@session.tx"));
+        
assertThat(VariableSegmentConverter.convert(variableSegment).getSimple(), 
is("@@session.tx"));
     }
 }
diff --git 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/WindowFunctionConverterTest.java
 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/WindowFunctionConverterTest.java
index 3b77aa6d921..b76baacac58 100644
--- 
a/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/WindowFunctionConverterTest.java
+++ 
b/kernel/sql-federation/compiler/src/test/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/WindowFunctionConverterTest.java
@@ -34,7 +34,6 @@ 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;
@@ -50,8 +49,7 @@ class WindowFunctionConverterTest {
         segment.getParameters().add(parameter);
         SqlNode paramNode = mock(SqlNode.class);
         
when(ExpressionConverter.convert(parameter)).thenReturn(Optional.of(paramNode));
-        SqlBasicCall actual = (SqlBasicCall) 
WindowFunctionConverter.convert(segment).orElse(null);
-        assertNotNull(actual);
+        SqlBasicCall actual = WindowFunctionConverter.convert(segment);
         assertThat(actual.getOperator(), is(SqlStdOperatorTable.OVER));
         assertThat(actual.getOperandList().get(0), is(paramNode));
         assertThat(actual.getOperandList().get(1), 
instanceOf(SqlWindow.class));
@@ -63,8 +61,7 @@ class WindowFunctionConverterTest {
         LiteralExpressionSegment parameter = new LiteralExpressionSegment(0, 
0, "value");
         segment.getParameters().add(parameter);
         
when(ExpressionConverter.convert(parameter)).thenReturn(Optional.empty());
-        SqlBasicCall actual = (SqlBasicCall) 
WindowFunctionConverter.convert(segment).orElse(null);
-        assertNotNull(actual);
+        SqlBasicCall actual = WindowFunctionConverter.convert(segment);
         assertTrue(actual.getOperandList().isEmpty());
     }
 }
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 a9584c9303b..146a19db08f 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
@@ -17,6 +17,7 @@
 
 package 
org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.projection;
 
+import org.apache.calcite.sql.SqlDynamicParam;
 import org.apache.calcite.sql.SqlNode;
 import org.apache.calcite.sql.SqlNodeList;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.simple.ParameterMarkerExpressionSegment;
@@ -77,9 +78,9 @@ class ProjectionsConverterTest {
         AggregationProjectionSegment aggregationProjectionSegment = 
mock(AggregationProjectionSegment.class);
         
when(AggregationProjectionConverter.convert(aggregationProjectionSegment)).thenReturn(Optional.of(expectedAggregationNode));
         projectionsSegment.getProjections().add(aggregationProjectionSegment);
-        SqlNode expectedParameterNode = mock(SqlNode.class);
+        SqlDynamicParam expectedParameterNode = mock(SqlDynamicParam.class);
         ParameterMarkerExpressionSegment parameterMarkerExpressionSegment = 
new ParameterMarkerExpressionSegment(0, 0, 0);
-        
when(ParameterMarkerExpressionConverter.convert(parameterMarkerExpressionSegment)).thenReturn(Optional.of(expectedParameterNode));
+        
when(ParameterMarkerExpressionConverter.convert(parameterMarkerExpressionSegment)).thenReturn(expectedParameterNode);
         
projectionsSegment.getProjections().add(parameterMarkerExpressionSegment);
         SqlNodeList actual = 
ProjectionsConverter.convert(projectionsSegment).orElse(null);
         assertNotNull(actual);

Reply via email to