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 df6d14bcdaa Support parsing Doris ALTER TABLE REPLACE syntax (#38101)
df6d14bcdaa is described below

commit df6d14bcdaafb23195b12f02361f94f8ed59feea
Author: cxy <[email protected]>
AuthorDate: Fri Feb 20 00:46:59 2026 +0800

    Support parsing Doris ALTER TABLE REPLACE syntax (#38101)
---
 .../src/main/antlr4/imports/doris/DDLStatement.g4  |  1 +
 .../statement/type/DorisDDLStatementVisitor.java   | 17 +++++++++
 .../ddl/table/ReplaceTableDefinitionSegment.java   | 42 ++++++++++++++++++++++
 .../type/ddl/table/AlterTableStatement.java        | 15 ++++++++
 .../standard/type/AlterTableStatementAssert.java   | 39 ++++++++++++++++++++
 .../definition/ExpectedReplaceTableDefinition.java | 40 +++++++++++++++++++++
 .../table/AlterTableStatementTestCase.java         |  4 +++
 .../src/main/resources/case/ddl/alter-table.xml    | 41 +++++++++++++++++++++
 .../resources/sql/supported/ddl/alter-table.xml    |  4 +++
 9 files changed, 203 insertions(+)

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 750d00b0523..32367d83747 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
@@ -139,6 +139,7 @@ alterListItem
     | RENAME keyOrIndex indexName TO indexName  # renameIndex
     | RENAME ROLLUP oldRollupName=identifier newRollupName=identifier  # 
renameRollup
     | RENAME PARTITION oldPartitionName=identifier newPartitionName=identifier 
 # renamePartition
+    | REPLACE WITH TABLE tableName propertiesClause?  # replaceTable
     | CONVERT TO charset charsetName collateClause?  # alterConvert
     | FORCE  # alterTableForce
     | ORDER BY alterOrderList  # alterTableOrder
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 06c9cef0c43..134029ed4b7 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
@@ -117,6 +117,7 @@ import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.ValidSt
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.WhileStatementContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.RenameRollupContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.RenamePartitionContext;
+import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.ReplaceTableContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.AlterStoragePolicyContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.PropertiesClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.CreateEncryptKeyContext;
@@ -163,6 +164,7 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.Con
 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.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;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.view.ViewColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
@@ -478,6 +480,8 @@ public final class DorisDDLStatementVisitor extends 
DorisStatementVisitor implem
             
alterTableStatement.getDropConstraintDefinitions().add((DropConstraintDefinitionSegment)
 alterDefinitionSegment);
         } else if (alterDefinitionSegment instanceof 
RenameTableDefinitionSegment) {
             alterTableStatement.setRenameTable(((RenameTableDefinitionSegment) 
alterDefinitionSegment).getRenameTable());
+        } else if (alterDefinitionSegment instanceof 
ReplaceTableDefinitionSegment) {
+            
alterTableStatement.setReplaceTable((ReplaceTableDefinitionSegment) 
alterDefinitionSegment);
         } else if (alterDefinitionSegment instanceof 
ConvertTableDefinitionSegment) {
             
alterTableStatement.setConvertTableDefinition((ConvertTableDefinitionSegment) 
alterDefinitionSegment);
         } else if (alterDefinitionSegment instanceof 
DropIndexDefinitionSegment) {
@@ -563,6 +567,9 @@ public final class DorisDDLStatementVisitor extends 
DorisStatementVisitor implem
         if (alterListItemContext instanceof AlterRenameTableContext) {
             return Optional.of((RenameTableDefinitionSegment) 
visit(alterListItemContext));
         }
+        if (alterListItemContext instanceof ReplaceTableContext) {
+            return Optional.of((ReplaceTableDefinitionSegment) 
visit(alterListItemContext));
+        }
         if (alterListItemContext instanceof AlterConvertContext) {
             return Optional.of((ConvertTableDefinitionSegment) 
visit(alterListItemContext));
         }
@@ -660,6 +667,16 @@ public final class DorisDDLStatementVisitor extends 
DorisStatementVisitor implem
         return result;
     }
     
+    @Override
+    public ASTNode visitReplaceTable(final ReplaceTableContext ctx) {
+        ReplaceTableDefinitionSegment result = new 
ReplaceTableDefinitionSegment(ctx.start.getStartIndex(), 
ctx.stop.getStopIndex());
+        result.setReplaceTable((SimpleTableSegment) visit(ctx.tableName()));
+        if (null != ctx.propertiesClause()) {
+            
result.setProperties(extractPropertiesSegment(ctx.propertiesClause()));
+        }
+        return result;
+    }
+    
     @Override
     public ASTNode visitRenameTable(final RenameTableContext ctx) {
         Collection<RenameTableDefinitionSegment> renameTables = new 
LinkedList<>();
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/table/ReplaceTableDefinitionSegment.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/table/ReplaceTableDefinitionSegment.java
new file mode 100644
index 00000000000..55a755789d4
--- /dev/null
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/ddl/table/ReplaceTableDefinitionSegment.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table;
+
+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.generic.table.SimpleTableSegment;
+
+/**
+ * Replace table definition segment.
+ */
+@RequiredArgsConstructor
+@Getter
+@Setter
+public final class ReplaceTableDefinitionSegment implements 
AlterDefinitionSegment {
+    
+    private final int startIndex;
+    
+    private final int stopIndex;
+    
+    private SimpleTableSegment replaceTable;
+    
+    private PropertiesSegment properties;
+}
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 adcf04cfaad..92e849d41ca 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
@@ -42,6 +42,7 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.rollup.Re
 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.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;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
@@ -66,6 +67,8 @@ public final class AlterTableStatement extends DDLStatement {
     
     private SimpleTableSegment renameTable;
     
+    private ReplaceTableDefinitionSegment replaceTable;
+    
     private ConvertTableDefinitionSegment convertTableDefinition;
     
     private ModifyCollectionRetrievalSegment modifyCollectionRetrieval;
@@ -119,6 +122,15 @@ public final class AlterTableStatement extends 
DDLStatement {
         return Optional.ofNullable(renameTable);
     }
     
+    /**
+     * Get replace table definition.
+     *
+     * @return replace table definition
+     */
+    public Optional<ReplaceTableDefinitionSegment> getReplaceTable() {
+        return Optional.ofNullable(replaceTable);
+    }
+    
     /**
      * Get convert table definition.
      *
@@ -175,6 +187,9 @@ public final class AlterTableStatement extends DDLStatement 
{
         if (getRenameTable().isPresent()) {
             result.add(getRenameTable().get());
         }
+        if (getReplaceTable().isPresent() && null != 
getReplaceTable().get().getReplaceTable()) {
+            result.add(getReplaceTable().get().getReplaceTable());
+        }
         for (AddColumnDefinitionSegment each : addColumnDefinitions) {
             for (ColumnDefinitionSegment columnDefinition : 
each.getColumnDefinitions()) {
                 result.addAll(columnDefinition.getReferencedTables());
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 38d47b7bac9..8b7b6fa4b65 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
@@ -33,6 +33,9 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.partition
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.primary.DropPrimaryKeyDefinitionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.rollup.RenameRollupDefinitionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.ConvertTableDefinitionSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.ReplaceTableDefinitionSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.property.PropertiesSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.property.PropertySegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.table.AlterTableStatement;
@@ -57,6 +60,8 @@ 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.ExpectedRenameIndexDefinition;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedRenamePartitionDefinition;
 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.distsql.ExpectedProperties;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.ExpectedProperty;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.standard.table.AlterTableStatementTestCase;
 
 import java.util.Collection;
@@ -87,6 +92,7 @@ public final class AlterTableStatementAssert {
     public static void assertIs(final SQLCaseAssertContext assertContext, 
final AlterTableStatement actual, final AlterTableStatementTestCase expected) {
         assertTable(assertContext, actual, expected);
         assertRenameTable(assertContext, actual, expected);
+        assertReplaceTable(assertContext, actual, expected);
         assertAddColumnDefinitions(assertContext, actual, expected);
         assertAddConstraintDefinitions(assertContext, actual, expected);
         assertModifyConstraintDefinitions(assertContext, actual, expected);
@@ -128,6 +134,39 @@ public final class AlterTableStatementAssert {
         }
     }
     
+    private static void assertReplaceTable(final SQLCaseAssertContext 
assertContext, final AlterTableStatement actual, final 
AlterTableStatementTestCase expected) {
+        Optional<ReplaceTableDefinitionSegment> replaceTableSegment = 
actual.getReplaceTable();
+        if (null == expected.getReplaceTable()) {
+            assertFalse(replaceTableSegment.isPresent(), 
assertContext.getText("Actual replace table segment should not exist."));
+        } else {
+            assertTrue(replaceTableSegment.isPresent(), 
assertContext.getText("Actual replace table segment should exist."));
+            ReplaceTableDefinitionSegment actualReplaceTable = 
replaceTableSegment.get();
+            assertNotNull(actualReplaceTable.getReplaceTable(), 
assertContext.getText("Actual replace table should exist."));
+            TableAssert.assertIs(assertContext, 
actualReplaceTable.getReplaceTable(), expected.getReplaceTable().getTable());
+            if (null == expected.getReplaceTable().getProperties()) {
+                assertNull(actualReplaceTable.getProperties(), 
assertContext.getText("Actual properties should not exist."));
+            } else {
+                assertNotNull(actualReplaceTable.getProperties(), 
assertContext.getText("Actual properties should exist."));
+                assertProperties(assertContext, 
actualReplaceTable.getProperties(), expected.getReplaceTable().getProperties());
+            }
+            SQLSegmentAssert.assertIs(assertContext, actualReplaceTable, 
expected.getReplaceTable());
+        }
+    }
+    
+    private static void assertProperties(final SQLCaseAssertContext 
assertContext, final PropertiesSegment actual, final ExpectedProperties 
expected) {
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        assertThat(assertContext.getText("Properties size assertion error: "), 
actual.getProperties().size(), is(expected.getProperties().size()));
+        for (int i = 0; i < expected.getProperties().size(); i++) {
+            assertProperty(assertContext, actual.getProperties().get(i), 
expected.getProperties().get(i));
+        }
+    }
+    
+    private static void assertProperty(final SQLCaseAssertContext 
assertContext, final PropertySegment actual, final ExpectedProperty expected) {
+        assertThat(assertContext.getText(String.format("Property key '%s' 
assertion error: ", expected.getKey())), actual.getKey(), 
is(expected.getKey()));
+        assertThat(assertContext.getText(String.format("Property value for key 
'%s' assertion error: ", expected.getKey())), actual.getValue(), 
is(expected.getValue()));
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    }
+    
     private static void assertTable(final SQLCaseAssertContext assertContext, 
final AlterTableStatement actual, final AlterTableStatementTestCase expected) {
         TableAssert.assertIs(assertContext, actual.getTable(), 
expected.getTable());
     }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/definition/ExpectedReplaceTableDefinition.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/definition/ExpectedReplaceTableDefinition.java
new file mode 100644
index 00000000000..878988167f6
--- /dev/null
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/definition/ExpectedReplaceTableDefinition.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+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.AbstractExpectedSQLSegment;
+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.table.ExpectedSimpleTable;
+
+import javax.xml.bind.annotation.XmlElement;
+
+/**
+ * Expected replace table definition.
+ */
+@Getter
+@Setter
+public final class ExpectedReplaceTableDefinition extends 
AbstractExpectedSQLSegment {
+    
+    @XmlElement(name = "table")
+    private ExpectedSimpleTable table;
+    
+    @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/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 0532b39baa6..a740b6b477e 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
@@ -32,6 +32,7 @@ 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.ExpectedRenameIndexDefinition;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.definition.ExpectedRenamePartitionDefinition;
 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.ExpectedReplaceTableDefinition;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedSimpleTable;
 
 import javax.xml.bind.annotation.XmlElement;
@@ -51,6 +52,9 @@ public final class AlterTableStatementTestCase extends 
SQLParserTestCase {
     @XmlElement(name = "rename-table")
     private ExpectedSimpleTable renameTable;
     
+    @XmlElement(name = "replace-table")
+    private ExpectedReplaceTableDefinition replaceTable;
+    
     @XmlElement(name = "convert-table")
     private ExpectedConvertTableDefinition convertTable;
     
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 897ca46c7d9..350cbd53a82 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
@@ -2761,4 +2761,45 @@
             </column-definition>
         </add-column>
     </alter-table>
+
+    <alter-table sql-case-id="alter_table_replace_with_table_swap_true">
+        <table name="tbl1" start-index="12" stop-index="15" />
+        <replace-table start-index="17" stop-index="67">
+            <table name="tbl2" start-index="36" stop-index="39" />
+            <properties start-index="41" stop-index="67">
+                <property key="swap" value="true" start-index="52" 
stop-index="66" />
+            </properties>
+        </replace-table>
+    </alter-table>
+
+    <alter-table sql-case-id="alter_table_replace_with_table_swap_false">
+        <table name="tbl1" start-index="12" stop-index="15" />
+        <replace-table start-index="17" stop-index="68">
+            <table name="tbl2" start-index="36" stop-index="39" />
+            <properties start-index="41" stop-index="68">
+                <property key="swap" value="false" start-index="52" 
stop-index="67" />
+            </properties>
+        </replace-table>
+    </alter-table>
+
+    <alter-table sql-case-id="alter_table_replace_with_table_default">
+        <table name="tbl1" start-index="12" stop-index="15" />
+        <replace-table start-index="17" stop-index="39">
+            <table name="tbl2" start-index="36" stop-index="39" />
+        </replace-table>
+    </alter-table>
+
+    <alter-table sql-case-id="alter_table_replace_with_table_with_database">
+        <table name="tbl1" start-index="12" stop-index="19">
+            <owner name="db1" start-index="12" stop-index="14" />
+        </table>
+        <replace-table start-index="21" stop-index="75">
+            <table name="tbl2" start-index="40" stop-index="47">
+                <owner name="db2" start-index="40" stop-index="42" />
+            </table>
+            <properties start-index="49" stop-index="75">
+                <property key="swap" value="true" start-index="60" 
stop-index="74" />
+            </properties>
+        </replace-table>
+    </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 51c3fb7978e..e8bea9f12ad 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
@@ -398,4 +398,8 @@
     <sql-case id="alter_table_with_lock_default_mysql" value="ALTER TABLE 
t_order ADD COLUMN col_lock_default INT, LOCK=DEFAULT" db-types="MySQL" />
     <sql-case id="alter_table_with_lock_shared_doris" value="ALTER TABLE 
t_order ADD COLUMN col_lock_shared INT, LOCK=SHARED" db-types="Doris" />
     <sql-case id="alter_table_with_lock_exclusive_doris" value="ALTER TABLE 
t_order ADD COLUMN col_lock_exclusive INT, LOCK=EXCLUSIVE" db-types="Doris" />
+    <sql-case id="alter_table_replace_with_table_swap_true" value="ALTER TABLE 
tbl1 REPLACE WITH TABLE tbl2 PROPERTIES('swap' = 'true')" db-types="Doris" />
+    <sql-case id="alter_table_replace_with_table_swap_false" value="ALTER 
TABLE tbl1 REPLACE WITH TABLE tbl2 PROPERTIES('swap' = 'false')" 
db-types="Doris" />
+    <sql-case id="alter_table_replace_with_table_default" value="ALTER TABLE 
tbl1 REPLACE WITH TABLE tbl2" db-types="Doris" />
+    <sql-case id="alter_table_replace_with_table_with_database" value="ALTER 
TABLE db1.tbl1 REPLACE WITH TABLE db2.tbl2 PROPERTIES('swap' = 'true')" 
db-types="Doris" />
 </sql-cases>

Reply via email to