diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java index b76fe7c07e..e6f550305e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java @@ -18,7 +18,6 @@ package org.apache.doris.nereids.rules.analysis; import org.apache.doris.catalog.Column; -import org.apache.doris.catalog.KeysType; import org.apache.doris.catalog.OlapTable; import org.apache.doris.catalog.Partition; import org.apache.doris.catalog.TableIf; @@ -202,10 +201,8 @@ public class BindRelation extends OneAnalysisRuleFactory { throw new AnalysisException("Table " + olapTable.getName() + " doesn't have materialized view " + indexName.get()); } - PreAggStatus preAggStatus - = olapTable.getIndexMetaByIndexId(indexId).getKeysType().equals(KeysType.DUP_KEYS) - ? PreAggStatus.unset() - : PreAggStatus.off("For direct index scan."); + PreAggStatus preAggStatus = olapTable.isDupKeysOrMergeOnWrite() ? PreAggStatus.unset() + : PreAggStatus.off("For direct index scan on mor/agg."); scan = new LogicalOlapScan(unboundRelation.getRelationId(), (OlapTable) table, qualifier, tabletIds, @@ -219,8 +216,7 @@ public class BindRelation extends OneAnalysisRuleFactory { } } if (!Util.showHiddenColumns() && scan.getTable().hasDeleteSign() - && !ConnectContext.get().getSessionVariable().skipDeleteSign() - && !scan.isDirectMvScan()) { + && !ConnectContext.get().getSessionVariable().skipDeleteSign()) { // table qualifier is catalog.db.table, we make db.table.column Slot deleteSlot = null; for (Slot slot : scan.getOutput()) { diff --git a/regression-test/data/mv_p0/test_mv_mor/test_mv_mor.out b/regression-test/data/mv_p0/test_mv_mor/test_mv_mor.out new file mode 100644 index 0000000000..fbf59000da --- /dev/null +++ b/regression-test/data/mv_p0/test_mv_mor/test_mv_mor.out @@ -0,0 +1,17 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !select_mv -- +1 2 +1 3 + +-- !select_mv -- +1 2 +1 3 + +-- !select_mv -- +1 +1 + +-- !select_mv -- +2 +3 + diff --git a/regression-test/suites/mv_p0/test_mv_mor/test_mv_mor.groovy b/regression-test/suites/mv_p0/test_mv_mor/test_mv_mor.groovy new file mode 100644 index 0000000000..1ca52c75e8 --- /dev/null +++ b/regression-test/suites/mv_p0/test_mv_mor/test_mv_mor.groovy @@ -0,0 +1,52 @@ +// 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. + +suite ("test_mv_mor") { + sql """ drop table if exists u_table; """ + + sql """ + create table u_table ( + k1 int null, + k2 int not null, + k3 bigint null, + k4 varchar(100) null + ) + unique key (k1,k2,k3) + distributed BY hash(k1) buckets 3 + properties( + "replication_num" = "1", + "enable_unique_key_merge_on_write" = "false" + ); + """ + sql "insert into u_table select 1,1,1,1;" + sql "insert into u_table select 1,2,1,1;" + createMV("create materialized view k123p as select k1,k2+k3 from u_table;") + + sql "insert into u_table select 1,1,1,2;" + sql "insert into u_table select 1,2,1,2;" + + // do not match mv coz preagg is off, mv need contains all key column to make row count correct + explain { + sql("select k1,k2+k3 from u_table order by k1;") + contains "(u_table)" + } + qt_select_mv "select k1,k2+k3 from u_table order by k1;" + + qt_select_mv "select * from `u_table` index `k123p` order by 1,2;" + qt_select_mv "select mv_k1 from `u_table` index `k123p` order by 1;" + qt_select_mv "select `mv_(k2 + k3)` from `u_table` index `k123p` order by 1;" +}