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 2022/12/13 06:50:24 UTC
[shardingsphere] branch master updated: Fix create view index out of range exception when view contains set operator (#22846)
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 0f8e1d8b239 Fix create view index out of range exception when view contains set operator (#22846)
0f8e1d8b239 is described below
commit 0f8e1d8b239191fc91d7612d5fc5003ead5df2aa
Author: Zhengqiang Duan <du...@apache.org>
AuthorDate: Tue Dec 13 14:50:17 2022 +0800
Fix create view index out of range exception when view contains set operator (#22846)
---
.../sql/common/extractor/TableExtractor.java | 2 +-
.../sql/common/extractor/TableExtractorTest.java | 24 ++++++++++++++++++++++
2 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/extractor/TableExtractor.java b/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/extractor/TableExtractor.java
index 3a8f0dbae6e..534b2ee5e92 100644
--- a/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/extractor/TableExtractor.java
+++ b/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/extractor/TableExtractor.java
@@ -74,7 +74,7 @@ public final class TableExtractor {
* @param selectStatement select statement
*/
public void extractTablesFromSelect(final SelectStatement selectStatement) {
- if (null != selectStatement.getFrom()) {
+ if (null != selectStatement.getFrom() && !selectStatement.getCombine().isPresent()) {
extractTablesFromTableSegment(selectStatement.getFrom());
}
if (selectStatement.getWhere().isPresent()) {
diff --git a/sql-parser/statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/common/extractor/TableExtractorTest.java b/sql-parser/statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/common/extractor/TableExtractorTest.java
index febb3d8764f..8af6ba6045d 100644
--- a/sql-parser/statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/common/extractor/TableExtractorTest.java
+++ b/sql-parser/statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/common/extractor/TableExtractorTest.java
@@ -18,15 +18,18 @@
package org.apache.shardingsphere.sql.parser.sql.common.extractor;
import org.apache.shardingsphere.sql.parser.sql.common.enums.AggregationType;
+import org.apache.shardingsphere.sql.parser.sql.common.enums.CombineType;
import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.routine.RoutineBodySegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.routine.ValidStatementSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.OnDuplicateKeyColumnsSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.combine.CombineSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.AggregationProjectionSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionsSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ShorthandProjectionSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.LockSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
@@ -119,4 +122,25 @@ public final class TableExtractorTest {
assertTrue(actualTableName.isPresent());
assertThat(actualTableName.get(), is(expectedTableName));
}
+
+ @Test
+ public void assertExtractTablesFromCombineSegment() {
+ MySQLSelectStatement selectStatement = createSelectStatement("t_order");
+ selectStatement.setCombine(new CombineSegment(0, 0, createSelectStatement("t_order"), CombineType.UNION, createSelectStatement("t_order_item")));
+ tableExtractor.extractTablesFromSelect(selectStatement);
+ Collection<SimpleTableSegment> actual = tableExtractor.getRewriteTables();
+ assertThat(actual.size(), is(2));
+ Iterator<SimpleTableSegment> iterator = actual.iterator();
+ assertTableSegment(iterator.next(), 0, 0, "t_order");
+ assertTableSegment(iterator.next(), 0, 0, "t_order_item");
+ }
+
+ private static MySQLSelectStatement createSelectStatement(final String tableName) {
+ MySQLSelectStatement result = new MySQLSelectStatement();
+ ProjectionsSegment projections = new ProjectionsSegment(0, 0);
+ projections.getProjections().add(new ShorthandProjectionSegment(0, 0));
+ result.setProjections(projections);
+ result.setFrom(new SimpleTableSegment(new TableNameSegment(0, 0, new IdentifierValue(tableName))));
+ return result;
+ }
}