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 <[email protected]>
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;
- }
}