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 4d3e9b02390 Support parsing Doris ALTER TABLE PROPERTY syntax (#38193)
4d3e9b02390 is described below

commit 4d3e9b02390a419fb2dab26df59f9ac72a1c1e8a
Author: cxy <[email protected]>
AuthorDate: Wed Feb 25 23:03:58 2026 +0800

    Support parsing Doris ALTER TABLE PROPERTY syntax (#38193)
    
    * Support parsing Doris ALTER TABLE PROPERTY syntax
    
    * Support parsing Doris ALTER TABLE PROPERTY syntax
---
 .../src/main/antlr4/imports/doris/BaseRule.g4      |   1 +
 .../src/main/antlr4/imports/doris/DDLStatement.g4  |   9 +-
 .../src/main/antlr4/imports/doris/DorisKeyword.g4  |   8 ++
 .../visitor/statement/DorisStatementVisitor.java   |   3 +
 .../statement/type/DorisDDLStatementVisitor.java   |  98 +++++++++++++++--
 .../ddl/column/ColumnDefinitionSegment.java        |   3 +
 .../column/alter/DropColumnDefinitionSegment.java  |  15 +++
 .../ModifyDistributionSegment.java}                |  15 +--
 .../ModifyEngineSegment.java}                      |  27 +++--
 .../EnableFeatureSegment.java}                     |  27 +++--
 .../ModifyTableCommentSegment.java}                |  13 +--
 .../type/ddl/table/AlterTableStatement.java        |  15 +++
 .../segment/definition/ColumnDefinitionAssert.java |   6 ++
 .../standard/type/AlterTableStatementAssert.java   | 119 ++++++++++++++++++---
 .../jaxb/segment/impl/column/ExpectedColumn.java   |   4 +
 .../impl/definition/ExpectedColumnDefinition.java  |   4 +
 .../ExpectedEnableFeatureDefinition.java}          |  21 ++--
 .../ExpectedModifyDistributionDefinition.java}     |  23 ++--
 .../ExpectedModifyEngineDefinition.java}           |  21 ++--
 .../ExpectedModifyTableCommentDefinition.java}     |  20 ++--
 .../table/AlterTableStatementTestCase.java         |  20 ++++
 .../src/main/resources/case/ddl/alter-table.xml    | 104 ++++++++++++++++++
 .../resources/sql/supported/ddl/alter-table.xml    |  10 ++
 23 files changed, 485 insertions(+), 101 deletions(-)

diff --git 
a/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/BaseRule.g4 
b/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/BaseRule.g4
index 7a071cd7bd1..e18e719ee17 100644
--- a/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/BaseRule.g4
+++ b/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/BaseRule.g4
@@ -242,6 +242,7 @@ identifierKeywordsUnambiguous
     | FAILED_LOGIN_ATTEMPTS
     | FAST
     | FAULTS
+    | FEATURE
     | FILE_BLOCK_SIZE
     | FILTER
     | FIRST
diff --git 
a/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/DDLStatement.g4 
b/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/DDLStatement.g4
index 25aadf18e90..c9204ef75aa 100644
--- 
a/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/DDLStatement.g4
+++ 
b/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/DDLStatement.g4
@@ -127,8 +127,8 @@ alterListItem
     | ADD tableConstraintDef  # addTableConstraint
     | ADD ROLLUP rollupItem (COMMA_ rollupItem)*  # addRollup
     | CHANGE COLUMN? columnInternalRef=identifier columnDefinition place?  # 
changeColumn
-    | MODIFY COLUMN? columnInternalRef=identifier fieldDefinition place?   # 
modifyColumn
-    | DROP (COLUMN? columnInternalRef=identifier restrict? | FOREIGN KEY 
columnInternalRef=identifier | PRIMARY KEY | keyOrIndex indexName | CHECK 
identifier | CONSTRAINT identifier)  # alterTableDrop
+    | MODIFY COLUMN? columnInternalRef=identifier (fieldDefinition place? | 
COMMENT string_)   # modifyColumn
+    | DROP (COLUMN? columnInternalRef=identifier restrict? | FOREIGN KEY 
columnInternalRef=identifier | PRIMARY KEY | keyOrIndex indexName | CHECK 
identifier | CONSTRAINT identifier) propertiesClause?  # alterTableDrop
     | DROP ROLLUP rollupNameItem (COMMA_ rollupNameItem)*  # dropRollup
     | DISABLE KEYS  # disableKeys
     | ENABLE KEYS   # enableKeys
@@ -191,6 +191,11 @@ standaloneAlterCommands
     | IMPORT TABLESPACE
     | alterPartition
     | (SECONDARY_LOAD | SECONDARY_UNLOAD)
+    | SET LP_ properties RP_
+    | ENABLE FEATURE string_ (WITH PROPERTIES LP_ properties RP_)?
+    | MODIFY DISTRIBUTION distributedbyClause
+    | MODIFY COMMENT string_
+    | MODIFY ENGINE TO identifier PROPERTIES LP_ properties RP_
     ;
 
 alterPartition
diff --git 
a/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/DorisKeyword.g4 
b/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/DorisKeyword.g4
index 85d2c6f4557..9df598e58c6 100644
--- 
a/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/DorisKeyword.g4
+++ 
b/parser/sql/engine/dialect/doris/src/main/antlr4/imports/doris/DorisKeyword.g4
@@ -673,6 +673,10 @@ DISTRIBUTED
     ;
 // DORIS ADDED END
 
+DISTRIBUTION
+    : D I S T R I B U T I O N
+    ;
+
 DYNAMIC
     : D Y N A M I C
     ;
@@ -835,6 +839,10 @@ FAULTS
     : F A U L T S
     ;
 
+FEATURE
+    : F E A T U R E
+    ;
+
 FETCH
     : F E T C H
     ;
diff --git 
a/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/DorisStatementVisitor.java
 
b/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/DorisStatementVisitor.java
index 573d96cc69d..9152936d961 100644
--- 
a/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/DorisStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/engine/doris/visitor/statement/DorisStatementVisitor.java
@@ -1455,6 +1455,9 @@ public abstract class DorisStatementVisitor extends 
DorisStatementBaseVisitor<AS
     
     @Override
     public final ASTNode visitDataType(final DataTypeContext ctx) {
+        if (null == ctx.dataTypeName) {
+            return null;
+        }
         DataTypeSegment result = new DataTypeSegment();
         result.setDataTypeName(ctx.dataTypeName.getText());
         result.setStartIndex(ctx.start.getStartIndex());
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 338bc45b769..8aa178e3be0 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
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.database.connector.core.type.DatabaseType;
 import org.apache.shardingsphere.sql.parser.api.ASTNode;
 import 
org.apache.shardingsphere.sql.parser.api.visitor.statement.type.DDLStatementVisitor;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.AlterCatalogContext;
+import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.StandaloneAlterCommandsContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.ResumeJobContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.ResumeSyncJobContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.PauseSyncJobContext;
@@ -136,6 +137,7 @@ import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.DorisPa
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.DistributedbyClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.PartitionValueListContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.PropertiesClauseContext;
+import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.PropertiesContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.CreateEncryptKeyContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.CreateFileContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.DropFileContext;
@@ -161,7 +163,10 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constrain
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.alter.AddConstraintDefinitionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.alter.DropConstraintDefinitionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.alter.ModifyConstraintDefinitionSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.distribution.ModifyDistributionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.engine.EngineSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.engine.ModifyEngineSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.feature.EnableFeatureSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.index.DropIndexDefinitionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.index.IndexNameSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.index.IndexSegment;
@@ -189,6 +194,7 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.Alg
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.ConvertTableDefinitionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.CreateTableOptionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.LockTableSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.ModifyTableCommentSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.RenameTableDefinitionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.ReplaceTableDefinitionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.tablespace.TablespaceSegment;
@@ -565,12 +571,8 @@ public final class DorisDDLStatementVisitor extends 
DorisStatementVisitor implem
     public ASTNode visitAlterTable(final AlterTableContext ctx) {
         AlterTableStatement result = new 
AlterTableStatement(getDatabaseType());
         result.setTable((SimpleTableSegment) visit(ctx.tableName()));
-        if (null != ctx.standaloneAlterTableAction() && null != 
ctx.standaloneAlterTableAction().standaloneAlterCommands()
-                && null != 
ctx.standaloneAlterTableAction().standaloneAlterCommands().alterPartition()) {
-            AlterDefinitionSegment alterDefinition = (AlterDefinitionSegment) 
visit(ctx.standaloneAlterTableAction().standaloneAlterCommands().alterPartition());
-            if (null != alterDefinition) {
-                setAlterDefinition(result, alterDefinition);
-            }
+        if (null != ctx.standaloneAlterTableAction() && null != 
ctx.standaloneAlterTableAction().standaloneAlterCommands()) {
+            processStandaloneAlterCommands(result, 
ctx.standaloneAlterTableAction().standaloneAlterCommands());
             return result;
         }
         if (null == ctx.alterTableActions() || null == 
ctx.alterTableActions().alterCommandList() || null == 
ctx.alterTableActions().alterCommandList().alterList()) {
@@ -582,6 +584,58 @@ public final class DorisDDLStatementVisitor extends 
DorisStatementVisitor implem
         return result;
     }
     
+    private void processStandaloneAlterCommands(final AlterTableStatement 
statement, final StandaloneAlterCommandsContext ctx) {
+        if (null != ctx.alterPartition()) {
+            AlterDefinitionSegment alterDefinition = (AlterDefinitionSegment) 
visit(ctx.alterPartition());
+            if (null != alterDefinition) {
+                setAlterDefinition(statement, alterDefinition);
+            }
+        }
+        if (null != ctx.SET() && null != ctx.properties()) {
+            PropertiesSegment properties = 
extractPropertiesSegmentFromPropertiesContext(ctx.properties());
+            statement.getSetPropertiesDefinitions().add(properties);
+        }
+        if (null != ctx.ENABLE() && null != ctx.FEATURE() && null != 
ctx.string_()) {
+            int stopIndex = ctx.string_().getStop().getStopIndex();
+            if (null != ctx.WITH() && null != ctx.PROPERTIES() && null != 
ctx.properties()) {
+                stopIndex = ctx.RP_().getSymbol().getStopIndex();
+            }
+            EnableFeatureSegment enableFeatureSegment = new 
EnableFeatureSegment(ctx.ENABLE().getSymbol().getStartIndex(), stopIndex, 
ctx.string_().getText());
+            if (null != ctx.WITH() && null != ctx.PROPERTIES() && null != 
ctx.properties()) {
+                
enableFeatureSegment.setProperties(extractPropertiesSegmentFromPropertiesContext(ctx.properties()));
+            }
+            statement.getEnableFeatureDefinitions().add(enableFeatureSegment);
+        }
+        if (null != ctx.distributedbyClause()) {
+            ModifyDistributionSegment modifyDistributionSegment = 
(ModifyDistributionSegment) visit(ctx.distributedbyClause());
+            
statement.getModifyDistributionDefinitions().add(modifyDistributionSegment);
+        }
+        if (null != ctx.MODIFY() && null != ctx.COMMENT() && null != 
ctx.string_()) {
+            ModifyTableCommentSegment modifyTableCommentSegment =
+                    new 
ModifyTableCommentSegment(ctx.MODIFY().getSymbol().getStartIndex(), 
ctx.string_().getStop().getStopIndex(), ctx.string_().getText());
+            
statement.getModifyTableCommentDefinitions().add(modifyTableCommentSegment);
+        }
+        if (null != ctx.ENGINE() && null != ctx.identifier()) {
+            ModifyEngineSegment modifyEngineSegment = new 
ModifyEngineSegment(ctx.ENGINE().getSymbol().getStartIndex(), 
ctx.RP_().getSymbol().getStopIndex(), ctx.identifier().getText());
+            if (null != ctx.properties()) {
+                
modifyEngineSegment.setProperties(extractPropertiesSegmentFromPropertiesContext(ctx.properties()));
+            }
+            statement.getModifyEngineDefinitions().add(modifyEngineSegment);
+        }
+    }
+    
+    @Override
+    public ASTNode visitDistributedbyClause(final DistributedbyClauseContext 
ctx) {
+        ModifyDistributionSegment result = new 
ModifyDistributionSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex());
+        if (null != ctx.columnName()) {
+            result.getColumns().add((ColumnSegment) visit(ctx.columnName()));
+        }
+        if (null != ctx.NUMBER_()) {
+            result.setBuckets(Integer.parseInt(ctx.NUMBER_().getText()));
+        }
+        return result;
+    }
+    
     private void setAlterDefinition(final AlterTableStatement 
alterTableStatement, final AlterDefinitionSegment alterDefinitionSegment) {
         if (alterDefinitionSegment instanceof AddColumnDefinitionSegment) {
             
alterTableStatement.getAddColumnDefinitions().add((AddColumnDefinitionSegment) 
alterDefinitionSegment);
@@ -635,6 +689,8 @@ public final class DorisDDLStatementVisitor extends 
DorisStatementVisitor implem
         // TODO parse not null
         ColumnDefinitionSegment result = new 
ColumnDefinitionSegment(column.getStartIndex(), ctx.getStop().getStopIndex(), 
column, dataTypeSegment, isPrimaryKey, false, getText(ctx));
         result.setAutoIncrement(isAutoIncrement);
+        ctx.columnAttribute().stream().filter(each -> null != each.COMMENT() 
&& null != each.string_()).findFirst()
+                .ifPresent(each -> 
result.setComment(SQLUtils.getExactlyValue(each.string_().getText())));
         return result;
     }
     
@@ -730,7 +786,12 @@ public final class DorisDDLStatementVisitor extends 
DorisStatementVisitor implem
         if (null == alterTableDrop.KEY() && null == 
alterTableDrop.keyOrIndex()) {
             ColumnSegment column = new 
ColumnSegment(alterTableDrop.columnInternalRef.start.getStartIndex(), 
alterTableDrop.columnInternalRef.stop.getStopIndex(),
                     (IdentifierValue) visit(alterTableDrop.columnInternalRef));
-            return Optional.of(new 
DropColumnDefinitionSegment(alterTableDrop.getStart().getStartIndex(), 
alterTableDrop.getStop().getStopIndex(), Collections.singleton(column)));
+            DropColumnDefinitionSegment dropColumnSegment =
+                    new 
DropColumnDefinitionSegment(alterTableDrop.getStart().getStartIndex(), 
alterTableDrop.getStop().getStopIndex(), Collections.singleton(column));
+            if (null != alterTableDrop.propertiesClause()) {
+                
dropColumnSegment.setProperties(extractPropertiesSegment(alterTableDrop.propertiesClause()));
+            }
+            return Optional.of(dropColumnSegment);
         }
         if (null != alterTableDrop.keyOrIndex()) {
             return Optional.of(
@@ -830,8 +891,16 @@ public final class DorisDDLStatementVisitor extends 
DorisStatementVisitor implem
     
     private ModifyColumnDefinitionSegment 
generateModifyColumnDefinitionSegment(final ModifyColumnContext ctx) {
         ColumnSegment column = new 
ColumnSegment(ctx.columnInternalRef.start.getStartIndex(), 
ctx.columnInternalRef.stop.getStopIndex(), (IdentifierValue) 
visit(ctx.columnInternalRef));
-        ModifyColumnDefinitionSegment result = new 
ModifyColumnDefinitionSegment(
-                ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), 
generateColumnDefinitionSegment(column, ctx.fieldDefinition()));
+        ColumnDefinitionSegment columnDefinition;
+        if (null != ctx.fieldDefinition()) {
+            columnDefinition = generateColumnDefinitionSegment(column, 
ctx.fieldDefinition());
+        } else {
+            columnDefinition = new 
ColumnDefinitionSegment(ctx.columnInternalRef.start.getStartIndex(), 
ctx.getStop().getStopIndex(), column, null, false, false, getText(ctx));
+            if (null != ctx.string_()) {
+                
columnDefinition.setComment(SQLUtils.getExactlyValue(ctx.string_().getText()));
+            }
+        }
+        ModifyColumnDefinitionSegment result = new 
ModifyColumnDefinitionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), columnDefinition);
         if (null != ctx.place()) {
             result.setColumnPosition((ColumnPositionSegment) 
visit(ctx.place()));
         }
@@ -1244,6 +1313,17 @@ public final class DorisDDLStatementVisitor extends 
DorisStatementVisitor implem
         return result;
     }
     
+    private PropertiesSegment 
extractPropertiesSegmentFromPropertiesContext(final PropertiesContext ctx) {
+        PropertiesSegment result = new 
PropertiesSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex());
+        for (PropertyContext each : ctx.property()) {
+            String key = getPropertyKey(each);
+            String value = getPropertyValue(each);
+            PropertySegment propertySegment = new 
PropertySegment(each.getStart().getStartIndex(), each.getStop().getStopIndex(), 
key, value);
+            result.getProperties().add(propertySegment);
+        }
+        return result;
+    }
+    
     private String getPropertyValue(final PropertyContext ctx) {
         return SQLUtils.getExactlyValue(ctx.literals().getText());
     }
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/column/ColumnDefinitionSegment.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/column/ColumnDefinitionSegment.java
index b9acd5d4673..1895e2cc79c 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/column/ColumnDefinitionSegment.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/column/ColumnDefinitionSegment.java
@@ -62,4 +62,7 @@ public final class ColumnDefinitionSegment implements 
CreateDefinitionSegment {
     
     @Setter
     private String collateName;
+    
+    @Setter
+    private String comment;
 }
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/column/alter/DropColumnDefinitionSegment.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/column/alter/DropColumnDefinitionSegment.java
index 1691ecc36af..8d9b5f10812 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/column/alter/DropColumnDefinitionSegment.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/column/alter/DropColumnDefinitionSegment.java
@@ -20,10 +20,13 @@ package 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.a
 import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import lombok.Setter;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.AlterDefinitionSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.property.PropertiesSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
 
 import java.util.Collection;
+import java.util.Optional;
 
 /**
  * Drop column definition segment.
@@ -38,4 +41,16 @@ public final class DropColumnDefinitionSegment implements 
AlterDefinitionSegment
     private final int stopIndex;
     
     private final Collection<ColumnSegment> columns;
+    
+    @Setter
+    private PropertiesSegment properties;
+    
+    /**
+     * Get properties.
+     *
+     * @return properties
+     */
+    public Optional<PropertiesSegment> getProperties() {
+        return Optional.ofNullable(properties);
+    }
 }
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/column/alter/DropColumnDefinitionSegment.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/distribution/ModifyDistributionSegment.java
similarity index 80%
copy from 
parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/column/alter/DropColumnDefinitionSegment.java
copy to 
parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/distribution/ModifyDistributionSegment.java
index 1691ecc36af..a838b87a0c3 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/column/alter/DropColumnDefinitionSegment.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/distribution/ModifyDistributionSegment.java
@@ -15,27 +15,30 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.alter;
+package 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.distribution;
 
-import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import lombok.Setter;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.AlterDefinitionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
 
 import java.util.Collection;
+import java.util.LinkedList;
 
 /**
- * Drop column definition segment.
+ * Modify distribution segment.
  */
 @RequiredArgsConstructor
 @Getter
-@EqualsAndHashCode
-public final class DropColumnDefinitionSegment implements 
AlterDefinitionSegment {
+@Setter
+public final class ModifyDistributionSegment implements AlterDefinitionSegment 
{
     
     private final int startIndex;
     
     private final int stopIndex;
     
-    private final Collection<ColumnSegment> columns;
+    private final Collection<ColumnSegment> columns = new LinkedList<>();
+    
+    private Integer buckets;
 }
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/column/alter/DropColumnDefinitionSegment.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/engine/ModifyEngineSegment.java
similarity index 71%
copy from 
parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/column/alter/DropColumnDefinitionSegment.java
copy to 
parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/engine/ModifyEngineSegment.java
index 1691ecc36af..7836c323e66 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/column/alter/DropColumnDefinitionSegment.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/engine/ModifyEngineSegment.java
@@ -15,27 +15,38 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.alter;
+package org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.engine;
 
-import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import lombok.Setter;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.AlterDefinitionSegment;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.property.PropertiesSegment;
 
-import java.util.Collection;
+import java.util.Optional;
 
 /**
- * Drop column definition segment.
+ * Modify engine segment.
  */
 @RequiredArgsConstructor
 @Getter
-@EqualsAndHashCode
-public final class DropColumnDefinitionSegment implements 
AlterDefinitionSegment {
+@Setter
+public final class ModifyEngineSegment implements AlterDefinitionSegment {
     
     private final int startIndex;
     
     private final int stopIndex;
     
-    private final Collection<ColumnSegment> columns;
+    private final String engineType;
+    
+    private PropertiesSegment properties;
+    
+    /**
+     * Get properties.
+     *
+     * @return properties
+     */
+    public Optional<PropertiesSegment> getProperties() {
+        return Optional.ofNullable(properties);
+    }
 }
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/column/alter/DropColumnDefinitionSegment.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/feature/EnableFeatureSegment.java
similarity index 71%
copy from 
parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/column/alter/DropColumnDefinitionSegment.java
copy to 
parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/feature/EnableFeatureSegment.java
index 1691ecc36af..c3854a9511f 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/column/alter/DropColumnDefinitionSegment.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/feature/EnableFeatureSegment.java
@@ -15,27 +15,38 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.alter;
+package 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.feature;
 
-import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import lombok.Setter;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.AlterDefinitionSegment;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.property.PropertiesSegment;
 
-import java.util.Collection;
+import java.util.Optional;
 
 /**
- * Drop column definition segment.
+ * Enable feature segment.
  */
 @RequiredArgsConstructor
 @Getter
-@EqualsAndHashCode
-public final class DropColumnDefinitionSegment implements 
AlterDefinitionSegment {
+@Setter
+public final class EnableFeatureSegment implements AlterDefinitionSegment {
     
     private final int startIndex;
     
     private final int stopIndex;
     
-    private final Collection<ColumnSegment> columns;
+    private final String featureName;
+    
+    private PropertiesSegment properties;
+    
+    /**
+     * Get properties.
+     *
+     * @return properties
+     */
+    public Optional<PropertiesSegment> getProperties() {
+        return Optional.ofNullable(properties);
+    }
 }
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/column/alter/DropColumnDefinitionSegment.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/table/ModifyTableCommentSegment.java
similarity index 75%
copy from 
parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/column/alter/DropColumnDefinitionSegment.java
copy to 
parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/table/ModifyTableCommentSegment.java
index 1691ecc36af..417307e2e9f 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/column/alter/DropColumnDefinitionSegment.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/table/ModifyTableCommentSegment.java
@@ -15,27 +15,22 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.alter;
+package org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table;
 
-import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.AlterDefinitionSegment;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
-
-import java.util.Collection;
 
 /**
- * Drop column definition segment.
+ * Modify table comment segment.
  */
 @RequiredArgsConstructor
 @Getter
-@EqualsAndHashCode
-public final class DropColumnDefinitionSegment implements 
AlterDefinitionSegment {
+public final class ModifyTableCommentSegment implements AlterDefinitionSegment 
{
     
     private final int startIndex;
     
     private final int stopIndex;
     
-    private final Collection<ColumnSegment> columns;
+    private final String tableComment;
 }
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/table/AlterTableStatement.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/table/AlterTableStatement.java
index 941a87d8c81..99f2353b8e1 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/table/AlterTableStatement.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/table/AlterTableStatement.java
@@ -44,9 +44,14 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.primary.D
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.rollup.AddRollupDefinitionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.rollup.DropRollupDefinitionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.rollup.RenameRollupDefinitionSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.distribution.ModifyDistributionSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.engine.ModifyEngineSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.feature.EnableFeatureSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.property.PropertiesSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.AlgorithmTypeSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.ConvertTableDefinitionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.LockTableSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.ModifyTableCommentSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.ReplaceTableDefinitionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
@@ -84,6 +89,16 @@ public final class AlterTableStatement extends DDLStatement {
     
     private DropPrimaryKeyDefinitionSegment dropPrimaryKeyDefinition;
     
+    private final Collection<PropertiesSegment> setPropertiesDefinitions = new 
LinkedList<>();
+    
+    private final Collection<EnableFeatureSegment> enableFeatureDefinitions = 
new LinkedList<>();
+    
+    private final Collection<ModifyTableCommentSegment> 
modifyTableCommentDefinitions = new LinkedList<>();
+    
+    private final Collection<ModifyEngineSegment> modifyEngineDefinitions = 
new LinkedList<>();
+    
+    private final Collection<ModifyDistributionSegment> 
modifyDistributionDefinitions = new LinkedList<>();
+    
     private final Collection<AddColumnDefinitionSegment> addColumnDefinitions 
= new LinkedList<>();
     
     private final Collection<ModifyColumnDefinitionSegment> 
modifyColumnDefinitions = 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 c9c76f105f5..f58400b0a52 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
@@ -63,6 +63,12 @@ public final class ColumnDefinitionAssert {
         if (expected.isNotNull()) {
             assertThat(assertContext.getText("Column definition not null 
assertion error: "), actual.isNotNull(), is(expected.isNotNull()));
         }
+        if (null != expected.getComment()) {
+            assertNotNull(actual.getComment(), assertContext.getText("Column 
definition comment should exist."));
+            assertThat(assertContext.getText("Column definition comment 
assertion error: "), actual.getComment(), is(expected.getComment().getText()));
+        } else {
+            assertNull(actual.getComment(), assertContext.getText("Column 
definition comment should not exist."));
+        }
     }
     
     private static void assertColumnName(final SQLCaseAssertContext 
assertContext, final ColumnDefinitionSegment actual, final 
ExpectedColumnDefinition expected) {
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/standard/type/AlterTableStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/standard/type/AlterTableStatementAssert.java
index 5e9f3dbd2e0..d186a68bd34 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/standard/type/AlterTableStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/standard/type/AlterTableStatementAssert.java
@@ -35,8 +35,12 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.partition
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.partition.ModifyPartitionDefinitionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.partition.PartitionValuesSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.partition.RenamePartitionDefinitionSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.distribution.ModifyDistributionSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.engine.ModifyEngineSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.feature.EnableFeatureSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.rollup.AddRollupDefinitionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.rollup.DropRollupDefinitionSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.ModifyTableCommentSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.primary.DropPrimaryKeyDefinitionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.rollup.RenameRollupDefinitionSegment;
@@ -62,6 +66,7 @@ import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.rol
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.table.TableAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedAddColumnDefinition;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedChangeColumnDefinition;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.column.ExpectedColumn;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedColumnDefinition;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedConstraintDefinition;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedModifyColumnDefinition;
@@ -73,6 +78,10 @@ import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.s
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedAddRollupDefinition;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedDropRollupDefinition;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedRenameRollupDefinition;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedEnableFeatureDefinition;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedModifyEngineDefinition;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedModifyTableCommentDefinition;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedModifyDistributionDefinition;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.partition.ExpectedAddPartitions;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.ExpectedProperties;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.ExpectedProperty;
@@ -80,7 +89,6 @@ import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.s
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.standard.table.AlterTableStatementTestCase;
 
 import java.util.Collection;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Optional;
 
@@ -126,6 +134,11 @@ public final class AlterTableStatementAssert {
         assertConvertTable(assertContext, actual, expected);
         assertModifyCollectionRetrievalDefinitions(assertContext, actual, 
expected);
         assertDropPrimaryKeyDefinition(assertContext, actual, expected);
+        assertSetPropertiesDefinitions(assertContext, actual, expected);
+        assertEnableFeatureDefinitions(assertContext, actual, expected);
+        assertModifyTableCommentDefinitions(assertContext, actual, expected);
+        assertModifyEngineDefinitions(assertContext, actual, expected);
+        assertModifyDistributionDefinitions(assertContext, actual, expected);
     }
     
     private static void assertConvertTable(final SQLCaseAssertContext 
assertContext, final AlterTableStatement actual, final 
AlterTableStatementTestCase expected) {
@@ -275,21 +288,23 @@ public final class AlterTableStatementAssert {
     }
     
     private static void assertDropColumns(final SQLCaseAssertContext 
assertContext, final AlterTableStatement actual, final 
AlterTableStatementTestCase expected) {
-        Collection<ColumnSegment> actualDropColumns = getDropColumns(actual);
-        assertThat(assertContext.getText("Drop columns size assertion error: 
"), actualDropColumns.size(), is(expected.getDropColumns().size()));
-        int count = 0;
-        for (ColumnSegment each : actualDropColumns) {
-            ColumnAssert.assertIs(assertContext, each, 
expected.getDropColumns().get(count));
-            count++;
+        int actualColumnCount = 0;
+        for (DropColumnDefinitionSegment each : 
actual.getDropColumnDefinitions()) {
+            actualColumnCount += each.getColumns().size();
         }
-    }
-    
-    private static Collection<ColumnSegment> getDropColumns(final 
AlterTableStatement actual) {
-        Collection<ColumnSegment> result = new LinkedList<>();
+        assertThat(assertContext.getText("Drop column definitions size 
assertion error: "), actualColumnCount, is(expected.getDropColumns().size()));
+        int count = 0;
         for (DropColumnDefinitionSegment each : 
actual.getDropColumnDefinitions()) {
-            result.addAll(each.getColumns());
+            for (ColumnSegment column : each.getColumns()) {
+                ExpectedColumn expectedColumn = 
expected.getDropColumns().get(count);
+                ColumnAssert.assertIs(assertContext, column, expectedColumn);
+                if (null != expectedColumn.getProperties()) {
+                    assertTrue(each.getProperties().isPresent(), 
assertContext.getText("Drop column properties should exist"));
+                    assertProperties(assertContext, 
each.getProperties().get(), expectedColumn.getProperties());
+                }
+                count++;
+            }
         }
-        return result;
     }
     
     private static void assertRenameIndexDefinitions(final 
SQLCaseAssertContext assertContext, final AlterTableStatement actual, final 
AlterTableStatementTestCase expected) {
@@ -499,4 +514,82 @@ public final class AlterTableStatementAssert {
         assertNotNull(expected.getDropPrimaryKeyDefinition(), 
assertContext.getText("Actual drop primary key definition should exist."));
         SQLSegmentAssert.assertIs(assertContext, 
actual.getDropPrimaryKeyDefinition().get(), 
expected.getDropPrimaryKeyDefinition());
     }
+    
+    private static void assertSetPropertiesDefinitions(final 
SQLCaseAssertContext assertContext, final AlterTableStatement actual, final 
AlterTableStatementTestCase expected) {
+        assertThat(assertContext.getText("Set properties definitions size 
assertion error: "), actual.getSetPropertiesDefinitions().size(), 
is(expected.getSetProperties().size()));
+        int count = 0;
+        for (PropertiesSegment each : actual.getSetPropertiesDefinitions()) {
+            ExpectedProperties expectedProperties = 
expected.getSetProperties().get(count);
+            assertProperties(assertContext, each, expectedProperties);
+            SQLSegmentAssert.assertIs(assertContext, each, expectedProperties);
+            count++;
+        }
+    }
+    
+    private static void assertEnableFeatureDefinitions(final 
SQLCaseAssertContext assertContext, final AlterTableStatement actual, final 
AlterTableStatementTestCase expected) {
+        assertThat(assertContext.getText("Enable feature definitions size 
assertion error: "), actual.getEnableFeatureDefinitions().size(), 
is(expected.getEnableFeatures().size()));
+        int count = 0;
+        for (EnableFeatureSegment each : actual.getEnableFeatureDefinitions()) 
{
+            ExpectedEnableFeatureDefinition expectedEnableFeature = 
expected.getEnableFeatures().get(count);
+            assertThat(assertContext.getText("Feature name assertion error: 
"), each.getFeatureName(), is(expectedEnableFeature.getFeatureName()));
+            if (null != expectedEnableFeature.getProperties()) {
+                assertTrue(each.getProperties().isPresent(), 
assertContext.getText("Enable feature properties should exist"));
+                assertProperties(assertContext, each.getProperties().get(), 
expectedEnableFeature.getProperties());
+            } else {
+                assertFalse(each.getProperties().isPresent(), 
assertContext.getText("Enable feature properties should not exist"));
+            }
+            SQLSegmentAssert.assertIs(assertContext, each, 
expectedEnableFeature);
+            count++;
+        }
+    }
+    
+    private static void assertModifyTableCommentDefinitions(final 
SQLCaseAssertContext assertContext, final AlterTableStatement actual, final 
AlterTableStatementTestCase expected) {
+        assertThat(assertContext.getText("Modify table comment definitions 
size assertion error: "), actual.getModifyTableCommentDefinitions().size(), 
is(expected.getModifyTableComments().size()));
+        int count = 0;
+        for (ModifyTableCommentSegment each : 
actual.getModifyTableCommentDefinitions()) {
+            ExpectedModifyTableCommentDefinition expectedModifyTableComment = 
expected.getModifyTableComments().get(count);
+            assertThat(assertContext.getText("Table comment assertion error: 
"), each.getTableComment(), is(expectedModifyTableComment.getTableComment()));
+            SQLSegmentAssert.assertIs(assertContext, each, 
expectedModifyTableComment);
+            count++;
+        }
+    }
+    
+    private static void assertModifyEngineDefinitions(final 
SQLCaseAssertContext assertContext, final AlterTableStatement actual, final 
AlterTableStatementTestCase expected) {
+        assertThat(assertContext.getText("Modify engine definitions size 
assertion error: "), actual.getModifyEngineDefinitions().size(), 
is(expected.getModifyEngines().size()));
+        int count = 0;
+        for (ModifyEngineSegment each : actual.getModifyEngineDefinitions()) {
+            ExpectedModifyEngineDefinition expectedModifyEngine = 
expected.getModifyEngines().get(count);
+            assertThat(assertContext.getText("Engine type assertion error: "), 
each.getEngineType(), is(expectedModifyEngine.getEngineType()));
+            if (null != expectedModifyEngine.getProperties()) {
+                assertTrue(each.getProperties().isPresent(), 
assertContext.getText("Modify engine properties should exist"));
+                assertProperties(assertContext, each.getProperties().get(), 
expectedModifyEngine.getProperties());
+            } else {
+                assertFalse(each.getProperties().isPresent(), 
assertContext.getText("Modify engine properties should not exist"));
+            }
+            SQLSegmentAssert.assertIs(assertContext, each, 
expectedModifyEngine);
+            count++;
+        }
+    }
+    
+    private static void assertModifyDistributionDefinitions(final 
SQLCaseAssertContext assertContext, final AlterTableStatement actual, final 
AlterTableStatementTestCase expected) {
+        assertThat(assertContext.getText("Modify distribution definitions size 
assertion error: "), actual.getModifyDistributionDefinitions().size(), 
is(expected.getModifyDistributions().size()));
+        int count = 0;
+        for (ModifyDistributionSegment each : 
actual.getModifyDistributionDefinitions()) {
+            ExpectedModifyDistributionDefinition expectedModifyDistribution = 
expected.getModifyDistributions().get(count);
+            assertThat(assertContext.getText("Modify distribution columns size 
assertion error: "), each.getColumns().size(), 
is(expectedModifyDistribution.getColumns().size()));
+            int columnCount = 0;
+            for (ColumnSegment columnSegment : each.getColumns()) {
+                ColumnAssert.assertIs(assertContext, columnSegment, 
expectedModifyDistribution.getColumns().get(columnCount));
+                columnCount++;
+            }
+            if (null != expectedModifyDistribution.getBuckets()) {
+                assertNotNull(each.getBuckets(), assertContext.getText("Modify 
distribution buckets should exist"));
+                assertThat(assertContext.getText("Buckets assertion error: "), 
each.getBuckets(), is(expectedModifyDistribution.getBuckets()));
+            } else {
+                assertNull(each.getBuckets(), assertContext.getText("Modify 
distribution buckets should not exist"));
+            }
+            SQLSegmentAssert.assertIs(assertContext, each, 
expectedModifyDistribution);
+            count++;
+        }
+    }
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/column/ExpectedColumn.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/column/ExpectedColumn.java
index 58bceb1d722..1ae223f73b6 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/column/ExpectedColumn.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/column/ExpectedColumn.java
@@ -21,6 +21,7 @@ import lombok.Getter;
 import lombok.Setter;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedIdentifierSQLSegment;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.bound.ExpectedColumnBoundInfo;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.ExpectedProperties;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.ExpectedExpressionSegment;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedOwner;
 
@@ -38,4 +39,7 @@ public final class ExpectedColumn extends 
AbstractExpectedIdentifierSQLSegment i
     
     @XmlElement(name = "column-bound")
     private ExpectedColumnBoundInfo columnBound;
+    
+    @XmlElement(name = "properties")
+    private ExpectedProperties properties;
 }
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 b2b1ba1996a..a75b2302da2 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
@@ -21,6 +21,7 @@ import lombok.Getter;
 import lombok.Setter;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedSQLSegment;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.column.ExpectedColumn;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.comments.ExpectedComment;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.generic.ExpectedDataType;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedSimpleTable;
 
@@ -56,4 +57,7 @@ public final class ExpectedColumnDefinition extends 
AbstractExpectedSQLSegment {
     
     @XmlElement(name = "referenced-table")
     private final List<ExpectedSimpleTable> referencedTables = new 
LinkedList<>();
+    
+    @XmlElement(name = "comment")
+    private ExpectedComment comment;
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/column/ExpectedColumn.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/definition/ExpectedEnableFeatureDefinition.java
similarity index 62%
copy from 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/column/ExpectedColumn.java
copy to 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/definition/ExpectedEnableFeatureDefinition.java
index 58bceb1d722..a9a8bdf83b5 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/column/ExpectedColumn.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/definition/ExpectedEnableFeatureDefinition.java
@@ -15,27 +15,26 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.column;
+package 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition;
 
 import lombok.Getter;
 import lombok.Setter;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedIdentifierSQLSegment;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.bound.ExpectedColumnBoundInfo;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.ExpectedExpressionSegment;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedOwner;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedSQLSegment;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.ExpectedProperties;
 
+import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 
 /**
- * Expected column.
+ * Expected enable feature definition.
  */
 @Getter
 @Setter
-public final class ExpectedColumn extends AbstractExpectedIdentifierSQLSegment 
implements ExpectedExpressionSegment {
+public final class ExpectedEnableFeatureDefinition extends 
AbstractExpectedSQLSegment {
     
-    @XmlElement
-    private ExpectedOwner owner;
+    @XmlAttribute(name = "feature-name")
+    private String featureName;
     
-    @XmlElement(name = "column-bound")
-    private ExpectedColumnBoundInfo columnBound;
+    @XmlElement(name = "properties")
+    private ExpectedProperties properties;
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/column/ExpectedColumn.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/definition/ExpectedModifyDistributionDefinition.java
similarity index 62%
copy from 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/column/ExpectedColumn.java
copy to 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/definition/ExpectedModifyDistributionDefinition.java
index 58bceb1d722..ef68ef7a7cf 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/column/ExpectedColumn.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/definition/ExpectedModifyDistributionDefinition.java
@@ -15,27 +15,28 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.column;
+package 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition;
 
 import lombok.Getter;
 import lombok.Setter;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedIdentifierSQLSegment;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.bound.ExpectedColumnBoundInfo;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.ExpectedExpressionSegment;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedOwner;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedSQLSegment;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.column.ExpectedColumn;
 
+import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
+import java.util.LinkedList;
+import java.util.List;
 
 /**
- * Expected column.
+ * Expected modify distribution definition.
  */
 @Getter
 @Setter
-public final class ExpectedColumn extends AbstractExpectedIdentifierSQLSegment 
implements ExpectedExpressionSegment {
+public final class ExpectedModifyDistributionDefinition extends 
AbstractExpectedSQLSegment {
     
-    @XmlElement
-    private ExpectedOwner owner;
+    @XmlElement(name = "column")
+    private final List<ExpectedColumn> columns = new LinkedList<>();
     
-    @XmlElement(name = "column-bound")
-    private ExpectedColumnBoundInfo columnBound;
+    @XmlAttribute(name = "buckets")
+    private Integer buckets;
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/column/ExpectedColumn.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/definition/ExpectedModifyEngineDefinition.java
similarity index 62%
copy from 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/column/ExpectedColumn.java
copy to 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/definition/ExpectedModifyEngineDefinition.java
index 58bceb1d722..58769797c52 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/column/ExpectedColumn.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/definition/ExpectedModifyEngineDefinition.java
@@ -15,27 +15,26 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.column;
+package 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition;
 
 import lombok.Getter;
 import lombok.Setter;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedIdentifierSQLSegment;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.bound.ExpectedColumnBoundInfo;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.ExpectedExpressionSegment;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedOwner;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedSQLSegment;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.ExpectedProperties;
 
+import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 
 /**
- * Expected column.
+ * Expected modify engine definition.
  */
 @Getter
 @Setter
-public final class ExpectedColumn extends AbstractExpectedIdentifierSQLSegment 
implements ExpectedExpressionSegment {
+public final class ExpectedModifyEngineDefinition extends 
AbstractExpectedSQLSegment {
     
-    @XmlElement
-    private ExpectedOwner owner;
+    @XmlAttribute(name = "engine-type")
+    private String engineType;
     
-    @XmlElement(name = "column-bound")
-    private ExpectedColumnBoundInfo columnBound;
+    @XmlElement(name = "properties")
+    private ExpectedProperties properties;
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/column/ExpectedColumn.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/definition/ExpectedModifyTableCommentDefinition.java
similarity index 56%
copy from 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/column/ExpectedColumn.java
copy to 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/definition/ExpectedModifyTableCommentDefinition.java
index 58bceb1d722..340974ed76a 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/column/ExpectedColumn.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/definition/ExpectedModifyTableCommentDefinition.java
@@ -15,27 +15,21 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.column;
+package 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition;
 
 import lombok.Getter;
 import lombok.Setter;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedIdentifierSQLSegment;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.bound.ExpectedColumnBoundInfo;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.expr.ExpectedExpressionSegment;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedOwner;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedSQLSegment;
 
-import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlAttribute;
 
 /**
- * Expected column.
+ * Expected modify table comment definition.
  */
 @Getter
 @Setter
-public final class ExpectedColumn extends AbstractExpectedIdentifierSQLSegment 
implements ExpectedExpressionSegment {
+public final class ExpectedModifyTableCommentDefinition extends 
AbstractExpectedSQLSegment {
     
-    @XmlElement
-    private ExpectedOwner owner;
-    
-    @XmlElement(name = "column-bound")
-    private ExpectedColumnBoundInfo columnBound;
+    @XmlAttribute(name = "table-comment")
+    private String tableComment;
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/standard/table/AlterTableStatementTestCase.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/standard/table/AlterTableStatementTestCase.java
index 12f85ded7c6..48aceb735c9 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/standard/table/AlterTableStatementTestCase.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/standard/table/AlterTableStatementTestCase.java
@@ -37,8 +37,13 @@ import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.s
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedReplaceTableDefinition;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedAddPartitionDefinition;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedModifyPartitionDefinition;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedEnableFeatureDefinition;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedModifyEngineDefinition;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedModifyTableCommentDefinition;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedModifyDistributionDefinition;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.partition.ExpectedAddPartitions;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedSimpleTable;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.ExpectedProperties;
 
 import javax.xml.bind.annotation.XmlElement;
 import java.util.LinkedList;
@@ -113,4 +118,19 @@ public final class AlterTableStatementTestCase extends 
SQLParserTestCase {
     
     @XmlElement(name = "drop-primary-key")
     private ExpectedDropPrimaryKeyDefinition dropPrimaryKeyDefinition;
+    
+    @XmlElement(name = "set-properties")
+    private final List<ExpectedProperties> setProperties = new LinkedList<>();
+    
+    @XmlElement(name = "enable-feature")
+    private final List<ExpectedEnableFeatureDefinition> enableFeatures = new 
LinkedList<>();
+    
+    @XmlElement(name = "modify-table-comment")
+    private final List<ExpectedModifyTableCommentDefinition> 
modifyTableComments = new LinkedList<>();
+    
+    @XmlElement(name = "modify-engine")
+    private final List<ExpectedModifyEngineDefinition> modifyEngines = new 
LinkedList<>();
+    
+    @XmlElement(name = "modify-distribution")
+    private final List<ExpectedModifyDistributionDefinition> 
modifyDistributions = new LinkedList<>();
 }
diff --git a/test/it/parser/src/main/resources/case/ddl/alter-table.xml 
b/test/it/parser/src/main/resources/case/ddl/alter-table.xml
index 0a5e7133e00..b403ead414e 100644
--- a/test/it/parser/src/main/resources/case/ddl/alter-table.xml
+++ b/test/it/parser/src/main/resources/case/ddl/alter-table.xml
@@ -3233,4 +3233,108 @@
             <interval-unit name="DAY" start-index="96" stop-index="98" />
         </add-partitions>
     </alter-table>
+    
+    <alter-table sql-case-id="alter_table_set_bloom_filter_columns_doris">
+        <table name="my_table" start-index="12" stop-index="30">
+            <owner name="example_db" start-index="12" stop-index="21" />
+        </table>
+        <set-properties start-index="37" stop-index="69">
+            <property key="bloom_filter_columns" value="k1,k2,k3" 
start-index="37" stop-index="69" />
+        </set-properties>
+    </alter-table>
+    
+    <alter-table sql-case-id="alter_table_set_colocate_with_doris">
+        <table name="my_table" start-index="12" stop-index="30">
+            <owner name="example_db" start-index="12" stop-index="21" />
+        </table>
+        <set-properties start-index="37" stop-index="58">
+            <property key="colocate_with" value="t1" start-index="37" 
stop-index="58" />
+        </set-properties>
+    </alter-table>
+    
+    <alter-table sql-case-id="alter_table_drop_column_with_properties_doris">
+        <table name="my_table" start-index="12" stop-index="30">
+            <owner name="example_db" start-index="12" stop-index="21" />
+        </table>
+        <drop-column name="col2" start-index="44" stop-index="47">
+            <properties start-index="49" stop-index="94">
+                <property key="bloom_filter_columns" value="k1,k2,k3" 
start-index="61" stop-index="93" />
+            </properties>
+        </drop-column>
+    </alter-table>
+    
+    <alter-table sql-case-id="alter_table_enable_feature_batch_delete_doris">
+        <table name="my_table" start-index="12" stop-index="30">
+            <owner name="example_db" start-index="12" stop-index="21" />
+        </table>
+        <enable-feature feature-name="&quot;BATCH_DELETE&quot;" 
start-index="32" stop-index="60" />
+    </alter-table>
+    
+    <alter-table sql-case-id="alter_table_enable_feature_sequence_load_doris">
+        <table name="my_table" start-index="12" stop-index="30">
+            <owner name="example_db" start-index="12" stop-index="21" />
+        </table>
+        <enable-feature feature-name="&quot;SEQUENCE_LOAD&quot;" 
start-index="32" stop-index="120">
+            <properties start-index="80" stop-index="119">
+                <property key="function_column.sequence_type" value="Date" 
start-index="80" stop-index="119" />
+            </properties>
+        </enable-feature>
+    </alter-table>
+    
+    <alter-table sql-case-id="alter_table_modify_distribution_doris">
+        <table name="my_table" start-index="12" stop-index="30">
+            <owner name="example_db" start-index="12" stop-index="21" />
+        </table>
+        <modify-distribution start-index="52" stop-index="85" buckets="50">
+            <column name="k1" start-index="72" stop-index="73" />
+        </modify-distribution>
+    </alter-table>
+    
+    <alter-table sql-case-id="alter_table_modify_table_comment_doris">
+        <table name="my_table" start-index="12" stop-index="30">
+            <owner name="example_db" start-index="12" stop-index="21" />
+        </table>
+        <modify-table-comment table-comment="&quot;new comment&quot;" 
start-index="32" stop-index="59" />
+    </alter-table>
+    
+    <alter-table sql-case-id="alter_table_modify_column_comment_doris">
+        <table name="my_table" start-index="12" stop-index="30">
+            <owner name="example_db" start-index="12" stop-index="21" />
+        </table>
+        <modify-column>
+            <column-definition start-index="46" stop-index="60">
+                <column name="k1" />
+                <comment text="k1" />
+            </column-definition>
+        </modify-column>
+    </alter-table>
+    
+    <alter-table 
sql-case-id="alter_table_modify_multiple_column_comments_doris">
+        <table name="my_table" start-index="12" stop-index="30">
+            <owner name="example_db" start-index="12" stop-index="21" />
+        </table>
+        <modify-column>
+            <column-definition start-index="46" stop-index="60">
+                <column name="k1" />
+                <comment text="k1" />
+            </column-definition>
+        </modify-column>
+        <modify-column>
+            <column-definition start-index="77" stop-index="91">
+                <column name="k2" />
+                <comment text="k2" />
+            </column-definition>
+        </modify-column>
+    </alter-table>
+    
+    <alter-table sql-case-id="alter_table_modify_engine_doris">
+        <table name="mysql_table" start-index="12" stop-index="33">
+            <owner name="example_db" start-index="12" stop-index="21" />
+        </table>
+        <modify-engine engine-type="odbc" start-index="42" stop-index="86">
+            <properties start-index="68" stop-index="85">
+                <property key="driver" value="MySQL" start-index="68" 
stop-index="85" />
+            </properties>
+        </modify-engine>
+    </alter-table>
 </sql-parser-test-cases>
diff --git 
a/test/it/parser/src/main/resources/sql/supported/ddl/alter-table.xml 
b/test/it/parser/src/main/resources/sql/supported/ddl/alter-table.xml
index 91f2eddb9e3..05253af41d1 100644
--- a/test/it/parser/src/main/resources/sql/supported/ddl/alter-table.xml
+++ b/test/it/parser/src/main/resources/sql/supported/ddl/alter-table.xml
@@ -429,4 +429,14 @@
     <sql-case id="alter_table_add_partitions_from_to_interval_month_doris" 
value="ALTER TABLE example_db.my_table ADD PARTITIONS FROM 
(&quot;2023-01-01&quot;) TO (&quot;2025-01-01&quot;) INTERVAL 1 MONTH" 
db-types="Doris" />
     <sql-case id="alter_table_add_partitions_from_to_interval_week_doris" 
value="ALTER TABLE example_db.my_table ADD PARTITIONS FROM 
(&quot;2023-01-01&quot;) TO (&quot;2025-01-01&quot;) INTERVAL 1 WEEK" 
db-types="Doris" />
     <sql-case id="alter_table_add_partitions_from_to_interval_day_doris" 
value="ALTER TABLE example_db.my_table ADD PARTITIONS FROM 
(&quot;2023-01-01&quot;) TO (&quot;2025-01-01&quot;) INTERVAL 1 DAY" 
db-types="Doris" />
+    <sql-case id="alter_table_set_bloom_filter_columns_doris" value="ALTER 
TABLE example_db.my_table SET 
(&quot;bloom_filter_columns&quot;=&quot;k1,k2,k3&quot;)" db-types="Doris" />
+    <sql-case id="alter_table_set_colocate_with_doris" value="ALTER TABLE 
example_db.my_table SET (&quot;colocate_with&quot; = &quot;t1&quot;)" 
db-types="Doris" />
+    <sql-case id="alter_table_drop_column_with_properties_doris" value="ALTER 
TABLE example_db.my_table DROP COLUMN col2 PROPERTIES 
(&quot;bloom_filter_columns&quot;=&quot;k1,k2,k3&quot;)" db-types="Doris" />
+    <sql-case id="alter_table_enable_feature_batch_delete_doris" value="ALTER 
TABLE example_db.my_table ENABLE FEATURE &quot;BATCH_DELETE&quot;" 
db-types="Doris" />
+    <sql-case id="alter_table_enable_feature_sequence_load_doris" value="ALTER 
TABLE example_db.my_table ENABLE FEATURE &quot;SEQUENCE_LOAD&quot; WITH 
PROPERTIES (&quot;function_column.sequence_type&quot; = &quot;Date&quot;)" 
db-types="Doris" />
+    <sql-case id="alter_table_modify_distribution_doris" value="ALTER TABLE 
example_db.my_table MODIFY DISTRIBUTION DISTRIBUTED BY HASH(k1) BUCKETS 50" 
db-types="Doris" />
+    <sql-case id="alter_table_modify_table_comment_doris" value="ALTER TABLE 
example_db.my_table MODIFY COMMENT &quot;new comment&quot;" db-types="Doris" />
+    <sql-case id="alter_table_modify_column_comment_doris" value="ALTER TABLE 
example_db.my_table MODIFY COLUMN k1 COMMENT &quot;k1&quot;" db-types="Doris" />
+    <sql-case id="alter_table_modify_multiple_column_comments_doris" 
value="ALTER TABLE example_db.my_table MODIFY COLUMN k1 COMMENT &quot;k1&quot;, 
MODIFY COLUMN k2 COMMENT &quot;k2&quot;" db-types="Doris" />
+    <sql-case id="alter_table_modify_engine_doris" value="ALTER TABLE 
example_db.mysql_table MODIFY ENGINE TO odbc PROPERTIES(&quot;driver&quot; = 
&quot;MySQL&quot;)" db-types="Doris" />
 </sql-cases>

Reply via email to