This is an automated email from the ASF dual-hosted git repository.

duanzhengqiang 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 af1d5c82da8 Refactor CreateDefinitionSegment (#18560)
af1d5c82da8 is described below

commit af1d5c82da8be62879fd390dfa2f66333c3531cf
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Jun 24 12:24:11 2022 +0800

    Refactor CreateDefinitionSegment (#18560)
---
 .../impl/EncryptAlterTableTokenGeneratorTest.java  |  7 +++---
 .../impl/EncryptCreateTableTokenGeneratorTest.java |  2 +-
 .../impl/MySQLDDLStatementSQLVisitor.java          | 21 +++++-----------
 .../impl/OpenGaussDDLStatementSQLVisitor.java      | 17 ++++---------
 .../impl/OracleDDLStatementSQLVisitor.java         | 28 ++++------------------
 .../impl/PostgreSQLDDLStatementSQLVisitor.java     | 17 ++++---------
 .../impl/SQL92DDLStatementSQLVisitor.java          | 15 +++---------
 .../impl/SQLServerDDLStatementSQLVisitor.java      |  6 ++---
 .../ddl/column/ColumnDefinitionSegment.java        | 23 +++++++-----------
 9 files changed, 36 insertions(+), 100 deletions(-)

diff --git 
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/impl/EncryptAlterTableTokenGeneratorTest.java
 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/impl/EncryptAlterTableTokenGeneratorTest.java
index c2be5f1d576..30e8e9e4c5e 100644
--- 
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/impl/EncryptAlterTableTokenGeneratorTest.java
+++ 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/impl/EncryptAlterTableTokenGeneratorTest.java
@@ -106,7 +106,7 @@ public final class EncryptAlterTableTokenGeneratorTest {
     private AlterTableStatementContext buildAddColumnStatementContext() {
         AlterTableStatementContext result = 
mock(AlterTableStatementContext.class, RETURNS_DEEP_STUBS);
         
when(result.getSqlStatement().getTable().getTableName().getIdentifier().getValue()).thenReturn("t_encrypt");
-        ColumnDefinitionSegment segment = new ColumnDefinitionSegment(33, 67, 
new ColumnSegment(33, 50, new IdentifierValue("certificate_number")), new 
DataTypeSegment(), false);
+        ColumnDefinitionSegment segment = new ColumnDefinitionSegment(33, 67, 
new ColumnSegment(33, 50, new IdentifierValue("certificate_number")), new 
DataTypeSegment(), false, false);
         AddColumnDefinitionSegment addColumnDefinitionSegment = new 
AddColumnDefinitionSegment(22, 67, Collections.singletonList(segment));
         
when(result.getSqlStatement().getAddColumnDefinitions()).thenReturn(Collections.singletonList(addColumnDefinitionSegment));
         return result;
@@ -135,7 +135,7 @@ public final class EncryptAlterTableTokenGeneratorTest {
     private AlterTableStatementContext buildModifyColumnStatementContext() {
         AlterTableStatementContext result = 
mock(AlterTableStatementContext.class, RETURNS_DEEP_STUBS);
         
when(result.getSqlStatement().getTable().getTableName().getIdentifier().getValue()).thenReturn("t_encrypt");
-        ColumnDefinitionSegment segment = new ColumnDefinitionSegment(36, 70, 
new ColumnSegment(36, 53, new IdentifierValue("certificate_number")), new 
DataTypeSegment(), false);
+        ColumnDefinitionSegment segment = new ColumnDefinitionSegment(36, 70, 
new ColumnSegment(36, 53, new IdentifierValue("certificate_number")), new 
DataTypeSegment(), false, false);
         ModifyColumnDefinitionSegment modifyColumnDefinitionSegment = new 
ModifyColumnDefinitionSegment(22, 70, segment);
         
when(result.getSqlStatement().getModifyColumnDefinitions()).thenReturn(Collections.singletonList(modifyColumnDefinitionSegment));
         return result;
@@ -167,8 +167,7 @@ public final class EncryptAlterTableTokenGeneratorTest {
     private AlterTableStatementContext buildChangeColumnStatementContext() {
         AlterTableStatementContext result = 
mock(AlterTableStatementContext.class, RETURNS_DEEP_STUBS);
         
when(result.getSqlStatement().getTable().getTableName().getIdentifier().getValue()).thenReturn("t_encrypt");
-        ColumnDefinitionSegment segment = new ColumnDefinitionSegment(55, 93,
-                new ColumnSegment(55, 76, new 
IdentifierValue("certificate_number_new")), new DataTypeSegment(), false);
+        ColumnDefinitionSegment segment = new ColumnDefinitionSegment(55, 93, 
new ColumnSegment(55, 76, new IdentifierValue("certificate_number_new")), new 
DataTypeSegment(), false, false);
         ChangeColumnDefinitionSegment changeColumnDefinitionSegment = new 
ChangeColumnDefinitionSegment(22, 93, segment);
         changeColumnDefinitionSegment.setPreviousColumn(new ColumnSegment(36, 
53, new IdentifierValue("certificate_number")));
         
when(result.getSqlStatement().getChangeColumnDefinitions()).thenReturn(Collections.singletonList(changeColumnDefinitionSegment));
diff --git 
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/impl/EncryptCreateTableTokenGeneratorTest.java
 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/impl/EncryptCreateTableTokenGeneratorTest.java
index a5f1c5e9ea7..e2e0fb8f0b2 100644
--- 
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/impl/EncryptCreateTableTokenGeneratorTest.java
+++ 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/impl/EncryptCreateTableTokenGeneratorTest.java
@@ -81,7 +81,7 @@ public final class EncryptCreateTableTokenGeneratorTest {
         CreateTableStatementContext result = 
mock(CreateTableStatementContext.class, RETURNS_DEEP_STUBS);
         
when(result.getSqlStatement().getTable().getTableName().getIdentifier().getValue()).thenReturn("t_encrypt");
         ColumnDefinitionSegment segment = new ColumnDefinitionSegment(25, 78,
-                new ColumnSegment(25, 42, new 
IdentifierValue("certificate_number")), new DataTypeSegment(), false);
+                new ColumnSegment(25, 42, new 
IdentifierValue("certificate_number")), new DataTypeSegment(), false, false);
         
when(result.getSqlStatement().getColumnDefinitions()).thenReturn(Collections.singletonList(segment));
         return result;
     }
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDDLStatementSQLVisitor.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDDLStatementSQLVisitor.java
index dfa14ffbca1..2709154b825 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDDLStatementSQLVisitor.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDDLStatementSQLVisitor.java
@@ -45,7 +45,6 @@ import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.BeginSt
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CaseStatementContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ChangeColumnContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CharsetNameContext;
-import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ColumnAttributeContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.ColumnDefinitionContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CompoundStatementContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CreateDatabaseContext;
@@ -303,8 +302,9 @@ public final class MySQLDDLStatementSQLVisitor extends 
MySQLStatementSQLVisitor
     
     private ColumnDefinitionSegment generateColumnDefinitionSegment(final 
ColumnSegment column, final FieldDefinitionContext ctx) {
         DataTypeSegment dataTypeSegment = (DataTypeSegment) 
visit(ctx.dataType());
-        boolean isPrimaryKey = isPrimaryKey(ctx);
-        return new ColumnDefinitionSegment(column.getStartIndex(), 
ctx.getStop().getStopIndex(), column, dataTypeSegment, isPrimaryKey);
+        boolean isPrimaryKey = ctx.columnAttribute().stream().anyMatch(each -> 
null != each.KEY() && null == each.UNIQUE());
+        // TODO parse not null
+        return new ColumnDefinitionSegment(column.getStartIndex(), 
ctx.getStop().getStopIndex(), column, dataTypeSegment, isPrimaryKey, false);
     }
     
     @Override
@@ -457,9 +457,9 @@ public final class MySQLDDLStatementSQLVisitor extends 
MySQLStatementSQLVisitor
     public ASTNode visitColumnDefinition(final ColumnDefinitionContext ctx) {
         ColumnSegment column = new 
ColumnSegment(ctx.column_name.start.getStartIndex(), 
ctx.column_name.stop.getStopIndex(), (IdentifierValue) visit(ctx.column_name));
         DataTypeSegment dataTypeSegment = (DataTypeSegment) 
visit(ctx.fieldDefinition().dataType());
-        boolean isPrimaryKey = isPrimaryKey(ctx.fieldDefinition());
-        ColumnDefinitionSegment result = new ColumnDefinitionSegment(
-                ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
column, dataTypeSegment, isPrimaryKey);
+        boolean isPrimaryKey = 
ctx.fieldDefinition().columnAttribute().stream().anyMatch(each -> null != 
each.KEY() && null == each.UNIQUE());
+        // TODO parse not null
+        ColumnDefinitionSegment result = new 
ColumnDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), column, dataTypeSegment, isPrimaryKey, false);
         result.getReferencedTables().addAll(getReferencedTables(ctx));
         return result;
     }
@@ -472,15 +472,6 @@ public final class MySQLDDLStatementSQLVisitor extends 
MySQLStatementSQLVisitor
         return result;
     }
     
-    private boolean isPrimaryKey(final FieldDefinitionContext ctx) {
-        for (ColumnAttributeContext each : ctx.columnAttribute()) {
-            if (null != each.KEY() && null == each.UNIQUE()) {
-                return true;
-            }
-        }
-        return false;
-    }
-    
     @Override
     public ASTNode visitTableConstraintDef(final TableConstraintDefContext 
ctx) {
         ConstraintDefinitionSegment result = new 
ConstraintDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex());
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussDDLStatementSQLVisitor.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussDDLStatementSQLVisitor.java
index 4090efa2ed6..db466a9a8ab 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussDDLStatementSQLVisitor.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussDDLStatementSQLVisitor.java
@@ -428,9 +428,9 @@ public final class OpenGaussDDLStatementSQLVisitor extends 
OpenGaussStatementSQL
     public ASTNode visitColumnDefinition(final ColumnDefinitionContext ctx) {
         ColumnSegment column = (ColumnSegment) visit(ctx.columnName());
         DataTypeSegment dataType = (DataTypeSegment) visit(ctx.dataType());
-        boolean isPrimaryKey = isPrimaryKey(ctx);
-        ColumnDefinitionSegment result = new ColumnDefinitionSegment(
-                ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
column, dataType, isPrimaryKey);
+        boolean isPrimaryKey = ctx.columnConstraint().stream().anyMatch(each 
-> null != each.columnConstraintOption() && null != 
each.columnConstraintOption().primaryKey());
+        // TODO parse not null
+        ColumnDefinitionSegment result = new 
ColumnDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), column, dataType, isPrimaryKey, false);
         for (ColumnConstraintContext each : ctx.columnConstraint()) {
             if (null != each.columnConstraintOption().tableName()) {
                 result.getReferencedTables().add((SimpleTableSegment) 
visit(each.columnConstraintOption().tableName()));
@@ -439,15 +439,6 @@ public final class OpenGaussDDLStatementSQLVisitor extends 
OpenGaussStatementSQL
         return result;
     }
     
-    private boolean isPrimaryKey(final ColumnDefinitionContext ctx) {
-        for (ColumnConstraintContext each : ctx.columnConstraint()) {
-            if (null != each.columnConstraintOption() && null != 
each.columnConstraintOption().primaryKey()) {
-                return true;
-            }
-        }
-        return false;
-    }
-    
     @Override
     public ASTNode visitTableConstraintUsingIndex(final 
TableConstraintUsingIndexContext ctx) {
         ConstraintDefinitionSegment result = new 
ConstraintDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex());
@@ -481,7 +472,7 @@ public final class OpenGaussDDLStatementSQLVisitor extends 
OpenGaussStatementSQL
         // TODO visit pk and table ref
         ColumnSegment column = (ColumnSegment) 
visit(ctx.modifyColumn().columnName());
         DataTypeSegment dataType = null == ctx.dataType() ? null : 
(DataTypeSegment) visit(ctx.dataType());
-        ColumnDefinitionSegment columnDefinition = new 
ColumnDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), column, dataType, false);
+        ColumnDefinitionSegment columnDefinition = new 
ColumnDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), column, dataType, false, false);
         return new 
ModifyColumnDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), columnDefinition);
     }
     
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDDLStatementSQLVisitor.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDDLStatementSQLVisitor.java
index 2a9423203b6..fe42945cb7c 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDDLStatementSQLVisitor.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDDLStatementSQLVisitor.java
@@ -259,11 +259,9 @@ public final class OracleDDLStatementSQLVisitor extends 
OracleStatementSQLVisito
     public ASTNode visitColumnDefinition(final ColumnDefinitionContext ctx) {
         ColumnSegment column = (ColumnSegment) visit(ctx.columnName());
         DataTypeSegment dataType = (DataTypeSegment) visit(ctx.dataType());
-        boolean isPrimaryKey = isPrimaryKey(ctx);
-        boolean isNotNull = isNotNull(ctx);
-        ColumnDefinitionSegment result = new ColumnDefinitionSegment(
-                ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
column, dataType, isPrimaryKey);
-        result.setNotNull(isNotNull);
+        boolean isPrimaryKey = ctx.inlineConstraint().stream().anyMatch(each 
-> null != each.primaryKey());
+        boolean isNotNull = ctx.inlineConstraint().stream().anyMatch(each -> 
null != each.NOT() && null != each.NULL());
+        ColumnDefinitionSegment result = new 
ColumnDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), column, dataType, isPrimaryKey, isNotNull);
         for (InlineConstraintContext each : ctx.inlineConstraint()) {
             if (null != each.referencesClause()) {
                 result.getReferencedTables().add((SimpleTableSegment) 
visit(each.referencesClause().tableName()));
@@ -275,24 +273,6 @@ public final class OracleDDLStatementSQLVisitor extends 
OracleStatementSQLVisito
         return result;
     }
     
-    private boolean isPrimaryKey(final ColumnDefinitionContext ctx) {
-        for (InlineConstraintContext each : ctx.inlineConstraint()) {
-            if (null != each.primaryKey()) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private boolean isNotNull(final ColumnDefinitionContext ctx) {
-        for (InlineConstraintContext each : ctx.inlineConstraint()) {
-            if (null != each.NOT() && null != each.NULL()) {
-                return true;
-            }
-        }
-        return false;
-    }
-    
     @SuppressWarnings("unchecked")
     @Override
     public ASTNode visitOutOfLineConstraint(final OutOfLineConstraintContext 
ctx) {
@@ -413,7 +393,7 @@ public final class OracleDDLStatementSQLVisitor extends 
OracleStatementSQLVisito
         ColumnSegment column = (ColumnSegment) visit(ctx.columnName());
         DataTypeSegment dataType = (DataTypeSegment) visit(ctx.dataType());
         // TODO visit pk and reference table
-        return new ColumnDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), column, dataType, false);
+        return new ColumnDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), column, dataType, false, false);
     }
     
     @Override
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLDDLStatementSQLVisitor.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLDDLStatementSQLVisitor.java
index e6cbdea221d..d8b00e96812 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLDDLStatementSQLVisitor.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLDDLStatementSQLVisitor.java
@@ -490,9 +490,9 @@ public final class PostgreSQLDDLStatementSQLVisitor extends 
PostgreSQLStatementS
     public ASTNode visitColumnDefinition(final ColumnDefinitionContext ctx) {
         ColumnSegment column = (ColumnSegment) visit(ctx.columnName());
         DataTypeSegment dataType = (DataTypeSegment) visit(ctx.dataType());
-        boolean isPrimaryKey = isPrimaryKey(ctx);
-        ColumnDefinitionSegment result = new ColumnDefinitionSegment(
-                ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
column, dataType, isPrimaryKey);
+        boolean isPrimaryKey = ctx.columnConstraint().stream().anyMatch(each 
-> null != each.columnConstraintOption() && null != 
each.columnConstraintOption().primaryKey());
+        // TODO parse not null
+        ColumnDefinitionSegment result = new 
ColumnDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), column, dataType, isPrimaryKey, false);
         for (ColumnConstraintContext each : ctx.columnConstraint()) {
             if (null != each.columnConstraintOption().tableName()) {
                 result.getReferencedTables().add((SimpleTableSegment) 
visit(each.columnConstraintOption().tableName()));
@@ -501,15 +501,6 @@ public final class PostgreSQLDDLStatementSQLVisitor 
extends PostgreSQLStatementS
         return result;
     }
     
-    private boolean isPrimaryKey(final ColumnDefinitionContext ctx) {
-        for (ColumnConstraintContext each : ctx.columnConstraint()) {
-            if (null != each.columnConstraintOption() && null != 
each.columnConstraintOption().primaryKey()) {
-                return true;
-            }
-        }
-        return false;
-    }
-    
     @Override
     public ASTNode visitTableConstraintUsingIndex(final 
TableConstraintUsingIndexContext ctx) {
         ConstraintDefinitionSegment result = new 
ConstraintDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex());
@@ -543,7 +534,7 @@ public final class PostgreSQLDDLStatementSQLVisitor extends 
PostgreSQLStatementS
         // TODO visit pk and table ref
         ColumnSegment column = (ColumnSegment) 
visit(ctx.modifyColumn().columnName());
         DataTypeSegment dataType = null == ctx.dataType() ? null : 
(DataTypeSegment) visit(ctx.dataType());
-        ColumnDefinitionSegment columnDefinition = new 
ColumnDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), column, dataType, false);
+        ColumnDefinitionSegment columnDefinition = new 
ColumnDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), column, dataType, false, false);
         return new 
ModifyColumnDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), columnDefinition);
     }
     
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/impl/SQL92DDLStatementSQLVisitor.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/impl/SQL92DDLStatementSQLVisitor.java
index b2d8e1b49ae..1849d6ceaf7 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/impl/SQL92DDLStatementSQLVisitor.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/impl/SQL92DDLStatementSQLVisitor.java
@@ -108,9 +108,9 @@ public final class SQL92DDLStatementSQLVisitor extends 
SQL92StatementSQLVisitor
     public ASTNode visitColumnDefinition(final ColumnDefinitionContext ctx) {
         ColumnSegment column = (ColumnSegment) visit(ctx.columnName());
         DataTypeSegment dataType = (DataTypeSegment) visit(ctx.dataType());
-        boolean isPrimaryKey = isPrimaryKey(ctx);
-        ColumnDefinitionSegment result = new ColumnDefinitionSegment(
-                ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
column, dataType, isPrimaryKey);
+        boolean isPrimaryKey = ctx.dataTypeOption().stream().anyMatch(each -> 
null != each.primaryKey());
+        // TODO parse not null
+        ColumnDefinitionSegment result = new 
ColumnDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), column, dataType, isPrimaryKey, false);
         for (DataTypeOptionContext each : ctx.dataTypeOption()) {
             if (null != each.referenceDefinition()) {
                 result.getReferencedTables().add((SimpleTableSegment) 
visit(each.referenceDefinition().tableName()));
@@ -124,15 +124,6 @@ public final class SQL92DDLStatementSQLVisitor extends 
SQL92StatementSQLVisitor
         return new ConstraintDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex());
     }
     
-    private boolean isPrimaryKey(final ColumnDefinitionContext ctx) {
-        for (DataTypeOptionContext each : ctx.dataTypeOption()) {
-            if (null != each.primaryKey()) {
-                return true;
-            }
-        }
-        return false;
-    }
-    
     @Override
     public ASTNode visitAddConstraintSpecification(final 
AddConstraintSpecificationContext ctx) {
         return new 
AddConstraintDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), (ConstraintDefinitionSegment) 
visit(ctx.constraintDefinition()));
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerDDLStatementSQLVisitor.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerDDLStatementSQLVisitor.java
index f8f756f65ad..55fff3c9164 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerDDLStatementSQLVisitor.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerDDLStatementSQLVisitor.java
@@ -180,8 +180,8 @@ public final class SQLServerDDLStatementSQLVisitor extends 
SQLServerStatementSQL
         ColumnSegment column = (ColumnSegment) visit(ctx.columnName());
         DataTypeSegment dataType = (DataTypeSegment) visit(ctx.dataType());
         boolean isPrimaryKey = isPrimaryKey(ctx);
-        ColumnDefinitionSegment result = new ColumnDefinitionSegment(
-                ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
column, dataType, isPrimaryKey);
+        // TODO parse not null
+        ColumnDefinitionSegment result = new 
ColumnDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), column, dataType, isPrimaryKey, false);
         for (ColumnDefinitionOptionContext each : 
ctx.columnDefinitionOption()) {
             for (ColumnConstraintContext columnConstraint : 
each.columnConstraint()) {
                 if (null != columnConstraint.columnForeignKeyConstraint()) {
@@ -302,7 +302,7 @@ public final class SQLServerDDLStatementSQLVisitor extends 
SQLServerStatementSQL
         // TODO visit pk and table ref
         ColumnSegment column = (ColumnSegment) 
visit(ctx.alterColumnOperation().columnName());
         DataTypeSegment dataType = (DataTypeSegment) visit(ctx.dataType());
-        ColumnDefinitionSegment columnDefinition = new 
ColumnDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), column, dataType, false);
+        ColumnDefinitionSegment columnDefinition = new 
ColumnDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), column, dataType, false, false);
         return new 
ModifyColumnDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), columnDefinition);
     }
     
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/ddl/column/ColumnDefinitionSegment.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/ddl/column/ColumnDefinitionSegment.java
index 0614a842ad5..4376d58774e 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/ddl/column/ColumnDefinitionSegment.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/ddl/column/ColumnDefinitionSegment.java
@@ -18,40 +18,33 @@
 package org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.column;
 
 import lombok.Getter;
-import lombok.Setter;
+import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.CreateDefinitionSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.DataTypeSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
+
 import java.util.Collection;
 import java.util.LinkedList;
 
 /**
  * Column definition segment.
  */
+@RequiredArgsConstructor
 @Getter
-@Setter
 public final class ColumnDefinitionSegment implements CreateDefinitionSegment {
     
     private final int startIndex;
     
     private final int stopIndex;
     
-    private ColumnSegment columnName;
+    private final ColumnSegment columnName;
     
-    private DataTypeSegment dataType;
+    private final DataTypeSegment dataType;
     
-    private boolean primaryKey;
-
-    private boolean notNull;
+    private final boolean primaryKey;
     
-    private final Collection<SimpleTableSegment> referencedTables = new 
LinkedList<>();
+    private final boolean notNull;
     
-    public ColumnDefinitionSegment(final int startIndex, final int stopIndex, 
final ColumnSegment columnName, final DataTypeSegment dataType, final boolean 
primaryKey) {
-        this.startIndex = startIndex;
-        this.stopIndex = stopIndex;
-        this.columnName = columnName;
-        this.dataType = dataType;
-        this.primaryKey = primaryKey;
-    }
+    private final Collection<SimpleTableSegment> referencedTables = new 
LinkedList<>();
 }

Reply via email to