diff --git a/be/src/exprs/string_functions.cpp b/be/src/exprs/string_functions.cpp index 7fcd5dc3a212b4..777b0279b31819 100644 --- a/be/src/exprs/string_functions.cpp +++ b/be/src/exprs/string_functions.cpp @@ -516,17 +516,17 @@ StringVal StringFunctions::concat_ws( return strs[0]; } - if (strs[0].is_null) { + if (strs[0].is_null && 0 == sep.len) { return StringVal::null(); } - int32_t total_size = strs[0].len; + int32_t total_size = strs[0].is_null ? 0 : strs[0].len; // Loop once to compute the final size and reserve space. for (int32_t i = 1; i < num_children; ++i) { - if (strs[i].is_null) { + if (strs[i].is_null && 0 == sep.len) { return StringVal::null(); } - total_size += sep.len + strs[i].len; + total_size += strs[i].is_null ? 0 : (sep.len + strs[i].len); } // TODO pengyubing @@ -535,11 +535,18 @@ StringVal StringFunctions::concat_ws( uint8_t* ptr = result.ptr; // Loop again to append the data. - memcpy(ptr, strs[0].ptr, strs[0].len); - ptr += strs[0].len; + if(!strs[0].is_null) { + memcpy(ptr, strs[0].ptr, strs[0].len); + ptr += strs[0].len; + } for (int32_t i = 1; i < num_children; ++i) { - memcpy(ptr, sep.ptr, sep.len); - ptr += sep.len; + if(strs[i].is_null) { + continue; + } + if(!(strs[0].is_null && 1 == i)) { + memcpy(ptr, sep.ptr, sep.len); + ptr += sep.len; + } memcpy(ptr, strs[i].ptr, strs[i].len); ptr += strs[i].len; } diff --git a/fe/src/main/java/org/apache/doris/common/util/PropertyAnalyzer.java b/fe/src/main/java/org/apache/doris/common/util/PropertyAnalyzer.java index ecb7b8f69ecd99..78c0d94ad69417 100644 --- a/fe/src/main/java/org/apache/doris/common/util/PropertyAnalyzer.java +++ b/fe/src/main/java/org/apache/doris/common/util/PropertyAnalyzer.java @@ -257,6 +257,7 @@ public static Set analyzeBloomFilterColumns(Map properti String[] bfColumnArr = bfColumnsStr.split(COMMA_SEPARATOR); Set bfColumnSet = Sets.newTreeSet(String.CASE_INSENSITIVE_ORDER); for (String bfColumn : bfColumnArr) { + bfColumn = bfColumn.trim(); boolean found = false; for (Column column : columns) { if (column.getName().equalsIgnoreCase(bfColumn)) { diff --git a/fe/src/main/java/org/apache/doris/rewrite/FoldConstantsRule.java b/fe/src/main/java/org/apache/doris/rewrite/FoldConstantsRule.java index 16b06e50b9dcc6..28e6a621f03b81 100644 --- a/fe/src/main/java/org/apache/doris/rewrite/FoldConstantsRule.java +++ b/fe/src/main/java/org/apache/doris/rewrite/FoldConstantsRule.java @@ -204,6 +204,7 @@ private synchronized void registerFunctions() { new ImmutableSet.Builder(); setBuilder.add("if"); setBuilder.add("hll_hash"); + setBuilder.add("concat_ws"); this.nonNullResultWithNullParamFunctions = setBuilder.build(); }