You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2020/07/15 03:05:00 UTC
[shardingsphere] branch master updated: make subquery in
SubqueryRouteTest work well (#6340)
This is an automated email from the ASF dual-hosted git repository.
panjuan 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 3dd5005 make subquery in SubqueryRouteTest work well (#6340)
3dd5005 is described below
commit 3dd50053215e523225efe10f67d1f36b1a01bc0e
Author: DuanZhengqiang <st...@gmail.com>
AuthorDate: Tue Jul 14 22:04:39 2020 -0500
make subquery in SubqueryRouteTest work well (#6340)
* make subquery in SubqueryRouteTest work well
* move getSubqueryWhereSegments function to SelectStatementContext
* modify ArrayList to LinkedList
---
.../engine/WhereClauseShardingConditionEngine.java | 7 +-
.../engine/type/standard/AbstractSQLRouteTest.java | 7 +-
.../engine/type/standard/SubqueryRouteTest.java | 17 ---
.../statement/dml/SelectStatementContext.java | 121 ++++++++++++++++++++-
.../parser/sql/statement/dml/SelectStatement.java | 23 +---
5 files changed, 128 insertions(+), 47 deletions(-)
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngine.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngine.java
index 612667a..7e311eb 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngine.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngine.java
@@ -31,11 +31,11 @@ import org.apache.shardingsphere.sharding.strategy.value.RangeRouteValue;
import org.apache.shardingsphere.sharding.strategy.value.RouteValue;
import org.apache.shardingsphere.sql.parser.binder.metadata.schema.SchemaMetaData;
import org.apache.shardingsphere.sql.parser.binder.statement.SQLStatementContext;
+import org.apache.shardingsphere.sql.parser.binder.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.sql.parser.binder.type.WhereAvailable;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.AndPredicate;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.PredicateSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.WhereSegment;
-import org.apache.shardingsphere.sql.parser.sql.statement.SQLStatement;
import org.apache.shardingsphere.sql.parser.sql.statement.dml.SelectStatement;
import org.apache.shardingsphere.sql.parser.sql.util.SafeRangeOperationUtils;
@@ -75,9 +75,8 @@ public final class WhereClauseShardingConditionEngine {
if (whereSegment.isPresent()) {
result.addAll(createShardingConditions(sqlStatementContext, whereSegment.get().getAndPredicates(), parameters));
}
- SQLStatement sqlStatement = sqlStatementContext.getSqlStatement();
- Collection<WhereSegment> subqueryWhereSegments = sqlStatement instanceof SelectStatement
- ? ((SelectStatement) sqlStatement).getSubqueryWhereSegments() : Collections.emptyList();
+ Collection<WhereSegment> subqueryWhereSegments = sqlStatementContext instanceof SelectStatementContext
+ ? ((SelectStatementContext) sqlStatementContext).getSubqueryWhereSegments((SelectStatement) sqlStatementContext.getSqlStatement()) : Collections.emptyList();
for (WhereSegment each : subqueryWhereSegments) {
Collection<ShardingCondition> subqueryShardingConditions = createShardingConditions(sqlStatementContext, each.getAndPredicates(), parameters);
if (!result.containsAll(subqueryShardingConditions)) {
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/AbstractSQLRouteTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/AbstractSQLRouteTest.java
index f5e1e40..18130c3 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/AbstractSQLRouteTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/AbstractSQLRouteTest.java
@@ -81,7 +81,10 @@ public abstract class AbstractSQLRouteTest extends AbstractRoutingEngineTest {
new ColumnMetaData("status", Types.VARCHAR, "varchar", false, false, false),
new ColumnMetaData("c_date", Types.TIMESTAMP, "timestamp", false, false, false)), Collections.emptySet()));
tableMetaDataMap.put("t_other", new TableMetaData(Collections.singletonList(new ColumnMetaData("order_id", Types.INTEGER, "int", true, false, false)), Collections.emptySet()));
- tableMetaDataMap.put("t_category", new TableMetaData(Collections.singletonList(new ColumnMetaData("order_id", Types.INTEGER, "int", true, false, false)), Collections.emptySet()));
- return new RuleSchemaMetaData(new SchemaMetaData(tableMetaDataMap), Collections.emptyMap());
+ Map<String, TableMetaData> unconfiguredTableMetaDataMap = new HashMap<>(1, 1);
+ unconfiguredTableMetaDataMap.put("t_category", new TableMetaData(Collections.singletonList(new ColumnMetaData("order_id", Types.INTEGER, "int", true, false, false)), Collections.emptySet()));
+ Map<String, SchemaMetaData> unconfiguredSchemaMetaDataMap = new HashMap<>(1, 1);
+ unconfiguredSchemaMetaDataMap.put("ds_0", new SchemaMetaData(unconfiguredTableMetaDataMap));
+ return new RuleSchemaMetaData(new SchemaMetaData(tableMetaDataMap), unconfiguredSchemaMetaDataMap);
}
}
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/SubqueryRouteTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/SubqueryRouteTest.java
index 819e612..d908039 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/SubqueryRouteTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/SubqueryRouteTest.java
@@ -18,16 +18,13 @@
package org.apache.shardingsphere.sharding.route.engine.type.standard;
import org.apache.shardingsphere.infra.hint.HintManager;
-import org.junit.Ignore;
import org.junit.Test;
import java.util.LinkedList;
import java.util.List;
-@Ignore("Can not support subquery at current")
public final class SubqueryRouteTest extends AbstractSQLRouteTest {
- @Ignore("Can not support subquery at current")
@Test(expected = IllegalStateException.class)
public void assertOneTableError() {
String sql = "select (select max(id) from t_order b where b.user_id =? ) from t_order a where user_id = ? ";
@@ -37,7 +34,6 @@ public final class SubqueryRouteTest extends AbstractSQLRouteTest {
assertRoute(sql, parameters);
}
- @Ignore("Can not support subquery at current")
@Test
public void assertOneTable() {
String sql = "select (select max(id) from t_order b where b.user_id = ? and b.user_id = a.user_id) from t_order a where user_id = ? ";
@@ -47,7 +43,6 @@ public final class SubqueryRouteTest extends AbstractSQLRouteTest {
assertRoute(sql, parameters);
}
- @Ignore("Can not support subquery at current")
@Test
public void assertBindingTable() {
String sql = "select (select max(id) from t_order_item b where b.user_id = ?) from t_order a where user_id = ? ";
@@ -57,7 +52,6 @@ public final class SubqueryRouteTest extends AbstractSQLRouteTest {
assertRoute(sql, parameters);
}
- @Ignore("Can not support subquery at current")
@Test
public void assertNotShardingTable() {
String sql = "select (select max(id) from t_category b where b.id = ?) from t_category a where id = ? ";
@@ -67,7 +61,6 @@ public final class SubqueryRouteTest extends AbstractSQLRouteTest {
assertRoute(sql, parameters);
}
- @Ignore("Can not support subquery at current")
@Test(expected = IllegalStateException.class)
public void assertBindingTableWithDifferentValue() {
String sql = "select (select max(id) from t_order_item b where b.user_id = ? ) from t_order a where user_id = ? ";
@@ -77,7 +70,6 @@ public final class SubqueryRouteTest extends AbstractSQLRouteTest {
assertRoute(sql, parameters);
}
- @Ignore("Can not support subquery at current")
@Test(expected = IllegalStateException.class)
public void assertTwoTableWithDifferentOperator() {
List<Object> parameters = new LinkedList<>();
@@ -88,7 +80,6 @@ public final class SubqueryRouteTest extends AbstractSQLRouteTest {
assertRoute(sql, parameters);
}
- @Ignore("Can not support subquery at current")
@Test(expected = IllegalStateException.class)
public void assertTwoTableWithIn() {
List<Object> parameters = new LinkedList<>();
@@ -100,7 +91,6 @@ public final class SubqueryRouteTest extends AbstractSQLRouteTest {
assertRoute(sql, parameters);
}
- @Ignore("Can not support subquery at current")
@Test(expected = IllegalStateException.class)
public void assertSubqueryInSubqueryError() {
List<Object> parameters = new LinkedList<>();
@@ -113,7 +103,6 @@ public final class SubqueryRouteTest extends AbstractSQLRouteTest {
assertRoute(sql, parameters);
}
- @Ignore("Can not support subquery at current")
@Test
public void assertSubqueryInSubquery() {
List<Object> parameters = new LinkedList<>();
@@ -126,7 +115,6 @@ public final class SubqueryRouteTest extends AbstractSQLRouteTest {
assertRoute(sql, parameters);
}
- @Ignore("Can not support subquery at current")
@Test(expected = IllegalStateException.class)
public void assertSubqueryInFromError() {
String sql = "select status from t_order b join (select user_id,status from t_order b where b.user_id =?) c on b.user_id = c.user_id where b.user_id =? ";
@@ -136,7 +124,6 @@ public final class SubqueryRouteTest extends AbstractSQLRouteTest {
assertRoute(sql, parameters);
}
- @Ignore("Can not support subquery at current")
@Test
public void assertSubqueryInFrom() {
String sql = "select status from t_order b join (select user_id,status from t_order b where b.user_id =?) c on b.user_id = c.user_id where b.user_id =? ";
@@ -146,7 +133,6 @@ public final class SubqueryRouteTest extends AbstractSQLRouteTest {
assertRoute(sql, parameters);
}
- @Ignore("Can not support subquery at current")
@Test
public void assertSubqueryForAggregation() {
String sql = "select count(*) from t_order where c.user_id = (select user_id from t_order where user_id =?) ";
@@ -155,7 +141,6 @@ public final class SubqueryRouteTest extends AbstractSQLRouteTest {
assertRoute(sql, parameters);
}
- @Ignore("Can not support subquery at current")
@Test
public void assertSubqueryForBinding() {
String sql = "select count(*) from t_order where user_id = (select user_id from t_order_item where user_id =?) ";
@@ -164,7 +149,6 @@ public final class SubqueryRouteTest extends AbstractSQLRouteTest {
assertRoute(sql, parameters);
}
- @Ignore("Can not support subquery at current")
@Test(expected = IllegalStateException.class)
public void assertSubqueryWithoutHint() {
List<Object> parameters = new LinkedList<>();
@@ -175,7 +159,6 @@ public final class SubqueryRouteTest extends AbstractSQLRouteTest {
assertRoute(sql, parameters);
}
- @Ignore("Can not support subquery at current")
@Test
public void assertSubqueryWithHint() {
HintManager hintManager = HintManager.getInstance();
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-binder/src/main/java/org/apache/shardingsphere/sql/parser/binder/statement/dml/SelectStatementContext.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-binder/src/main/java/org/apache/shardingsphere/sql/parser/binder/statement/dml/SelectStatementContext.java
index 38a59de..469f656 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-binder/src/main/java/org/apache/shardingsphere/sql/parser/binder/statement/dml/SelectStatementContext.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-binder/src/main/java/org/apache/shardingsphere/sql/parser/binder/statement/dml/SelectStatementContext.java
@@ -42,9 +42,12 @@ import org.apache.shardingsphere.sql.parser.sql.segment.dml.JoinedTableSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.TableFactorSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.TableReferenceSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.column.ColumnSegment;
+import org.apache.shardingsphere.sql.parser.sql.segment.dml.expr.ExpressionSegment;
+import org.apache.shardingsphere.sql.parser.sql.segment.dml.expr.subquery.SubqueryExpressionSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.item.ColumnProjectionSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.item.ProjectionSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.item.ProjectionsSegment;
+import org.apache.shardingsphere.sql.parser.sql.segment.dml.item.SubqueryProjectionSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.order.item.ColumnOrderByItemSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.order.item.ExpressionOrderByItemSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.order.item.IndexOrderByItemSegment;
@@ -53,6 +56,9 @@ import org.apache.shardingsphere.sql.parser.sql.segment.dml.order.item.TextOrder
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.AndPredicate;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.PredicateSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.WhereSegment;
+import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateBetweenRightValue;
+import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateCompareRightValue;
+import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.value.PredicateInRightValue;
import org.apache.shardingsphere.sql.parser.sql.segment.generic.OwnerAvailable;
import org.apache.shardingsphere.sql.parser.sql.segment.generic.OwnerSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.generic.table.SimpleTableSegment;
@@ -62,10 +68,12 @@ import org.apache.shardingsphere.sql.parser.sql.statement.dml.SelectStatement;
import org.apache.shardingsphere.sql.parser.sql.util.SQLUtil;
import java.util.Collection;
+import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
+import java.util.stream.Collectors;
/**
* Select SQL statement context.
@@ -109,7 +117,7 @@ public final class SelectStatementContext extends CommonSQLStatementContext<Sele
}
private boolean containsSubquery() {
- Collection<WhereSegment> subqueryPredicateSegments = getSqlStatement().getSubqueryWhereSegments();
+ Collection<WhereSegment> subqueryPredicateSegments = getSubqueryWhereSegments(getSqlStatement());
for (WhereSegment each : subqueryPredicateSegments) {
if (!each.getAndPredicates().isEmpty()) {
return true;
@@ -119,6 +127,115 @@ public final class SelectStatementContext extends CommonSQLStatementContext<Sele
}
/**
+ * Get subquery where segment from SelectStatement.
+ *
+ * @param selectStatement SelectStatement.
+ * @return subquery where segment collection.
+ */
+ public Collection<WhereSegment> getSubqueryWhereSegments(final SelectStatement selectStatement) {
+ Collection<WhereSegment> subqueryWhereSegments = new LinkedList<>();
+ subqueryWhereSegments.addAll(getSubqueryWhereSegmentsFromProjections(selectStatement.getProjections()));
+ subqueryWhereSegments.addAll(getSubqueryWhereSegmentsFromTableReferences(selectStatement.getTableReferences()));
+ subqueryWhereSegments.addAll(getSubqueryWhereSegmentsFromWhere(selectStatement.getWhere().orElse(null)));
+ return subqueryWhereSegments;
+ }
+
+ private Collection<WhereSegment> getSubqueryWhereSegmentsFromProjections(final ProjectionsSegment projections) {
+ if (null == projections || projections.getProjections().isEmpty()) {
+ return Collections.emptyList();
+ }
+ Collection<WhereSegment> subqueryWhereSegments = new LinkedList<>();
+
+ for (ProjectionSegment each : projections.getProjections()) {
+ if (!(each instanceof SubqueryProjectionSegment)) {
+ continue;
+ }
+ SelectStatement subquerySelect = ((SubqueryProjectionSegment) each).getSubquery().getSelect();
+ subquerySelect.getWhere().ifPresent(subqueryWhereSegments::add);
+ subqueryWhereSegments.addAll(getSubqueryWhereSegments(subquerySelect));
+ }
+ return subqueryWhereSegments;
+ }
+
+ private Collection<WhereSegment> getSubqueryWhereSegmentsFromTableReferences(final Collection<TableReferenceSegment> tableReferences) {
+ if (tableReferences.isEmpty()) {
+ return Collections.emptyList();
+ }
+ Collection<WhereSegment> subqueryWhereSegments = new LinkedList<>();
+ for (TableReferenceSegment each : tableReferences) {
+ subqueryWhereSegments.addAll(getSubqueryWhereSegmentsFromTableFactor(each.getTableFactor()));
+ subqueryWhereSegments.addAll(getSubqueryWhereSegmentsFromJoinedTable(each.getJoinedTables()));
+ }
+ return subqueryWhereSegments;
+ }
+
+ private Collection<WhereSegment> getSubqueryWhereSegmentsFromWhere(final WhereSegment where) {
+ if (null == where || where.getAndPredicates().isEmpty()) {
+ return Collections.emptyList();
+ }
+ Collection<WhereSegment> subqueryWhereSegments = new LinkedList<>();
+ List<PredicateSegment> predicateSegments = where.getAndPredicates().stream().flatMap(andPredicate -> andPredicate.getPredicates().stream()).collect(Collectors.toList());
+ for (PredicateSegment each : predicateSegments) {
+ if (each.getRightValue() instanceof PredicateBetweenRightValue) {
+ subqueryWhereSegments.addAll(getSubqueryWhereSegmentsFromExpression(((PredicateBetweenRightValue) each.getRightValue()).getBetweenExpression()));
+ subqueryWhereSegments.addAll(getSubqueryWhereSegmentsFromExpression(((PredicateBetweenRightValue) each.getRightValue()).getAndExpression()));
+ }
+ if (each.getRightValue() instanceof PredicateCompareRightValue) {
+ subqueryWhereSegments.addAll(getSubqueryWhereSegmentsFromExpression(((PredicateCompareRightValue) each.getRightValue()).getExpression()));
+ }
+ if (each.getRightValue() instanceof PredicateInRightValue) {
+ for (ExpressionSegment sqlExpression : ((PredicateInRightValue) each.getRightValue()).getSqlExpressions()) {
+ subqueryWhereSegments.addAll(getSubqueryWhereSegmentsFromExpression(sqlExpression));
+ }
+ }
+ }
+ return subqueryWhereSegments;
+ }
+
+ private Collection<WhereSegment> getSubqueryWhereSegmentsFromTableFactor(final TableFactorSegment tableFactor) {
+ if (null == tableFactor) {
+ return Collections.emptyList();
+ }
+ return getSubqueryWhereSegmentsFromTableSegment(tableFactor.getTable());
+ }
+
+ private Collection<WhereSegment> getSubqueryWhereSegmentsFromJoinedTable(final Collection<JoinedTableSegment> joinedTables) {
+ if (joinedTables.isEmpty()) {
+ return Collections.emptyList();
+ }
+ Collection<WhereSegment> subqueryWhereSegments = new LinkedList<>();
+ for (JoinedTableSegment joinedTable : joinedTables) {
+ if (null == joinedTable.getTableFactor()) {
+ continue;
+ }
+ subqueryWhereSegments.addAll(getSubqueryWhereSegmentsFromTableSegment(joinedTable.getTableFactor().getTable()));
+ }
+ return subqueryWhereSegments;
+ }
+
+ private Collection<WhereSegment> getSubqueryWhereSegmentsFromTableSegment(final TableSegment tableSegment) {
+ if (!(tableSegment instanceof SubqueryTableSegment)) {
+ return Collections.emptyList();
+ }
+ Collection<WhereSegment> subqueryWhereSegments = new LinkedList<>();
+ SelectStatement subquerySelect = ((SubqueryTableSegment) tableSegment).getSubquery().getSelect();
+ subquerySelect.getWhere().ifPresent(subqueryWhereSegments::add);
+ subqueryWhereSegments.addAll(getSubqueryWhereSegments(subquerySelect));
+ return subqueryWhereSegments;
+ }
+
+ private Collection<WhereSegment> getSubqueryWhereSegmentsFromExpression(final ExpressionSegment expressionSegment) {
+ if (!(expressionSegment instanceof SubqueryExpressionSegment)) {
+ return Collections.emptyList();
+ }
+ Collection<WhereSegment> subqueryWhereSegments = new LinkedList<>();
+ SelectStatement subquerySelect = ((SubqueryExpressionSegment) expressionSegment).getSubquery().getSelect();
+ subquerySelect.getWhere().ifPresent(subqueryWhereSegments::add);
+ subqueryWhereSegments.addAll(getSubqueryWhereSegments(subquerySelect));
+ return subqueryWhereSegments;
+ }
+
+ /**
* Set indexes.
*
* @param columnLabelIndexMap map for column label and index
@@ -227,7 +344,7 @@ public final class SelectStatementContext extends CommonSQLStatementContext<Sele
if (each instanceof OwnerAvailable) {
return ((OwnerAvailable) each).getOwner();
}
- if (each instanceof ColumnProjectionSegment) {
+ if (each instanceof ColumnProjectionSegment) {
return ((ColumnProjectionSegment) each).getColumn().getOwner();
}
return Optional.empty();
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/statement/dml/SelectStatement.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/statement/dml/SelectStatement.java
index 02fb102..7771853 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/statement/dml/SelectStatement.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/statement/dml/SelectStatement.java
@@ -26,10 +26,7 @@ import org.apache.shardingsphere.sql.parser.sql.segment.dml.order.OrderBySegment
import org.apache.shardingsphere.sql.parser.sql.segment.dml.pagination.limit.LimitSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.LockSegment;
import org.apache.shardingsphere.sql.parser.sql.segment.dml.predicate.WhereSegment;
-import org.apache.shardingsphere.sql.parser.sql.segment.generic.table.SubqueryTableSegment;
-import org.apache.shardingsphere.sql.parser.sql.segment.generic.table.TableSegment;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.Optional;
@@ -68,7 +65,7 @@ public final class SelectStatement extends DMLStatement {
/**
* Get group by segment.
- *
+ *
* @return group by segment
*/
public Optional<GroupBySegment> getGroupBy() {
@@ -101,22 +98,4 @@ public final class SelectStatement extends DMLStatement {
public Optional<LockSegment> getLock() {
return Optional.ofNullable(lock);
}
-
- /**
- * Get subquery where segment.
- *
- * @return subquery where segment collection.
- */
- public Collection<WhereSegment> getSubqueryWhereSegments() {
- Collection<WhereSegment> subqueryWhereSegments = new ArrayList<>();
- for (TableReferenceSegment each : tableReferences) {
- TableSegment tableSegment = each.getTableFactor().getTable();
- if (!(tableSegment instanceof SubqueryTableSegment)) {
- continue;
- }
- Optional<WhereSegment> whereSegment = ((SubqueryTableSegment) tableSegment).getSubquery().getSelect().getWhere();
- whereSegment.ifPresent(subqueryWhereSegments::add);
- }
- return subqueryWhereSegments;
- }
}