You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2021/10/08 09:40:09 UTC
[shardingsphere] branch master updated: fix show index from db
statement rewrite error (#12942)
This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 03c8e46 fix show index from db statement rewrite error (#12942)
03c8e46 is described below
commit 03c8e46e8980ecbd2c6c9d5b6224378e7c90daa5
Author: Zhengqiang Duan <du...@apache.org>
AuthorDate: Fri Oct 8 17:39:37 2021 +0800
fix show index from db statement rewrite error (#12942)
* fix show index from db statement rewrite error
* update test case
---
.../binder/statement/dal/ShowIndexStatementContext.java | 12 +++++++++++-
.../statement/impl/MySQLDALStatementSQLVisitor.java | 8 ++------
.../statement/mysql/dal/MySQLShowIndexStatement.java | 12 ++++++------
.../statement/dal/impl/ShowIndexStatementAssert.java | 8 ++++----
.../src/main/resources/case/dal/show.xml | 6 +++---
.../src/test/resources/scenario/sharding/case/show.xml | 15 +++++++++++++++
6 files changed, 41 insertions(+), 20 deletions(-)
diff --git a/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dal/ShowIndexStatementContext.java b/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dal/ShowIndexStatementContext.java
index 86e1893..072e08a 100644
--- a/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dal/ShowIndexStatementContext.java
+++ b/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/statement/dal/ShowIndexStatementContext.java
@@ -20,18 +20,21 @@ package org.apache.shardingsphere.infra.binder.statement.dal;
import lombok.Getter;
import org.apache.shardingsphere.infra.binder.segment.table.TablesContext;
import org.apache.shardingsphere.infra.binder.statement.CommonSQLStatementContext;
+import org.apache.shardingsphere.infra.binder.type.RemoveAvailable;
import org.apache.shardingsphere.infra.binder.type.TableAvailable;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.SQLSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowIndexStatement;
import java.util.Collection;
import java.util.Collections;
+import java.util.LinkedList;
/**
* Show index statement context.
*/
@Getter
-public final class ShowIndexStatementContext extends CommonSQLStatementContext<MySQLShowIndexStatement> implements TableAvailable {
+public final class ShowIndexStatementContext extends CommonSQLStatementContext<MySQLShowIndexStatement> implements TableAvailable, RemoveAvailable {
private final TablesContext tablesContext;
@@ -44,4 +47,11 @@ public final class ShowIndexStatementContext extends CommonSQLStatementContext<M
public Collection<SimpleTableSegment> getAllTables() {
return null == getSqlStatement().getTable() ? Collections.emptyList() : Collections.singletonList(getSqlStatement().getTable());
}
+
+ @Override
+ public Collection<SQLSegment> getRemoveSegments() {
+ Collection<SQLSegment> result = new LinkedList<>();
+ getSqlStatement().getFromSchema().ifPresent(result::add);
+ return result;
+ }
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDALStatementSQLVisitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDALStatementSQLVisitor.java
index 5249d6c..005f1be 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDALStatementSQLVisitor.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDALStatementSQLVisitor.java
@@ -39,7 +39,6 @@ import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.OptionV
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.OptionValueNoOptionTypeContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.RepairTableContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ResetStatementContext;
-import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.SchemaNameContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.SetCharacterContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.SetVariableContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowBinaryLogsContext;
@@ -54,6 +53,7 @@ import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowCre
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowCreateProcedureContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowCreateTableContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowCreateTriggerContext;
+import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowCreateUserContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowCreateViewContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowDatabasesContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowEngineContext;
@@ -62,7 +62,6 @@ import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowErr
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowIndexContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowLikeContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowProcesslistContext;
-import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowCreateUserContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowStatusContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowTableStatusContext;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ShowTablesContext;
@@ -81,7 +80,6 @@ import org.apache.shardingsphere.sql.parser.sql.common.segment.dal.VariableAssig
import org.apache.shardingsphere.sql.parser.sql.common.segment.dal.VariableSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import org.apache.shardingsphere.sql.parser.sql.common.value.collection.CollectionValue;
@@ -355,9 +353,7 @@ public final class MySQLDALStatementSQLVisitor extends MySQLStatementSQLVisitor
public ASTNode visitShowIndex(final ShowIndexContext ctx) {
MySQLShowIndexStatement result = new MySQLShowIndexStatement();
if (null != ctx.fromSchema()) {
- SchemaNameContext schemaNameContext = ctx.fromSchema().schemaName();
- // TODO visitSchemaName
- result.setSchema(new SchemaSegment(schemaNameContext.getStart().getStartIndex(), schemaNameContext.getStop().getStopIndex(), (IdentifierValue) visit(schemaNameContext)));
+ result.setFromSchema((FromSchemaSegment) visit(ctx.fromSchema()));
}
if (null != ctx.fromTable()) {
result.setTable(((FromTableSegment) visitFromTable(ctx.fromTable())).getTable());
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dal/MySQLShowIndexStatement.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dal/MySQLShowIndexStatement.java
index 4727e34..c007527 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dal/MySQLShowIndexStatement.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dal/MySQLShowIndexStatement.java
@@ -20,7 +20,7 @@ package org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dal.FromSchemaSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
import org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.dal.DALStatement;
@@ -38,14 +38,14 @@ public final class MySQLShowIndexStatement extends AbstractSQLStatement implemen
@Getter
private SimpleTableSegment table;
- private SchemaSegment schema;
+ private FromSchemaSegment fromSchema;
/**
- * Get schema.
+ * Get from schema.
*
- * @return schema
+ * @return from schema
*/
- public Optional<SchemaSegment> getSchema() {
- return Optional.ofNullable(schema);
+ public Optional<FromSchemaSegment> getFromSchema() {
+ return Optional.ofNullable(fromSchema);
}
}
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dal/impl/ShowIndexStatementAssert.java b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dal/impl/ShowIndexStatementAssert.java
index 4fd713a..af3706a 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dal/impl/ShowIndexStatementAssert.java
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dal/impl/ShowIndexStatementAssert.java
@@ -21,7 +21,7 @@ import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowIndexStatement;
import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
-import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.schema.SchemaAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.SQLSegmentAssert;
import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.table.TableAssert;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.dal.ShowIndexStatementTestCase;
@@ -57,10 +57,10 @@ public final class ShowIndexStatementAssert {
private static void assertSchema(final SQLCaseAssertContext assertContext, final MySQLShowIndexStatement actual, final ShowIndexStatementTestCase expected) {
if (null != expected.getSchema()) {
- assertTrue(assertContext.getText("Actual schema segment should exist."), actual.getSchema().isPresent());
- SchemaAssert.assertIs(assertContext, actual.getSchema().get(), expected.getSchema());
+ assertTrue(assertContext.getText("Actual schema segment should exist."), actual.getFromSchema().isPresent());
+ SQLSegmentAssert.assertIs(assertContext, actual.getFromSchema().get(), expected.getSchema());
} else {
- assertFalse(assertContext.getText("Actual schema segment should not exist."), actual.getSchema().isPresent());
+ assertFalse(assertContext.getText("Actual schema segment should not exist."), actual.getFromSchema().isPresent());
}
}
}
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dal/show.xml b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dal/show.xml
index 1e41397..c807087 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dal/show.xml
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dal/show.xml
@@ -23,7 +23,7 @@
<show-index sql-case-id="show_index_with_indexes_with_table_and_database">
<table name="t_order" start-index="18" stop-index="24" />
- <schema name="sharding_db" start-index="31" stop-index="41" />
+ <schema name="sharding_db" start-index="26" stop-index="41" />
</show-index>
<show-index sql-case-id="show_index_with_keys_with_database_and_table">
@@ -34,12 +34,12 @@
<show-index sql-case-id="show_index_with_table_back_quotes">
<table name="t_order" start-delimiter="`" end-delimiter="`" start-index="18" stop-index="26" />
- <schema name="sharding_db" start-index="33" stop-index="43" />
+ <schema name="sharding_db" start-index="28" stop-index="43" />
</show-index>
<show-index sql-case-id="show_index_with_database_back_quotes">
<table name="t_order" start-index="18" stop-index="24" />
- <schema name="sharding_db" start-delimiter="`" end-delimiter="`" start-index="31" stop-index="43" />
+ <schema name="sharding_db" start-delimiter="`" end-delimiter="`" start-index="26" stop-index="43" />
</show-index>
<show-index sql-case-id="show_index_with_back_quotes">
diff --git a/shardingsphere-test/shardingsphere-rewrite-test/src/test/resources/scenario/sharding/case/show.xml b/shardingsphere-test/shardingsphere-rewrite-test/src/test/resources/scenario/sharding/case/show.xml
index e87bd9f..7e9ed6a 100644
--- a/shardingsphere-test/shardingsphere-rewrite-test/src/test/resources/scenario/sharding/case/show.xml
+++ b/shardingsphere-test/shardingsphere-rewrite-test/src/test/resources/scenario/sharding/case/show.xml
@@ -46,4 +46,19 @@
<input sql="SHOW FULL TABLES FROM `sharding_db` LIKE 't_acc%'" />
<output sql="SHOW FULL TABLES LIKE 't_acc%'" />
</rewrite-assertion>
+
+ <rewrite-assertion id="show_index_from_table_without_schema" db-type="MySQL">
+ <input sql="SHOW INDEX FROM t_account" />
+ <output sql="SHOW INDEX FROM t_account_0" />
+ </rewrite-assertion>
+
+ <rewrite-assertion id="show_index_from_table_with_schema" db-type="MySQL">
+ <input sql="SHOW INDEX FROM t_account FROM sharding_db" />
+ <output sql="SHOW INDEX FROM t_account_0 " />
+ </rewrite-assertion>
+
+ <rewrite-assertion id="show_index_from_table_with_owner" db-type="MySQL">
+ <input sql="SHOW INDEX FROM sharding_db.t_account" />
+ <output sql="SHOW INDEX FROM t_account_0" />
+ </rewrite-assertion>
</rewrite-assertions>