Skip to content

Commit 5abf32c

Browse files
authored
Refactor ExistsSubqueryExpressionConverter (#37366)
1 parent b4eaf5f commit 5abf32c

4 files changed

Lines changed: 8 additions & 21 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
@@ -106,7 +106,7 @@ public static Optional<SqlNode> convert(final ExpressionSegment segment) {
106106
return Optional.of(ColumnConverter.convert((ColumnSegment) segment));
107107
}
108108
if (segment instanceof ExistsSubqueryExpression) {
109-
return ExistsSubqueryExpressionConverter.convert((ExistsSubqueryExpression) segment);
109+
return Optional.of(ExistsSubqueryExpressionConverter.convert((ExistsSubqueryExpression) segment));
110110
}
111111
if (segment instanceof SubqueryExpressionSegment) {
112112
return SubqueryExpressionConverter.convert((SubqueryExpressionSegment) segment);

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

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import org.apache.shardingsphere.sqlfederation.compiler.sql.ast.converter.statement.type.SelectStatementConverter;
2828

2929
import java.util.Collections;
30-
import java.util.Optional;
3130

3231
/**
3332
* Exists subquery expression converter.
@@ -41,12 +40,9 @@ public final class ExistsSubqueryExpressionConverter {
4140
* @param expression exists subquery expression
4241
* @return SQL node
4342
*/
44-
public static Optional<SqlNode> convert(final ExistsSubqueryExpression expression) {
45-
if (null == expression) {
46-
return Optional.empty();
47-
}
48-
SqlBasicCall sqlNode = new SqlBasicCall(SqlStdOperatorTable.EXISTS,
49-
Collections.singletonList(new SelectStatementConverter().convert(expression.getSubquery().getSelect())), SqlParserPos.ZERO);
50-
return expression.isNot() ? Optional.of(new SqlBasicCall(SqlStdOperatorTable.NOT, Collections.singletonList(sqlNode), SqlParserPos.ZERO)) : Optional.of(sqlNode);
43+
public static SqlNode convert(final ExistsSubqueryExpression expression) {
44+
SqlBasicCall sqlNode = new SqlBasicCall(
45+
SqlStdOperatorTable.EXISTS, Collections.singletonList(new SelectStatementConverter().convert(expression.getSubquery().getSelect())), SqlParserPos.ZERO);
46+
return expression.isNot() ? new SqlBasicCall(SqlStdOperatorTable.NOT, Collections.singletonList(sqlNode), SqlParserPos.ZERO) : sqlNode;
5147
}
5248
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ void assertConvertDelegatesToAllSupportedConverters() {
126126
SqlNode expectedExistsSubqueryNode = mock(SqlNode.class);
127127
SubquerySegment subquerySegment = new SubquerySegment(0, 0, new SelectStatement(databaseType), "sub");
128128
ExistsSubqueryExpression existsSubqueryExpression = new ExistsSubqueryExpression(0, 0, subquerySegment);
129-
when(ExistsSubqueryExpressionConverter.convert(existsSubqueryExpression)).thenReturn(Optional.of(expectedExistsSubqueryNode));
129+
when(ExistsSubqueryExpressionConverter.convert(existsSubqueryExpression)).thenReturn(expectedExistsSubqueryNode);
130130
SqlNode expectedSubqueryNode = mock(SqlNode.class);
131131
SubqueryExpressionSegment subqueryExpressionSegment = new SubqueryExpressionSegment(subquerySegment);
132132
when(SubqueryExpressionConverter.convert(subqueryExpressionSegment)).thenReturn(Optional.of(expectedSubqueryNode));

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

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@
3333

3434
import static org.hamcrest.CoreMatchers.is;
3535
import static org.hamcrest.MatcherAssert.assertThat;
36-
import static org.junit.jupiter.api.Assertions.assertFalse;
37-
import static org.junit.jupiter.api.Assertions.assertNotNull;
3836
import static org.mockito.ArgumentMatchers.any;
3937
import static org.mockito.Mockito.mock;
4038
import static org.mockito.Mockito.mockConstruction;
@@ -44,20 +42,14 @@ class ExistsSubqueryExpressionConverterTest {
4442

4543
private final DatabaseType databaseType = TypedSPILoader.getService(DatabaseType.class, "FIXTURE");
4644

47-
@Test
48-
void assertConvertReturnsEmptyForNullExpression() {
49-
assertFalse(ExistsSubqueryExpressionConverter.convert(null).isPresent());
50-
}
51-
5245
@Test
5346
void assertConvertExistsExpression() {
5447
SqlNode expected = mock(SqlNode.class);
5548
try (
5649
MockedConstruction<SelectStatementConverter> ignored = mockConstruction(SelectStatementConverter.class,
5750
(mock, context) -> when(mock.convert(any(SelectStatement.class))).thenReturn(expected))) {
5851
ExistsSubqueryExpression expression = new ExistsSubqueryExpression(0, 0, new SubquerySegment(0, 0, new SelectStatement(databaseType), "text"));
59-
SqlBasicCall actual = (SqlBasicCall) ExistsSubqueryExpressionConverter.convert(expression).orElse(null);
60-
assertNotNull(actual);
52+
SqlBasicCall actual = (SqlBasicCall) ExistsSubqueryExpressionConverter.convert(expression);
6153
assertThat(actual.getOperator(), is(SqlStdOperatorTable.EXISTS));
6254
assertThat(actual.getOperandList(), is(Collections.singletonList(expected)));
6355
}
@@ -71,8 +63,7 @@ void assertConvertNotExistsExpression() {
7163
(mock, context) -> when(mock.convert(any(SelectStatement.class))).thenReturn(expected))) {
7264
ExistsSubqueryExpression expression = new ExistsSubqueryExpression(0, 0, new SubquerySegment(0, 0, new SelectStatement(databaseType), "text"));
7365
expression.setNot(true);
74-
SqlBasicCall actual = (SqlBasicCall) ExistsSubqueryExpressionConverter.convert(expression).orElse(null);
75-
assertNotNull(actual);
66+
SqlBasicCall actual = (SqlBasicCall) ExistsSubqueryExpressionConverter.convert(expression);
7667
assertThat(actual.getOperator(), is(SqlStdOperatorTable.NOT));
7768
SqlBasicCall existsCall = (SqlBasicCall) actual.getOperandList().get(0);
7869
assertThat(existsCall.getOperator(), is(SqlStdOperatorTable.EXISTS));

0 commit comments

Comments
 (0)