Skip to content

Commit

Permalink
[fix](nereids)column name should be case insensitive when selecting mv (
Browse files Browse the repository at this point in the history
  • Loading branch information
starocean999 authored and Doris-Extras committed Apr 10, 2024
1 parent a7be070 commit 2ee6f28
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -219,8 +219,10 @@ protected static List<MaterializedIndex> matchPrefixMost(
Set<Expression> predicates,
Map<ExprId, String> exprIdToName) {
Map<Boolean, Set<String>> split = filterCanUsePrefixIndexAndSplitByEquality(predicates, exprIdToName);
Set<String> equalColNames = split.getOrDefault(true, ImmutableSet.of());
Set<String> nonEqualColNames = split.getOrDefault(false, ImmutableSet.of());
Set<String> equalColNames = split.getOrDefault(true, ImmutableSet.of()).stream()
.map(String::toLowerCase).collect(Collectors.toSet());
Set<String> nonEqualColNames = split.getOrDefault(false, ImmutableSet.of()).stream()
.map(String::toLowerCase).collect(Collectors.toSet());

if (!(equalColNames.isEmpty() && nonEqualColNames.isEmpty())) {
List<MaterializedIndex> matchingResult = matchKeyPrefixMost(scan.getTable(), candidate,
Expand Down Expand Up @@ -358,9 +360,9 @@ private static int indexKeyPrefixMatchCount(
Set<String> nonEqualColNames) {
int matchCount = 0;
for (Column column : table.getSchemaByIndexId(index.getId())) {
if (equalColNames.contains(normalizeName(column.getNameWithoutMvPrefix()))) {
if (equalColNames.contains(normalizeName(column.getNameWithoutMvPrefix().toLowerCase()))) {
matchCount++;
} else if (nonEqualColNames.contains(normalizeName(column.getNameWithoutMvPrefix()))) {
} else if (nonEqualColNames.contains(normalizeName(column.getNameWithoutMvPrefix().toLowerCase()))) {
// un-equivalence predicate's columns can match only first column in index.
matchCount++;
break;
Expand Down
50 changes: 50 additions & 0 deletions regression-test/suites/nereids_p0/test_mv_select.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,54 @@ suite("test_mv_select") {
group by Uid;""")
contains "mv_test_table_t"
}

sql """drop table if exists SkuUniqDailyCounter"""
sql """CREATE TABLE `SkuUniqDailyCounter` (
`Pd` bigint(20) NOT NULL,
`Dc` int(11) NOT NULL,
`Bc` bigint(20) NOT NULL,
`Fs` int(11) REPLACE NULL
) ENGINE=OLAP
AGGREGATE KEY(`Pd`, `Dc`, `Bc`)
COMMENT 'OLAP'
DISTRIBUTED BY HASH(`Dc`) BUCKETS 8
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
);"""
def delta_time = 1000
def wait_for_latest_op_on_table_finish = { table_name, OpTimeout ->
for(int t = delta_time; t <= OpTimeout; t += delta_time){
alter_res = sql """SHOW ALTER TABLE COLUMN WHERE TableName = "${table_name}" ORDER BY CreateTime DESC LIMIT 1;"""
alter_res = alter_res.toString()
if(alter_res.contains("FINISHED")) {
sleep(10000) // wait change table state to normal
logger.info(table_name + " latest alter job finished, detail: " + alter_res)
break
}
useTime = t
sleep(delta_time)
}
assertTrue(useTime <= OpTimeout, "wait_for_latest_op_on_table_finish timeout")
}
sql """ALTER TABLE SkuUniqDailyCounter
ADD ROLLUP rollup_index_shopid(
Dc,
Bc,
Pd,
Fs
); """
wait_for_latest_op_on_table_finish("SkuUniqDailyCounter",60000);
sql """ALTER TABLE SkuUniqDailyCounter
ADD ROLLUP rollup_index_brandcid(
Bc,
Dc,
Pd,
Fs
);"""
wait_for_latest_op_on_table_finish("SkuUniqDailyCounter",60000);

explain {
sql ("""select sum(Fs) Sales from SkuUniqDailyCounter where Bc=742502946 and Dc >=20240315 and Dc <= 20240328;""")
contains "rollup_index_brandcid"
}
}

0 comments on commit 2ee6f28

Please sign in to comment.