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