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

chengzhang 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 5c4d4a36c74 ColumnDefinitionSegment add auto increment attribute. 
(#30638)
5c4d4a36c74 is described below

commit 5c4d4a36c74bd4ab968bff3c5d932cf597297e21
Author: Cong Hu <[email protected]>
AuthorDate: Mon Mar 25 18:25:06 2024 +0800

    ColumnDefinitionSegment add auto increment attribute. (#30638)
---
 .../visitor/statement/type/MySQLDDLStatementVisitor.java      | 11 ++++++++---
 .../common/segment/ddl/column/ColumnDefinitionSegment.java    |  3 +++
 .../asserts/segment/definition/ColumnDefinitionAssert.java    |  1 +
 .../segment/impl/definition/ExpectedColumnDefinition.java     |  3 +++
 test/it/parser/src/main/resources/case/ddl/create-table.xml   |  4 ++--
 5 files changed, 17 insertions(+), 5 deletions(-)

diff --git 
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
 
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
index 0bac97d305e..e42e07d341e 100644
--- 
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
+++ 
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
@@ -60,9 +60,9 @@ import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CreateL
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CreateProcedureContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CreateServerContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CreateTableContext;
-import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CreateTablespaceContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CreateTableOptionContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CreateTableOptionsContext;
+import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CreateTablespaceContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CreateTriggerContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.CreateViewContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.DeallocateContext;
@@ -81,8 +81,8 @@ import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.Execute
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.FieldDefinitionContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.FlowControlStatementContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.FunctionNameContext;
-import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.IfStatementContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.IdentifierContext;
+import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.IfStatementContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.KeyListWithExpressionContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.KeyPartContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser.KeyPartWithExpressionContext;
@@ -350,8 +350,11 @@ public final class MySQLDDLStatementVisitor extends 
MySQLStatementVisitor implem
     private ColumnDefinitionSegment generateColumnDefinitionSegment(final 
ColumnSegment column, final FieldDefinitionContext ctx) {
         DataTypeSegment dataTypeSegment = (DataTypeSegment) 
visit(ctx.dataType());
         boolean isPrimaryKey = ctx.columnAttribute().stream().anyMatch(each -> 
null != each.KEY() && null == each.UNIQUE());
+        boolean isAutoIncrement = ctx.columnAttribute().stream().anyMatch(each 
-> null != each.AUTO_INCREMENT());
         // TODO parse not null
-        return new ColumnDefinitionSegment(column.getStartIndex(), 
ctx.getStop().getStopIndex(), column, dataTypeSegment, isPrimaryKey, false);
+        ColumnDefinitionSegment result = new 
ColumnDefinitionSegment(column.getStartIndex(), ctx.getStop().getStopIndex(), 
column, dataTypeSegment, isPrimaryKey, false);
+        result.setAutoIncrement(isAutoIncrement);
+        return result;
     }
     
     @Override
@@ -568,9 +571,11 @@ public final class MySQLDDLStatementVisitor extends 
MySQLStatementVisitor implem
         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 = 
ctx.fieldDefinition().columnAttribute().stream().anyMatch(each -> null != 
each.KEY() && null == each.UNIQUE());
+        boolean isAutoIncrement = 
ctx.fieldDefinition().columnAttribute().stream().anyMatch(each -> null != 
each.AUTO_INCREMENT());
         // TODO parse not null
         ColumnDefinitionSegment result = new 
ColumnDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), column, dataTypeSegment, isPrimaryKey, false);
         result.getReferencedTables().addAll(getReferencedTables(ctx));
+        result.setAutoIncrement(isAutoIncrement);
         return result;
     }
     
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/ddl/column/ColumnDefinitionSegment.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/ddl/column/ColumnDefinitionSegment.java
index 6372e4eb6c5..f1ed0277b5e 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/ddl/column/ColumnDefinitionSegment.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/ddl/column/ColumnDefinitionSegment.java
@@ -45,6 +45,9 @@ public final class ColumnDefinitionSegment implements 
CreateDefinitionSegment {
     
     private final boolean primaryKey;
     
+    @Setter
+    private boolean autoIncrement;
+    
     private final boolean notNull;
     
     private final Collection<SimpleTableSegment> referencedTables = new 
LinkedList<>();
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/definition/ColumnDefinitionAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/definition/ColumnDefinitionAssert.java
index e856c6b9a3c..78a3a5dab13 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/definition/ColumnDefinitionAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/definition/ColumnDefinitionAssert.java
@@ -51,6 +51,7 @@ public final class ColumnDefinitionAssert {
             assertNull(actual.getDataType(), assertContext.getText("Column 
definition data type should not exist."));
         }
         assertThat(assertContext.getText("Column definition primary key 
assertion error: "), actual.isPrimaryKey(), is(expected.isPrimaryKey()));
+        assertThat(assertContext.getText("Column definition auto increment 
assertion error: "), actual.isAutoIncrement(), is(expected.isAutoIncrement()));
         TableAssert.assertIs(assertContext, actual.getReferencedTables(), 
expected.getReferencedTables());
         assertThat(assertContext.getText("Column definition start index 
assertion error: "), actual.getStartIndex(), is(expected.getStartIndex()));
         assertThat(assertContext.getText("Column definition stop index 
assertion error: "), actual.getStopIndex(), is(expected.getStopIndex()));
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/definition/ExpectedColumnDefinition.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/definition/ExpectedColumnDefinition.java
index 6ca882fb55b..8f42dfad3ef 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/definition/ExpectedColumnDefinition.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/definition/ExpectedColumnDefinition.java
@@ -41,6 +41,9 @@ public final class ExpectedColumnDefinition extends 
AbstractExpectedSQLSegment {
     @XmlAttribute(name = "primary-key")
     private boolean primaryKey;
     
+    @XmlAttribute(name = "auto-increment")
+    private boolean autoIncrement;
+    
     @XmlElement
     private ExpectedColumn column;
     
diff --git a/test/it/parser/src/main/resources/case/ddl/create-table.xml 
b/test/it/parser/src/main/resources/case/ddl/create-table.xml
index 6dc79a24988..0b5c77722a3 100644
--- a/test/it/parser/src/main/resources/case/ddl/create-table.xml
+++ b/test/it/parser/src/main/resources/case/ddl/create-table.xml
@@ -19,7 +19,7 @@
 <sql-parser-test-cases>
     <create-table sql-case-id="create_table_with_column_dec">
         <table name="test3" start-index="13" stop-index="17" />
-        <column-definition type="int" start-index="19" stop-index="39">
+        <column-definition type="int" auto-increment="true" start-index="19" 
stop-index="39">
             <column name="id" />
         </column-definition>
         <column-definition type="dec" start-index="42" stop-index="68">
@@ -426,7 +426,7 @@
     
     <create-table sql-case-id="create_table_with_column_increment">
         <table name="t_order" start-index="13" stop-index="19" />
-        <column-definition type="INT" start-index="22" stop-index="48">
+        <column-definition type="INT" auto-increment="true" start-index="22" 
stop-index="48">
             <column name="order_id" />
         </column-definition>
         <column-definition type="INT" start-index="51" stop-index="61">

Reply via email to