From 46a27255e6f26b88801e7db052ccfed9253b4048 Mon Sep 17 00:00:00 2001 From: Liang Zhang Date: Tue, 18 Feb 2020 18:08:16 +0800 Subject: [PATCH] decouple find SchemaSegment with show index statement (#4354) --- .../dal/dialect/mysql/ShowIndexStatement.java | 13 +++++++++++++ .../sql/parser/visitor/impl/MySQLDALVisitor.java | 1 + .../dal/impl/ShowIndexStatementAssert.java | 7 +++---- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/sql/statement/dal/dialect/mysql/ShowIndexStatement.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/sql/statement/dal/dialect/mysql/ShowIndexStatement.java index c21db6a1eb..999c26d5c0 100644 --- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/sql/statement/dal/dialect/mysql/ShowIndexStatement.java +++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/sql/statement/dal/dialect/mysql/ShowIndexStatement.java @@ -17,8 +17,10 @@ package org.apache.shardingsphere.sql.parser.sql.statement.dal.dialect.mysql; +import com.google.common.base.Optional; import lombok.Getter; import lombok.Setter; +import org.apache.shardingsphere.sql.parser.sql.segment.generic.SchemaSegment; import org.apache.shardingsphere.sql.parser.sql.segment.generic.TableSegment; import org.apache.shardingsphere.sql.parser.sql.statement.dal.DALStatement; import org.apache.shardingsphere.sql.parser.sql.statement.generic.TableSegmentAvailable; @@ -31,4 +33,15 @@ import org.apache.shardingsphere.sql.parser.sql.statement.generic.TableSegmentAv public final class ShowIndexStatement extends DALStatement implements TableSegmentAvailable { private TableSegment table; + + private SchemaSegment schema; + + /** + * Get schema. + * + * @return schema + */ + public Optional getSchema() { + return Optional.fromNullable(schema); + } } diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/visitor/impl/MySQLDALVisitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/visitor/impl/MySQLDALVisitor.java index b8b6293783..ba937ea155 100644 --- a/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/visitor/impl/MySQLDALVisitor.java +++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/visitor/impl/MySQLDALVisitor.java @@ -134,6 +134,7 @@ public final class MySQLDALVisitor extends MySQLVisitor { SchemaNameContext schemaNameContext = ctx.fromSchema().schemaName(); SchemaSegment schemaSegment = new SchemaSegment(schemaNameContext.getStart().getStartIndex(), schemaNameContext.getStop().getStopIndex(), (IdentifierValue) visit(schemaNameContext)); result.getAllSQLSegments().add(schemaSegment); + result.setSchema(schemaSegment); } if (null != ctx.fromTable()) { FromTableSegment fromTableSegment = (FromTableSegment) visitFromTable(ctx.fromTable()); diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/test/java/org/apache/shardingsphere/sql/parser/integrate/asserts/statement/dal/impl/ShowIndexStatementAssert.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/test/java/org/apache/shardingsphere/sql/parser/integrate/asserts/statement/dal/impl/ShowIndexStatementAssert.java index 5c284282e3..9e0d694ac4 100644 --- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/test/java/org/apache/shardingsphere/sql/parser/integrate/asserts/statement/dal/impl/ShowIndexStatementAssert.java +++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/test/java/org/apache/shardingsphere/sql/parser/integrate/asserts/statement/dal/impl/ShowIndexStatementAssert.java @@ -23,7 +23,6 @@ import org.apache.shardingsphere.sql.parser.integrate.asserts.SQLCaseAssertConte import org.apache.shardingsphere.sql.parser.integrate.asserts.segment.schema.SchemaAssert; import org.apache.shardingsphere.sql.parser.integrate.asserts.segment.table.TableAssert; import org.apache.shardingsphere.sql.parser.integrate.jaxb.domain.statement.dal.ShowIndexStatementTestCase; -import org.apache.shardingsphere.sql.parser.sql.segment.generic.SchemaSegment; import org.apache.shardingsphere.sql.parser.sql.statement.dal.dialect.mysql.ShowIndexStatement; import static org.junit.Assert.assertFalse; @@ -58,10 +57,10 @@ public final class ShowIndexStatementAssert { private static void assertSchema(final SQLCaseAssertContext assertContext, final ShowIndexStatement actual, final ShowIndexStatementTestCase expected) { if (null != expected.getSchema()) { - assertTrue(assertContext.getText("Actual schema segment should exist."), actual.findSQLSegment(SchemaSegment.class).isPresent()); - SchemaAssert.assertIs(assertContext, actual.findSQLSegment(SchemaSegment.class).get(), expected.getSchema()); + assertTrue(assertContext.getText("Actual schema segment should exist."), actual.getSchema().isPresent()); + SchemaAssert.assertIs(assertContext, actual.getSchema().get(), expected.getSchema()); } else { - assertFalse(assertContext.getText("Actual schema segment should not exist."), actual.findSQLSegment(SchemaSegment.class).isPresent()); + assertFalse(assertContext.getText("Actual schema segment should not exist."), actual.getSchema().isPresent()); } } } -- GitLab