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 9ad9ff355f2 Support parsing Doris CREATE TABLE LIKE syntax (#38289)
9ad9ff355f2 is described below

commit 9ad9ff355f243ef8adcad68aa7d924588e0d4c22
Author: cxy <[email protected]>
AuthorDate: Mon Mar 2 11:10:17 2026 +0800

    Support parsing Doris CREATE TABLE LIKE syntax (#38289)
---
 .../doris/src/main/antlr4/imports/doris/DDLStatement.g4   |  2 +-
 .../visitor/statement/type/DorisDDLStatementVisitor.java  |  3 +++
 .../statement/type/ddl/table/CreateTableStatement.java    |  3 +++
 .../ddl/standard/type/CreateTableStatementAssert.java     | 12 ++++++++++++
 .../ddl/standard/table/CreateTableStatementTestCase.java  |  4 ++++
 .../parser/src/main/resources/case/ddl/create-table.xml   | 15 +++++++++++++++
 .../src/main/resources/sql/supported/ddl/create-table.xml |  2 ++
 7 files changed, 40 insertions(+), 1 deletion(-)

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 d04bbb69944..97819f83ffc 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
@@ -689,7 +689,7 @@ visibility
     ;
 
 createLikeClause
-    : LP_? LIKE tableName RP_?
+    : LP_? LIKE tableName RP_? (WITH ROLLUP LP_ identifier (COMMA_ 
identifier)* RP_)?
     ;
 
 createIndexSpecification
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 757cb4044a6..500316eddfd 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
@@ -532,6 +532,9 @@ public final class DorisDDLStatementVisitor extends 
DorisStatementVisitor implem
         }
         if (null != ctx.createLikeClause()) {
             result.setLikeTable((SimpleTableSegment) 
visit(ctx.createLikeClause()));
+            for (IdentifierContext each : ctx.createLikeClause().identifier()) 
{
+                result.getRollups().add(new 
RollupSegment(each.getStart().getStartIndex(), each.getStop().getStopIndex(), 
new IdentifierValue(each.getText())));
+            }
         }
         if (null != ctx.createTableOptions()) {
             result.setCreateTableOption((CreateTableOptionSegment) 
visit(ctx.createTableOptions()));
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/table/CreateTableStatement.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/table/CreateTableStatement.java
index 32f227e2145..eb5e4d2b371 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/table/CreateTableStatement.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/type/ddl/table/CreateTableStatement.java
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.Co
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.ConstraintDefinitionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.ConstraintSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.index.IndexSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.rollup.RollupSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.CreateTableOptionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
@@ -63,6 +64,8 @@ public final class CreateTableStatement extends DDLStatement {
     
     private final List<ColumnSegment> columns = new LinkedList<>();
     
+    private final Collection<RollupSegment> rollups = new LinkedList<>();
+    
     private SQLStatementAttributes attributes;
     
     public CreateTableStatement(final DatabaseType databaseType) {
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/standard/type/CreateTableStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/standard/type/CreateTableStatementAssert.java
index 25a22d09de2..2390220eff2 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/standard/type/CreateTableStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/standard/type/CreateTableStatementAssert.java
@@ -21,6 +21,7 @@ import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.column.ColumnDefinitionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.constraint.ConstraintDefinitionSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.rollup.RollupSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.table.CreateTableOptionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
@@ -31,6 +32,7 @@ import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.col
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.definition.ColumnDefinitionAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.definition.ConstraintDefinitionAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.definition.CreateTableOptionDefinitionAssert;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.rollup.RollupAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.table.TableAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dml.standard.type.SelectStatementAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.standard.table.CreateTableStatementTestCase;
@@ -63,6 +65,7 @@ public final class CreateTableStatementAssert {
         assertCreateTableAsSelectStatement(assertContext, actual, expected);
         assertCreateTableAsSelectStatementColumns(assertContext, actual, 
expected);
         assertLikeTableStatement(assertContext, actual, expected);
+        assertRollups(assertContext, actual, expected);
         assertCreateTableOptionStatement(assertContext, actual, expected);
     }
     
@@ -118,6 +121,15 @@ public final class CreateTableStatementAssert {
         }
     }
     
+    private static void assertRollups(final SQLCaseAssertContext 
assertContext, final CreateTableStatement actual, final 
CreateTableStatementTestCase expected) {
+        assertThat(assertContext.getText("Rollups size assertion error: "), 
actual.getRollups().size(), is(expected.getRollups().size()));
+        int count = 0;
+        for (RollupSegment each : actual.getRollups()) {
+            RollupAssert.assertIs(assertContext, each, 
expected.getRollups().get(count));
+            count++;
+        }
+    }
+    
     private static void assertCreateTableOptionStatement(final 
SQLCaseAssertContext assertContext, final CreateTableStatement actual, final 
CreateTableStatementTestCase expected) {
         Optional<CreateTableOptionSegment> createTableOption = 
actual.getCreateTableOption();
         if (null == expected.getCreateTableOption()) {
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/standard/table/CreateTableStatementTestCase.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/standard/table/CreateTableStatementTestCase.java
index 13dd93ff7e2..ac3bbe8f36c 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/standard/table/CreateTableStatementTestCase.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/standard/table/CreateTableStatementTestCase.java
@@ -24,6 +24,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.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.ExpectedCreateTableOptionDefinition;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.rollup.ExpectedRollup;
 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.statement.dml.standard.SelectStatementTestCase;
 
@@ -56,6 +57,9 @@ public final class CreateTableStatementTestCase extends 
SQLParserTestCase {
     @XmlElement(name = "like-table")
     private ExpectedSimpleTable likeTable;
     
+    @XmlElement(name = "rollup")
+    private final List<ExpectedRollup> rollups = new LinkedList<>();
+    
     @XmlElement(name = "create-table-option")
     private ExpectedCreateTableOptionDefinition createTableOption;
 }
diff --git a/test/it/parser/src/main/resources/case/ddl/create-table.xml 
b/test/it/parser/src/main/resources/case/ddl/create-table.xml
index c3644cbb9c7..bb1170703c4 100644
--- a/test/it/parser/src/main/resources/case/ddl/create-table.xml
+++ b/test/it/parser/src/main/resources/case/ddl/create-table.xml
@@ -81,6 +81,21 @@
         <table name="t_log" start-index="13" stop-index="17" />
         <like-table name="t_old_log" start-index="24" stop-index="32" />
     </create-table>
+    <create-table sql-case-id="create_table_like_with_rollup">
+        <table name="table2" start-index="13" stop-index="24">
+            <owner name="test1" start-index="13" stop-index="17" />
+        </table>
+        <like-table name="table1" start-index="31" stop-index="42">
+            <owner name="test1" start-index="31" stop-index="35" />
+        </like-table>
+        <rollup name="r1" start-index="57" stop-index="58" />
+        <rollup name="r2" start-index="60" stop-index="61" />
+    </create-table>
+    <create-table sql-case-id="create_table_like_with_single_rollup">
+        <table name="t_new" start-index="13" stop-index="17" />
+        <like-table name="t_old" start-index="24" stop-index="28" />
+        <rollup name="r1" start-index="43" stop-index="44" />
+    </create-table>
     <create-table sql-case-id="create_table">
         <table name="t_log" start-index="13" stop-index="17" />
         <column-definition type="int" primary-key="true" start-index="19" 
stop-index="36">
diff --git 
a/test/it/parser/src/main/resources/sql/supported/ddl/create-table.xml 
b/test/it/parser/src/main/resources/sql/supported/ddl/create-table.xml
index e1cf8e32cf9..01b1d3bd509 100644
--- a/test/it/parser/src/main/resources/sql/supported/ddl/create-table.xml
+++ b/test/it/parser/src/main/resources/sql/supported/ddl/create-table.xml
@@ -24,6 +24,8 @@
     <sql-case id="create_table_with_backtick" value="CREATE TABLE ```t_order` 
(i int)" db-types="MySQL" />
     <sql-case id="create_table_column_with_backtick" value="create table 
`````t_o``r``d``e``r``` (```i` int)" db-types="MySQL" />
     <sql-case id="create_table_with_like" value="CREATE TABLE t_log LIKE 
t_old_log" db-types="MySQL,Doris" />
+    <sql-case id="create_table_like_with_rollup" value="CREATE TABLE 
test1.table2 LIKE test1.table1 WITH ROLLUP (r1,r2)" db-types="Doris" />
+    <sql-case id="create_table_like_with_single_rollup" value="CREATE TABLE 
t_new LIKE t_old WITH ROLLUP (r1)" db-types="Doris" />
     <sql-case id="create_table" value="CREATE TABLE t_log(id int PRIMARY KEY, 
status varchar(10))" />
     <sql-case id="create_table_with_engin_charset" value="CREATE TABLE 
t_log(id int PRIMARY KEY, status varchar(10)) ENGINE=InnoDB DEFAULT 
CHARSET=utf8mb4" db-types="MySQL,Doris" />
     <sql-case id="create_table_with_keyword" value="CREATE TABLE t_log(id int 
PRIMARY KEY, status boolean)" db-types="PostgreSQL,openGauss" />

Reply via email to