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">