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

yiguolei pushed a commit to branch branch-4.2
in repository https://gitbox.apache.org/repos/asf/doris.git

commit efe2f9d3edf95cdad365391c994658a6f883c31b
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Thu Sep 10 07:51:35 2026 +0800

    branch-4.1: [fix](mv) Prevent snapshot reads from using current MVs #67700 
(#67729)
    
    Cherry-picked from #67700
    
    Co-authored-by: morrySnow <[email protected]>
---
 .../nereids/rules/exploration/mv/MaterializedViewUtils.java  |  6 ++++--
 .../rules/exploration/mv/MaterializedViewUtilsTest.java      | 12 ++++++++++++
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtils.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtils.java
index bab7db768fa..1fe2bcc4274 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtils.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtils.java
@@ -619,9 +619,11 @@ public class MaterializedViewUtils {
         public Boolean visitLogicalRelation(LogicalRelation relation, Void 
context) {
             if (relation instanceof LogicalFileScan) {
                 LogicalFileScan fileScan = (LogicalFileScan) relation;
-                // Relation scan parameters can select data different from the 
MV refresh input.
+                // Relation scan operators can select data different from the 
MV refresh input.
                 // Treat them as query operators until rewrite can prove 
equivalent semantics.
-                if (fileScan.getTableSample().isPresent() || 
fileScan.getScanParams().isPresent()) {
+                if (fileScan.getTableSample().isPresent()
+                        || fileScan.getScanParams().isPresent()
+                        || fileScan.getTableSnapshot().isPresent()) {
                     return true;
                 }
             }
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtilsTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtilsTest.java
index 03563d5f892..3bc6c736c27 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtilsTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtilsTest.java
@@ -18,6 +18,7 @@
 package org.apache.doris.nereids.rules.exploration.mv;
 
 import org.apache.doris.analysis.TableScanParams;
+import org.apache.doris.analysis.TableSnapshot;
 import org.apache.doris.catalog.Env;
 import org.apache.doris.catalog.TableIf;
 import org.apache.doris.mtmv.BaseTableInfo;
@@ -940,6 +941,17 @@ public class MaterializedViewUtilsTest extends 
TestWithFeService {
                 .visitLogicalRelation(fileScan, null));
     }
 
+    @Test
+    public void containTableQueryOperatorWithTableSnapshotTest() {
+        LogicalFileScan fileScan = Mockito.mock(LogicalFileScan.class);
+        Mockito.when(fileScan.getTableSample()).thenReturn(Optional.empty());
+        Mockito.when(fileScan.getScanParams()).thenReturn(Optional.empty());
+        
Mockito.when(fileScan.getTableSnapshot()).thenReturn(Optional.of(TableSnapshot.versionOf("1")));
+
+        
Assertions.assertTrue(MaterializedViewUtils.TableQueryOperatorChecker.INSTANCE
+                .visitLogicalRelation(fileScan, null));
+    }
+
     @Test
     public void getRelatedTableInfoWhenMultiPartitionExprs() {
         PlanChecker.from(connectContext)


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to