This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch branch-1.2-lts in repository https://gitbox.apache.org/repos/asf/doris.git
commit 06d02b29d3af24b0a279291b9dad1bef6af44197 Author: Pxl <[email protected]> AuthorDate: Thu Dec 8 17:14:23 2022 +0800 [Bug](predicate) fix ccore dump on varchar with in list predicate (#14881) * fix ccore dump on varchar with in list predicate * update case * Update sqlsmith01.sql --- be/src/olap/bitmap_filter_predicate.h | 3 ++- be/src/olap/bloom_filter_predicate.h | 8 ++++++-- be/src/olap/comparison_predicate.h | 15 ++++++++------- be/src/olap/in_list_predicate.h | 11 ++++------- be/src/runtime/primitive_type.h | 3 +++ .../data/tpcds_sf1_unique_p1/sql/sqlsmith01.out | 3 +++ .../suites/tpcds_sf1_unique_p1/sql/sqlsmith01.sql | 1 + 7 files changed, 27 insertions(+), 17 deletions(-) diff --git a/be/src/olap/bitmap_filter_predicate.h b/be/src/olap/bitmap_filter_predicate.h index 9bf444b889..a10bf46f7b 100644 --- a/be/src/olap/bitmap_filter_predicate.h +++ b/be/src/olap/bitmap_filter_predicate.h @@ -93,7 +93,8 @@ private: uint16_t new_size = 0; new_size = _specific_filter->find_fixed_len_olap_engine( - (char*)reinterpret_cast<const vectorized::PredicateColumnType<T>*>(&column) + (char*)reinterpret_cast< + const vectorized::PredicateColumnType<PredicateEvaluateType<T>>*>(&column) ->get_data() .data(), null_map, sel, size); diff --git a/be/src/olap/bloom_filter_predicate.h b/be/src/olap/bloom_filter_predicate.h index efa00a5930..a5fdcdd6ae 100644 --- a/be/src/olap/bloom_filter_predicate.h +++ b/be/src/olap/bloom_filter_predicate.h @@ -84,7 +84,9 @@ private: } } else if (IRuntimeFilter::enable_use_batch(_be_exec_version, T)) { new_size = _specific_filter->find_fixed_len_olap_engine( - (char*)reinterpret_cast<const vectorized::PredicateColumnType<T>*>(&column) + (char*)reinterpret_cast< + const vectorized::PredicateColumnType<PredicateEvaluateType<T>>*>( + &column) ->get_data() .data(), null_map, sel, size); @@ -101,7 +103,9 @@ private: }; auto pred_col_data = - reinterpret_cast<const vectorized::PredicateColumnType<T>*>(&column) + reinterpret_cast< + const vectorized::PredicateColumnType<PredicateEvaluateType<T>>*>( + &column) ->get_data() .data(); for (uint16_t i = 0; i < size; i++) { diff --git a/be/src/olap/comparison_predicate.h b/be/src/olap/comparison_predicate.h index 909f638813..8856fc4ade 100644 --- a/be/src/olap/comparison_predicate.h +++ b/be/src/olap/comparison_predicate.h @@ -345,8 +345,8 @@ public: LOG(FATAL) << "column_dictionary must use StringValue predicate."; } } else { - auto* data_array = reinterpret_cast<const vectorized::PredicateColumnType<Type>&>( - nested_column) + auto* data_array = reinterpret_cast<const vectorized::PredicateColumnType< + PredicateEvaluateType<Type>>&>(nested_column) .get_data() .data(); @@ -368,7 +368,8 @@ public: } } else { auto* data_array = - vectorized::check_and_get_column<vectorized::PredicateColumnType<Type>>( + vectorized::check_and_get_column< + vectorized::PredicateColumnType<PredicateEvaluateType<Type>>>( column) ->get_data() .data(); @@ -546,7 +547,8 @@ private: } } else { auto* data_array = - vectorized::check_and_get_column<vectorized::PredicateColumnType<Type>>(column) + vectorized::check_and_get_column< + vectorized::PredicateColumnType<PredicateEvaluateType<Type>>>(column) ->get_data() .data(); @@ -592,8 +594,8 @@ private: } } else { auto* data_array = - vectorized::check_and_get_column<vectorized::PredicateColumnType<EvalType>>( - column) + vectorized::check_and_get_column< + vectorized::PredicateColumnType<PredicateEvaluateType<Type>>>(column) ->get_data() .data(); @@ -608,7 +610,6 @@ private: } T _value; - static constexpr PrimitiveType EvalType = (Type == TYPE_CHAR ? TYPE_STRING : Type); }; } //namespace doris diff --git a/be/src/olap/in_list_predicate.h b/be/src/olap/in_list_predicate.h index 503aa340b0..d1c0d2327a 100644 --- a/be/src/olap/in_list_predicate.h +++ b/be/src/olap/in_list_predicate.h @@ -496,9 +496,8 @@ private: LOG(FATAL) << "column_dictionary must use StringValue predicate."; } } else { - auto* nested_col_ptr = - vectorized::check_and_get_column<vectorized::PredicateColumnType<EvalType>>( - column); + auto* nested_col_ptr = vectorized::check_and_get_column< + vectorized::PredicateColumnType<PredicateEvaluateType<Type>>>(column); auto& data_array = nested_col_ptr->get_data(); for (uint16_t i = 0; i < size; i++) { @@ -573,9 +572,8 @@ private: LOG(FATAL) << "column_dictionary must use StringValue predicate."; } } else { - auto* nested_col_ptr = - vectorized::check_and_get_column<vectorized::PredicateColumnType<EvalType>>( - column); + auto* nested_col_ptr = vectorized::check_and_get_column< + vectorized::PredicateColumnType<PredicateEvaluateType<Type>>>(column); auto& data_array = nested_col_ptr->get_data(); for (uint16_t i = 0; i < size; i++) { @@ -630,7 +628,6 @@ private: _segment_id_to_value_in_dict_flags; T _min_value; T _max_value; - static constexpr PrimitiveType EvalType = (Type == TYPE_CHAR ? TYPE_STRING : Type); // temp string for char type column std::list<std::string> _temp_datas; diff --git a/be/src/runtime/primitive_type.h b/be/src/runtime/primitive_type.h index 4547333389..5af7639290 100644 --- a/be/src/runtime/primitive_type.h +++ b/be/src/runtime/primitive_type.h @@ -112,6 +112,9 @@ std::string type_to_odbc_string(PrimitiveType t); TTypeDesc gen_type_desc(const TPrimitiveType::type val); TTypeDesc gen_type_desc(const TPrimitiveType::type val, const std::string& name); +template <PrimitiveType type> +constexpr PrimitiveType PredicateEvaluateType = is_string_type(type) ? TYPE_STRING : type; + template <PrimitiveType type> struct PrimitiveTypeTraits; diff --git a/regression-test/data/tpcds_sf1_unique_p1/sql/sqlsmith01.out b/regression-test/data/tpcds_sf1_unique_p1/sql/sqlsmith01.out new file mode 100644 index 0000000000..0eda0eedc9 --- /dev/null +++ b/regression-test/data/tpcds_sf1_unique_p1/sql/sqlsmith01.out @@ -0,0 +1,3 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !sqlsmith01 -- + diff --git a/regression-test/suites/tpcds_sf1_unique_p1/sql/sqlsmith01.sql b/regression-test/suites/tpcds_sf1_unique_p1/sql/sqlsmith01.sql new file mode 100644 index 0000000000..c537884f00 --- /dev/null +++ b/regression-test/suites/tpcds_sf1_unique_p1/sql/sqlsmith01.sql @@ -0,0 +1 @@ +select /*+ SET_VAR(query_timeout = 600) */ ref_1.`i_product_name` as c0, ref_0.`i_category_id` as c1, ref_0.`i_formulation` as c2, ref_0.`i_manager_id` as c3, ref_0.`i_product_name` as c4, ref_1.`i_product_name` as c5, ref_0.`i_size` as c6, avg( cast(42 as int)) over (partition by ref_1.`i_product_name`,ref_1.`i_product_name` order by ref_1.`i_product_name`,ref_1.`i_product_name`) as c7, ref_0.`i_brand` as c8 from regression_test_tpcds_sf1_unique_p1.item as ref_0 inner join regression_te [...] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
