diff --git a/be/src/olap/schema_change.cpp b/be/src/olap/schema_change.cpp index d811ddb370..148696897c 100644 --- a/be/src/olap/schema_change.cpp +++ b/be/src/olap/schema_change.cpp @@ -270,10 +270,11 @@ Status BlockChanger::change_block(vectorized::Block* ref_block, int result_column_id = -1; RETURN_IF_ERROR(ctx->execute(ref_block, &result_column_id)); - CHECK(ref_block->get_by_position(result_column_id).column->size() == row_size) - << new_block->get_by_position(idx).name << " size invalid" - << ", expect=" << row_size - << ", real=" << ref_block->get_by_position(result_column_id).column->size(); + if (ref_block->get_by_position(result_column_id).column->size() != row_size) { + return Status::Error( + "{} size invalid, expect={}, real={}", new_block->get_by_position(idx).name, + row_size, ref_block->get_by_position(result_column_id).column->size()); + } if (_type != ROLLUP) { RETURN_IF_ERROR( diff --git a/be/src/vec/core/block.cpp b/be/src/vec/core/block.cpp index aadf51946e..0625718767 100644 --- a/be/src/vec/core/block.cpp +++ b/be/src/vec/core/block.cpp @@ -494,7 +494,7 @@ std::string Block::dump_structure() const { std::string out; for (auto it = data.begin(); it != data.end(); ++it) { if (it != data.begin()) { - out += ", "; + out += ", \n"; } out += it->dump_structure(); } diff --git a/be/src/vec/exprs/vslot_ref.cpp b/be/src/vec/exprs/vslot_ref.cpp index 60c7f7fd52..a1ff659511 100644 --- a/be/src/vec/exprs/vslot_ref.cpp +++ b/be/src/vec/exprs/vslot_ref.cpp @@ -61,6 +61,11 @@ Status VSlotRef::prepare(doris::RuntimeState* state, const doris::RowDescriptor& } Status VSlotRef::execute(VExprContext* context, Block* block, int* result_column_id) { + if (_column_id >= 0 && _column_id >= block->columns()) { + return Status::Error( + "input block not contain slot column {}, column_id={}, block={}", *_column_name, + _column_id, block->dump_structure()); + } *result_column_id = _column_id; return Status::OK(); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/alter/RollupJobV2.java b/fe/fe-core/src/main/java/org/apache/doris/alter/RollupJobV2.java index 68cf0bd6f4..7e11dac3f6 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/alter/RollupJobV2.java +++ b/fe/fe-core/src/main/java/org/apache/doris/alter/RollupJobV2.java @@ -85,6 +85,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.util.TreeMap; import java.util.concurrent.TimeUnit; /** @@ -384,7 +385,7 @@ public class RollupJobV2 extends AlterJobV2 implements GsonPostProcessable { DescriptorTable descTable = new DescriptorTable(); TupleDescriptor destTupleDesc = descTable.createTupleDescriptor(); - Map descMap = Maps.newHashMap(); + Map descMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); List rollupColumns = new ArrayList(); Set columnNames = new HashSet(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/InsertStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/InsertStmt.java index 98cb6354bb..c9d3f409f7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/InsertStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/InsertStmt.java @@ -505,7 +505,7 @@ public class InsertStmt extends DdlStmt { // Check if all columns mentioned is enough checkColumnCoverage(mentionedColumns, targetTable.getBaseSchema()); - Map slotToIndex = Maps.newTreeMap(); + Map slotToIndex = Maps.newTreeMap(String.CASE_INSENSITIVE_ORDER); List baseColumns = targetTable.getBaseSchema(); int size = Math.min(baseColumns.size(), queryStmt.getResultExprs().size()); for (int i = 0; i < size; i++) { diff --git a/regression-test/data/mv_p0/case_ignore/case_ignore.out b/regression-test/data/mv_p0/case_ignore/case_ignore.out new file mode 100644 index 0000000000..46dbfd4eeb --- /dev/null +++ b/regression-test/data/mv_p0/case_ignore/case_ignore.out @@ -0,0 +1,19 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !select_star -- +-4 -4 -4 d +1 1 1 a +2 2 2 b +3 -3 \N c + +-- !select_mv -- +-4 4 +1 1 +2 2 +3 3 + +-- !select_mv -- +-4 4 +1 1 +2 2 +3 3 + diff --git a/regression-test/suites/mv_p0/case_ignore/case_ignore.groovy b/regression-test/suites/mv_p0/case_ignore/case_ignore.groovy new file mode 100644 index 0000000000..88f9a38578 --- /dev/null +++ b/regression-test/suites/mv_p0/case_ignore/case_ignore.groovy @@ -0,0 +1,57 @@ +// 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. + +import org.codehaus.groovy.runtime.IOGroovyMethods + +suite ("case_ignore") { + sql """ DROP TABLE IF EXISTS d_table; """ + + sql """ + 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"); + """ + + sql "insert into d_table select 1,1,1,'a';" + sql "insert into d_table select 2,2,2,'b';" + sql "insert into d_table select 3,-3,null,'c';" + + createMV ("create materialized view k12a as select K1,abs(K2) from d_table;") + + sql "insert into d_table select -4,-4,-4,'d';" + + qt_select_star "select * from d_table order by k1;" + + explain { + sql("select k1,abs(k2) from d_table order by k1;") + contains "(k12a)" + } + qt_select_mv "select k1,abs(k2) from d_table order by k1;" + + explain { + sql("select K1,abs(K2) from d_table order by K1;") + contains "(k12a)" + } + qt_select_mv "select K1,abs(K2) from d_table order by K1;" + +}