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]