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 cd52a563c00 Move package of ConstraintAvailable (#35738) cd52a563c00 is described below commit cd52a563c005940deeebc6daab58926bc40223ba Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Tue Jun 17 22:13:19 2025 +0800 Move package of ConstraintAvailable (#35738) * Move package of ConstraintAvailable * Move package of ConstraintAvailable * Move package of ConstraintAvailable --- .../impl/ShardingConstraintTokenGenerator.java | 8 ++++---- .../impl/ShardingConstraintTokenGeneratorTest.java | 6 +++--- .../statement/type/ddl/AlterTableStatementContext.java | 17 +---------------- .../statement/type/ddl/CreateTableStatementContext.java | 13 +------------ .../type/ddl/AlterTableStatementContextTest.java | 2 -- .../type/ddl/CreateTableStatementContextTest.java | 6 +----- .../core/metadata/generator/PipelineDDLDecorator.java | 6 +++--- .../core/statement/available}/ConstraintAvailable.java | 2 +- .../core/statement/ddl/AlterTableStatement.java | 15 ++++++++++++++- .../core/statement/ddl/CreateTableStatement.java | 13 ++++++++++++- 10 files changed, 40 insertions(+), 48 deletions(-) diff --git a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/ShardingConstraintTokenGenerator.java b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/ShardingConstraintTokenGenerator.java index ae58c423cc7..e38dcdf0d51 100644 --- a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/ShardingConstraintTokenGenerator.java +++ b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/ShardingConstraintTokenGenerator.java @@ -20,7 +20,7 @@ package org.apache.shardingsphere.sharding.rewrite.token.generator.impl; import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation; import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext; -import org.apache.shardingsphere.infra.binder.context.type.ConstraintAvailable; +import org.apache.shardingsphere.sql.parser.statement.core.statement.available.ConstraintAvailable; import org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.CollectionSQLTokenGenerator; import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken; import org.apache.shardingsphere.sharding.rewrite.token.pojo.ConstraintToken; @@ -42,14 +42,14 @@ public final class ShardingConstraintTokenGenerator implements CollectionSQLToke @Override public boolean isGenerateSQLToken(final SQLStatementContext sqlStatementContext) { - return sqlStatementContext instanceof ConstraintAvailable && !((ConstraintAvailable) sqlStatementContext).getConstraints().isEmpty(); + return sqlStatementContext.getSqlStatement() instanceof ConstraintAvailable && !((ConstraintAvailable) sqlStatementContext.getSqlStatement()).getConstraints().isEmpty(); } @Override public Collection<SQLToken> generateSQLTokens(final SQLStatementContext sqlStatementContext) { Collection<SQLToken> result = new LinkedList<>(); - if (sqlStatementContext instanceof ConstraintAvailable) { - for (ConstraintSegment each : ((ConstraintAvailable) sqlStatementContext).getConstraints()) { + if (sqlStatementContext.getSqlStatement() instanceof ConstraintAvailable) { + for (ConstraintSegment each : ((ConstraintAvailable) sqlStatementContext.getSqlStatement()).getConstraints()) { IdentifierValue constraintIdentifier = each.getIdentifier(); // TODO make sure can remove null check here? @duanzhengqiang if (null != constraintIdentifier) { diff --git a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/ShardingConstraintTokenGeneratorTest.java b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/ShardingConstraintTokenGeneratorTest.java index d41686cb571..e739df8c8f0 100644 --- a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/ShardingConstraintTokenGeneratorTest.java +++ b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/generator/impl/ShardingConstraintTokenGeneratorTest.java @@ -49,7 +49,7 @@ class ShardingConstraintTokenGeneratorTest { @Test void assertIsNotGenerateSQLTokenWithEmptyConstraint() { AlterTableStatementContext alterTableStatementContext = mock(AlterTableStatementContext.class, RETURNS_DEEP_STUBS); - when(alterTableStatementContext.getConstraints().isEmpty()).thenReturn(true); + when(alterTableStatementContext.getSqlStatement().getConstraints().isEmpty()).thenReturn(true); assertFalse(generator.isGenerateSQLToken(alterTableStatementContext)); } @@ -73,8 +73,8 @@ class ShardingConstraintTokenGeneratorTest { } private AlterTableStatementContext mockAlterTableStatementContext() { - AlterTableStatementContext result = mock(AlterTableStatementContext.class); - when(result.getConstraints()).thenReturn(Collections.singleton(new ConstraintSegment(1, 3, mock(IdentifierValue.class)))); + AlterTableStatementContext result = mock(AlterTableStatementContext.class, RETURNS_DEEP_STUBS); + when(result.getSqlStatement().getConstraints()).thenReturn(Collections.singleton(new ConstraintSegment(1, 3, mock(IdentifierValue.class)))); return result; } diff --git a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/ddl/AlterTableStatementContext.java b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/ddl/AlterTableStatementContext.java index 9d48afff4f6..24af4b58a4e 100644 --- a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/ddl/AlterTableStatementContext.java +++ b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/ddl/AlterTableStatementContext.java @@ -20,16 +20,12 @@ package org.apache.shardingsphere.infra.binder.context.statement.type.ddl; import lombok.Getter; import org.apache.shardingsphere.infra.binder.context.segment.table.TablesContext; import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext; -import org.apache.shardingsphere.infra.binder.context.type.ConstraintAvailable; import org.apache.shardingsphere.infra.binder.context.type.IndexAvailable; import org.apache.shardingsphere.infra.database.core.type.DatabaseType; import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.ColumnDefinitionSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.alter.AddColumnDefinitionSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.alter.ModifyColumnDefinitionSegment; -import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.ConstraintSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.alter.AddConstraintDefinitionSegment; -import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.alter.DropConstraintDefinitionSegment; -import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.alter.ValidateConstraintDefinitionSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.index.DropIndexDefinitionSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.index.IndexSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.index.RenameIndexDefinitionSegment; @@ -44,7 +40,7 @@ import java.util.LinkedList; * Alter table statement context. */ @Getter -public final class AlterTableStatementContext implements SQLStatementContext, IndexAvailable, ConstraintAvailable { +public final class AlterTableStatementContext implements SQLStatementContext, IndexAvailable { private final DatabaseType databaseType; @@ -92,17 +88,6 @@ public final class AlterTableStatementContext implements SQLStatementContext, In return result; } - @Override - public Collection<ConstraintSegment> getConstraints() { - Collection<ConstraintSegment> result = new LinkedList<>(); - for (AddConstraintDefinitionSegment each : getSqlStatement().getAddConstraintDefinitions()) { - each.getConstraintDefinition().getConstraintName().ifPresent(result::add); - } - getSqlStatement().getValidateConstraintDefinitions().stream().map(ValidateConstraintDefinitionSegment::getConstraintName).forEach(result::add); - getSqlStatement().getDropConstraintDefinitions().stream().map(DropConstraintDefinitionSegment::getConstraintName).forEach(result::add); - return result; - } - @Override public Collection<ColumnSegment> getIndexColumns() { Collection<ColumnSegment> result = new LinkedList<>(); diff --git a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/ddl/CreateTableStatementContext.java b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/ddl/CreateTableStatementContext.java index 0f139ba18d2..0347be0aee1 100644 --- a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/ddl/CreateTableStatementContext.java +++ b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/type/ddl/CreateTableStatementContext.java @@ -20,12 +20,10 @@ package org.apache.shardingsphere.infra.binder.context.statement.type.ddl; import lombok.Getter; import org.apache.shardingsphere.infra.binder.context.segment.table.TablesContext; import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext; -import org.apache.shardingsphere.infra.binder.context.type.ConstraintAvailable; import org.apache.shardingsphere.infra.binder.context.type.IndexAvailable; import org.apache.shardingsphere.infra.database.core.type.DatabaseType; import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.ColumnDefinitionSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.ConstraintDefinitionSegment; -import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.ConstraintSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.index.IndexSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment; @@ -39,7 +37,7 @@ import java.util.stream.Collectors; * Create table statement context. */ @Getter -public final class CreateTableStatementContext implements SQLStatementContext, IndexAvailable, ConstraintAvailable { +public final class CreateTableStatementContext implements SQLStatementContext, IndexAvailable { private final DatabaseType databaseType; @@ -76,15 +74,6 @@ public final class CreateTableStatementContext implements SQLStatementContext, I return result; } - @Override - public Collection<ConstraintSegment> getConstraints() { - Collection<ConstraintSegment> result = new LinkedList<>(); - for (ConstraintDefinitionSegment each : getSqlStatement().getConstraintDefinitions()) { - each.getConstraintName().ifPresent(result::add); - } - return result; - } - @Override public Collection<ColumnSegment> getIndexColumns() { return getSqlStatement().getConstraintDefinitions().stream().flatMap(each -> each.getIndexColumns().stream()).collect(Collectors.toList()); diff --git a/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/type/ddl/AlterTableStatementContextTest.java b/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/type/ddl/AlterTableStatementContextTest.java index 0f868924b81..fa89a3fd18e 100644 --- a/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/type/ddl/AlterTableStatementContextTest.java +++ b/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/type/ddl/AlterTableStatementContextTest.java @@ -85,8 +85,6 @@ class AlterTableStatementContextTest { assertThat(actual.getTablesContext().getSimpleTables().stream().map(each -> each.getTableName().getIdentifier().getValue()).collect(Collectors.toList()), is(Arrays.asList("foo_tbl", "rename_foo_tbl", "foo_tbl", "foo_tbl", "foo_tbl"))); assertThat(actual.getIndexes().stream().map(each -> each.getIndexName().getIdentifier().getValue()).collect(Collectors.toList()), is(Arrays.asList("index", "drop_index"))); - assertThat(actual.getConstraints().stream().map(each -> each.getIdentifier().getValue()).collect(Collectors.toList()), - is(Arrays.asList("constraint", "constraint", "constraint"))); } private TableNameSegment createTableNameSegment(final String tableName) { diff --git a/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/type/ddl/CreateTableStatementContextTest.java b/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/type/ddl/CreateTableStatementContextTest.java index 639e0231dd1..c7e12769ad3 100644 --- a/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/type/ddl/CreateTableStatementContextTest.java +++ b/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/type/ddl/CreateTableStatementContextTest.java @@ -17,7 +17,6 @@ package org.apache.shardingsphere.infra.binder.context.statement.type.ddl; -import org.apache.shardingsphere.infra.binder.context.type.ConstraintAvailable; import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.ColumnDefinitionSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.ConstraintDefinitionSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.ConstraintSegment; @@ -33,7 +32,6 @@ import java.util.Collections; import java.util.Optional; import java.util.stream.Collectors; -import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.Mockito.mock; @@ -44,10 +42,8 @@ class CreateTableStatementContextTest { @Test void assertNewInstance() { CreateTableStatement sqlStatement = new CreateTableStatement(); - CreateTableStatementContext actual = new CreateTableStatementContext(mock(), sqlStatement); SimpleTableSegment table = new SimpleTableSegment(new TableNameSegment(0, 0, new IdentifierValue("foo_tbl"))); sqlStatement.setTable(table); - assertThat(actual, instanceOf(ConstraintAvailable.class)); ColumnDefinitionSegment columnDefinition = mock(ColumnDefinitionSegment.class); when(columnDefinition.getReferencedTables()).thenReturn(Collections.singletonList(table)); sqlStatement.getColumnDefinitions().add(columnDefinition); @@ -55,9 +51,9 @@ class CreateTableStatementContextTest { when(constraintDefinition.getConstraintName()).thenReturn(Optional.of(new ConstraintSegment(0, 0, new IdentifierValue("foo_fk")))); when(constraintDefinition.getReferencedTable()).thenReturn(Optional.of(table)); sqlStatement.getConstraintDefinitions().add(constraintDefinition); + CreateTableStatementContext actual = new CreateTableStatementContext(mock(), sqlStatement); assertThat(actual.getSqlStatement(), is(sqlStatement)); when(constraintDefinition.getIndexName()).thenReturn(Optional.of(new IndexSegment(0, 0, new IndexNameSegment(0, 0, new IdentifierValue("foo_idx"))))); assertThat(actual.getIndexes().stream().map(each -> each.getIndexName().getIdentifier().getValue()).collect(Collectors.toList()), is(Collections.singletonList("foo_idx"))); - assertThat(actual.getConstraints().stream().map(each -> each.getIdentifier().getValue()).collect(Collectors.toList()), is(Collections.singletonList("foo_fk"))); } } diff --git a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/generator/PipelineDDLDecorator.java b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/generator/PipelineDDLDecorator.java index feb5559b7ce..8acb9e34ddd 100644 --- a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/generator/PipelineDDLDecorator.java +++ b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/generator/PipelineDDLDecorator.java @@ -23,7 +23,7 @@ import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementCont import org.apache.shardingsphere.infra.binder.context.statement.type.ddl.AlterTableStatementContext; import org.apache.shardingsphere.infra.binder.context.statement.type.ddl.CreateIndexStatementContext; import org.apache.shardingsphere.infra.binder.context.statement.type.ddl.CreateTableStatementContext; -import org.apache.shardingsphere.infra.binder.context.type.ConstraintAvailable; +import org.apache.shardingsphere.sql.parser.statement.core.statement.available.ConstraintAvailable; import org.apache.shardingsphere.infra.binder.context.type.IndexAvailable; import org.apache.shardingsphere.infra.binder.engine.SQLBindEngine; import org.apache.shardingsphere.infra.database.core.type.DatabaseType; @@ -116,8 +116,8 @@ public final class PipelineDDLDecorator { replaceMap.put(each.getIndexName(), logicIndexName); } } - if (sqlStatementContext instanceof ConstraintAvailable) { - for (ConstraintSegment each : ((ConstraintAvailable) sqlStatementContext).getConstraints()) { + if (sqlStatementContext.getSqlStatement() instanceof ConstraintAvailable) { + for (ConstraintSegment each : ((ConstraintAvailable) sqlStatementContext.getSqlStatement()).getConstraints()) { String logicConstraint = IndexMetaDataUtils.getLogicIndexName(each.getIdentifier().getValue(), tableNameSegment.getIdentifier().getValue()); replaceMap.put(each, logicConstraint); } diff --git a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/type/ConstraintAvailable.java b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/available/ConstraintAvailable.java similarity index 93% rename from infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/type/ConstraintAvailable.java rename to parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/available/ConstraintAvailable.java index 195843adef6..a4336ae6366 100644 --- a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/type/ConstraintAvailable.java +++ b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/available/ConstraintAvailable.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.infra.binder.context.type; +package org.apache.shardingsphere.sql.parser.statement.core.statement.available; import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.ConstraintSegment; diff --git a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/AlterTableStatement.java b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/AlterTableStatement.java index d50a950c150..3cf2251a2a2 100644 --- a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/AlterTableStatement.java +++ b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/AlterTableStatement.java @@ -25,6 +25,7 @@ import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.al import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.alter.ModifyCollectionRetrievalSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.alter.ModifyColumnDefinitionSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.alter.RenameColumnSegment; +import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.ConstraintSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.alter.AddConstraintDefinitionSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.alter.DropConstraintDefinitionSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.alter.ModifyConstraintDefinitionSegment; @@ -36,6 +37,7 @@ import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.Con import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.LockTableSegment; 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.ConstraintAvailable; import java.util.Collection; import java.util.LinkedList; @@ -46,7 +48,7 @@ import java.util.Optional; */ @Getter @Setter -public final class AlterTableStatement extends AbstractSQLStatement implements DDLStatement { +public final class AlterTableStatement extends AbstractSQLStatement implements DDLStatement, ConstraintAvailable { private SimpleTableSegment table; @@ -126,4 +128,15 @@ public final class AlterTableStatement extends AbstractSQLStatement implements D public Optional<LockTableSegment> getLockTableSegment() { return Optional.ofNullable(lockTableSegment); } + + @Override + public Collection<ConstraintSegment> getConstraints() { + Collection<ConstraintSegment> result = new LinkedList<>(); + for (AddConstraintDefinitionSegment each : addConstraintDefinitions) { + each.getConstraintDefinition().getConstraintName().ifPresent(result::add); + } + validateConstraintDefinitions.stream().map(ValidateConstraintDefinitionSegment::getConstraintName).forEach(result::add); + dropConstraintDefinitions.stream().map(DropConstraintDefinitionSegment::getConstraintName).forEach(result::add); + return result; + } } diff --git a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/CreateTableStatement.java b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/CreateTableStatement.java index 48a1618512e..fe86d762598 100644 --- a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/CreateTableStatement.java +++ b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/ddl/CreateTableStatement.java @@ -21,10 +21,12 @@ import lombok.Getter; import lombok.Setter; import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.ColumnDefinitionSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.ConstraintDefinitionSegment; +import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.ConstraintSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.CreateTableOptionSegment; 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.ConstraintAvailable; import org.apache.shardingsphere.sql.parser.statement.core.statement.dml.SelectStatement; import java.util.Collection; @@ -37,7 +39,7 @@ import java.util.Optional; */ @Getter @Setter -public final class CreateTableStatement extends AbstractSQLStatement implements DDLStatement { +public final class CreateTableStatement extends AbstractSQLStatement implements DDLStatement, ConstraintAvailable { private SimpleTableSegment table; @@ -81,4 +83,13 @@ public final class CreateTableStatement extends AbstractSQLStatement implements public Optional<CreateTableOptionSegment> getCreateTableOption() { return Optional.ofNullable(createTableOption); } + + @Override + public Collection<ConstraintSegment> getConstraints() { + Collection<ConstraintSegment> result = new LinkedList<>(); + for (ConstraintDefinitionSegment each : constraintDefinitions) { + each.getConstraintName().ifPresent(result::add); + } + return result; + } }