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 3ac84715ffb Refactor constructor of CreateIndexStatement to empty
buildAttributes (#38314)
3ac84715ffb is described below
commit 3ac84715ffbc9231fe696b94736fb0286d55f60b
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Mar 3 16:28:08 2026 +0800
Refactor constructor of CreateIndexStatement to empty buildAttributes
(#38314)
* Refactor DorisCreateFunctionStatement and OracleCreateFunctionStatement
* Refactor constructor of CreateIndexStatement to empty buildAttributes
* Refactor constructor of CreateIndexStatement to empty buildAttributes
---
.../ShardingCreateIndexSupportedCheckerTest.java | 62 ++++++++++++----------
.../rewrite/token/pojo/IndexTokenTest.java | 3 +-
.../statement/ddl/CreateIndexStatementBinder.java | 21 +++++---
.../CreateIndexPushDownMetaDataRefresherTest.java | 15 +++---
.../statement/type/DorisDDLStatementVisitor.java | 39 +++++++-------
.../statement/type/HiveDDLStatementVisitor.java | 19 ++++---
.../statement/type/MySQLDDLStatementVisitor.java | 22 +++++---
.../type/OpenGaussDDLStatementVisitor.java | 24 ++++++---
.../statement/type/OracleDDLStatementVisitor.java | 13 ++---
.../type/PostgreSQLDDLStatementVisitor.java | 26 +++++----
.../type/SQLServerDDLStatementVisitor.java | 11 ++--
.../type/ddl/index/CreateIndexStatement.java | 42 +++++++++------
12 files changed, 175 insertions(+), 122 deletions(-)
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingCreateIndexSupportedCheckerTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingCreateIndexSupportedCheckerTest.java
index 639f8eb9e77..325082fa81b 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingCreateIndexSupportedCheckerTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingCreateIndexSupportedCheckerTest.java
@@ -38,6 +38,8 @@ import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
+import java.util.Collections;
+
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.mock;
@@ -56,10 +58,11 @@ class ShardingCreateIndexSupportedCheckerTest {
@Test
void assertCheckWhenTableExistIndexNotExistForPostgreSQL() {
- CreateIndexStatement sqlStatement = new
CreateIndexStatement(databaseType);
- sqlStatement.setTable(new SimpleTableSegment(new TableNameSegment(0,
0, new IdentifierValue("t_order"))));
- sqlStatement.setIndex(new IndexSegment(0, 0, new IndexNameSegment(0,
0, new IdentifierValue("t_order_index"))));
- sqlStatement.buildAttributes();
+ CreateIndexStatement sqlStatement = CreateIndexStatement.builder()
+ .databaseType(databaseType)
+ .table(new SimpleTableSegment(new TableNameSegment(0, 0, new
IdentifierValue("t_order"))))
+ .index(new IndexSegment(0, 0, new IndexNameSegment(0, 0, new
IdentifierValue("t_order_index"))))
+ .build();
ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
when(schema.containsTable("t_order")).thenReturn(true);
assertDoesNotThrow(() -> new
ShardingCreateIndexSupportedChecker().check(rule, database, schema, new
CommonSQLStatementContext(sqlStatement)));
@@ -67,10 +70,11 @@ class ShardingCreateIndexSupportedCheckerTest {
@Test
void assertCheckWhenTableNotExistIndexNotExistForPostgreSQL() {
- CreateIndexStatement sqlStatement = new
CreateIndexStatement(databaseType);
- sqlStatement.setTable(new SimpleTableSegment(new TableNameSegment(0,
0, new IdentifierValue("t_order"))));
- sqlStatement.setIndex(new IndexSegment(0, 0, new IndexNameSegment(0,
0, new IdentifierValue("t_order_index"))));
- sqlStatement.buildAttributes();
+ CreateIndexStatement sqlStatement = CreateIndexStatement.builder()
+ .databaseType(databaseType)
+ .table(new SimpleTableSegment(new TableNameSegment(0, 0, new
IdentifierValue("t_order"))))
+ .index(new IndexSegment(0, 0, new IndexNameSegment(0, 0, new
IdentifierValue("t_order_index"))))
+ .build();
ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
when(schema.containsTable("t_order")).thenReturn(false);
assertThrows(NoSuchTableException.class, () -> new
ShardingCreateIndexSupportedChecker().check(rule, database, schema, new
CommonSQLStatementContext(sqlStatement)));
@@ -78,10 +82,11 @@ class ShardingCreateIndexSupportedCheckerTest {
@Test
void assertCheckWhenTableExistIndexExistForPostgreSQL() {
- CreateIndexStatement sqlStatement = new
CreateIndexStatement(databaseType);
- sqlStatement.setTable(new SimpleTableSegment(new TableNameSegment(0,
0, new IdentifierValue("t_order"))));
- sqlStatement.setIndex(new IndexSegment(0, 0, new IndexNameSegment(0,
0, new IdentifierValue("t_order_index"))));
- sqlStatement.buildAttributes();
+ CreateIndexStatement sqlStatement = CreateIndexStatement.builder()
+ .databaseType(databaseType)
+ .table(new SimpleTableSegment(new TableNameSegment(0, 0, new
IdentifierValue("t_order"))))
+ .index(new IndexSegment(0, 0, new IndexNameSegment(0, 0, new
IdentifierValue("t_order_index"))))
+ .build();
ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
when(schema.containsTable("t_order")).thenReturn(true);
when(schema.containsIndex("t_order",
"t_order_index")).thenReturn(true);
@@ -90,11 +95,12 @@ class ShardingCreateIndexSupportedCheckerTest {
@Test
void assertCheckWithoutIndexNameWhenTableExistIndexNotExistForPostgreSQL()
{
- CreateIndexStatement sqlStatement = new
CreateIndexStatement(databaseType);
- sqlStatement.setTable(new SimpleTableSegment(new TableNameSegment(0,
0, new IdentifierValue("t_order"))));
- sqlStatement.getColumns().add(new ColumnSegment(0, 0, new
IdentifierValue("content")));
- sqlStatement.setAnonymousIndexStartIndex(10);
- sqlStatement.buildAttributes();
+ CreateIndexStatement sqlStatement = CreateIndexStatement.builder()
+ .databaseType(databaseType)
+ .table(new SimpleTableSegment(new TableNameSegment(0, 0, new
IdentifierValue("t_order"))))
+ .columns(Collections.singleton(new ColumnSegment(0, 0, new
IdentifierValue("content"))))
+ .anonymousIndexStartIndex(10)
+ .build();
ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
when(schema.containsTable("t_order")).thenReturn(true);
assertDoesNotThrow(() -> new
ShardingCreateIndexSupportedChecker().check(rule, database, schema, new
CommonSQLStatementContext(sqlStatement)));
@@ -102,11 +108,12 @@ class ShardingCreateIndexSupportedCheckerTest {
@Test
void
assertCheckWithoutIndexNameWhenTableNotExistIndexNotExistForPostgreSQL() {
- CreateIndexStatement sqlStatement = new
CreateIndexStatement(databaseType);
- sqlStatement.setTable(new SimpleTableSegment(new TableNameSegment(0,
0, new IdentifierValue("t_order"))));
- sqlStatement.getColumns().add(new ColumnSegment(0, 0, new
IdentifierValue("content")));
- sqlStatement.setAnonymousIndexStartIndex(10);
- sqlStatement.buildAttributes();
+ CreateIndexStatement sqlStatement = CreateIndexStatement.builder()
+ .databaseType(databaseType)
+ .table(new SimpleTableSegment(new TableNameSegment(0, 0, new
IdentifierValue("t_order"))))
+ .columns(Collections.singleton(new ColumnSegment(0, 0, new
IdentifierValue("content"))))
+ .anonymousIndexStartIndex(10)
+ .build();
ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
when(schema.containsTable("t_order")).thenReturn(false);
assertThrows(NoSuchTableException.class, () -> new
ShardingCreateIndexSupportedChecker().check(rule, database, schema, new
CommonSQLStatementContext(sqlStatement)));
@@ -114,11 +121,12 @@ class ShardingCreateIndexSupportedCheckerTest {
@Test
void assertCheckWithoutIndexNameWhenTableExistIndexExistForPostgreSQL() {
- CreateIndexStatement sqlStatement = new
CreateIndexStatement(databaseType);
- sqlStatement.setTable(new SimpleTableSegment(new TableNameSegment(0,
0, new IdentifierValue("t_order"))));
- sqlStatement.getColumns().add(new ColumnSegment(0, 0, new
IdentifierValue("content")));
- sqlStatement.setAnonymousIndexStartIndex(10);
- sqlStatement.buildAttributes();
+ CreateIndexStatement sqlStatement = CreateIndexStatement.builder()
+ .databaseType(databaseType)
+ .table(new SimpleTableSegment(new TableNameSegment(0, 0, new
IdentifierValue("t_order"))))
+ .columns(Collections.singleton(new ColumnSegment(0, 0, new
IdentifierValue("content"))))
+ .anonymousIndexStartIndex(10)
+ .build();
ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
when(schema.containsTable("t_order")).thenReturn(true);
when(schema.containsIndex("t_order", "content_idx")).thenReturn(true);
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/IndexTokenTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/IndexTokenTest.java
index eb4310e7f2e..1488e493606 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/IndexTokenTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/IndexTokenTest.java
@@ -63,8 +63,7 @@ class IndexTokenTest {
@Test
void assertToStringWithShardingTableAndGeneratedIndex() {
- CreateIndexStatement sqlStatement = new
CreateIndexStatement(databaseType);
- sqlStatement.buildAttributes();
+ CreateIndexStatement sqlStatement =
CreateIndexStatement.builder().databaseType(databaseType).build();
CommonSQLStatementContext sqlStatementContext = new
CommonSQLStatementContext(sqlStatement);
IndexToken indexToken = new IndexToken(0, 0, new
IdentifierValue("bar_idx"), sqlStatementContext, mock(ShardingRule.class),
mockSchema());
assertThat(indexToken.toString(mockRouteUnit()), is("
bar_idx_foo_tbl_0 "));
diff --git
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/CreateIndexStatementBinder.java
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/CreateIndexStatementBinder.java
index 5470c91c47d..abeedb10905 100644
---
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/CreateIndexStatementBinder.java
+++
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/CreateIndexStatementBinder.java
@@ -49,14 +49,19 @@ public final class CreateIndexStatementBinder implements
SQLStatementBinder<Crea
}
private CreateIndexStatement copy(final CreateIndexStatement sqlStatement,
final SimpleTableSegment boundTable, final Collection<ColumnSegment>
boundColumns) {
- CreateIndexStatement result = new
CreateIndexStatement(sqlStatement.getDatabaseType());
- result.setTable(boundTable);
- result.getColumns().addAll(boundColumns);
- result.setIndex(sqlStatement.getIndex());
-
sqlStatement.getAnonymousIndexStartIndex().ifPresent(result::setAnonymousIndexStartIndex);
- result.setIfNotExists(sqlStatement.isIfNotExists());
- sqlStatement.getAlgorithmType().ifPresent(result::setAlgorithmType);
- sqlStatement.getLockTable().ifPresent(result::setLockTable);
+ CreateIndexStatement result = CreateIndexStatement.builder()
+ .databaseType(sqlStatement.getDatabaseType())
+ .index(sqlStatement.getIndex())
+ .table(boundTable)
+ .ifNotExists(sqlStatement.isIfNotExists())
+
.anonymousIndexStartIndex(sqlStatement.getAnonymousIndexStartIndex().orElse(null))
+ .algorithmType(sqlStatement.getAlgorithmType().orElse(null))
+ .lockTable(sqlStatement.getLockTable().orElse(null))
+ .columns(boundColumns)
+ .indexType(sqlStatement.getIndexType())
+ .properties(sqlStatement.getProperties())
+ .comment(sqlStatement.getComment())
+ .build();
SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
return result;
}
diff --git
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/index/CreateIndexPushDownMetaDataRefresherTest.java
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/index/CreateIndexPushDownMetaDataRefresherTest.java
index fbcca89d0ca..388b61c591e 100644
---
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/index/CreateIndexPushDownMetaDataRefresherTest.java
+++
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/index/CreateIndexPushDownMetaDataRefresherTest.java
@@ -79,18 +79,17 @@ class CreateIndexPushDownMetaDataRefresherTest {
}
private CreateIndexStatement createCreateIndexStatement() {
- CreateIndexStatement result = new CreateIndexStatement(databaseType);
- result.setTable(new SimpleTableSegment(new TableNameSegment(0, 0, new
IdentifierValue("foo_tbl"))));
- result.setIndex(new IndexSegment(0, 0, new IndexNameSegment(0, 0, new
IdentifierValue("idx_foo"))));
- result.getColumns().add(new ColumnSegment(0, 0, new
IdentifierValue("order_id")));
- result.buildAttributes();
- return result;
+ return CreateIndexStatement.builder()
+ .databaseType(databaseType)
+ .table(new SimpleTableSegment(new TableNameSegment(0, 0, new
IdentifierValue("foo_tbl"))))
+ .index(new IndexSegment(0, 0, new IndexNameSegment(0, 0, new
IdentifierValue("idx_foo"))))
+ .columns(Collections.singleton(new ColumnSegment(0, 0, new
IdentifierValue("order_id"))))
+ .build();
}
@Test
void assertRefreshThrowsWhenIndexCountInvalid() {
- CreateIndexStatement sqlStatement = new
CreateIndexStatement(databaseType);
- sqlStatement.buildAttributes();
+ CreateIndexStatement sqlStatement =
CreateIndexStatement.builder().databaseType(databaseType).build();
assertThrows(IllegalArgumentException.class, () ->
refresher.refresh(metaDataManagerPersistService,
createDatabase(Collections.emptyList()), "logic_ds",
"foo_schema", databaseType, sqlStatement, new ConfigurationProperties(new
Properties())));
verifyNoInteractions(metaDataManagerPersistService);
diff --git
a/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/type/DorisDDLStatementVisitor.java
b/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/type/DorisDDLStatementVisitor.java
index 80cf0587175..40b7d285778 100644
---
a/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/type/DorisDDLStatementVisitor.java
+++
b/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/type/DorisDDLStatementVisitor.java
@@ -1146,32 +1146,33 @@ public final class DorisDDLStatementVisitor extends
DorisStatementVisitor implem
@SuppressWarnings({"unchecked", "rawtypes"})
@Override
public ASTNode visitCreateIndex(final CreateIndexContext ctx) {
- CreateIndexStatement result = new
CreateIndexStatement(getDatabaseType());
- result.setTable((SimpleTableSegment) visit(ctx.tableName()));
- result.setIfNotExists(null != ctx.ifNotExists());
IndexNameSegment indexName = new
IndexNameSegment(ctx.indexName().start.getStartIndex(),
ctx.indexName().stop.getStopIndex(), new
IdentifierValue(ctx.indexName().getText()));
- result.setIndex(new
IndexSegment(ctx.indexName().start.getStartIndex(),
ctx.indexName().stop.getStopIndex(), indexName));
- result.getColumns().addAll(((CollectionValue)
visit(ctx.keyListWithExpression())).getValue());
- if (null != ctx.dorisIndexTypeClause()) {
-
result.setIndexType(ctx.dorisIndexTypeClause().getStop().getText());
- }
- if (null != ctx.propertiesClause()) {
-
result.setProperties(extractPropertiesSegment(ctx.propertiesClause()));
- }
- if (null != ctx.commentClause() && null !=
ctx.commentClause().literals()) {
- String commentText =
SQLUtils.getExactlyValue(ctx.commentClause().literals().getText());
- result.setComment(commentText);
- CommentSegment commentSegment = new CommentSegment(commentText,
ctx.commentClause().literals().getStart().getStartIndex(),
ctx.commentClause().literals().getStop().getStopIndex());
- result.getComments().add(commentSegment);
- }
+ String comment = null == ctx.commentClause() || null ==
ctx.commentClause().literals() ? null :
SQLUtils.getExactlyValue(ctx.commentClause().literals().getText());
+ AlgorithmTypeSegment algorithmType = null;
+ LockTableSegment lockTable = null;
if (null != ctx.algorithmOptionAndLockOption()) {
if (null !=
ctx.algorithmOptionAndLockOption().alterAlgorithmOption()) {
- result.setAlgorithmType((AlgorithmTypeSegment)
visit(ctx.algorithmOptionAndLockOption().alterAlgorithmOption()));
+ algorithmType = (AlgorithmTypeSegment)
visit(ctx.algorithmOptionAndLockOption().alterAlgorithmOption());
}
if (null != ctx.algorithmOptionAndLockOption().alterLockOption()) {
- result.setLockTable((LockTableSegment)
visit(ctx.algorithmOptionAndLockOption().alterLockOption()));
+ lockTable = (LockTableSegment)
visit(ctx.algorithmOptionAndLockOption().alterLockOption());
}
}
+ CreateIndexStatement result = CreateIndexStatement.builder()
+ .databaseType(getDatabaseType())
+ .table((SimpleTableSegment) visit(ctx.tableName()))
+ .ifNotExists(null != ctx.ifNotExists())
+ .index(new IndexSegment(ctx.indexName().start.getStartIndex(),
ctx.indexName().stop.getStopIndex(), indexName))
+ .columns(((CollectionValue)
visit(ctx.keyListWithExpression())).getValue())
+ .indexType(null == ctx.dorisIndexTypeClause() ? null :
ctx.dorisIndexTypeClause().getStop().getText())
+ .properties(null == ctx.propertiesClause() ? null :
extractPropertiesSegment(ctx.propertiesClause()))
+ .comment(comment)
+ .algorithmType(algorithmType)
+ .lockTable(lockTable)
+ .build();
+ if (null != ctx.commentClause() && null !=
ctx.commentClause().literals()) {
+ result.getComments().add(new CommentSegment(comment,
ctx.commentClause().literals().getStart().getStartIndex(),
ctx.commentClause().literals().getStop().getStopIndex()));
+ }
return result;
}
diff --git
a/parser/sql/engine/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/engine/hive/visitor/statement/type/HiveDDLStatementVisitor.java
b/parser/sql/engine/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/engine/hive/visitor/statement/type/HiveDDLStatementVisitor.java
index 87ecb79631b..3e728558e45 100644
---
a/parser/sql/engine/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/engine/hive/visitor/statement/type/HiveDDLStatementVisitor.java
+++
b/parser/sql/engine/dialect/hive/src/main/java/org/apache/shardingsphere/sql/parser/engine/hive/visitor/statement/type/HiveDDLStatementVisitor.java
@@ -94,7 +94,9 @@ import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.Se
import
org.apache.shardingsphere.sql.parser.statement.core.value.collection.CollectionValue;
import
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
+import java.util.Collection;
import java.util.Collections;
+import java.util.LinkedList;
/**
* DDL statement visitor for Hive.
@@ -371,17 +373,20 @@ public final class HiveDDLStatementVisitor extends
HiveStatementVisitor implemen
@Override
public ASTNode visitCreateIndex(final CreateIndexContext ctx) {
- CreateIndexStatement result = new
CreateIndexStatement(getDatabaseType());
- result.setIndex(new
IndexSegment(ctx.indexName().getStart().getStartIndex(),
ctx.indexName().getStop().getStopIndex(),
- new
IndexNameSegment(ctx.indexName().getStart().getStartIndex(),
ctx.indexName().getStop().getStopIndex(),
- new IdentifierValue(ctx.indexName().getText()))));
- result.setTable((SimpleTableSegment) visit(ctx.tableNameWithDb()));
+ Collection<ColumnSegment> columns = new LinkedList<>();
if (null != ctx.columnNamesCommonClause()) {
for (ColumnNameContext each :
ctx.columnNamesCommonClause().columnNames().columnName()) {
- result.getColumns().add(new
ColumnSegment(each.getStart().getStartIndex(), each.getStop().getStopIndex(),
new IdentifierValue(each.getText())));
+ columns.add(new ColumnSegment(each.getStart().getStartIndex(),
each.getStop().getStopIndex(), new IdentifierValue(each.getText())));
}
}
- return result;
+ return CreateIndexStatement.builder()
+ .databaseType(getDatabaseType())
+ .index(new
IndexSegment(ctx.indexName().getStart().getStartIndex(),
ctx.indexName().getStop().getStopIndex(),
+ new
IndexNameSegment(ctx.indexName().getStart().getStartIndex(),
ctx.indexName().getStop().getStopIndex(),
+ new
IdentifierValue(ctx.indexName().getText()))))
+ .table((SimpleTableSegment) visit(ctx.tableNameWithDb()))
+ .columns(columns)
+ .build();
}
@Override
diff --git
a/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
b/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
index a536d30b987..cf791439253 100644
---
a/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
+++
b/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
@@ -706,23 +706,29 @@ public final class MySQLDDLStatementVisitor extends
MySQLStatementVisitor implem
@SuppressWarnings({"unchecked", "rawtypes"})
@Override
public ASTNode visitCreateIndex(final CreateIndexContext ctx) {
- CreateIndexStatement result = new
CreateIndexStatement(getDatabaseType());
- result.setTable((SimpleTableSegment) visit(ctx.tableName()));
IndexNameSegment indexName = new
IndexNameSegment(ctx.indexName().start.getStartIndex(),
ctx.indexName().stop.getStopIndex(), new
IdentifierValue(ctx.indexName().getText()));
- result.setIndex(new
IndexSegment(ctx.indexName().start.getStartIndex(),
ctx.indexName().stop.getStopIndex(), indexName));
- result.getColumns().addAll(((CollectionValue)
visit(ctx.keyListWithExpression())).getValue());
+ IndexSegment index = new
IndexSegment(ctx.indexName().start.getStartIndex(),
ctx.indexName().stop.getStopIndex(), indexName);
if (null != ctx.createIndexSpecification() && null !=
ctx.createIndexSpecification().UNIQUE()) {
- result.getIndex().setUniqueKey(true);
+ index.setUniqueKey(true);
}
+ AlgorithmTypeSegment algorithmType = null;
+ LockTableSegment lockTable = null;
if (null != ctx.algorithmOptionAndLockOption()) {
if (null !=
ctx.algorithmOptionAndLockOption().alterAlgorithmOption()) {
- result.setAlgorithmType((AlgorithmTypeSegment)
visit(ctx.algorithmOptionAndLockOption().alterAlgorithmOption()));
+ algorithmType = (AlgorithmTypeSegment)
visit(ctx.algorithmOptionAndLockOption().alterAlgorithmOption());
}
if (null != ctx.algorithmOptionAndLockOption().alterLockOption()) {
- result.setLockTable((LockTableSegment)
visit(ctx.algorithmOptionAndLockOption().alterLockOption()));
+ lockTable = (LockTableSegment)
visit(ctx.algorithmOptionAndLockOption().alterLockOption());
}
}
- return result;
+ return CreateIndexStatement.builder()
+ .databaseType(getDatabaseType())
+ .table((SimpleTableSegment) visit(ctx.tableName()))
+ .index(index)
+ .columns(((CollectionValue)
visit(ctx.keyListWithExpression())).getValue())
+ .algorithmType(algorithmType)
+ .lockTable(lockTable)
+ .build();
}
@Override
diff --git
a/parser/sql/engine/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/engine/opengauss/visitor/statement/type/OpenGaussDDLStatementVisitor.java
b/parser/sql/engine/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/engine/opengauss/visitor/statement/type/OpenGaussDDLStatementVisitor.java
index aeaae3a78f7..fdf42cbaccf 100644
---
a/parser/sql/engine/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/engine/opengauss/visitor/statement/type/OpenGaussDDLStatementVisitor.java
+++
b/parser/sql/engine/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/engine/opengauss/visitor/statement/type/OpenGaussDDLStatementVisitor.java
@@ -532,16 +532,24 @@ public final class OpenGaussDDLStatementVisitor extends
OpenGaussStatementVisito
@SuppressWarnings("unchecked")
@Override
public ASTNode visitCreateIndex(final CreateIndexContext ctx) {
- CreateIndexStatement result = new
CreateIndexStatement(getDatabaseType());
- result.setIfNotExists(null != ctx.ifNotExists());
- result.setTable((SimpleTableSegment) visit(ctx.tableName()));
- result.getColumns().addAll(((CollectionValue<ColumnSegment>)
visit(ctx.indexParams())).getValue());
+ SimpleTableSegment table = (SimpleTableSegment) visit(ctx.tableName());
+ Collection<ColumnSegment> columns = ((CollectionValue<ColumnSegment>)
visit(ctx.indexParams())).getValue();
if (null == ctx.indexName()) {
-
result.setAnonymousIndexStartIndex(ctx.ON().getSymbol().getStartIndex() - 1);
- } else {
- result.setIndex((IndexSegment) visit(ctx.indexName()));
+ return CreateIndexStatement.builder()
+ .databaseType(getDatabaseType())
+ .ifNotExists(null != ctx.ifNotExists())
+ .table(table)
+ .columns(columns)
+
.anonymousIndexStartIndex(ctx.ON().getSymbol().getStartIndex() - 1)
+ .build();
}
- return result;
+ return CreateIndexStatement.builder()
+ .databaseType(getDatabaseType())
+ .ifNotExists(null != ctx.ifNotExists())
+ .table(table)
+ .columns(columns)
+ .index((IndexSegment) visit(ctx.indexName()))
+ .build();
}
@Override
diff --git
a/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
b/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
index 99c03b51f0e..ae54a81b4cd 100644
---
a/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
+++
b/parser/sql/engine/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/engine/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
@@ -829,16 +829,17 @@ public final class OracleDDLStatementVisitor extends
OracleStatementVisitor impl
@SuppressWarnings({"rawtypes", "unchecked"})
@Override
public ASTNode visitCreateIndex(final CreateIndexContext ctx) {
- CreateIndexStatement result = new
CreateIndexStatement(getDatabaseType());
+ SimpleTableSegment table = null;
+ Collection<ColumnSegment> columns = Collections.emptyList();
if (null != ctx.createIndexDefinitionClause().tableIndexClause()) {
- result.setTable((SimpleTableSegment)
visit(ctx.createIndexDefinitionClause().tableIndexClause().tableName()));
- result.getColumns().addAll(((CollectionValue)
visit(ctx.createIndexDefinitionClause().tableIndexClause().indexExpressions())).getValue());
+ table = (SimpleTableSegment)
visit(ctx.createIndexDefinitionClause().tableIndexClause().tableName());
+ columns = ((CollectionValue)
visit(ctx.createIndexDefinitionClause().tableIndexClause().indexExpressions())).getValue();
}
- result.setIndex((IndexSegment) visit(ctx.indexName()));
+ IndexSegment index = (IndexSegment) visit(ctx.indexName());
if (null != ctx.createIndexSpecification() && null !=
ctx.createIndexSpecification().UNIQUE()) {
- result.getIndex().setUniqueKey(true);
+ index.setUniqueKey(true);
}
- return result;
+ return
CreateIndexStatement.builder().databaseType(getDatabaseType()).table(table).columns(columns).index(index).build();
}
@Override
diff --git
a/parser/sql/engine/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/engine/postgresql/visitor/statement/type/PostgreSQLDDLStatementVisitor.java
b/parser/sql/engine/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/engine/postgresql/visitor/statement/type/PostgreSQLDDLStatementVisitor.java
index 768b864623c..61ac1cc8042 100644
---
a/parser/sql/engine/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/engine/postgresql/visitor/statement/type/PostgreSQLDDLStatementVisitor.java
+++
b/parser/sql/engine/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/engine/postgresql/visitor/statement/type/PostgreSQLDDLStatementVisitor.java
@@ -674,16 +674,24 @@ public final class PostgreSQLDDLStatementVisitor extends
PostgreSQLStatementVisi
@SuppressWarnings("unchecked")
@Override
public ASTNode visitCreateIndex(final CreateIndexContext ctx) {
- CreateIndexStatement result = new
CreateIndexStatement(getDatabaseType());
- result.setIfNotExists(null != ctx.ifNotExists());
- result.setTable((SimpleTableSegment) visit(ctx.tableName()));
- result.getColumns().addAll(((CollectionValue<ColumnSegment>)
visit(ctx.indexParams())).getValue());
- if (null != ctx.indexName()) {
- result.setIndex((IndexSegment) visit(ctx.indexName()));
- } else {
-
result.setAnonymousIndexStartIndex(ctx.ON().getSymbol().getStartIndex() - 1);
+ SimpleTableSegment table = (SimpleTableSegment) visit(ctx.tableName());
+ Collection<ColumnSegment> columns = ((CollectionValue<ColumnSegment>)
visit(ctx.indexParams())).getValue();
+ if (null == ctx.indexName()) {
+ return CreateIndexStatement.builder()
+ .databaseType(getDatabaseType())
+ .ifNotExists(null != ctx.ifNotExists())
+ .table(table)
+ .columns(columns)
+
.anonymousIndexStartIndex(ctx.ON().getSymbol().getStartIndex() - 1)
+ .build();
}
- return result;
+ return CreateIndexStatement.builder()
+ .databaseType(getDatabaseType())
+ .ifNotExists(null != ctx.ifNotExists())
+ .table(table)
+ .columns(columns)
+ .index((IndexSegment) visit(ctx.indexName()))
+ .build();
}
@Override
diff --git
a/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/type/SQLServerDDLStatementVisitor.java
b/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/type/SQLServerDDLStatementVisitor.java
index a9137d08bd2..a5a19abba04 100644
---
a/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/type/SQLServerDDLStatementVisitor.java
+++
b/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/type/SQLServerDDLStatementVisitor.java
@@ -328,11 +328,12 @@ public final class SQLServerDDLStatementVisitor extends
SQLServerStatementVisito
@SuppressWarnings({"rawtypes", "unchecked"})
@Override
public ASTNode visitCreateIndex(final CreateIndexContext ctx) {
- CreateIndexStatement result = new
CreateIndexStatement(getDatabaseType());
- result.setTable((SimpleTableSegment) visit(ctx.tableName()));
- result.setIndex((IndexSegment) visit(ctx.indexName()));
- result.getColumns().addAll(((CollectionValue)
visit(ctx.columnNamesWithSort())).getValue());
- return result;
+ return CreateIndexStatement.builder()
+ .databaseType(getDatabaseType())
+ .table((SimpleTableSegment) visit(ctx.tableName()))
+ .index((IndexSegment) visit(ctx.indexName()))
+ .columns(((CollectionValue)
visit(ctx.columnNamesWithSort())).getValue())
+ .build();
}
@Override
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/index/CreateIndexStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/index/CreateIndexStatement.java
index 621959c10ce..2a75813a86a 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/index/CreateIndexStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/index/CreateIndexStatement.java
@@ -17,8 +17,8 @@
package
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.index;
+import lombok.Builder;
import lombok.Getter;
-import lombok.Setter;
import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.index.IndexNameSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.index.IndexSegment;
@@ -43,33 +43,46 @@ import java.util.stream.Collectors;
* Create index statement.
*/
@Getter
-@Setter
public final class CreateIndexStatement extends DDLStatement {
- private IndexSegment index;
+ private final IndexSegment index;
- private SimpleTableSegment table;
+ private final SimpleTableSegment table;
- private boolean ifNotExists;
+ private final boolean ifNotExists;
- private Integer anonymousIndexStartIndex;
+ private final Integer anonymousIndexStartIndex;
- private AlgorithmTypeSegment algorithmType;
+ private final AlgorithmTypeSegment algorithmType;
- private LockTableSegment lockTable;
+ private final LockTableSegment lockTable;
- private final Collection<ColumnSegment> columns = new LinkedList<>();
+ private final Collection<ColumnSegment> columns;
- private String indexType;
+ private final String indexType;
- private PropertiesSegment properties;
+ private final PropertiesSegment properties;
- private String comment;
+ private final String comment;
- private SQLStatementAttributes attributes;
+ private final SQLStatementAttributes attributes;
- public CreateIndexStatement(final DatabaseType databaseType) {
+ @Builder
+ private CreateIndexStatement(final DatabaseType databaseType, final
IndexSegment index, final SimpleTableSegment table, final boolean ifNotExists,
+ final Integer anonymousIndexStartIndex, final
AlgorithmTypeSegment algorithmType, final LockTableSegment lockTable,
+ final Collection<ColumnSegment> columns,
final String indexType, final PropertiesSegment properties, final String
comment) {
super(databaseType);
+ this.index = index;
+ this.table = table;
+ this.ifNotExists = ifNotExists;
+ this.anonymousIndexStartIndex = anonymousIndexStartIndex;
+ this.algorithmType = algorithmType;
+ this.lockTable = lockTable;
+ this.columns = null == columns ? new LinkedList<>() : new
LinkedList<>(columns);
+ this.indexType = indexType;
+ this.properties = properties;
+ this.comment = comment;
+ attributes = new SQLStatementAttributes(new
TableSQLStatementAttribute(table), new CreateIndexIndexSQLStatementAttribute());
}
/**
@@ -101,7 +114,6 @@ public final class CreateIndexStatement extends
DDLStatement {
@Override
public void buildAttributes() {
- attributes = new SQLStatementAttributes(new
TableSQLStatementAttribute(table), new CreateIndexIndexSQLStatementAttribute());
}
private class CreateIndexIndexSQLStatementAttribute implements
IndexSQLStatementAttribute {