You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2022/06/24 04:24:15 UTC
[shardingsphere] branch master updated: Refactor CreateDefinitionSegment (#18560)
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 <zh...@apache.org>
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<>();
}