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 d6ab7570d87 Add TableInfoInResultSetAvailable and ColumnInfoInResultSetAvailable (#35762) d6ab7570d87 is described below commit d6ab7570d87253730142932426068f05cd7ff0e4 Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Fri Jun 20 17:30:50 2025 +0800 Add TableInfoInResultSetAvailable and ColumnInfoInResultSetAvailable (#35762) --- .../merge/dal/EncryptDALResultDecorator.java | 9 +++--- .../dal/show/EncryptShowColumnsMergedResult.java | 13 +++++--- .../show/EncryptShowCreateTableMergedResult.java | 10 +++--- .../merge/dal/EncryptDALResultDecoratorTest.java | 37 +++++++--------------- .../show/EncryptShowColumnsMergedResultTest.java | 6 ++++ .../EncryptShowCreateTableMergedResultTest.java | 6 ++++ .../type/ShardingRouteEngineFactoryTest.java | 17 ++-------- .../MySQLSQLStatementContextWarpProvider.java | 2 +- .../binder/mysql/bind/MySQLSQLBindEngine.java | 6 ++-- .../bind/type/MySQLShowColumnsStatementBinder.java | 10 +++--- .../mysql/MySQLToBeRemovedSegmentsProvider.java | 6 ++-- .../statement/type/DorisDALStatementVisitor.java | 6 ++-- .../statement/type/MySQLDALStatementVisitor.java | 6 ++-- .../ColumnInfoInResultSetAvailable.java} | 29 ++++++----------- .../TableInfoInResultSetAvailable.java} | 29 ++++++----------- .../statement/dal/ShowCreateTableStatement.java | 8 ++++- .../{ => show/column}/MySQLDescribeStatement.java | 10 ++++-- .../show/column/MySQLShowColumnsStatement.java} | 25 +++++++++------ .../asserts/statement/dal/DALStatementAssert.java | 8 ++--- .../dal/impl/DescribeStatementAssert.java | 2 +- .../dal/impl/ShowColumnsStatementAssert.java | 4 +-- 21 files changed, 117 insertions(+), 132 deletions(-) diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecorator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecorator.java index 955801edd3d..614dcf2f4f3 100644 --- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecorator.java +++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecorator.java @@ -26,9 +26,8 @@ import org.apache.shardingsphere.infra.merge.engine.decorator.ResultDecorator; import org.apache.shardingsphere.infra.merge.result.MergedResult; import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData; import org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement; -import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ExplainStatement; -import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowColumnsStatement; -import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowCreateTableStatement; +import org.apache.shardingsphere.sql.parser.statement.core.statement.available.ColumnInfoInResultSetAvailable; +import org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableInfoInResultSetAvailable; /** * DAL result decorator for encrypt. @@ -41,10 +40,10 @@ public final class EncryptDALResultDecorator implements ResultDecorator<EncryptR @Override public MergedResult decorate(final MergedResult mergedResult, final SQLStatementContext sqlStatementContext, final EncryptRule rule) { SQLStatement sqlStatement = sqlStatementContext.getSqlStatement(); - if (sqlStatement instanceof ExplainStatement || sqlStatement instanceof ShowColumnsStatement) { + if (sqlStatement instanceof ColumnInfoInResultSetAvailable) { return new EncryptShowColumnsMergedResult(mergedResult, sqlStatementContext, rule); } - if (sqlStatement instanceof ShowCreateTableStatement) { + if (sqlStatement instanceof TableInfoInResultSetAvailable) { return new EncryptShowCreateTableMergedResult(globalRuleMetaData, mergedResult, sqlStatementContext, rule); } return mergedResult; diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowColumnsMergedResult.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowColumnsMergedResult.java index 74e555c3c2d..ccebff31ebd 100644 --- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowColumnsMergedResult.java +++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowColumnsMergedResult.java @@ -23,6 +23,7 @@ import org.apache.shardingsphere.encrypt.rule.table.EncryptTable; import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext; import org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions; import org.apache.shardingsphere.infra.merge.result.MergedResult; +import org.apache.shardingsphere.sql.parser.statement.core.statement.available.ColumnInfoInResultSetAvailable; import java.io.InputStream; import java.io.Reader; @@ -36,20 +37,22 @@ import java.util.Optional; */ public final class EncryptShowColumnsMergedResult implements MergedResult { - private static final int COLUMN_FIELD_INDEX = 1; - private final MergedResult mergedResult; private final EncryptRule rule; private final String tableName; + private final int columnNameResultSetIndex; + public EncryptShowColumnsMergedResult(final MergedResult mergedResult, final SQLStatementContext sqlStatementContext, final EncryptRule rule) { ShardingSpherePreconditions.checkState(1 == sqlStatementContext.getTablesContext().getSimpleTables().size(), () -> new UnsupportedEncryptSQLException("SHOW COLUMNS FOR MULTI TABLES")); this.mergedResult = mergedResult; this.rule = rule; tableName = sqlStatementContext.getTablesContext().getSimpleTables().iterator().next().getTableName().getIdentifier().getValue(); + columnNameResultSetIndex = ((ColumnInfoInResultSetAvailable) sqlStatementContext.getSqlStatement()).getColumnNameResultSetIndex(); + } @Override @@ -66,7 +69,7 @@ public final class EncryptShowColumnsMergedResult implements MergedResult { } private boolean next(final EncryptTable encryptTable) throws SQLException { - while (encryptTable.isDerivedColumn(mergedResult.getValue(COLUMN_FIELD_INDEX, String.class).toString())) { + while (encryptTable.isDerivedColumn(mergedResult.getValue(columnNameResultSetIndex, String.class).toString())) { boolean isFinished = !mergedResult.next(); if (isFinished) { return false; @@ -77,14 +80,14 @@ public final class EncryptShowColumnsMergedResult implements MergedResult { @Override public Object getValue(final int columnIndex, final Class<?> type) throws SQLException { - if (COLUMN_FIELD_INDEX == columnIndex) { + if (columnNameResultSetIndex == columnIndex) { return getColumnNameValue(type); } return mergedResult.getValue(columnIndex, type); } private String getColumnNameValue(final Class<?> type) throws SQLException { - String columnName = mergedResult.getValue(COLUMN_FIELD_INDEX, type).toString(); + String columnName = mergedResult.getValue(columnNameResultSetIndex, type).toString(); Optional<EncryptTable> encryptTable = rule.findEncryptTable(tableName); return encryptTable.isPresent() && encryptTable.get().isCipherColumn(columnName) ? encryptTable.get().getLogicColumnByCipherColumn(columnName) : columnName; } diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowCreateTableMergedResult.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowCreateTableMergedResult.java index 0e6a870809f..e4196307398 100644 --- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowCreateTableMergedResult.java +++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowCreateTableMergedResult.java @@ -28,6 +28,7 @@ import org.apache.shardingsphere.infra.parser.SQLParserEngine; import org.apache.shardingsphere.parser.rule.SQLParserRule; import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.ColumnDefinitionSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment; +import org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableInfoInResultSetAvailable; import org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CreateTableStatement; import java.io.InputStream; @@ -46,14 +47,14 @@ public final class EncryptShowCreateTableMergedResult implements MergedResult { private static final String COMMA = ", "; - private static final int CREATE_TABLE_DEFINITION_INDEX = 2; - private final MergedResult mergedResult; private final EncryptRule rule; private final String tableName; + private final int tableNameResultSetIndex; + private final SQLParserEngine sqlParserEngine; public EncryptShowCreateTableMergedResult(final RuleMetaData globalRuleMetaData, final MergedResult mergedResult, final SQLStatementContext sqlStatementContext, final EncryptRule rule) { @@ -62,6 +63,7 @@ public final class EncryptShowCreateTableMergedResult implements MergedResult { this.mergedResult = mergedResult; this.rule = rule; tableName = sqlStatementContext.getTablesContext().getSimpleTables().iterator().next().getTableName().getIdentifier().getValue(); + tableNameResultSetIndex = ((TableInfoInResultSetAvailable) sqlStatementContext.getSqlStatement()).getTableNameResultSetIndex(); sqlParserEngine = globalRuleMetaData.getSingleRule(SQLParserRule.class).getSQLParserEngine(sqlStatementContext.getDatabaseType()); } @@ -72,10 +74,10 @@ public final class EncryptShowCreateTableMergedResult implements MergedResult { @Override public Object getValue(final int columnIndex, final Class<?> type) throws SQLException { - if (CREATE_TABLE_DEFINITION_INDEX != columnIndex) { + if (tableNameResultSetIndex != columnIndex) { return mergedResult.getValue(columnIndex, type); } - String createTableSQL = mergedResult.getValue(CREATE_TABLE_DEFINITION_INDEX, type).toString(); + String createTableSQL = mergedResult.getValue(tableNameResultSetIndex, type).toString(); Optional<EncryptTable> encryptTable = rule.findEncryptTable(tableName); if (!encryptTable.isPresent() || !createTableSQL.contains("(")) { return createTableSQL; diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecoratorTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecoratorTest.java index 2e2d9133ff3..4bb1ca5a5d4 100644 --- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecoratorTest.java +++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/EncryptDALResultDecoratorTest.java @@ -20,9 +20,8 @@ package org.apache.shardingsphere.encrypt.merge.dal; import org.apache.shardingsphere.encrypt.merge.dal.show.EncryptShowColumnsMergedResult; import org.apache.shardingsphere.encrypt.merge.dal.show.EncryptShowCreateTableMergedResult; import org.apache.shardingsphere.encrypt.rule.EncryptRule; -import org.apache.shardingsphere.infra.binder.context.statement.type.CommonSQLStatementContext; import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext; -import org.apache.shardingsphere.infra.binder.context.statement.type.dal.ExplainStatementContext; +import org.apache.shardingsphere.infra.binder.context.statement.type.CommonSQLStatementContext; import org.apache.shardingsphere.infra.database.core.type.DatabaseType; import org.apache.shardingsphere.infra.merge.result.MergedResult; import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData; @@ -30,9 +29,9 @@ import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader; import org.apache.shardingsphere.parser.rule.SQLParserRule; import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment; -import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ExplainStatement; -import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowColumnsStatement; -import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowCreateTableStatement; +import org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement; +import org.apache.shardingsphere.sql.parser.statement.core.statement.available.ColumnInfoInResultSetAvailable; +import org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableInfoInResultSetAvailable; import org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -46,6 +45,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.Mockito.RETURNS_DEEP_STUBS; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import static org.mockito.Mockito.withSettings; @ExtendWith(MockitoExtension.class) class EncryptDALResultDecoratorTest { @@ -58,23 +58,16 @@ class EncryptDALResultDecoratorTest { @Mock private SQLStatementContext sqlStatementContext; - @Test - void assertMergedResultWithExplainStatement() { - sqlStatementContext = getExplainStatementContext(); - EncryptDALResultDecorator decorator = new EncryptDALResultDecorator(mock(RuleMetaData.class)); - assertThat(decorator.decorate(mock(MergedResult.class), sqlStatementContext, rule), instanceOf(EncryptShowColumnsMergedResult.class)); - } - @Test void assertMergedResultWithShowColumnsStatement() { - sqlStatementContext = getShowColumnsStatementContext(); + sqlStatementContext = getColumnInfoInResultSetAvailableStatementContext(); EncryptDALResultDecorator decorator = new EncryptDALResultDecorator(mock(RuleMetaData.class)); assertThat(decorator.decorate(mock(MergedResult.class), sqlStatementContext, rule), instanceOf(EncryptShowColumnsMergedResult.class)); } @Test void assertMergedResultWithShowCreateTableStatement() { - sqlStatementContext = mockShowCreateTableStatementContext(); + sqlStatementContext = mockTableInfoInResultSetAvailableStatementContext(); RuleMetaData ruleMetaData = mock(RuleMetaData.class); when(ruleMetaData.getSingleRule(SQLParserRule.class)).thenReturn(mock(SQLParserRule.class)); EncryptDALResultDecorator decorator = new EncryptDALResultDecorator(ruleMetaData); @@ -88,28 +81,20 @@ class EncryptDALResultDecoratorTest { assertThat(decorator.decorate(mock(MergedResult.class), sqlStatementContext, rule), instanceOf(MergedResult.class)); } - private SQLStatementContext getExplainStatementContext() { - ExplainStatementContext result = mock(ExplainStatementContext.class, RETURNS_DEEP_STUBS); - SimpleTableSegment simpleTableSegment = new SimpleTableSegment(new TableNameSegment(1, 7, new IdentifierValue("foo_tbl"))); - when(result.getTablesContext().getSimpleTables()).thenReturn(Collections.singleton(simpleTableSegment)); - when(result.getSqlStatement()).thenReturn(mock(ExplainStatement.class)); - return result; - } - - private SQLStatementContext getShowColumnsStatementContext() { + private SQLStatementContext getColumnInfoInResultSetAvailableStatementContext() { SQLStatementContext result = mock(SQLStatementContext.class, RETURNS_DEEP_STUBS); SimpleTableSegment simpleTableSegment = new SimpleTableSegment(new TableNameSegment(1, 7, new IdentifierValue("foo_tbl"))); when(result.getTablesContext().getSimpleTables()).thenReturn(Collections.singleton(simpleTableSegment)); - when(result.getSqlStatement()).thenReturn(mock(ShowColumnsStatement.class)); + when(result.getSqlStatement()).thenReturn(mock(SQLStatement.class, withSettings().extraInterfaces(ColumnInfoInResultSetAvailable.class))); return result; } - private SQLStatementContext mockShowCreateTableStatementContext() { + private SQLStatementContext mockTableInfoInResultSetAvailableStatementContext() { SQLStatementContext result = mock(CommonSQLStatementContext.class, RETURNS_DEEP_STUBS); when(result.getDatabaseType()).thenReturn(databaseType); SimpleTableSegment simpleTableSegment = new SimpleTableSegment(new TableNameSegment(1, 7, new IdentifierValue("foo_tbl"))); when(result.getTablesContext().getSimpleTables()).thenReturn(Collections.singleton(simpleTableSegment)); - when(result.getSqlStatement()).thenReturn(mock(ShowCreateTableStatement.class)); + when(result.getSqlStatement()).thenReturn(mock(SQLStatement.class, withSettings().extraInterfaces(TableInfoInResultSetAvailable.class))); return result; } } diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowColumnsMergedResultTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowColumnsMergedResultTest.java index 694482357fb..d2004284ec0 100644 --- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowColumnsMergedResultTest.java +++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowColumnsMergedResultTest.java @@ -24,6 +24,8 @@ import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementCont import org.apache.shardingsphere.infra.merge.result.MergedResult; import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment; +import org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement; +import org.apache.shardingsphere.sql.parser.statement.core.statement.available.ColumnInfoInResultSetAvailable; import org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -47,6 +49,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.RETURNS_DEEP_STUBS; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import static org.mockito.Mockito.withSettings; @ExtendWith(MockitoExtension.class) @MockitoSettings(strictness = Strictness.LENIENT) @@ -147,6 +150,9 @@ class EncryptShowColumnsMergedResultTest { private EncryptShowColumnsMergedResult createMergedResult(final MergedResult mergedResult, final EncryptRule rule) { SQLStatementContext sqlStatementContext = mock(SQLStatementContext.class, RETURNS_DEEP_STUBS); + SQLStatement sqlStatement = mock(SQLStatement.class, withSettings().extraInterfaces(ColumnInfoInResultSetAvailable.class).defaultAnswer(RETURNS_DEEP_STUBS)); + when(((ColumnInfoInResultSetAvailable) sqlStatement).getColumnNameResultSetIndex()).thenReturn(1); + when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement); when(sqlStatementContext.getTablesContext().getSimpleTables()).thenReturn(Collections.singleton(new SimpleTableSegment(new TableNameSegment(0, 0, new IdentifierValue("t_encrypt"))))); return new EncryptShowColumnsMergedResult(mergedResult, sqlStatementContext, rule); } diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowCreateTableMergedResultTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowCreateTableMergedResultTest.java index 9c8b155a5dd..d89929dd82a 100644 --- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowCreateTableMergedResultTest.java +++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowCreateTableMergedResultTest.java @@ -35,6 +35,8 @@ import org.apache.shardingsphere.parser.rule.SQLParserRule; import org.apache.shardingsphere.sql.parser.api.CacheOption; import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment; +import org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement; +import org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableInfoInResultSetAvailable; import org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -60,6 +62,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.RETURNS_DEEP_STUBS; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import static org.mockito.Mockito.withSettings; @ExtendWith(MockitoExtension.class) @MockitoSettings(strictness = Strictness.LENIENT) @@ -209,6 +212,9 @@ class EncryptShowCreateTableMergedResultTest { private EncryptShowCreateTableMergedResult createMergedResult(final MergedResult mergedResult, final String tableName, final EncryptRule rule) { CommonSQLStatementContext sqlStatementContext = mock(CommonSQLStatementContext.class, RETURNS_DEEP_STUBS); + SQLStatement sqlStatement = mock(SQLStatement.class, withSettings().extraInterfaces(TableInfoInResultSetAvailable.class).defaultAnswer(RETURNS_DEEP_STUBS)); + when(((TableInfoInResultSetAvailable) sqlStatement).getTableNameResultSetIndex()).thenReturn(2); + when(sqlStatementContext.getSqlStatement()).thenReturn(sqlStatement); when(sqlStatementContext.getTablesContext().getSimpleTables()).thenReturn(Collections.singleton(new SimpleTableSegment(new TableNameSegment(1, 4, new IdentifierValue(tableName))))); when(sqlStatementContext.getDatabaseType()).thenReturn(databaseType); RuleMetaData globalRuleMetaData = mock(RuleMetaData.class); diff --git a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/ShardingRouteEngineFactoryTest.java b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/ShardingRouteEngineFactoryTest.java index 50f616a9751..d1a33e3aa95 100644 --- a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/ShardingRouteEngineFactoryTest.java +++ b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/ShardingRouteEngineFactoryTest.java @@ -42,8 +42,6 @@ import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment; import org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.DALStatement; -import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowColumnsStatement; -import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowCreateTableStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.dcl.DCLStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.dcl.GrantStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.CursorStatement; @@ -200,19 +198,8 @@ class ShardingRouteEngineFactoryTest { } @Test - void assertNewInstanceForShowCreateTableWithTableRule() { - DALStatement dalStatement = mock(ShowCreateTableStatement.class); - when(sqlStatementContext.getSqlStatement()).thenReturn(dalStatement); - tableNames.add("table_1"); - when(shardingRule.getShardingLogicTableNames(tableNames)).thenReturn(tableNames); - QueryContext queryContext = new QueryContext(sqlStatementContext, "", Collections.emptyList(), new HintValueContext(), mockConnectionContext(), mock(ShardingSphereMetaData.class)); - ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, database, queryContext, shardingConditions, tableNames, props); - assertThat(actual, instanceOf(ShardingUnicastRouteEngine.class)); - } - - @Test - void assertNewInstanceForShowColumnsWithTableRule() { - DALStatement dalStatement = mock(ShowColumnsStatement.class); + void assertNewInstanceForCommonDALStatement() { + DALStatement dalStatement = mock(DALStatement.class); when(sqlStatementContext.getSqlStatement()).thenReturn(dalStatement); tableNames.add("table_1"); when(shardingRule.getShardingLogicTableNames(tableNames)).thenReturn(tableNames); diff --git a/infra/binder/dialect/mysql/src/main/java/org/apache/shardingsphere/infra/binder/mysql/MySQLSQLStatementContextWarpProvider.java b/infra/binder/dialect/mysql/src/main/java/org/apache/shardingsphere/infra/binder/mysql/MySQLSQLStatementContextWarpProvider.java index aadb76e4348..b5ef03f335b 100644 --- a/infra/binder/dialect/mysql/src/main/java/org/apache/shardingsphere/infra/binder/mysql/MySQLSQLStatementContextWarpProvider.java +++ b/infra/binder/dialect/mysql/src/main/java/org/apache/shardingsphere/infra/binder/mysql/MySQLSQLStatementContextWarpProvider.java @@ -23,7 +23,7 @@ import org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLOptimizeTab import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowCreateTableStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.dml.LoadDataStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.dml.LoadXMLStatement; -import org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLDescribeStatement; +import org.apache.shardingsphere.sql.parser.statement.mysql.dal.show.column.MySQLDescribeStatement; import org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLFlushStatement; import java.util.Arrays; diff --git a/infra/binder/dialect/mysql/src/main/java/org/apache/shardingsphere/infra/binder/mysql/bind/MySQLSQLBindEngine.java b/infra/binder/dialect/mysql/src/main/java/org/apache/shardingsphere/infra/binder/mysql/bind/MySQLSQLBindEngine.java index 834c9dee2ef..7504aff4504 100644 --- a/infra/binder/dialect/mysql/src/main/java/org/apache/shardingsphere/infra/binder/mysql/bind/MySQLSQLBindEngine.java +++ b/infra/binder/dialect/mysql/src/main/java/org/apache/shardingsphere/infra/binder/mysql/bind/MySQLSQLBindEngine.java @@ -25,7 +25,7 @@ import org.apache.shardingsphere.infra.binder.mysql.bind.type.MySQLShowCreateTab import org.apache.shardingsphere.infra.binder.mysql.bind.type.MySQLShowIndexStatementBinder; import org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement; import org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLOptimizeTableStatement; -import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowColumnsStatement; +import org.apache.shardingsphere.sql.parser.statement.mysql.dal.show.column.MySQLShowColumnsStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowCreateTableStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowIndexStatement; @@ -44,8 +44,8 @@ public final class MySQLSQLBindEngine implements DialectSQLBindEngine { if (sqlStatement instanceof ShowCreateTableStatement) { return Optional.of(new MySQLShowCreateTableStatementBinder().bind((ShowCreateTableStatement) sqlStatement, binderContext)); } - if (sqlStatement instanceof ShowColumnsStatement) { - return Optional.of(new MySQLShowColumnsStatementBinder().bind((ShowColumnsStatement) sqlStatement, binderContext)); + if (sqlStatement instanceof MySQLShowColumnsStatement) { + return Optional.of(new MySQLShowColumnsStatementBinder().bind((MySQLShowColumnsStatement) sqlStatement, binderContext)); } if (sqlStatement instanceof ShowIndexStatement) { return Optional.of(new MySQLShowIndexStatementBinder().bind((ShowIndexStatement) sqlStatement, binderContext)); diff --git a/infra/binder/dialect/mysql/src/main/java/org/apache/shardingsphere/infra/binder/mysql/bind/type/MySQLShowColumnsStatementBinder.java b/infra/binder/dialect/mysql/src/main/java/org/apache/shardingsphere/infra/binder/mysql/bind/type/MySQLShowColumnsStatementBinder.java index dbfd061a077..9fdd6bea1c0 100644 --- a/infra/binder/dialect/mysql/src/main/java/org/apache/shardingsphere/infra/binder/mysql/bind/type/MySQLShowColumnsStatementBinder.java +++ b/infra/binder/dialect/mysql/src/main/java/org/apache/shardingsphere/infra/binder/mysql/bind/type/MySQLShowColumnsStatementBinder.java @@ -28,25 +28,25 @@ import org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementBinde import org.apache.shardingsphere.infra.binder.engine.statement.SQLStatementCopyUtils; import org.apache.shardingsphere.sql.parser.statement.core.segment.dal.ShowFilterSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment; -import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowColumnsStatement; +import org.apache.shardingsphere.sql.parser.statement.mysql.dal.show.column.MySQLShowColumnsStatement; import java.util.Optional; /** * Show columns statement binder for MySQL. */ -public final class MySQLShowColumnsStatementBinder implements SQLStatementBinder<ShowColumnsStatement> { +public final class MySQLShowColumnsStatementBinder implements SQLStatementBinder<MySQLShowColumnsStatement> { @Override - public ShowColumnsStatement bind(final ShowColumnsStatement sqlStatement, final SQLStatementBinderContext binderContext) { + public MySQLShowColumnsStatement bind(final MySQLShowColumnsStatement sqlStatement, final SQLStatementBinderContext binderContext) { Multimap<CaseInsensitiveString, TableSegmentBinderContext> tableBinderContexts = LinkedHashMultimap.create(); SimpleTableSegment boundTable = SimpleTableSegmentBinder.bind(sqlStatement.getTable(), binderContext, tableBinderContexts); Optional<ShowFilterSegment> boundFilter = sqlStatement.getFilter().map(optional -> ShowFilterSegmentBinder.bind(optional, binderContext, tableBinderContexts, LinkedHashMultimap.create())); return copy(sqlStatement, boundTable, boundFilter.orElse(null)); } - private ShowColumnsStatement copy(final ShowColumnsStatement sqlStatement, final SimpleTableSegment boundTable, final ShowFilterSegment boundFilter) { - ShowColumnsStatement result = new ShowColumnsStatement(boundTable, sqlStatement.getFromDatabase().orElse(null), boundFilter); + private MySQLShowColumnsStatement copy(final MySQLShowColumnsStatement sqlStatement, final SimpleTableSegment boundTable, final ShowFilterSegment boundFilter) { + MySQLShowColumnsStatement result = new MySQLShowColumnsStatement(boundTable, sqlStatement.getFromDatabase().orElse(null), boundFilter); SQLStatementCopyUtils.copyAttributes(sqlStatement, result); return result; } diff --git a/infra/rewrite/dialect/mysql/src/main/java/org/apache/shardingsphere/infra/rewrite/mysql/MySQLToBeRemovedSegmentsProvider.java b/infra/rewrite/dialect/mysql/src/main/java/org/apache/shardingsphere/infra/rewrite/mysql/MySQLToBeRemovedSegmentsProvider.java index bbc62f4a9bc..04805700c77 100644 --- a/infra/rewrite/dialect/mysql/src/main/java/org/apache/shardingsphere/infra/rewrite/mysql/MySQLToBeRemovedSegmentsProvider.java +++ b/infra/rewrite/dialect/mysql/src/main/java/org/apache/shardingsphere/infra/rewrite/mysql/MySQLToBeRemovedSegmentsProvider.java @@ -20,7 +20,7 @@ package org.apache.shardingsphere.infra.rewrite.mysql; import org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.generic.DialectToBeRemovedSegmentsProvider; import org.apache.shardingsphere.sql.parser.statement.core.segment.SQLSegment; import org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement; -import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowColumnsStatement; +import org.apache.shardingsphere.sql.parser.statement.mysql.dal.show.column.MySQLShowColumnsStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowIndexStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowTableStatusStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowTablesStatement; @@ -39,8 +39,8 @@ public final class MySQLToBeRemovedSegmentsProvider implements DialectToBeRemove if (sqlStatement instanceof ShowTablesStatement) { ((ShowTablesStatement) sqlStatement).getFromDatabase().ifPresent(result::add); } - if (sqlStatement instanceof ShowColumnsStatement) { - ((ShowColumnsStatement) sqlStatement).getFromDatabase().ifPresent(result::add); + if (sqlStatement instanceof MySQLShowColumnsStatement) { + ((MySQLShowColumnsStatement) sqlStatement).getFromDatabase().ifPresent(result::add); } if (sqlStatement instanceof ShowIndexStatement) { ((ShowIndexStatement) sqlStatement).getFromDatabase().ifPresent(result::add); diff --git a/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDALStatementVisitor.java b/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDALStatementVisitor.java index bf7af0fd9d3..27ebaa69f57 100644 --- a/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDALStatementVisitor.java +++ b/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDALStatementVisitor.java @@ -144,11 +144,11 @@ import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.Datab import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment; import org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.AnalyzeTableStatement; -import org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLDescribeStatement; +import org.apache.shardingsphere.sql.parser.statement.mysql.dal.show.column.MySQLDescribeStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ExplainStatement; import org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLOptimizeTableStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.SetStatement; -import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowColumnsStatement; +import org.apache.shardingsphere.sql.parser.statement.mysql.dal.show.column.MySQLShowColumnsStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowCreateTableStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowDatabasesStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowIndexStatement; @@ -604,7 +604,7 @@ public final class DorisDALStatementVisitor extends DorisStatementVisitor implem @Override public ASTNode visitShowColumns(final ShowColumnsContext ctx) { - ShowColumnsStatement result = new ShowColumnsStatement(null == ctx.fromTable() ? null : ((FromTableSegment) visit(ctx.fromTable())).getTable(), + MySQLShowColumnsStatement result = new MySQLShowColumnsStatement(null == ctx.fromTable() ? null : ((FromTableSegment) visit(ctx.fromTable())).getTable(), null == ctx.fromDatabase() ? null : (FromDatabaseSegment) visit(ctx.fromDatabase()), null == ctx.showFilter() ? null : (ShowFilterSegment) visit(ctx.showFilter())); result.addParameterMarkers(getParameterMarkerSegments()); return result; diff --git a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDALStatementVisitor.java b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDALStatementVisitor.java index 930ca2d3534..8d3583caac3 100644 --- a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDALStatementVisitor.java +++ b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDALStatementVisitor.java @@ -143,7 +143,7 @@ import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.predicate import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment; import org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement; -import org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLDescribeStatement; +import org.apache.shardingsphere.sql.parser.statement.mysql.dal.show.column.MySQLDescribeStatement; import org.apache.shardingsphere.sql.parser.statement.mysql.dal.resource.MySQLAlterResourceGroupStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.AnalyzeTableStatement; import org.apache.shardingsphere.sql.parser.statement.mysql.dal.replication.binlog.MySQLBinlogStatement; @@ -175,7 +175,7 @@ import org.apache.shardingsphere.sql.parser.statement.mysql.dal.replication.binl import org.apache.shardingsphere.sql.parser.statement.mysql.dal.replication.binlog.MySQLShowBinlogEventsStatement; import org.apache.shardingsphere.sql.parser.statement.mysql.dal.show.character.MySQLShowCharacterSetStatement; import org.apache.shardingsphere.sql.parser.statement.mysql.dal.show.character.MySQLShowCollationStatement; -import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowColumnsStatement; +import org.apache.shardingsphere.sql.parser.statement.mysql.dal.show.column.MySQLShowColumnsStatement; import org.apache.shardingsphere.sql.parser.statement.mysql.dal.show.database.MySQLShowCreateDatabaseStatement; import org.apache.shardingsphere.sql.parser.statement.mysql.dal.show.event.MySQLShowCreateEventStatement; import org.apache.shardingsphere.sql.parser.statement.mysql.dal.show.function.MySQLShowCreateFunctionStatement; @@ -617,7 +617,7 @@ public final class MySQLDALStatementVisitor extends MySQLStatementVisitor implem @Override public ASTNode visitShowColumns(final ShowColumnsContext ctx) { - ShowColumnsStatement result = new ShowColumnsStatement(null == ctx.fromTable() ? null : ((FromTableSegment) visit(ctx.fromTable())).getTable(), + MySQLShowColumnsStatement result = new MySQLShowColumnsStatement(null == ctx.fromTable() ? null : ((FromTableSegment) visit(ctx.fromTable())).getTable(), null == ctx.fromDatabase() ? null : (FromDatabaseSegment) visit(ctx.fromDatabase()), null == ctx.showFilter() ? null : (ShowFilterSegment) visit(ctx.showFilter())); result.addParameterMarkers(getParameterMarkerSegments()); return result; diff --git a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/ShowCreateTableStatement.java b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/available/ColumnInfoInResultSetAvailable.java similarity index 53% copy from parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/ShowCreateTableStatement.java copy to parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/available/ColumnInfoInResultSetAvailable.java index 13d3c3ad78a..86043936656 100644 --- a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/ShowCreateTableStatement.java +++ b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/available/ColumnInfoInResultSetAvailable.java @@ -15,28 +15,17 @@ * limitations under the License. */ -package org.apache.shardingsphere.sql.parser.statement.core.statement.dal; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment; -import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement; -import org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailable; - -import java.util.Collection; -import java.util.Collections; +package org.apache.shardingsphere.sql.parser.statement.core.statement.available; /** - * Show create table statement. + * Column info in result set available. */ -@RequiredArgsConstructor -@Getter -public final class ShowCreateTableStatement extends AbstractSQLStatement implements DALStatement, TableAvailable { - - private final SimpleTableSegment table; +public interface ColumnInfoInResultSetAvailable { - @Override - public Collection<SimpleTableSegment> getTables() { - return Collections.singleton(table); - } + /** + * Get column name result set index. + * + * @return column name result set index + */ + int getColumnNameResultSetIndex(); } diff --git a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/ShowCreateTableStatement.java b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/available/TableInfoInResultSetAvailable.java similarity index 53% copy from parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/ShowCreateTableStatement.java copy to parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/available/TableInfoInResultSetAvailable.java index 13d3c3ad78a..f4351fe99e4 100644 --- a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/ShowCreateTableStatement.java +++ b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/available/TableInfoInResultSetAvailable.java @@ -15,28 +15,17 @@ * limitations under the License. */ -package org.apache.shardingsphere.sql.parser.statement.core.statement.dal; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment; -import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement; -import org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailable; - -import java.util.Collection; -import java.util.Collections; +package org.apache.shardingsphere.sql.parser.statement.core.statement.available; /** - * Show create table statement. + * Table info in result set available. */ -@RequiredArgsConstructor -@Getter -public final class ShowCreateTableStatement extends AbstractSQLStatement implements DALStatement, TableAvailable { - - private final SimpleTableSegment table; +public interface TableInfoInResultSetAvailable { - @Override - public Collection<SimpleTableSegment> getTables() { - return Collections.singleton(table); - } + /** + * Get table name result set index. + * + * @return table name result set index + */ + int getTableNameResultSetIndex(); } diff --git a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/ShowCreateTableStatement.java b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/ShowCreateTableStatement.java index 13d3c3ad78a..582d3025b0f 100644 --- a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/ShowCreateTableStatement.java +++ b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/ShowCreateTableStatement.java @@ -22,6 +22,7 @@ import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment; import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailable; +import org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableInfoInResultSetAvailable; import java.util.Collection; import java.util.Collections; @@ -31,7 +32,7 @@ import java.util.Collections; */ @RequiredArgsConstructor @Getter -public final class ShowCreateTableStatement extends AbstractSQLStatement implements DALStatement, TableAvailable { +public final class ShowCreateTableStatement extends AbstractSQLStatement implements DALStatement, TableAvailable, TableInfoInResultSetAvailable { private final SimpleTableSegment table; @@ -39,4 +40,9 @@ public final class ShowCreateTableStatement extends AbstractSQLStatement impleme public Collection<SimpleTableSegment> getTables() { return Collections.singleton(table); } + + @Override + public int getTableNameResultSetIndex() { + return 2; + } } diff --git a/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/MySQLDescribeStatement.java b/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/show/column/MySQLDescribeStatement.java similarity index 87% rename from parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/MySQLDescribeStatement.java rename to parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/show/column/MySQLDescribeStatement.java index a18a04e8381..8fd04baf664 100644 --- a/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/MySQLDescribeStatement.java +++ b/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/show/column/MySQLDescribeStatement.java @@ -15,13 +15,14 @@ * limitations under the License. */ -package org.apache.shardingsphere.sql.parser.statement.mysql.dal; +package org.apache.shardingsphere.sql.parser.statement.mysql.dal.show.column; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment; import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement; +import org.apache.shardingsphere.sql.parser.statement.core.statement.available.ColumnInfoInResultSetAvailable; import org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailable; import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.DALStatement; @@ -34,7 +35,7 @@ import java.util.Optional; */ @RequiredArgsConstructor @Getter -public final class MySQLDescribeStatement extends AbstractSQLStatement implements DALStatement, TableAvailable { +public final class MySQLDescribeStatement extends AbstractSQLStatement implements DALStatement, TableAvailable, ColumnInfoInResultSetAvailable { private final SimpleTableSegment table; @@ -53,4 +54,9 @@ public final class MySQLDescribeStatement extends AbstractSQLStatement implement public Collection<SimpleTableSegment> getTables() { return Collections.singleton(table); } + + @Override + public int getColumnNameResultSetIndex() { + return 1; + } } diff --git a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/ShowColumnsStatement.java b/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/show/column/MySQLShowColumnsStatement.java similarity index 80% rename from parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/ShowColumnsStatement.java rename to parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/show/column/MySQLShowColumnsStatement.java index b1e3e986359..0899bdf84ca 100644 --- a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/dal/ShowColumnsStatement.java +++ b/parser/sql/statement/type/mysql/src/main/java/org/apache/shardingsphere/sql/parser/statement/mysql/dal/show/column/MySQLShowColumnsStatement.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.sql.parser.statement.core.statement.dal; +package org.apache.shardingsphere.sql.parser.statement.mysql.dal.show.column; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -23,8 +23,10 @@ import org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatab import org.apache.shardingsphere.sql.parser.statement.core.segment.dal.ShowFilterSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment; import org.apache.shardingsphere.sql.parser.statement.core.statement.AbstractSQLStatement; +import org.apache.shardingsphere.sql.parser.statement.core.statement.available.ColumnInfoInResultSetAvailable; import org.apache.shardingsphere.sql.parser.statement.core.statement.available.FromDatabaseAvailable; import org.apache.shardingsphere.sql.parser.statement.core.statement.available.TableAvailable; +import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.DALStatement; import java.util.Collection; import java.util.Collections; @@ -35,7 +37,7 @@ import java.util.Optional; */ @RequiredArgsConstructor @Getter -public final class ShowColumnsStatement extends AbstractSQLStatement implements DALStatement, TableAvailable, FromDatabaseAvailable { +public final class MySQLShowColumnsStatement extends AbstractSQLStatement implements DALStatement, TableAvailable, FromDatabaseAvailable, ColumnInfoInResultSetAvailable { private final SimpleTableSegment table; @@ -43,6 +45,15 @@ public final class ShowColumnsStatement extends AbstractSQLStatement implements private final ShowFilterSegment filter; + /** + * Get filter segment. + * + * @return filter segment + */ + public Optional<ShowFilterSegment> getFilter() { + return Optional.ofNullable(filter); + } + @Override public Collection<SimpleTableSegment> getTables() { return Collections.singleton(table); @@ -53,12 +64,8 @@ public final class ShowColumnsStatement extends AbstractSQLStatement implements return Optional.ofNullable(fromDatabase); } - /** - * Get filter segment. - * - * @return filter segment - */ - public Optional<ShowFilterSegment> getFilter() { - return Optional.ofNullable(filter); + @Override + public int getColumnNameResultSetIndex() { + return 1; } } diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/DALStatementAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/DALStatementAssert.java index 459949563a4..f87d2b9f3bb 100644 --- a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/DALStatementAssert.java +++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/DALStatementAssert.java @@ -20,12 +20,12 @@ package org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement. import lombok.AccessLevel; import lombok.NoArgsConstructor; import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.DALStatement; -import org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLDescribeStatement; +import org.apache.shardingsphere.sql.parser.statement.mysql.dal.show.column.MySQLDescribeStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.EmptyStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ExplainStatement; import org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLOptimizeTableStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.SetStatement; -import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowColumnsStatement; +import org.apache.shardingsphere.sql.parser.statement.mysql.dal.show.column.MySQLShowColumnsStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowCreateTableStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowDatabasesStatement; import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowIndexStatement; @@ -211,8 +211,8 @@ public final class DALStatementAssert { ShowDatabasesStatementAssert.assertIs(assertContext, (ShowDatabasesStatement) actual, (ShowDatabasesStatementTestCase) expected); } else if (actual instanceof ShowTablesStatement) { ShowTablesStatementAssert.assertIs(assertContext, (ShowTablesStatement) actual, (ShowTablesStatementTestCase) expected); - } else if (actual instanceof ShowColumnsStatement) { - ShowColumnsStatementAssert.assertIs(assertContext, (ShowColumnsStatement) actual, (ShowColumnsStatementTestCase) expected); + } else if (actual instanceof MySQLShowColumnsStatement) { + ShowColumnsStatementAssert.assertIs(assertContext, (MySQLShowColumnsStatement) actual, (ShowColumnsStatementTestCase) expected); } else if (actual instanceof ShowCreateTableStatement) { ShowCreateTableStatementAssert.assertIs(assertContext, (ShowCreateTableStatement) actual, (ShowCreateTableStatementTestCase) expected); } else if (actual instanceof MySQLShowCreateTriggerStatement) { diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/DescribeStatementAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/DescribeStatementAssert.java index 96aa83201df..7a8a23b81a8 100644 --- a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/DescribeStatementAssert.java +++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/DescribeStatementAssert.java @@ -19,7 +19,7 @@ package org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement. import lombok.AccessLevel; import lombok.NoArgsConstructor; -import org.apache.shardingsphere.sql.parser.statement.mysql.dal.MySQLDescribeStatement; +import org.apache.shardingsphere.sql.parser.statement.mysql.dal.show.column.MySQLDescribeStatement; import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext; import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.column.ColumnAssert; import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.table.TableAssert; diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/ShowColumnsStatementAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/ShowColumnsStatementAssert.java index 419740d7bb6..9fcd05dec5a 100644 --- a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/ShowColumnsStatementAssert.java +++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/ShowColumnsStatementAssert.java @@ -19,7 +19,7 @@ package org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement. import lombok.AccessLevel; import lombok.NoArgsConstructor; -import org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowColumnsStatement; +import org.apache.shardingsphere.sql.parser.statement.mysql.dal.show.column.MySQLShowColumnsStatement; import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext; import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.database.DatabaseAssert; import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.show.ShowFilterAssert; @@ -39,7 +39,7 @@ public final class ShowColumnsStatementAssert { * @param actual actual show columns statement * @param expected expected show columns statement test case */ - public static void assertIs(final SQLCaseAssertContext assertContext, final ShowColumnsStatement actual, final ShowColumnsStatementTestCase expected) { + public static void assertIs(final SQLCaseAssertContext assertContext, final MySQLShowColumnsStatement actual, final ShowColumnsStatementTestCase expected) { if (null != actual.getTable()) { TableAssert.assertIs(assertContext, actual.getTable(), expected.getTable()); }