You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2026/08/23 13:53:52 UTC

(shardingsphere) branch master updated: Support parsing Doris REFRESH MATERIALIZED VIEW syntax (#39582)

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

terrymanu 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 ccc490cce63 Support parsing Doris REFRESH MATERIALIZED VIEW syntax (#39582)
ccc490cce63 is described below

commit ccc490cce637e600d8591b5835b3b57f5c6c392f
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sun Aug 23 21:53:46 2026 +0800

    Support parsing Doris REFRESH MATERIALIZED VIEW syntax (#39582)
    
    - Add REFRESH MATERIALIZED VIEW <mv-name> (AUTO | COMPLETE | PARTITIONS) grammar rule to the Doris dialect
    - Add DorisRefreshMaterializedViewStatement and visitRefreshMaterializedView to extract mv name, refresh type and partition names
    - Add parser IT cases covering the AUTO, COMPLETE and PARTITIONS variants from issue #31457
    
    Fixes #31457
---
 .../core/database/visitor/SQLVisitorRule.java      |  2 +
 .../src/main/antlr4/imports/doris/DDLStatement.g4  | 12 +++++
 .../sql/parser/autogen/DorisStatement.g4           |  1 +
 .../statement/type/DorisDDLStatementVisitor.java   | 15 ++++++
 .../ddl/DorisRefreshMaterializedViewStatement.java | 47 ++++++++++++++++++
 .../ddl/dialect/doris/DorisDDLStatementAssert.java |  5 ++
 ...orisRefreshMaterializedViewStatementAssert.java | 57 ++++++++++++++++++++++
 .../cases/parser/jaxb/RootSQLParserTestCases.java  |  4 ++
 ...isRefreshMaterializedViewStatementTestCase.java | 47 ++++++++++++++++++
 .../case/ddl/refresh-materialized-view.xml         | 13 +++++
 .../supported/ddl/refresh-materialized-view.xml    |  3 ++
 11 files changed, 206 insertions(+)

diff --git a/parser/sql/engine/core/src/main/java/org/apache/shardingsphere/sql/parser/engine/core/database/visitor/SQLVisitorRule.java b/parser/sql/engine/core/src/main/java/org/apache/shardingsphere/sql/parser/engine/core/database/visitor/SQLVisitorRule.java
index d5841d5c54b..ef9368e1df0 100644
--- a/parser/sql/engine/core/src/main/java/org/apache/shardingsphere/sql/parser/engine/core/database/visitor/SQLVisitorRule.java
+++ b/parser/sql/engine/core/src/main/java/org/apache/shardingsphere/sql/parser/engine/core/database/visitor/SQLVisitorRule.java
@@ -831,6 +831,8 @@ public enum SQLVisitorRule {
     
     CREATE_MATERIALIZED_VIEW_LOG("CreateMaterializedViewLog", SQLStatementType.DDL),
     
+    DORIS_REFRESH_MATERIALIZED_VIEW("RefreshMaterializedView", SQLStatementType.DDL),
+    
     CREATE_OPERATOR("CreateOperator", SQLStatementType.DDL),
     
     CREATE_INDEX_TYPE("CreateIndexType", SQLStatementType.DDL),
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 975b2ab45ad..8dc552f7e84 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
@@ -515,6 +515,18 @@ refreshSchedule
     ;
 // DORIS ADDED END
 
+// DORIS ADDED BEGIN
+refreshMaterializedView
+    : REFRESH MATERIALIZED VIEW name (partitionSpec | refreshMethod)
+    ;
+// DORIS ADDED END
+
+// DORIS ADDED BEGIN
+partitionSpec
+    : PARTITIONS LP_ identifierList RP_
+    ;
+// DORIS ADDED END
+
 alterView
     : ALTER (ALGORITHM EQ_ (UNDEFINED | MERGE | TEMPTABLE))?
       ownerStatement?
diff --git a/parser/sql/engine/dialect/doris/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/DorisStatement.g4 b/parser/sql/engine/dialect/doris/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/DorisStatement.g4
index 7030a3f3176..f77c74cf8a8 100644
--- a/parser/sql/engine/dialect/doris/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/DorisStatement.g4
+++ b/parser/sql/engine/dialect/doris/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/DorisStatement.g4
@@ -142,6 +142,7 @@ execute
     | delimiter
     | startReplica
     | createMaterializedView
+    | refreshMaterializedView
     | resumeJob
     | pauseJob
     | dropJob
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 243bf4c4e54..c5b90b289e4 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
@@ -80,6 +80,7 @@ import org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.CreateS
 import org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.CreateLikeClauseContext;
 import org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.CreateLogfileGroupContext;
 import org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.CreateMaterializedViewContext;
+import org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.RefreshMaterializedViewContext;
 import org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.CreateProcedureContext;
 import org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.CreateServerContext;
 import org.apache.shardingsphere.sql.parser.autogen.DorisStatementParser.CreateSyncJobContext;
@@ -291,6 +292,7 @@ import org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisPauseJobSta
 import org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisResumeJobStatement;
 import org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisResumeSyncJobStatement;
 import org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisStopSyncJobStatement;
+import org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisRefreshMaterializedViewStatement;
 import org.apache.shardingsphere.sql.parser.statement.mysql.ddl.event.MySQLAlterEventStatement;
 import org.apache.shardingsphere.sql.parser.statement.mysql.ddl.event.MySQLCreateEventStatement;
 import org.apache.shardingsphere.sql.parser.statement.mysql.ddl.event.MySQLDropEventStatement;
@@ -2037,6 +2039,19 @@ public final class DorisDDLStatementVisitor extends DorisStatementVisitor implem
         return new CreateMaterializedViewStatement(getDatabaseType());
     }
     
+    @Override
+    public ASTNode visitRefreshMaterializedView(final RefreshMaterializedViewContext ctx) {
+        boolean auto = null != ctx.refreshMethod() && null != ctx.refreshMethod().AUTO();
+        boolean complete = null != ctx.refreshMethod() && null != ctx.refreshMethod().COMPLETE();
+        List<String> partitionNames = new LinkedList<>();
+        if (null != ctx.partitionSpec()) {
+            for (IdentifierContext each : ctx.partitionSpec().identifierList().identifier()) {
+                partitionNames.add(((IdentifierValue) visit(each)).getValue());
+            }
+        }
+        return new DorisRefreshMaterializedViewStatement(getDatabaseType(), ((IdentifierValue) visit(ctx.name().identifier())).getValue(), auto, complete, partitionNames);
+    }
+    
     @Override
     public ASTNode visitCreateEncryptKey(final CreateEncryptKeyContext ctx) {
         return new CreateEncryptKeyStatement(getDatabaseType());
diff --git a/parser/sql/statement/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/ddl/DorisRefreshMaterializedViewStatement.java b/parser/sql/statement/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/ddl/DorisRefreshMaterializedViewStatement.java
new file mode 100644
index 00000000000..dfeab8eaefa
--- /dev/null
+++ b/parser/sql/statement/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/statement/doris/ddl/DorisRefreshMaterializedViewStatement.java
@@ -0,0 +1,47 @@
+/*
+ * 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.doris.ddl;
+
+import lombok.Getter;
+import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
+import org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.DDLStatement;
+
+import java.util.List;
+
+/**
+ * Refresh materialized view statement for Doris.
+ */
+@Getter
+public final class DorisRefreshMaterializedViewStatement extends DDLStatement {
+    
+    private final String mvName;
+    
+    private final boolean auto;
+    
+    private final boolean complete;
+    
+    private final List<String> partitionNames;
+    
+    public DorisRefreshMaterializedViewStatement(final DatabaseType databaseType, final String mvName, final boolean auto, final boolean complete, final List<String> partitionNames) {
+        super(databaseType);
+        this.mvName = mvName;
+        this.auto = auto;
+        this.complete = complete;
+        this.partitionNames = partitionNames;
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/dialect/doris/DorisDDLStatementAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/dialect/doris/DorisDDLStatementAssert.java
index d1e86cc31f9..3663d9700fa 100644
--- a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/dialect/doris/DorisDDLStatementAssert.java
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/dialect/doris/DorisDDLStatementAssert.java
@@ -26,6 +26,7 @@ import org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisAlterWorklo
 import org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisCreateFunctionStatement;
 import org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisDropFunctionStatement;
 import org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisCancelMaterializedViewTaskStatement;
+import org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisRefreshMaterializedViewStatement;
 import org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisCancelTaskStatement;
 import org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisAlterJobStatement;
 import org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisDropJobStatement;
@@ -41,6 +42,7 @@ import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAsse
 import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.ddl.dialect.doris.type.DorisAlterColocateGroupStatementAssert;
 import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.ddl.dialect.doris.type.DorisAlterStoragePolicyStatementAssert;
 import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.ddl.dialect.doris.type.DorisAlterWorkloadGroupStatementAssert;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.ddl.dialect.doris.type.DorisRefreshMaterializedViewStatementAssert;
 import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
 import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisAlterColocateGroupStatementTestCase;
 import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisAlterStoragePolicyStatementTestCase;
@@ -48,6 +50,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.statement.ddl.dialect.doris.DorisCreateJobStatementTestCase;
 import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisDropFunctionStatementTestCase;
 import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisCancelMaterializedViewTaskStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisRefreshMaterializedViewStatementTestCase;
 import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisCancelTaskStatementTestCase;
 import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisAlterJobStatementTestCase;
 import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisDropJobStatementTestCase;
@@ -108,6 +111,8 @@ public final class DorisDDLStatementAssert {
             DorisCancelTaskStatementAssert.assertIs(assertContext, (DorisCancelTaskStatement) actual, (DorisCancelTaskStatementTestCase) expected);
         } else if (actual instanceof DorisCancelMaterializedViewTaskStatement) {
             DorisCancelMaterializedViewTaskStatementAssert.assertIs(assertContext, (DorisCancelMaterializedViewTaskStatement) actual, (DorisCancelMaterializedViewTaskStatementTestCase) expected);
+        } else if (actual instanceof DorisRefreshMaterializedViewStatement) {
+            DorisRefreshMaterializedViewStatementAssert.assertIs(assertContext, (DorisRefreshMaterializedViewStatement) actual, (DorisRefreshMaterializedViewStatementTestCase) expected);
         }
     }
 }
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/dialect/doris/type/DorisRefreshMaterializedViewStatementAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/dialect/doris/type/DorisRefreshMaterializedViewStatementAssert.java
new file mode 100644
index 00000000000..53c647a6113
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ddl/dialect/doris/type/DorisRefreshMaterializedViewStatementAssert.java
@@ -0,0 +1,57 @@
+/*
+ * 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.asserts.statement.ddl.dialect.doris.type;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.statement.doris.ddl.DorisRefreshMaterializedViewStatement;
+import org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisRefreshMaterializedViewStatementTestCase;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+/**
+ * Refresh materialized view statement assert for Doris.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class DorisRefreshMaterializedViewStatementAssert {
+    
+    /**
+     * Assert refresh materialized view statement is correct with expected parser result.
+     *
+     * @param assertContext assert context
+     * @param actual actual refresh materialized view statement
+     * @param expected expected refresh materialized view statement test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final DorisRefreshMaterializedViewStatement actual, final DorisRefreshMaterializedViewStatementTestCase expected) {
+        if (null != expected.getMvName()) {
+            assertThat(assertContext.getText("materialized view name does not match: "), actual.getMvName(), is(expected.getMvName()));
+        }
+        if (expected.isAuto()) {
+            assertTrue(actual.isAuto(), assertContext.getText("materialized view refresh type AUTO does not match: "));
+        }
+        if (expected.isComplete()) {
+            assertTrue(actual.isComplete(), assertContext.getText("materialized view refresh type COMPLETE does not match: "));
+        }
+        if (!expected.getPartitionNames().isEmpty()) {
+            assertThat(assertContext.getText("materialized view partition names do not match: "), actual.getPartitionNames(), is(expected.getPartitionNames()));
+        }
+    }
+}
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
index f70009cb056..40ed8b9bb78 100644
--- a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
@@ -165,6 +165,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.statement.ddl.dialect.doris.DorisCreateJobStatementTestCase;
 import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisCreateStreamingJobStatementTestCase;
 import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisCreateSyncJobStatementTestCase;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisRefreshMaterializedViewStatementTestCase;
 import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisDropFunctionStatementTestCase;
 import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisDropJobStatementTestCase;
 import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.dialect.doris.DorisPauseJobStatementTestCase;
@@ -651,6 +652,9 @@ public final class RootSQLParserTestCases {
     @XmlElement(name = "create-streaming-job")
     private final List<DorisCreateStreamingJobStatementTestCase> createStreamingJobTestCases = new LinkedList<>();
     
+    @XmlElement(name = "doris-refresh-materialized-view")
+    private final List<DorisRefreshMaterializedViewStatementTestCase> dorisRefreshMaterializedViewTestCases = new LinkedList<>();
+    
     @XmlElement(name = "alter-catalog")
     private final List<AlterCatalogStatementTestCase> alterCatalogTestCases = new LinkedList<>();
     
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/dialect/doris/DorisRefreshMaterializedViewStatementTestCase.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/dialect/doris/DorisRefreshMaterializedViewStatementTestCase.java
new file mode 100644
index 00000000000..d1aca2075ed
--- /dev/null
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/dialect/doris/DorisRefreshMaterializedViewStatementTestCase.java
@@ -0,0 +1,47 @@
+/*
+ * 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.statement.ddl.dialect.doris;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * Refresh materialized view statement test case for Doris.
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@Getter
+@Setter
+public final class DorisRefreshMaterializedViewStatementTestCase extends SQLParserTestCase {
+    
+    @XmlElement(name = "mv-name")
+    private String mvName;
+    
+    private boolean auto;
+    
+    private boolean complete;
+    
+    @XmlElement(name = "partition-name")
+    private final List<String> partitionNames = new LinkedList<>();
+}
diff --git a/test/it/parser/src/main/resources/case/ddl/refresh-materialized-view.xml b/test/it/parser/src/main/resources/case/ddl/refresh-materialized-view.xml
index 3a95f8b0574..a185eac059f 100644
--- a/test/it/parser/src/main/resources/case/ddl/refresh-materialized-view.xml
+++ b/test/it/parser/src/main/resources/case/ddl/refresh-materialized-view.xml
@@ -21,4 +21,17 @@
     <refresh-materialized-view sql-case-id="refresh_mat_view_concurrently_no_data" />
     <refresh-materialized-view sql-case-id="refresh_mat_view_point" />
     <refresh-materialized-view sql-case-id="refresh_mat_view" />
+    <doris-refresh-materialized-view sql-case-id="doris_refresh_materialized_view_auto">
+        <mv-name>mv1</mv-name>
+        <auto>true</auto>
+    </doris-refresh-materialized-view>
+    <doris-refresh-materialized-view sql-case-id="doris_refresh_materialized_view_partitions">
+        <mv-name>mv1</mv-name>
+        <partition-name>p_19950801_19950901</partition-name>
+        <partition-name>p_19950901_19951001</partition-name>
+    </doris-refresh-materialized-view>
+    <doris-refresh-materialized-view sql-case-id="doris_refresh_materialized_view_complete">
+        <mv-name>mv1</mv-name>
+        <complete>true</complete>
+    </doris-refresh-materialized-view>
 </sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/sql/supported/ddl/refresh-materialized-view.xml b/test/it/parser/src/main/resources/sql/supported/ddl/refresh-materialized-view.xml
index 97578752d50..541b9b0331e 100644
--- a/test/it/parser/src/main/resources/sql/supported/ddl/refresh-materialized-view.xml
+++ b/test/it/parser/src/main/resources/sql/supported/ddl/refresh-materialized-view.xml
@@ -21,4 +21,7 @@
     <sql-case id="refresh_mat_view_concurrently_no_data" value="REFRESH MATERIALIZED VIEW CONCURRENTLY mvtest_tvmm WITH NO DATA;" db-types="PostgreSQL" />
     <sql-case id="refresh_mat_view_point" value="REFRESH MATERIALIZED VIEW matview_schema.mv_nodata2;" db-types="PostgreSQL" />
     <sql-case id="refresh_mat_view" value="REFRESH MATERIALIZED VIEW mvtest_mv;" db-types="PostgreSQL" />
+    <sql-case id="doris_refresh_materialized_view_auto" value="REFRESH MATERIALIZED VIEW mv1 AUTO" db-types="Doris" />
+    <sql-case id="doris_refresh_materialized_view_partitions" value="REFRESH MATERIALIZED VIEW mv1 partitions(p_19950801_19950901,p_19950901_19951001)" db-types="Doris" />
+    <sql-case id="doris_refresh_materialized_view_complete" value="REFRESH MATERIALIZED VIEW mv1 complete" db-types="Doris" />
 </sql-cases>