From 4945aa0397b5b7eed6ccc12c9d19af88bda25296 Mon Sep 17 00:00:00 2001 From: starocean999 Date: Thu, 20 Nov 2025 15:31:27 +0800 Subject: [PATCH] [fix](nereids)allow sync mv has same columns as base table when it has where clause (#58105) ``` create table d_table( k1 int null, k2 int not null, k3 bigint null, k4 varchar(100) null ) duplicate key (k1,k2,k3) distributed BY hash(k1) buckets 3 properties("replication_num" = "1"); create materialized view kx1234 as select k1 as y1, k2 as y2, k3 as y3, k4 as y4 from d_table where k1 = 1; before this pr, the create mv command will fail because the columns in the select list is same as base table. But the mv is useful, because it has where clause to filter some data. This pr correct it ``` --- .../apache/doris/alter/MaterializedViewHandler.java | 4 ++-- .../data/nereids_syntax_p0/mv/where/k123/k123.out | 4 ++++ .../nereids_syntax_p0/mv/where/k123/k123.groovy | 11 +++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java b/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java index 2206b58b9a470c..b40bfb85c4b007 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java +++ b/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java @@ -628,8 +628,8 @@ private List checkAndPrepareMaterializedView(CreateMaterializedViewComma break; } } - if (allKeysMatch) { - throw new DdlException("MV same with base table is useless."); + if (allKeysMatch && createMvCommand.getWhereClauseItem() == null) { + throw new DdlException("MV same with base table without where clause is useless."); } } diff --git a/regression-test/data/nereids_syntax_p0/mv/where/k123/k123.out b/regression-test/data/nereids_syntax_p0/mv/where/k123/k123.out index faeb23fbb62d80..ec7d079caf4f33 100644 --- a/regression-test/data/nereids_syntax_p0/mv/where/k123/k123.out +++ b/regression-test/data/nereids_syntax_p0/mv/where/k123/k123.out @@ -47,3 +47,7 @@ \N \N +-- !select_mv -- +1 1 1 a +1 1 1 a + diff --git a/regression-test/suites/nereids_syntax_p0/mv/where/k123/k123.groovy b/regression-test/suites/nereids_syntax_p0/mv/where/k123/k123.groovy index 5c8bf05def90a6..474d87ade9db18 100644 --- a/regression-test/suites/nereids_syntax_p0/mv/where/k123/k123.groovy +++ b/regression-test/suites/nereids_syntax_p0/mv/where/k123/k123.groovy @@ -73,4 +73,15 @@ suite ("nereids_k123p") { qt_select_mv """select k1,k2+k3 from d_table where k1 = 2 and k4 = "b" order by k1;""" qt_select_mv_constant """select bitmap_empty() from d_table where true;""" + + create_sync_mv(db, "d_table", "k1234","""select k1 as x1, k2 as x2, k3 as x3, k4 as x4 from d_table where k1 = 1;""") + mv_rewrite_success_without_check_chosen("select k1 as x1, k2 as x2, k3 as x3, k4 as x4 from d_table where k1 = 1;", "k1234") + qt_select_mv "select k1 as x1, k2 as x2, k3 as x3, k4 as x4 from d_table where k1 = 1 order by k1;" + test { + sql """ + create materialized view kx1234 as select k1 as y1, k2 as y2, k3 as y3, k4 as y4 from d_table; + """ + + exception "MV same with base table without where clause is useless" + } } \ No newline at end of file