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 94098956652 Refactor constructor of CreateTableStatement to empty
buildAttributes (#38319)
94098956652 is described below
commit 94098956652dddc9a1bf00501457a5b8c136414b
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Mar 3 21:56:52 2026 +0800
Refactor constructor of CreateTableStatement to empty buildAttributes
(#38319)
* Refactor constructor of CreateTableStatement to empty buildAttributes
* Refactor constructor of CreateTableStatement to empty buildAttributes
---
.../ddl/EncryptCreateTableTokenGeneratorTest.java | 12 +++---
...ShardingCreateFunctionSupportedCheckerTest.java | 3 +-
...hardingCreateProcedureSupportedCheckerTest.java | 6 ++-
.../ShardingCreateTableSupportedCheckerTest.java | 16 ++++----
...ShardingCreateTableRouteContextCheckerTest.java | 27 +++++++------
.../statement/ddl/CreateTableStatementBinder.java | 21 +++++-----
.../single/route/SingleSQLRouterTest.java | 10 ++---
.../single/route/engine/SingleRouteEngineTest.java | 4 +-
.../transaction/util/AutoCommitUtilsTest.java | 2 +-
.../CreateTablePushDownMetaDataRefresherTest.java | 12 ++++--
.../statement/type/DorisDDLStatementVisitor.java | 33 +++++++++++-----
.../type/FirebirdDDLStatementVisitor.java | 17 +++++---
.../statement/type/HiveDDLStatementVisitor.java | 17 +++++---
.../statement/type/MySQLDDLStatementVisitor.java | 25 ++++++------
.../type/OpenGaussDDLStatementVisitor.java | 17 +++++---
.../statement/type/OracleDDLStatementVisitor.java | 15 +++++---
.../type/PostgreSQLDDLStatementVisitor.java | 17 +++++---
.../statement/type/PrestoDDLStatementVisitor.java | 20 +++++++---
.../statement/type/SQL92DDLStatementVisitor.java | 17 +++++---
.../statement/SQLServerStatementVisitor.java | 18 ++++-----
.../type/SQLServerDDLStatementVisitor.java | 15 +++++---
.../type/ddl/index/CreateIndexStatement.java | 3 +-
.../type/ddl/table/CreateTableStatement.java | 45 ++++++++++++++--------
.../backend/connector/ProxySQLExecutorTest.java | 7 ++--
24 files changed, 234 insertions(+), 145 deletions(-)
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/ddl/EncryptCreateTableTokenGeneratorTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/ddl/EncryptCreateTableTokenGeneratorTest.java
index 4e618a26020..65c69bd489f 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/ddl/EncryptCreateTableTokenGeneratorTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/ddl/EncryptCreateTableTokenGeneratorTest.java
@@ -41,6 +41,7 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.util.Collection;
+import java.util.Collections;
import java.util.Iterator;
import static org.hamcrest.Matchers.is;
@@ -108,10 +109,11 @@ class EncryptCreateTableTokenGeneratorTest {
}
private CreateTableStatement createCreateTableStatement() {
- CreateTableStatement result = new CreateTableStatement(databaseType);
- result.setTable(new SimpleTableSegment(new TableNameSegment(0, 0, new
IdentifierValue("t_encrypt"))));
- result.getColumnDefinitions().add(new ColumnDefinitionSegment(25, 78,
new ColumnSegment(25, 42, new IdentifierValue("certificate_number")), new
DataTypeSegment(), false, false, ""));
- result.buildAttributes();
- return result;
+ return CreateTableStatement.builder()
+ .databaseType(databaseType)
+ .table(new SimpleTableSegment(new TableNameSegment(0, 0, new
IdentifierValue("t_encrypt"))))
+ .columnDefinitions(Collections.singleton(
+ new ColumnDefinitionSegment(25, 78, new
ColumnSegment(25, 42, new IdentifierValue("certificate_number")), new
DataTypeSegment(), false, false, "")))
+ .build();
}
}
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingCreateFunctionSupportedCheckerTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingCreateFunctionSupportedCheckerTest.java
index 5e9ed48959d..2ce0322d354 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingCreateFunctionSupportedCheckerTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingCreateFunctionSupportedCheckerTest.java
@@ -119,9 +119,8 @@ class ShardingCreateFunctionSupportedCheckerTest {
@Test
void assertCheckCreateFunctionWithTableExists() {
- CreateTableStatement createTableStatement = new
CreateTableStatement(databaseType);
SimpleTableSegment table = new SimpleTableSegment(new
TableNameSegment(0, 0, new IdentifierValue("foo_tbl")));
- createTableStatement.setTable(table);
+ CreateTableStatement createTableStatement =
CreateTableStatement.builder().databaseType(databaseType).table(table).build();
ValidStatementSegment validStatementSegment = new
ValidStatementSegment(0, 0);
validStatementSegment.setSqlStatement(createTableStatement);
RoutineBodySegment routineBody = new RoutineBodySegment(0, 0);
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingCreateProcedureSupportedCheckerTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingCreateProcedureSupportedCheckerTest.java
index 0ac6ad8eea0..59adaf94d44 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingCreateProcedureSupportedCheckerTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingCreateProcedureSupportedCheckerTest.java
@@ -111,8 +111,10 @@ class ShardingCreateProcedureSupportedCheckerTest {
@Test
void assertCheckWithTableExists() {
- CreateTableStatement createTableStatement = new
CreateTableStatement(databaseType);
- createTableStatement.setTable(new SimpleTableSegment(new
TableNameSegment(0, 0, new IdentifierValue("foo_tbl"))));
+ CreateTableStatement createTableStatement =
CreateTableStatement.builder()
+ .databaseType(databaseType)
+ .table(new SimpleTableSegment(new TableNameSegment(0, 0, new
IdentifierValue("foo_tbl"))))
+ .build();
ValidStatementSegment validStatementSegment = new
ValidStatementSegment(0, 0);
validStatementSegment.setSqlStatement(createTableStatement);
RoutineBodySegment routineBody = new RoutineBodySegment(0, 0);
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingCreateTableSupportedCheckerTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingCreateTableSupportedCheckerTest.java
index 59228b7d045..9d5214237f5 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingCreateTableSupportedCheckerTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingCreateTableSupportedCheckerTest.java
@@ -48,9 +48,10 @@ class ShardingCreateTableSupportedCheckerTest {
@Test
void assertCheck() {
- CreateTableStatement sqlStatement = new
CreateTableStatement(databaseType);
- sqlStatement.setTable(new SimpleTableSegment(new TableNameSegment(1,
2, new IdentifierValue("foo_tbl"))));
- sqlStatement.buildAttributes();
+ CreateTableStatement sqlStatement = CreateTableStatement.builder()
+ .databaseType(databaseType)
+ .table(new SimpleTableSegment(new TableNameSegment(1, 2, new
IdentifierValue("foo_tbl"))))
+ .build();
assertThrows(TableExistsException.class, () ->
assertCheck(sqlStatement));
}
@@ -64,10 +65,11 @@ class ShardingCreateTableSupportedCheckerTest {
@Test
void assertCheckIfNotExists() {
- CreateTableStatement sqlStatement = new
CreateTableStatement(databaseType);
- sqlStatement.setIfNotExists(true);
- sqlStatement.setTable(new SimpleTableSegment(new TableNameSegment(1,
2, new IdentifierValue("foo_tbl"))));
- sqlStatement.buildAttributes();
+ CreateTableStatement sqlStatement = CreateTableStatement.builder()
+ .databaseType(databaseType)
+ .ifNotExists(true)
+ .table(new SimpleTableSegment(new TableNameSegment(1, 2, new
IdentifierValue("foo_tbl"))))
+ .build();
assertCheckIfNotExists(sqlStatement);
}
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingCreateTableRouteContextCheckerTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingCreateTableRouteContextCheckerTest.java
index cc795dc6494..4db6d6845ba 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingCreateTableRouteContextCheckerTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingCreateTableRouteContextCheckerTest.java
@@ -68,31 +68,33 @@ class ShardingCreateTableRouteContextCheckerTest {
@Test
void assertCheckWithSameRouteResultShardingTableForPostgreSQL() {
- CreateTableStatement sqlStatement = new
CreateTableStatement(databaseType);
- sqlStatement.setIfNotExists(false);
- sqlStatement.setTable(new SimpleTableSegment(new TableNameSegment(0,
0, new IdentifierValue("t_order"))));
- sqlStatement.buildAttributes();
when(shardingRule.isShardingTable("t_order")).thenReturn(true);
when(shardingRule.getShardingTable("t_order")).thenReturn(new
ShardingTable(Arrays.asList("ds_0", "ds_1"), "t_order"));
Collection<RouteUnit> routeUnits = new LinkedList<>();
routeUnits.add(new RouteUnit(new RouteMapper("ds_0", "ds_0"),
Collections.singletonList(new RouteMapper("t_order", "t_order_0"))));
routeUnits.add(new RouteUnit(new RouteMapper("ds_1", "ds_1"),
Collections.singletonList(new RouteMapper("t_order", "t_order_0"))));
when(routeContext.getRouteUnits()).thenReturn(routeUnits);
+ CreateTableStatement sqlStatement = CreateTableStatement.builder()
+ .databaseType(databaseType)
+ .ifNotExists(false)
+ .table(new SimpleTableSegment(new TableNameSegment(0, 0, new
IdentifierValue("t_order"))))
+ .build();
when(queryContext.getSqlStatementContext()).thenReturn(new
CommonSQLStatementContext(sqlStatement));
assertDoesNotThrow(() -> new
ShardingCreateTableRouteContextChecker().check(shardingRule, queryContext,
database, mock(ConfigurationProperties.class), routeContext));
}
@Test
void assertCheckWithDifferentRouteResultShardingTableForPostgreSQL() {
- CreateTableStatement sqlStatement = new
CreateTableStatement(databaseType);
- sqlStatement.setIfNotExists(false);
- sqlStatement.setTable(new SimpleTableSegment(new TableNameSegment(0,
0, new IdentifierValue("t_order"))));
- sqlStatement.buildAttributes();
when(shardingRule.isShardingTable("t_order")).thenReturn(true);
when(shardingRule.getShardingTable("t_order")).thenReturn(new
ShardingTable(Arrays.asList("ds_0", "ds_1"), "t_order"));
Collection<RouteUnit> routeUnits = new LinkedList<>();
routeUnits.add(new RouteUnit(new RouteMapper("ds_0", "ds_0"),
Collections.singletonList(new RouteMapper("t_order", "t_order_0"))));
when(routeContext.getRouteUnits()).thenReturn(routeUnits);
+ CreateTableStatement sqlStatement = CreateTableStatement.builder()
+ .databaseType(databaseType)
+ .ifNotExists(false)
+ .table(new SimpleTableSegment(new TableNameSegment(0, 0, new
IdentifierValue("t_order"))))
+ .build();
when(queryContext.getSqlStatementContext()).thenReturn(new
CommonSQLStatementContext(sqlStatement));
assertThrows(ShardingDDLRouteException.class,
() -> new
ShardingCreateTableRouteContextChecker().check(shardingRule, queryContext,
database, mock(ConfigurationProperties.class), routeContext));
@@ -100,10 +102,11 @@ class ShardingCreateTableRouteContextCheckerTest {
@Test
void assertCheckWithSameRouteResultBroadcastTableForPostgreSQL() {
- CreateTableStatement sqlStatement = new
CreateTableStatement(databaseType);
- sqlStatement.setIfNotExists(false);
- sqlStatement.setTable(new SimpleTableSegment(new TableNameSegment(0,
0, new IdentifierValue("t_config"))));
- sqlStatement.buildAttributes();
+ CreateTableStatement sqlStatement = CreateTableStatement.builder()
+ .databaseType(databaseType)
+ .ifNotExists(false)
+ .table(new SimpleTableSegment(new TableNameSegment(0, 0, new
IdentifierValue("t_config"))))
+ .build();
when(queryContext.getSqlStatementContext()).thenReturn(new
CommonSQLStatementContext(sqlStatement));
assertDoesNotThrow(() -> new
ShardingCreateTableRouteContextChecker().check(shardingRule, queryContext,
database, mock(ConfigurationProperties.class), routeContext));
}
diff --git
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/CreateTableStatementBinder.java
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/CreateTableStatementBinder.java
index 3469fdac576..8ed38d0850f 100644
---
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/CreateTableStatementBinder.java
+++
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/statement/ddl/CreateTableStatementBinder.java
@@ -52,15 +52,18 @@ public final class CreateTableStatementBinder implements
SQLStatementBinder<Crea
private CreateTableStatement copy(final CreateTableStatement sqlStatement,
final SimpleTableSegment boundTable,
final SelectStatement boundSelectStatement, final
Collection<ColumnDefinitionSegment> boundColumnDefinitions) {
- CreateTableStatement result = new
CreateTableStatement(sqlStatement.getDatabaseType());
- result.setTable(boundTable);
- result.setSelectStatement(boundSelectStatement);
- result.getColumnDefinitions().addAll(boundColumnDefinitions);
-
result.getConstraintDefinitions().addAll(sqlStatement.getConstraintDefinitions());
- result.setIfNotExists(sqlStatement.isIfNotExists());
- result.getColumns().addAll(sqlStatement.getColumns());
- sqlStatement.getLikeTable().ifPresent(result::setLikeTable);
-
sqlStatement.getCreateTableOption().ifPresent(result::setCreateTableOption);
+ CreateTableStatement result = CreateTableStatement.builder()
+ .databaseType(sqlStatement.getDatabaseType())
+ .table(boundTable)
+ .selectStatement(boundSelectStatement)
+ .ifNotExists(sqlStatement.isIfNotExists())
+ .likeTable(sqlStatement.getLikeTable().orElse(null))
+
.createTableOption(sqlStatement.getCreateTableOption().orElse(null))
+ .columnDefinitions(boundColumnDefinitions)
+ .constraintDefinitions(sqlStatement.getConstraintDefinitions())
+ .columns(sqlStatement.getColumns())
+ .rollups(sqlStatement.getRollups())
+ .build();
SQLStatementCopyUtils.copyAttributes(sqlStatement, result);
return result;
}
diff --git
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/SingleSQLRouterTest.java
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/SingleSQLRouterTest.java
index b4d26bcfb83..3b76bcb3211 100644
---
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/SingleSQLRouterTest.java
+++
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/SingleSQLRouterTest.java
@@ -134,7 +134,7 @@ class SingleSQLRouterTest {
@Test
void assertCreateRouteContextWithDistributedTable() {
- QueryContext queryContext = mockQueryContext(new
CreateTableStatement(databaseType));
+ QueryContext queryContext =
mockQueryContext(CreateTableStatement.builder().databaseType(databaseType).build());
ShardingSphereDatabase database =
mockDatabaseWithDistributedTables(Collections.singleton("foo_tbl"));
SingleRule rule = mock(SingleRule.class);
when(rule.getQualifiedTables(queryContext.getSqlStatementContext(),
database)).thenReturn(Collections.singletonList(new QualifiedTable("foo_db",
"foo_tbl")));
@@ -205,7 +205,7 @@ class SingleSQLRouterTest {
@Test
void assertDecorateRouteContextWithDistributedTable() {
- QueryContext queryContext = mockQueryContext(new
CreateTableStatement(databaseType));
+ QueryContext queryContext =
mockQueryContext(CreateTableStatement.builder().databaseType(databaseType).build());
ShardingSphereDatabase database =
mockDatabaseWithDistributedTables(Collections.singleton("foo_tbl"));
SingleRule rule = mock(SingleRule.class);
SQLStatementContext sqlStatementContext =
queryContext.getSqlStatementContext();
@@ -292,16 +292,14 @@ class SingleSQLRouterTest {
}
private QueryContext createQueryContext() {
- CreateTableStatement createTableStatement = new
CreateTableStatement(databaseType);
TableNameSegment tableNameSegment = new TableNameSegment(1, 2, new
IdentifierValue("foo_tbl"));
tableNameSegment.setTableBoundInfo(new TableSegmentBoundInfo(new
IdentifierValue("foo_db"), new IdentifierValue("foo_schema")));
- createTableStatement.setTable(new
SimpleTableSegment(tableNameSegment));
- createTableStatement.buildAttributes();
ConnectionContext connectionContext = mock(ConnectionContext.class);
when(connectionContext.getCurrentDatabaseName()).thenReturn(Optional.of("foo_db"));
ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class);
when(metaData.containsDatabase("foo_db")).thenReturn(true);
when(metaData.getDatabase("foo_db")).thenReturn(mock(ShardingSphereDatabase.class));
- return new QueryContext(new
CommonSQLStatementContext(createTableStatement), "CREATE TABLE",
Collections.emptyList(), new HintValueContext(), connectionContext, metaData);
+ return new QueryContext(new
CommonSQLStatementContext(CreateTableStatement.builder().databaseType(databaseType).table(new
SimpleTableSegment(tableNameSegment)).build()),
+ "CREATE TABLE", Collections.emptyList(), new
HintValueContext(), connectionContext, metaData);
}
}
diff --git
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/engine/SingleRouteEngineTest.java
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/engine/SingleRouteEngineTest.java
index eb012d5dd0f..78a8e44943f 100644
---
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/engine/SingleRouteEngineTest.java
+++
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/route/engine/SingleRouteEngineTest.java
@@ -95,7 +95,7 @@ class SingleRouteEngineTest {
@Test
void assertRouteWithoutSingleRule() throws SQLException {
- CreateTableStatement sqlStatement = new
CreateTableStatement(databaseType);
+ CreateTableStatement sqlStatement =
CreateTableStatement.builder().databaseType(databaseType).build();
SingleRouteEngine engine = new SingleRouteEngine(Arrays.asList(new
QualifiedTable("foo_db", "t_order"), new QualifiedTable("foo_db",
"t_order_item")), sqlStatement, mock());
SingleRule singleRule = new SingleRule(new SingleRuleConfiguration(),
"foo_db", mock(), createDataSourceMap(), Collections.emptyList());
RouteContext routeContext = new RouteContext();
@@ -112,7 +112,7 @@ class SingleRouteEngineTest {
@Test
void assertRouteWithDefaultSingleRule() throws SQLException {
- CreateTableStatement sqlStatement = new
CreateTableStatement(databaseType);
+ CreateTableStatement sqlStatement =
CreateTableStatement.builder().databaseType(databaseType).build();
SingleRouteEngine engine = new SingleRouteEngine(Arrays.asList(new
QualifiedTable("foo_db", "t_order"), new QualifiedTable("foo_db",
"t_order_item")), sqlStatement, mock());
SingleRule singleRule = new SingleRule(new
SingleRuleConfiguration(Collections.emptyList(), "ds_0"), "foo_db", mock(),
createDataSourceMap(), Collections.emptyList());
RouteContext routeContext = new RouteContext();
diff --git
a/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/util/AutoCommitUtilsTest.java
b/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/util/AutoCommitUtilsTest.java
index 4b5a4c65907..a63dc8a47de 100644
---
a/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/util/AutoCommitUtilsTest.java
+++
b/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/util/AutoCommitUtilsTest.java
@@ -36,7 +36,7 @@ class AutoCommitUtilsTest {
@Test
void assertIsNeedStartTransactionWithDDL() {
- assertTrue(AutoCommitUtils.isNeedStartTransaction(new
CreateTableStatement(databaseType)));
+
assertTrue(AutoCommitUtils.isNeedStartTransaction(CreateTableStatement.builder().databaseType(databaseType).build()));
}
@Test
diff --git
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/table/CreateTablePushDownMetaDataRefresherTest.java
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/table/CreateTablePushDownMetaDataRefresherTest.java
index a1df103f303..655c696c9c8 100644
---
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/table/CreateTablePushDownMetaDataRefresherTest.java
+++
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/table/CreateTablePushDownMetaDataRefresherTest.java
@@ -74,8 +74,10 @@ class CreateTablePushDownMetaDataRefresherTest {
when(rule.getAttributes()).thenReturn(new
RuleAttributes(mutableDataNodeRuleAttribute));
ShardingSphereDatabase database = new ShardingSphereDatabase(
"foo_db", databaseType, new
ResourceMetaData(Collections.emptyMap()), new
RuleMetaData(Collections.singleton(rule)), Collections.emptyList());
- CreateTableStatement sqlStatement = new
CreateTableStatement(databaseType);
- sqlStatement.setTable(new SimpleTableSegment(new TableNameSegment(0,
0, new IdentifierValue("foo_tbl"))));
+ CreateTableStatement sqlStatement = CreateTableStatement.builder()
+ .databaseType(databaseType)
+ .table(new SimpleTableSegment(new TableNameSegment(0, 0, new
IdentifierValue("foo_tbl"))))
+ .build();
when(TableRefreshUtils.getTableName(sqlStatement.getTable().getTableName().getIdentifier(),
databaseType)).thenReturn("foo_tbl");
when(TableRefreshUtils.isSingleTable("foo_tbl",
database)).thenReturn(true);
ShardingSphereTable loadedTable = new ShardingSphereTable("foo_tbl",
Collections.emptyList(), Collections.emptyList(), Collections.emptyList());
@@ -94,8 +96,10 @@ class CreateTablePushDownMetaDataRefresherTest {
"foo_schema", new ShardingSphereSchema("foo_schema",
databaseType, Collections.singleton(loadedTable), Collections.emptyList()));
ShardingSphereDatabase database = new ShardingSphereDatabase(
"foo_db", databaseType, new
ResourceMetaData(Collections.emptyMap()), new
RuleMetaData(Collections.emptyList()), Collections.emptyList());
- CreateTableStatement sqlStatement = new
CreateTableStatement(databaseType);
- sqlStatement.setTable(new SimpleTableSegment(new TableNameSegment(0,
0, new IdentifierValue("foo_tbl"))));
+ CreateTableStatement sqlStatement = CreateTableStatement.builder()
+ .databaseType(databaseType)
+ .table(new SimpleTableSegment(new TableNameSegment(0, 0, new
IdentifierValue("foo_tbl"))))
+ .build();
when(TableRefreshUtils.getTableName(sqlStatement.getTable().getTableName().getIdentifier(),
databaseType)).thenReturn("foo_tbl");
when(GenericSchemaBuilder.build(eq(Collections.singletonList("foo_tbl")),
eq(database.getProtocolType()), any())).thenReturn(schemas);
refresher.refresh(metaDataManagerPersistService, database, "logic_ds",
"foo_schema", databaseType, sqlStatement, new ConfigurationProperties(new
Properties()));
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 40b7d285778..425fecd80a3 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
@@ -548,34 +548,47 @@ public final class DorisDDLStatementVisitor extends
DorisStatementVisitor implem
@SuppressWarnings("unchecked")
@Override
public ASTNode visitCreateTable(final CreateTableContext ctx) {
- CreateTableStatement result = new
CreateTableStatement(getDatabaseType());
- result.setTable((SimpleTableSegment) visit(ctx.tableName()));
- result.setIfNotExists(null != ctx.ifNotExists());
+ Collection<ColumnDefinitionSegment> columnDefinitions = new
LinkedList<>();
+ Collection<ConstraintDefinitionSegment> constraintDefinitions = new
LinkedList<>();
if (null != ctx.createDefinitionClause()) {
CollectionValue<CreateDefinitionSegment> createDefinitions =
(CollectionValue<CreateDefinitionSegment>) visit(ctx.createDefinitionClause());
for (CreateDefinitionSegment each : createDefinitions.getValue()) {
if (each instanceof ColumnDefinitionSegment) {
-
result.getColumnDefinitions().add((ColumnDefinitionSegment) each);
+ columnDefinitions.add((ColumnDefinitionSegment) each);
} else if (each instanceof ConstraintDefinitionSegment) {
-
result.getConstraintDefinitions().add((ConstraintDefinitionSegment) each);
+ constraintDefinitions.add((ConstraintDefinitionSegment)
each);
}
}
}
+ SimpleTableSegment likeTable = null;
+ Collection<RollupSegment> rollups = new LinkedList<>();
if (null != ctx.createLikeClause()) {
- result.setLikeTable((SimpleTableSegment)
visit(ctx.createLikeClause()));
+ likeTable = (SimpleTableSegment) visit(ctx.createLikeClause());
for (IdentifierContext each : ctx.createLikeClause().identifier())
{
- result.getRollups().add(new
RollupSegment(each.getStart().getStartIndex(), each.getStop().getStopIndex(),
new IdentifierValue(each.getText())));
+ rollups.add(new RollupSegment(each.getStart().getStartIndex(),
each.getStop().getStopIndex(), new IdentifierValue(each.getText())));
}
}
+ CreateTableOptionSegment createTableOption = null;
if (null != ctx.createTableOptions()) {
- result.setCreateTableOption((CreateTableOptionSegment)
visit(ctx.createTableOptions()));
+ createTableOption = (CreateTableOptionSegment)
visit(ctx.createTableOptions());
}
+ SelectStatement selectStatement = null;
// DORIS ADDED BEGIN
if (null != ctx.duplicateAsQueryExpression()) {
- result.setSelectStatement((SelectStatement)
visit(ctx.duplicateAsQueryExpression().select()));
+ selectStatement = (SelectStatement)
visit(ctx.duplicateAsQueryExpression().select());
}
// DORIS ADDED END
- return result;
+ return CreateTableStatement.builder()
+ .databaseType(getDatabaseType())
+ .table((SimpleTableSegment) visit(ctx.tableName()))
+ .ifNotExists(null != ctx.ifNotExists())
+ .likeTable(likeTable)
+ .createTableOption(createTableOption)
+ .selectStatement(selectStatement)
+ .columnDefinitions(columnDefinitions)
+ .constraintDefinitions(constraintDefinitions)
+ .rollups(rollups)
+ .build();
}
@Override
diff --git
a/parser/sql/engine/dialect/firebird/src/main/java/org/apache/shardingsphere/sql/parser/engine/firebird/visitor/statement/type/FirebirdDDLStatementVisitor.java
b/parser/sql/engine/dialect/firebird/src/main/java/org/apache/shardingsphere/sql/parser/engine/firebird/visitor/statement/type/FirebirdDDLStatementVisitor.java
index c7cdde99624..921e6a657e9 100644
---
a/parser/sql/engine/dialect/firebird/src/main/java/org/apache/shardingsphere/sql/parser/engine/firebird/visitor/statement/type/FirebirdDDLStatementVisitor.java
+++
b/parser/sql/engine/dialect/firebird/src/main/java/org/apache/shardingsphere/sql/parser/engine/firebird/visitor/statement/type/FirebirdDDLStatementVisitor.java
@@ -82,7 +82,9 @@ import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.tr
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 Firebird.
@@ -96,19 +98,24 @@ public final class FirebirdDDLStatementVisitor extends
FirebirdStatementVisitor
@SuppressWarnings("unchecked")
@Override
public ASTNode visitCreateTable(final CreateTableContext ctx) {
- CreateTableStatement result = new
CreateTableStatement(getDatabaseType());
- result.setTable((SimpleTableSegment) visit(ctx.tableName()));
+ Collection<ColumnDefinitionSegment> columnDefinitions = new
LinkedList<>();
+ Collection<ConstraintDefinitionSegment> constraintDefinitions = new
LinkedList<>();
if (null != ctx.createDefinitionClause()) {
CollectionValue<CreateDefinitionSegment> createDefinitions =
(CollectionValue<CreateDefinitionSegment>) visit(ctx.createDefinitionClause());
for (CreateDefinitionSegment each : createDefinitions.getValue()) {
if (each instanceof ColumnDefinitionSegment) {
-
result.getColumnDefinitions().add((ColumnDefinitionSegment) each);
+ columnDefinitions.add((ColumnDefinitionSegment) each);
} else if (each instanceof ConstraintDefinitionSegment) {
-
result.getConstraintDefinitions().add((ConstraintDefinitionSegment) each);
+ constraintDefinitions.add((ConstraintDefinitionSegment)
each);
}
}
}
- return result;
+ return CreateTableStatement.builder()
+ .databaseType(getDatabaseType())
+ .table((SimpleTableSegment) visit(ctx.tableName()))
+ .columnDefinitions(columnDefinitions)
+ .constraintDefinitions(constraintDefinitions)
+ .build();
}
@Override
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 3e728558e45..427d4a32197 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
@@ -178,20 +178,25 @@ public final class HiveDDLStatementVisitor extends
HiveStatementVisitor implemen
@SuppressWarnings("unchecked")
@Override
public ASTNode visitCreateTable(final CreateTableContext ctx) {
- CreateTableStatement result = new
CreateTableStatement(getDatabaseType());
- result.setTable((SimpleTableSegment)
visit(ctx.createTableCommonClause().tableNameWithDb()));
- result.setIfNotExists(null !=
ctx.createTableCommonClause().ifNotExists());
+ Collection<ColumnDefinitionSegment> columnDefinitions = new
LinkedList<>();
+ Collection<ConstraintDefinitionSegment> constraintDefinitions = new
LinkedList<>();
if (null != ctx.createDefinitionClause()) {
CollectionValue<CreateDefinitionSegment> createDefinitions =
(CollectionValue<CreateDefinitionSegment>) visit(ctx.createDefinitionClause());
for (CreateDefinitionSegment each : createDefinitions.getValue()) {
if (each instanceof ColumnDefinitionSegment) {
-
result.getColumnDefinitions().add((ColumnDefinitionSegment) each);
+ columnDefinitions.add((ColumnDefinitionSegment) each);
} else if (each instanceof ConstraintDefinitionSegment) {
-
result.getConstraintDefinitions().add((ConstraintDefinitionSegment) each);
+ constraintDefinitions.add((ConstraintDefinitionSegment)
each);
}
}
}
- return result;
+ return CreateTableStatement.builder()
+ .databaseType(getDatabaseType())
+ .table((SimpleTableSegment)
visit(ctx.createTableCommonClause().tableNameWithDb()))
+ .ifNotExists(null !=
ctx.createTableCommonClause().ifNotExists())
+ .columnDefinitions(columnDefinitions)
+ .constraintDefinitions(constraintDefinitions)
+ .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 cf791439253..2b8e07bd73d 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
@@ -271,26 +271,27 @@ public final class MySQLDDLStatementVisitor extends
MySQLStatementVisitor implem
@SuppressWarnings("unchecked")
@Override
public ASTNode visitCreateTable(final CreateTableContext ctx) {
- CreateTableStatement result = new
CreateTableStatement(getDatabaseType());
- result.setTable((SimpleTableSegment) visit(ctx.tableName()));
- result.setIfNotExists(null != ctx.ifNotExists());
+ Collection<ColumnDefinitionSegment> columnDefinitions = new
LinkedList<>();
+ Collection<ConstraintDefinitionSegment> constraintDefinitions = new
LinkedList<>();
if (null != ctx.createDefinitionClause()) {
CollectionValue<CreateDefinitionSegment> createDefinitions =
(CollectionValue<CreateDefinitionSegment>) visit(ctx.createDefinitionClause());
for (CreateDefinitionSegment each : createDefinitions.getValue()) {
if (each instanceof ColumnDefinitionSegment) {
-
result.getColumnDefinitions().add((ColumnDefinitionSegment) each);
+ columnDefinitions.add((ColumnDefinitionSegment) each);
} else if (each instanceof ConstraintDefinitionSegment) {
-
result.getConstraintDefinitions().add((ConstraintDefinitionSegment) each);
+ constraintDefinitions.add((ConstraintDefinitionSegment)
each);
}
}
}
- if (null != ctx.createLikeClause()) {
- result.setLikeTable((SimpleTableSegment)
visit(ctx.createLikeClause()));
- }
- if (null != ctx.createTableOptions()) {
- result.setCreateTableOption((CreateTableOptionSegment)
visit(ctx.createTableOptions()));
- }
- return result;
+ return CreateTableStatement.builder()
+ .databaseType(getDatabaseType())
+ .table((SimpleTableSegment) visit(ctx.tableName()))
+ .ifNotExists(null != ctx.ifNotExists())
+ .likeTable(null == ctx.createLikeClause() ? null :
(SimpleTableSegment) visit(ctx.createLikeClause()))
+ .createTableOption(null == ctx.createTableOptions() ? null :
(CreateTableOptionSegment) visit(ctx.createTableOptions()))
+ .columnDefinitions(columnDefinitions)
+ .constraintDefinitions(constraintDefinitions)
+ .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 fdf42cbaccf..36ee41aa014 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
@@ -269,20 +269,25 @@ public final class OpenGaussDDLStatementVisitor extends
OpenGaussStatementVisito
@SuppressWarnings("unchecked")
@Override
public ASTNode visitCreateTable(final CreateTableContext ctx) {
- CreateTableStatement result = new
CreateTableStatement(getDatabaseType());
- result.setTable((SimpleTableSegment) visit(ctx.tableName()));
- result.setIfNotExists(null != ctx.ifNotExists());
+ Collection<ColumnDefinitionSegment> columnDefinitions = new
LinkedList<>();
+ Collection<ConstraintDefinitionSegment> constraintDefinitions = new
LinkedList<>();
if (null != ctx.createDefinitionClause()) {
CollectionValue<CreateDefinitionSegment> createDefinitions =
(CollectionValue<CreateDefinitionSegment>) visit(ctx.createDefinitionClause());
for (CreateDefinitionSegment each : createDefinitions.getValue()) {
if (each instanceof ColumnDefinitionSegment) {
-
result.getColumnDefinitions().add((ColumnDefinitionSegment) each);
+ columnDefinitions.add((ColumnDefinitionSegment) each);
} else if (each instanceof ConstraintDefinitionSegment) {
-
result.getConstraintDefinitions().add((ConstraintDefinitionSegment) each);
+ constraintDefinitions.add((ConstraintDefinitionSegment)
each);
}
}
}
- return result;
+ return CreateTableStatement.builder()
+ .databaseType(getDatabaseType())
+ .table((SimpleTableSegment) visit(ctx.tableName()))
+ .ifNotExists(null != ctx.ifNotExists())
+ .columnDefinitions(columnDefinitions)
+ .constraintDefinitions(constraintDefinitions)
+ .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 ae54a81b4cd..5844f180b22 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
@@ -390,19 +390,24 @@ public final class OracleDDLStatementVisitor extends
OracleStatementVisitor impl
@SuppressWarnings("unchecked")
@Override
public ASTNode visitCreateTable(final CreateTableContext ctx) {
- CreateTableStatement result = new
CreateTableStatement(getDatabaseType());
- result.setTable((SimpleTableSegment) visit(ctx.tableName()));
+ Collection<ColumnDefinitionSegment> columnDefinitions = new
LinkedList<>();
+ Collection<ConstraintDefinitionSegment> constraintDefinitions = new
LinkedList<>();
if (null != ctx.createDefinitionClause()) {
CollectionValue<CreateDefinitionSegment> createDefinitions =
(CollectionValue<CreateDefinitionSegment>) visit(ctx.createDefinitionClause());
for (CreateDefinitionSegment each : createDefinitions.getValue()) {
if (each instanceof ColumnDefinitionSegment) {
-
result.getColumnDefinitions().add((ColumnDefinitionSegment) each);
+ columnDefinitions.add((ColumnDefinitionSegment) each);
} else if (each instanceof ConstraintDefinitionSegment) {
-
result.getConstraintDefinitions().add((ConstraintDefinitionSegment) each);
+ constraintDefinitions.add((ConstraintDefinitionSegment)
each);
}
}
}
- return result;
+ return CreateTableStatement.builder()
+ .databaseType(getDatabaseType())
+ .table((SimpleTableSegment) visit(ctx.tableName()))
+ .columnDefinitions(columnDefinitions)
+ .constraintDefinitions(constraintDefinitions)
+ .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 61ac1cc8042..724815e666e 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
@@ -346,20 +346,25 @@ public final class PostgreSQLDDLStatementVisitor extends
PostgreSQLStatementVisi
@SuppressWarnings("unchecked")
@Override
public ASTNode visitCreateTable(final CreateTableContext ctx) {
- CreateTableStatement result = new
CreateTableStatement(getDatabaseType());
- result.setTable((SimpleTableSegment) visit(ctx.tableName()));
- result.setIfNotExists(null != ctx.ifNotExists());
+ Collection<ColumnDefinitionSegment> columnDefinitions = new
LinkedList<>();
+ Collection<ConstraintDefinitionSegment> constraintDefinitions = new
LinkedList<>();
if (null != ctx.createDefinitionClause()) {
CollectionValue<CreateDefinitionSegment> createDefinitions =
(CollectionValue<CreateDefinitionSegment>) visit(ctx.createDefinitionClause());
for (CreateDefinitionSegment each : createDefinitions.getValue()) {
if (each instanceof ColumnDefinitionSegment) {
-
result.getColumnDefinitions().add((ColumnDefinitionSegment) each);
+ columnDefinitions.add((ColumnDefinitionSegment) each);
} else if (each instanceof ConstraintDefinitionSegment) {
-
result.getConstraintDefinitions().add((ConstraintDefinitionSegment) each);
+ constraintDefinitions.add((ConstraintDefinitionSegment)
each);
}
}
}
- return result;
+ return CreateTableStatement.builder()
+ .databaseType(getDatabaseType())
+ .table((SimpleTableSegment) visit(ctx.tableName()))
+ .ifNotExists(null != ctx.ifNotExists())
+ .columnDefinitions(columnDefinitions)
+ .constraintDefinitions(constraintDefinitions)
+ .build();
}
@Override
diff --git
a/parser/sql/engine/dialect/presto/src/main/java/org/apache/shardingsphere/sql/parser/engine/presto/visitor/statement/type/PrestoDDLStatementVisitor.java
b/parser/sql/engine/dialect/presto/src/main/java/org/apache/shardingsphere/sql/parser/engine/presto/visitor/statement/type/PrestoDDLStatementVisitor.java
index d29cda81dd9..19907b519f8 100644
---
a/parser/sql/engine/dialect/presto/src/main/java/org/apache/shardingsphere/sql/parser/engine/presto/visitor/statement/type/PrestoDDLStatementVisitor.java
+++
b/parser/sql/engine/dialect/presto/src/main/java/org/apache/shardingsphere/sql/parser/engine/presto/visitor/statement/type/PrestoDDLStatementVisitor.java
@@ -49,6 +49,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.LinkedList;
+
/**
* DDL statement visitor for Presto.
*/
@@ -80,20 +83,25 @@ public final class PrestoDDLStatementVisitor extends
PrestoStatementVisitor impl
@SuppressWarnings("unchecked")
@Override
public ASTNode visitCreateTable(final CreateTableContext ctx) {
- CreateTableStatement result = new
CreateTableStatement(getDatabaseType());
- result.setTable((SimpleTableSegment) visit(ctx.tableName()));
- result.setIfNotExists(null != ctx.ifNotExists());
+ Collection<ColumnDefinitionSegment> columnDefinitions = new
LinkedList<>();
+ Collection<ConstraintDefinitionSegment> constraintDefinitions = new
LinkedList<>();
if (null != ctx.createDefinitionClause()) {
CollectionValue<CreateDefinitionSegment> createDefinitions =
(CollectionValue<CreateDefinitionSegment>) visit(ctx.createDefinitionClause());
for (CreateDefinitionSegment each : createDefinitions.getValue()) {
if (each instanceof ColumnDefinitionSegment) {
-
result.getColumnDefinitions().add((ColumnDefinitionSegment) each);
+ columnDefinitions.add((ColumnDefinitionSegment) each);
} else if (each instanceof ConstraintDefinitionSegment) {
-
result.getConstraintDefinitions().add((ConstraintDefinitionSegment) each);
+ constraintDefinitions.add((ConstraintDefinitionSegment)
each);
}
}
}
- return result;
+ return CreateTableStatement.builder()
+ .databaseType(getDatabaseType())
+ .table((SimpleTableSegment) visit(ctx.tableName()))
+ .ifNotExists(null != ctx.ifNotExists())
+ .columnDefinitions(columnDefinitions)
+ .constraintDefinitions(constraintDefinitions)
+ .build();
}
@Override
diff --git
a/parser/sql/engine/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/engine/sql92/visitor/statement/type/SQL92DDLStatementVisitor.java
b/parser/sql/engine/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/engine/sql92/visitor/statement/type/SQL92DDLStatementVisitor.java
index 01bf4eff3d7..9e4a1ef7868 100644
---
a/parser/sql/engine/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/engine/sql92/visitor/statement/type/SQL92DDLStatementVisitor.java
+++
b/parser/sql/engine/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/engine/sql92/visitor/statement/type/SQL92DDLStatementVisitor.java
@@ -58,7 +58,9 @@ import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.ta
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 SQL92.
@@ -72,19 +74,24 @@ public final class SQL92DDLStatementVisitor extends
SQL92StatementVisitor implem
@SuppressWarnings("unchecked")
@Override
public ASTNode visitCreateTable(final CreateTableContext ctx) {
- CreateTableStatement result = new
CreateTableStatement(getDatabaseType());
- result.setTable((SimpleTableSegment) visit(ctx.tableName()));
+ Collection<ColumnDefinitionSegment> columnDefinitions = new
LinkedList<>();
+ Collection<ConstraintDefinitionSegment> constraintDefinitions = new
LinkedList<>();
if (null != ctx.createDefinitionClause()) {
CollectionValue<CreateDefinitionSegment> createDefinitions =
(CollectionValue<CreateDefinitionSegment>) visit(ctx.createDefinitionClause());
for (CreateDefinitionSegment each : createDefinitions.getValue()) {
if (each instanceof ColumnDefinitionSegment) {
-
result.getColumnDefinitions().add((ColumnDefinitionSegment) each);
+ columnDefinitions.add((ColumnDefinitionSegment) each);
} else if (each instanceof ConstraintDefinitionSegment) {
-
result.getConstraintDefinitions().add((ConstraintDefinitionSegment) each);
+ constraintDefinitions.add((ConstraintDefinitionSegment)
each);
}
}
}
- return result;
+ return CreateTableStatement.builder()
+ .databaseType(getDatabaseType())
+ .table((SimpleTableSegment) visit(ctx.tableName()))
+ .columnDefinitions(columnDefinitions)
+ .constraintDefinitions(constraintDefinitions)
+ .build();
}
@Override
diff --git
a/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/SQLServerStatementVisitor.java
b/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/SQLServerStatementVisitor.java
index 9578e7686f4..531bb9b5c66 100644
---
a/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/SQLServerStatementVisitor.java
+++
b/parser/sql/engine/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/engine/sqlserver/visitor/statement/SQLServerStatementVisitor.java
@@ -2097,21 +2097,21 @@ public abstract class SQLServerStatementVisitor extends
SQLServerStatementBaseVi
@SuppressWarnings("unchecked")
@Override
public ASTNode visitCreateTableAsSelectClause(final
CreateTableAsSelectClauseContext ctx) {
- CreateTableStatement result = new CreateTableStatement(databaseType);
+ SimpleTableSegment table;
+ SelectStatement selectStatement;
+ List<ColumnSegment> columns = new LinkedList<>();
if (null != ctx.createTableAsSelect()) {
- result.setTable((SimpleTableSegment)
visit(ctx.createTableAsSelect().tableName()));
- result.setSelectStatement((SelectStatement)
visit(ctx.createTableAsSelect().select()));
+ table = (SimpleTableSegment)
visit(ctx.createTableAsSelect().tableName());
+ selectStatement = (SelectStatement)
visit(ctx.createTableAsSelect().select());
if (null != ctx.createTableAsSelect().columnNames()) {
CollectionValue<ColumnSegment> columnSegments =
(CollectionValue<ColumnSegment>) visit(ctx.createTableAsSelect().columnNames());
- for (ColumnSegment each : columnSegments.getValue()) {
- result.getColumns().add(each);
- }
+ columns.addAll(columnSegments.getValue());
}
} else {
- result.setTable((SimpleTableSegment)
visit(ctx.createRemoteTableAsSelect().tableName()));
- result.setSelectStatement((SelectStatement)
visit(ctx.createRemoteTableAsSelect().select()));
+ table = (SimpleTableSegment)
visit(ctx.createRemoteTableAsSelect().tableName());
+ selectStatement = (SelectStatement)
visit(ctx.createRemoteTableAsSelect().select());
}
- return result;
+ return
CreateTableStatement.builder().databaseType(databaseType).table(table).selectStatement(selectStatement).columns(columns).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 a5a19abba04..3f5d560acaf 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
@@ -142,17 +142,22 @@ public final class SQLServerDDLStatementVisitor extends
SQLServerStatementVisito
@SuppressWarnings("unchecked")
@Override
public ASTNode visitCreateTableClause(final CreateTableClauseContext ctx) {
- CreateTableStatement result = new
CreateTableStatement(getDatabaseType());
- result.setTable((SimpleTableSegment) visit(ctx.tableName()));
+ Collection<ColumnDefinitionSegment> columnDefinitions = new
LinkedList<>();
+ Collection<ConstraintDefinitionSegment> constraintDefinitions = new
LinkedList<>();
CollectionValue<CreateDefinitionSegment> createDefinitions =
(CollectionValue<CreateDefinitionSegment>)
generateCreateDefinitionSegment(ctx.createDefinitionClause().createTableDefinitions());
for (CreateDefinitionSegment each : createDefinitions.getValue()) {
if (each instanceof ColumnDefinitionSegment) {
- result.getColumnDefinitions().add((ColumnDefinitionSegment)
each);
+ columnDefinitions.add((ColumnDefinitionSegment) each);
} else if (each instanceof ConstraintDefinitionSegment) {
-
result.getConstraintDefinitions().add((ConstraintDefinitionSegment) each);
+ constraintDefinitions.add((ConstraintDefinitionSegment) each);
}
}
- return result;
+ return CreateTableStatement.builder()
+ .databaseType(getDatabaseType())
+ .table((SimpleTableSegment) visit(ctx.tableName()))
+ .columnDefinitions(columnDefinitions)
+ .constraintDefinitions(constraintDefinitions)
+ .build();
}
private ASTNode generateCreateDefinitionSegment(final
CreateTableDefinitionsContext ctx) {
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 2a75813a86a..825b9720798 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
@@ -35,7 +35,6 @@ import
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.Iden
import java.util.Collection;
import java.util.Collections;
-import java.util.LinkedList;
import java.util.Optional;
import java.util.stream.Collectors;
@@ -78,7 +77,7 @@ public final class CreateIndexStatement extends DDLStatement {
this.anonymousIndexStartIndex = anonymousIndexStartIndex;
this.algorithmType = algorithmType;
this.lockTable = lockTable;
- this.columns = null == columns ? new LinkedList<>() : new
LinkedList<>(columns);
+ this.columns = null == columns ? Collections.emptyList() : columns;
this.indexType = indexType;
this.properties = properties;
this.comment = comment;
diff --git
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/table/CreateTableStatement.java
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/table/CreateTableStatement.java
index eb5e4d2b371..f7d9253b77b 100644
---
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/table/CreateTableStatement.java
+++
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/table/CreateTableStatement.java
@@ -17,8 +17,8 @@
package
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.table;
+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.column.ColumnDefinitionSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.ConstraintDefinitionSegment;
@@ -36,6 +36,7 @@ import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.DD
import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.SelectStatement;
import java.util.Collection;
+import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Optional;
@@ -45,31 +46,44 @@ import java.util.stream.Collectors;
* Create table statement.
*/
@Getter
-@Setter
public final class CreateTableStatement extends DDLStatement {
- private SimpleTableSegment table;
+ private final SimpleTableSegment table;
- private SelectStatement selectStatement;
+ private final SelectStatement selectStatement;
- private boolean ifNotExists;
+ private final boolean ifNotExists;
- private SimpleTableSegment likeTable;
+ private final SimpleTableSegment likeTable;
- private CreateTableOptionSegment createTableOption;
+ private final CreateTableOptionSegment createTableOption;
- private final Collection<ColumnDefinitionSegment> columnDefinitions = new
LinkedList<>();
+ private final Collection<ColumnDefinitionSegment> columnDefinitions;
- private final Collection<ConstraintDefinitionSegment>
constraintDefinitions = new LinkedList<>();
+ private final Collection<ConstraintDefinitionSegment>
constraintDefinitions;
- private final List<ColumnSegment> columns = new LinkedList<>();
+ private final List<ColumnSegment> columns;
- private final Collection<RollupSegment> rollups = new LinkedList<>();
+ private final Collection<RollupSegment> rollups;
- private SQLStatementAttributes attributes;
+ private final SQLStatementAttributes attributes;
- public CreateTableStatement(final DatabaseType databaseType) {
+ @Builder
+ private CreateTableStatement(final DatabaseType databaseType, final
SimpleTableSegment table, final SelectStatement selectStatement,
+ final boolean ifNotExists, final
SimpleTableSegment likeTable, final CreateTableOptionSegment createTableOption,
+ final Collection<ColumnDefinitionSegment>
columnDefinitions, final Collection<ConstraintDefinitionSegment>
constraintDefinitions,
+ final List<ColumnSegment> columns, final
Collection<RollupSegment> rollups) {
super(databaseType);
+ this.table = table;
+ this.selectStatement = selectStatement;
+ this.ifNotExists = ifNotExists;
+ this.likeTable = likeTable;
+ this.createTableOption = createTableOption;
+ this.columnDefinitions = null == columnDefinitions ?
Collections.emptyList() : columnDefinitions;
+ this.constraintDefinitions = null == constraintDefinitions ?
Collections.emptyList() : constraintDefinitions;
+ this.columns = null == columns ? Collections.emptyList() : columns;
+ this.rollups = null == rollups ? Collections.emptyList() : rollups;
+ attributes = new SQLStatementAttributes(new
TableSQLStatementAttribute(getTables()), new
CreateTableConstraintSQLStatementAttribute(), new
CreateTableIndexSQLStatementAttribute());
}
/**
@@ -101,12 +115,13 @@ public final class CreateTableStatement extends
DDLStatement {
@Override
public void buildAttributes() {
- attributes = new SQLStatementAttributes(new
TableSQLStatementAttribute(getTables()), new
CreateTableConstraintSQLStatementAttribute(), new
CreateTableIndexSQLStatementAttribute());
}
private Collection<SimpleTableSegment> getTables() {
Collection<SimpleTableSegment> result = new LinkedList<>();
- result.add(table);
+ if (null != table) {
+ result.add(table);
+ }
for (ColumnDefinitionSegment each : columnDefinitions) {
result.addAll(each.getReferencedTables());
}
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
index 1720c6047f9..fc25c621a20 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
@@ -409,9 +409,10 @@ class ProxySQLExecutorTest {
}
private CreateTableStatement createCreateTableStatement(final DatabaseType
databaseType) {
- CreateTableStatement result = new CreateTableStatement(databaseType);
- result.setTable(new SimpleTableSegment(new TableNameSegment(0, 0, new
IdentifierValue("t_order"))));
- return result;
+ return CreateTableStatement.builder()
+ .databaseType(databaseType)
+ .table(new SimpleTableSegment(new TableNameSegment(0, 0, new
IdentifierValue("t_order"))))
+ .build();
}
private TruncateStatement createTruncateStatement(final DatabaseType
databaseType) {