From 31fe48111b5fb547016e314723f779e1114ca3b0 Mon Sep 17 00:00:00 2001 From: Pxl Date: Tue, 28 Nov 2023 14:11:46 +0800 Subject: [PATCH] [Improvement](materialized-view) forbidden mv rewriter when select stmt's from clause not have mv (#27638) forbidden mv rewriter when select stmt's from clause not have mv --- .../org/apache/doris/analysis/SelectStmt.java | 18 ++++++++++++++++++ .../org/apache/doris/analysis/TableRef.java | 4 ++++ 2 files changed, 22 insertions(+) diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java index e80f49dcb6..bb10d22080 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java @@ -503,6 +503,24 @@ public class SelectStmt extends QueryStmt { } fromClause.setNeedToSql(needToSql); fromClause.analyze(analyzer); + + if (!isForbiddenMVRewrite()) { + Boolean haveMv = false; + for (TableRef tbl : fromClause) { + if (!tbl.haveDesc() || !(tbl.getTable() instanceof OlapTable)) { + continue; + } + OlapTable olapTable = (OlapTable) tbl.getTable(); + if (olapTable.getIndexIds().size() != 1) { + haveMv = true; + } + } + + if (!haveMv) { + forbiddenMVRewrite(); + } + } + // Generate !empty() predicates to filter out empty collections. // Skip this step when analyzing a WITH-clause because CollectionTableRefs // do not register collection slots in their parent in that context diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/TableRef.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/TableRef.java index b6c47e1cbf..e4b5caa446 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/TableRef.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/TableRef.java @@ -329,6 +329,10 @@ public class TableRef implements ParseNode, Writable { return tableSnapshot; } + public Boolean haveDesc() { + return desc != null; + } + /** * This method should only be called after the TableRef has been analyzed. */