Skip to content

Commit 3819ea6

Browse files
authored
Refactor ColumnConverter (#37364)
1 parent 8274dff commit 3819ea6

18 files changed

Lines changed: 59 additions & 117 deletions

File tree

kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/ExpressionConverter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public static Optional<SqlNode> convert(final ExpressionSegment segment) {
103103
return Optional.of(BinaryOperationExpressionConverter.convert((BinaryOperationExpression) segment));
104104
}
105105
if (segment instanceof ColumnSegment) {
106-
return ColumnConverter.convert((ColumnSegment) segment);
106+
return Optional.of(ColumnConverter.convert((ColumnSegment) segment));
107107
}
108108
if (segment instanceof ExistsSubqueryExpression) {
109109
return ExistsSubqueryExpressionConverter.convert((ExistsSubqueryExpression) segment);

kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/expression/impl/ColumnConverter.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,12 @@
2020
import lombok.AccessLevel;
2121
import lombok.NoArgsConstructor;
2222
import org.apache.calcite.sql.SqlIdentifier;
23-
import org.apache.calcite.sql.SqlNode;
2423
import org.apache.calcite.sql.parser.SqlParserPos;
2524
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
2625
import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.OwnerSegment;
2726

2827
import java.util.ArrayList;
2928
import java.util.List;
30-
import java.util.Optional;
3129

3230
/**
3331
* Column converter.
@@ -41,11 +39,11 @@ public final class ColumnConverter {
4139
* @param segment column segment
4240
* @return SQL node
4341
*/
44-
public static Optional<SqlNode> convert(final ColumnSegment segment) {
42+
public static SqlIdentifier convert(final ColumnSegment segment) {
4543
List<String> names = new ArrayList<>();
4644
segment.getOwner().ifPresent(optional -> addOwnerNames(names, optional));
4745
names.add(segment.getIdentifier().getValue());
48-
return Optional.of(new SqlIdentifier(names, SqlParserPos.ZERO));
46+
return new SqlIdentifier(names, SqlParserPos.ZERO);
4947
}
5048

5149
private static void addOwnerNames(final List<String> names, final OwnerSegment owner) {

kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/from/impl/JoinTableConverter.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,14 @@
2626
import org.apache.calcite.sql.SqlNode;
2727
import org.apache.calcite.sql.SqlNodeList;
2828
import org.apache.calcite.sql.parser.SqlParserPos;
29-
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
3029
import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.JoinTableSegment;
31-
import org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.expression.impl.ColumnConverter;
3230
import org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.expression.ExpressionConverter;
31+
import org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.expression.impl.ColumnConverter;
3332
import org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.from.TableConverter;
3433

3534
import java.util.Collection;
36-
import java.util.LinkedList;
3735
import java.util.Optional;
36+
import java.util.stream.Collectors;
3837

3938
/**
4039
* Join converter.
@@ -78,10 +77,7 @@ private static Optional<SqlNode> convertJoinCondition(final JoinTableSegment seg
7877
if (segment.getUsing().isEmpty()) {
7978
return Optional.empty();
8079
}
81-
Collection<SqlNode> sqlNodes = new LinkedList<>();
82-
for (ColumnSegment each : segment.getUsing()) {
83-
ColumnConverter.convert(each).ifPresent(sqlNodes::add);
84-
}
80+
Collection<SqlNode> sqlNodes = segment.getUsing().stream().map(ColumnConverter::convert).collect(Collectors.toList());
8581
return Optional.of(new SqlNodeList(sqlNodes, SqlParserPos.ZERO));
8682
}
8783
}

kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/orderby/item/ColumnOrderByItemConverter.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.expression.impl.ColumnConverter;
3131

3232
import java.util.Collections;
33-
import java.util.Optional;
3433

3534
/**
3635
* Column of order by item converter.
@@ -44,17 +43,14 @@ public final class ColumnOrderByItemConverter {
4443
* @param segment column order by item segment
4544
* @return SQL node
4645
*/
47-
public static Optional<SqlNode> convert(final ColumnOrderByItemSegment segment) {
48-
Optional<SqlNode> result = ColumnConverter.convert(segment.getColumn());
49-
if (!result.isPresent()) {
50-
return Optional.empty();
51-
}
46+
public static SqlNode convert(final ColumnOrderByItemSegment segment) {
47+
SqlNode result = ColumnConverter.convert(segment.getColumn());
5248
if (OrderDirection.DESC == segment.getOrderDirection()) {
53-
result = Optional.of(new SqlBasicCall(SqlStdOperatorTable.DESC, Collections.singletonList(result.get()), SqlParserPos.ZERO));
49+
result = new SqlBasicCall(SqlStdOperatorTable.DESC, Collections.singletonList(result), SqlParserPos.ZERO);
5450
}
5551
if (segment.getNullsOrderType().isPresent()) {
5652
SqlPostfixOperator nullsOrderType = NullsOrderType.FIRST == segment.getNullsOrderType().get() ? SqlStdOperatorTable.NULLS_FIRST : SqlStdOperatorTable.NULLS_LAST;
57-
result = Optional.of(new SqlBasicCall(nullsOrderType, Collections.singletonList(result.get()), SqlParserPos.ZERO));
53+
result = new SqlBasicCall(nullsOrderType, Collections.singletonList(result), SqlParserPos.ZERO);
5854
}
5955
return result;
6056
}

kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/orderby/item/OrderByItemConverterUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public static Collection<SqlNode> convert(final Collection<OrderByItemSegment> o
4747
Collection<SqlNode> result = new LinkedList<>();
4848
for (OrderByItemSegment each : orderByItems) {
4949
if (each instanceof ColumnOrderByItemSegment) {
50-
ColumnOrderByItemConverter.convert((ColumnOrderByItemSegment) each).ifPresent(result::add);
50+
result.add(ColumnOrderByItemConverter.convert((ColumnOrderByItemSegment) each));
5151
} else if (each instanceof ExpressionOrderByItemSegment) {
5252
ExpressionOrderByItemConverter.convert((ExpressionOrderByItemSegment) each).ifPresent(result::add);
5353
} else if (each instanceof IndexOrderByItemSegment) {

kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/projection/ProjectionsConverter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public static Optional<SqlNodeList> convert(final ProjectionsSegment segment) {
6363

6464
private static Optional<SqlNode> getProjectionSQLNode(final ProjectionSegment segment) {
6565
if (segment instanceof ColumnProjectionSegment) {
66-
return ColumnProjectionConverter.convert((ColumnProjectionSegment) segment);
66+
return Optional.of(ColumnProjectionConverter.convert((ColumnProjectionSegment) segment));
6767
}
6868
if (segment instanceof ExpressionProjectionSegment) {
6969
return ExpressionProjectionConverter.convert((ExpressionProjectionSegment) segment);

kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/projection/impl/ColumnProjectionConverter.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.expression.impl.ColumnConverter;
2929

3030
import java.util.Arrays;
31-
import java.util.Optional;
3231

3332
/**
3433
* Column projection converter.
@@ -42,11 +41,11 @@ public final class ColumnProjectionConverter {
4241
* @param segment column projection segment
4342
* @return SQL node
4443
*/
45-
public static Optional<SqlNode> convert(final ColumnProjectionSegment segment) {
44+
public static SqlNode convert(final ColumnProjectionSegment segment) {
4645
if (segment.getAliasName().isPresent()) {
47-
Optional<SqlNode> column = ColumnConverter.convert(segment.getColumn());
46+
SqlNode column = ColumnConverter.convert(segment.getColumn());
4847
SqlIdentifier alias = new SqlIdentifier(segment.getAliasName().get(), SqlParserPos.ZERO);
49-
return column.map(optional -> new SqlBasicCall(new SqlAsOperator(), Arrays.asList(optional, alias), SqlParserPos.ZERO));
48+
return new SqlBasicCall(new SqlAsOperator(), Arrays.asList(column, alias), SqlParserPos.ZERO);
5049
}
5150
return ColumnConverter.convert(segment.getColumn());
5251
}

kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/segment/with/WithConverter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,6 @@ private static SqlNodeList convertWithItem(final Collection<CommonTableExpressio
6363
}
6464

6565
private static SqlNodeList convertColumns(final Collection<ColumnSegment> columnSegments) {
66-
return new SqlNodeList(columnSegments.stream().map(each -> ColumnConverter.convert(each).orElseThrow(IllegalStateException::new)).collect(Collectors.toList()), SqlParserPos.ZERO);
66+
return new SqlNodeList(columnSegments.stream().map(ColumnConverter::convert).collect(Collectors.toList()), SqlParserPos.ZERO);
6767
}
6868
}

kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/InsertStatementConverter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ private SqlNodeList convertColumn(final InsertStatement insertStatement) {
9292
List<SqlNode> columns = new ArrayList<>();
9393
insertStatement.getSetAssignment().ifPresent(optional -> columns.addAll(convertSetAssignmentColumns(optional)));
9494
for (ColumnSegment each : insertStatement.getColumns()) {
95-
columns.add(ColumnConverter.convert(each).orElseThrow(IllegalStateException::new));
95+
columns.add(ColumnConverter.convert(each));
9696
}
9797
return columns.isEmpty() ? null : new SqlNodeList(columns, SqlParserPos.ZERO);
9898
}
@@ -101,7 +101,7 @@ private Collection<SqlNode> convertSetAssignmentColumns(final SetAssignmentSegme
101101
List<SqlNode> result = new ArrayList<>();
102102
for (ColumnAssignmentSegment each : setAssignment.getAssignments()) {
103103
for (ColumnSegment column : each.getColumns()) {
104-
result.add(ColumnConverter.convert(column).orElseThrow(IllegalStateException::new));
104+
result.add(ColumnConverter.convert(column));
105105
}
106106
}
107107
return result;

kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/sql/ast/converter/statement/type/MergeStatementConverter.java

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,14 @@
2323
import org.apache.calcite.sql.SqlUpdate;
2424
import org.apache.calcite.sql.parser.SqlParserPos;
2525
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.assignment.ColumnAssignmentSegment;
26-
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
27-
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
2826
import org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.MergeStatement;
2927
import org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.UpdateStatement;
30-
import org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.expression.impl.ColumnConverter;
3128
import org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.expression.ExpressionConverter;
29+
import org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.expression.impl.ColumnConverter;
3230
import org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.from.TableConverter;
3331
import org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.segment.where.WhereConverter;
3432
import org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.statement.SQLStatementConverter;
3533

36-
import java.util.List;
3734
import java.util.stream.Collectors;
3835

3936
/**
@@ -56,17 +53,9 @@ private SqlUpdate convertUpdate(final UpdateStatement updateStatement) {
5653
SqlNodeList columns = new SqlNodeList(SqlParserPos.ZERO);
5754
SqlNodeList expressions = new SqlNodeList(SqlParserPos.ZERO);
5855
for (ColumnAssignmentSegment each : updateStatement.getAssignment().orElseThrow(IllegalStateException::new).getAssignments()) {
59-
columns.addAll(convertColumn(each.getColumns()));
60-
expressions.add(convertExpression(each.getValue()));
56+
columns.addAll(each.getColumns().stream().map(ColumnConverter::convert).collect(Collectors.toList()));
57+
expressions.add(ExpressionConverter.convert(each.getValue()).orElseThrow(IllegalStateException::new));
6158
}
6259
return new SqlUpdate(SqlParserPos.ZERO, table, columns, expressions, condition, null, null);
6360
}
64-
65-
private List<SqlNode> convertColumn(final List<ColumnSegment> columnSegments) {
66-
return columnSegments.stream().map(each -> ColumnConverter.convert(each).orElseThrow(IllegalStateException::new)).collect(Collectors.toList());
67-
}
68-
69-
private SqlNode convertExpression(final ExpressionSegment expressionSegment) {
70-
return ExpressionConverter.convert(expressionSegment).orElseThrow(IllegalStateException::new);
71-
}
7261
}

0 commit comments

Comments
 (0)