From d779dcd5322bd22620f5ff41a3a2aa84277df939 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Thu, 8 Jan 2026 11:37:59 +0800 Subject: [PATCH 1/5] [refactor](field) Remove nearest type in field (#59488) --- be/src/exec/es/es_scroll_parser.cpp | 27 +- be/src/exec/olap_common.h | 10 +- be/src/exprs/create_predicate_function.h | 5 +- be/src/olap/comparison_predicate.h | 19 +- be/src/olap/delete_handler.cpp | 2 +- be/src/olap/in_list_predicate.h | 19 +- .../segment_v2/bloom_filter_index_writer.cpp | 2 + .../rowset/segment_v2/inverted_index_reader.h | 3 +- .../olap/rowset/segment_v2/zone_map_index.cpp | 3 +- be/src/pipeline/exec/scan_operator.cpp | 10 +- be/src/runtime/primitive_type.h | 67 +- be/src/vec/columns/column_const.h | 6 +- be/src/vec/columns/column_decimal.cpp | 18 +- be/src/vec/columns/column_decimal.h | 3 +- be/src/vec/columns/column_varbinary.h | 3 +- be/src/vec/columns/column_variant.cpp | 2 +- be/src/vec/columns/column_vector.cpp | 71 +- be/src/vec/columns/column_vector.h | 5 +- be/src/vec/columns/predicate_column.h | 3 +- be/src/vec/common/field_visitors.h | 64 +- be/src/vec/common/schema_util.cpp | 6 +- be/src/vec/core/decimal_comparison.h | 75 +- be/src/vec/core/field.cpp | 844 ++++++++++-------- be/src/vec/core/field.h | 331 +------ .../vec/data_types/convert_field_to_type.cpp | 384 +++++++- be/src/vec/data_types/data_type_date.h | 2 +- .../data_type_date_or_datetime_v2.h | 4 +- be/src/vec/data_types/data_type_date_time.h | 2 +- be/src/vec/data_types/data_type_decimal.cpp | 2 +- be/src/vec/data_types/data_type_decimal.h | 20 +- .../vec/data_types/data_type_number_base.cpp | 6 +- .../vec/data_types/data_type_timestamptz.cpp | 2 +- .../serde/data_type_number_serde.cpp | 2 +- .../exec/format/parquet/parquet_predicate.h | 14 +- be/src/vec/exprs/vcondition_expr.cpp | 6 +- be/src/vec/exprs/vexpr.cpp | 83 +- be/src/vec/functions/binary_arithmetic.h | 70 +- be/src/vec/functions/divide.cpp | 114 ++- be/src/vec/functions/function_bit.cpp | 12 +- be/src/vec/functions/function_bit_shift.cpp | 8 +- be/src/vec/functions/function_hash.cpp | 4 +- be/src/vec/functions/function_helpers.h | 4 +- .../vec/functions/function_quantile_state.cpp | 4 +- .../functions_multi_string_position.cpp | 2 +- .../functions_multi_string_search.cpp | 5 +- be/src/vec/functions/if.cpp | 6 +- be/src/vec/functions/int_div.cpp | 8 +- be/src/vec/functions/math.cpp | 8 +- be/src/vec/functions/modulo.cpp | 118 ++- be/src/vec/functions/multiply.cpp | 127 ++- be/src/vec/json/parse2column.cpp | 2 +- .../vec/columns/column_variant_byte_size.out | 4 +- .../column_variant_update_crc_with_value.out | 2 +- ...ant_update_crc_with_value.out_with_nullmap | 2 +- .../column_variant_update_crcs_with_value.out | 2 +- ...nt_update_crcs_with_value.out_with_nullmap | 2 +- ...olumn_variant_update_hashes_with_value.out | 2 +- ..._update_hashes_with_value.out_with_nullmap | 2 +- ...olumn_variant_update_xxHash_with_value.out | 2 +- ..._update_xxHash_with_value.out_with_nullmap | 2 +- .../operator/hashjoin_probe_operator_test.cpp | 45 +- .../runtime_filter_wrapper_test.cpp | 12 +- .../agg_group_array_intersect_test.cpp | 17 +- .../agg_min_max_by_test.cpp | 8 +- .../aggregate_functions/agg_min_max_test.cpp | 5 +- .../aggregate_functions/agg_replace_test.cpp | 7 +- be/test/vec/aggregate_functions/agg_test.cpp | 2 +- be/test/vec/columns/column_nullable_test.h | 2 +- be/test/vec/columns/column_varbinary_test.cpp | 6 +- be/test/vec/columns/column_variant_test.cpp | 52 +- be/test/vec/columns/common_column_test.h | 6 - be/test/vec/core/block_test.cpp | 6 +- be/test/vec/core/column_struct_test.cpp | 6 +- be/test/vec/core/column_test.cpp | 8 +- be/test/vec/core/field_test.cpp | 2 +- .../vec/data_types/data_type_array_test.cpp | 5 +- .../data_types/data_type_datetime_v2_test.cpp | 21 +- .../vec/data_types/data_type_decimal_test.cpp | 18 +- .../data_types/data_type_varbinary_test.cpp | 10 +- .../serde/data_type_serde_arrow_test.cpp | 3 +- .../data_types/serde/data_type_serde_test.cpp | 36 +- .../serde/data_type_to_string_test.cpp | 15 +- .../exec/format/parquet/parquet_expr_test.cpp | 15 +- be/test/vec/exec/vgeneric_iterators_test.cpp | 12 +- be/test/vec/exprs/vexpr_test.cpp | 12 +- .../vec/jsonb/convert_field_to_type_test.cpp | 54 +- be/test/vec/jsonb/serialize_test.cpp | 3 +- 87 files changed, 1657 insertions(+), 1368 deletions(-) diff --git a/be/src/exec/es/es_scroll_parser.cpp b/be/src/exec/es/es_scroll_parser.cpp index d49edbd2abce1d..983d980e66d126 100644 --- a/be/src/exec/es/es_scroll_parser.cpp +++ b/be/src/exec/es/es_scroll_parser.cpp @@ -190,7 +190,7 @@ Status get_int_value(const rapidjson::Value& col, PrimitiveType type, void* slot template Status get_date_value_int(const rapidjson::Value& col, PrimitiveType type, bool is_date_str, - typename PrimitiveTypeTraits::ColumnItemType* slot, + typename PrimitiveTypeTraits::CppType* slot, const cctz::time_zone& time_zone) { constexpr bool is_datetime_v1 = T == TYPE_DATE || T == TYPE_DATETIME; typename PrimitiveTypeTraits::CppType dt_val; @@ -271,16 +271,13 @@ Status get_date_value_int(const rapidjson::Value& col, PrimitiveType type, bool } } - *reinterpret_cast::ColumnItemType*>(slot) = - binary_cast::CppType, - typename PrimitiveTypeTraits::ColumnItemType>( - *reinterpret_cast::CppType*>(&dt_val)); + *slot = *reinterpret_cast::CppType*>(&dt_val); return Status::OK(); } template Status get_date_int(const rapidjson::Value& col, PrimitiveType type, bool pure_doc_value, - typename PrimitiveTypeTraits::ColumnItemType* slot, + typename PrimitiveTypeTraits::CppType* slot, const cctz::time_zone& time_zone) { // this would happend just only when `enable_docvalue_scan = false`, and field has timestamp format date from _source if (col.IsNumber()) { @@ -309,7 +306,7 @@ Status get_date_int(const rapidjson::Value& col, PrimitiveType type, bool pure_d template Status fill_date_int(const rapidjson::Value& col, PrimitiveType type, bool pure_doc_value, vectorized::IColumn* col_ptr, const cctz::time_zone& time_zone) { - typename PrimitiveTypeTraits::ColumnItemType data; + typename PrimitiveTypeTraits::CppType data; RETURN_IF_ERROR((get_date_int(col, type, pure_doc_value, &data, time_zone))); col_ptr->insert_data(const_cast(reinterpret_cast(&data)), 0); return Status::OK(); @@ -426,11 +423,11 @@ Status insert_int_value(const rapidjson::Value& col, PrimitiveType type, template Status handle_value(const rapidjson::Value& col, PrimitiveType sub_type, bool pure_doc_value, - typename PrimitiveTypeTraits::ColumnItemType& val) { + typename PrimitiveTypeTraits::CppType& val) { if constexpr (T == TYPE_TINYINT || T == TYPE_SMALLINT || T == TYPE_INT || T == TYPE_BIGINT || T == TYPE_LARGEINT) { - RETURN_IF_ERROR(get_int_value::ColumnItemType>( - col, sub_type, &val, pure_doc_value)); + RETURN_IF_ERROR(get_int_value::CppType>(col, sub_type, &val, + pure_doc_value)); return Status::OK(); } if constexpr (T == TYPE_FLOAT) { @@ -457,7 +454,7 @@ Status handle_value(const rapidjson::Value& col, PrimitiveType sub_type, bool pu } if (col.IsNumber()) { - val = static_cast::ColumnItemType>(col.GetInt()); + val = static_cast::CppType>(col.GetInt()); return Status::OK(); } @@ -485,7 +482,7 @@ Status handle_value(const rapidjson::Value& col, PrimitiveType sub_type, bool pu template Status process_single_column(const rapidjson::Value& col, PrimitiveType sub_type, bool pure_doc_value, vectorized::Array& array) { - typename PrimitiveTypeTraits::ColumnItemType val; + typename PrimitiveTypeTraits::CppType val; RETURN_IF_ERROR(handle_value(col, sub_type, pure_doc_value, val)); array.push_back(vectorized::Field::create_field(val)); return Status::OK(); @@ -514,12 +511,12 @@ template Status process_date_column(const rapidjson::Value& col, PrimitiveType sub_type, bool pure_doc_value, vectorized::Array& array, const cctz::time_zone& time_zone) { if (!col.IsArray()) { - typename PrimitiveTypeTraits::ColumnItemType data; + typename PrimitiveTypeTraits::CppType data; RETURN_IF_ERROR((get_date_int(col, sub_type, pure_doc_value, &data, time_zone))); array.push_back(vectorized::Field::create_field(data)); } else { for (const auto& sub_col : col.GetArray()) { - typename PrimitiveTypeTraits::ColumnItemType data; + typename PrimitiveTypeTraits::CppType data; RETURN_IF_ERROR((get_date_int(sub_col, sub_type, pure_doc_value, &data, time_zone))); array.push_back(vectorized::Field::create_field(data)); } @@ -533,7 +530,7 @@ Status process_jsonb_column(const rapidjson::Value& col, PrimitiveType sub_type, JsonBinaryValue jsonb_value; RETURN_IF_ERROR(jsonb_value.from_json_string(json_value_to_string(col))); vectorized::JsonbField json(jsonb_value.value(), jsonb_value.size()); - array.push_back(vectorized::Field::create_field(json)); + array.push_back(vectorized::Field::create_field(std::move(json))); } else { for (const auto& sub_col : col.GetArray()) { JsonBinaryValue jsonb_value; diff --git a/be/src/exec/olap_common.h b/be/src/exec/olap_common.h index 357f408f262f6e..ed3faee7787b9c 100644 --- a/be/src/exec/olap_common.h +++ b/be/src/exec/olap_common.h @@ -96,8 +96,9 @@ std::string cast_to_string(T value, int scale) { template class ColumnValueRange { public: - using CppType = std::conditional_t::CppType>; + using CppType = + std::conditional_t::CppType>; using SetType = std::set>; using IteratorType = typename SetType::iterator; @@ -820,8 +821,9 @@ template Status OlapScanKeys::extend_scan_key(ColumnValueRange& range, int32_t max_scan_key_num, bool* exact_value, bool* eos, bool* should_break) { - using CppType = std::conditional_t::CppType>; + using CppType = + std::conditional_t::CppType>; using ConstIterator = typename ColumnValueRange::SetType::const_iterator; // 1. clear ScanKey if some column range is empty diff --git a/be/src/exprs/create_predicate_function.h b/be/src/exprs/create_predicate_function.h index 2c79566a013f4c..c50c792fea2c4f 100644 --- a/be/src/exprs/create_predicate_function.h +++ b/be/src/exprs/create_predicate_function.h @@ -48,16 +48,15 @@ class HybridSetTraits { using BasePtr = HybridSetBase*; template static BasePtr get_function(bool null_aware) { - using CppType = typename PrimitiveTypeTraits::CppType; if constexpr (N >= 1 && N <= FIXED_CONTAINER_MAX_SIZE) { using Set = std::conditional_t< - std::is_same_v, StringSet<>, + is_string_type(type), StringSet<>, HybridSet::CppType, N>>>; return new Set(null_aware); } else { using Set = std::conditional_t< - std::is_same_v, StringSet<>, + is_string_type(type), StringSet<>, HybridSet::CppType>>>; return new Set(null_aware); } diff --git a/be/src/olap/comparison_predicate.h b/be/src/olap/comparison_predicate.h index 37cc7afa7503a4..41f4fe5933cdf3 100644 --- a/be/src/olap/comparison_predicate.h +++ b/be/src/olap/comparison_predicate.h @@ -34,7 +34,8 @@ template class ComparisonPredicateBase final : public ColumnPredicate { public: ENABLE_FACTORY_CREATOR(ComparisonPredicateBase); - using T = typename PrimitiveTypeTraits::CppType; + using T = std::conditional_t::CppType>; ComparisonPredicateBase(uint32_t column_id, std::string col_name, const T& value, bool opposite = false) : ColumnPredicate(column_id, col_name, Type, opposite), _value(value) {} @@ -169,16 +170,14 @@ class ComparisonPredicateBase final : public ColumnPredicate { bool camp_field(const vectorized::Field& min_field, const vectorized::Field& max_field) const { T min_value; T max_value; - if constexpr (is_int_or_bool(Type) || is_float_or_double(Type)) { - min_value = - (typename PrimitiveTypeTraits::CppType)min_field - .template get::NearestFieldType>(); - max_value = - (typename PrimitiveTypeTraits::CppType)max_field - .template get::NearestFieldType>(); + if constexpr (is_string_type(Type)) { + auto& tmp_min = min_field.template get(); + auto& tmp_max = max_field.template get(); + min_value = StringRef(tmp_min.data(), tmp_min.size()); + max_value = StringRef(tmp_max.data(), tmp_max.size()); } else { - min_value = min_field.template get::CppType>(); - max_value = max_field.template get::CppType>(); + min_value = min_field.template get(); + max_value = max_field.template get(); } if constexpr (PT == PredicateType::EQ) { diff --git a/be/src/olap/delete_handler.cpp b/be/src/olap/delete_handler.cpp index 2b40351296ddca..7c521aadfe12c5 100644 --- a/be/src/olap/delete_handler.cpp +++ b/be/src/olap/delete_handler.cpp @@ -317,7 +317,7 @@ Status parse_to_predicate(const uint32_t index, const std::string col_name, case TYPE_CHAR: case TYPE_VARCHAR: case TYPE_STRING: { - RETURN_IF_ERROR(convert(type, res.value_str.front(), arena, v)); + v = {res.value_str.front().data(), res.value_str.front().size()}; switch (res.condition_op) { case PredicateType::EQ: predicate = create_comparison_predicate0(index, col_name, type, v, diff --git a/be/src/olap/in_list_predicate.h b/be/src/olap/in_list_predicate.h index ea8ee54facc564..00ae4e7a3556bc 100644 --- a/be/src/olap/in_list_predicate.h +++ b/be/src/olap/in_list_predicate.h @@ -66,7 +66,8 @@ template class InListPredicateBase final : public ColumnPredicate { public: ENABLE_FACTORY_CREATOR(InListPredicateBase); - using T = typename PrimitiveTypeTraits::CppType; + using T = std::conditional_t::CppType>; using HybridSetType = std::conditional_t< N >= 1 && N <= FIXED_CONTAINER_MAX_SIZE, std::conditional_t< @@ -256,16 +257,14 @@ class InListPredicateBase final : public ColumnPredicate { bool camp_field(const vectorized::Field& min_field, const vectorized::Field& max_field) const { T min_value; T max_value; - if constexpr (is_int_or_bool(Type) || is_float_or_double(Type)) { - min_value = - (typename PrimitiveTypeTraits::CppType)min_field - .template get::NearestFieldType>(); - max_value = - (typename PrimitiveTypeTraits::CppType)max_field - .template get::NearestFieldType>(); + if constexpr (is_string_type(Type)) { + auto& tmp_min = min_field.template get(); + auto& tmp_max = max_field.template get(); + min_value = StringRef(tmp_min.data(), tmp_min.size()); + max_value = StringRef(tmp_max.data(), tmp_max.size()); } else { - min_value = min_field.template get::CppType>(); - max_value = max_field.template get::CppType>(); + min_value = min_field.template get(); + max_value = max_field.template get(); } if constexpr (PT == PredicateType::IN_LIST) { diff --git a/be/src/olap/rowset/segment_v2/bloom_filter_index_writer.cpp b/be/src/olap/rowset/segment_v2/bloom_filter_index_writer.cpp index c3b4eb1ed13bb2..2977ef4a41e6c5 100644 --- a/be/src/olap/rowset/segment_v2/bloom_filter_index_writer.cpp +++ b/be/src/olap/rowset/segment_v2/bloom_filter_index_writer.cpp @@ -317,6 +317,8 @@ Status BloomFilterIndexWriter::create(const BloomFilterOptions& bf_options, case TYPE: \ res->reset(new BloomFilterIndexWriterImpl(bf_options, type_info)); \ break; + M(FieldType::OLAP_FIELD_TYPE_BOOL) + M(FieldType::OLAP_FIELD_TYPE_TINYINT) M(FieldType::OLAP_FIELD_TYPE_SMALLINT) M(FieldType::OLAP_FIELD_TYPE_INT) M(FieldType::OLAP_FIELD_TYPE_UNSIGNED_INT) diff --git a/be/src/olap/rowset/segment_v2/inverted_index_reader.h b/be/src/olap/rowset/segment_v2/inverted_index_reader.h index 2f4b3dd096f3f0..7e3bb740e47b0c 100644 --- a/be/src/olap/rowset/segment_v2/inverted_index_reader.h +++ b/be/src/olap/rowset/segment_v2/inverted_index_reader.h @@ -393,8 +393,7 @@ class InvertedIndexQueryParamFactory { CPP_TYPE cpp_val; if constexpr (std::is_same_v) { - auto field_val = - doris::vectorized::get>(*value); + auto field_val = value->template get::CppType>(); cpp_val = static_cast(field_val); } else { cpp_val = static_cast(*value); diff --git a/be/src/olap/rowset/segment_v2/zone_map_index.cpp b/be/src/olap/rowset/segment_v2/zone_map_index.cpp index 4553995effa636..c80e7b9c91b770 100644 --- a/be/src/olap/rowset/segment_v2/zone_map_index.cpp +++ b/be/src/olap/rowset/segment_v2/zone_map_index.cpp @@ -58,7 +58,8 @@ void TypedZoneMapIndexWriter::add_values(const void* values, size_t count) if (count > 0) { _page_zone_map.has_not_null = true; } - using ValType = PrimitiveTypeTraits::StorageFieldType; + using ValType = std::conditional_t::StorageFieldType>; const auto* vals = reinterpret_cast(values); if constexpr (Type == TYPE_FLOAT || Type == TYPE_DOUBLE) { ValType min = std::numeric_limits::max(); diff --git a/be/src/pipeline/exec/scan_operator.cpp b/be/src/pipeline/exec/scan_operator.cpp index fa41e4e158c9fb..f43679debb122a 100644 --- a/be/src/pipeline/exec/scan_operator.cpp +++ b/be/src/pipeline/exec/scan_operator.cpp @@ -883,19 +883,19 @@ Status ScanLocalState::_change_value_range(bool is_equal_op, reinterpret_cast::CppType*>(value)); } else if constexpr (PrimitiveType == TYPE_HLL) { func(temp_range, to_olap_filter_type(fn_name), reinterpret_cast(value)); - } else if constexpr ((PrimitiveType == TYPE_DECIMALV2) || (PrimitiveType == TYPE_CHAR) || - (PrimitiveType == TYPE_VARCHAR) || (PrimitiveType == TYPE_DATETIMEV2) || + } else if constexpr ((PrimitiveType == TYPE_DECIMALV2) || (PrimitiveType == TYPE_DATETIMEV2) || (PrimitiveType == TYPE_TINYINT) || (PrimitiveType == TYPE_SMALLINT) || (PrimitiveType == TYPE_INT) || (PrimitiveType == TYPE_BIGINT) || (PrimitiveType == TYPE_LARGEINT) || (PrimitiveType == TYPE_FLOAT) || (PrimitiveType == TYPE_DOUBLE) || (PrimitiveType == TYPE_IPV4) || (PrimitiveType == TYPE_IPV6) || (PrimitiveType == TYPE_DECIMAL32) || (PrimitiveType == TYPE_DECIMAL64) || (PrimitiveType == TYPE_DECIMAL128I) || - (PrimitiveType == TYPE_DECIMAL256) || (PrimitiveType == TYPE_STRING) || - (PrimitiveType == TYPE_BOOLEAN) || (PrimitiveType == TYPE_DATEV2) || - (PrimitiveType == TYPE_TIMESTAMPTZ)) { + (PrimitiveType == TYPE_DECIMAL256) || (PrimitiveType == TYPE_BOOLEAN) || + (PrimitiveType == TYPE_DATEV2) || (PrimitiveType == TYPE_TIMESTAMPTZ)) { func(temp_range, to_olap_filter_type(fn_name), reinterpret_cast::CppType*>(value)); + } else if constexpr (is_string_type(PrimitiveType)) { + func(temp_range, to_olap_filter_type(fn_name), reinterpret_cast(value)); } else { static_assert(always_false_v); } diff --git a/be/src/runtime/primitive_type.h b/be/src/runtime/primitive_type.h index 4686bdbab7d209..c33f446e2cfa0e 100644 --- a/be/src/runtime/primitive_type.h +++ b/be/src/runtime/primitive_type.h @@ -47,8 +47,6 @@ class ColumnStruct; class ColumnVarbinary; using ColumnString = ColumnStr; class JsonbField; -template -class DecimalField; template struct Decimal; template @@ -127,7 +125,6 @@ class ColumnArray; } // namespace vectorized class DecimalV2Value; -struct StringRef; constexpr bool is_enumeration_type(PrimitiveType type) { switch (type) { @@ -273,7 +270,6 @@ struct PrimitiveTypeTraits; * ColumnItemType: Data item type in column * DataType: DataType which is mapping to this PrimitiveType * ColumnType: ColumnType which is mapping to this PrimitiveType - * NearestFieldType: Nearest Doris type in execution engine * NearestPrimitiveType: Nearest primitive type */ template <> @@ -284,7 +280,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = vectorized::UInt8; using DataType = vectorized::DataTypeBool; using ColumnType = vectorized::ColumnUInt8; - using NearestFieldType = vectorized::Int64; static constexpr PrimitiveType NearestPrimitiveType = TYPE_BIGINT; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_BIGINT; }; @@ -296,7 +291,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeInt8; using ColumnType = vectorized::ColumnInt8; - using NearestFieldType = vectorized::Int64; static constexpr PrimitiveType NearestPrimitiveType = TYPE_BIGINT; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_BIGINT; }; @@ -308,7 +302,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeInt16; using ColumnType = vectorized::ColumnInt16; - using NearestFieldType = vectorized::Int64; static constexpr PrimitiveType NearestPrimitiveType = TYPE_BIGINT; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_BIGINT; }; @@ -320,7 +313,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeInt32; using ColumnType = vectorized::ColumnInt32; - using NearestFieldType = vectorized::Int64; static constexpr PrimitiveType NearestPrimitiveType = TYPE_BIGINT; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_BIGINT; }; @@ -332,7 +324,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeInt64; using ColumnType = vectorized::ColumnInt64; - using NearestFieldType = vectorized::Int64; static constexpr PrimitiveType NearestPrimitiveType = TYPE_BIGINT; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_LARGEINT; }; @@ -344,7 +335,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeInt128; using ColumnType = vectorized::ColumnInt128; - using NearestFieldType = vectorized::Int128; static constexpr PrimitiveType NearestPrimitiveType = TYPE_LARGEINT; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_LARGEINT; }; @@ -356,7 +346,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeNothing; using ColumnType = vectorized::IColumnDummy; - using NearestFieldType = vectorized::Null; static constexpr PrimitiveType NearestPrimitiveType = TYPE_NULL; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_NULL; }; @@ -368,7 +357,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeFloat32; using ColumnType = vectorized::ColumnFloat32; - using NearestFieldType = vectorized::Float64; static constexpr PrimitiveType NearestPrimitiveType = TYPE_DOUBLE; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DOUBLE; }; @@ -380,7 +368,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeFloat64; using ColumnType = vectorized::ColumnFloat64; - using NearestFieldType = vectorized::Float64; static constexpr PrimitiveType NearestPrimitiveType = TYPE_DOUBLE; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DOUBLE; }; @@ -392,7 +379,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeTimeV2; using ColumnType = vectorized::ColumnTimeV2; - using NearestFieldType = vectorized::Float64; static constexpr PrimitiveType NearestPrimitiveType = TYPE_DOUBLE; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DOUBLE; }; @@ -404,7 +390,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeTimeV2; using ColumnType = vectorized::ColumnTime; - using NearestFieldType = vectorized::Float64; static constexpr PrimitiveType NearestPrimitiveType = TYPE_DOUBLE; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DOUBLE; }; @@ -417,7 +402,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = vectorized::Int64; using DataType = vectorized::DataTypeDate; using ColumnType = vectorized::ColumnDate; - using NearestFieldType = vectorized::Int64; static constexpr PrimitiveType NearestPrimitiveType = TYPE_DATE; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DATE; }; @@ -429,7 +413,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = vectorized::Int64; using DataType = vectorized::DataTypeDateTime; using ColumnType = vectorized::ColumnDateTime; - using NearestFieldType = vectorized::Int64; static constexpr PrimitiveType NearestPrimitiveType = TYPE_DATETIME; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DATETIME; }; @@ -441,7 +424,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = vectorized::UInt64; using DataType = vectorized::DataTypeDateTimeV2; using ColumnType = vectorized::ColumnDateTimeV2; - using NearestFieldType = vectorized::UInt64; static constexpr PrimitiveType NearestPrimitiveType = TYPE_DATETIMEV2; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DATETIMEV2; }; @@ -453,7 +435,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = vectorized::UInt32; using DataType = vectorized::DataTypeDateV2; using ColumnType = vectorized::ColumnDateV2; - using NearestFieldType = vectorized::UInt64; static constexpr PrimitiveType NearestPrimitiveType = TYPE_DATEV2; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DATEV2; }; @@ -466,9 +447,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = vectorized::UInt64; using DataType = vectorized::DataTypeTimeStampTz; using ColumnType = vectorized::ColumnTimeStampTz; - using NearestFieldType = vectorized::UInt64; - using AvgNearestFieldType = vectorized::UInt64; - using AvgNearestFieldType256 = vectorized::UInt64; static constexpr PrimitiveType NearestPrimitiveType = TYPE_TIMESTAMPTZ; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_TIMESTAMPTZ; static constexpr PrimitiveType AvgNearestPrimitiveType256 = TYPE_TIMESTAMPTZ; @@ -483,7 +461,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = vectorized::Decimal128V2; using DataType = vectorized::DataTypeDecimalV2; using ColumnType = vectorized::ColumnDecimal128V2; - using NearestFieldType = vectorized::DecimalField; static constexpr PrimitiveType NearestPrimitiveType = TYPE_DECIMALV2; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DECIMALV2; }; @@ -495,7 +472,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeDecimal32; using ColumnType = vectorized::ColumnDecimal32; - using NearestFieldType = vectorized::DecimalField; static constexpr PrimitiveType NearestPrimitiveType = TYPE_DECIMAL32; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DECIMAL128I; }; @@ -507,7 +483,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeDecimal64; using ColumnType = vectorized::ColumnDecimal64; - using NearestFieldType = vectorized::DecimalField; static constexpr PrimitiveType NearestPrimitiveType = TYPE_DECIMAL64; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DECIMAL128I; }; @@ -519,7 +494,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeDecimal128; using ColumnType = vectorized::ColumnDecimal128V3; - using NearestFieldType = vectorized::DecimalField; static constexpr PrimitiveType NearestPrimitiveType = TYPE_DECIMAL128I; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DECIMAL128I; }; @@ -531,7 +505,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeDecimal256; using ColumnType = vectorized::ColumnDecimal256; - using NearestFieldType = vectorized::DecimalField; static constexpr PrimitiveType NearestPrimitiveType = TYPE_DECIMAL256; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DECIMAL256; }; @@ -543,7 +516,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeIPv4; using ColumnType = vectorized::ColumnIPv4; - using NearestFieldType = IPv4; static constexpr PrimitiveType NearestPrimitiveType = TYPE_IPV4; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_IPV4; }; @@ -555,43 +527,39 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeIPv6; using ColumnType = vectorized::ColumnIPv6; - using NearestFieldType = IPv6; static constexpr PrimitiveType NearestPrimitiveType = TYPE_IPV6; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_IPV6; }; template <> struct PrimitiveTypeTraits { - using CppType = StringRef; + using CppType = vectorized::String; using StorageFieldType = CppType; - using CppNativeType = vectorized::String; - using ColumnItemType = vectorized::String; + using CppNativeType = CppType; + using ColumnItemType = CppType; using DataType = vectorized::DataTypeString; using ColumnType = vectorized::ColumnString; - using NearestFieldType = vectorized::String; static constexpr PrimitiveType NearestPrimitiveType = TYPE_CHAR; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_CHAR; }; template <> struct PrimitiveTypeTraits { - using CppType = StringRef; + using CppType = vectorized::String; using StorageFieldType = CppType; - using CppNativeType = vectorized::String; - using ColumnItemType = vectorized::String; + using CppNativeType = CppType; + using ColumnItemType = CppType; using DataType = vectorized::DataTypeString; using ColumnType = vectorized::ColumnString; - using NearestFieldType = vectorized::String; static constexpr PrimitiveType NearestPrimitiveType = TYPE_VARCHAR; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_VARCHAR; }; template <> struct PrimitiveTypeTraits { - using CppType = StringRef; + using CppType = vectorized::String; using StorageFieldType = CppType; - using CppNativeType = vectorized::String; - using ColumnItemType = vectorized::String; + using CppNativeType = CppType; + using ColumnItemType = CppType; using DataType = vectorized::DataTypeString; using ColumnType = vectorized::ColumnString; - using NearestFieldType = vectorized::String; static constexpr PrimitiveType NearestPrimitiveType = TYPE_STRING; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_STRING; }; @@ -599,12 +567,11 @@ template <> struct PrimitiveTypeTraits { using CppType = doris::StringView; using StorageFieldType = CppType; - using CppNativeType = doris::StringView; - using ColumnItemType = doris::StringView; + using CppNativeType = CppType; + using ColumnItemType = CppType; using DataType = vectorized::DataTypeVarbinary; using ColumnType = vectorized::ColumnVarbinary; // StringView is non-owning, but StringViewField wraps it with String for ownership - using NearestFieldType = vectorized::StringViewField; static constexpr PrimitiveType NearestPrimitiveType = TYPE_VARBINARY; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_VARBINARY; }; @@ -613,10 +580,9 @@ struct PrimitiveTypeTraits { using CppType = HyperLogLog; using StorageFieldType = CppType; using CppNativeType = CppType; - using ColumnItemType = HyperLogLog; + using ColumnItemType = CppType; using DataType = vectorized::DataTypeHLL; using ColumnType = vectorized::ColumnHLL; - using NearestFieldType = HyperLogLog; static constexpr PrimitiveType NearestPrimitiveType = TYPE_HLL; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_HLL; }; @@ -628,7 +594,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeJsonb; using ColumnType = vectorized::ColumnString; - using NearestFieldType = vectorized::JsonbField; static constexpr PrimitiveType NearestPrimitiveType = TYPE_JSONB; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_JSONB; }; @@ -640,7 +605,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeArray; using ColumnType = vectorized::ColumnArray; - using NearestFieldType = vectorized::Array; static constexpr PrimitiveType NearestPrimitiveType = TYPE_ARRAY; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_ARRAY; }; @@ -652,7 +616,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeMap; using ColumnType = vectorized::ColumnMap; - using NearestFieldType = vectorized::Map; static constexpr PrimitiveType NearestPrimitiveType = TYPE_MAP; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_MAP; }; @@ -664,7 +627,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeStruct; using ColumnType = vectorized::ColumnStruct; - using NearestFieldType = vectorized::Tuple; static constexpr PrimitiveType NearestPrimitiveType = TYPE_STRUCT; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_STRUCT; }; @@ -676,7 +638,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeVariant; using ColumnType = vectorized::ColumnVariant; - using NearestFieldType = vectorized::VariantMap; static constexpr PrimitiveType NearestPrimitiveType = TYPE_VARIANT; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_VARIANT; }; @@ -688,7 +649,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeBitMap; using ColumnType = vectorized::ColumnBitmap; - using NearestFieldType = BitmapValue; static constexpr PrimitiveType NearestPrimitiveType = TYPE_BITMAP; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_BITMAP; }; @@ -700,7 +660,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeQuantileState; using ColumnType = vectorized::ColumnQuantileState; - using NearestFieldType = QuantileState; static constexpr PrimitiveType NearestPrimitiveType = TYPE_QUANTILE_STATE; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_QUANTILE_STATE; }; @@ -712,7 +671,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeNothing; using ColumnType = vectorized::ColumnOffset32; - using NearestFieldType = vectorized::UInt64; static constexpr PrimitiveType NearestPrimitiveType = TYPE_UINT32; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_UINT32; }; @@ -724,7 +682,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeNothing; using ColumnType = vectorized::ColumnOffset64; - using NearestFieldType = vectorized::UInt64; static constexpr PrimitiveType NearestPrimitiveType = TYPE_UINT64; static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DOUBLE; }; diff --git a/be/src/vec/columns/column_const.h b/be/src/vec/columns/column_const.h index 6432b9d913ca01..cd8b07708720c9 100644 --- a/be/src/vec/columns/column_const.h +++ b/be/src/vec/columns/column_const.h @@ -281,10 +281,10 @@ class ColumnConst final : public COWHelper { Field get_field() const { return get_data_column()[0]; } - template - T get_value() const { + template + typename PrimitiveTypeTraits::CppType get_value() const { // Here the cast is correct, relevant code is rather tricky. - return static_cast(get_field().get>()); + return get_field().get::CppType>(); } void replace_column_data(const IColumn& rhs, size_t row, size_t self_row = 0) override { diff --git a/be/src/vec/columns/column_decimal.cpp b/be/src/vec/columns/column_decimal.cpp index 1d93ed42602036..99b9e535b83160 100644 --- a/be/src/vec/columns/column_decimal.cpp +++ b/be/src/vec/columns/column_decimal.cpp @@ -53,9 +53,19 @@ int ColumnDecimal::compare_at(size_t n, size_t m, const IColumn& rhs_, int) c if (scale == other.scale) { return a > b ? 1 : (a < b ? -1 : 0); } - return decimal_less(b, a, other.scale, scale) - ? 1 - : (decimal_less(a, b, scale, other.scale) ? -1 : 0); + if constexpr (T == TYPE_DECIMALV2) { + return decimal_less(*(DecimalV2Value*)&b, *(DecimalV2Value*)&a, other.scale, + scale) + ? 1 + : (decimal_less(*(DecimalV2Value*)&a, *(DecimalV2Value*)&b, + scale, other.scale) + ? -1 + : 0); + } else { + return decimal_less(b, a, other.scale, scale) + ? 1 + : (decimal_less(a, b, scale, other.scale) ? -1 : 0); + } } template @@ -236,7 +246,7 @@ void ColumnDecimal::update_hashes_with_value(uint64_t* __restrict hashes, template Field ColumnDecimal::operator[](size_t n) const { - return Field::create_field(DecimalField(data[n], scale)); + return Field::create_field(*(typename PrimitiveTypeTraits::CppType*)(&data[n])); } template diff --git a/be/src/vec/columns/column_decimal.h b/be/src/vec/columns/column_decimal.h index 2778582a62eaff..36b19c4f86862b 100644 --- a/be/src/vec/columns/column_decimal.h +++ b/be/src/vec/columns/column_decimal.h @@ -142,8 +142,7 @@ class ColumnDecimal final : public COWHelper> { void insert_data(const char* pos, size_t /*length*/) override; void insert_default() override { data.push_back(value_type()); } void insert(const Field& x) override { - data.push_back( - doris::vectorized::get::NearestFieldType>(x)); + data.push_back(x.template get::ColumnItemType>()); } void insert_range_from(const IColumn& src, size_t start, size_t length) override; diff --git a/be/src/vec/columns/column_varbinary.h b/be/src/vec/columns/column_varbinary.h index 50fe660cfd8338..6e968f5dc9b19b 100644 --- a/be/src/vec/columns/column_varbinary.h +++ b/be/src/vec/columns/column_varbinary.h @@ -77,7 +77,8 @@ class ColumnVarbinary final : public COWHelper { char* alloc(size_t length) { return _arena.alloc(length); } void insert(const Field& x) override { - const auto& value = vectorized::get(x); + const auto& value = + vectorized::get::CppType&>(x); insert_data(value.data(), value.size()); } diff --git a/be/src/vec/columns/column_variant.cpp b/be/src/vec/columns/column_variant.cpp index 9c8ffb48df3c64..8caf14b8a71dc8 100644 --- a/be/src/vec/columns/column_variant.cpp +++ b/be/src/vec/columns/column_variant.cpp @@ -2210,7 +2210,7 @@ class FieldVisitorReplaceScalars : public StaticVisitor { : replacement(replacement_), num_dimensions_to_keep(num_dimensions_to_keep_) {} template - Field apply(const typename PrimitiveTypeTraits::NearestFieldType& x) const { + Field apply(const typename PrimitiveTypeTraits::CppType& x) const { if constexpr (T == TYPE_ARRAY) { if (num_dimensions_to_keep == 0) { return replacement; diff --git a/be/src/vec/columns/column_vector.cpp b/be/src/vec/columns/column_vector.cpp index 97d5032c601d6a..8b9ddcdb09a5ab 100644 --- a/be/src/vec/columns/column_vector.cpp +++ b/be/src/vec/columns/column_vector.cpp @@ -145,7 +145,7 @@ void ColumnVector::compare_internal(size_t rhs_row_id, const IColumn& rhs, template Field ColumnVector::operator[](size_t n) const { - return Field::create_field((typename PrimitiveTypeTraits::NearestFieldType)data[n]); + return Field::create_field(*(typename PrimitiveTypeTraits::CppType*)(&data[n])); } template @@ -308,6 +308,75 @@ MutableColumnPtr ColumnVector::clone_resized(size_t size) const { return res; } +template +void ColumnVector::insert(const Field& x) { + value_type tmp; + switch (x.get_type()) { + case TYPE_NULL: + tmp = default_value(); + break; + case TYPE_BOOLEAN: + tmp = doris::vectorized::get::CppType>(x); + break; + case TYPE_TINYINT: + tmp = doris::vectorized::get::CppType>(x); + break; + case TYPE_SMALLINT: + tmp = (value_type) + doris::vectorized::get::CppType>(x); + break; + case TYPE_INT: + tmp = (value_type)doris::vectorized::get::CppType>( + x); + break; + case TYPE_BIGINT: + tmp = (value_type) + doris::vectorized::get::CppType>(x); + break; + case TYPE_LARGEINT: + tmp = (value_type) + doris::vectorized::get::CppType>(x); + break; + case TYPE_IPV4: + tmp = (value_type)doris::vectorized::get::CppType>( + x); + break; + case TYPE_IPV6: + tmp = (value_type)doris::vectorized::get::CppType>( + x); + break; + case TYPE_FLOAT: + tmp = (value_type)doris::vectorized::get::CppType>( + x); + break; + case TYPE_DOUBLE: + tmp = (value_type) + doris::vectorized::get::CppType>(x); + break; + case TYPE_TIME: + tmp = (value_type)doris::vectorized::get::CppType>( + x); + break; + case TYPE_TIMEV2: + tmp = (value_type) + doris::vectorized::get::CppType>(x); + break; + case TYPE_DATE: + case TYPE_DATETIME: + case TYPE_DATEV2: + case TYPE_DATETIMEV2: + case TYPE_TIMESTAMPTZ: + tmp = doris::vectorized::get::ColumnItemType>(x); + break; + default: + throw doris::Exception(ErrorCode::INTERNAL_ERROR, + "Unsupported type {} to insert into {} type column", + type_to_string(x.get_type()), type_to_string(T)); + break; + } + data.push_back(tmp); +} + template void ColumnVector::insert_range_from(const IColumn& src, size_t start, size_t length) { const ColumnVector& src_vec = assert_cast(src); diff --git a/be/src/vec/columns/column_vector.h b/be/src/vec/columns/column_vector.h index b417ef259bd31b..6367b54e557b01 100644 --- a/be/src/vec/columns/column_vector.h +++ b/be/src/vec/columns/column_vector.h @@ -301,10 +301,7 @@ class ColumnVector final : public COWHelper> { // but its type is different from column's data type (int64 vs uint64), so that during column // insert method, should use NearestFieldType to get the Field and get it actual // uint8 value and then insert into column. - void insert(const Field& x) override { - data.push_back( - doris::vectorized::get::NearestFieldType>(x)); - } + void insert(const Field& x) override; void insert_range_from(const IColumn& src, size_t start, size_t length) override; diff --git a/be/src/vec/columns/predicate_column.h b/be/src/vec/columns/predicate_column.h index 73a61ea1aae38c..abcf3287fe4501 100644 --- a/be/src/vec/columns/predicate_column.h +++ b/be/src/vec/columns/predicate_column.h @@ -46,7 +46,8 @@ class PredicateColumnType final : public COWHelper>; - using T = typename PrimitiveTypeTraits::CppType; + using T = std::conditional_t::CppType>; using ColumnType = typename PrimitiveTypeTraits::ColumnType; void insert_string_to_res_column(const uint16_t* sel, size_t sel_size, ColumnString* res_ptr) { diff --git a/be/src/vec/common/field_visitors.h b/be/src/vec/common/field_visitors.h index 1e80249cb4d194..e287b54155e17b 100644 --- a/be/src/vec/common/field_visitors.h +++ b/be/src/vec/common/field_visitors.h @@ -44,73 +44,79 @@ typename std::decay_t::ResultType apply_visitor(Visitor&& visitor, F&& switch (field.get_type()) { case PrimitiveType::TYPE_NULL: return visitor.template apply( - field.template get::NearestFieldType>()); + field.template get::CppType>()); case PrimitiveType::TYPE_DATETIMEV2: return visitor.template apply( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); case PrimitiveType::TYPE_TIMESTAMPTZ: return visitor.template apply( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); case PrimitiveType::TYPE_LARGEINT: return visitor.template apply( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); case PrimitiveType::TYPE_DATETIME: return visitor.template apply( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); case PrimitiveType::TYPE_DATE: return visitor.template apply( - field.template get::NearestFieldType>()); + field.template get::CppType>()); + case PrimitiveType::TYPE_BOOLEAN: + return visitor.template apply( + field.template get::CppType>()); + case PrimitiveType::TYPE_TINYINT: + return visitor.template apply( + field.template get::CppType>()); + case PrimitiveType::TYPE_SMALLINT: + return visitor.template apply( + field.template get::CppType>()); + case PrimitiveType::TYPE_INT: + return visitor.template apply( + field.template get::CppType>()); case PrimitiveType::TYPE_BIGINT: return visitor.template apply( - field.template get::NearestFieldType>()); + field.template get::CppType>()); + case PrimitiveType::TYPE_FLOAT: + return visitor.template apply( + field.template get::CppType>()); case PrimitiveType::TYPE_DOUBLE: return visitor.template apply( - field.template get::NearestFieldType>()); + field.template get::CppType>()); case PrimitiveType::TYPE_STRING: return visitor.template apply( - field.template get::NearestFieldType>()); + field.template get::CppType>()); case PrimitiveType::TYPE_CHAR: return visitor.template apply( - field.template get::NearestFieldType>()); + field.template get::CppType>()); case PrimitiveType::TYPE_VARCHAR: return visitor.template apply( - field.template get::NearestFieldType>()); + field.template get::CppType>()); case PrimitiveType::TYPE_ARRAY: return visitor.template apply( - field.template get::NearestFieldType>()); + field.template get::CppType>()); case PrimitiveType::TYPE_STRUCT: return visitor.template apply( - field.template get::NearestFieldType>()); + field.template get::CppType>()); case PrimitiveType::TYPE_VARIANT: return visitor.template apply( - field.template get::NearestFieldType>()); + field.template get::CppType>()); case PrimitiveType::TYPE_DECIMAL32: return visitor.template apply( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); case PrimitiveType::TYPE_DECIMAL64: return visitor.template apply( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); case PrimitiveType::TYPE_DECIMALV2: return visitor.template apply( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); case PrimitiveType::TYPE_DECIMAL128I: return visitor.template apply( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); case PrimitiveType::TYPE_DECIMAL256: return visitor.template apply( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); case PrimitiveType::TYPE_JSONB: return visitor.template apply( - field.template get::NearestFieldType>()); + field.template get::CppType>()); default: throw doris::Exception(ErrorCode::INTERNAL_ERROR, "Bad type of Field {}", static_cast(field.get_type())); diff --git a/be/src/vec/common/schema_util.cpp b/be/src/vec/common/schema_util.cpp index 3d749a31b3f7cb..b1913abfd9ae1b 100644 --- a/be/src/vec/common/schema_util.cpp +++ b/be/src/vec/common/schema_util.cpp @@ -1177,7 +1177,7 @@ class FieldVisitorToNumberOfDimensions : public StaticVisitor { public: FieldVisitorToNumberOfDimensions() = default; template - size_t apply(const typename PrimitiveTypeTraits::NearestFieldType& x) { + size_t apply(const typename PrimitiveTypeTraits::CppType& x) { if constexpr (T == TYPE_ARRAY) { const size_t size = x.size(); size_t dimensions = 0; @@ -1198,7 +1198,7 @@ class FieldVisitorToNumberOfDimensions : public StaticVisitor { class SimpleFieldVisitorToScalarType : public StaticVisitor { public: template - size_t apply(const typename PrimitiveTypeTraits::NearestFieldType& x) { + size_t apply(const typename PrimitiveTypeTraits::CppType& x) { if constexpr (T == TYPE_ARRAY) { throw doris::Exception(ErrorCode::INVALID_ARGUMENT, "Array type is not supported"); } else if constexpr (T == TYPE_BIGINT) { @@ -1238,7 +1238,7 @@ class SimpleFieldVisitorToScalarType : public StaticVisitor { class FieldVisitorToScalarType : public StaticVisitor { public: template - size_t apply(const typename PrimitiveTypeTraits::NearestFieldType& x) { + size_t apply(const typename PrimitiveTypeTraits::CppType& x) { if constexpr (T == TYPE_ARRAY) { size_t size = x.size(); for (size_t i = 0; i < size; ++i) { diff --git a/be/src/vec/core/decimal_comparison.h b/be/src/vec/core/decimal_comparison.h index 8483f8fe0efa75..6d8923ea3ea53d 100644 --- a/be/src/vec/core/decimal_comparison.h +++ b/be/src/vec/core/decimal_comparison.h @@ -32,17 +32,6 @@ namespace doris::vectorized { -inline bool allow_decimal_comparison(const DataTypePtr& left_type, const DataTypePtr& right_type) { - if (is_decimal(left_type->get_primitive_type())) { - if (is_decimal(right_type->get_primitive_type()) || - is_int_or_bool(right_type->get_primitive_type())) - return true; - } else if (is_int_or_bool(left_type->get_primitive_type()) && - is_decimal(right_type->get_primitive_type())) - return true; - return false; -} - template struct ConstructDecInt { static constexpr PrimitiveType Type = TYPE_INT; @@ -64,10 +53,10 @@ template struct DecCompareInt { static constexpr PrimitiveType Type = ConstructDecInt < (!is_decimal(U) || - sizeof(typename PrimitiveTypeTraits::ColumnItemType) > - sizeof(typename PrimitiveTypeTraits::ColumnItemType)) - ? sizeof(typename PrimitiveTypeTraits::ColumnItemType) - : sizeof(typename PrimitiveTypeTraits::ColumnItemType) > ::Type; + sizeof(typename PrimitiveTypeTraits::CppType) > + sizeof(typename PrimitiveTypeTraits::CppType)) + ? sizeof(typename PrimitiveTypeTraits::CppType) + : sizeof(typename PrimitiveTypeTraits::CppType) > ::Type; }; /// @@ -108,8 +97,8 @@ class DecimalComparison { return false; } - static bool compare(typename PrimitiveTypeTraits::ColumnItemType a, - typename PrimitiveTypeTraits::ColumnItemType b, UInt32 scale_a, + static bool compare(typename PrimitiveTypeTraits::CppType a, + typename PrimitiveTypeTraits::CppType b, UInt32 scale_a, UInt32 scale_b) { static const UInt32 max_scale = max_decimal_precision(); if (scale_a > max_scale || scale_b > max_scale) { @@ -157,8 +146,8 @@ class DecimalComparison { Shift shift; if (decimal0 && decimal1) { constexpr PrimitiveType Type = - sizeof(typename PrimitiveTypeTraits::ColumnItemType) >= - sizeof(typename PrimitiveTypeTraits::ColumnItemType) + sizeof(typename PrimitiveTypeTraits::CppType) >= + sizeof(typename PrimitiveTypeTraits::CppType) ? T : U; auto type_ptr = decimal_result_type(*decimal0, *decimal1, false, false, false); @@ -207,10 +196,8 @@ class DecimalComparison { const ColumnConst* c0_const = check_and_get_column_const(c0.get()); const ColumnConst* c1_const = check_and_get_column_const(c1.get()); - typename PrimitiveTypeTraits::ColumnItemType a = c0_const->template get_value< - typename PrimitiveTypeTraits::ColumnItemType>(); - typename PrimitiveTypeTraits::ColumnItemType b = c1_const->template get_value< - typename PrimitiveTypeTraits::ColumnItemType>(); + const auto& a = c0_const->template get_value(); + const auto& b = c1_const->template get_value(); UInt8 res = apply(a, b, scale); return DataTypeUInt8().create_column_const(c0->size(), to_field(res)); } @@ -220,8 +207,7 @@ class DecimalComparison { if (c0_is_const) { const ColumnConst* c0_const = check_and_get_column_const(c0.get()); - typename PrimitiveTypeTraits::ColumnItemType a = c0_const->template get_value< - typename PrimitiveTypeTraits::ColumnItemType>(); + const auto& a = c0_const->template get_value(); if (const ColVecB* c1_vec = check_and_get_column(c1.get())) constant_vector(a, c1_vec->get_data(), vec_res, scale); else { @@ -229,8 +215,7 @@ class DecimalComparison { } } else if (c1_is_const) { const ColumnConst* c1_const = check_and_get_column_const(c1.get()); - typename PrimitiveTypeTraits::ColumnItemType b = c1_const->template get_value< - typename PrimitiveTypeTraits::ColumnItemType>(); + const auto& b = c1_const->template get_value(); if (const ColVecA* c0_vec = check_and_get_column(c0.get())) vector_constant(c0_vec->get_data(), b, vec_res, scale); else { @@ -255,8 +240,8 @@ class DecimalComparison { } template - static UInt8 apply(typename PrimitiveTypeTraits::ColumnItemType a, - typename PrimitiveTypeTraits::ColumnItemType b, + static UInt8 apply(typename PrimitiveTypeTraits::CppType a, + typename PrimitiveTypeTraits::CppType b, CompareInt scale [[maybe_unused]]) { CompareInt x = a; CompareInt y = b; @@ -264,15 +249,13 @@ class DecimalComparison { if constexpr (_check_overflow) { bool overflow = false; - if constexpr (sizeof(typename PrimitiveTypeTraits::ColumnItemType) > - sizeof(CompareInt)) - overflow |= (typename PrimitiveTypeTraits::ColumnItemType(x) != a); - if constexpr (sizeof(typename PrimitiveTypeTraits::ColumnItemType) > - sizeof(CompareInt)) - overflow |= (typename PrimitiveTypeTraits::ColumnItemType(y) != b); - if constexpr (IsUnsignedV::ColumnItemType>) + if constexpr (sizeof(typename PrimitiveTypeTraits::CppType) > sizeof(CompareInt)) + overflow |= (typename PrimitiveTypeTraits::CppType(x) != a); + if constexpr (sizeof(typename PrimitiveTypeTraits::CppType) > sizeof(CompareInt)) + overflow |= (typename PrimitiveTypeTraits::CppType(y) != b); + if constexpr (IsUnsignedV::CppType>) overflow |= (x < 0); - if constexpr (IsUnsignedV::ColumnItemType>) + if constexpr (IsUnsignedV::CppType>) overflow |= (y < 0); if constexpr (scale_left) overflow |= common::mul_overflow(x, scale, x); @@ -293,10 +276,10 @@ class DecimalComparison { static void NO_INLINE vector_vector(const ArrayA& a, const ArrayB& b, PaddedPODArray& c, CompareInt scale) { size_t size = a.size(); - const typename PrimitiveTypeTraits::ColumnItemType* a_pos = a.data(); - const typename PrimitiveTypeTraits::ColumnItemType* b_pos = b.data(); + const auto* a_pos = (const typename PrimitiveTypeTraits::CppType*)a.data(); + const auto* b_pos = (const typename PrimitiveTypeTraits::CppType*)b.data(); UInt8* c_pos = c.data(); - const typename PrimitiveTypeTraits::ColumnItemType* a_end = a_pos + size; + const auto* a_end = a_pos + size; while (a_pos < a_end) { *c_pos = apply(*a_pos, *b_pos, scale); @@ -308,12 +291,12 @@ class DecimalComparison { template static void NO_INLINE vector_constant(const ArrayA& a, - typename PrimitiveTypeTraits::ColumnItemType b, + typename PrimitiveTypeTraits::CppType b, PaddedPODArray& c, CompareInt scale) { size_t size = a.size(); - const typename PrimitiveTypeTraits::ColumnItemType* a_pos = a.data(); + const auto* a_pos = (const typename PrimitiveTypeTraits::CppType*)a.data(); UInt8* c_pos = c.data(); - const typename PrimitiveTypeTraits::ColumnItemType* a_end = a_pos + size; + const auto* a_end = a_pos + size; while (a_pos < a_end) { *c_pos = apply(*a_pos, b, scale); @@ -323,13 +306,13 @@ class DecimalComparison { } template - static void NO_INLINE constant_vector(typename PrimitiveTypeTraits::ColumnItemType a, + static void NO_INLINE constant_vector(typename PrimitiveTypeTraits::CppType a, const ArrayB& b, PaddedPODArray& c, CompareInt scale) { size_t size = b.size(); - const typename PrimitiveTypeTraits::ColumnItemType* b_pos = b.data(); + const auto* b_pos = (const typename PrimitiveTypeTraits::CppType*)b.data(); UInt8* c_pos = c.data(); - const typename PrimitiveTypeTraits::ColumnItemType* b_end = b_pos + size; + const auto* b_end = b_pos + size; while (b_pos < b_end) { *c_pos = apply(a, *b_pos, scale); diff --git a/be/src/vec/core/field.cpp b/be/src/vec/core/field.cpp index 9a0004dcd46e08..fee63030b55fe8 100644 --- a/be/src/vec/core/field.cpp +++ b/be/src/vec/core/field.cpp @@ -38,23 +38,22 @@ class BufferReadable; class BufferWritable; template -bool dec_equal(typename PrimitiveTypeTraits::ColumnItemType x, - typename PrimitiveTypeTraits::ColumnItemType y, UInt32 x_scale, UInt32 y_scale) { +bool dec_equal(typename PrimitiveTypeTraits::CppType x, + typename PrimitiveTypeTraits::CppType y, UInt32 x_scale, UInt32 y_scale) { using Comparator = DecimalComparison; return Comparator::compare(x, y, x_scale, y_scale); } template -bool dec_less(typename PrimitiveTypeTraits::ColumnItemType x, - typename PrimitiveTypeTraits::ColumnItemType y, UInt32 x_scale, UInt32 y_scale) { +bool dec_less(typename PrimitiveTypeTraits::CppType x, + typename PrimitiveTypeTraits::CppType y, UInt32 x_scale, UInt32 y_scale) { using Comparator = DecimalComparison; return Comparator::compare(x, y, x_scale, y_scale); } template -bool dec_less_or_equal(typename PrimitiveTypeTraits::ColumnItemType x, - typename PrimitiveTypeTraits::ColumnItemType y, UInt32 x_scale, - UInt32 y_scale) { +bool dec_less_or_equal(typename PrimitiveTypeTraits::CppType x, + typename PrimitiveTypeTraits::CppType y, UInt32 x_scale, UInt32 y_scale) { using Comparator = DecimalComparison; return Comparator::compare(x, y, x_scale, y_scale); } @@ -75,7 +74,7 @@ bool dec_less_or_equal(typename PrimitiveTypeTraits::ColumnItemType x, DECLARE_DECIMAL_COMPARISON(Decimal32, TYPE_DECIMAL32) DECLARE_DECIMAL_COMPARISON(Decimal64, TYPE_DECIMAL64) -DECLARE_DECIMAL_COMPARISON(Decimal128V2, TYPE_DECIMALV2) +DECLARE_DECIMAL_COMPARISON(DecimalV2Value, TYPE_DECIMALV2) DECLARE_DECIMAL_COMPARISON(Decimal256, TYPE_DECIMAL256) template <> @@ -92,26 +91,26 @@ bool decimal_less_or_equal(Decimal128V3 x, Decimal128V3 y, UInt32 xs, UInt32 ys) } template -void Field::create_concrete(typename PrimitiveTypeTraits::NearestFieldType&& x) { +void Field::create_concrete(typename PrimitiveTypeTraits::CppType&& x) { // In both Field and PODArray, small types may be stored as wider types, // e.g. char is stored as UInt64. Field can return this extended value // with get(). To avoid uninitialized results from get(), // we must initialize the entire wide stored type, and not just the // nominal type. - using StorageType = typename PrimitiveTypeTraits::NearestFieldType; + using StorageType = typename PrimitiveTypeTraits::CppType; new (&storage) StorageType(std::move(x)); type = Type; DCHECK_NE(type, PrimitiveType::INVALID_TYPE); } template -void Field::create_concrete(const typename PrimitiveTypeTraits::NearestFieldType& x) { +void Field::create_concrete(const typename PrimitiveTypeTraits::CppType& x) { // In both Field and PODArray, small types may be stored as wider types, // e.g. char is stored as UInt64. Field can return this extended value // with get(). To avoid uninitialized results from get(), // we must initialize the entire wide stored type, and not just the // nominal type. - using StorageType = typename PrimitiveTypeTraits::NearestFieldType; + using StorageType = typename PrimitiveTypeTraits::CppType; new (&storage) StorageType(x); type = Type; DCHECK_NE(type, PrimitiveType::INVALID_TYPE); @@ -120,265 +119,311 @@ void Field::create_concrete(const typename PrimitiveTypeTraits::NearestFie void Field::create(Field&& field) { switch (field.type) { case PrimitiveType::TYPE_NULL: - create_concrete(std::move( - field.template get::NearestFieldType>())); + create_concrete( + std::move(field.template get::CppType>())); return; case PrimitiveType::TYPE_DATETIMEV2: - create_concrete( - std::move(field.template get< - typename PrimitiveTypeTraits::NearestFieldType>())); + create_concrete(std::move( + field.template get::CppType>())); return; case PrimitiveType::TYPE_DATEV2: create_concrete(std::move( - field.template get::NearestFieldType>())); + field.template get::CppType>())); return; case PrimitiveType::TYPE_TIMESTAMPTZ: - create_concrete( - std::move(field.template get< - typename PrimitiveTypeTraits::NearestFieldType>())); + create_concrete(std::move( + field.template get::CppType>())); return; case PrimitiveType::TYPE_DATETIME: + create_concrete(std::move( + field.template get::CppType>())); + return; case PrimitiveType::TYPE_DATE: + create_concrete( + std::move(field.template get::CppType>())); + return; case PrimitiveType::TYPE_BOOLEAN: + create_concrete(std::move( + field.template get::CppType>())); + return; case PrimitiveType::TYPE_TINYINT: + create_concrete(std::move( + field.template get::CppType>())); + return; case PrimitiveType::TYPE_SMALLINT: + create_concrete(std::move( + field.template get::CppType>())); + return; case PrimitiveType::TYPE_INT: + create_concrete( + std::move(field.template get::CppType>())); + return; case PrimitiveType::TYPE_BIGINT: create_concrete(std::move( - field.template get::NearestFieldType>())); + field.template get::CppType>())); return; case PrimitiveType::TYPE_LARGEINT: - create_concrete( - std::move(field.template get< - typename PrimitiveTypeTraits::NearestFieldType>())); + create_concrete(std::move( + field.template get::CppType>())); return; case PrimitiveType::TYPE_IPV4: - create_concrete(std::move( - field.template get::NearestFieldType>())); + create_concrete( + std::move(field.template get::CppType>())); return; case PrimitiveType::TYPE_IPV6: - create_concrete(std::move( - field.template get::NearestFieldType>())); + create_concrete( + std::move(field.template get::CppType>())); return; case PrimitiveType::TYPE_FLOAT: + create_concrete( + std::move(field.template get::CppType>())); + return; case PrimitiveType::TYPE_TIMEV2: + create_concrete(std::move( + field.template get::CppType>())); + return; case PrimitiveType::TYPE_DOUBLE: create_concrete(std::move( - field.template get::NearestFieldType>())); + field.template get::CppType>())); return; case PrimitiveType::TYPE_STRING: create_concrete(std::move( - field.template get::NearestFieldType>())); + field.template get::CppType>())); return; case PrimitiveType::TYPE_CHAR: - create_concrete(std::move( - field.template get::NearestFieldType>())); + create_concrete( + std::move(field.template get::CppType>())); return; case PrimitiveType::TYPE_VARCHAR: - create_concrete( - std::move(field.template get< - typename PrimitiveTypeTraits::NearestFieldType>())); + create_concrete(std::move( + field.template get::CppType>())); return; case PrimitiveType::TYPE_JSONB: - create_concrete(std::move( - field.template get::NearestFieldType>())); + create_concrete( + std::move(field.template get::CppType>())); return; case PrimitiveType::TYPE_ARRAY: - create_concrete(std::move( - field.template get::NearestFieldType>())); + create_concrete( + std::move(field.template get::CppType>())); return; case PrimitiveType::TYPE_STRUCT: create_concrete(std::move( - field.template get::NearestFieldType>())); + field.template get::CppType>())); return; case PrimitiveType::TYPE_MAP: - create_concrete(std::move( - field.template get::NearestFieldType>())); + create_concrete( + std::move(field.template get::CppType>())); return; case PrimitiveType::TYPE_DECIMAL32: - create_concrete( - std::move(field.template get< - typename PrimitiveTypeTraits::NearestFieldType>())); + create_concrete(std::move( + field.template get::CppType>())); return; case PrimitiveType::TYPE_DECIMAL64: - create_concrete( - std::move(field.template get< - typename PrimitiveTypeTraits::NearestFieldType>())); + create_concrete(std::move( + field.template get::CppType>())); return; case PrimitiveType::TYPE_DECIMALV2: - create_concrete( - std::move(field.template get< - typename PrimitiveTypeTraits::NearestFieldType>())); + create_concrete(std::move( + field.template get::CppType>())); return; case PrimitiveType::TYPE_DECIMAL128I: - create_concrete( - std::move(field.template get< - typename PrimitiveTypeTraits::NearestFieldType>())); + create_concrete(std::move( + field.template get::CppType>())); return; case PrimitiveType::TYPE_DECIMAL256: - create_concrete( - std::move(field.template get< - typename PrimitiveTypeTraits::NearestFieldType>())); + create_concrete(std::move( + field.template get::CppType>())); return; case PrimitiveType::TYPE_VARIANT: - create_concrete( - std::move(field.template get< - typename PrimitiveTypeTraits::NearestFieldType>())); + create_concrete(std::move( + field.template get::CppType>())); return; case PrimitiveType::TYPE_BITMAP: create_concrete(std::move( - field.template get::NearestFieldType>())); + field.template get::CppType>())); return; case PrimitiveType::TYPE_HLL: - create_concrete(std::move( - field.template get::NearestFieldType>())); + create_concrete( + std::move(field.template get::CppType>())); return; case PrimitiveType::TYPE_QUANTILE_STATE: - create_concrete( - std::move(field.template get< - typename PrimitiveTypeTraits::NearestFieldType>())); + create_concrete(std::move( + field.template get::CppType>())); return; case PrimitiveType::TYPE_VARBINARY: - create_concrete( - std::move(field.template get< - typename PrimitiveTypeTraits::NearestFieldType>())); + create_concrete(std::move( + field.template get::CppType>())); return; default: throw Exception(Status::FatalError("type not supported, type={}", field.get_type_name())); } } +Field::Field(const Field& rhs) { + create(rhs); +} + +Field::Field(Field&& rhs) { + create(std::move(rhs)); +} + +Field& Field::operator=(const Field& rhs) { + if (this != &rhs) { + if (type != rhs.type) { + destroy(); + create(rhs); + } else { + assign(rhs); /// This assigns string or vector without deallocation of existing buffer. + } + } + return *this; +} + void Field::create(const Field& field) { switch (field.type) { case PrimitiveType::TYPE_NULL: create_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_DATETIMEV2: create_concrete( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_DATEV2: create_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_TIMESTAMPTZ: create_concrete( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_DATETIME: + create_concrete( + field.template get::CppType>()); + return; case PrimitiveType::TYPE_DATE: + create_concrete( + field.template get::CppType>()); + return; case PrimitiveType::TYPE_BOOLEAN: + create_concrete( + field.template get::CppType>()); + return; case PrimitiveType::TYPE_TINYINT: + create_concrete( + field.template get::CppType>()); + return; case PrimitiveType::TYPE_SMALLINT: + create_concrete( + field.template get::CppType>()); + return; case PrimitiveType::TYPE_INT: + create_concrete( + field.template get::CppType>()); + return; case PrimitiveType::TYPE_BIGINT: create_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_LARGEINT: create_concrete( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_IPV4: create_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_IPV6: create_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_FLOAT: + create_concrete( + field.template get::CppType>()); + return; case PrimitiveType::TYPE_TIMEV2: + create_concrete( + field.template get::CppType>()); + return; case PrimitiveType::TYPE_DOUBLE: create_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_STRING: create_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_CHAR: create_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_VARCHAR: create_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_JSONB: create_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_ARRAY: create_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_STRUCT: create_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_MAP: create_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_DECIMAL32: create_concrete( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_DECIMAL64: create_concrete( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_DECIMALV2: create_concrete( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_DECIMAL128I: create_concrete( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_DECIMAL256: create_concrete( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_VARIANT: create_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_BITMAP: create_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_HLL: create_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_QUANTILE_STATE: create_concrete( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_UINT32: create_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_UINT64: create_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_VARBINARY: create_concrete( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); return; default: throw Exception(Status::FatalError("type not supported, type={}", field.get_type_name())); @@ -388,40 +433,40 @@ void Field::create(const Field& field) { void Field::destroy() { switch (type) { case PrimitiveType::TYPE_STRING: - destroy::NearestFieldType>(); + destroy::CppType>(); break; case PrimitiveType::TYPE_CHAR: - destroy::NearestFieldType>(); + destroy::CppType>(); break; case PrimitiveType::TYPE_VARCHAR: - destroy::NearestFieldType>(); + destroy::CppType>(); break; case PrimitiveType::TYPE_JSONB: - destroy::NearestFieldType>(); + destroy::CppType>(); break; case PrimitiveType::TYPE_ARRAY: - destroy::NearestFieldType>(); + destroy::CppType>(); break; case PrimitiveType::TYPE_STRUCT: - destroy::NearestFieldType>(); + destroy::CppType>(); break; case PrimitiveType::TYPE_MAP: - destroy::NearestFieldType>(); + destroy::CppType>(); break; case PrimitiveType::TYPE_VARIANT: - destroy::NearestFieldType>(); + destroy::CppType>(); break; case PrimitiveType::TYPE_BITMAP: - destroy::NearestFieldType>(); + destroy::CppType>(); break; case PrimitiveType::TYPE_HLL: - destroy::NearestFieldType>(); + destroy::CppType>(); break; case PrimitiveType::TYPE_QUANTILE_STATE: - destroy::NearestFieldType>(); + destroy::CppType>(); break; case PrimitiveType::TYPE_VARBINARY: - destroy::NearestFieldType>(); + destroy::CppType>(); break; default: break; @@ -434,133 +479,140 @@ void Field::destroy() { void Field::assign(Field&& field) { switch (field.type) { case PrimitiveType::TYPE_NULL: - assign_concrete(std::move( - field.template get::NearestFieldType>())); + assign_concrete( + std::move(field.template get::CppType>())); return; case PrimitiveType::TYPE_DATETIMEV2: - assign_concrete( - std::move(field.template get< - typename PrimitiveTypeTraits::NearestFieldType>())); + assign_concrete(std::move( + field.template get::CppType>())); return; case PrimitiveType::TYPE_DATETIME: - assign_concrete( - std::move(field.template get< - typename PrimitiveTypeTraits::NearestFieldType>())); + assign_concrete(std::move( + field.template get::CppType>())); return; case PrimitiveType::TYPE_DATE: - assign_concrete(std::move( - field.template get::NearestFieldType>())); + assign_concrete( + std::move(field.template get::CppType>())); return; case PrimitiveType::TYPE_DATEV2: assign_concrete(std::move( - field.template get::NearestFieldType>())); + field.template get::CppType>())); return; case PrimitiveType::TYPE_TIMESTAMPTZ: - assign_concrete( - std::move(field.template get< - typename PrimitiveTypeTraits::NearestFieldType>())); + assign_concrete(std::move( + field.template get::CppType>())); return; case PrimitiveType::TYPE_BOOLEAN: + assign_concrete(std::move( + field.template get::CppType>())); + return; case PrimitiveType::TYPE_TINYINT: + assign_concrete(std::move( + field.template get::CppType>())); + return; case PrimitiveType::TYPE_SMALLINT: + assign_concrete(std::move( + field.template get::CppType>())); + return; case PrimitiveType::TYPE_INT: + assign_concrete( + std::move(field.template get::CppType>())); + return; case PrimitiveType::TYPE_BIGINT: assign_concrete(std::move( - field.template get::NearestFieldType>())); + field.template get::CppType>())); return; case PrimitiveType::TYPE_LARGEINT: - assign_concrete( - std::move(field.template get< - typename PrimitiveTypeTraits::NearestFieldType>())); + assign_concrete(std::move( + field.template get::CppType>())); return; case PrimitiveType::TYPE_IPV4: - assign_concrete(std::move( - field.template get::NearestFieldType>())); + assign_concrete( + std::move(field.template get::CppType>())); return; case PrimitiveType::TYPE_IPV6: - assign_concrete(std::move( - field.template get::NearestFieldType>())); + assign_concrete( + std::move(field.template get::CppType>())); + return; + case PrimitiveType::TYPE_FLOAT: + assign_concrete( + std::move(field.template get::CppType>())); + return; + case PrimitiveType::TYPE_TIMEV2: + assign_concrete(std::move( + field.template get::CppType>())); return; case PrimitiveType::TYPE_DOUBLE: assign_concrete(std::move( - field.template get::NearestFieldType>())); + field.template get::CppType>())); return; case PrimitiveType::TYPE_STRING: assign_concrete(std::move( - field.template get::NearestFieldType>())); + field.template get::CppType>())); return; case PrimitiveType::TYPE_CHAR: - assign_concrete(std::move( - field.template get::NearestFieldType>())); + assign_concrete( + std::move(field.template get::CppType>())); return; case PrimitiveType::TYPE_VARCHAR: - assign_concrete( - std::move(field.template get< - typename PrimitiveTypeTraits::NearestFieldType>())); + assign_concrete(std::move( + field.template get::CppType>())); return; case PrimitiveType::TYPE_JSONB: - assign_concrete(std::move( - field.template get::NearestFieldType>())); + assign_concrete( + std::move(field.template get::CppType>())); return; case PrimitiveType::TYPE_ARRAY: - assign_concrete(std::move( - field.template get::NearestFieldType>())); + assign_concrete( + std::move(field.template get::CppType>())); return; case PrimitiveType::TYPE_STRUCT: assign_concrete(std::move( - field.template get::NearestFieldType>())); + field.template get::CppType>())); return; case PrimitiveType::TYPE_MAP: - assign_concrete(std::move( - field.template get::NearestFieldType>())); + assign_concrete( + std::move(field.template get::CppType>())); return; case PrimitiveType::TYPE_DECIMAL32: - assign_concrete( - std::move(field.template get< - typename PrimitiveTypeTraits::NearestFieldType>())); + assign_concrete(std::move( + field.template get::CppType>())); return; case PrimitiveType::TYPE_DECIMAL64: - assign_concrete( - std::move(field.template get< - typename PrimitiveTypeTraits::NearestFieldType>())); + assign_concrete(std::move( + field.template get::CppType>())); return; case PrimitiveType::TYPE_DECIMALV2: - assign_concrete( - std::move(field.template get< - typename PrimitiveTypeTraits::NearestFieldType>())); + assign_concrete(std::move( + field.template get::CppType>())); return; case PrimitiveType::TYPE_DECIMAL128I: - assign_concrete( - std::move(field.template get< - typename PrimitiveTypeTraits::NearestFieldType>())); + assign_concrete(std::move( + field.template get::CppType>())); return; case PrimitiveType::TYPE_DECIMAL256: - assign_concrete( - std::move(field.template get< - typename PrimitiveTypeTraits::NearestFieldType>())); + assign_concrete(std::move( + field.template get::CppType>())); return; case PrimitiveType::TYPE_VARIANT: - assign_concrete( - std::move(field.template get< - typename PrimitiveTypeTraits::NearestFieldType>())); + assign_concrete(std::move( + field.template get::CppType>())); return; case PrimitiveType::TYPE_BITMAP: assign_concrete(std::move( - field.template get::NearestFieldType>())); + field.template get::CppType>())); return; case PrimitiveType::TYPE_HLL: - assign_concrete(std::move( - field.template get::NearestFieldType>())); + assign_concrete( + std::move(field.template get::CppType>())); return; case PrimitiveType::TYPE_QUANTILE_STATE: - assign_concrete( - std::move(field.template get< - typename PrimitiveTypeTraits::NearestFieldType>())); + assign_concrete(std::move( + field.template get::CppType>())); return; case PrimitiveType::TYPE_VARBINARY: - assign_concrete( - std::move(field.template get< - typename PrimitiveTypeTraits::NearestFieldType>())); + assign_concrete(std::move( + field.template get::CppType>())); return; default: throw Exception(Status::FatalError("type not supported, type={}", field.get_type_name())); @@ -571,138 +623,147 @@ void Field::assign(const Field& field) { switch (field.type) { case PrimitiveType::TYPE_NULL: assign_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_DATETIMEV2: assign_concrete( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_DATETIME: assign_concrete( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_DATE: assign_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_DATEV2: assign_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_TIMESTAMPTZ: assign_concrete( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_BOOLEAN: + assign_concrete( + field.template get::CppType>()); + return; case PrimitiveType::TYPE_TINYINT: + assign_concrete( + field.template get::CppType>()); + return; case PrimitiveType::TYPE_SMALLINT: + assign_concrete( + field.template get::CppType>()); + return; case PrimitiveType::TYPE_INT: + assign_concrete( + field.template get::CppType>()); + return; case PrimitiveType::TYPE_BIGINT: assign_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_LARGEINT: assign_concrete( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_IPV4: assign_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_IPV6: assign_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); + return; + case PrimitiveType::TYPE_FLOAT: + assign_concrete( + field.template get::CppType>()); + return; + case PrimitiveType::TYPE_TIMEV2: + assign_concrete( + field.template get::CppType>()); return; case PrimitiveType::TYPE_DOUBLE: assign_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_STRING: assign_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_CHAR: assign_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_VARCHAR: assign_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_JSONB: assign_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_ARRAY: assign_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_STRUCT: assign_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_MAP: assign_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_DECIMAL32: assign_concrete( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_DECIMAL64: assign_concrete( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_DECIMALV2: assign_concrete( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_DECIMAL128I: assign_concrete( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_DECIMAL256: assign_concrete( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_VARIANT: assign_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_BITMAP: assign_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_HLL: assign_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_QUANTILE_STATE: assign_concrete( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_UINT32: assign_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_UINT64: assign_concrete( - field.template get::NearestFieldType>()); + field.template get::CppType>()); return; case PrimitiveType::TYPE_VARBINARY: assign_concrete( - field.template get< - typename PrimitiveTypeTraits::NearestFieldType>()); + field.template get::CppType>()); return; default: throw Exception(Status::FatalError("type not supported, type={}", field.get_type_name())); @@ -711,27 +772,25 @@ void Field::assign(const Field& field) { /// Assuming same types. template -void Field::assign_concrete(typename PrimitiveTypeTraits::NearestFieldType&& x) { - auto* MAY_ALIAS ptr = - reinterpret_cast::NearestFieldType*>(&storage); - *ptr = std::forward::NearestFieldType>(x); +void Field::assign_concrete(typename PrimitiveTypeTraits::CppType&& x) { + auto* MAY_ALIAS ptr = reinterpret_cast::CppType*>(&storage); + *ptr = std::forward::CppType>(x); } template -void Field::assign_concrete(const typename PrimitiveTypeTraits::NearestFieldType& x) { - auto* MAY_ALIAS ptr = - reinterpret_cast::NearestFieldType*>(&storage); - *ptr = std::forward::NearestFieldType>(x); +void Field::assign_concrete(const typename PrimitiveTypeTraits::CppType& x) { + auto* MAY_ALIAS ptr = reinterpret_cast::CppType*>(&storage); + *ptr = std::forward::CppType>(x); } std::string Field::get_type_name() const { return type_to_string(type); } -#define MATCH_PRIMITIVE_TYPE(primite_type) \ - if (type == primite_type) { \ - const auto& v = get::NearestFieldType>(); \ - return std::string_view(reinterpret_cast(&v), sizeof(v)); \ +#define MATCH_PRIMITIVE_TYPE(primite_type) \ + if (type == primite_type) { \ + const auto& v = get::CppType>(); \ + return std::string_view(reinterpret_cast(&v), sizeof(v)); \ } std::string_view Field::as_string_view() const { @@ -792,16 +851,16 @@ std::string_view Field::as_string_view() const { #undef MATCH_PRIMITIVE_TYPE -#define MATCH_NUMBER_TYPE(primite_type) \ - if (type == primite_type) { \ - const auto& v = get::NearestFieldType>(); \ - return CastToString::from_number(v); \ +#define MATCH_NUMBER_TYPE(primite_type) \ + if (type == primite_type) { \ + const auto& v = get::CppType>(); \ + return CastToString::from_number(v); \ } -#define MATCH_DECIMAL_TYPE(primite_type) \ - if (type == primite_type) { \ - const auto& v = get::NearestFieldType>(); \ - return CastToString::from_decimal(v.get_value(), v.get_scale()); \ +#define MATCH_DECIMAL_TYPE(primite_type) \ + if (type == primite_type) { \ + const auto& v = get::CppType>(); \ + return CastToString::from_decimal(v.get_value(), v.get_scale()); \ } std::string Field::to_string() const { @@ -818,17 +877,17 @@ std::string Field::to_string() const { if (type == TYPE_DATE || type == TYPE_DATETIME) { const auto& v = binary_cast( - get::NearestFieldType>()); + get::CppType>()); return CastToString::from_date_or_datetime(v); } if (type == TYPE_DATEV2) { const auto& v = binary_cast>( - (uint32_t)get::NearestFieldType>()); + (uint32_t)get::CppType>()); return CastToString::from_datev2(v); } if (type == TYPE_DATETIMEV2) { const auto& v = binary_cast>( - (uint64_t)get::NearestFieldType>()); + (uint64_t)get::CppType>()); return CastToString::from_datetimev2(v); } MATCH_NUMBER_TYPE(TYPE_BOOLEAN); @@ -846,151 +905,152 @@ std::string Field::to_string() const { #undef MATCH_NUMBER_TYPE #undef MATCH_DECIMAL_TYPE -#define DECLARE_FUNCTION(FUNC_NAME) \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); \ - template void Field::FUNC_NAME( \ - const typename PrimitiveTypeTraits::NearestFieldType& rhs); \ - template void Field::FUNC_NAME( \ - typename PrimitiveTypeTraits::NearestFieldType && rhs); +#define DECLARE_FUNCTION(FUNC_NAME) \ + template void Field::FUNC_NAME(typename PrimitiveTypeTraits::CppType && \ + rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME(typename PrimitiveTypeTraits::CppType && \ + rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME(typename PrimitiveTypeTraits::CppType && \ + rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME(typename PrimitiveTypeTraits::CppType && \ + rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME(typename PrimitiveTypeTraits::CppType && \ + rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME(typename PrimitiveTypeTraits::CppType && \ + rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME(typename PrimitiveTypeTraits::CppType && \ + rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME(typename PrimitiveTypeTraits::CppType && \ + rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ + template void Field::FUNC_NAME( \ + typename PrimitiveTypeTraits::CppType && rhs); + DECLARE_FUNCTION(create_concrete) DECLARE_FUNCTION(assign_concrete) diff --git a/be/src/vec/core/field.h b/be/src/vec/core/field.h index d0045cd73d8f6d..f993067d3e2f1b 100644 --- a/be/src/vec/core/field.h +++ b/be/src/vec/core/field.h @@ -55,14 +55,6 @@ struct PackedInt128; namespace doris::vectorized { -template -struct NearestFieldTypeImpl { - using Type = T; // for HLL or some origin types. see def. of storage -}; - -template -using NearestFieldType = typename NearestFieldTypeImpl::Type; - class Field; using FieldVector = std::vector; @@ -183,69 +175,6 @@ bool decimal_less(T x, T y, UInt32 x_scale, UInt32 y_scale); template bool decimal_less_or_equal(T x, T y, UInt32 x_scale, UInt32 y_scale); -template -class DecimalField { -public: - DecimalField(T value, UInt32 scale_) : dec(value), scale(scale_) {} - // Store the underlying data ignoring scale. - DecimalField(T value) : dec(value), scale(0) {} - - operator T() const { return dec; } - T get_value() const { return dec; } - UInt32 get_scale() const { return scale; } - - template - bool operator<(const DecimalField& r) const { - using MaxType = std::conditional_t<(sizeof(T) > sizeof(U)), T, U>; - return decimal_less(dec, r.get_value(), scale, r.get_scale()); - } - - template - bool operator<=(const DecimalField& r) const { - using MaxType = std::conditional_t<(sizeof(T) > sizeof(U)), T, U>; - return decimal_less_or_equal(dec, r.get_value(), scale, r.get_scale()); - } - - template - bool operator==(const DecimalField& r) const { - using MaxType = std::conditional_t<(sizeof(T) > sizeof(U)), T, U>; - return decimal_equal(dec, r.get_value(), scale, r.get_scale()); - } - - template - bool operator>(const DecimalField& r) const { - return r < *this; - } - template - bool operator>=(const DecimalField& r) const { - return r <= *this; - } - template - bool operator!=(const DecimalField& r) const { - return !(*this == r); - } - - const DecimalField& operator+=(const DecimalField& r) { - if (scale != r.get_scale()) { - throw Exception(Status::FatalError("Add different decimal fields")); - } - dec += r.get_value(); - return *this; - } - - const DecimalField& operator-=(const DecimalField& r) { - if (scale != r.get_scale()) { - throw Exception(Status::FatalError("Sub different decimal fields")); - } - dec -= r.get_value(); - return *this; - } - -private: - T dec; - UInt32 scale; -}; - // StringViewField wraps a StringView and provides deep copy semantics. // Since StringView is a non-owning view (only contains pointer and length), // we need to store the actual data in a String to ensure the Field owns the data. @@ -343,37 +272,26 @@ class Field { // set Types::Null explictly and avoid other types Field(PrimitiveType w) : type(w) {} template - static Field create_field(const typename PrimitiveTypeTraits::NearestFieldType& data) { - auto f = Field(PrimitiveTypeTraits::NearestPrimitiveType); - f.template create_concrete::NearestPrimitiveType>(data); + static Field create_field(const typename PrimitiveTypeTraits::CppType& data) { + auto f = Field(T); + f.template create_concrete(data); return f; } template - static Field create_field(typename PrimitiveTypeTraits::NearestFieldType&& data) { - auto f = Field(PrimitiveTypeTraits::NearestPrimitiveType); - f.template create_concrete::NearestPrimitiveType>( - std::forward::NearestFieldType>(data)); + static Field create_field(typename PrimitiveTypeTraits::CppType&& data) { + auto f = Field(T); + f.template create_concrete(std::move(data)); return f; } /** Despite the presence of a template constructor, this constructor is still needed, * since, in its absence, the compiler will still generate the default constructor. */ - Field(const Field& rhs) { create(rhs); } + Field(const Field& rhs); - Field(Field&& rhs) { create(std::move(rhs)); } + Field(Field&& rhs); - Field& operator=(const Field& rhs) { - if (this != &rhs) { - if (type != rhs.type) { - destroy(); - create(rhs); - } else { - assign(rhs); /// This assigns string or vector without deallocation of existing buffer. - } - } - return *this; - } + Field& operator=(const Field& rhs); bool is_complex_field() const { return type == PrimitiveType::TYPE_ARRAY || type == PrimitiveType::TYPE_MAP || @@ -451,12 +369,24 @@ class Field { case PrimitiveType::TYPE_DATETIME: case PrimitiveType::TYPE_BIGINT: return get() <=> rhs.get(); + case PrimitiveType::TYPE_BOOLEAN: + return get() <=> rhs.get(); + case PrimitiveType::TYPE_TINYINT: + return get() <=> rhs.get(); + case PrimitiveType::TYPE_SMALLINT: + return get() <=> rhs.get(); + case PrimitiveType::TYPE_INT: + return get() <=> rhs.get(); case PrimitiveType::TYPE_LARGEINT: return get() <=> rhs.get(); case PrimitiveType::TYPE_IPV6: return get() <=> rhs.get(); case PrimitiveType::TYPE_IPV4: return get() <=> rhs.get(); + case PrimitiveType::TYPE_FLOAT: + return get() < rhs.get() ? std::strong_ordering::less + : get() == rhs.get() ? std::strong_ordering::equal + : std::strong_ordering::greater; case PrimitiveType::TYPE_TIMEV2: case PrimitiveType::TYPE_DOUBLE: return get() < rhs.get() ? std::strong_ordering::less @@ -479,113 +409,31 @@ class Field { case PrimitiveType::TYPE_DECIMAL256: return get() <=> rhs.get(); default: - throw Exception(Status::FatalError("lhs type not equal with rhs, lhs={}, rhs={}", - get_type_name(), rhs.get_type_name())); - } - } - - template /// Field template parameter may be const or non-const Field. - static void dispatch(F&& f, Field& field) { - switch (field.type) { - case PrimitiveType::TYPE_NULL: - f(field.template get()); - return; - case PrimitiveType::TYPE_DATETIMEV2: - case PrimitiveType::TYPE_TIMESTAMPTZ: - f(field.template get()); - return; - case PrimitiveType::TYPE_DATETIME: - case PrimitiveType::TYPE_DATE: - case PrimitiveType::TYPE_BIGINT: - f(field.template get()); - return; - case PrimitiveType::TYPE_LARGEINT: - f(field.template get()); - return; - case PrimitiveType::TYPE_IPV6: - f(field.template get()); - return; - case PrimitiveType::TYPE_TIMEV2: - case PrimitiveType::TYPE_DOUBLE: - f(field.template get()); - return; - case PrimitiveType::TYPE_STRING: - case PrimitiveType::TYPE_CHAR: - case PrimitiveType::TYPE_VARCHAR: - f(field.template get()); - return; - case PrimitiveType::TYPE_VARBINARY: - f(field.template get()); - return; - case PrimitiveType::TYPE_JSONB: - f(field.template get()); - return; - case PrimitiveType::TYPE_ARRAY: - f(field.template get()); - return; - case PrimitiveType::TYPE_STRUCT: - f(field.template get()); - return; - case PrimitiveType::TYPE_MAP: - f(field.template get()); - return; - case PrimitiveType::TYPE_DECIMAL32: - f(field.template get>()); - return; - case PrimitiveType::TYPE_DECIMAL64: - f(field.template get>()); - return; - case PrimitiveType::TYPE_DECIMALV2: - f(field.template get>()); - return; - case PrimitiveType::TYPE_DECIMAL128I: - f(field.template get>()); - return; - case PrimitiveType::TYPE_DECIMAL256: - f(field.template get>()); - return; - case PrimitiveType::TYPE_VARIANT: - f(field.template get()); - return; - case PrimitiveType::TYPE_BITMAP: - f(field.template get()); - return; - case PrimitiveType::TYPE_HLL: - f(field.template get()); - return; - case PrimitiveType::TYPE_QUANTILE_STATE: - f(field.template get()); - return; - default: - throw Exception( - Status::FatalError("type not supported, type={}", field.get_type_name())); + throw Exception(Status::FatalError("Unsupported type: {}", get_type_name())); } } std::string_view as_string_view() const; - std::string to_string() const; private: std::aligned_union_t, DecimalField, - DecimalField, DecimalField, - DecimalField, BitmapValue, HyperLogLog, QuantileState> + Int128, IPv6, Float64, String, JsonbField, StringView, Array, Tuple, Map, + VariantMap, Decimal32, Decimal64, DecimalV2Value, Decimal128V3, Decimal256, + BitmapValue, HyperLogLog, QuantileState> storage; PrimitiveType type; /// Assuming there was no allocated state or it was deallocated (see destroy). template - void create_concrete(typename PrimitiveTypeTraits::NearestFieldType&& x); + void create_concrete(typename PrimitiveTypeTraits::CppType&& x); template - void create_concrete(const typename PrimitiveTypeTraits::NearestFieldType& x); + void create_concrete(const typename PrimitiveTypeTraits::CppType& x); /// Assuming same types. template - void assign_concrete(typename PrimitiveTypeTraits::NearestFieldType&& x); + void assign_concrete(typename PrimitiveTypeTraits::CppType&& x); template - void assign_concrete(const typename PrimitiveTypeTraits::NearestFieldType& x); + void assign_concrete(const typename PrimitiveTypeTraits::CppType& x); void create(const Field& field); void create(Field&& field); @@ -621,127 +469,6 @@ T get(Field& field) { return field.template get(); } -/// char may be signed or unsigned, and behave identically to signed char or unsigned char, -/// but they are always three different types. -/// signedness of char is different in Linux on x86 and Linux on ARM. -template <> -struct NearestFieldTypeImpl { - using Type = std::conditional_t, Int64, UInt64>; -}; -template <> -struct NearestFieldTypeImpl { - using Type = Int64; -}; -template <> -struct NearestFieldTypeImpl { - using Type = Int64; -}; - -template <> -struct NearestFieldTypeImpl { - using Type = UInt64; -}; -template <> -struct NearestFieldTypeImpl { - using Type = UInt64; -}; - -template <> -struct NearestFieldTypeImpl { - using Type = Int64; -}; -template <> -struct NearestFieldTypeImpl { - using Type = Int64; -}; - -/// long and long long are always different types that may behave identically or not. -/// This is different on Linux and Mac. -template <> -struct NearestFieldTypeImpl { - using Type = Int64; -}; - -template <> -struct NearestFieldTypeImpl { - using Type = DecimalField; -}; -template <> -struct NearestFieldTypeImpl { - using Type = DecimalField; -}; -template <> -struct NearestFieldTypeImpl { - using Type = DecimalField; -}; -template <> -struct NearestFieldTypeImpl { - using Type = DecimalField; -}; -template <> -struct NearestFieldTypeImpl { - using Type = DecimalField; -}; -template <> -struct NearestFieldTypeImpl> { - using Type = DecimalField; -}; -template <> -struct NearestFieldTypeImpl> { - using Type = DecimalField; -}; -template <> -struct NearestFieldTypeImpl> { - using Type = DecimalField; -}; -template <> -struct NearestFieldTypeImpl> { - using Type = DecimalField; -}; -template <> -struct NearestFieldTypeImpl> { - using Type = DecimalField; -}; -template <> -struct NearestFieldTypeImpl { - using Type = Float64; -}; -template <> -struct NearestFieldTypeImpl { - using Type = String; -}; -template <> -struct NearestFieldTypeImpl { - using Type = UInt64; -}; - -template <> -struct NearestFieldTypeImpl { - using Type = String; -}; - -template <> -struct NearestFieldTypeImpl { - using Type = Int128; -}; - -template <> -struct NearestFieldTypeImpl { - using Type = StringViewField; -}; - -template -decltype(auto) cast_to_nearest_field_type(T&& x) { - using U = NearestFieldType>; - if constexpr (std::is_same_v>) { - return U(x.value); - } else if constexpr (std::is_same_v, U>) { - return std::forward(x); - } else { - return U(x); - } -} - } // namespace doris::vectorized template <> diff --git a/be/src/vec/data_types/convert_field_to_type.cpp b/be/src/vec/data_types/convert_field_to_type.cpp index 28947232d5bd38..dd8e27243eb9ac 100644 --- a/be/src/vec/data_types/convert_field_to_type.cpp +++ b/be/src/vec/data_types/convert_field_to_type.cpp @@ -49,6 +49,106 @@ namespace doris::vectorized { #include "common/compile_check_begin.h" + +template /// Field template parameter may be const or non-const Field. +void dispatch(F&& f, const Field& field) { + switch (field.get_type()) { + case PrimitiveType::TYPE_NULL: + f(field.template get()); + return; + case PrimitiveType::TYPE_DATETIMEV2: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_TIMESTAMPTZ: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_DATETIME: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_DATE: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_BOOLEAN: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_TINYINT: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_SMALLINT: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_INT: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_BIGINT: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_LARGEINT: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_IPV6: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_TIMEV2: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_FLOAT: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_DOUBLE: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_STRING: + case PrimitiveType::TYPE_CHAR: + case PrimitiveType::TYPE_VARCHAR: + f(field.template get()); + return; + case PrimitiveType::TYPE_VARBINARY: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_JSONB: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_ARRAY: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_STRUCT: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_MAP: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_DECIMAL32: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_DECIMAL64: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_DECIMALV2: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_DECIMAL128I: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_DECIMAL256: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_VARIANT: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_BITMAP: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_HLL: + f(field.template get::CppType>()); + return; + case PrimitiveType::TYPE_QUANTILE_STATE: + f(field.template get::CppType>()); + return; + default: + throw Exception(Status::FatalError("type not supported, type={}", field.get_type_name())); + } +} /** Checking for a `Field from` of `From` type falls to a range of values of type `To`. * `From` and `To` - numeric types. They can be floating-point types. * `From` is one of UInt64, Int64, Float64, @@ -62,10 +162,10 @@ namespace doris::vectorized { class FieldVisitorToStringSimple : public StaticVisitor { public: template - String apply(const typename PrimitiveTypeTraits::NearestFieldType& x) const { + String apply(const typename PrimitiveTypeTraits::CppType& x) const { if constexpr (T == TYPE_NULL) { return "NULL"; - } else if constexpr (T == TYPE_BIGINT || T == TYPE_DOUBLE) { + } else if constexpr (is_int_or_bool(T) && T != TYPE_LARGEINT) { return std::to_string(x); } else if constexpr (is_string_type(T)) { return x; @@ -78,7 +178,12 @@ class FieldVisitorToStringSimple : public StaticVisitor { class FieldVisitorToJsonb : public StaticVisitor { public: void operator()(const Null& x, JsonbWriter* writer) const { writer->writeNull(); } - void operator()(const UInt64& x, JsonbWriter* writer) const { writer->writeInt64(x); } + void operator()(const DateV2Value& x, JsonbWriter* writer) const { + writer->writeInt64(*(UInt64*)&x); + } + void operator()(const TimestampTzValue& x, JsonbWriter* writer) const { + writer->writeInt64(*(UInt64*)&x); + } void operator()(const UInt128& x, JsonbWriter* writer) const { writer->writeInt128(int128_t(x)); } @@ -86,14 +191,19 @@ class FieldVisitorToJsonb : public StaticVisitor { writer->writeInt128(int128_t(x)); } void operator()(const IPv6& x, JsonbWriter* writer) const { writer->writeInt128(int128_t(x)); } + void operator()(const bool& x, JsonbWriter* writer) const { writer->writeBool(x); } + void operator()(const Int8& x, JsonbWriter* writer) const { writer->writeInt8(x); } + void operator()(const Int16& x, JsonbWriter* writer) const { writer->writeInt16(x); } + void operator()(const Int32& x, JsonbWriter* writer) const { writer->writeInt32(x); } void operator()(const Int64& x, JsonbWriter* writer) const { writer->writeInt64(x); } + void operator()(const Float32& x, JsonbWriter* writer) const { writer->writeFloat(x); } void operator()(const Float64& x, JsonbWriter* writer) const { writer->writeDouble(x); } void operator()(const String& x, JsonbWriter* writer) const { writer->writeStartString(); writer->writeString(x); writer->writeEndString(); } - void operator()(const StringViewField& x, JsonbWriter* writer) const { + void operator()(const StringView& x, JsonbWriter* writer) const { writer->writeStartString(); writer->writeString(x.data(), x.size()); writer->writeEndString(); @@ -108,19 +218,19 @@ class FieldVisitorToJsonb : public StaticVisitor { void operator()(const Tuple& x, JsonbWriter* writer) const { throw doris::Exception(doris::ErrorCode::NOT_IMPLEMENTED_ERROR, "Not implemeted"); } - void operator()(const DecimalField& x, JsonbWriter* writer) const { + void operator()(const Decimal32& x, JsonbWriter* writer) const { throw doris::Exception(doris::ErrorCode::NOT_IMPLEMENTED_ERROR, "Not implemeted"); } - void operator()(const DecimalField& x, JsonbWriter* writer) const { + void operator()(const Decimal64& x, JsonbWriter* writer) const { throw doris::Exception(doris::ErrorCode::NOT_IMPLEMENTED_ERROR, "Not implemeted"); } - void operator()(const DecimalField& x, JsonbWriter* writer) const { + void operator()(const DecimalV2Value& x, JsonbWriter* writer) const { throw doris::Exception(doris::ErrorCode::NOT_IMPLEMENTED_ERROR, "Not implemeted"); } - void operator()(const DecimalField& x, JsonbWriter* writer) const { + void operator()(const Decimal128V3& x, JsonbWriter* writer) const { throw doris::Exception(doris::ErrorCode::NOT_IMPLEMENTED_ERROR, "Not implemeted"); } - void operator()(const DecimalField& x, JsonbWriter* writer) const { + void operator()(const Decimal256& x, JsonbWriter* writer) const { throw doris::Exception(doris::ErrorCode::NOT_IMPLEMENTED_ERROR, "Not implemeted"); } void operator()(const doris::QuantileState& x, JsonbWriter* writer) const { @@ -144,8 +254,7 @@ void FieldVisitorToJsonb::operator()(const Array& x, JsonbWriter* writer) const const size_t size = x.size(); writer->writeStartArray(); for (size_t i = 0; i < size; ++i) { - Field::dispatch([writer](const auto& value) { FieldVisitorToJsonb()(value, writer); }, - x[i]); + dispatch([writer](const auto& value) { FieldVisitorToJsonb()(value, writer); }, x[i]); } writer->writeEndArray(); } @@ -181,6 +290,36 @@ bool ConvertNumeric::cast(const Float64& from, UInt8& to) { return CastToBool::from_number(from, to, params); } +template <> +bool ConvertNumeric::cast(const UInt8& from, UInt8& to) { + to = from; + return true; +} + +template <> +bool ConvertNumeric::cast(const Float32& from, UInt8& to) { + auto params = create_cast_params(); + return CastToBool::from_number(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const Int8& from, UInt8& to) { + auto params = create_cast_params(); + return CastToBool::from_number(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const Int16& from, UInt8& to) { + auto params = create_cast_params(); + return CastToBool::from_number(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const Int32& from, UInt8& to) { + auto params = create_cast_params(); + return CastToBool::from_number(from, to, params); +} + // cast to tinyint template <> bool ConvertNumeric::cast(const Int64& from, Int8& to) { @@ -200,6 +339,36 @@ bool ConvertNumeric::cast(const Float64& from, Int8& to) { return CastToInt::from_float(from, to, params); } +template <> +bool ConvertNumeric::cast(const Float32& from, Int8& to) { + auto params = create_cast_params(); + return CastToInt::from_float(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const UInt8& from, Int8& to) { + auto params = create_cast_params(); + return CastToInt::from_bool(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const Int8& from, Int8& to) { + auto params = create_cast_params(); + return CastToInt::from_int(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const Int16& from, Int8& to) { + auto params = create_cast_params(); + return CastToInt::from_int(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const Int32& from, Int8& to) { + auto params = create_cast_params(); + return CastToInt::from_int(from, to, params); +} + // cast to smallint template <> bool ConvertNumeric::cast(const Int64& from, Int16& to) { @@ -219,6 +388,36 @@ bool ConvertNumeric::cast(const Float64& from, Int16& to) { return CastToInt::from_float(from, to, params); } +template <> +bool ConvertNumeric::cast(const Float32& from, Int16& to) { + auto params = create_cast_params(); + return CastToInt::from_float(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const UInt8& from, Int16& to) { + auto params = create_cast_params(); + return CastToInt::from_bool(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const Int8& from, Int16& to) { + auto params = create_cast_params(); + return CastToInt::from_int(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const Int16& from, Int16& to) { + auto params = create_cast_params(); + return CastToInt::from_int(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const Int32& from, Int16& to) { + auto params = create_cast_params(); + return CastToInt::from_int(from, to, params); +} + // cast to int template <> bool ConvertNumeric::cast(const Int64& from, Int32& to) { @@ -238,6 +437,36 @@ bool ConvertNumeric::cast(const Float64& from, Int32& to) { return CastToInt::from_float(from, to, params); } +template <> +bool ConvertNumeric::cast(const Float32& from, Int32& to) { + auto params = create_cast_params(); + return CastToInt::from_float(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const UInt8& from, Int32& to) { + auto params = create_cast_params(); + return CastToInt::from_bool(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const Int8& from, Int32& to) { + auto params = create_cast_params(); + return CastToInt::from_int(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const Int32& from, Int32& to) { + auto params = create_cast_params(); + return CastToInt::from_int(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const Int16& from, Int32& to) { + auto params = create_cast_params(); + return CastToInt::from_int(from, to, params); +} + // cast to bigint template <> bool ConvertNumeric::cast(const Int64& from, Int64& to) { @@ -257,6 +486,36 @@ bool ConvertNumeric::cast(const Float64& from, Int64& to) { return CastToInt::from_float(from, to, params); } +template <> +bool ConvertNumeric::cast(const Float32& from, Int64& to) { + auto params = create_cast_params(); + return CastToInt::from_float(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const UInt8& from, Int64& to) { + auto params = create_cast_params(); + return CastToInt::from_bool(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const Int8& from, Int64& to) { + auto params = create_cast_params(); + return CastToInt::from_int(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const Int32& from, Int64& to) { + auto params = create_cast_params(); + return CastToInt::from_int(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const Int16& from, Int64& to) { + auto params = create_cast_params(); + return CastToInt::from_int(from, to, params); +} + // cast to largeint template <> bool ConvertNumeric::cast(const Int64& from, Int128& to) { @@ -276,6 +535,36 @@ bool ConvertNumeric::cast(const Float64& from, Int128& to) { return CastToInt::from_float(from, to, params); } +template <> +bool ConvertNumeric::cast(const Float32& from, Int128& to) { + auto params = create_cast_params(); + return CastToInt::from_float(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const UInt8& from, Int128& to) { + auto params = create_cast_params(); + return CastToInt::from_bool(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const Int8& from, Int128& to) { + auto params = create_cast_params(); + return CastToInt::from_int(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const Int16& from, Int128& to) { + auto params = create_cast_params(); + return CastToInt::from_int(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const Int32& from, Int128& to) { + auto params = create_cast_params(); + return CastToInt::from_int(from, to, params); +} + // cast to float template <> bool ConvertNumeric::cast(const Int64& from, Float32& to) { @@ -295,6 +584,36 @@ bool ConvertNumeric::cast(const Float64& from, Float32& to) { return CastToFloat::from_float(from, to, params); } +template <> +bool ConvertNumeric::cast(const Float32& from, Float32& to) { + auto params = create_cast_params(); + return CastToFloat::from_float(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const UInt8& from, Float32& to) { + auto params = create_cast_params(); + return CastToFloat::from_bool(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const Int8& from, Float32& to) { + auto params = create_cast_params(); + return CastToFloat::from_int(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const Int16& from, Float32& to) { + auto params = create_cast_params(); + return CastToFloat::from_int(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const Int32& from, Float32& to) { + auto params = create_cast_params(); + return CastToFloat::from_int(from, to, params); +} + // cast to double template <> bool ConvertNumeric::cast(const Int64& from, Float64& to) { @@ -314,6 +633,36 @@ bool ConvertNumeric::cast(const Float64& from, Float64& to) { return CastToFloat::from_float(from, to, params); } +template <> +bool ConvertNumeric::cast(const Float32& from, Float64& to) { + auto params = create_cast_params(); + return CastToFloat::from_float(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const UInt8& from, Float64& to) { + auto params = create_cast_params(); + return CastToFloat::from_bool(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const Int8& from, Float64& to) { + auto params = create_cast_params(); + return CastToFloat::from_int(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const Int16& from, Float64& to) { + auto params = create_cast_params(); + return CastToFloat::from_int(from, to, params); +} + +template <> +bool ConvertNumeric::cast(const Int32& from, Float64& to) { + auto params = create_cast_params(); + return CastToFloat::from_int(from, to, params); +} + namespace { template Field convert_numeric_type_impl(const Field& from) { @@ -332,6 +681,16 @@ void convert_numric_type(const Field& from, const IDataType& type, Field* to) { *to = convert_numeric_type_impl(from); } else if (from.get_type() == PrimitiveType::TYPE_LARGEINT) { *to = convert_numeric_type_impl(from); + } else if (from.get_type() == PrimitiveType::TYPE_TINYINT) { + *to = convert_numeric_type_impl(from); + } else if (from.get_type() == PrimitiveType::TYPE_SMALLINT) { + *to = convert_numeric_type_impl(from); + } else if (from.get_type() == PrimitiveType::TYPE_INT) { + *to = convert_numeric_type_impl(from); + } else if (from.get_type() == PrimitiveType::TYPE_FLOAT) { + *to = convert_numeric_type_impl(from); + } else if (from.get_type() == PrimitiveType::TYPE_BOOLEAN) { + *to = convert_numeric_type_impl(from); } else { throw doris::Exception(ErrorCode::INVALID_ARGUMENT, "Type mismatch in IN or VALUES section. Expected: {}. Got: {}", @@ -361,8 +720,7 @@ void convert_field_to_typeImpl(const Field& src, const IDataType& type, return; } JsonbWriter writer; - Field::dispatch([&writer](const auto& value) { FieldVisitorToJsonb()(value, &writer); }, - src); + dispatch([&writer](const auto& value) { FieldVisitorToJsonb()(value, &writer); }, src); *to = Field::create_field( JsonbField(writer.getOutput()->getBuffer(), cast_set(writer.getOutput()->getSize()))); diff --git a/be/src/vec/data_types/data_type_date.h b/be/src/vec/data_types/data_type_date.h index 8e57f8a0485ff6..b3667047b0de47 100644 --- a/be/src/vec/data_types/data_type_date.h +++ b/be/src/vec/data_types/data_type_date.h @@ -64,7 +64,7 @@ class DataTypeDate final : public DataTypeNumberBase { VecDateTimeValue value; if (value.from_date_str(node.date_literal.value.c_str(), node.date_literal.value.size())) { value.cast_to_date(); - return Field::create_field(Int64(*reinterpret_cast<__int64_t*>(&value))); + return Field::create_field(std::move(value)); } else { throw doris::Exception(doris::ErrorCode::INVALID_ARGUMENT, "Invalid value: {} for type Date", node.date_literal.value); diff --git a/be/src/vec/data_types/data_type_date_or_datetime_v2.h b/be/src/vec/data_types/data_type_date_or_datetime_v2.h index 82247777696428..22a1e4e342bf3b 100644 --- a/be/src/vec/data_types/data_type_date_or_datetime_v2.h +++ b/be/src/vec/data_types/data_type_date_or_datetime_v2.h @@ -71,7 +71,7 @@ class DataTypeDateV2 final : public DataTypeNumberBase value; if (value.from_date_str(node.date_literal.value.c_str(), cast_set(node.date_literal.value.size()))) { - return Field::create_field(value.to_date_int_val()); + return Field::create_field(std::move(value)); } else { throw doris::Exception(doris::ErrorCode::INVALID_ARGUMENT, "Invalid value: {} for type DateV2", node.date_literal.value); @@ -158,7 +158,7 @@ class DataTypeDateTimeV2 final : public DataTypeNumberBase(node.date_literal.value.size()), scale)) { - return Field::create_field(value.to_date_int_val()); + return Field::create_field(std::move(value)); } else { throw doris::Exception(doris::ErrorCode::INVALID_ARGUMENT, "Invalid value: {} for type DateTimeV2({})", diff --git a/be/src/vec/data_types/data_type_date_time.h b/be/src/vec/data_types/data_type_date_time.h index 6ce45dd45ef9d5..7f878587be54c3 100644 --- a/be/src/vec/data_types/data_type_date_time.h +++ b/be/src/vec/data_types/data_type_date_time.h @@ -96,7 +96,7 @@ class DataTypeDateTime final : public DataTypeNumberBase(Int64(*reinterpret_cast<__int64_t*>(&value))); + return Field::create_field(std::move(value)); } else { throw doris::Exception(doris::ErrorCode::INVALID_ARGUMENT, "Invalid value: {} for type DateTime", node.date_literal.value); diff --git a/be/src/vec/data_types/data_type_decimal.cpp b/be/src/vec/data_types/data_type_decimal.cpp index 67867c976728c5..0d9adb269f4fe8 100644 --- a/be/src/vec/data_types/data_type_decimal.cpp +++ b/be/src/vec/data_types/data_type_decimal.cpp @@ -263,7 +263,7 @@ void DataTypeDecimal::to_pb_column_meta(PColumnMeta* col_meta) const { template Field DataTypeDecimal::get_default() const { - return Field::create_field(DecimalField(FieldType(), scale)); + return Field::create_field(typename PrimitiveTypeTraits::CppType()); } template diff --git a/be/src/vec/data_types/data_type_decimal.h b/be/src/vec/data_types/data_type_decimal.h index 59da8de61a6515..656ec3cecd061b 100644 --- a/be/src/vec/data_types/data_type_decimal.h +++ b/be/src/vec/data_types/data_type_decimal.h @@ -198,22 +198,22 @@ class DataTypeDecimal final : public IDataType { if (value.parse_from_str(node.decimal_literal.value.c_str(), cast_set(node.decimal_literal.value.size())) == E_DEC_OK) { - return Field::create_field( - DecimalField(value.value(), value.scale())); + return Field::create_field(std::move(value)); } else { throw doris::Exception(doris::ErrorCode::INVALID_ARGUMENT, "Invalid decimal(scale: {}) value: {}", value.scale(), node.decimal_literal.value); } + } else { + // decimal + FieldType val; + if (!parse_from_string(node.decimal_literal.value, &val)) { + throw doris::Exception(doris::ErrorCode::INVALID_ARGUMENT, + "Invalid value: {} for type {}", node.decimal_literal.value, + do_get_name()); + }; + return Field::create_field(std::move(val)); } - // decimal - FieldType val; - if (!parse_from_string(node.decimal_literal.value, &val)) { - throw doris::Exception(doris::ErrorCode::INVALID_ARGUMENT, - "Invalid value: {} for type {}", node.decimal_literal.value, - do_get_name()); - }; - return Field::create_field(DecimalField(val, scale)); } MutableColumnPtr create_column() const override; diff --git a/be/src/vec/data_types/data_type_number_base.cpp b/be/src/vec/data_types/data_type_number_base.cpp index a904492cb1ac98..ccf52e75846811 100644 --- a/be/src/vec/data_types/data_type_number_base.cpp +++ b/be/src/vec/data_types/data_type_number_base.cpp @@ -67,7 +67,7 @@ std::string DataTypeNumberBase::to_string( template Field DataTypeNumberBase::get_default() const { - return Field::create_field(typename PrimitiveTypeTraits::NearestFieldType()); + return Field::create_field(typename PrimitiveTypeTraits::CppType()); } template @@ -88,11 +88,11 @@ Field DataTypeNumberBase::get_field(const TExprNode& node) const { } if constexpr (is_int(T)) { return Field::create_field( - typename PrimitiveTypeTraits::NearestFieldType(node.int_literal.value)); + typename PrimitiveTypeTraits::CppType(node.int_literal.value)); } if constexpr (is_float_or_double(T) || T == TYPE_TIMEV2 || T == TYPE_TIME) { return Field::create_field( - typename PrimitiveTypeTraits::NearestFieldType(node.float_literal.value)); + typename PrimitiveTypeTraits::CppType(node.float_literal.value)); } throw Exception(Status::FatalError("__builtin_unreachable")); } diff --git a/be/src/vec/data_types/data_type_timestamptz.cpp b/be/src/vec/data_types/data_type_timestamptz.cpp index 54dce565c607ee..76d89ca2fafaf6 100644 --- a/be/src/vec/data_types/data_type_timestamptz.cpp +++ b/be/src/vec/data_types/data_type_timestamptz.cpp @@ -34,7 +34,7 @@ Field DataTypeTimeStampTz::get_field(const TExprNode& node) const { "Invalid value: {} for type TimeStampTz({})", node.date_literal.value, _scale); } else { - return Field::create_field(res.to_date_int_val()); + return Field::create_field(res); } } diff --git a/be/src/vec/data_types/serde/data_type_number_serde.cpp b/be/src/vec/data_types/serde/data_type_number_serde.cpp index f325d0aba47cee..481d08b905cc19 100644 --- a/be/src/vec/data_types/serde/data_type_number_serde.cpp +++ b/be/src/vec/data_types/serde/data_type_number_serde.cpp @@ -866,7 +866,7 @@ const uint8_t* DataTypeNumberSerDe::deserialize_binary_to_field(const uint8_t UInt64 v = unaligned_load(data); info.precision = -1; info.scale = static_cast(scale); - field = Field::create_field(v); + field = Field::create_field(*(typename PrimitiveTypeTraits::CppType*)&v); data += sizeof(UInt64); } else { throw doris::Exception(ErrorCode::NOT_IMPLEMENTED_ERROR, diff --git a/be/src/vec/exec/format/parquet/parquet_predicate.h b/be/src/vec/exec/format/parquet/parquet_predicate.h index 7a97e057da2334..c390a50cb3793e 100644 --- a/be/src/vec/exec/format/parquet/parquet_predicate.h +++ b/be/src/vec/exec/format/parquet/parquet_predicate.h @@ -311,8 +311,8 @@ class ParquetPredicate { auto logical_prim_type = logical_data_type->get_primitive_type(); if (logical_prim_type == TYPE_FLOAT) { - auto& min_value = min_field->get::NearestFieldType>(); - auto& max_value = max_field->get::NearestFieldType>(); + auto& min_value = min_field->get::CppType>(); + auto& max_value = max_field->get::CppType>(); if (std::isnan(min_value) || std::isnan(max_value)) { return Status::DataQualityError("Can not use this parquet min/max value."); @@ -325,8 +325,8 @@ class ParquetPredicate { max_value = 0.0F; } } else if (logical_prim_type == TYPE_DOUBLE) { - auto& min_value = min_field->get::NearestFieldType>(); - auto& max_value = max_field->get::NearestFieldType>(); + auto& min_value = min_field->get::CppType>(); + auto& max_value = max_field->get::CppType>(); if (std::isnan(min_value) || std::isnan(max_value)) { return Status::DataQualityError("Can not use this parquet min/max value."); @@ -340,10 +340,8 @@ class ParquetPredicate { } } else if (col_schema->parquet_schema.type == tparquet::Type::type::INT96 || logical_prim_type == TYPE_DATETIMEV2) { - auto min_value = - min_field->get::NearestFieldType>(); - auto max_value = - min_field->get::NearestFieldType>(); + auto min_value = min_field->get::CppType>(); + auto max_value = min_field->get::CppType>(); // From Trino: Parquet INT96 timestamp values were compared incorrectly // for the purposes of producing statistics by older parquet writers, diff --git a/be/src/vec/exprs/vcondition_expr.cpp b/be/src/vec/exprs/vcondition_expr.cpp index 068a2d74190421..c70b31a060fad6 100644 --- a/be/src/vec/exprs/vcondition_expr.cpp +++ b/be/src/vec/exprs/vcondition_expr.cpp @@ -213,7 +213,7 @@ Status VectorizedIfExpr::execute_for_null_then_else(Block& block, arg_cond.column)); } } else if (cond_const_col) { - if (cond_const_col->get_value()) { // if(true, null, else) + if (cond_const_col->get_value()) { // if(true, null, else) block.get_by_position(result).column = block.get_by_position(result).type->create_column()->clone_resized( input_rows_count); @@ -251,7 +251,7 @@ Status VectorizedIfExpr::execute_for_null_then_else(Block& block, std::move(negated_null_map))); } } else if (cond_const_col) { - if (cond_const_col->get_value()) { // if(true, then, NULL) + if (cond_const_col->get_value()) { // if(true, then, NULL) block.get_by_position(result).column = make_nullable_column_if_not(arg_then.column); } else { // if(false, then, NULL) block.get_by_position(result).column = @@ -424,7 +424,7 @@ Status VectorizedIfExpr::_execute_impl_internal(Block& block, const ColumnNumber if (cond_const_col) { block.get_by_position(result).column = - cond_const_col->get_value() ? arg_then.column : arg_else.column; + cond_const_col->get_value() ? arg_then.column : arg_else.column; return Status::OK(); } diff --git a/be/src/vec/exprs/vexpr.cpp b/be/src/vec/exprs/vexpr.cpp index 125d31d0b1015a..21c931b106e282 100644 --- a/be/src/vec/exprs/vexpr.cpp +++ b/be/src/vec/exprs/vexpr.cpp @@ -190,171 +190,146 @@ TExprNode create_texpr_node_from(const vectorized::Field& field, const Primitive TExprNode node; switch (type) { case TYPE_BOOLEAN: { - const auto& storage = static_cast( - field.get::NearestFieldType>()); + const auto& storage = + static_cast(field.get::CppType>()); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_TINYINT: { const auto& storage = static_cast( - field.get::NearestFieldType>()); + field.get::CppType>()); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_SMALLINT: { const auto& storage = static_cast( - field.get::NearestFieldType>()); + field.get::CppType>()); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_INT: { - const auto& storage = static_cast( - field.get::NearestFieldType>()); + const auto& storage = + static_cast(field.get::CppType>()); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_BIGINT: { const auto& storage = static_cast( - field.get::NearestFieldType>()); + field.get::CppType>()); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_LARGEINT: { const auto& storage = static_cast( - field.get::NearestFieldType>()); + field.get::CppType>()); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_FLOAT: { - const auto& storage = static_cast( - field.get::NearestFieldType>()); + const auto& storage = + static_cast(field.get::CppType>()); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_DOUBLE: { const auto& storage = static_cast( - field.get::NearestFieldType>()); + field.get::CppType>()); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_DATEV2: { - DateV2Value storage = - binary_cast>(static_cast( - field.get::NearestFieldType>())); + const auto& storage = field.get::CppType>(); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_DATETIMEV2: { - DateV2Value storage = binary_cast>( - field.get::NearestFieldType>()); - + const auto& storage = field.get::CppType>(); THROW_IF_ERROR( create_texpr_literal_node(&storage, &node, precision, scale)); break; } case TYPE_TIMESTAMPTZ: { - TimestampTzValue storage = binary_cast( - field.get::NearestFieldType>()); + const auto& storage = field.get::CppType>(); THROW_IF_ERROR( create_texpr_literal_node(&storage, &node, precision, scale)); break; } case TYPE_DATE: { - VecDateTimeValue storage = binary_cast( - field.get::NearestFieldType>()); + const auto& storage = field.get::CppType>(); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_DATETIME: { - VecDateTimeValue storage = binary_cast( - field.get::NearestFieldType>()); + const auto& storage = field.get::CppType>(); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_DECIMALV2: { - const auto& storage = - field.get::NearestFieldType>() - .get_value(); + const auto& storage = field.get::CppType>(); THROW_IF_ERROR( create_texpr_literal_node(&storage, &node, precision, scale)); break; } case TYPE_DECIMAL32: { - const auto& storage = - field.get::NearestFieldType>() - .get_value(); + const auto& storage = field.get::CppType>(); THROW_IF_ERROR( create_texpr_literal_node(&storage, &node, precision, scale)); break; } case TYPE_DECIMAL64: { - const auto& storage = - field.get::NearestFieldType>() - .get_value(); + const auto& storage = field.get::CppType>(); THROW_IF_ERROR( create_texpr_literal_node(&storage, &node, precision, scale)); break; } case TYPE_DECIMAL128I: { - const auto& storage = - field.get::NearestFieldType>() - .get_value(); + const auto& storage = field.get::CppType>(); THROW_IF_ERROR( create_texpr_literal_node(&storage, &node, precision, scale)); break; } case TYPE_DECIMAL256: { - const auto& storage = - field.get::NearestFieldType>() - .get_value(); + const auto& storage = field.get::CppType>(); THROW_IF_ERROR( create_texpr_literal_node(&storage, &node, precision, scale)); break; } case TYPE_CHAR: { - const auto& storage = - field.get::NearestFieldType>(); + const auto& storage = field.get::CppType>(); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_VARCHAR: { - const auto& storage = - field.get::NearestFieldType>(); + const auto& storage = field.get::CppType>(); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_STRING: { - const auto& storage = - field.get::NearestFieldType>(); + const auto& storage = field.get::CppType>(); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_IPV4: { - const auto& storage = - field.get::NearestFieldType>(); + const auto& storage = field.get::CppType>(); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_IPV6: { - const auto& storage = - field.get::NearestFieldType>(); + const auto& storage = field.get::CppType>(); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_TIMEV2: { - const auto& storage = - field.get::NearestFieldType>(); + const auto& storage = field.get::CppType>(); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_VARBINARY: { - const auto& svf = field.get(); - const std::string& storage = svf.get_string(); - THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); + const auto& svf = field.get::CppType>(); + THROW_IF_ERROR(create_texpr_literal_node(&svf, &node)); break; } default: diff --git a/be/src/vec/functions/binary_arithmetic.h b/be/src/vec/functions/binary_arithmetic.h index 19ff3580f138b7..10f5d7415fe7a0 100644 --- a/be/src/vec/functions/binary_arithmetic.h +++ b/be/src/vec/functions/binary_arithmetic.h @@ -428,12 +428,22 @@ class FunctionPlusMinus : public IFunction { auto max_and_multiplier = Impl::get_max_and_multiplier( type_left, type_right, type_result); + typename PrimitiveTypeTraits::ColumnItemType + left_tmp; + auto left_src = + column_left_ptr + ->template get_value(); + std::memcpy(&left_tmp, &left_src, sizeof(left_src)); + typename PrimitiveTypeTraits::ColumnItemType + right_tmp; + auto right_src = + column_right_ptr + ->template get_value(); + std::memcpy(&right_tmp, &right_src, sizeof(right_src)); column_result = Impl::constant_constant( - column_left_ptr->template get_value(), - column_right_ptr->template get_value(), - type_left, type_right, max_and_multiplier.first, - max_and_multiplier.second, type_result, - check_overflow_for_decimal); + left_tmp, right_tmp, type_left, type_right, + max_and_multiplier.first, max_and_multiplier.second, + type_result, check_overflow_for_decimal); return true; })) { throw Exception(ErrorCode::INTERNAL_ERROR, @@ -448,8 +458,10 @@ class FunctionPlusMinus : public IFunction { type_left, type_right, type_result); column_result = Impl::constant_constant( - column_left_ptr->template get_value(), - column_right_ptr->template get_value(), + column_left_ptr + ->template get_value(), + column_right_ptr + ->template get_value(), type_left, type_right, max_and_multiplier.first, max_and_multiplier.second, type_result, check_overflow_for_decimal); @@ -462,8 +474,8 @@ class FunctionPlusMinus : public IFunction { } } else { column_result = Impl::constant_constant( - column_left_ptr->template get_value(), - column_right_ptr->template get_value()); + column_left_ptr->template get_value(), + column_right_ptr->template get_value()); } return ColumnConst::create(std::move(column_result), column_left->size()); @@ -483,12 +495,14 @@ class FunctionPlusMinus : public IFunction { remove_nullable(res_data_type).get(), [&](const auto& type_result) { auto max_and_multiplier = Impl::get_max_and_multiplier( type_left, type_right, type_result); - res = Impl::vector_constant( - column_left->get_ptr(), - column_right_ptr->template get_value(), - type_left, type_right, max_and_multiplier.first, - max_and_multiplier.second, type_result, - check_overflow_for_decimal); + typename PrimitiveTypeTraits::ColumnItemType tmp; + auto src = column_right_ptr + ->template get_value(); + std::memcpy(&tmp, &src, sizeof(src)); + res = Impl::vector_constant(column_left->get_ptr(), tmp, type_left, + type_right, max_and_multiplier.first, + max_and_multiplier.second, type_result, + check_overflow_for_decimal); return true; })) { throw Exception(ErrorCode::INTERNAL_ERROR, @@ -503,7 +517,8 @@ class FunctionPlusMinus : public IFunction { type_left, type_right, type_result); res = Impl::vector_constant( column_left->get_ptr(), - column_right_ptr->template get_value(), + column_right_ptr + ->template get_value(), type_left, type_right, max_and_multiplier.first, max_and_multiplier.second, type_result, check_overflow_for_decimal); @@ -517,7 +532,7 @@ class FunctionPlusMinus : public IFunction { } else { res = Impl::vector_constant( column_left->get_ptr(), - column_right_ptr->template get_value()); + column_right_ptr->template get_value()); } return res; } @@ -536,11 +551,14 @@ class FunctionPlusMinus : public IFunction { remove_nullable(res_data_type).get(), [&](const auto& type_result) { auto max_and_multiplier = Impl::get_max_and_multiplier( type_left, type_right, type_result); - res = Impl::constant_vector( - column_left_ptr->template get_value(), - column_right->get_ptr(), type_left, type_right, - max_and_multiplier.first, max_and_multiplier.second, - type_result, check_overflow_for_decimal); + typename PrimitiveTypeTraits::ColumnItemType tmp; + auto src = column_left_ptr + ->template get_value(); + std::memcpy(&tmp, &src, sizeof(src)); + res = Impl::constant_vector(tmp, column_right->get_ptr(), type_left, + type_right, max_and_multiplier.first, + max_and_multiplier.second, type_result, + check_overflow_for_decimal); return true; })) { throw Exception(ErrorCode::INTERNAL_ERROR, @@ -554,7 +572,8 @@ class FunctionPlusMinus : public IFunction { auto max_and_multiplier = Impl::get_max_and_multiplier( type_left, type_right, type_result); res = Impl::constant_vector( - column_left_ptr->template get_value(), + column_left_ptr + ->template get_value(), column_right->get_ptr(), type_left, type_right, max_and_multiplier.first, max_and_multiplier.second, type_result, check_overflow_for_decimal); @@ -566,8 +585,9 @@ class FunctionPlusMinus : public IFunction { } } } else { - res = Impl::constant_vector(column_left_ptr->template get_value(), - column_right->get_ptr()); + res = Impl::constant_vector( + column_left_ptr->template get_value(), + column_right->get_ptr()); } return res; } diff --git a/be/src/vec/functions/divide.cpp b/be/src/vec/functions/divide.cpp index 7d4f90770941e4..7e140af4a100ac 100644 --- a/be/src/vec/functions/divide.cpp +++ b/be/src/vec/functions/divide.cpp @@ -110,11 +110,20 @@ class FunctionDiv : public IFunction { auto max_and_multiplier = Impl::get_max_and_multiplier( type_left, type_right, type_result); + typename PrimitiveTypeTraits::ColumnItemType + left_tmp; + auto left_src = + column_left_ptr->template get_value(); + std::memcpy(&left_tmp, &left_src, sizeof(left_src)); + typename PrimitiveTypeTraits::ColumnItemType + right_tmp; + auto right_src = + column_right_ptr->template get_value(); + std::memcpy(&right_tmp, &right_src, sizeof(right_src)); column_result = Impl::constant_constant( - column_left_ptr->template get_value(), - column_right_ptr->template get_value(), - max_and_multiplier.first, max_and_multiplier.second, - type_result, check_overflow_for_decimal); + left_tmp, right_tmp, max_and_multiplier.first, + max_and_multiplier.second, type_result, + check_overflow_for_decimal); return true; })) { throw Exception(ErrorCode::INTERNAL_ERROR, @@ -127,12 +136,20 @@ class FunctionDiv : public IFunction { remove_nullable(res_data_type).get(), [&](const auto& type_result) { auto max_and_multiplier = Impl::get_max_and_multiplier( type_left, type_right, type_result); - + typename PrimitiveTypeTraits::ColumnItemType + left_tmp; + auto left_src = + column_left_ptr->template get_value(); + std::memcpy(&left_tmp, &left_src, sizeof(left_src)); + typename PrimitiveTypeTraits::ColumnItemType + right_tmp; + auto right_src = + column_right_ptr->template get_value(); + std::memcpy(&right_tmp, &right_src, sizeof(right_src)); column_result = Impl::constant_constant( - column_left_ptr->template get_value(), - column_right_ptr->template get_value(), - max_and_multiplier.first, max_and_multiplier.second, - type_result, check_overflow_for_decimal); + left_tmp, right_tmp, max_and_multiplier.first, + max_and_multiplier.second, type_result, + check_overflow_for_decimal); return true; })) { throw Exception(ErrorCode::INTERNAL_ERROR, @@ -141,9 +158,13 @@ class FunctionDiv : public IFunction { } } } else { - column_result = Impl::constant_constant( - column_left_ptr->template get_value(), - column_right_ptr->template get_value()); + typename PrimitiveTypeTraits::ColumnItemType left_tmp; + auto left_src = column_left_ptr->template get_value(); + std::memcpy(&left_tmp, &left_src, sizeof(left_src)); + typename PrimitiveTypeTraits::ColumnItemType right_tmp; + auto right_src = column_right_ptr->template get_value(); + std::memcpy(&right_tmp, &right_src, sizeof(right_src)); + column_result = Impl::constant_constant(left_tmp, right_tmp); } return ColumnConst::create(std::move(column_result), column_left->size()); @@ -163,11 +184,13 @@ class FunctionDiv : public IFunction { remove_nullable(res_data_type).get(), [&](const auto& type_result) { auto max_and_multiplier = Impl::get_max_and_multiplier( type_left, type_right, type_result); - res = Impl::vector_constant( - column_left->get_ptr(), - column_right_ptr->template get_value(), - max_and_multiplier.first, max_and_multiplier.second, - type_result, check_overflow_for_decimal); + typename PrimitiveTypeTraits::ColumnItemType tmp; + auto src = column_right_ptr->template get_value(); + std::memcpy(&tmp, &src, sizeof(src)); + res = Impl::vector_constant(column_left->get_ptr(), tmp, + max_and_multiplier.first, + max_and_multiplier.second, type_result, + check_overflow_for_decimal); return true; })) { throw Exception(ErrorCode::INTERNAL_ERROR, @@ -182,7 +205,7 @@ class FunctionDiv : public IFunction { type_left, type_right, type_result); res = Impl::vector_constant( column_left->get_ptr(), - column_right_ptr->template get_value(), + column_right_ptr->template get_value(), max_and_multiplier.first, max_and_multiplier.second, type_result, check_overflow_for_decimal); return true; @@ -193,9 +216,8 @@ class FunctionDiv : public IFunction { } } } else { - res = Impl::vector_constant( - column_left->get_ptr(), - column_right_ptr->template get_value()); + res = Impl::vector_constant(column_left->get_ptr(), + column_right_ptr->template get_value()); } return res; } @@ -214,11 +236,13 @@ class FunctionDiv : public IFunction { remove_nullable(res_data_type).get(), [&](const auto& type_result) { auto max_and_multiplier = Impl::get_max_and_multiplier( type_left, type_right, type_result); - res = Impl::constant_vector( - column_left_ptr->template get_value(), - column_right->get_ptr(), max_and_multiplier.first, - max_and_multiplier.second, type_result, - check_overflow_for_decimal); + typename PrimitiveTypeTraits::ColumnItemType tmp; + auto src = column_left_ptr->template get_value(); + std::memcpy(&tmp, &src, sizeof(src)); + res = Impl::constant_vector(tmp, column_right->get_ptr(), + max_and_multiplier.first, + max_and_multiplier.second, type_result, + check_overflow_for_decimal); return true; })) { throw Exception(ErrorCode::INTERNAL_ERROR, @@ -231,11 +255,13 @@ class FunctionDiv : public IFunction { remove_nullable(res_data_type).get(), [&](const auto& type_result) { auto max_and_multiplier = Impl::get_max_and_multiplier( type_left, type_right, type_result); - res = Impl::constant_vector( - column_left_ptr->template get_value(), - column_right->get_ptr(), max_and_multiplier.first, - max_and_multiplier.second, type_result, - check_overflow_for_decimal); + typename PrimitiveTypeTraits::ColumnItemType tmp; + auto src = column_left_ptr->template get_value(); + std::memcpy(&tmp, &src, sizeof(src)); + res = Impl::constant_vector(tmp, column_right->get_ptr(), + max_and_multiplier.first, + max_and_multiplier.second, type_result, + check_overflow_for_decimal); return true; })) { throw Exception(ErrorCode::INTERNAL_ERROR, @@ -244,7 +270,7 @@ class FunctionDiv : public IFunction { } } } else { - res = Impl::constant_vector(column_left_ptr->template get_value(), + res = Impl::constant_vector(column_left_ptr->template get_value(), column_right->get_ptr()); } return res; @@ -300,6 +326,8 @@ static const DecimalV2Value one(1, 0); struct DivideFloatingImpl { using ArgA = typename PrimitiveTypeTraits::CppNativeType; using ArgB = typename PrimitiveTypeTraits::CppNativeType; + static constexpr PrimitiveType ArgAPType = TYPE_DOUBLE; + static constexpr PrimitiveType ArgBPType = TYPE_DOUBLE; using ColumnType = typename PrimitiveTypeTraits::ColumnType; using DataTypeA = typename PrimitiveTypeTraits::DataType; using DataTypeB = typename PrimitiveTypeTraits::DataType; @@ -387,6 +415,8 @@ struct DivideDecimalImpl { (TypeA != TYPE_DECIMALV2 && TypeB != TYPE_DECIMALV2)); using ArgA = typename PrimitiveTypeTraits::ColumnItemType; using ArgB = typename PrimitiveTypeTraits::ColumnItemType; + static constexpr PrimitiveType ArgAPType = TypeA; + static constexpr PrimitiveType ArgBPType = TypeB; using ArgNativeTypeA = typename PrimitiveTypeTraits::CppNativeType; using ArgNativeTypeB = typename PrimitiveTypeTraits::CppNativeType; using DataTypeA = typename PrimitiveTypeTraits::DataType; @@ -459,12 +489,12 @@ struct DivideDecimalImpl { if (check_overflow_for_decimal) { for (size_t i = 0; i < sz; ++i) { c[i] = typename DataTypeDecimal::FieldType( - apply(a[i].value, b.value, n[i], max_result_number)); + apply(a[i], b, n[i], max_result_number)); } } else { for (size_t i = 0; i < sz; ++i) { c[i] = typename DataTypeDecimal::FieldType( - apply(a[i].value, b.value, n[i], max_result_number)); + apply(a[i], b, n[i], max_result_number)); } } @@ -491,12 +521,12 @@ struct DivideDecimalImpl { if (check_overflow_for_decimal) { for (size_t i = 0; i < sz; ++i) { c[i] = typename DataTypeDecimal::FieldType( - apply(a.value, b[i].value, n[i], max_result_number)); + apply(a, b[i], n[i], max_result_number)); } } else { for (size_t i = 0; i < sz; ++i) { c[i] = typename DataTypeDecimal::FieldType( - apply(a.value, b[i].value, n[i], max_result_number)); + apply(a, b[i], n[i], max_result_number)); } } @@ -527,8 +557,8 @@ struct DivideDecimalImpl { if constexpr (TypeA == TYPE_DECIMALV2) { if (check_overflow_for_decimal) { for (size_t i = 0; i < sz; ++i) { - c[i] = Decimal128V2(apply(a[i].value, b[i].value, n[i], - max_result_number)); + c[i] = Decimal128V2( + apply(a[i], b[i], n[i], max_result_number)); } } else { for (size_t i = 0; i < sz; ++i) { @@ -539,13 +569,13 @@ struct DivideDecimalImpl { } else { if (check_overflow_for_decimal) { for (size_t i = 0; i < sz; ++i) { - c[i] = typename DataTypeDecimal::FieldType(apply( - a[i].value, b[i].value, n[i], max_result_number)); + c[i] = typename DataTypeDecimal::FieldType( + apply(a[i], b[i], n[i], max_result_number)); } } else { for (size_t i = 0; i < sz; ++i) { - c[i] = typename DataTypeDecimal::FieldType(apply( - a[i].value, b[i].value, n[i], max_result_number)); + c[i] = typename DataTypeDecimal::FieldType( + apply(a[i], b[i], n[i], max_result_number)); } } } diff --git a/be/src/vec/functions/function_bit.cpp b/be/src/vec/functions/function_bit.cpp index 19c87cc15575e1..6218984333e707 100644 --- a/be/src/vec/functions/function_bit.cpp +++ b/be/src/vec/functions/function_bit.cpp @@ -83,9 +83,8 @@ class FunctionBit : public IFunction { ColumnPtr column_result = nullptr; auto res = Impl::ColumnType::create(1); - res->get_element(0) = - Impl::apply(column_left_ptr->template get_value(), - column_right_ptr->template get_value()); + res->get_element(0) = Impl::apply(column_left_ptr->template get_value(), + column_right_ptr->template get_value()); column_result = std::move(res); return ColumnConst::create(std::move(column_result), column_left->size()); } @@ -100,7 +99,7 @@ class FunctionBit : public IFunction { auto& c = column_result->get_data(); size_t size = a.size(); for (size_t i = 0; i < size; ++i) { - c[i] = Impl::apply(a[i], column_right_ptr->template get_value()); + c[i] = Impl::apply(a[i], column_right_ptr->template get_value()); } return column_result; } @@ -116,7 +115,7 @@ class FunctionBit : public IFunction { auto& c = column_result->get_data(); size_t size = b.size(); for (size_t i = 0; i < size; ++i) { - c[i] = Impl::apply(column_left_ptr->template get_value(), b[i]); + c[i] = Impl::apply(column_left_ptr->template get_value(), b[i]); } return column_result; } @@ -148,6 +147,7 @@ struct BitAndImpl { using ColumnType = typename PrimitiveTypeTraits::ColumnType; static constexpr auto name = "bitand"; static constexpr bool is_nullable = false; + static constexpr PrimitiveType ArgPType = PType; static inline Arg apply(Arg a, Arg b) { return a & b; } }; @@ -159,6 +159,7 @@ struct BitOrImpl { using ColumnType = typename PrimitiveTypeTraits::ColumnType; static constexpr auto name = "bitor"; static constexpr bool is_nullable = false; + static constexpr PrimitiveType ArgPType = PType; static inline Arg apply(Arg a, Arg b) { return a | b; } }; @@ -170,6 +171,7 @@ struct BitXorImpl { using ColumnType = typename PrimitiveTypeTraits::ColumnType; static constexpr auto name = "bitxor"; static constexpr bool is_nullable = false; + static constexpr PrimitiveType ArgPType = PType; static inline Arg apply(Arg a, Arg b) { return a ^ b; } }; diff --git a/be/src/vec/functions/function_bit_shift.cpp b/be/src/vec/functions/function_bit_shift.cpp index fff5f35db09979..211da9ddb59286 100644 --- a/be/src/vec/functions/function_bit_shift.cpp +++ b/be/src/vec/functions/function_bit_shift.cpp @@ -72,8 +72,8 @@ class FunctionBitShift : public IFunction { ColumnPtr column_result = nullptr; auto res = ColumnInt64::create(1); - res->get_element(0) = Impl::apply(column_left_ptr->template get_value(), - column_right_ptr->template get_value()); + res->get_element(0) = Impl::apply(column_left_ptr->template get_value(), + column_right_ptr->template get_value()); column_result = std::move(res); return ColumnConst::create(std::move(column_result), column_left->size()); } @@ -87,7 +87,7 @@ class FunctionBitShift : public IFunction { auto& c = column_result->get_data(); size_t size = a.size(); for (size_t i = 0; i < size; ++i) { - c[i] = Impl::apply(a[i], column_right_ptr->template get_value()); + c[i] = Impl::apply(a[i], column_right_ptr->template get_value()); } return column_result; } @@ -101,7 +101,7 @@ class FunctionBitShift : public IFunction { auto& c = column_result->get_data(); size_t size = b.size(); for (size_t i = 0; i < size; ++i) { - c[i] = Impl::apply(column_left_ptr->template get_value(), b[i]); + c[i] = Impl::apply(column_left_ptr->template get_value(), b[i]); } return column_result; } diff --git a/be/src/vec/functions/function_hash.cpp b/be/src/vec/functions/function_hash.cpp index 332a3a2344f564..5a008221d37410 100644 --- a/be/src/vec/functions/function_hash.cpp +++ b/be/src/vec/functions/function_hash.cpp @@ -104,7 +104,7 @@ struct MurmurHash3Impl { } } else if (const ColumnConst* col_from_const = check_and_get_column_const_string_or_fixedstring(column)) { - auto value = col_from_const->get_value(); + auto value = col_from_const->get_value(); for (size_t i = 0; i < input_rows_count; ++i) { if constexpr (ReturnType == TYPE_INT) { col_to_data[i] = @@ -193,7 +193,7 @@ struct XxHashImpl { } } else if (const ColumnConst* col_from_const = check_and_get_column_const_string_or_fixedstring(column)) { - auto value = col_from_const->get_value(); + auto value = col_from_const->get_value(); for (size_t i = 0; i < input_rows_count; ++i) { if constexpr (ReturnType == TYPE_INT) { col_to_data[i] = diff --git a/be/src/vec/functions/function_helpers.h b/be/src/vec/functions/function_helpers.h index a74edba4a8982b..661e1ac2f84a27 100644 --- a/be/src/vec/functions/function_helpers.h +++ b/be/src/vec/functions/function_helpers.h @@ -87,13 +87,13 @@ const ColumnConst* check_and_get_column_const_string_or_fixedstring(const IColum template requires(!is_decimal(T)) Field to_field(const typename PrimitiveTypeTraits::ColumnItemType& x) { - return Field::create_field(typename PrimitiveTypeTraits::NearestFieldType(x)); + return Field::create_field(typename PrimitiveTypeTraits::CppType(x)); } template requires(is_decimal(T)) Field to_field(const typename PrimitiveTypeTraits::ColumnItemType& x, UInt32 scale) { - return Field::create_field(typename PrimitiveTypeTraits::NearestFieldType(x, scale)); + return Field::create_field(typename PrimitiveTypeTraits::CppType(x, scale)); } Columns convert_const_tuple_to_constant_elements(const ColumnConst& column); diff --git a/be/src/vec/functions/function_quantile_state.cpp b/be/src/vec/functions/function_quantile_state.cpp index 3ba5541ae30229..5974f953842da5 100644 --- a/be/src/vec/functions/function_quantile_state.cpp +++ b/be/src/vec/functions/function_quantile_state.cpp @@ -132,7 +132,7 @@ class FunctionToQuantileState : public IFunction { block.get_by_position(arguments.back()).column.get()); float compression = 2048; if (compression_arg) { - auto compression_arg_val = compression_arg->get_value(); + auto compression_arg_val = compression_arg->get_value(); if (compression_arg_val >= QUANTILE_STATE_COMPRESSION_MIN && compression_arg_val <= QUANTILE_STATE_COMPRESSION_MAX) { compression = compression_arg_val; @@ -190,7 +190,7 @@ class FunctionQuantileStatePercent : public IFunction { return Status::InvalidArgument( "Second argument to {} must be a constant float describing type", get_name()); } - auto percent_arg_value = percent_arg->get_value(); + auto percent_arg_value = percent_arg->get_value(); if (percent_arg_value < 0 || percent_arg_value > 1) { return Status::InvalidArgument( "the input argument of percentage: {} is not valid, must be in range [0,1] ", diff --git a/be/src/vec/functions/functions_multi_string_position.cpp b/be/src/vec/functions/functions_multi_string_position.cpp index 0a5e3fc7253fcf..e23d97964c2080 100644 --- a/be/src/vec/functions/functions_multi_string_position.cpp +++ b/be/src/vec/functions/functions_multi_string_position.cpp @@ -129,7 +129,7 @@ class FunctionMultiStringPosition : public IFunction { if (col_needles_const) { status = Impl::vector_constant( col_haystack_vector->get_chars(), col_haystack_vector->get_offsets(), - col_needles_const->get_value(), vec_res, offsets_res); + col_needles_const->get_value(), vec_res, offsets_res); } else { status = Impl::vector_vector(col_haystack_vector->get_chars(), col_haystack_vector->get_offsets(), diff --git a/be/src/vec/functions/functions_multi_string_search.cpp b/be/src/vec/functions/functions_multi_string_search.cpp index 2e5232ea221d77..76897cc8749d58 100644 --- a/be/src/vec/functions/functions_multi_string_search.cpp +++ b/be/src/vec/functions/functions_multi_string_search.cpp @@ -114,8 +114,9 @@ class FunctionsMultiStringSearch : public IFunction { if (col_needles_const) { status = Impl::vector_constant( col_haystack_vector->get_chars(), col_haystack_vector->get_offsets(), - col_needles_const->get_value(), vec_res, offsets_res, allow_hyperscan_, - max_hyperscan_regexp_length_, max_hyperscan_regexp_total_length_); + col_needles_const->get_value(), vec_res, offsets_res, + allow_hyperscan_, max_hyperscan_regexp_length_, + max_hyperscan_regexp_total_length_); } else { status = Impl::vector_vector( col_haystack_vector->get_chars(), col_haystack_vector->get_offsets(), diff --git a/be/src/vec/functions/if.cpp b/be/src/vec/functions/if.cpp index aac252f71af7f6..e1ca07aa8433fc 100644 --- a/be/src/vec/functions/if.cpp +++ b/be/src/vec/functions/if.cpp @@ -261,7 +261,7 @@ class FunctionIf : public IFunction { arg_cond.column)); } } else if (cond_const_col) { - if (cond_const_col->get_value()) { // if(true, null, else) + if (cond_const_col->get_value()) { // if(true, null, else) block.get_by_position(result).column = block.get_by_position(result).type->create_column()->clone_resized( input_rows_count); @@ -302,7 +302,7 @@ class FunctionIf : public IFunction { std::move(negated_null_map))); } } else if (cond_const_col) { - if (cond_const_col->get_value()) { // if(true, then, NULL) + if (cond_const_col->get_value()) { // if(true, then, NULL) block.get_by_position(result).column = make_nullable_column_if_not(arg_then.column); } else { // if(false, then, NULL) @@ -521,7 +521,7 @@ class FunctionIf : public IFunction { if (cond_const_col) { block.get_by_position(result).column = - cond_const_col->get_value() ? arg_then.column : arg_else.column; + cond_const_col->get_value() ? arg_then.column : arg_else.column; return Status::OK(); } diff --git a/be/src/vec/functions/int_div.cpp b/be/src/vec/functions/int_div.cpp index 2d416a24422e62..46fbbef3f77424 100644 --- a/be/src/vec/functions/int_div.cpp +++ b/be/src/vec/functions/int_div.cpp @@ -80,8 +80,8 @@ class FunctionIntDiv : public IFunction { ColumnPtr column_result = nullptr; column_result = - Impl::constant_constant(column_left_ptr->template get_value(), - column_right_ptr->template get_value()); + Impl::constant_constant(column_left_ptr->template get_value(), + column_right_ptr->template get_value()); return ColumnConst::create(std::move(column_result), column_left->size()); } @@ -91,14 +91,14 @@ class FunctionIntDiv : public IFunction { DCHECK(column_right_ptr != nullptr); return Impl::vector_constant(column_left->get_ptr(), - column_right_ptr->template get_value()); + column_right_ptr->template get_value()); } ColumnPtr constant_vector(ColumnPtr column_left, ColumnPtr column_right) const { const auto* column_left_ptr = assert_cast(column_left.get()); DCHECK(column_left_ptr != nullptr); - return Impl::constant_vector(column_left_ptr->template get_value(), + return Impl::constant_vector(column_left_ptr->template get_value(), column_right->get_ptr()); } diff --git a/be/src/vec/functions/math.cpp b/be/src/vec/functions/math.cpp index 41eb13c8989f1d..e7673d2c700a44 100644 --- a/be/src/vec/functions/math.cpp +++ b/be/src/vec/functions/math.cpp @@ -700,7 +700,7 @@ class FunctionMathBinary : public IFunction { auto& n = null_map->get_data(); size_t size = a.size(); for (size_t i = 0; i < size; ++i) { - c[i] = Impl::apply(a[i], column_right_ptr->template get_value(), n[i]); + c[i] = Impl::apply(a[i], column_right_ptr->template get_value(), n[i]); } return ColumnNullable::create(std::move(column_result), std::move(null_map)); } else { @@ -708,7 +708,7 @@ class FunctionMathBinary : public IFunction { auto& c = column_result->get_data(); size_t size = a.size(); for (size_t i = 0; i < size; ++i) { - c[i] = Impl::apply(a[i], column_right_ptr->template get_value()); + c[i] = Impl::apply(a[i], column_right_ptr->template get_value()); } return column_result; } @@ -727,7 +727,7 @@ class FunctionMathBinary : public IFunction { auto& n = null_map->get_data(); size_t size = b.size(); for (size_t i = 0; i < size; ++i) { - c[i] = Impl::apply(column_left_ptr->template get_value(), b[i], n[i]); + c[i] = Impl::apply(column_left_ptr->template get_value(), b[i], n[i]); } return ColumnNullable::create(std::move(column_result), std::move(null_map)); } else { @@ -735,7 +735,7 @@ class FunctionMathBinary : public IFunction { auto& c = column_result->get_data(); size_t size = b.size(); for (size_t i = 0; i < size; ++i) { - c[i] = Impl::apply(column_left_ptr->template get_value(), b[i]); + c[i] = Impl::apply(column_left_ptr->template get_value(), b[i]); } return column_result; } diff --git a/be/src/vec/functions/modulo.cpp b/be/src/vec/functions/modulo.cpp index b77ad4c0298f78..e371afc87aaa4f 100644 --- a/be/src/vec/functions/modulo.cpp +++ b/be/src/vec/functions/modulo.cpp @@ -128,11 +128,22 @@ class FunctionMod : public IFunction { auto max_and_multiplier = Impl::get_max_and_multiplier( type_left, type_right, type_result); + typename PrimitiveTypeTraits::ColumnItemType + left_tmp; + auto left_src = + column_left_ptr + ->template get_value(); + std::memcpy(&left_tmp, &left_src, sizeof(left_src)); + typename PrimitiveTypeTraits::ColumnItemType + right_tmp; + auto right_src = + column_right_ptr + ->template get_value(); + std::memcpy(&right_tmp, &right_src, sizeof(right_src)); column_result = Impl::constant_constant( - column_left_ptr->template get_value(), - column_right_ptr->template get_value(), - max_and_multiplier.first, max_and_multiplier.second, - type_result, check_overflow_for_decimal); + left_tmp, right_tmp, max_and_multiplier.first, + max_and_multiplier.second, type_result, + check_overflow_for_decimal); return true; })) { throw Exception(ErrorCode::INTERNAL_ERROR, @@ -145,12 +156,22 @@ class FunctionMod : public IFunction { remove_nullable(res_data_type).get(), [&](const auto& type_result) { auto max_and_multiplier = Impl::get_max_and_multiplier( type_left, type_right, type_result); - + typename PrimitiveTypeTraits::ColumnItemType + left_tmp; + auto left_src = + column_left_ptr + ->template get_value(); + std::memcpy(&left_tmp, &left_src, sizeof(left_src)); + typename PrimitiveTypeTraits::ColumnItemType + right_tmp; + auto right_src = + column_right_ptr + ->template get_value(); + std::memcpy(&right_tmp, &right_src, sizeof(right_src)); column_result = Impl::constant_constant( - column_left_ptr->template get_value(), - column_right_ptr->template get_value(), - max_and_multiplier.first, max_and_multiplier.second, - type_result, check_overflow_for_decimal); + left_tmp, right_tmp, max_and_multiplier.first, + max_and_multiplier.second, type_result, + check_overflow_for_decimal); return true; })) { throw Exception(ErrorCode::INTERNAL_ERROR, @@ -159,9 +180,13 @@ class FunctionMod : public IFunction { } } } else { - column_result = Impl::constant_constant( - column_left_ptr->template get_value(), - column_right_ptr->template get_value()); + typename PrimitiveTypeTraits::ColumnItemType left_tmp; + auto left_src = column_left_ptr->template get_value(); + std::memcpy(&left_tmp, &left_src, sizeof(left_src)); + typename PrimitiveTypeTraits::ColumnItemType right_tmp; + auto right_src = column_right_ptr->template get_value(); + std::memcpy(&right_tmp, &right_src, sizeof(right_src)); + column_result = Impl::constant_constant(left_tmp, right_tmp); } return ColumnConst::create(std::move(column_result), column_left->size()); @@ -181,11 +206,15 @@ class FunctionMod : public IFunction { remove_nullable(res_data_type).get(), [&](const auto& type_result) { auto max_and_multiplier = Impl::get_max_and_multiplier( type_left, type_right, type_result); - res = Impl::vector_constant( - column_left->get_ptr(), - column_right_ptr->template get_value(), - max_and_multiplier.first, max_and_multiplier.second, - type_result, check_overflow_for_decimal); + typename PrimitiveTypeTraits::ColumnItemType + tmp; + auto src = column_right_ptr + ->template get_value(); + std::memcpy(&tmp, &src, sizeof(src)); + res = Impl::vector_constant(column_left->get_ptr(), tmp, + max_and_multiplier.first, + max_and_multiplier.second, type_result, + check_overflow_for_decimal); return true; })) { throw Exception(ErrorCode::INTERNAL_ERROR, @@ -198,11 +227,15 @@ class FunctionMod : public IFunction { remove_nullable(res_data_type).get(), [&](const auto& type_result) { auto max_and_multiplier = Impl::get_max_and_multiplier( type_left, type_right, type_result); - res = Impl::vector_constant( - column_left->get_ptr(), - column_right_ptr->template get_value(), - max_and_multiplier.first, max_and_multiplier.second, - type_result, check_overflow_for_decimal); + typename PrimitiveTypeTraits::ColumnItemType + tmp; + auto src = column_right_ptr + ->template get_value(); + std::memcpy(&tmp, &src, sizeof(src)); + res = Impl::vector_constant(column_left->get_ptr(), tmp, + max_and_multiplier.first, + max_and_multiplier.second, type_result, + check_overflow_for_decimal); return true; })) { throw Exception(ErrorCode::INTERNAL_ERROR, @@ -211,9 +244,10 @@ class FunctionMod : public IFunction { } } } else { - res = Impl::vector_constant( - column_left->get_ptr(), - column_right_ptr->template get_value()); + typename PrimitiveTypeTraits::ColumnItemType tmp; + auto src = column_right_ptr->template get_value(); + std::memcpy(&tmp, &src, sizeof(src)); + res = Impl::vector_constant(column_left->get_ptr(), tmp); } return res; } @@ -232,11 +266,15 @@ class FunctionMod : public IFunction { remove_nullable(res_data_type).get(), [&](const auto& type_result) { auto max_and_multiplier = Impl::get_max_and_multiplier( type_left, type_right, type_result); - res = Impl::constant_vector( - column_left_ptr->template get_value(), - column_right->get_ptr(), max_and_multiplier.first, - max_and_multiplier.second, type_result, - check_overflow_for_decimal); + typename PrimitiveTypeTraits::ColumnItemType + tmp; + auto src = column_left_ptr + ->template get_value(); + std::memcpy(&tmp, &src, sizeof(src)); + res = Impl::constant_vector(tmp, column_right->get_ptr(), + max_and_multiplier.first, + max_and_multiplier.second, type_result, + check_overflow_for_decimal); return true; })) { throw Exception(ErrorCode::INTERNAL_ERROR, @@ -249,11 +287,15 @@ class FunctionMod : public IFunction { remove_nullable(res_data_type).get(), [&](const auto& type_result) { auto max_and_multiplier = Impl::get_max_and_multiplier( type_left, type_right, type_result); - res = Impl::constant_vector( - column_left_ptr->template get_value(), - column_right->get_ptr(), max_and_multiplier.first, - max_and_multiplier.second, type_result, - check_overflow_for_decimal); + typename PrimitiveTypeTraits::ColumnItemType + tmp; + auto src = column_left_ptr + ->template get_value(); + std::memcpy(&tmp, &src, sizeof(src)); + res = Impl::constant_vector(tmp, column_right->get_ptr(), + max_and_multiplier.first, + max_and_multiplier.second, type_result, + check_overflow_for_decimal); return true; })) { throw Exception(ErrorCode::INTERNAL_ERROR, @@ -262,8 +304,10 @@ class FunctionMod : public IFunction { } } } else { - res = Impl::constant_vector(column_left_ptr->template get_value(), - column_right->get_ptr()); + typename PrimitiveTypeTraits::ColumnItemType tmp; + auto src = column_left_ptr->template get_value(); + std::memcpy(&tmp, &src, sizeof(src)); + res = Impl::constant_vector(tmp, column_right->get_ptr()); } return res; } diff --git a/be/src/vec/functions/multiply.cpp b/be/src/vec/functions/multiply.cpp index 67da59904f9b58..b37d1a8c9798c6 100644 --- a/be/src/vec/functions/multiply.cpp +++ b/be/src/vec/functions/multiply.cpp @@ -38,6 +38,8 @@ struct MultiplyIntegralImpl { static constexpr bool result_is_decimal = false; using Arg = typename PrimitiveTypeTraits::ColumnItemType; using ColumnType = typename PrimitiveTypeTraits::ColumnType; + static constexpr PrimitiveType ArgAPType = Type; + static constexpr PrimitiveType ArgBPType = Type; using ArgA = Arg; using ArgB = Arg; using DataTypeA = typename PrimitiveTypeTraits::DataType; @@ -112,6 +114,8 @@ struct MultiplyDecimalImpl { (TypeA != TYPE_DECIMALV2 && TypeB != TYPE_DECIMALV2)); using ArgA = typename PrimitiveTypeTraits::ColumnItemType; using ArgB = typename PrimitiveTypeTraits::ColumnItemType; + static constexpr PrimitiveType ArgAPType = TypeA; + static constexpr PrimitiveType ArgBPType = TypeB; using ArgNativeTypeA = typename PrimitiveTypeTraits::CppNativeType; using ArgNativeTypeB = typename PrimitiveTypeTraits::CppNativeType; using DataTypeA = typename PrimitiveTypeTraits::DataType; @@ -537,13 +541,22 @@ class FunctionMultiply : public IFunction { remove_nullable(res_data_type).get(), [&](const auto& type_result) { auto max_and_multiplier = Impl::get_max_and_multiplier( type_left, type_right, type_result); - + typename PrimitiveTypeTraits::ColumnItemType + left_tmp; + auto left_src = + column_left_ptr + ->template get_value(); + std::memcpy(&left_tmp, &left_src, sizeof(left_src)); + typename PrimitiveTypeTraits::ColumnItemType + right_tmp; + auto right_src = + column_right_ptr + ->template get_value(); + std::memcpy(&right_tmp, &right_src, sizeof(right_src)); column_result = Impl::constant_constant( - column_left_ptr->template get_value(), - column_right_ptr->template get_value(), - type_left, type_right, max_and_multiplier.first, - max_and_multiplier.second, type_result, - check_overflow_for_decimal); + left_tmp, right_tmp, type_left, type_right, + max_and_multiplier.first, max_and_multiplier.second, + type_result, check_overflow_for_decimal); return true; })) { throw Exception(ErrorCode::INTERNAL_ERROR, @@ -556,13 +569,22 @@ class FunctionMultiply : public IFunction { remove_nullable(res_data_type).get(), [&](const auto& type_result) { auto max_and_multiplier = Impl::get_max_and_multiplier( type_left, type_right, type_result); - + typename PrimitiveTypeTraits::ColumnItemType + left_tmp; + auto left_src = + column_left_ptr + ->template get_value(); + std::memcpy(&left_tmp, &left_src, sizeof(left_src)); + typename PrimitiveTypeTraits::ColumnItemType + right_tmp; + auto right_src = + column_right_ptr + ->template get_value(); + std::memcpy(&right_tmp, &right_src, sizeof(right_src)); column_result = Impl::constant_constant( - column_left_ptr->template get_value(), - column_right_ptr->template get_value(), - type_left, type_right, max_and_multiplier.first, - max_and_multiplier.second, type_result, - check_overflow_for_decimal); + left_tmp, right_tmp, type_left, type_right, + max_and_multiplier.first, max_and_multiplier.second, + type_result, check_overflow_for_decimal); return true; })) { throw Exception(ErrorCode::INTERNAL_ERROR, @@ -571,9 +593,13 @@ class FunctionMultiply : public IFunction { } } } else { - column_result = Impl::constant_constant( - column_left_ptr->template get_value(), - column_right_ptr->template get_value()); + typename PrimitiveTypeTraits::ColumnItemType left_tmp; + auto left_src = column_left_ptr->template get_value(); + std::memcpy(&left_tmp, &left_src, sizeof(left_src)); + typename PrimitiveTypeTraits::ColumnItemType right_tmp; + auto right_src = column_right_ptr->template get_value(); + std::memcpy(&right_tmp, &right_src, sizeof(right_src)); + column_result = Impl::constant_constant(left_tmp, right_tmp); } return ColumnConst::create(std::move(column_result), column_left->size()); @@ -593,12 +619,15 @@ class FunctionMultiply : public IFunction { remove_nullable(res_data_type).get(), [&](const auto& type_result) { auto max_and_multiplier = Impl::get_max_and_multiplier( type_left, type_right, type_result); - res = Impl::vector_constant( - column_left->get_ptr(), - column_right_ptr->template get_value(), - type_left, type_right, max_and_multiplier.first, - max_and_multiplier.second, type_result, - check_overflow_for_decimal); + typename PrimitiveTypeTraits::ColumnItemType + tmp; + auto src = column_right_ptr + ->template get_value(); + std::memcpy(&tmp, &src, sizeof(src)); + res = Impl::vector_constant(column_left->get_ptr(), tmp, type_left, + type_right, max_and_multiplier.first, + max_and_multiplier.second, type_result, + check_overflow_for_decimal); return true; })) { throw Exception(ErrorCode::INTERNAL_ERROR, @@ -611,12 +640,15 @@ class FunctionMultiply : public IFunction { remove_nullable(res_data_type).get(), [&](const auto& type_result) { auto max_and_multiplier = Impl::get_max_and_multiplier( type_left, type_right, type_result); - res = Impl::vector_constant( - column_left->get_ptr(), - column_right_ptr->template get_value(), - type_left, type_right, max_and_multiplier.first, - max_and_multiplier.second, type_result, - check_overflow_for_decimal); + typename PrimitiveTypeTraits::ColumnItemType + tmp; + auto src = column_right_ptr + ->template get_value(); + std::memcpy(&tmp, &src, sizeof(src)); + res = Impl::vector_constant(column_left->get_ptr(), tmp, type_left, + type_right, max_and_multiplier.first, + max_and_multiplier.second, type_result, + check_overflow_for_decimal); return true; })) { throw Exception(ErrorCode::INTERNAL_ERROR, @@ -625,9 +657,10 @@ class FunctionMultiply : public IFunction { } } } else { - res = Impl::vector_constant( - column_left->get_ptr(), - column_right_ptr->template get_value()); + typename PrimitiveTypeTraits::ColumnItemType tmp; + auto src = column_right_ptr->template get_value(); + std::memcpy(&tmp, &src, sizeof(src)); + res = Impl::vector_constant(column_left->get_ptr(), tmp); } return res; } @@ -646,11 +679,15 @@ class FunctionMultiply : public IFunction { remove_nullable(res_data_type).get(), [&](const auto& type_result) { auto max_and_multiplier = Impl::get_max_and_multiplier( type_left, type_right, type_result); - res = Impl::constant_vector( - column_left_ptr->template get_value(), - column_right->get_ptr(), type_left, type_right, - max_and_multiplier.first, max_and_multiplier.second, - type_result, check_overflow_for_decimal); + typename PrimitiveTypeTraits::ColumnItemType + tmp; + auto src = column_left_ptr + ->template get_value(); + std::memcpy(&tmp, &src, sizeof(src)); + res = Impl::constant_vector(tmp, column_right->get_ptr(), type_left, + type_right, max_and_multiplier.first, + max_and_multiplier.second, type_result, + check_overflow_for_decimal); return true; })) { throw Exception(ErrorCode::INTERNAL_ERROR, @@ -663,11 +700,15 @@ class FunctionMultiply : public IFunction { remove_nullable(res_data_type).get(), [&](const auto& type_result) { auto max_and_multiplier = Impl::get_max_and_multiplier( type_left, type_right, type_result); - res = Impl::constant_vector( - column_left_ptr->template get_value(), - column_right->get_ptr(), type_left, type_right, - max_and_multiplier.first, max_and_multiplier.second, - type_result, check_overflow_for_decimal); + typename PrimitiveTypeTraits::ColumnItemType + tmp; + auto src = column_left_ptr + ->template get_value(); + std::memcpy(&tmp, &src, sizeof(src)); + res = Impl::constant_vector(tmp, column_right->get_ptr(), type_left, + type_right, max_and_multiplier.first, + max_and_multiplier.second, type_result, + check_overflow_for_decimal); return true; })) { throw Exception(ErrorCode::INTERNAL_ERROR, @@ -676,8 +717,10 @@ class FunctionMultiply : public IFunction { } } } else { - res = Impl::constant_vector(column_left_ptr->template get_value(), - column_right->get_ptr()); + typename PrimitiveTypeTraits::ColumnItemType tmp; + auto src = column_left_ptr->template get_value(); + std::memcpy(&tmp, &src, sizeof(src)); + res = Impl::constant_vector(tmp, column_right->get_ptr()); } return res; } diff --git a/be/src/vec/json/parse2column.cpp b/be/src/vec/json/parse2column.cpp index 127241b366734e..607548117327ef 100644 --- a/be/src/vec/json/parse2column.cpp +++ b/be/src/vec/json/parse2column.cpp @@ -107,7 +107,7 @@ class FieldVisitorReplaceScalars : public StaticVisitor { FieldVisitorReplaceScalars(const Field& replacement_, size_t num_dimensions_to_keep_) : replacement(replacement_), num_dimensions_to_keep(num_dimensions_to_keep_) {} template - Field operator()(const typename PrimitiveTypeTraits::NearestFieldType& x) const { + Field operator()(const typename PrimitiveTypeTraits::CppType& x) const { if constexpr (T == TYPE_ARRAY) { if (num_dimensions_to_keep == 0) { return replacement; diff --git a/be/test/expected_result/vec/columns/column_variant_byte_size.out b/be/test/expected_result/vec/columns/column_variant_byte_size.out index 5b4929c41c58aa..31205bae301a5c 100644 --- a/be/test/expected_result/vec/columns/column_variant_byte_size.out +++ b/be/test/expected_result/vec/columns/column_variant_byte_size.out @@ -1,2 +1,2 @@ -column: variant with byte_size: 11318398 -11318398 \ No newline at end of file +column: variant with byte_size: 11155317 +11155317 \ No newline at end of file diff --git a/be/test/expected_result/vec/columns/column_variant_update_crc_with_value.out b/be/test/expected_result/vec/columns/column_variant_update_crc_with_value.out index 6028c54cd75d59..03d5ccbd3fda4d 100644 --- a/be/test/expected_result/vec/columns/column_variant_update_crc_with_value.out +++ b/be/test/expected_result/vec/columns/column_variant_update_crc_with_value.out @@ -1 +1 @@ -column: variant with hashes: 2267522287 with ptr: 1756 \ No newline at end of file +column: variant with hashes: 3573485114 with ptr: 1756 \ No newline at end of file diff --git a/be/test/expected_result/vec/columns/column_variant_update_crc_with_value.out_with_nullmap b/be/test/expected_result/vec/columns/column_variant_update_crc_with_value.out_with_nullmap index 6028c54cd75d59..03d5ccbd3fda4d 100644 --- a/be/test/expected_result/vec/columns/column_variant_update_crc_with_value.out_with_nullmap +++ b/be/test/expected_result/vec/columns/column_variant_update_crc_with_value.out_with_nullmap @@ -1 +1 @@ -column: variant with hashes: 2267522287 with ptr: 1756 \ No newline at end of file +column: variant with hashes: 3573485114 with ptr: 1756 \ No newline at end of file diff --git a/be/test/expected_result/vec/columns/column_variant_update_crcs_with_value.out b/be/test/expected_result/vec/columns/column_variant_update_crcs_with_value.out index ec1aaede6244ad..27853e883d8914 100644 --- a/be/test/expected_result/vec/columns/column_variant_update_crcs_with_value.out +++ b/be/test/expected_result/vec/columns/column_variant_update_crcs_with_value.out @@ -1 +1 @@ -column: variant with hashes: [1023594347,3348501307,3348501307,750646757,1023594347,1285578128,750646757,648865016,750646757,1850317735,1660060187,1978118196,3348501307,1660060187,1285578128,1978118196,1285578128,1978118196,1660060187,1285578128,3348501307,750646757,80012773,1186024589,1023594347,1186024589,750646757,80012773,1660060187,750646757,1285578128,1023594347,80012773,1978118196,750646757,648865016,1023594347,648865016,3348501307,1023594347,1978118196,3348501307,1285578128,80012773,3348501307,3348501307,1186024589,1660060187,648865016,80012773,1850317735,1186024589,3348501307,750646757,3348501307,1186024589,648865016,1023594347,3348501307,80012773,1978118196,1186024589,1660060187,1023594347,3348501307,1023594347,1660060187,1850317735,1660060187,1023594347,80012773,1186024589,1850317735,80012773,1978118196,750646757,1023594347,1285578128,3348501307,1660060187,648865016,648865016,80012773,1285578128,1978118196,80012773,1023594347,3348501307,3348501307,1978118196,1285578128,3348501307,80012773,3348501307,648865016,648865016,1186024589,750646757,1978118196,3348501307,1475932078,3031791848,1475932078,2847341008,3031791848,867831412,2847341008,3913229208,3913229208,3913229208,1475932078,3947181464,2847341008,3913229208,867831412,3913229208,867831412,2847341008,1475932078,4041940491,3031791848,1475932078,4041940491,867831412,867831412,4041940491,4041940491,3913229208,867831412,3913229208,3913229208,1475932078,1475932078,2847341008,867831412,3913229208,1475932078,4041940491,867831412,3913229208,2847341008,3031791848,4041940491,867831412,2847341008,4041940491,3913229208,867831412,1475932078,2847341008,3947181464,867831412,1475932078,867831412,867831412,867831412,3031791848,1475932078,3913229208,4041940491,3947181464,3913229208,867831412,1475932078,867831412,2847341008,2847341008,3913229208,4041940491,2847341008,4041940491,867831412,3031791848,1475932078,4041940491,3913229208,3947181464,867831412,3947181464,867831412,1475932078,1475932078,2847341008,2847341008,4041940491,3947181464,3913229208,3031791848,2847341008,2847341008,1475932078,3947181464,3031791848,4041940491,4041940491,3947181464,2847341008,867831412,1475932078,3031791848,3913229208,1475932078,209602798,1519515423,627494611,172855780,1519515423,3348501307,1317779294,1519515423,859160306,3525052757,627494611,1701595328,1317779294,1386025943,2789129758,3348501307,859160306,2789129758,2789129758,3348501307,3348501307,1317779294,859160306,1519515423,172855780,1317779294,627494611,3525052757,209602798,3348501307,1701595328,3525052757,1519515423,1317779294,3525052757,2789129758,1317779294,3348501307,3348501307,2789129758,3348501307,1655266202,912281971,859160306,627494611,1701595328,1701595328,1655266202,2789129758,912281971,172855780,912281971,859160306,209602798,1701595328,1519515423,1701595328,1655266202,3348501307,1655266202,3348501307,912281971,1386025943,209602798,1519515423,172855780,1701595328,912281971,1655266202,1519515423,3348501307,172855780,1317779294,1386025943,172855780,859160306,1519515423,3348501307,3525052757,3348501307,859160306,627494611,2789129758,1317779294,1701595328,627494611,2789129758,3348501307,172855780,859160306,859160306,1655266202,1701595328,859160306,209602798,627494611,3348501307,1386025943,1519515423,3348501307,1475932078,3913229208,2227214797,3913229208,3789747863,3913229208,510528736,3913229208,3789747863,3789747863,3913229208,3837297611,2884501567,3106970526,1486651970,3913229208,3913229208,2870437049,3913229208,2193573656,3913229208,3969492334,3789747863,3789747863,3789747863,3789747863,922224195,1404624078,3913229208,3913229208,894904681,2945052265,3913229208,3789747863,3789747863,3789747863,3789747863,3913229208,3803986276,952637510,3590416673,2982256563,3789747863,527179391,2488421031,3913229208,3913229208,3103095817,3819337278,3789747863,1778301207,4209926658,3913229208,3913229208,2263431414,1475703906,3913229208,3789747863,662586099,3789747863,2152872312,3913229208,3711287442,2774706557,734011670,3913229208,3913229208,770703466,3913229208,2061950507,3789747863,3844879621,2305665715,3913229208,1905805162,2076289177,2276582000,2862932646,3913229208,3789747863,3789747863,1790490335,3789747863,2673207464,3913229208,3913229208,2752541153,3913229208,61063314,3913229208,3913229208,3913229208,1570067002,927843573,4109279470,3789747863,3913229208,3913229208,2279442698,3789747863,3789747863,1475932078,4237828992,2008303805,1653940526,112374245,3733730049,4285855827,2984707496,3700321127,900459062,3907550024,4167518769,3307649970,840115646,775955525,1987254777,2928806398,2417368046,4219959955,2983299479,3276959282,3658804321,3252716672,2671334707,721963254,252419266,349309873,1834082302,1073459774,594613583,3444701572,1657736054,2110120670,3505457392,1181468239,46979895,4003063492,2822172505,190636968,3480188160,4123233519,3921153207,1261617742,57904453,3661577271,2727620890,1406550753,806342488,1248968977,153207857,3850472635,1770926790,1938804129,68353157,4116010128,145263641,4264464151,1502905642,2138020051,206301486,3586908682,2851690921,2483750349,2306514692,3203273726,1444023869,3739283153,234059290,4159529475,841927421,998674515,3214677553,949805070,2760970111,1820470762,3114814069,100231172,2754194091,4202888641,423086264,2132589211,2385984422,2036753536,2238884718,2787517797,2014566204,1186492516,3777309008,1916247349,3642239414,1983143352,698751093,1937501638,2032881382,1672472094,1113661848,2866901201,300997757,1395117189,2137342595,4062985663,1475932078,1532900103,4102217294,1861653971,86232176,3878403598,856543581,1990831151,1389279149,2648483542,610102681,1125676472,2131299136,1431885405,648643318,1154374898,1415151150,553323391,2444387708,3338267287,462740891,3531993375,2545773242,3571033511,4161475646,578643968,32999274,2693211556,4081847962,1977267376,16015138,4191625365,3165203105,4042815043,3530908945,2930385635,514791064,2381228895,2582983294,2733154394,2723419908,2102014736,4026074225,2733691661,1863037094,260662800,291487530,418929061,2054872369,67313275,3802694445,3580006222,4048666199,3217207799,4162195315,3127763070,3422048662,1026351827,246213353,3841167754,1545418915,1870495953,419849037,489370714,3037505443,3175710511,3183483743,3067513982,3915479902,1518386329,3972813200,1407358669,2465219998,2872752475,1819131689,2712973792,2983061508,3050657900,2968375702,614867631,3126861552,3321798155,3633271578,661359661,935360676,2459635599,400606706,2234201005,289237747,3823144031,3045874506,532981447,2427139017,1787447513,3529392557,1390139246,3410864086,2906135130,3533245323,1302222766,60426080,1475932078,3821307458,3267483048,3678593449,1987368558,1372039361,2116402128,902325561,14676458,4205872991,284754422,761961319,1674190002,4167725589,1560684105,3394419928,3789385250,2732301246,2375493248,696532534,3932925440,2125120050,1663239372,1943113553,538100978,926229152,1378385960,1088489987,3649442146,83345092,3072167853,861979694,3345948570,329056656,1852696603,953614521,2412121146,1455304982,2016720967,1019662472,3889415001,2242446190,3751168679,1065796466,431925897,557433494,3314126543,1579778508,2348561599,1405549853,3835521876,1362788148,3089016189,1743993695,2231007820,3064185354,1836043055,929946084,3204192861,3942771720,2101319852,2662155723,3334980251,613875170,1793892769,510037288,2475133148,716514594,3379275905,727614721,2566562724,236070862,4102414313,21235350,186075835,4139730481,1258893555,2141602116,3382940338,2013202621,1432283856,3068870504,4179200396,793069721,1513643002,2052642492,1974136374,2616712913,101081864,446688245,1177254224,2509066101,2004131098,194002834,1438287892,2325675989,2681487709,2856779751,802126067,3977626866,919162971,1475932078,1137081298,337542302,3284884598,1773676428,188465278,3891293334,1349916049,3657755687,3451149335,1778783341,2306226865,352545257,30317693,2359603050,1234701875,1774508416,3716537525,1387435890,4045098628,3903474068,32629003,118178606,3273937441,3914364692,2353886095,2826420805,3441888086,3345249612,2754847602,1721998878,4135490579,1948326393,2633740817,205560752,2559828432,4008747519,718784075,1350663777,2707354727,232503578,1094980036,3215154101,2414399157,3786811848,3561699290,3723584653,4067691960,1504215167,281997699,235531702,42481190,3445782416,15083132,3510922785,1302166824,1354343922,3882424411,1541555833,111901156,977232459,2099073180,1268917631,232672324,478753186,1478119740,3486668107,531376819,3664431455,1061580509,1477256723,2073744111,2056257964,2158626208,3067464461,1294964912,1459438953,3362223921,2781734454,379986224,1295375361,3283668508,824874935,2250241074,2568691077,513030551,2024475634,1916448804,1055216648,4063477824,1473670213,607304147,1303678041,3222238822,48604406,700507791,3871034329,807782587,302343498,3814693210,47033331,1475932078,1475932078,2186898052,1534921777,2754747580,3539438616,2072550807,3862243513,3388554620,597381227,3887754035,1834726908,565128977,2943960712,2339404461,4054273983,649110147,1978074792,1269192803,899089643,1742443568,1655919025,2948223609,3267544278,2984237480,847936237,3234146950,2195266427,430377206,3162992278,3933838920,2511536970,1997343675,3691980458,2265098137,2216379065,589674916,420279219,1363494854,1476431342,2369950088,3066718386,1318848225,834229161,2671101789,2435992496,1478940721,2266104978,2224538860,3693790829,1810483630,3900502355,2646989179,2239226925,1385611592,28519677,3216104696,2765690266,1672190596,991460047,913276224,1657986010,485134676,3813222821,208923628,2789539156,1301242384,3465677171,2357001224,890073919,3056960214,4284214637,1887431665,4093835118,3885012760,1760124998,3824332994,4202254667,3078280703,4188009210,3151802351,2213603394,3771887961,1049480879,1920093458,1596525229,970144709,3709106209,2144843342,4078254904,3496281291,2251727894,606476136,2718208755,4260698614,758409253,2537061395,1525070089,4127561221,183178470,851261457,1521262235,1475932078,2401505510,590156362,2195364622,2822989073,1956352541,3266950729,558321529,2293627180,3698923473,3217928243,2160044778,1513511982,3203192056,795412505,1519701763,468810285,3835858205,293340943,2072538334,616118151,1901381734,459201756,2456374687,3277587658,2596066538,2854128764,2581881353,1739861919,2664437933,3569307965,1991218382,4174885870,2088623300,481855255,701169116,1481157542,2360893067,4194641932,4030699666,171161796,1749474092,3510021112,2035746501,4075436995,1001174284,2657818062,3358764468,494721765,3914431910,3744616923,1851381768,1010480880,2317860844,1016352437,3565762644,1242765766,2155066206,2386513543,2734139700,643779138,1954132151,1633899924,2159095599,3100651720,1967765976,3577247558,4214933066,3761638261,2166476500,2601123522,95968551,2658898357,1942155268,373899699,426507988,1694055557,528324004,598693430,3602955889,3964128899,4271729452,3518429585,1246266208,42759873,877900272,776016407,98747343,3414738613,2082328867,211091088,2850277844,1462893947,1268950,1729365346,3923525612,1301892772,3690860050,570808415,2025216958,324627133,1475932078,750437406,4009796778,959885984,3504908289,2871392054,1633653256,3253142563,2156146746,1721344834,1635781887,2659114823,3598646234,1468783300,2870341610,3475879873,2002343311,3645411615,4081076334,2006277628,3485962356,3780305649,4294425050,1710536722,454554056,3598505776,964390392,4278297890,2591804036,2422756079,2016315413,4069982864,2555096892,525716090,4252418588,1162917991,3487229378,4051645968,603394097,2119922039,1410808687,1559055702,128755654,1836120118,3180535391,256037813,414970214,80668479,1266317121,1618856420,2778534700,88706368,4003469182,244369109,3964992372,3607273746,3845301153,3203834274,1201178379,136774736,714379241,3758001736,1407753813,2215310631,231593609,3508376742,726172698,3462502993,308862704,3381383376,2054048712,1603949764,1187806448,3465858463,2443342986,454592385,1267514923,3824039239,820261283,14321907,3379396725,285065871,3870785185,2148471288,1217842933,758483506,3415754454,1216175182,2680179535,908976250,333928532,2049754406,1486253607,1907605185,639814098,2184148615,465406831,1013332334,754673927,1363150469,3294070424,1475932078,1475932078,1399002379,69903028,2045412938,4070581251,3953661059,4215234691,1522179298,454832969,3746418501,923142845,2207925753,4110138591,2591678063,1318518983,401470965,1846943743,3390726045,2518849893,4110707178,62480325,2877043601,3070976711,961160657,4105976198,1227085521,1368728002,3026156015,519076114,3890736079,3930791341,2361445251,2679194294,2956507517,3203563826,1372542504,284995548,4014277213,2497936966,3570646303,1371498076,3587312806,4007230579,263415998,266785166,2207997077,524718430,3712810010,2333052247,1764657277,3925990686,656710043,236349442,1243241737,3562657487,101768152,594885019,3353890438,248637421,4163784863,2463028965,3087711866,3145065943,2498347723,2978504649,375824685,670272093,3205028309,2945473674,553204994,3811672753,2297141915,2032925401,1823853057,1084642587,3705109053,1647674663,382611201,2223468574,425881799,1212575818,4268388814,2757135639,380915719,4005487918,700708481,3213895205,4112941219,3945014198,2974857187,3933788052,863990462,3919778373,1210830815,1024068503,3866486624,808077332,4155392450,4239861657,102259119,3248669336,1475932078,4143537550,4110844364,2130344600,1037694712,1771784288,3957395857,3452626355,3598856197,3963056127,1730385093,3726767546,760577327,1554502290,1734707720,632755741,3672183647,3404563514,2872596611,4238089366,3468680706,1516826468,1720030364,3173270639,329145023,2513738780,356390903,1915465131,1518434931,2862084534,884236893,2025428714,3254290528,1167711490,3980365243,2459379091,3854474651,136860953,844385548,2221618579,682855689,456025253,2405583723,2340864839,2420806889,636310042,3720937928,3838284871,2920529973,385811128,2019376507,3191787557,297236226,3876865055,1512149468,3958263151,1506601118,3561603944,1832305547,1602136303,2047183728,1842993317,999387732,1543924992,1032714700,2475090073,1246533462,98328826,3380939593,2418372456,1091706853,1577319206,1652841675,3718010629,1875243003,2853971876,3745030653,4270728476,1838992389,1432171170,2022616821,1336290229,3060042815,422741477,495639987,2092702949,2324300999,1232550728,2197471467,1723598945,4282404971,3391723275,836386384,2947445806,3743773240,2016422363,1814869952,3719056997,3313326682,1976877341,3124971744,1475932078,3016712956,1979797646,1183515206,3534963753,1840905633,1115956164,2759363593,2629166892,3814908553,907691709,2292938191,1040336648,1017800108,2337408522,1787992321,2049172588,738405944,4179832654,3341853796,638620649,2175441604,606296248,3151483340,1006224888,1162250691,3116256816,3891443904,381435133,1444631482,2519726484,876448307,288477377,1854392216,2739850528,2394286189,2679660791,681060782,3130512933,1539605306,100308248,1071739370,721371342,2738127751,2859383570,3403494564,3114976111,1855668175,3802337993,2690398437,2071298015,3439878796,4133423232,207034957,3852639123,1303088352,3635701711,3728656177,583891943,2907159107,2077655146,448794230,615586219,3308587914,1013110249,1764042289,4235305553,2146012185,3099834910,105583757,1799893206,537541326,2458490698,3957386302,784866888,1613095013,1005074123,3464311052,3334928300,3627355317,1176559904,853428868,2239549241,1347546091,2577430824,1489475593,3852091630,4098197516,2599035380,4045357712,2718801380,1365947441,328110427,2164984020,673712497,214180116,30944860,1873013067,2037068428,1361829298,574671952,1475932078,962195008,3420982747,3692999298,66458682,2790067218,2018827531,1430599627,43533593,2356865485,1831563790,415629740,1997372031,464080575,949749522,2412642304,1740446828,75078428,3402860516,2846776447,2016818163,1027402406,4288815471,123994234,2058871005,415023610,630073727,4250732094,3148340743,69740661,2688142673,2538174055,3286707353,1823814761,685052682,608425056,304280323,3006054759,3228817403,2451214618,3582913323,3186710865,639505342,2256518546,2226677916,2925870131,3147601570,2876204287,3576984707,1947679012,464620125,1263359034,1485913353,2129875352,1649243501,899181607,3664570435,2959074822,188632213,3890386862,1189295059,2341664307,686389136,2686777569,3777651455,4271191967,3907398237,3329997800,2245760535,2057629287,1235004456,1203146418,207072182,1538416047,1122436982,396109090,4078712622,968436805,2509168532,546682907,1643950458,1375290490,3796103361,186132974,3465433298,2507246800,2952174864,1336559086,3011211570,896396982,33300456,2065219512,3984930034,88664090,3694504127,883798152,3554074050,2377310343,3332130883,1721420430,1527169100,1475932078,680640990,843521611,3080420495,1299572823,3251167534,3511253746,3910665117,558006339,2348056526,3071621499,2531998383,398357604,2782106744,1113615523,1081527243,236258719,2281899916,879898656,3416824033,3373745091,2576830007,358916927,145884860,2449261337,4092437372,3029453546,3998255648,4101825755,4035875946,4122325429,2663567998,1233167749,2616443039,2426503691,1255733128,2970769837,3340018879,1867404624,4052130641,386257033,3160695746,1689948893,2689174440,3645629961,3161728118,1568816772,437664960,2673165072,35426599,2655842707,1054329907,3457476931,269861916,2594549853,2597426616,157286671,3107938504,1774787540,277653450,1437285523,2361355041,4115420971,4252648429,3209110603,4005828126,621676976,3731902935,1936375901,77835554,1872327946,3566116711,3893310884,1376808856,1853101859,890970048,1993850901,237065659,3951861417,1874240106,3157307210,1189131065,582175755,2683890486,3256648034,1847265683,1121410699,1126372695,1846616866,583183091,1598670349,377956364,3639545782,798953284,1850715256,3379870641,839506987,3058043793,3577636145,969915554,2043424756,1475932078,477556300,4106365127,3696326584,2873151665,4029262087,1234428709,204991472,2115966412,4238600626,3941699655,2917880577,4164975643,1264145344,790310388,1144880034,3527071167,194022830,1860081722,2012356074,3775446025,1735344001,876112787,1865720872,1043451373,903861901,689306731,27781182,3461365781,2974330118,1946603787,1740189302,2680687692,2220396524,1475932078,1475932078,3407514427,107838651,1963388594,1597156853,1597156853,529193907,1322993309,1475932078,3209243126,529193907,4084504255,2680783133,1597156853,3547893342,1475932078,693672836,3828817421,2549966419,43653941,3051863181,2609827955,3144537318,1597156853,803820499,223143849,1475932078,4134697544,3609836080,788094979,3390278044,656212304,2663353824,529193907,4073884384,334165224,3936875123,865176824,3029480074,45221774,2221829444,1407402909,1599263895,835831332,2465648309,2622132624,775564599,1883700082,17928471,25653050,3334233039,3976330841,1254587112,1475932078,747823015,232007876,760925063,2518473540,37133442,2513286040,3210964464,1847985140,2690811871,2728082036,529193907,4187564740,119834965,1061802200,2691253584,1288304899,4032020751,4102933577,2433043907,1010674793,1597156853,4224450281,529193907,3948989217,2130025937,928004342,3208745299,374617435,1597156853,540054156,474637681,1310788065,1886378415,1475932078,529193907,3663910004,239382924,1644697274,3821159193,157609081,1604145703,431840946,139321933,2224907474,2527146356,2152749101,936271390,3403694283,119834965,1475932078] \ No newline at end of file +column: variant with hashes: [1023594347,3348501307,7038117,750646757,1023594347,1285578128,750646757,648865016,750646757,1850317735,1660060187,1978118196,7038117,1660060187,1285578128,1978118196,1285578128,1978118196,1660060187,1285578128,3348501307,750646757,80012773,1186024589,1023594347,1186024589,750646757,542292976,1660060187,750646757,1285578128,1023594347,542292976,1978118196,750646757,648865016,1023594347,648865016,3348501307,1023594347,1978118196,7038117,1285578128,80012773,7038117,3348501307,1186024589,1660060187,648865016,80012773,1850317735,1186024589,7038117,750646757,7038117,1186024589,648865016,1023594347,7038117,542292976,1978118196,1186024589,1660060187,1023594347,3348501307,1023594347,1660060187,1850317735,1660060187,1023594347,542292976,1186024589,1850317735,80012773,1978118196,750646757,1023594347,1285578128,7038117,1660060187,648865016,648865016,542292976,1285578128,1978118196,542292976,1023594347,3348501307,7038117,1978118196,1285578128,3348501307,542292976,3348501307,648865016,648865016,1186024589,750646757,1978118196,7038117,1475932078,3031791848,1475932078,2847341008,3031791848,867831412,2847341008,3913229208,3913229208,3913229208,1475932078,3947181464,2847341008,3913229208,867831412,3913229208,867831412,2847341008,1475932078,4041940491,3031791848,1475932078,4041940491,867831412,867831412,4041940491,4041940491,3913229208,867831412,3913229208,3913229208,1475932078,1475932078,2847341008,867831412,3913229208,1475932078,4041940491,867831412,3913229208,2847341008,3031791848,4041940491,867831412,2847341008,4041940491,3913229208,867831412,1475932078,2847341008,3947181464,867831412,1475932078,867831412,867831412,867831412,3031791848,1475932078,3913229208,4041940491,3947181464,3913229208,867831412,1475932078,867831412,2847341008,2847341008,3913229208,4041940491,2847341008,4041940491,867831412,3031791848,1475932078,4041940491,3913229208,3947181464,867831412,3947181464,867831412,1475932078,1475932078,2847341008,2847341008,4041940491,3947181464,3913229208,3031791848,2847341008,2847341008,1475932078,3947181464,3031791848,4041940491,4041940491,3947181464,2847341008,867831412,1475932078,3031791848,3913229208,1475932078,209602798,1519515423,627494611,172855780,1519515423,3348501307,1317779294,1519515423,859160306,3525052757,627494611,1701595328,1317779294,1386025943,2789129758,3348501307,859160306,2789129758,2789129758,3348501307,3348501307,1317779294,859160306,1519515423,172855780,1317779294,627494611,3525052757,209602798,3348501307,1701595328,3525052757,1519515423,1317779294,3525052757,2789129758,1317779294,3348501307,3348501307,2789129758,3348501307,1655266202,912281971,859160306,627494611,1701595328,1701595328,1655266202,2789129758,912281971,172855780,912281971,859160306,209602798,1701595328,1519515423,1701595328,1655266202,3348501307,1655266202,3348501307,912281971,1386025943,209602798,1519515423,172855780,1701595328,912281971,1655266202,1519515423,3348501307,172855780,1317779294,1386025943,172855780,859160306,1519515423,3348501307,3525052757,3348501307,859160306,627494611,2789129758,1317779294,1701595328,627494611,2789129758,3348501307,172855780,859160306,859160306,1655266202,1701595328,859160306,209602798,627494611,3348501307,1386025943,1519515423,3348501307,1475932078,3913229208,2227214797,3913229208,3789747863,3913229208,510528736,3913229208,3789747863,3789747863,3913229208,3837297611,2884501567,3106970526,1486651970,3913229208,3913229208,2870437049,3913229208,2193573656,3913229208,3969492334,3789747863,3789747863,3789747863,3789747863,922224195,1404624078,3913229208,3913229208,894904681,2945052265,3913229208,3789747863,3789747863,3789747863,3789747863,3913229208,3803986276,952637510,3590416673,2982256563,3789747863,527179391,2488421031,3913229208,3913229208,3103095817,3819337278,3789747863,1778301207,4209926658,3913229208,3913229208,2263431414,1475703906,3913229208,3789747863,662586099,3789747863,2152872312,3913229208,3711287442,2774706557,734011670,3913229208,3913229208,770703466,3913229208,2061950507,3789747863,3844879621,2305665715,3913229208,1905805162,2076289177,2276582000,2862932646,3913229208,3789747863,3789747863,1790490335,3789747863,2673207464,3913229208,3913229208,2752541153,3913229208,61063314,3913229208,3913229208,3913229208,1570067002,927843573,4109279470,3789747863,3913229208,3913229208,2279442698,3789747863,3789747863,1475932078,994743792,508741966,1653940526,2149805334,1514064903,204116760,2452926277,1433913665,2429601308,652091073,1368446641,819364038,225505346,2166310632,4197863238,2928806398,2417368046,4088829711,2983299479,3050483193,3658804321,2359154283,2166866903,2311372238,1273162069,2361796754,2306253394,4186093274,132017468,3444701572,1657736054,2110120670,3993033469,1181468239,3338910703,4003063492,128707555,3197550060,4177065148,1748921945,1932288821,1261617742,57904453,3661577271,631151170,3391661379,3864978010,825637605,2896814425,3850472635,2114036044,1938804129,1989294608,2135630268,2749819143,2249269242,2166490591,3658338394,206301486,3406566011,3480816730,2483750349,2450829100,3203273726,1520157975,3739283153,836974551,276421067,1559951316,2546274569,281244828,620132210,1886968462,3731299590,1967291532,582974991,333658188,1158265913,2124386474,601020141,2327853911,3766092499,1929197136,1938425491,2014566204,1186492516,2416989252,93117554,3642239414,4079999945,2340083963,886337496,1818502550,2860133125,1710656235,2953800498,712372024,1395117189,2137342595,4167342059,1475932078,1532900103,4102217294,1861653971,86232176,3878403598,856543581,1990831151,1389279149,2648483542,610102681,1125676472,2131299136,1431885405,648643318,1154374898,1415151150,553323391,2444387708,3338267287,462740891,3531993375,2545773242,3571033511,4161475646,578643968,32999274,2693211556,4081847962,1977267376,16015138,4191625365,3165203105,4042815043,3530908945,2930385635,514791064,2381228895,2582983294,2733154394,2723419908,2102014736,4026074225,2733691661,1863037094,260662800,291487530,418929061,2054872369,67313275,3802694445,3580006222,4048666199,3217207799,4162195315,3127763070,3422048662,1026351827,246213353,3841167754,1545418915,1870495953,419849037,489370714,3037505443,3175710511,3183483743,3067513982,3915479902,1518386329,3972813200,1407358669,2465219998,2872752475,1819131689,2712973792,2983061508,3050657900,2968375702,614867631,3126861552,3321798155,3633271578,661359661,935360676,2459635599,400606706,2234201005,289237747,3823144031,3045874506,532981447,2427139017,1787447513,3529392557,1390139246,3410864086,2906135130,3533245323,1302222766,60426080,1475932078,3821307458,3267483048,3678593449,1987368558,1372039361,2116402128,902325561,14676458,4205872991,284754422,761961319,1674190002,4167725589,1560684105,3394419928,3789385250,2732301246,2375493248,696532534,3932925440,2125120050,1663239372,1943113553,538100978,926229152,1378385960,1088489987,3649442146,83345092,3072167853,861979694,3345948570,329056656,1852696603,953614521,2412121146,1455304982,2016720967,1019662472,3889415001,2242446190,3751168679,1065796466,431925897,557433494,3314126543,1579778508,2348561599,1405549853,3835521876,1362788148,3089016189,1743993695,2231007820,3064185354,1836043055,929946084,3204192861,3942771720,2101319852,2662155723,3334980251,613875170,1793892769,510037288,2475133148,716514594,3379275905,727614721,2566562724,236070862,4102414313,21235350,186075835,4139730481,1258893555,2141602116,3382940338,2013202621,1432283856,3068870504,4179200396,793069721,1513643002,2052642492,1974136374,2616712913,101081864,446688245,1177254224,2509066101,2004131098,194002834,1438287892,2325675989,2681487709,2856779751,802126067,3977626866,919162971,1475932078,1137081298,337542302,3284884598,1773676428,188465278,3891293334,1349916049,3657755687,3451149335,1778783341,2306226865,352545257,30317693,2359603050,1234701875,1774508416,3716537525,1387435890,4045098628,3903474068,32629003,118178606,3273937441,3914364692,2353886095,2826420805,3441888086,3345249612,2754847602,1721998878,4135490579,1948326393,2633740817,205560752,2559828432,4008747519,718784075,1350663777,2707354727,232503578,1094980036,3215154101,2414399157,3786811848,3561699290,3723584653,4067691960,1504215167,281997699,235531702,42481190,3445782416,15083132,3510922785,1302166824,1354343922,3882424411,1541555833,111901156,977232459,2099073180,1268917631,232672324,478753186,1478119740,3486668107,531376819,3664431455,1061580509,1477256723,2073744111,2056257964,2158626208,3067464461,1294964912,1459438953,3362223921,2781734454,379986224,1295375361,3283668508,824874935,2250241074,2568691077,513030551,2024475634,1916448804,1055216648,4063477824,1473670213,607304147,1303678041,3222238822,48604406,700507791,3871034329,807782587,302343498,3814693210,47033331,1475932078,1475932078,803926826,1534921777,1636101216,4199349286,590678445,434981088,3207488851,597381227,3887754035,2052454223,59445899,1271505007,4055126324,4054273983,649110147,157750617,772397764,4011824477,1742443568,3185618184,2914823100,3267544278,368967522,847936237,2780716343,154523379,2423946954,2128169158,3933838920,1615791110,2160256234,2906411161,4181667302,550458654,2433573448,559806494,643164114,29033650,2892345287,3905830276,3987819672,3811655818,3340147241,638674595,258945717,2266104978,248373341,2847735307,3768282239,3168898668,1463395019,3610977856,3469785025,28519677,2279659349,1697711864,1875972300,3614920451,770462213,1657986010,1748128046,2664292882,1032641693,2789539156,1301242384,3465677171,2357001224,656061263,3940650205,2347417961,535998567,954920319,3885012760,3963892951,3044130204,4202254667,1132468991,2020480232,4197475817,1981873597,3632495348,1843085674,2236890509,3959216715,3156467377,1408354744,4260061686,1516744347,339963733,159942894,2043222002,3032700644,331136486,364320243,2151515559,2059697500,2888317503,3579994639,2442167468,1447087105,1475932078,2401505510,590156362,2195364622,2822989073,1956352541,3266950729,558321529,2293627180,3698923473,3217928243,2160044778,1513511982,3203192056,795412505,1519701763,468810285,3835858205,293340943,2072538334,616118151,1901381734,459201756,2456374687,3277587658,2596066538,2854128764,2581881353,1739861919,2664437933,3569307965,1991218382,4174885870,2088623300,481855255,701169116,1481157542,2360893067,4194641932,4030699666,171161796,1749474092,3510021112,2035746501,4075436995,1001174284,2657818062,3358764468,494721765,3914431910,3744616923,1851381768,1010480880,2317860844,1016352437,3565762644,1242765766,2155066206,2386513543,2734139700,643779138,1954132151,1633899924,2159095599,3100651720,1967765976,3577247558,4214933066,3761638261,2166476500,2601123522,95968551,2658898357,1942155268,373899699,426507988,1694055557,528324004,598693430,3602955889,3964128899,4271729452,3518429585,1246266208,42759873,877900272,776016407,98747343,3414738613,2082328867,211091088,2850277844,1462893947,1268950,1729365346,3923525612,1301892772,3690860050,570808415,2025216958,324627133,1475932078,750437406,4009796778,959885984,3504908289,2871392054,1633653256,3253142563,2156146746,1721344834,1635781887,2659114823,3598646234,1468783300,2870341610,3475879873,2002343311,3645411615,4081076334,2006277628,3485962356,3780305649,4294425050,1710536722,454554056,3598505776,964390392,4278297890,2591804036,2422756079,2016315413,4069982864,2555096892,525716090,4252418588,1162917991,3487229378,4051645968,603394097,2119922039,1410808687,1559055702,128755654,1836120118,3180535391,256037813,414970214,80668479,1266317121,1618856420,2778534700,88706368,4003469182,244369109,3964992372,3607273746,3845301153,3203834274,1201178379,136774736,714379241,3758001736,1407753813,2215310631,231593609,3508376742,726172698,3462502993,308862704,3381383376,2054048712,1603949764,1187806448,3465858463,2443342986,454592385,1267514923,3824039239,820261283,14321907,3379396725,285065871,3870785185,2148471288,1217842933,758483506,3415754454,1216175182,2680179535,908976250,333928532,2049754406,1486253607,1907605185,639814098,2184148615,465406831,1013332334,754673927,1363150469,3294070424,1475932078,1475932078,2454955850,307317990,1843320580,2689810637,521554053,746538813,3847811813,4085419466,3315599752,3840283830,1028441694,593992957,3064139871,1963613286,2883484251,3921172366,1502988507,1396715462,2031261614,103863098,1233760996,2308447950,1410587158,1250140908,1105785024,1869787579,1977231784,2350196830,24707440,3006987179,1942495807,243278561,3767842018,1617839206,3080293014,3638221212,3635086575,783832108,2908009883,3228605337,1428731149,1756052824,4057099509,1313997183,3209720040,1465427063,680451596,2523525698,2004640746,224122929,130675611,924462452,2420467377,3043025742,712111242,3190132772,563488250,2884924318,2505452534,3723222632,1041573890,2256151026,527697742,422027072,3088869068,1863587921,1963869502,1595503862,1985281455,2166663648,1337471443,3763954512,3612345107,4230814320,2531762327,606703644,1004993920,91826258,83837496,2608012888,1981892724,260504410,2877914252,2615931808,419782515,1820721414,1373581830,2606281665,3598188362,1268424392,10752841,3789572183,1132860687,3529665047,1150203099,3400717728,3129690101,1112276931,2011241386,1772396910,1475932078,4143537550,4110844364,2130344600,1037694712,1771784288,3957395857,3452626355,3598856197,3963056127,1730385093,3726767546,760577327,1554502290,1734707720,632755741,3672183647,3404563514,2872596611,4238089366,3468680706,1516826468,1720030364,3173270639,329145023,2513738780,356390903,1915465131,1518434931,2862084534,884236893,2025428714,3254290528,1167711490,3980365243,2459379091,3854474651,136860953,844385548,2221618579,682855689,456025253,2405583723,2340864839,2420806889,636310042,3720937928,3838284871,2920529973,385811128,2019376507,3191787557,297236226,3876865055,1512149468,3958263151,1506601118,3561603944,1832305547,1602136303,2047183728,1842993317,999387732,1543924992,1032714700,2475090073,1246533462,98328826,3380939593,2418372456,1091706853,1577319206,1652841675,3718010629,1875243003,2853971876,3745030653,4270728476,1838992389,1432171170,2022616821,1336290229,3060042815,422741477,495639987,2092702949,2324300999,1232550728,2197471467,1723598945,4282404971,3391723275,836386384,2947445806,3743773240,2016422363,1814869952,3719056997,3313326682,1976877341,3124971744,1475932078,3388060211,1855157588,1350588632,2819418714,1960643832,3122859666,737331241,3429737122,2021508713,931950175,2699465559,2385202791,155363890,312643501,778668459,3505782968,1262675293,1430998865,1981892426,4181133807,3735379389,3914062906,1682855378,772185061,3558820544,3755577422,3047780057,2332048110,718753837,1037183699,3401684344,1154210690,2913727725,4273260693,2369155824,3664479333,2521752208,2686469588,1842215641,2431933767,693621097,2698556740,1924001333,4225446471,1717780884,1280043715,1934616363,3129826267,3892658070,3988195118,1496178504,1856114885,2899047057,3941961547,3030610379,877978698,2892259652,329086752,3630951362,1561455074,3488068275,3958274066,625837389,442542887,1503968616,3424975254,473787589,1351071368,3410925217,1276653472,1347508205,131490312,93773039,1270003783,1065679935,4266343376,3810263239,1087742589,2709134845,1823070352,194057570,1287447319,2971160525,1087995357,31052648,2712604629,2626403650,3028356822,64428271,3212356382,3938400870,734201728,3917275373,3005036952,3148892867,2476251189,1363626631,740472264,847356265,3167275701,1475932078,962195008,3420982747,3692999298,66458682,2790067218,2018827531,1430599627,43533593,2356865485,1831563790,415629740,1997372031,464080575,949749522,2412642304,1740446828,75078428,3402860516,2846776447,2016818163,1027402406,4288815471,123994234,2058871005,415023610,630073727,4250732094,3148340743,69740661,2688142673,2538174055,3286707353,1823814761,685052682,608425056,304280323,3006054759,3228817403,2451214618,3582913323,3186710865,639505342,2256518546,2226677916,2925870131,3147601570,2876204287,3576984707,1947679012,464620125,1263359034,1485913353,2129875352,1649243501,899181607,3664570435,2959074822,188632213,3890386862,1189295059,2341664307,686389136,2686777569,3777651455,4271191967,3907398237,3329997800,2245760535,2057629287,1235004456,1203146418,207072182,1538416047,1122436982,396109090,4078712622,968436805,2509168532,546682907,1643950458,1375290490,3796103361,186132974,3465433298,2507246800,2952174864,1336559086,3011211570,896396982,33300456,2065219512,3984930034,88664090,3694504127,883798152,3554074050,2377310343,3332130883,1721420430,1527169100,1475932078,680640990,843521611,3080420495,1299572823,3251167534,3511253746,3910665117,558006339,2348056526,3071621499,2531998383,398357604,2782106744,1113615523,1081527243,236258719,2281899916,879898656,3416824033,3373745091,2576830007,358916927,145884860,2449261337,4092437372,3029453546,3998255648,4101825755,4035875946,4122325429,2663567998,1233167749,2616443039,2426503691,1255733128,2970769837,3340018879,1867404624,4052130641,386257033,3160695746,1689948893,2689174440,3645629961,3161728118,1568816772,437664960,2673165072,35426599,2655842707,1054329907,3457476931,269861916,2594549853,2597426616,157286671,3107938504,1774787540,277653450,1437285523,2361355041,4115420971,4252648429,3209110603,4005828126,621676976,3731902935,1936375901,77835554,1872327946,3566116711,3893310884,1376808856,1853101859,890970048,1993850901,237065659,3951861417,1874240106,3157307210,1189131065,582175755,2683890486,3256648034,1847265683,1121410699,1126372695,1846616866,583183091,1598670349,377956364,3639545782,798953284,1850715256,3379870641,839506987,3058043793,3577636145,969915554,2043424756,1475932078,3749633602,4106365127,3696326584,2873151665,170633546,3007816368,887438575,2368426406,3870407398,3717463284,2917880577,4164975643,1264145344,4216424914,2226740475,3527071167,194022830,3966894947,376883549,3775446025,1735344001,1156082452,1865720872,2560989750,903861901,4128248465,4275323060,3461365781,2974330118,83860697,1333549607,511924981,2220396524,1475932078,1475932078,3407514427,107838651,1963388594,1597156853,1597156853,529193907,1322993309,1475932078,3209243126,529193907,4084504255,2680783133,1597156853,3547893342,1475932078,693672836,3828817421,2549966419,43653941,3051863181,2609827955,3144537318,1597156853,803820499,223143849,1475932078,4134697544,3609836080,788094979,3390278044,656212304,2663353824,529193907,4073884384,334165224,3936875123,865176824,3029480074,45221774,2221829444,1407402909,1599263895,835831332,2465648309,2622132624,775564599,1883700082,17928471,25653050,3334233039,3976330841,1254587112,1475932078,747823015,232007876,760925063,2518473540,37133442,2513286040,3210964464,1847985140,2690811871,2728082036,529193907,4187564740,119834965,1061802200,2691253584,1288304899,4032020751,4102933577,2433043907,1010674793,1597156853,4224450281,529193907,3948989217,2130025937,928004342,3208745299,374617435,1597156853,540054156,474637681,1310788065,1886378415,1475932078,529193907,3663910004,239382924,1644697274,3821159193,157609081,1604145703,431840946,139321933,2224907474,2527146356,2152749101,936271390,3403694283,119834965,1475932078] \ No newline at end of file diff --git a/be/test/expected_result/vec/columns/column_variant_update_crcs_with_value.out_with_nullmap b/be/test/expected_result/vec/columns/column_variant_update_crcs_with_value.out_with_nullmap index ec1aaede6244ad..27853e883d8914 100644 --- a/be/test/expected_result/vec/columns/column_variant_update_crcs_with_value.out_with_nullmap +++ b/be/test/expected_result/vec/columns/column_variant_update_crcs_with_value.out_with_nullmap @@ -1 +1 @@ -column: variant with hashes: [1023594347,3348501307,3348501307,750646757,1023594347,1285578128,750646757,648865016,750646757,1850317735,1660060187,1978118196,3348501307,1660060187,1285578128,1978118196,1285578128,1978118196,1660060187,1285578128,3348501307,750646757,80012773,1186024589,1023594347,1186024589,750646757,80012773,1660060187,750646757,1285578128,1023594347,80012773,1978118196,750646757,648865016,1023594347,648865016,3348501307,1023594347,1978118196,3348501307,1285578128,80012773,3348501307,3348501307,1186024589,1660060187,648865016,80012773,1850317735,1186024589,3348501307,750646757,3348501307,1186024589,648865016,1023594347,3348501307,80012773,1978118196,1186024589,1660060187,1023594347,3348501307,1023594347,1660060187,1850317735,1660060187,1023594347,80012773,1186024589,1850317735,80012773,1978118196,750646757,1023594347,1285578128,3348501307,1660060187,648865016,648865016,80012773,1285578128,1978118196,80012773,1023594347,3348501307,3348501307,1978118196,1285578128,3348501307,80012773,3348501307,648865016,648865016,1186024589,750646757,1978118196,3348501307,1475932078,3031791848,1475932078,2847341008,3031791848,867831412,2847341008,3913229208,3913229208,3913229208,1475932078,3947181464,2847341008,3913229208,867831412,3913229208,867831412,2847341008,1475932078,4041940491,3031791848,1475932078,4041940491,867831412,867831412,4041940491,4041940491,3913229208,867831412,3913229208,3913229208,1475932078,1475932078,2847341008,867831412,3913229208,1475932078,4041940491,867831412,3913229208,2847341008,3031791848,4041940491,867831412,2847341008,4041940491,3913229208,867831412,1475932078,2847341008,3947181464,867831412,1475932078,867831412,867831412,867831412,3031791848,1475932078,3913229208,4041940491,3947181464,3913229208,867831412,1475932078,867831412,2847341008,2847341008,3913229208,4041940491,2847341008,4041940491,867831412,3031791848,1475932078,4041940491,3913229208,3947181464,867831412,3947181464,867831412,1475932078,1475932078,2847341008,2847341008,4041940491,3947181464,3913229208,3031791848,2847341008,2847341008,1475932078,3947181464,3031791848,4041940491,4041940491,3947181464,2847341008,867831412,1475932078,3031791848,3913229208,1475932078,209602798,1519515423,627494611,172855780,1519515423,3348501307,1317779294,1519515423,859160306,3525052757,627494611,1701595328,1317779294,1386025943,2789129758,3348501307,859160306,2789129758,2789129758,3348501307,3348501307,1317779294,859160306,1519515423,172855780,1317779294,627494611,3525052757,209602798,3348501307,1701595328,3525052757,1519515423,1317779294,3525052757,2789129758,1317779294,3348501307,3348501307,2789129758,3348501307,1655266202,912281971,859160306,627494611,1701595328,1701595328,1655266202,2789129758,912281971,172855780,912281971,859160306,209602798,1701595328,1519515423,1701595328,1655266202,3348501307,1655266202,3348501307,912281971,1386025943,209602798,1519515423,172855780,1701595328,912281971,1655266202,1519515423,3348501307,172855780,1317779294,1386025943,172855780,859160306,1519515423,3348501307,3525052757,3348501307,859160306,627494611,2789129758,1317779294,1701595328,627494611,2789129758,3348501307,172855780,859160306,859160306,1655266202,1701595328,859160306,209602798,627494611,3348501307,1386025943,1519515423,3348501307,1475932078,3913229208,2227214797,3913229208,3789747863,3913229208,510528736,3913229208,3789747863,3789747863,3913229208,3837297611,2884501567,3106970526,1486651970,3913229208,3913229208,2870437049,3913229208,2193573656,3913229208,3969492334,3789747863,3789747863,3789747863,3789747863,922224195,1404624078,3913229208,3913229208,894904681,2945052265,3913229208,3789747863,3789747863,3789747863,3789747863,3913229208,3803986276,952637510,3590416673,2982256563,3789747863,527179391,2488421031,3913229208,3913229208,3103095817,3819337278,3789747863,1778301207,4209926658,3913229208,3913229208,2263431414,1475703906,3913229208,3789747863,662586099,3789747863,2152872312,3913229208,3711287442,2774706557,734011670,3913229208,3913229208,770703466,3913229208,2061950507,3789747863,3844879621,2305665715,3913229208,1905805162,2076289177,2276582000,2862932646,3913229208,3789747863,3789747863,1790490335,3789747863,2673207464,3913229208,3913229208,2752541153,3913229208,61063314,3913229208,3913229208,3913229208,1570067002,927843573,4109279470,3789747863,3913229208,3913229208,2279442698,3789747863,3789747863,1475932078,4237828992,2008303805,1653940526,112374245,3733730049,4285855827,2984707496,3700321127,900459062,3907550024,4167518769,3307649970,840115646,775955525,1987254777,2928806398,2417368046,4219959955,2983299479,3276959282,3658804321,3252716672,2671334707,721963254,252419266,349309873,1834082302,1073459774,594613583,3444701572,1657736054,2110120670,3505457392,1181468239,46979895,4003063492,2822172505,190636968,3480188160,4123233519,3921153207,1261617742,57904453,3661577271,2727620890,1406550753,806342488,1248968977,153207857,3850472635,1770926790,1938804129,68353157,4116010128,145263641,4264464151,1502905642,2138020051,206301486,3586908682,2851690921,2483750349,2306514692,3203273726,1444023869,3739283153,234059290,4159529475,841927421,998674515,3214677553,949805070,2760970111,1820470762,3114814069,100231172,2754194091,4202888641,423086264,2132589211,2385984422,2036753536,2238884718,2787517797,2014566204,1186492516,3777309008,1916247349,3642239414,1983143352,698751093,1937501638,2032881382,1672472094,1113661848,2866901201,300997757,1395117189,2137342595,4062985663,1475932078,1532900103,4102217294,1861653971,86232176,3878403598,856543581,1990831151,1389279149,2648483542,610102681,1125676472,2131299136,1431885405,648643318,1154374898,1415151150,553323391,2444387708,3338267287,462740891,3531993375,2545773242,3571033511,4161475646,578643968,32999274,2693211556,4081847962,1977267376,16015138,4191625365,3165203105,4042815043,3530908945,2930385635,514791064,2381228895,2582983294,2733154394,2723419908,2102014736,4026074225,2733691661,1863037094,260662800,291487530,418929061,2054872369,67313275,3802694445,3580006222,4048666199,3217207799,4162195315,3127763070,3422048662,1026351827,246213353,3841167754,1545418915,1870495953,419849037,489370714,3037505443,3175710511,3183483743,3067513982,3915479902,1518386329,3972813200,1407358669,2465219998,2872752475,1819131689,2712973792,2983061508,3050657900,2968375702,614867631,3126861552,3321798155,3633271578,661359661,935360676,2459635599,400606706,2234201005,289237747,3823144031,3045874506,532981447,2427139017,1787447513,3529392557,1390139246,3410864086,2906135130,3533245323,1302222766,60426080,1475932078,3821307458,3267483048,3678593449,1987368558,1372039361,2116402128,902325561,14676458,4205872991,284754422,761961319,1674190002,4167725589,1560684105,3394419928,3789385250,2732301246,2375493248,696532534,3932925440,2125120050,1663239372,1943113553,538100978,926229152,1378385960,1088489987,3649442146,83345092,3072167853,861979694,3345948570,329056656,1852696603,953614521,2412121146,1455304982,2016720967,1019662472,3889415001,2242446190,3751168679,1065796466,431925897,557433494,3314126543,1579778508,2348561599,1405549853,3835521876,1362788148,3089016189,1743993695,2231007820,3064185354,1836043055,929946084,3204192861,3942771720,2101319852,2662155723,3334980251,613875170,1793892769,510037288,2475133148,716514594,3379275905,727614721,2566562724,236070862,4102414313,21235350,186075835,4139730481,1258893555,2141602116,3382940338,2013202621,1432283856,3068870504,4179200396,793069721,1513643002,2052642492,1974136374,2616712913,101081864,446688245,1177254224,2509066101,2004131098,194002834,1438287892,2325675989,2681487709,2856779751,802126067,3977626866,919162971,1475932078,1137081298,337542302,3284884598,1773676428,188465278,3891293334,1349916049,3657755687,3451149335,1778783341,2306226865,352545257,30317693,2359603050,1234701875,1774508416,3716537525,1387435890,4045098628,3903474068,32629003,118178606,3273937441,3914364692,2353886095,2826420805,3441888086,3345249612,2754847602,1721998878,4135490579,1948326393,2633740817,205560752,2559828432,4008747519,718784075,1350663777,2707354727,232503578,1094980036,3215154101,2414399157,3786811848,3561699290,3723584653,4067691960,1504215167,281997699,235531702,42481190,3445782416,15083132,3510922785,1302166824,1354343922,3882424411,1541555833,111901156,977232459,2099073180,1268917631,232672324,478753186,1478119740,3486668107,531376819,3664431455,1061580509,1477256723,2073744111,2056257964,2158626208,3067464461,1294964912,1459438953,3362223921,2781734454,379986224,1295375361,3283668508,824874935,2250241074,2568691077,513030551,2024475634,1916448804,1055216648,4063477824,1473670213,607304147,1303678041,3222238822,48604406,700507791,3871034329,807782587,302343498,3814693210,47033331,1475932078,1475932078,2186898052,1534921777,2754747580,3539438616,2072550807,3862243513,3388554620,597381227,3887754035,1834726908,565128977,2943960712,2339404461,4054273983,649110147,1978074792,1269192803,899089643,1742443568,1655919025,2948223609,3267544278,2984237480,847936237,3234146950,2195266427,430377206,3162992278,3933838920,2511536970,1997343675,3691980458,2265098137,2216379065,589674916,420279219,1363494854,1476431342,2369950088,3066718386,1318848225,834229161,2671101789,2435992496,1478940721,2266104978,2224538860,3693790829,1810483630,3900502355,2646989179,2239226925,1385611592,28519677,3216104696,2765690266,1672190596,991460047,913276224,1657986010,485134676,3813222821,208923628,2789539156,1301242384,3465677171,2357001224,890073919,3056960214,4284214637,1887431665,4093835118,3885012760,1760124998,3824332994,4202254667,3078280703,4188009210,3151802351,2213603394,3771887961,1049480879,1920093458,1596525229,970144709,3709106209,2144843342,4078254904,3496281291,2251727894,606476136,2718208755,4260698614,758409253,2537061395,1525070089,4127561221,183178470,851261457,1521262235,1475932078,2401505510,590156362,2195364622,2822989073,1956352541,3266950729,558321529,2293627180,3698923473,3217928243,2160044778,1513511982,3203192056,795412505,1519701763,468810285,3835858205,293340943,2072538334,616118151,1901381734,459201756,2456374687,3277587658,2596066538,2854128764,2581881353,1739861919,2664437933,3569307965,1991218382,4174885870,2088623300,481855255,701169116,1481157542,2360893067,4194641932,4030699666,171161796,1749474092,3510021112,2035746501,4075436995,1001174284,2657818062,3358764468,494721765,3914431910,3744616923,1851381768,1010480880,2317860844,1016352437,3565762644,1242765766,2155066206,2386513543,2734139700,643779138,1954132151,1633899924,2159095599,3100651720,1967765976,3577247558,4214933066,3761638261,2166476500,2601123522,95968551,2658898357,1942155268,373899699,426507988,1694055557,528324004,598693430,3602955889,3964128899,4271729452,3518429585,1246266208,42759873,877900272,776016407,98747343,3414738613,2082328867,211091088,2850277844,1462893947,1268950,1729365346,3923525612,1301892772,3690860050,570808415,2025216958,324627133,1475932078,750437406,4009796778,959885984,3504908289,2871392054,1633653256,3253142563,2156146746,1721344834,1635781887,2659114823,3598646234,1468783300,2870341610,3475879873,2002343311,3645411615,4081076334,2006277628,3485962356,3780305649,4294425050,1710536722,454554056,3598505776,964390392,4278297890,2591804036,2422756079,2016315413,4069982864,2555096892,525716090,4252418588,1162917991,3487229378,4051645968,603394097,2119922039,1410808687,1559055702,128755654,1836120118,3180535391,256037813,414970214,80668479,1266317121,1618856420,2778534700,88706368,4003469182,244369109,3964992372,3607273746,3845301153,3203834274,1201178379,136774736,714379241,3758001736,1407753813,2215310631,231593609,3508376742,726172698,3462502993,308862704,3381383376,2054048712,1603949764,1187806448,3465858463,2443342986,454592385,1267514923,3824039239,820261283,14321907,3379396725,285065871,3870785185,2148471288,1217842933,758483506,3415754454,1216175182,2680179535,908976250,333928532,2049754406,1486253607,1907605185,639814098,2184148615,465406831,1013332334,754673927,1363150469,3294070424,1475932078,1475932078,1399002379,69903028,2045412938,4070581251,3953661059,4215234691,1522179298,454832969,3746418501,923142845,2207925753,4110138591,2591678063,1318518983,401470965,1846943743,3390726045,2518849893,4110707178,62480325,2877043601,3070976711,961160657,4105976198,1227085521,1368728002,3026156015,519076114,3890736079,3930791341,2361445251,2679194294,2956507517,3203563826,1372542504,284995548,4014277213,2497936966,3570646303,1371498076,3587312806,4007230579,263415998,266785166,2207997077,524718430,3712810010,2333052247,1764657277,3925990686,656710043,236349442,1243241737,3562657487,101768152,594885019,3353890438,248637421,4163784863,2463028965,3087711866,3145065943,2498347723,2978504649,375824685,670272093,3205028309,2945473674,553204994,3811672753,2297141915,2032925401,1823853057,1084642587,3705109053,1647674663,382611201,2223468574,425881799,1212575818,4268388814,2757135639,380915719,4005487918,700708481,3213895205,4112941219,3945014198,2974857187,3933788052,863990462,3919778373,1210830815,1024068503,3866486624,808077332,4155392450,4239861657,102259119,3248669336,1475932078,4143537550,4110844364,2130344600,1037694712,1771784288,3957395857,3452626355,3598856197,3963056127,1730385093,3726767546,760577327,1554502290,1734707720,632755741,3672183647,3404563514,2872596611,4238089366,3468680706,1516826468,1720030364,3173270639,329145023,2513738780,356390903,1915465131,1518434931,2862084534,884236893,2025428714,3254290528,1167711490,3980365243,2459379091,3854474651,136860953,844385548,2221618579,682855689,456025253,2405583723,2340864839,2420806889,636310042,3720937928,3838284871,2920529973,385811128,2019376507,3191787557,297236226,3876865055,1512149468,3958263151,1506601118,3561603944,1832305547,1602136303,2047183728,1842993317,999387732,1543924992,1032714700,2475090073,1246533462,98328826,3380939593,2418372456,1091706853,1577319206,1652841675,3718010629,1875243003,2853971876,3745030653,4270728476,1838992389,1432171170,2022616821,1336290229,3060042815,422741477,495639987,2092702949,2324300999,1232550728,2197471467,1723598945,4282404971,3391723275,836386384,2947445806,3743773240,2016422363,1814869952,3719056997,3313326682,1976877341,3124971744,1475932078,3016712956,1979797646,1183515206,3534963753,1840905633,1115956164,2759363593,2629166892,3814908553,907691709,2292938191,1040336648,1017800108,2337408522,1787992321,2049172588,738405944,4179832654,3341853796,638620649,2175441604,606296248,3151483340,1006224888,1162250691,3116256816,3891443904,381435133,1444631482,2519726484,876448307,288477377,1854392216,2739850528,2394286189,2679660791,681060782,3130512933,1539605306,100308248,1071739370,721371342,2738127751,2859383570,3403494564,3114976111,1855668175,3802337993,2690398437,2071298015,3439878796,4133423232,207034957,3852639123,1303088352,3635701711,3728656177,583891943,2907159107,2077655146,448794230,615586219,3308587914,1013110249,1764042289,4235305553,2146012185,3099834910,105583757,1799893206,537541326,2458490698,3957386302,784866888,1613095013,1005074123,3464311052,3334928300,3627355317,1176559904,853428868,2239549241,1347546091,2577430824,1489475593,3852091630,4098197516,2599035380,4045357712,2718801380,1365947441,328110427,2164984020,673712497,214180116,30944860,1873013067,2037068428,1361829298,574671952,1475932078,962195008,3420982747,3692999298,66458682,2790067218,2018827531,1430599627,43533593,2356865485,1831563790,415629740,1997372031,464080575,949749522,2412642304,1740446828,75078428,3402860516,2846776447,2016818163,1027402406,4288815471,123994234,2058871005,415023610,630073727,4250732094,3148340743,69740661,2688142673,2538174055,3286707353,1823814761,685052682,608425056,304280323,3006054759,3228817403,2451214618,3582913323,3186710865,639505342,2256518546,2226677916,2925870131,3147601570,2876204287,3576984707,1947679012,464620125,1263359034,1485913353,2129875352,1649243501,899181607,3664570435,2959074822,188632213,3890386862,1189295059,2341664307,686389136,2686777569,3777651455,4271191967,3907398237,3329997800,2245760535,2057629287,1235004456,1203146418,207072182,1538416047,1122436982,396109090,4078712622,968436805,2509168532,546682907,1643950458,1375290490,3796103361,186132974,3465433298,2507246800,2952174864,1336559086,3011211570,896396982,33300456,2065219512,3984930034,88664090,3694504127,883798152,3554074050,2377310343,3332130883,1721420430,1527169100,1475932078,680640990,843521611,3080420495,1299572823,3251167534,3511253746,3910665117,558006339,2348056526,3071621499,2531998383,398357604,2782106744,1113615523,1081527243,236258719,2281899916,879898656,3416824033,3373745091,2576830007,358916927,145884860,2449261337,4092437372,3029453546,3998255648,4101825755,4035875946,4122325429,2663567998,1233167749,2616443039,2426503691,1255733128,2970769837,3340018879,1867404624,4052130641,386257033,3160695746,1689948893,2689174440,3645629961,3161728118,1568816772,437664960,2673165072,35426599,2655842707,1054329907,3457476931,269861916,2594549853,2597426616,157286671,3107938504,1774787540,277653450,1437285523,2361355041,4115420971,4252648429,3209110603,4005828126,621676976,3731902935,1936375901,77835554,1872327946,3566116711,3893310884,1376808856,1853101859,890970048,1993850901,237065659,3951861417,1874240106,3157307210,1189131065,582175755,2683890486,3256648034,1847265683,1121410699,1126372695,1846616866,583183091,1598670349,377956364,3639545782,798953284,1850715256,3379870641,839506987,3058043793,3577636145,969915554,2043424756,1475932078,477556300,4106365127,3696326584,2873151665,4029262087,1234428709,204991472,2115966412,4238600626,3941699655,2917880577,4164975643,1264145344,790310388,1144880034,3527071167,194022830,1860081722,2012356074,3775446025,1735344001,876112787,1865720872,1043451373,903861901,689306731,27781182,3461365781,2974330118,1946603787,1740189302,2680687692,2220396524,1475932078,1475932078,3407514427,107838651,1963388594,1597156853,1597156853,529193907,1322993309,1475932078,3209243126,529193907,4084504255,2680783133,1597156853,3547893342,1475932078,693672836,3828817421,2549966419,43653941,3051863181,2609827955,3144537318,1597156853,803820499,223143849,1475932078,4134697544,3609836080,788094979,3390278044,656212304,2663353824,529193907,4073884384,334165224,3936875123,865176824,3029480074,45221774,2221829444,1407402909,1599263895,835831332,2465648309,2622132624,775564599,1883700082,17928471,25653050,3334233039,3976330841,1254587112,1475932078,747823015,232007876,760925063,2518473540,37133442,2513286040,3210964464,1847985140,2690811871,2728082036,529193907,4187564740,119834965,1061802200,2691253584,1288304899,4032020751,4102933577,2433043907,1010674793,1597156853,4224450281,529193907,3948989217,2130025937,928004342,3208745299,374617435,1597156853,540054156,474637681,1310788065,1886378415,1475932078,529193907,3663910004,239382924,1644697274,3821159193,157609081,1604145703,431840946,139321933,2224907474,2527146356,2152749101,936271390,3403694283,119834965,1475932078] \ No newline at end of file +column: variant with hashes: [1023594347,3348501307,7038117,750646757,1023594347,1285578128,750646757,648865016,750646757,1850317735,1660060187,1978118196,7038117,1660060187,1285578128,1978118196,1285578128,1978118196,1660060187,1285578128,3348501307,750646757,80012773,1186024589,1023594347,1186024589,750646757,542292976,1660060187,750646757,1285578128,1023594347,542292976,1978118196,750646757,648865016,1023594347,648865016,3348501307,1023594347,1978118196,7038117,1285578128,80012773,7038117,3348501307,1186024589,1660060187,648865016,80012773,1850317735,1186024589,7038117,750646757,7038117,1186024589,648865016,1023594347,7038117,542292976,1978118196,1186024589,1660060187,1023594347,3348501307,1023594347,1660060187,1850317735,1660060187,1023594347,542292976,1186024589,1850317735,80012773,1978118196,750646757,1023594347,1285578128,7038117,1660060187,648865016,648865016,542292976,1285578128,1978118196,542292976,1023594347,3348501307,7038117,1978118196,1285578128,3348501307,542292976,3348501307,648865016,648865016,1186024589,750646757,1978118196,7038117,1475932078,3031791848,1475932078,2847341008,3031791848,867831412,2847341008,3913229208,3913229208,3913229208,1475932078,3947181464,2847341008,3913229208,867831412,3913229208,867831412,2847341008,1475932078,4041940491,3031791848,1475932078,4041940491,867831412,867831412,4041940491,4041940491,3913229208,867831412,3913229208,3913229208,1475932078,1475932078,2847341008,867831412,3913229208,1475932078,4041940491,867831412,3913229208,2847341008,3031791848,4041940491,867831412,2847341008,4041940491,3913229208,867831412,1475932078,2847341008,3947181464,867831412,1475932078,867831412,867831412,867831412,3031791848,1475932078,3913229208,4041940491,3947181464,3913229208,867831412,1475932078,867831412,2847341008,2847341008,3913229208,4041940491,2847341008,4041940491,867831412,3031791848,1475932078,4041940491,3913229208,3947181464,867831412,3947181464,867831412,1475932078,1475932078,2847341008,2847341008,4041940491,3947181464,3913229208,3031791848,2847341008,2847341008,1475932078,3947181464,3031791848,4041940491,4041940491,3947181464,2847341008,867831412,1475932078,3031791848,3913229208,1475932078,209602798,1519515423,627494611,172855780,1519515423,3348501307,1317779294,1519515423,859160306,3525052757,627494611,1701595328,1317779294,1386025943,2789129758,3348501307,859160306,2789129758,2789129758,3348501307,3348501307,1317779294,859160306,1519515423,172855780,1317779294,627494611,3525052757,209602798,3348501307,1701595328,3525052757,1519515423,1317779294,3525052757,2789129758,1317779294,3348501307,3348501307,2789129758,3348501307,1655266202,912281971,859160306,627494611,1701595328,1701595328,1655266202,2789129758,912281971,172855780,912281971,859160306,209602798,1701595328,1519515423,1701595328,1655266202,3348501307,1655266202,3348501307,912281971,1386025943,209602798,1519515423,172855780,1701595328,912281971,1655266202,1519515423,3348501307,172855780,1317779294,1386025943,172855780,859160306,1519515423,3348501307,3525052757,3348501307,859160306,627494611,2789129758,1317779294,1701595328,627494611,2789129758,3348501307,172855780,859160306,859160306,1655266202,1701595328,859160306,209602798,627494611,3348501307,1386025943,1519515423,3348501307,1475932078,3913229208,2227214797,3913229208,3789747863,3913229208,510528736,3913229208,3789747863,3789747863,3913229208,3837297611,2884501567,3106970526,1486651970,3913229208,3913229208,2870437049,3913229208,2193573656,3913229208,3969492334,3789747863,3789747863,3789747863,3789747863,922224195,1404624078,3913229208,3913229208,894904681,2945052265,3913229208,3789747863,3789747863,3789747863,3789747863,3913229208,3803986276,952637510,3590416673,2982256563,3789747863,527179391,2488421031,3913229208,3913229208,3103095817,3819337278,3789747863,1778301207,4209926658,3913229208,3913229208,2263431414,1475703906,3913229208,3789747863,662586099,3789747863,2152872312,3913229208,3711287442,2774706557,734011670,3913229208,3913229208,770703466,3913229208,2061950507,3789747863,3844879621,2305665715,3913229208,1905805162,2076289177,2276582000,2862932646,3913229208,3789747863,3789747863,1790490335,3789747863,2673207464,3913229208,3913229208,2752541153,3913229208,61063314,3913229208,3913229208,3913229208,1570067002,927843573,4109279470,3789747863,3913229208,3913229208,2279442698,3789747863,3789747863,1475932078,994743792,508741966,1653940526,2149805334,1514064903,204116760,2452926277,1433913665,2429601308,652091073,1368446641,819364038,225505346,2166310632,4197863238,2928806398,2417368046,4088829711,2983299479,3050483193,3658804321,2359154283,2166866903,2311372238,1273162069,2361796754,2306253394,4186093274,132017468,3444701572,1657736054,2110120670,3993033469,1181468239,3338910703,4003063492,128707555,3197550060,4177065148,1748921945,1932288821,1261617742,57904453,3661577271,631151170,3391661379,3864978010,825637605,2896814425,3850472635,2114036044,1938804129,1989294608,2135630268,2749819143,2249269242,2166490591,3658338394,206301486,3406566011,3480816730,2483750349,2450829100,3203273726,1520157975,3739283153,836974551,276421067,1559951316,2546274569,281244828,620132210,1886968462,3731299590,1967291532,582974991,333658188,1158265913,2124386474,601020141,2327853911,3766092499,1929197136,1938425491,2014566204,1186492516,2416989252,93117554,3642239414,4079999945,2340083963,886337496,1818502550,2860133125,1710656235,2953800498,712372024,1395117189,2137342595,4167342059,1475932078,1532900103,4102217294,1861653971,86232176,3878403598,856543581,1990831151,1389279149,2648483542,610102681,1125676472,2131299136,1431885405,648643318,1154374898,1415151150,553323391,2444387708,3338267287,462740891,3531993375,2545773242,3571033511,4161475646,578643968,32999274,2693211556,4081847962,1977267376,16015138,4191625365,3165203105,4042815043,3530908945,2930385635,514791064,2381228895,2582983294,2733154394,2723419908,2102014736,4026074225,2733691661,1863037094,260662800,291487530,418929061,2054872369,67313275,3802694445,3580006222,4048666199,3217207799,4162195315,3127763070,3422048662,1026351827,246213353,3841167754,1545418915,1870495953,419849037,489370714,3037505443,3175710511,3183483743,3067513982,3915479902,1518386329,3972813200,1407358669,2465219998,2872752475,1819131689,2712973792,2983061508,3050657900,2968375702,614867631,3126861552,3321798155,3633271578,661359661,935360676,2459635599,400606706,2234201005,289237747,3823144031,3045874506,532981447,2427139017,1787447513,3529392557,1390139246,3410864086,2906135130,3533245323,1302222766,60426080,1475932078,3821307458,3267483048,3678593449,1987368558,1372039361,2116402128,902325561,14676458,4205872991,284754422,761961319,1674190002,4167725589,1560684105,3394419928,3789385250,2732301246,2375493248,696532534,3932925440,2125120050,1663239372,1943113553,538100978,926229152,1378385960,1088489987,3649442146,83345092,3072167853,861979694,3345948570,329056656,1852696603,953614521,2412121146,1455304982,2016720967,1019662472,3889415001,2242446190,3751168679,1065796466,431925897,557433494,3314126543,1579778508,2348561599,1405549853,3835521876,1362788148,3089016189,1743993695,2231007820,3064185354,1836043055,929946084,3204192861,3942771720,2101319852,2662155723,3334980251,613875170,1793892769,510037288,2475133148,716514594,3379275905,727614721,2566562724,236070862,4102414313,21235350,186075835,4139730481,1258893555,2141602116,3382940338,2013202621,1432283856,3068870504,4179200396,793069721,1513643002,2052642492,1974136374,2616712913,101081864,446688245,1177254224,2509066101,2004131098,194002834,1438287892,2325675989,2681487709,2856779751,802126067,3977626866,919162971,1475932078,1137081298,337542302,3284884598,1773676428,188465278,3891293334,1349916049,3657755687,3451149335,1778783341,2306226865,352545257,30317693,2359603050,1234701875,1774508416,3716537525,1387435890,4045098628,3903474068,32629003,118178606,3273937441,3914364692,2353886095,2826420805,3441888086,3345249612,2754847602,1721998878,4135490579,1948326393,2633740817,205560752,2559828432,4008747519,718784075,1350663777,2707354727,232503578,1094980036,3215154101,2414399157,3786811848,3561699290,3723584653,4067691960,1504215167,281997699,235531702,42481190,3445782416,15083132,3510922785,1302166824,1354343922,3882424411,1541555833,111901156,977232459,2099073180,1268917631,232672324,478753186,1478119740,3486668107,531376819,3664431455,1061580509,1477256723,2073744111,2056257964,2158626208,3067464461,1294964912,1459438953,3362223921,2781734454,379986224,1295375361,3283668508,824874935,2250241074,2568691077,513030551,2024475634,1916448804,1055216648,4063477824,1473670213,607304147,1303678041,3222238822,48604406,700507791,3871034329,807782587,302343498,3814693210,47033331,1475932078,1475932078,803926826,1534921777,1636101216,4199349286,590678445,434981088,3207488851,597381227,3887754035,2052454223,59445899,1271505007,4055126324,4054273983,649110147,157750617,772397764,4011824477,1742443568,3185618184,2914823100,3267544278,368967522,847936237,2780716343,154523379,2423946954,2128169158,3933838920,1615791110,2160256234,2906411161,4181667302,550458654,2433573448,559806494,643164114,29033650,2892345287,3905830276,3987819672,3811655818,3340147241,638674595,258945717,2266104978,248373341,2847735307,3768282239,3168898668,1463395019,3610977856,3469785025,28519677,2279659349,1697711864,1875972300,3614920451,770462213,1657986010,1748128046,2664292882,1032641693,2789539156,1301242384,3465677171,2357001224,656061263,3940650205,2347417961,535998567,954920319,3885012760,3963892951,3044130204,4202254667,1132468991,2020480232,4197475817,1981873597,3632495348,1843085674,2236890509,3959216715,3156467377,1408354744,4260061686,1516744347,339963733,159942894,2043222002,3032700644,331136486,364320243,2151515559,2059697500,2888317503,3579994639,2442167468,1447087105,1475932078,2401505510,590156362,2195364622,2822989073,1956352541,3266950729,558321529,2293627180,3698923473,3217928243,2160044778,1513511982,3203192056,795412505,1519701763,468810285,3835858205,293340943,2072538334,616118151,1901381734,459201756,2456374687,3277587658,2596066538,2854128764,2581881353,1739861919,2664437933,3569307965,1991218382,4174885870,2088623300,481855255,701169116,1481157542,2360893067,4194641932,4030699666,171161796,1749474092,3510021112,2035746501,4075436995,1001174284,2657818062,3358764468,494721765,3914431910,3744616923,1851381768,1010480880,2317860844,1016352437,3565762644,1242765766,2155066206,2386513543,2734139700,643779138,1954132151,1633899924,2159095599,3100651720,1967765976,3577247558,4214933066,3761638261,2166476500,2601123522,95968551,2658898357,1942155268,373899699,426507988,1694055557,528324004,598693430,3602955889,3964128899,4271729452,3518429585,1246266208,42759873,877900272,776016407,98747343,3414738613,2082328867,211091088,2850277844,1462893947,1268950,1729365346,3923525612,1301892772,3690860050,570808415,2025216958,324627133,1475932078,750437406,4009796778,959885984,3504908289,2871392054,1633653256,3253142563,2156146746,1721344834,1635781887,2659114823,3598646234,1468783300,2870341610,3475879873,2002343311,3645411615,4081076334,2006277628,3485962356,3780305649,4294425050,1710536722,454554056,3598505776,964390392,4278297890,2591804036,2422756079,2016315413,4069982864,2555096892,525716090,4252418588,1162917991,3487229378,4051645968,603394097,2119922039,1410808687,1559055702,128755654,1836120118,3180535391,256037813,414970214,80668479,1266317121,1618856420,2778534700,88706368,4003469182,244369109,3964992372,3607273746,3845301153,3203834274,1201178379,136774736,714379241,3758001736,1407753813,2215310631,231593609,3508376742,726172698,3462502993,308862704,3381383376,2054048712,1603949764,1187806448,3465858463,2443342986,454592385,1267514923,3824039239,820261283,14321907,3379396725,285065871,3870785185,2148471288,1217842933,758483506,3415754454,1216175182,2680179535,908976250,333928532,2049754406,1486253607,1907605185,639814098,2184148615,465406831,1013332334,754673927,1363150469,3294070424,1475932078,1475932078,2454955850,307317990,1843320580,2689810637,521554053,746538813,3847811813,4085419466,3315599752,3840283830,1028441694,593992957,3064139871,1963613286,2883484251,3921172366,1502988507,1396715462,2031261614,103863098,1233760996,2308447950,1410587158,1250140908,1105785024,1869787579,1977231784,2350196830,24707440,3006987179,1942495807,243278561,3767842018,1617839206,3080293014,3638221212,3635086575,783832108,2908009883,3228605337,1428731149,1756052824,4057099509,1313997183,3209720040,1465427063,680451596,2523525698,2004640746,224122929,130675611,924462452,2420467377,3043025742,712111242,3190132772,563488250,2884924318,2505452534,3723222632,1041573890,2256151026,527697742,422027072,3088869068,1863587921,1963869502,1595503862,1985281455,2166663648,1337471443,3763954512,3612345107,4230814320,2531762327,606703644,1004993920,91826258,83837496,2608012888,1981892724,260504410,2877914252,2615931808,419782515,1820721414,1373581830,2606281665,3598188362,1268424392,10752841,3789572183,1132860687,3529665047,1150203099,3400717728,3129690101,1112276931,2011241386,1772396910,1475932078,4143537550,4110844364,2130344600,1037694712,1771784288,3957395857,3452626355,3598856197,3963056127,1730385093,3726767546,760577327,1554502290,1734707720,632755741,3672183647,3404563514,2872596611,4238089366,3468680706,1516826468,1720030364,3173270639,329145023,2513738780,356390903,1915465131,1518434931,2862084534,884236893,2025428714,3254290528,1167711490,3980365243,2459379091,3854474651,136860953,844385548,2221618579,682855689,456025253,2405583723,2340864839,2420806889,636310042,3720937928,3838284871,2920529973,385811128,2019376507,3191787557,297236226,3876865055,1512149468,3958263151,1506601118,3561603944,1832305547,1602136303,2047183728,1842993317,999387732,1543924992,1032714700,2475090073,1246533462,98328826,3380939593,2418372456,1091706853,1577319206,1652841675,3718010629,1875243003,2853971876,3745030653,4270728476,1838992389,1432171170,2022616821,1336290229,3060042815,422741477,495639987,2092702949,2324300999,1232550728,2197471467,1723598945,4282404971,3391723275,836386384,2947445806,3743773240,2016422363,1814869952,3719056997,3313326682,1976877341,3124971744,1475932078,3388060211,1855157588,1350588632,2819418714,1960643832,3122859666,737331241,3429737122,2021508713,931950175,2699465559,2385202791,155363890,312643501,778668459,3505782968,1262675293,1430998865,1981892426,4181133807,3735379389,3914062906,1682855378,772185061,3558820544,3755577422,3047780057,2332048110,718753837,1037183699,3401684344,1154210690,2913727725,4273260693,2369155824,3664479333,2521752208,2686469588,1842215641,2431933767,693621097,2698556740,1924001333,4225446471,1717780884,1280043715,1934616363,3129826267,3892658070,3988195118,1496178504,1856114885,2899047057,3941961547,3030610379,877978698,2892259652,329086752,3630951362,1561455074,3488068275,3958274066,625837389,442542887,1503968616,3424975254,473787589,1351071368,3410925217,1276653472,1347508205,131490312,93773039,1270003783,1065679935,4266343376,3810263239,1087742589,2709134845,1823070352,194057570,1287447319,2971160525,1087995357,31052648,2712604629,2626403650,3028356822,64428271,3212356382,3938400870,734201728,3917275373,3005036952,3148892867,2476251189,1363626631,740472264,847356265,3167275701,1475932078,962195008,3420982747,3692999298,66458682,2790067218,2018827531,1430599627,43533593,2356865485,1831563790,415629740,1997372031,464080575,949749522,2412642304,1740446828,75078428,3402860516,2846776447,2016818163,1027402406,4288815471,123994234,2058871005,415023610,630073727,4250732094,3148340743,69740661,2688142673,2538174055,3286707353,1823814761,685052682,608425056,304280323,3006054759,3228817403,2451214618,3582913323,3186710865,639505342,2256518546,2226677916,2925870131,3147601570,2876204287,3576984707,1947679012,464620125,1263359034,1485913353,2129875352,1649243501,899181607,3664570435,2959074822,188632213,3890386862,1189295059,2341664307,686389136,2686777569,3777651455,4271191967,3907398237,3329997800,2245760535,2057629287,1235004456,1203146418,207072182,1538416047,1122436982,396109090,4078712622,968436805,2509168532,546682907,1643950458,1375290490,3796103361,186132974,3465433298,2507246800,2952174864,1336559086,3011211570,896396982,33300456,2065219512,3984930034,88664090,3694504127,883798152,3554074050,2377310343,3332130883,1721420430,1527169100,1475932078,680640990,843521611,3080420495,1299572823,3251167534,3511253746,3910665117,558006339,2348056526,3071621499,2531998383,398357604,2782106744,1113615523,1081527243,236258719,2281899916,879898656,3416824033,3373745091,2576830007,358916927,145884860,2449261337,4092437372,3029453546,3998255648,4101825755,4035875946,4122325429,2663567998,1233167749,2616443039,2426503691,1255733128,2970769837,3340018879,1867404624,4052130641,386257033,3160695746,1689948893,2689174440,3645629961,3161728118,1568816772,437664960,2673165072,35426599,2655842707,1054329907,3457476931,269861916,2594549853,2597426616,157286671,3107938504,1774787540,277653450,1437285523,2361355041,4115420971,4252648429,3209110603,4005828126,621676976,3731902935,1936375901,77835554,1872327946,3566116711,3893310884,1376808856,1853101859,890970048,1993850901,237065659,3951861417,1874240106,3157307210,1189131065,582175755,2683890486,3256648034,1847265683,1121410699,1126372695,1846616866,583183091,1598670349,377956364,3639545782,798953284,1850715256,3379870641,839506987,3058043793,3577636145,969915554,2043424756,1475932078,3749633602,4106365127,3696326584,2873151665,170633546,3007816368,887438575,2368426406,3870407398,3717463284,2917880577,4164975643,1264145344,4216424914,2226740475,3527071167,194022830,3966894947,376883549,3775446025,1735344001,1156082452,1865720872,2560989750,903861901,4128248465,4275323060,3461365781,2974330118,83860697,1333549607,511924981,2220396524,1475932078,1475932078,3407514427,107838651,1963388594,1597156853,1597156853,529193907,1322993309,1475932078,3209243126,529193907,4084504255,2680783133,1597156853,3547893342,1475932078,693672836,3828817421,2549966419,43653941,3051863181,2609827955,3144537318,1597156853,803820499,223143849,1475932078,4134697544,3609836080,788094979,3390278044,656212304,2663353824,529193907,4073884384,334165224,3936875123,865176824,3029480074,45221774,2221829444,1407402909,1599263895,835831332,2465648309,2622132624,775564599,1883700082,17928471,25653050,3334233039,3976330841,1254587112,1475932078,747823015,232007876,760925063,2518473540,37133442,2513286040,3210964464,1847985140,2690811871,2728082036,529193907,4187564740,119834965,1061802200,2691253584,1288304899,4032020751,4102933577,2433043907,1010674793,1597156853,4224450281,529193907,3948989217,2130025937,928004342,3208745299,374617435,1597156853,540054156,474637681,1310788065,1886378415,1475932078,529193907,3663910004,239382924,1644697274,3821159193,157609081,1604145703,431840946,139321933,2224907474,2527146356,2152749101,936271390,3403694283,119834965,1475932078] \ No newline at end of file diff --git a/be/test/expected_result/vec/columns/column_variant_update_hashes_with_value.out b/be/test/expected_result/vec/columns/column_variant_update_hashes_with_value.out index f7c27b278e776e..3819c459cb0054 100644 --- a/be/test/expected_result/vec/columns/column_variant_update_hashes_with_value.out +++ b/be/test/expected_result/vec/columns/column_variant_update_hashes_with_value.out @@ -1 +1 @@ -column: variant with hashes: [3290145166093762980,14179897596576105469,14179897596576105469,2282085295964132384,3290145166093762980,559338346485959129,2282085295964132384,15905536912678961394,2282085295964132384,7021324166002335292,18096701186305226541,102226537653930837,14179897596576105469,18096701186305226541,559338346485959129,102226537653930837,559338346485959129,102226537653930837,18096701186305226541,559338346485959129,14179897596576105469,2282085295964132384,11072762366266850873,6348604300041726601,3290145166093762980,6348604300041726601,2282085295964132384,11072762366266850873,18096701186305226541,2282085295964132384,559338346485959129,3290145166093762980,11072762366266850873,102226537653930837,2282085295964132384,15905536912678961394,3290145166093762980,15905536912678961394,14179897596576105469,3290145166093762980,102226537653930837,14179897596576105469,559338346485959129,11072762366266850873,14179897596576105469,14179897596576105469,6348604300041726601,18096701186305226541,15905536912678961394,11072762366266850873,7021324166002335292,6348604300041726601,14179897596576105469,2282085295964132384,14179897596576105469,6348604300041726601,15905536912678961394,3290145166093762980,14179897596576105469,11072762366266850873,102226537653930837,6348604300041726601,18096701186305226541,3290145166093762980,14179897596576105469,3290145166093762980,18096701186305226541,7021324166002335292,18096701186305226541,3290145166093762980,11072762366266850873,6348604300041726601,7021324166002335292,11072762366266850873,102226537653930837,2282085295964132384,3290145166093762980,559338346485959129,14179897596576105469,18096701186305226541,15905536912678961394,15905536912678961394,11072762366266850873,559338346485959129,102226537653930837,11072762366266850873,3290145166093762980,14179897596576105469,14179897596576105469,102226537653930837,559338346485959129,14179897596576105469,11072762366266850873,14179897596576105469,15905536912678961394,15905536912678961394,6348604300041726601,2282085295964132384,102226537653930837,14179897596576105469,10602573589229546844,17112874075517206433,10602573589229546844,17254401115644597125,17112874075517206433,17209060699095012878,17254401115644597125,13302687684020648567,13302687684020648567,13302687684020648567,10602573589229546844,1038248107092713708,17254401115644597125,13302687684020648567,17209060699095012878,13302687684020648567,17209060699095012878,17254401115644597125,10602573589229546844,1280023314843046514,17112874075517206433,10602573589229546844,1280023314843046514,17209060699095012878,17209060699095012878,1280023314843046514,1280023314843046514,13302687684020648567,17209060699095012878,13302687684020648567,13302687684020648567,10602573589229546844,10602573589229546844,17254401115644597125,17209060699095012878,13302687684020648567,10602573589229546844,1280023314843046514,17209060699095012878,13302687684020648567,17254401115644597125,17112874075517206433,1280023314843046514,17209060699095012878,17254401115644597125,1280023314843046514,13302687684020648567,17209060699095012878,10602573589229546844,17254401115644597125,1038248107092713708,17209060699095012878,10602573589229546844,17209060699095012878,17209060699095012878,17209060699095012878,17112874075517206433,10602573589229546844,13302687684020648567,1280023314843046514,1038248107092713708,13302687684020648567,17209060699095012878,10602573589229546844,17209060699095012878,17254401115644597125,17254401115644597125,13302687684020648567,1280023314843046514,17254401115644597125,1280023314843046514,17209060699095012878,17112874075517206433,10602573589229546844,1280023314843046514,13302687684020648567,1038248107092713708,17209060699095012878,1038248107092713708,17209060699095012878,10602573589229546844,10602573589229546844,17254401115644597125,17254401115644597125,1280023314843046514,1038248107092713708,13302687684020648567,17112874075517206433,17254401115644597125,17254401115644597125,10602573589229546844,1038248107092713708,17112874075517206433,1280023314843046514,1280023314843046514,1038248107092713708,17254401115644597125,17209060699095012878,10602573589229546844,17112874075517206433,13302687684020648567,10602573589229546844,8739666254610784476,15178307909647726039,812377251159971894,5104988259232340187,15178307909647726039,14179897596576105469,5002941667199342543,15178307909647726039,8692085290974651848,3343855588952036451,812377251159971894,1244063564664642073,5002941667199342543,1171377148146271186,16129489899755404978,14179897596576105469,8692085290974651848,16129489899755404978,16129489899755404978,14179897596576105469,14179897596576105469,5002941667199342543,8692085290974651848,15178307909647726039,5104988259232340187,5002941667199342543,812377251159971894,3343855588952036451,8739666254610784476,14179897596576105469,1244063564664642073,3343855588952036451,15178307909647726039,5002941667199342543,3343855588952036451,16129489899755404978,5002941667199342543,14179897596576105469,14179897596576105469,16129489899755404978,14179897596576105469,18011992382478577847,7360877390192632990,8692085290974651848,812377251159971894,1244063564664642073,1244063564664642073,18011992382478577847,16129489899755404978,7360877390192632990,5104988259232340187,7360877390192632990,8692085290974651848,8739666254610784476,1244063564664642073,15178307909647726039,1244063564664642073,18011992382478577847,14179897596576105469,18011992382478577847,14179897596576105469,7360877390192632990,1171377148146271186,8739666254610784476,15178307909647726039,5104988259232340187,1244063564664642073,7360877390192632990,18011992382478577847,15178307909647726039,14179897596576105469,5104988259232340187,5002941667199342543,1171377148146271186,5104988259232340187,8692085290974651848,15178307909647726039,14179897596576105469,3343855588952036451,14179897596576105469,8692085290974651848,812377251159971894,16129489899755404978,5002941667199342543,1244063564664642073,812377251159971894,16129489899755404978,14179897596576105469,5104988259232340187,8692085290974651848,8692085290974651848,18011992382478577847,1244063564664642073,8692085290974651848,8739666254610784476,812377251159971894,14179897596576105469,1171377148146271186,15178307909647726039,14179897596576105469,10602573589229546844,13302687684020648567,2304212471448909901,13302687684020648567,12359048830691715757,13302687684020648567,13293414154332091538,13302687684020648567,12359048830691715757,12359048830691715757,13302687684020648567,13613960073370969052,2472461031540241330,17815258578778888438,11170613619857658709,13302687684020648567,13302687684020648567,4623580367614773573,13302687684020648567,4289708442234706008,13302687684020648567,11552622925026124944,12359048830691715757,12359048830691715757,12359048830691715757,12359048830691715757,4688013811067771242,7856452706204403306,13302687684020648567,13302687684020648567,9753965225196829855,9394402753015823089,13302687684020648567,12359048830691715757,12359048830691715757,12359048830691715757,12359048830691715757,13302687684020648567,1509191514857943066,187849560094777570,5315364172701025632,3504649842843451748,12359048830691715757,3148298162024192477,11042776522728687326,13302687684020648567,13302687684020648567,5596852626596824375,17074599932331248709,12359048830691715757,3754174822703729661,7810040041842691716,13302687684020648567,13302687684020648567,16189095675728225227,255714044816409931,13302687684020648567,12359048830691715757,12744991635814369385,12359048830691715757,15169920827410952292,13302687684020648567,1426916479094374011,4452715528165719241,11936773386101778446,13302687684020648567,13302687684020648567,15008289404070888265,13302687684020648567,7030258425402590679,12359048830691715757,1223801264702774161,1036006280100608927,13302687684020648567,8141277443953488766,16548412318812889026,5475537186384353678,17471770755386394405,13302687684020648567,12359048830691715757,12359048830691715757,479311632194338959,12359048830691715757,7399442542196036391,13302687684020648567,13302687684020648567,14184195780233559772,13302687684020648567,15704543699661715723,13302687684020648567,13302687684020648567,13302687684020648567,17679315446558780265,1494615190534264233,4260143534680144484,12359048830691715757,13302687684020648567,13302687684020648567,7669219378345197213,12359048830691715757,12359048830691715757,10602573589229546844,11078528463228466898,9270824403405340911,4057501132997343753,9064574482019229418,6407906027649426847,8985107072384555792,1184937332609662247,165086601481611427,1604324956158494852,14656053002828163632,17432059392688763612,3769118726675317215,14405266818605471701,1925201385917300938,6570394395680375075,3815998028434298813,6979208951624431293,9199434165347712341,10969246000779150374,1816117100766478416,1420074487803791636,14826184238410967220,10226733588431959438,14385069137818721227,3173312581913078194,7738851968796996458,7630940053000986213,1950086453039278227,15795840083653236232,6676050004705678461,17761328392960004411,17050041739912832401,4784796073699347100,15744214346824844721,13546806644589978702,12828345096931480804,13288174914873978106,7327977852645649695,15419667647114272896,15634897202360971661,2867300395619592955,8489318576164157575,13840981329683177286,12977248042709188475,5083582178648545724,11312234168657327484,3084043064725675425,4073658190215197847,5415109524180399730,2849907624439992348,7818088421898641518,15240205013926292761,5752367615268795819,5127258499718568753,17010732234858126677,14703566510920687537,12821611438210776181,5185939693798710130,4971791540085243677,10570541847167161500,6008592764559804816,1917411618067623777,14831265224814696922,17791533807329327254,16366559929965270505,7246244413306650750,2019343607893586053,9122358649975914223,265578328016738110,5377300460344008741,4260029511319163005,18384822298888526875,16383696710351989952,16266579460680890865,13121359705169924188,2191332908967417731,5475486564072131343,18052280571290928181,13232344105632004616,3311198282629280022,9780225921141519843,17870651751453117426,8777262128738547941,8963313953012987456,17851338770792313206,4389520907420599746,8127964366078443055,14921610986432916425,11176915577281374279,1407903180093673376,14786132066306737028,3376552168250192875,15056033403331444786,12888409061840645292,7223473883412657650,8785980099090856489,7747186992801858268,17198613561093558874,5753460429532648455,886239565775419392,10602573589229546844,15872134320060056111,7559884574576698649,4328585262606181976,16358945300240752532,12464524184570539358,11014964606096999732,3084316737218512843,9278133677686438626,3518440876519799723,10775703406361350658,5805060657492691696,11924358278266768721,17855343030579816859,14516847337676784407,13676127831254318547,10456905929595148683,7735620555393111266,3241768658482335014,2595476950073929310,10421738543798853648,17911006528214355539,576749604685988464,8422051840612098804,252187175464301845,2284672888619046771,7882495673502672090,13885845998556727370,9886530209998608733,1479690893742776007,10434197361650708763,15069769610481535357,580284055471504057,17252798465628782186,3384443002128773597,7852457786408498836,12683757221328197990,7032018564012797342,7238496811887382872,5037019288439403018,2412080750403882540,7355165422853651479,18250774343352987357,11246008152933736383,5385049900633323131,14754315140965713623,16437797297411593563,65649294369131690,10844000642436385971,3765693506386461266,13026722847395944936,3283910339400917698,17271812845574894566,3776371020329813283,842568490056386289,3581349608572071771,11292576361582828866,13824456289085998812,15330732957077035245,8786719435872347202,2073368443058328488,6441321833059451836,5069839156882732393,14832544838006298453,7230708353583680382,7805820249885947283,11529232597114378927,15389721387823150543,18321457519182203783,4710300886632918119,1041155623814670477,3872149014426072278,15979683547824762603,10868432513599470662,13833226343277270151,10413803895988801314,15190424076762442509,6433380239606099317,6052633643101512701,9003115080978215971,14153407480110880185,4119395796052909149,11135111373928480509,3954857937491835563,8689008136163576436,11530124406766178326,17029029271016296507,8773028854759323383,18088628066909173907,16354540222337358572,7458466405529490000,15174974958880264903,11209234501548056867,12383592288236160612,15814012305177451434,5379875769890031652,12727491509863781135,15902054534992604478,11519416013863429713,1173951417776995118,16648489215745723877,10602573589229546844,17203153323972358178,17742878855641594246,4924844209718222592,4135176252081941781,178748180946962156,2222271086227148369,14177493903788009281,5041240531480921193,12068733577476301604,4007150231755155871,5446250639082586416,9099844918804967619,16828525984764175972,5716405752005651015,12740865445580224825,9274583647079151728,17432680332835883668,4911957039163506608,4543209020176646527,10786081754605053182,9118957709374980316,9627144256951978670,17356687123204871446,11370444602574441398,17113306970144086056,6595344544555937296,4721566182156582271,10009584245958859921,362401659160067721,5549022485866245697,3807628175306549836,2274708382950256232,2695820098762577021,483975751063028122,434890395856256628,7448586734777288132,14891402305204231350,7847866160680163953,15874491104163534088,529473970365849976,9988536511888063190,17100231009091575357,18078382210723421719,9720203011099331283,9675611621984291059,12491047585904544030,15272384185733715038,12944417101690996783,14363016931326417511,4840699627439038661,10340228522981402649,17690480527894510627,7604459736870934842,5751775263088702391,15642995554395507151,5466017630847637232,17519613609860207754,12753608512079682241,15595220839430955202,5375431124669602890,6072052997545167453,9428624683311034151,9880129852230148958,17788158196091340410,4376284683713879426,14331998802871307213,7290705505224189150,12463655123131126548,2673049891578764007,8774136865663922522,8714828247828333166,11916994964216675318,9047788826610290135,9753373531515544548,6282888024718994066,13993437694560513908,25556850036741933,4781545729367770099,13254572643491790547,12649084963090877677,6216564577478025921,13318305349620368987,6821218868290178674,12701799770858620030,9842881334944845490,5641564015292998965,10417937444271514412,17816193871284015790,10392723424791641408,2624619336333270595,6305710236723850138,4681452046143442236,3687708255984554353,7276275058476875765,13262003968656109884,92165720835080734,10409221065344579158,8232052831451324411,8067498541312495138,2551567092579314271,10602573589229546844,7326352887493694710,15189149154581556638,8808867487248125621,5904392934218447993,9029278753792209148,6517993134731675987,15902363608976369278,1031041436428329184,8510946436763466173,3176310636165232787,1597495200971986531,15834345599469942897,2180999923836713881,3044881705341095081,11595299560029682330,9315192753370508746,9170581200494814218,5851672579299793898,14717663129718940111,1406151836439411786,3260973658698922871,16203256600477833126,16576423156895806556,14362955949837915181,2813876429358201067,3137473598973988982,259388115568205872,2917417053998206741,930256901693239410,12033410642815195485,5657517069247033365,3758194451725281497,12843379457889633796,18238788632786218268,3896842522533751646,18268506742313693132,1908918760289502471,11825864707562857343,11610163084068807749,6221931061535521958,17267243088573094052,1347273201590805114,13909778679637712596,8233517626437651588,10047936433362963431,17115428351859572143,16483185524190047882,15204250469136906261,13611916722830016167,2099576251847421927,2261190933348059546,14255371148909713495,856915394790746390,17320963270792083870,9623468820166879237,8269702744907857892,3779706672242582155,17952039103454142226,17727264939475063992,10255963125890116182,17662042042679070808,1209638727956033196,3840994900245247853,10730681120184758188,10379132100415159073,16626266965189646531,11074987208864287607,10861253310822286195,9316361369574055664,1640977774773151457,15755869191161483245,5892511431504801167,14784774002384453984,2636079409402575837,12024512115868410777,17597092020922872033,481870243549136780,1805839673278493683,13403293069164353946,1157324193543157746,102596199047747489,13717624933084840409,4183376463880352828,7486771940490564716,3139975234384161623,15726130405003381247,12484853971055466882,8992768775401560083,7033788999853960409,14388869810324883420,5646116694537626834,7401055423804098458,12160003175243089421,6218774451448178323,12755774764885890439,6236945731054508744,18037169531353845713,12143810950107380841,3509922375514232176,12692764884065073308,10602573589229546844,10602573589229546844,5960457565334411020,4244338613455473297,6616616615124076912,11955964023239671906,13659231367932954295,17459970002444133797,11586563463171586633,10293643728944242296,5709890512077047168,5390485507895200984,1902120523826988608,6204548357177236244,16809194573818755012,17395958212806504369,5435367679895773653,14068166009790862812,6871251789279673713,9101745588490331834,6820469339856609663,14299359535145625228,661975544424843312,9850535218431053105,16161435790515301309,3432347660578356015,12366328078538805733,15793771728308216978,7622282362312611983,7347376077607041892,50539409706381864,4308193127989152658,16926167683198279850,2932732789412369050,7590893604425623516,1931054301206827042,15328988501495657273,2441275510970932436,12361316580096500085,2386145969735155915,10165990432371970473,5849317780064962616,14425840351857313062,4842997969657191943,4343746726497499451,11770073243997260797,10880577211310477890,3102838113447176142,11987756886175411149,15334526734128792518,179549733929923433,8223859359167698454,17792206221143428834,10072449279887774519,4780554196155212684,13754206870766679993,4575590887037891283,2517283009761618466,7998386181513037384,16671980031883730137,17414929121823471734,13782096807224460510,5274931931195337934,8176464995585308332,1693304172179468169,16377976372980554435,8576394114847577874,3076187404349397061,13589831145133467721,3964891337356401439,4086834781388890410,16381132618688400966,8044737992256673494,8463087656999980177,16162318915184717622,7162910006252297273,12209117036302275403,10064391391054435237,17369254697043137944,10327078810175198230,1735071064453774776,3137024485878812427,15500564702578731623,15707466433012446535,14304568681306566357,10624292185432607981,13346088199160451064,1047521059294111176,5486326630031384299,7939123415503849531,5648153761125097690,738461163886223076,3039983643004176068,953687744537365420,10221865676065344169,12595820325101338128,17244163487115289487,16201045287863524406,17590234168248527612,4699174876879551008,1106371329212808049,2002617613800066140,10602573589229546844,7183401416957031585,12076693006237094892,5937988889376106012,16456410431959210174,8932991786486271580,6962913320336483583,10233381659658714223,10867174968109132147,6129233847652433440,17822226402129210138,4276486576655958605,12775136395640284192,3754124365376375950,1885655150057378787,2019863245594777703,13325512143702844809,2550364779283090790,11524709758760695571,6729478450002051661,800952670321322475,17308628722445384471,11150300655872553471,17295360842195561958,4916369494758685186,10600935308502095446,6970349675291331358,16823670614814377116,11499017352696888582,3851496774575724997,5184053360520920230,595708978826242635,2383894917649564633,5139147418982042852,2026170229727951214,8472257561491725180,15471313320852897765,10681919417935555416,14032689424156356439,9590673241922088199,9236678035184909242,7949128185822096864,8346450043567318821,16960270449204278225,5789267810441726409,6110368825526033640,5620206573965554523,11990390467744875217,95370221068666123,2343237007157341145,4970104386626117365,14280210963534624349,5466637103895262524,12430588125202842900,1050985079669031561,4811470836354992054,10100770411149823472,8167163948434783319,16610796952855441928,13045764703584750967,14545943460636755642,12518234423900929186,16055022269575837584,13705095591824147993,8633591064846448554,2286559633547158891,4607601762782045124,11596241992969996566,10847130871956718017,17112783129721669965,17148986314175834741,10336789303584019224,2381263103797207369,14739742558588072624,14449810855494386103,14464620756138391705,15609208131675145371,1212541055318962605,12711811796207667647,10613752917820200992,1371881409996547006,5575327075932639798,8537585380951824935,6950409076178757814,2982607551297859926,5900167319431715598,13060937734980206101,8553978863000460687,15985796496958186431,7867474051776884287,15964016375995594524,13755992738612270514,7527214212025225368,8545734971344547981,7174342528264451153,18430419953009882584,15260873774473221899,4299769974746939445,5231753616031241770,2973540424586533058,459568569691678998,10602573589229546844,15337563609455363181,2796514642721817560,10482810323167991106,6249665449184620954,15334935617308769368,13919941537000217653,9748044664990820722,17050183124352069299,6160802939903581576,12720787555119913506,2679915385099775688,10505039160101376257,3325336990986812981,17241624377155028606,18081338112631802629,1847677915718139299,681984696385197390,15729018154561322082,6086703267657645374,9342847630701005151,2274224041984896863,2236360414269904254,16956514831969316584,3137789496121549035,4412642917201584576,3584794310008660459,12900267584452864979,16174712686859089948,5658546200301652320,7160107916934041241,7665141211099913235,7267114041469446038,5409542752345536214,2588744273721235112,10038716364799216054,3989427143024262217,9502084679397128533,15607171222994809003,17966296997152003599,8019685053991382869,18153796766605286027,14518788494089733890,17853591646753790051,14278575594571788667,1346479387563357422,5622240203918140762,12058941286589889491,11456807865854682413,5240446596896205182,13341330249566828899,16123442879568284480,1872936128664255764,12167475020261592682,557297687847228837,8930277633594363104,13819941730143336027,18329549476667324177,6159654301339806710,13773809203530302367,7590342135084066293,327925632540303172,15173645336209490729,10046530397846617759,13004236943311019688,4747576370413112294,5696300638119677654,1832757651017951858,5920855719383529106,12225802126934379107,9490596010154943223,1208738002276431491,17973415453688435477,7992926857421443803,9769999314584595262,10897402804189501920,14878049484782298807,8850136056563903709,6833187625669349912,5934593967705005038,14773605707708345730,13354191879806099937,9815878477379599932,8423939223268191791,6550475470298189869,1168418314527648557,3583525173810313747,14099746965589579186,6610453727338652003,15679593227684956240,11308430043917808573,10698570428701842065,18004786861008912760,13195284883724657516,3778747305995814275,2509225883543035563,18002137865348949251,11900055750107987323,2593496529629806991,2378021401140673839,14312437332830458020,10602573589229546844,10602573589229546844,11935392864309492456,6090780613771958546,473017201564071102,1017800851121029738,6889031342303319404,11252413481805335879,9056509310487825211,3425449059326623166,17898929070289959481,4364306017173680982,947264281165006408,14005705578502286611,13166277875441447415,4077494670967254080,11143559651697948765,10587204309214330919,2507649064686487101,10349745214682825056,14957040897407912074,2041306716508881962,11546041964664944165,11210889241126232641,10837199508475108785,6320469185297170239,13730372745992217792,6245998675035487129,11370680752830355524,626607459241576992,11128070988402979047,14362961850162365657,2316436521929724107,6483274438166397173,2504696073600428139,5002969785280866512,6780545419348599011,6942212855870179346,8883669364472311659,2243537348011891026,6995753882934517678,6334680567406413602,536598075656415556,15858956348022752347,15683193856132304010,15898890695493361060,10760427267211426992,10844292861486068997,5678849354580724559,1453747652168799733,3663399049815135106,2919488802391799545,1530904054714843832,14494447114166544286,11524725906807963035,448546930606950842,7117239270937371539,884457655325540621,2063579577878199380,3183695289788864790,3948336354189826555,6273501536468123850,17288209575956210851,16890141275503216648,11365322542473363091,9171651705765464480,12936893167664465219,7437249650533784820,3741842156430022113,18001329923311345553,159493376171727648,15757061921037378470,13394796526814296828,16507451242205393579,1459373990837647244,14472911833332497085,4175222137065452840,15383819579176714664,16673444610976607750,6828642206807605362,5381385146675974433,10271623647426785765,10213773858564117499,6843027133997703985,9327838055413887008,1573149076528824326,3865892866332766211,17139594320899285242,12270285906878818509,15737275773167675168,9073017128831602773,453221931226629324,366160255012070506,10241171687887474388,6395757272531031457,6550154693215635268,13223967338308880059,10267148828875625253,1205680773761476341,3080653224648443205,5721246910185661258,2906967166550131762,10602573589229546844,7861988692610954217,9542623669186119750,16922426114756168947,5191474574223609161,9954739135685826850,7229668957512951315,16084811999171561622,8072839219614072481,7406880761813178939,15612740789108347317,541995465442804851,13732445822591192318,18086201691784447055,9746982845526750340,12804289103014173084,11083840833010329991,1783003261643010465,9117442032978129797,13012799312388516121,119892996303555065,7474373714424659854,4673137979086430732,12665526060977458683,821595259113844688,9241395977962668441,5810706344739782464,2958727076944262512,10872151066085158195,3975647098490875862,13620026325845212606,4592708773051995425,2532050216248358656,15286182533135633581,6056878601740855776,12989164715043761894,3580611142715920923,13203439263756832993,14057924180038507459,9994214813627291833,12545952880190479071,5717269521054597677,16850365877971481262,3056472398115111922,1249067097803586938,6594590285704539117,12976098760044119563,602871569998526564,1173030003460382511,16018119098348287776,5188101113322837813,17219109487424544083,11018814190263638018,2226575031512035975,10592996648536675770,16703193955119184793,14641653226494285088,531572449938331672,8534790516645752680,7458147321315620727,15624175467845668551,9520460063946164892,1636320769486596995,17165432618256977288,10482777825757818210,16701708964921053821,16512154151947728469,8887635219842572857,10034603326835099454,16643404147981460192,8273501013454361383,2664913241702696223,3898455886186912132,3139927210379830542,4254044792383814861,2927782573782793884,11703602200944442267,7958024954149200660,10132613804970118929,18380146648515189415,14798010622071330539,5157543067879825470,217422333579415495,2175075376288740309,12075631952981906157,6346645347160363685,16286864106778650282,9149023965382996783,7187684626250123351,11733308323734394737,15935526861041309217,11402650990727889511,7144538977177484771,11122690345453572829,5909017433199184824,1862281579874231777,3465544670563961433,10950782010635300570,7979757813884359726,10871384119573043367,10779436062867761739,10602573589229546844,7602915691898082947,12223805249662029333,15428270238661777337,13952131677327538262,16691209701183328661,1177065616029098765,11698446458574049535,5484300726561222883,4524181949072295177,17614339940677052472,4260352294316790066,10062885795435671989,5265269110081975485,14780998715881399715,18318857723895210761,10205005248348674485,5683294312249491907,14406529908851010883,16579940993382618825,6894282513646431483,10410695566846433769,14483975964560886411,9419009991411002520,7506655244805145046,8158132972222574817,4317030071999241699,9227648132811588062,14876442553533281806,2938297536002995958,11962023668747572821,16848862289943456528,1745206687243636644,3163039293804490140,7965830451125301181,7320159349859058043,18223894366655946656,7447859255312115578,16359865623824936454,1854214475964099239,12790032986603393000,4197298934343860245,8304160044633506792,5186908004396312716,1488270794450998676,16837485535140191649,15852074795445534926,16079148098160424916,11938995368413388486,2650296204035784104,18083826560355223505,4024307455983606731,6067478450346618615,6773611771451021357,8967293749527092598,14481824442061067754,8717807574741918586,8677953596970673824,5861506479573223363,16720764491503169167,18204700738351837570,1601319643367906329,12188611969365430373,13368582402633748028,11280967755420275390,10455147737488341239,9133286196437847107,2067382378581099799,4359080183269515044,7698052785559880451,11227198840448166246,18354106958294554958,12440236377642337374,4174867569774363095,12891084248857144885,2923065289364701847,17130562612393648001,4351796895229373497,1177320057690495826,18194616179329341515,2324932459667616093,6805414145910604655,7047694696074336155,13017798834482261492,17865242200942845773,750289459317936482,17055420155079918554,5750036491900941234,959801494045902682,8335517470166022825,12685443196340580600,12863612980075964176,14004915064814197395,11397022204474553586,12869205345282788725,8695816015635508925,11592803097353505248,13348790064348741122,6056670212433495332,5605111642648214925,16634403581929517129,10602573589229546844,14153271315395398218,326816133871190183,14408119209847881113,5451691219550610714,7564291543246112263,3896350064206377695,7891617190834882432,7602944212131307248,7056064730876278813,427130267315539355,16780239150340606752,4952159950189022646,12996357555864634677,9529796124425403307,4405169690911724950,6774143990133700236,13301954074552043677,1156261787321610922,3102833538695532732,16900037664611261618,11007831070178712166,754376886755701716,3688782032822940656,7217314537131834497,13299141694869246359,8740777967250665439,7049975659789979789,7750713763084053607,3563046201675003960,15132308250250603149,2475524453460574157,17891835394196995748,7061029283352714327,17695068694310177348,6650845918198444384,3697360173016937737,10404104291479598257,4545983307240123956,11509583569607948428,17827227931866117995,3853965369418134636,17958754611991056425,10484647090737041856,8904264362215956640,11093831137412369748,7558913430485726726,1298198689422346959,15495297445927865470,13000897759210383218,1358900196871698490,5752370384341585999,442215439806999784,3234797544384537044,4041108195420888383,994294295351023662,3150507688824358614,12447938559920176735,14909094379234764493,10049187155610792209,4420379597908025686,15487720521233417680,5441365388390311545,6578172654378101579,2548519569363943282,13513910697155596579,10442460940677035469,3414190529818641490,15825869240556011094,3914238732020007383,11375226709152188604,10923760893711545050,15023660279330229896,1494062959400515782,4661602374806528710,5668287203412210110,230755449342440165,3077708704253014214,2886485735832144568,12156841753689183063,15320799827427474320,7629472798632943495,16949978362654098140,5073396884301449011,11145895259859769377,4490292311742104268,1322289224583716761,550011016766183932,13885881715549220160,1227880846040292615,1493699926901101604,2571535513391691395,7766602346589229932,4161709166992439722,5934756641106611056,15615787299505078438,3732888415720347212,11365097727533839881,8984205759639104077,5651062067664181975,14444323787944745388,10602573589229546844,15103121693672241500,3521641591753484771,15634763677585556505,5012125620375077019,1706507395531208570,4238591940625958013,17807036249047440623,13965302906432604678,14342438513634579153,16173268969268916331,2906381193781788412,492034979555030414,3876367680649732061,1844887985021401524,12186589931722211999,12482314604060477289,13871245352204387928,3444855833359739859,5387436819519360815,2076314752481071900,17600974190772006507,15738549682502611789,13778523759301772607,13248635162388700162,3567882042814727458,11707866385394706258,5584779742345949579,6316525302073988025,1466502847881357741,15053963760404193743,13351841322930613775,14495353415798598836,9286145431821924712,4429142900663673699,1253541791538229497,18372574080045504034,16913937471672424163,6769601902996410767,10106169381850068128,2046705625640368810,17665647695005225073,6262937810328346618,9396485767175674101,13127846868936943426,17132675170525251309,9822866650905881836,15276013060884547688,6481647878237451636,10484613655228638153,8920643728639777626,12230101164777090770,13109161096494271451,12843414999739612798,14933343336120854287,6509778995012354659,6954126439923916840,10336393798419431522,4074807093639023595,8619526069233060808,16820246949633624843,10214954673539226582,14570123114052203618,1074337038402981810,7635067748864813450,5532526665657502881,5906905223167709783,18137267062554394250,9691118398569104087,4411331501151024978,3868971305839894956,4450197239220570048,17830459733683099562,9813593581930012113,3279902096370508634,13303851672305459446,4861109288561974529,13485954880722818947,7287320196866448723,2910133932739716294,1241093941299981163,3882900114128207045,18150434417531441621,8536678956549242392,14302418635881583431,4889936147685899223,3599574795349086592,9349614689489251647,5941334082615690054,6510633516280536988,3658752572837284642,3974842878463759276,10962539822376420559,15697059852741816176,16849495926099519245,4794416623041001843,4355756214372903695,2174544023868699197,4319233948612010179,11962472209250164211,2482351457502514582,10602573589229546844,9606072669490943975,8389884739042335419,10681567007315049665,13850931412078522037,4095788952686561506,5314405036027915188,16555202206404415966,13613467935258868325,15040769577639001637,16817224804994174833,503427878074936323,12475879360916906694,12175099612243662372,18245644000284154433,13005997902542078321,1807529333873025669,15414290744617828076,11185621556175414490,14508931569028465826,14547368062995101697,13601547940131665976,7837430560381113455,8724045410384058508,4715691361941460079,15295393493207429071,9833419065399854963,1499005462894536992,147000590335713500,5794204145019158092,18027972318832059754,2306138158897856625,1646398918976608194,16479342627581483859,10602573589229546844,10602573589229546844,963791532086122350,3106215778659157110,9413220622851381370,13050753064511502071,10589776816262904999,1513273915360000787,17117724955369309339,10602573589229546844,8258539822085329220,16224108241331388138,16493838185686639719,6585570663018178124,3242158827382383426,532068077042376143,10602573589229546844,1521099166341804923,10149396001724953693,1756370674430250861,272906525482589462,13295048459984557089,17106533627012725264,16258397819673723547,1701994841097870568,16352688757522242862,2592634411084718411,10602573589229546844,5541142905284323951,13345047184995215122,3971061552779435021,10830027357181313585,5796602532533941613,15892824111946181525,5527791634177741505,1658356268895861488,4092079150346932278,8268006023887080068,15900974100529564652,13009627442704154436,10856110554090549996,9128749983924206467,7029116692464540725,3153230139144003885,10916065712441949287,15563238854963442114,6032000426154971505,6579433662810826268,4952551125421147930,15128319560645286011,2347561215985436307,12763308926857672362,6518724237147960678,984193294971367937,10602573589229546844,1106616560598776674,1360941020276498676,11785341071430504216,13770401122605315710,4342298566152571609,9606360809014113199,10671159392272674082,13108837898245418828,2817857740954170170,14053265279651645011,6585021163752747784,2650033388370156597,7503758639846881608,5324629953184810166,591688603668833492,1577895472049365994,6346920869462583589,12392238758996181370,1704538485242833086,17152099210315068784,16180298156806132622,14018723029693390588,2884179524142278313,11124163375537191282,18320772732460611898,16820343451080465911,17819459477958525685,5813970103203806564,16633755104059066579,17488033902177687201,2473608697134418559,17709003374781246393,95460204587832587,10602573589229546844,6358475991181475274,1196633835267704076,433249600599133112,8007241031025770700,9961433277013134100,17513373899142762175,5496173628826520494,8251532161209005934,16822713586793458169,18038578351767047046,3251458916879764809,7142933183701881721,7022895846954486648,380615169797729291,16862285182576518907,10602573589229546844] \ No newline at end of file +column: variant with hashes: [3290145166093762980,14179897596576105469,3518677861186945217,2282085295964132384,3290145166093762980,559338346485959129,2282085295964132384,15905536912678961394,2282085295964132384,7021324166002335292,18096701186305226541,102226537653930837,3518677861186945217,18096701186305226541,559338346485959129,102226537653930837,559338346485959129,102226537653930837,18096701186305226541,559338346485959129,14179897596576105469,2282085295964132384,11072762366266850873,6348604300041726601,3290145166093762980,6348604300041726601,2282085295964132384,15809008797971016995,18096701186305226541,2282085295964132384,559338346485959129,3290145166093762980,15809008797971016995,102226537653930837,2282085295964132384,15905536912678961394,3290145166093762980,15905536912678961394,14179897596576105469,3290145166093762980,102226537653930837,3518677861186945217,559338346485959129,11072762366266850873,3518677861186945217,14179897596576105469,6348604300041726601,18096701186305226541,15905536912678961394,11072762366266850873,7021324166002335292,6348604300041726601,3518677861186945217,2282085295964132384,3518677861186945217,6348604300041726601,15905536912678961394,3290145166093762980,3518677861186945217,15809008797971016995,102226537653930837,6348604300041726601,18096701186305226541,3290145166093762980,14179897596576105469,3290145166093762980,18096701186305226541,7021324166002335292,18096701186305226541,3290145166093762980,15809008797971016995,6348604300041726601,7021324166002335292,11072762366266850873,102226537653930837,2282085295964132384,3290145166093762980,559338346485959129,3518677861186945217,18096701186305226541,15905536912678961394,15905536912678961394,15809008797971016995,559338346485959129,102226537653930837,15809008797971016995,3290145166093762980,14179897596576105469,3518677861186945217,102226537653930837,559338346485959129,14179897596576105469,15809008797971016995,14179897596576105469,15905536912678961394,15905536912678961394,6348604300041726601,2282085295964132384,102226537653930837,3518677861186945217,10602573589229546844,17112874075517206433,10602573589229546844,17254401115644597125,17112874075517206433,17209060699095012878,17254401115644597125,13302687684020648567,13302687684020648567,13302687684020648567,10602573589229546844,1038248107092713708,17254401115644597125,13302687684020648567,17209060699095012878,13302687684020648567,17209060699095012878,17254401115644597125,10602573589229546844,1280023314843046514,17112874075517206433,10602573589229546844,1280023314843046514,17209060699095012878,17209060699095012878,1280023314843046514,1280023314843046514,13302687684020648567,17209060699095012878,13302687684020648567,13302687684020648567,10602573589229546844,10602573589229546844,17254401115644597125,17209060699095012878,13302687684020648567,10602573589229546844,1280023314843046514,17209060699095012878,13302687684020648567,17254401115644597125,17112874075517206433,1280023314843046514,17209060699095012878,17254401115644597125,1280023314843046514,13302687684020648567,17209060699095012878,10602573589229546844,17254401115644597125,1038248107092713708,17209060699095012878,10602573589229546844,17209060699095012878,17209060699095012878,17209060699095012878,17112874075517206433,10602573589229546844,13302687684020648567,1280023314843046514,1038248107092713708,13302687684020648567,17209060699095012878,10602573589229546844,17209060699095012878,17254401115644597125,17254401115644597125,13302687684020648567,1280023314843046514,17254401115644597125,1280023314843046514,17209060699095012878,17112874075517206433,10602573589229546844,1280023314843046514,13302687684020648567,1038248107092713708,17209060699095012878,1038248107092713708,17209060699095012878,10602573589229546844,10602573589229546844,17254401115644597125,17254401115644597125,1280023314843046514,1038248107092713708,13302687684020648567,17112874075517206433,17254401115644597125,17254401115644597125,10602573589229546844,1038248107092713708,17112874075517206433,1280023314843046514,1280023314843046514,1038248107092713708,17254401115644597125,17209060699095012878,10602573589229546844,17112874075517206433,13302687684020648567,10602573589229546844,8739666254610784476,15178307909647726039,812377251159971894,5104988259232340187,15178307909647726039,14179897596576105469,5002941667199342543,15178307909647726039,8692085290974651848,3343855588952036451,812377251159971894,1244063564664642073,5002941667199342543,1171377148146271186,16129489899755404978,14179897596576105469,8692085290974651848,16129489899755404978,16129489899755404978,14179897596576105469,14179897596576105469,5002941667199342543,8692085290974651848,15178307909647726039,5104988259232340187,5002941667199342543,812377251159971894,3343855588952036451,8739666254610784476,14179897596576105469,1244063564664642073,3343855588952036451,15178307909647726039,5002941667199342543,3343855588952036451,16129489899755404978,5002941667199342543,14179897596576105469,14179897596576105469,16129489899755404978,14179897596576105469,18011992382478577847,7360877390192632990,8692085290974651848,812377251159971894,1244063564664642073,1244063564664642073,18011992382478577847,16129489899755404978,7360877390192632990,5104988259232340187,7360877390192632990,8692085290974651848,8739666254610784476,1244063564664642073,15178307909647726039,1244063564664642073,18011992382478577847,14179897596576105469,18011992382478577847,14179897596576105469,7360877390192632990,1171377148146271186,8739666254610784476,15178307909647726039,5104988259232340187,1244063564664642073,7360877390192632990,18011992382478577847,15178307909647726039,14179897596576105469,5104988259232340187,5002941667199342543,1171377148146271186,5104988259232340187,8692085290974651848,15178307909647726039,14179897596576105469,3343855588952036451,14179897596576105469,8692085290974651848,812377251159971894,16129489899755404978,5002941667199342543,1244063564664642073,812377251159971894,16129489899755404978,14179897596576105469,5104988259232340187,8692085290974651848,8692085290974651848,18011992382478577847,1244063564664642073,8692085290974651848,8739666254610784476,812377251159971894,14179897596576105469,1171377148146271186,15178307909647726039,14179897596576105469,10602573589229546844,13302687684020648567,2304212471448909901,13302687684020648567,12359048830691715757,13302687684020648567,13293414154332091538,13302687684020648567,12359048830691715757,12359048830691715757,13302687684020648567,13613960073370969052,2472461031540241330,17815258578778888438,11170613619857658709,13302687684020648567,13302687684020648567,4623580367614773573,13302687684020648567,4289708442234706008,13302687684020648567,11552622925026124944,12359048830691715757,12359048830691715757,12359048830691715757,12359048830691715757,4688013811067771242,7856452706204403306,13302687684020648567,13302687684020648567,9753965225196829855,9394402753015823089,13302687684020648567,12359048830691715757,12359048830691715757,12359048830691715757,12359048830691715757,13302687684020648567,1509191514857943066,187849560094777570,5315364172701025632,3504649842843451748,12359048830691715757,3148298162024192477,11042776522728687326,13302687684020648567,13302687684020648567,5596852626596824375,17074599932331248709,12359048830691715757,3754174822703729661,7810040041842691716,13302687684020648567,13302687684020648567,16189095675728225227,255714044816409931,13302687684020648567,12359048830691715757,12744991635814369385,12359048830691715757,15169920827410952292,13302687684020648567,1426916479094374011,4452715528165719241,11936773386101778446,13302687684020648567,13302687684020648567,15008289404070888265,13302687684020648567,7030258425402590679,12359048830691715757,1223801264702774161,1036006280100608927,13302687684020648567,8141277443953488766,16548412318812889026,5475537186384353678,17471770755386394405,13302687684020648567,12359048830691715757,12359048830691715757,479311632194338959,12359048830691715757,7399442542196036391,13302687684020648567,13302687684020648567,14184195780233559772,13302687684020648567,15704543699661715723,13302687684020648567,13302687684020648567,13302687684020648567,17679315446558780265,1494615190534264233,4260143534680144484,12359048830691715757,13302687684020648567,13302687684020648567,7669219378345197213,12359048830691715757,12359048830691715757,10602573589229546844,3338426295365967936,15594310977517476411,4057501132997343753,13323601507075251522,9166489375359541030,1607347719686430197,16443618625915503188,4202660276778349692,571099193561588314,2731158294417541723,606085845100614263,17785273054405138055,1398832288664687032,4611350394226874322,9044013165502547257,3815998028434298813,6979208951624431293,15313671671275175243,10969246000779150374,1046008209391436618,1420074487803791636,4276946784821082257,14212792163527298774,1144821407582670613,10187012831972652085,408818633112895858,14224778724945991650,8868823939318228679,207065603964520834,6676050004705678461,17761328392960004411,17050041739912832401,11622487990431867257,15744214346824844721,18410258651744189862,12828345096931480804,5134341978732774820,13308654056323640182,1587029730619292266,7754860317218979347,9961394932974191173,8489318576164157575,13840981329683177286,12977248042709188475,11346908028462483596,12958167744950328724,10123915052481996591,17284560172551443882,12312021936348761362,2849907624439992348,12323937564244743400,15240205013926292761,10220678325069161212,6646895156847271640,17798270414365883043,4387826955308593371,15144942833001252635,11577798714660980323,4971791540085243677,13941892530303862681,16320121896481527999,1917411618067623777,5278777213842343676,17791533807329327254,114988887541358966,7246244413306650750,16201886545952938814,8732789317433977641,3083949107618607756,7349282668113945520,2233331151053953576,3250232666387396876,3688978010045580023,8610223150631420186,11524770106606160003,7030178815826596692,13418064863693045012,15230340761456659630,14225585374273262497,16209408840064557931,10910516484019956900,2659138929891331751,4385030733736999343,5606610651018674624,17851338770792313206,4389520907420599746,3524591935182794679,15601757682959536437,11176915577281374279,10813440780956822690,4318075123299771210,5584319398143315430,16047405908109902839,17835565564832627747,14179662821775344906,12773162760830708353,17486275692972458472,17198613561093558874,5753460429532648455,17247417965379641131,10602573589229546844,15872134320060056111,7559884574576698649,4328585262606181976,16358945300240752532,12464524184570539358,11014964606096999732,3084316737218512843,9278133677686438626,3518440876519799723,10775703406361350658,5805060657492691696,11924358278266768721,17855343030579816859,14516847337676784407,13676127831254318547,10456905929595148683,7735620555393111266,3241768658482335014,2595476950073929310,10421738543798853648,17911006528214355539,576749604685988464,8422051840612098804,252187175464301845,2284672888619046771,7882495673502672090,13885845998556727370,9886530209998608733,1479690893742776007,10434197361650708763,15069769610481535357,580284055471504057,17252798465628782186,3384443002128773597,7852457786408498836,12683757221328197990,7032018564012797342,7238496811887382872,5037019288439403018,2412080750403882540,7355165422853651479,18250774343352987357,11246008152933736383,5385049900633323131,14754315140965713623,16437797297411593563,65649294369131690,10844000642436385971,3765693506386461266,13026722847395944936,3283910339400917698,17271812845574894566,3776371020329813283,842568490056386289,3581349608572071771,11292576361582828866,13824456289085998812,15330732957077035245,8786719435872347202,2073368443058328488,6441321833059451836,5069839156882732393,14832544838006298453,7230708353583680382,7805820249885947283,11529232597114378927,15389721387823150543,18321457519182203783,4710300886632918119,1041155623814670477,3872149014426072278,15979683547824762603,10868432513599470662,13833226343277270151,10413803895988801314,15190424076762442509,6433380239606099317,6052633643101512701,9003115080978215971,14153407480110880185,4119395796052909149,11135111373928480509,3954857937491835563,8689008136163576436,11530124406766178326,17029029271016296507,8773028854759323383,18088628066909173907,16354540222337358572,7458466405529490000,15174974958880264903,11209234501548056867,12383592288236160612,15814012305177451434,5379875769890031652,12727491509863781135,15902054534992604478,11519416013863429713,1173951417776995118,16648489215745723877,10602573589229546844,17203153323972358178,17742878855641594246,4924844209718222592,4135176252081941781,178748180946962156,2222271086227148369,14177493903788009281,5041240531480921193,12068733577476301604,4007150231755155871,5446250639082586416,9099844918804967619,16828525984764175972,5716405752005651015,12740865445580224825,9274583647079151728,17432680332835883668,4911957039163506608,4543209020176646527,10786081754605053182,9118957709374980316,9627144256951978670,17356687123204871446,11370444602574441398,17113306970144086056,6595344544555937296,4721566182156582271,10009584245958859921,362401659160067721,5549022485866245697,3807628175306549836,2274708382950256232,2695820098762577021,483975751063028122,434890395856256628,7448586734777288132,14891402305204231350,7847866160680163953,15874491104163534088,529473970365849976,9988536511888063190,17100231009091575357,18078382210723421719,9720203011099331283,9675611621984291059,12491047585904544030,15272384185733715038,12944417101690996783,14363016931326417511,4840699627439038661,10340228522981402649,17690480527894510627,7604459736870934842,5751775263088702391,15642995554395507151,5466017630847637232,17519613609860207754,12753608512079682241,15595220839430955202,5375431124669602890,6072052997545167453,9428624683311034151,9880129852230148958,17788158196091340410,4376284683713879426,14331998802871307213,7290705505224189150,12463655123131126548,2673049891578764007,8774136865663922522,8714828247828333166,11916994964216675318,9047788826610290135,9753373531515544548,6282888024718994066,13993437694560513908,25556850036741933,4781545729367770099,13254572643491790547,12649084963090877677,6216564577478025921,13318305349620368987,6821218868290178674,12701799770858620030,9842881334944845490,5641564015292998965,10417937444271514412,17816193871284015790,10392723424791641408,2624619336333270595,6305710236723850138,4681452046143442236,3687708255984554353,7276275058476875765,13262003968656109884,92165720835080734,10409221065344579158,8232052831451324411,8067498541312495138,2551567092579314271,10602573589229546844,7326352887493694710,15189149154581556638,8808867487248125621,5904392934218447993,9029278753792209148,6517993134731675987,15902363608976369278,1031041436428329184,8510946436763466173,3176310636165232787,1597495200971986531,15834345599469942897,2180999923836713881,3044881705341095081,11595299560029682330,9315192753370508746,9170581200494814218,5851672579299793898,14717663129718940111,1406151836439411786,3260973658698922871,16203256600477833126,16576423156895806556,14362955949837915181,2813876429358201067,3137473598973988982,259388115568205872,2917417053998206741,930256901693239410,12033410642815195485,5657517069247033365,3758194451725281497,12843379457889633796,18238788632786218268,3896842522533751646,18268506742313693132,1908918760289502471,11825864707562857343,11610163084068807749,6221931061535521958,17267243088573094052,1347273201590805114,13909778679637712596,8233517626437651588,10047936433362963431,17115428351859572143,16483185524190047882,15204250469136906261,13611916722830016167,2099576251847421927,2261190933348059546,14255371148909713495,856915394790746390,17320963270792083870,9623468820166879237,8269702744907857892,3779706672242582155,17952039103454142226,17727264939475063992,10255963125890116182,17662042042679070808,1209638727956033196,3840994900245247853,10730681120184758188,10379132100415159073,16626266965189646531,11074987208864287607,10861253310822286195,9316361369574055664,1640977774773151457,15755869191161483245,5892511431504801167,14784774002384453984,2636079409402575837,12024512115868410777,17597092020922872033,481870243549136780,1805839673278493683,13403293069164353946,1157324193543157746,102596199047747489,13717624933084840409,4183376463880352828,7486771940490564716,3139975234384161623,15726130405003381247,12484853971055466882,8992768775401560083,7033788999853960409,14388869810324883420,5646116694537626834,7401055423804098458,12160003175243089421,6218774451448178323,12755774764885890439,6236945731054508744,18037169531353845713,12143810950107380841,3509922375514232176,12692764884065073308,10602573589229546844,10602573589229546844,12900861041027527391,4244338613455473297,9129517428476856206,3736508731272525833,15493645689108251625,7307242076432892998,14020308724297016471,10293643728944242296,5709890512077047168,82659178573936069,15854579313953466891,9371582727157169066,923809876698806854,17395958212806504369,5435367679895773653,18164009381226635661,17833843404454285294,2222365010452681526,6820469339856609663,1376752953171116078,9776368236177239000,9850535218431053105,14753980128579497795,3432347660578356015,7131070797334035796,4134357243202792699,4433949126209489504,7147841148668482649,50539409706381864,6949810553513821346,10584127918439320806,984241675604952379,16737238096181014786,9216076306965320461,9068539173758520642,3630846105427143983,4486237552946433349,17430190963502660983,12079624623487668620,1065871596579987842,6120217353891868019,14982081734029890107,7978596697620335271,14465099679152704123,2812926217103196487,3102838113447176142,15626256039722309974,6886812911318109298,9867587471260092476,16323506292710876560,5249212146298623016,17736751960486450427,6037063808214074821,13754206870766679993,14422130015132992804,2066243007162602134,8848565875196090944,1273939831866432258,6473054026779190714,13782096807224460510,1047438447134487731,3903960638406116348,4678558988349508302,16377976372980554435,8576394114847577874,3076187404349397061,13589831145133467721,8322457648353093867,17426791209791822592,4019893402977045109,500653140301615053,7782351349770563378,16162318915184717622,11569850666569124097,7820241711017331418,10064391391054435237,9575467286527369287,10500065557202939362,2242739520723922325,11589989659419136554,5034383902210693477,12276395273098503377,7322791428641069902,504506814765970599,990289361187244497,4934007598444239780,16736564897050471000,16327840004792683330,14806437981346288608,12685138507944687412,5741215182590027327,15791234557926162539,360299796114552218,5608360907959109603,3272573183115055815,17786715429065724020,11793679801028988440,16430834569769034180,13201448439765375926,4131214307240471124,10602573589229546844,7183401416957031585,12076693006237094892,5937988889376106012,16456410431959210174,8932991786486271580,6962913320336483583,10233381659658714223,10867174968109132147,6129233847652433440,17822226402129210138,4276486576655958605,12775136395640284192,3754124365376375950,1885655150057378787,2019863245594777703,13325512143702844809,2550364779283090790,11524709758760695571,6729478450002051661,800952670321322475,17308628722445384471,11150300655872553471,17295360842195561958,4916369494758685186,10600935308502095446,6970349675291331358,16823670614814377116,11499017352696888582,3851496774575724997,5184053360520920230,595708978826242635,2383894917649564633,5139147418982042852,2026170229727951214,8472257561491725180,15471313320852897765,10681919417935555416,14032689424156356439,9590673241922088199,9236678035184909242,7949128185822096864,8346450043567318821,16960270449204278225,5789267810441726409,6110368825526033640,5620206573965554523,11990390467744875217,95370221068666123,2343237007157341145,4970104386626117365,14280210963534624349,5466637103895262524,12430588125202842900,1050985079669031561,4811470836354992054,10100770411149823472,8167163948434783319,16610796952855441928,13045764703584750967,14545943460636755642,12518234423900929186,16055022269575837584,13705095591824147993,8633591064846448554,2286559633547158891,4607601762782045124,11596241992969996566,10847130871956718017,17112783129721669965,17148986314175834741,10336789303584019224,2381263103797207369,14739742558588072624,14449810855494386103,14464620756138391705,15609208131675145371,1212541055318962605,12711811796207667647,10613752917820200992,1371881409996547006,5575327075932639798,8537585380951824935,6950409076178757814,2982607551297859926,5900167319431715598,13060937734980206101,8553978863000460687,15985796496958186431,7867474051776884287,15964016375995594524,13755992738612270514,7527214212025225368,8545734971344547981,7174342528264451153,18430419953009882584,15260873774473221899,4299769974746939445,5231753616031241770,2973540424586533058,459568569691678998,10602573589229546844,15337563609455363181,2796514642721817560,10482810323167991106,6249665449184620954,15334935617308769368,13919941537000217653,9748044664990820722,17050183124352069299,6160802939903581576,12720787555119913506,2679915385099775688,10505039160101376257,3325336990986812981,17241624377155028606,18081338112631802629,1847677915718139299,681984696385197390,15729018154561322082,6086703267657645374,9342847630701005151,2274224041984896863,2236360414269904254,16956514831969316584,3137789496121549035,4412642917201584576,3584794310008660459,12900267584452864979,16174712686859089948,5658546200301652320,7160107916934041241,7665141211099913235,7267114041469446038,5409542752345536214,2588744273721235112,10038716364799216054,3989427143024262217,9502084679397128533,15607171222994809003,17966296997152003599,8019685053991382869,18153796766605286027,14518788494089733890,17853591646753790051,14278575594571788667,1346479387563357422,5622240203918140762,12058941286589889491,11456807865854682413,5240446596896205182,13341330249566828899,16123442879568284480,1872936128664255764,12167475020261592682,557297687847228837,8930277633594363104,13819941730143336027,18329549476667324177,6159654301339806710,13773809203530302367,7590342135084066293,327925632540303172,15173645336209490729,10046530397846617759,13004236943311019688,4747576370413112294,5696300638119677654,1832757651017951858,5920855719383529106,12225802126934379107,9490596010154943223,1208738002276431491,17973415453688435477,7992926857421443803,9769999314584595262,10897402804189501920,14878049484782298807,8850136056563903709,6833187625669349912,5934593967705005038,14773605707708345730,13354191879806099937,9815878477379599932,8423939223268191791,6550475470298189869,1168418314527648557,3583525173810313747,14099746965589579186,6610453727338652003,15679593227684956240,11308430043917808573,10698570428701842065,18004786861008912760,13195284883724657516,3778747305995814275,2509225883543035563,18002137865348949251,11900055750107987323,2593496529629806991,2378021401140673839,14312437332830458020,10602573589229546844,10602573589229546844,14972349579016598928,11695411798689339785,2523901729407113774,12293100498536919971,995490259256164396,15884439207136215706,8450349703173019977,12444947071735945369,5695119773658516003,1878906089644267223,1371109263626838542,17327961196149953542,14311238138831059242,10218974785408766852,6732604311152920399,4117849517087174411,15144635073275138465,17320821939924161096,1221697348419868140,11024879788583264104,1133648033953136370,8400037335309727075,2319166639030705440,707413349082465673,1449616507720601705,5614575012570725065,7816926386133444771,4373171180965529491,6474226976037928934,7929610226479745047,2274059729385376406,5902542275446632625,9286495249654593981,9226039305308980184,4190765839760708897,17645119798104248524,5443593451812239998,19297342682904516,7476283610036370171,16146450274151670179,2203946686843692720,16526578272195265392,3963704607422626134,17823426684664906033,8609752701621585356,13093487942013765471,7653784619157219107,3538649936366134397,2576340040028183184,6180606330153370795,14484037034834500744,7367263128740423798,3571057410840708052,2366185020487219345,16314556118539995951,15019033129950935251,1685000483563412330,5901377064279407651,2795365648318969828,8314887005824800448,8485010021258847671,93962123559642480,10094736560871688871,2595341530773824110,13910385023534012523,1202099326878773987,39002523550096644,6427050104191128540,6613324789960658283,15765249526564123452,14919580808855336592,4929983619565027927,6133540473154166068,3926368121487545297,1200472118342425298,15540429513974286659,14530451587371367468,16944723200808112343,6915449440820631385,4112321020172727924,15040893187402527858,2402057256064651342,17732782860838847841,4868517137274935996,10932261201640255797,10333445274639050270,17461466497541349311,11953468075011869961,6664074613633133898,9172689982551940671,5285720192392549042,18238363743454465888,15355314562745836327,1052004129226321439,17785454728974977489,16761342524542217045,15679704323025044612,7459957391298722157,3751305325653211999,4930358793999494051,10602573589229546844,7861988692610954217,9542623669186119750,16922426114756168947,5191474574223609161,9954739135685826850,7229668957512951315,16084811999171561622,8072839219614072481,7406880761813178939,15612740789108347317,541995465442804851,13732445822591192318,18086201691784447055,9746982845526750340,12804289103014173084,11083840833010329991,1783003261643010465,9117442032978129797,13012799312388516121,119892996303555065,7474373714424659854,4673137979086430732,12665526060977458683,821595259113844688,9241395977962668441,5810706344739782464,2958727076944262512,10872151066085158195,3975647098490875862,13620026325845212606,4592708773051995425,2532050216248358656,15286182533135633581,6056878601740855776,12989164715043761894,3580611142715920923,13203439263756832993,14057924180038507459,9994214813627291833,12545952880190479071,5717269521054597677,16850365877971481262,3056472398115111922,1249067097803586938,6594590285704539117,12976098760044119563,602871569998526564,1173030003460382511,16018119098348287776,5188101113322837813,17219109487424544083,11018814190263638018,2226575031512035975,10592996648536675770,16703193955119184793,14641653226494285088,531572449938331672,8534790516645752680,7458147321315620727,15624175467845668551,9520460063946164892,1636320769486596995,17165432618256977288,10482777825757818210,16701708964921053821,16512154151947728469,8887635219842572857,10034603326835099454,16643404147981460192,8273501013454361383,2664913241702696223,3898455886186912132,3139927210379830542,4254044792383814861,2927782573782793884,11703602200944442267,7958024954149200660,10132613804970118929,18380146648515189415,14798010622071330539,5157543067879825470,217422333579415495,2175075376288740309,12075631952981906157,6346645347160363685,16286864106778650282,9149023965382996783,7187684626250123351,11733308323734394737,15935526861041309217,11402650990727889511,7144538977177484771,11122690345453572829,5909017433199184824,1862281579874231777,3465544670563961433,10950782010635300570,7979757813884359726,10871384119573043367,10779436062867761739,10602573589229546844,12211587853922729139,17310157289188817310,1828738850265443057,11686197741231982491,15315820447950768380,4235979189969558934,12001206620657905318,203135273005306787,17040022538831406209,10346168891841380406,16918109986896993265,17021790119715714060,2649993667600019536,9044209674251782359,6219546105493480461,17717865977767963230,17627387034071481989,11680091904585990062,12931362483411966397,6048683374503675710,15671378119545988193,2265855741073964033,5094132629793370044,8203973829296198433,12000179492077156355,12166452543510860715,1510457130194138114,1789931420864462716,2784367768735788403,12206096683137717071,970963430336264850,14117536346312688545,17571398631753367493,3096747748955330235,9164877924133409765,18243068994909398492,11290621419553432447,9635740365787630372,2435796266732197955,9301399834644526759,4425624267496538535,17862551063070638732,17086707379484744804,16713932111631836660,10935407647143161273,3363865533785101119,9934262664758772231,16872098444236849490,18246463620981420241,6867791964874827674,9851914099193856941,6681644903429092762,14828195332678604002,18302394369157056949,9484968043036641931,14354722210543842231,15831151002855340829,8040875956332537614,13265034166257693427,1541306874593594635,11834899447840811918,7919741152676295452,10118181690275659754,16231389634916134787,14205968497294749780,14345244031139160173,5244857918154018502,3326629892974312897,3047847967157296448,1967968435884366574,4867505557656386616,8274422846988258911,3846439358933896830,17329696406643100085,10407408097562935021,1952846919053282449,10533425492028800333,4112737923095184768,16872104924984729619,14084759821602017635,15582904901897697427,11901793371634948330,256183857613650548,4796744797372628255,10221312941254580712,12353719216751459594,10383132382806687482,2240196118683507942,12917974001241380056,919130174771930470,4464793675393633020,1476310639760917525,14846969441449205266,14701441330841597716,7061716885292664500,17964587834785753718,7446686787297153172,10187491113017115812,11597271403087824112,10023803248613608395,10602573589229546844,14153271315395398218,326816133871190183,14408119209847881113,5451691219550610714,7564291543246112263,3896350064206377695,7891617190834882432,7602944212131307248,7056064730876278813,427130267315539355,16780239150340606752,4952159950189022646,12996357555864634677,9529796124425403307,4405169690911724950,6774143990133700236,13301954074552043677,1156261787321610922,3102833538695532732,16900037664611261618,11007831070178712166,754376886755701716,3688782032822940656,7217314537131834497,13299141694869246359,8740777967250665439,7049975659789979789,7750713763084053607,3563046201675003960,15132308250250603149,2475524453460574157,17891835394196995748,7061029283352714327,17695068694310177348,6650845918198444384,3697360173016937737,10404104291479598257,4545983307240123956,11509583569607948428,17827227931866117995,3853965369418134636,17958754611991056425,10484647090737041856,8904264362215956640,11093831137412369748,7558913430485726726,1298198689422346959,15495297445927865470,13000897759210383218,1358900196871698490,5752370384341585999,442215439806999784,3234797544384537044,4041108195420888383,994294295351023662,3150507688824358614,12447938559920176735,14909094379234764493,10049187155610792209,4420379597908025686,15487720521233417680,5441365388390311545,6578172654378101579,2548519569363943282,13513910697155596579,10442460940677035469,3414190529818641490,15825869240556011094,3914238732020007383,11375226709152188604,10923760893711545050,15023660279330229896,1494062959400515782,4661602374806528710,5668287203412210110,230755449342440165,3077708704253014214,2886485735832144568,12156841753689183063,15320799827427474320,7629472798632943495,16949978362654098140,5073396884301449011,11145895259859769377,4490292311742104268,1322289224583716761,550011016766183932,13885881715549220160,1227880846040292615,1493699926901101604,2571535513391691395,7766602346589229932,4161709166992439722,5934756641106611056,15615787299505078438,3732888415720347212,11365097727533839881,8984205759639104077,5651062067664181975,14444323787944745388,10602573589229546844,15103121693672241500,3521641591753484771,15634763677585556505,5012125620375077019,1706507395531208570,4238591940625958013,17807036249047440623,13965302906432604678,14342438513634579153,16173268969268916331,2906381193781788412,492034979555030414,3876367680649732061,1844887985021401524,12186589931722211999,12482314604060477289,13871245352204387928,3444855833359739859,5387436819519360815,2076314752481071900,17600974190772006507,15738549682502611789,13778523759301772607,13248635162388700162,3567882042814727458,11707866385394706258,5584779742345949579,6316525302073988025,1466502847881357741,15053963760404193743,13351841322930613775,14495353415798598836,9286145431821924712,4429142900663673699,1253541791538229497,18372574080045504034,16913937471672424163,6769601902996410767,10106169381850068128,2046705625640368810,17665647695005225073,6262937810328346618,9396485767175674101,13127846868936943426,17132675170525251309,9822866650905881836,15276013060884547688,6481647878237451636,10484613655228638153,8920643728639777626,12230101164777090770,13109161096494271451,12843414999739612798,14933343336120854287,6509778995012354659,6954126439923916840,10336393798419431522,4074807093639023595,8619526069233060808,16820246949633624843,10214954673539226582,14570123114052203618,1074337038402981810,7635067748864813450,5532526665657502881,5906905223167709783,18137267062554394250,9691118398569104087,4411331501151024978,3868971305839894956,4450197239220570048,17830459733683099562,9813593581930012113,3279902096370508634,13303851672305459446,4861109288561974529,13485954880722818947,7287320196866448723,2910133932739716294,1241093941299981163,3882900114128207045,18150434417531441621,8536678956549242392,14302418635881583431,4889936147685899223,3599574795349086592,9349614689489251647,5941334082615690054,6510633516280536988,3658752572837284642,3974842878463759276,10962539822376420559,15697059852741816176,16849495926099519245,4794416623041001843,4355756214372903695,2174544023868699197,4319233948612010179,11962472209250164211,2482351457502514582,10602573589229546844,8092973567137364300,8389884739042335419,10681567007315049665,13850931412078522037,4749638587226851777,12178335991958950602,655890783792077095,5202835632052559700,1842341887813844777,14013156892850538606,503427878074936323,12475879360916906694,12175099612243662372,3697781085962995936,14652087365163642293,1807529333873025669,15414290744617828076,3552859064016865359,4697378039939060285,14547368062995101697,13601547940131665976,8295283840567894753,8724045410384058508,7088540792863092752,15295393493207429071,4601458573284247617,16891349236313452541,147000590335713500,5794204145019158092,16003980207189207019,4916972452224935607,9295528672609096263,16479342627581483859,10602573589229546844,10602573589229546844,963791532086122350,3106215778659157110,9413220622851381370,13050753064511502071,10589776816262904999,1513273915360000787,17117724955369309339,10602573589229546844,8258539822085329220,16224108241331388138,16493838185686639719,6585570663018178124,3242158827382383426,532068077042376143,10602573589229546844,1521099166341804923,10149396001724953693,1756370674430250861,272906525482589462,13295048459984557089,17106533627012725264,16258397819673723547,1701994841097870568,16352688757522242862,2592634411084718411,10602573589229546844,5541142905284323951,13345047184995215122,3971061552779435021,10830027357181313585,5796602532533941613,15892824111946181525,5527791634177741505,1658356268895861488,4092079150346932278,8268006023887080068,15900974100529564652,13009627442704154436,10856110554090549996,9128749983924206467,7029116692464540725,3153230139144003885,10916065712441949287,15563238854963442114,6032000426154971505,6579433662810826268,4952551125421147930,15128319560645286011,2347561215985436307,12763308926857672362,6518724237147960678,984193294971367937,10602573589229546844,1106616560598776674,1360941020276498676,11785341071430504216,13770401122605315710,4342298566152571609,9606360809014113199,10671159392272674082,13108837898245418828,2817857740954170170,14053265279651645011,6585021163752747784,2650033388370156597,7503758639846881608,5324629953184810166,591688603668833492,1577895472049365994,6346920869462583589,12392238758996181370,1704538485242833086,17152099210315068784,16180298156806132622,14018723029693390588,2884179524142278313,11124163375537191282,18320772732460611898,16820343451080465911,17819459477958525685,5813970103203806564,16633755104059066579,17488033902177687201,2473608697134418559,17709003374781246393,95460204587832587,10602573589229546844,6358475991181475274,1196633835267704076,433249600599133112,8007241031025770700,9961433277013134100,17513373899142762175,5496173628826520494,8251532161209005934,16822713586793458169,18038578351767047046,3251458916879764809,7142933183701881721,7022895846954486648,380615169797729291,16862285182576518907,10602573589229546844] \ No newline at end of file diff --git a/be/test/expected_result/vec/columns/column_variant_update_hashes_with_value.out_with_nullmap b/be/test/expected_result/vec/columns/column_variant_update_hashes_with_value.out_with_nullmap index f7c27b278e776e..3819c459cb0054 100644 --- a/be/test/expected_result/vec/columns/column_variant_update_hashes_with_value.out_with_nullmap +++ b/be/test/expected_result/vec/columns/column_variant_update_hashes_with_value.out_with_nullmap @@ -1 +1 @@ -column: variant with hashes: [3290145166093762980,14179897596576105469,14179897596576105469,2282085295964132384,3290145166093762980,559338346485959129,2282085295964132384,15905536912678961394,2282085295964132384,7021324166002335292,18096701186305226541,102226537653930837,14179897596576105469,18096701186305226541,559338346485959129,102226537653930837,559338346485959129,102226537653930837,18096701186305226541,559338346485959129,14179897596576105469,2282085295964132384,11072762366266850873,6348604300041726601,3290145166093762980,6348604300041726601,2282085295964132384,11072762366266850873,18096701186305226541,2282085295964132384,559338346485959129,3290145166093762980,11072762366266850873,102226537653930837,2282085295964132384,15905536912678961394,3290145166093762980,15905536912678961394,14179897596576105469,3290145166093762980,102226537653930837,14179897596576105469,559338346485959129,11072762366266850873,14179897596576105469,14179897596576105469,6348604300041726601,18096701186305226541,15905536912678961394,11072762366266850873,7021324166002335292,6348604300041726601,14179897596576105469,2282085295964132384,14179897596576105469,6348604300041726601,15905536912678961394,3290145166093762980,14179897596576105469,11072762366266850873,102226537653930837,6348604300041726601,18096701186305226541,3290145166093762980,14179897596576105469,3290145166093762980,18096701186305226541,7021324166002335292,18096701186305226541,3290145166093762980,11072762366266850873,6348604300041726601,7021324166002335292,11072762366266850873,102226537653930837,2282085295964132384,3290145166093762980,559338346485959129,14179897596576105469,18096701186305226541,15905536912678961394,15905536912678961394,11072762366266850873,559338346485959129,102226537653930837,11072762366266850873,3290145166093762980,14179897596576105469,14179897596576105469,102226537653930837,559338346485959129,14179897596576105469,11072762366266850873,14179897596576105469,15905536912678961394,15905536912678961394,6348604300041726601,2282085295964132384,102226537653930837,14179897596576105469,10602573589229546844,17112874075517206433,10602573589229546844,17254401115644597125,17112874075517206433,17209060699095012878,17254401115644597125,13302687684020648567,13302687684020648567,13302687684020648567,10602573589229546844,1038248107092713708,17254401115644597125,13302687684020648567,17209060699095012878,13302687684020648567,17209060699095012878,17254401115644597125,10602573589229546844,1280023314843046514,17112874075517206433,10602573589229546844,1280023314843046514,17209060699095012878,17209060699095012878,1280023314843046514,1280023314843046514,13302687684020648567,17209060699095012878,13302687684020648567,13302687684020648567,10602573589229546844,10602573589229546844,17254401115644597125,17209060699095012878,13302687684020648567,10602573589229546844,1280023314843046514,17209060699095012878,13302687684020648567,17254401115644597125,17112874075517206433,1280023314843046514,17209060699095012878,17254401115644597125,1280023314843046514,13302687684020648567,17209060699095012878,10602573589229546844,17254401115644597125,1038248107092713708,17209060699095012878,10602573589229546844,17209060699095012878,17209060699095012878,17209060699095012878,17112874075517206433,10602573589229546844,13302687684020648567,1280023314843046514,1038248107092713708,13302687684020648567,17209060699095012878,10602573589229546844,17209060699095012878,17254401115644597125,17254401115644597125,13302687684020648567,1280023314843046514,17254401115644597125,1280023314843046514,17209060699095012878,17112874075517206433,10602573589229546844,1280023314843046514,13302687684020648567,1038248107092713708,17209060699095012878,1038248107092713708,17209060699095012878,10602573589229546844,10602573589229546844,17254401115644597125,17254401115644597125,1280023314843046514,1038248107092713708,13302687684020648567,17112874075517206433,17254401115644597125,17254401115644597125,10602573589229546844,1038248107092713708,17112874075517206433,1280023314843046514,1280023314843046514,1038248107092713708,17254401115644597125,17209060699095012878,10602573589229546844,17112874075517206433,13302687684020648567,10602573589229546844,8739666254610784476,15178307909647726039,812377251159971894,5104988259232340187,15178307909647726039,14179897596576105469,5002941667199342543,15178307909647726039,8692085290974651848,3343855588952036451,812377251159971894,1244063564664642073,5002941667199342543,1171377148146271186,16129489899755404978,14179897596576105469,8692085290974651848,16129489899755404978,16129489899755404978,14179897596576105469,14179897596576105469,5002941667199342543,8692085290974651848,15178307909647726039,5104988259232340187,5002941667199342543,812377251159971894,3343855588952036451,8739666254610784476,14179897596576105469,1244063564664642073,3343855588952036451,15178307909647726039,5002941667199342543,3343855588952036451,16129489899755404978,5002941667199342543,14179897596576105469,14179897596576105469,16129489899755404978,14179897596576105469,18011992382478577847,7360877390192632990,8692085290974651848,812377251159971894,1244063564664642073,1244063564664642073,18011992382478577847,16129489899755404978,7360877390192632990,5104988259232340187,7360877390192632990,8692085290974651848,8739666254610784476,1244063564664642073,15178307909647726039,1244063564664642073,18011992382478577847,14179897596576105469,18011992382478577847,14179897596576105469,7360877390192632990,1171377148146271186,8739666254610784476,15178307909647726039,5104988259232340187,1244063564664642073,7360877390192632990,18011992382478577847,15178307909647726039,14179897596576105469,5104988259232340187,5002941667199342543,1171377148146271186,5104988259232340187,8692085290974651848,15178307909647726039,14179897596576105469,3343855588952036451,14179897596576105469,8692085290974651848,812377251159971894,16129489899755404978,5002941667199342543,1244063564664642073,812377251159971894,16129489899755404978,14179897596576105469,5104988259232340187,8692085290974651848,8692085290974651848,18011992382478577847,1244063564664642073,8692085290974651848,8739666254610784476,812377251159971894,14179897596576105469,1171377148146271186,15178307909647726039,14179897596576105469,10602573589229546844,13302687684020648567,2304212471448909901,13302687684020648567,12359048830691715757,13302687684020648567,13293414154332091538,13302687684020648567,12359048830691715757,12359048830691715757,13302687684020648567,13613960073370969052,2472461031540241330,17815258578778888438,11170613619857658709,13302687684020648567,13302687684020648567,4623580367614773573,13302687684020648567,4289708442234706008,13302687684020648567,11552622925026124944,12359048830691715757,12359048830691715757,12359048830691715757,12359048830691715757,4688013811067771242,7856452706204403306,13302687684020648567,13302687684020648567,9753965225196829855,9394402753015823089,13302687684020648567,12359048830691715757,12359048830691715757,12359048830691715757,12359048830691715757,13302687684020648567,1509191514857943066,187849560094777570,5315364172701025632,3504649842843451748,12359048830691715757,3148298162024192477,11042776522728687326,13302687684020648567,13302687684020648567,5596852626596824375,17074599932331248709,12359048830691715757,3754174822703729661,7810040041842691716,13302687684020648567,13302687684020648567,16189095675728225227,255714044816409931,13302687684020648567,12359048830691715757,12744991635814369385,12359048830691715757,15169920827410952292,13302687684020648567,1426916479094374011,4452715528165719241,11936773386101778446,13302687684020648567,13302687684020648567,15008289404070888265,13302687684020648567,7030258425402590679,12359048830691715757,1223801264702774161,1036006280100608927,13302687684020648567,8141277443953488766,16548412318812889026,5475537186384353678,17471770755386394405,13302687684020648567,12359048830691715757,12359048830691715757,479311632194338959,12359048830691715757,7399442542196036391,13302687684020648567,13302687684020648567,14184195780233559772,13302687684020648567,15704543699661715723,13302687684020648567,13302687684020648567,13302687684020648567,17679315446558780265,1494615190534264233,4260143534680144484,12359048830691715757,13302687684020648567,13302687684020648567,7669219378345197213,12359048830691715757,12359048830691715757,10602573589229546844,11078528463228466898,9270824403405340911,4057501132997343753,9064574482019229418,6407906027649426847,8985107072384555792,1184937332609662247,165086601481611427,1604324956158494852,14656053002828163632,17432059392688763612,3769118726675317215,14405266818605471701,1925201385917300938,6570394395680375075,3815998028434298813,6979208951624431293,9199434165347712341,10969246000779150374,1816117100766478416,1420074487803791636,14826184238410967220,10226733588431959438,14385069137818721227,3173312581913078194,7738851968796996458,7630940053000986213,1950086453039278227,15795840083653236232,6676050004705678461,17761328392960004411,17050041739912832401,4784796073699347100,15744214346824844721,13546806644589978702,12828345096931480804,13288174914873978106,7327977852645649695,15419667647114272896,15634897202360971661,2867300395619592955,8489318576164157575,13840981329683177286,12977248042709188475,5083582178648545724,11312234168657327484,3084043064725675425,4073658190215197847,5415109524180399730,2849907624439992348,7818088421898641518,15240205013926292761,5752367615268795819,5127258499718568753,17010732234858126677,14703566510920687537,12821611438210776181,5185939693798710130,4971791540085243677,10570541847167161500,6008592764559804816,1917411618067623777,14831265224814696922,17791533807329327254,16366559929965270505,7246244413306650750,2019343607893586053,9122358649975914223,265578328016738110,5377300460344008741,4260029511319163005,18384822298888526875,16383696710351989952,16266579460680890865,13121359705169924188,2191332908967417731,5475486564072131343,18052280571290928181,13232344105632004616,3311198282629280022,9780225921141519843,17870651751453117426,8777262128738547941,8963313953012987456,17851338770792313206,4389520907420599746,8127964366078443055,14921610986432916425,11176915577281374279,1407903180093673376,14786132066306737028,3376552168250192875,15056033403331444786,12888409061840645292,7223473883412657650,8785980099090856489,7747186992801858268,17198613561093558874,5753460429532648455,886239565775419392,10602573589229546844,15872134320060056111,7559884574576698649,4328585262606181976,16358945300240752532,12464524184570539358,11014964606096999732,3084316737218512843,9278133677686438626,3518440876519799723,10775703406361350658,5805060657492691696,11924358278266768721,17855343030579816859,14516847337676784407,13676127831254318547,10456905929595148683,7735620555393111266,3241768658482335014,2595476950073929310,10421738543798853648,17911006528214355539,576749604685988464,8422051840612098804,252187175464301845,2284672888619046771,7882495673502672090,13885845998556727370,9886530209998608733,1479690893742776007,10434197361650708763,15069769610481535357,580284055471504057,17252798465628782186,3384443002128773597,7852457786408498836,12683757221328197990,7032018564012797342,7238496811887382872,5037019288439403018,2412080750403882540,7355165422853651479,18250774343352987357,11246008152933736383,5385049900633323131,14754315140965713623,16437797297411593563,65649294369131690,10844000642436385971,3765693506386461266,13026722847395944936,3283910339400917698,17271812845574894566,3776371020329813283,842568490056386289,3581349608572071771,11292576361582828866,13824456289085998812,15330732957077035245,8786719435872347202,2073368443058328488,6441321833059451836,5069839156882732393,14832544838006298453,7230708353583680382,7805820249885947283,11529232597114378927,15389721387823150543,18321457519182203783,4710300886632918119,1041155623814670477,3872149014426072278,15979683547824762603,10868432513599470662,13833226343277270151,10413803895988801314,15190424076762442509,6433380239606099317,6052633643101512701,9003115080978215971,14153407480110880185,4119395796052909149,11135111373928480509,3954857937491835563,8689008136163576436,11530124406766178326,17029029271016296507,8773028854759323383,18088628066909173907,16354540222337358572,7458466405529490000,15174974958880264903,11209234501548056867,12383592288236160612,15814012305177451434,5379875769890031652,12727491509863781135,15902054534992604478,11519416013863429713,1173951417776995118,16648489215745723877,10602573589229546844,17203153323972358178,17742878855641594246,4924844209718222592,4135176252081941781,178748180946962156,2222271086227148369,14177493903788009281,5041240531480921193,12068733577476301604,4007150231755155871,5446250639082586416,9099844918804967619,16828525984764175972,5716405752005651015,12740865445580224825,9274583647079151728,17432680332835883668,4911957039163506608,4543209020176646527,10786081754605053182,9118957709374980316,9627144256951978670,17356687123204871446,11370444602574441398,17113306970144086056,6595344544555937296,4721566182156582271,10009584245958859921,362401659160067721,5549022485866245697,3807628175306549836,2274708382950256232,2695820098762577021,483975751063028122,434890395856256628,7448586734777288132,14891402305204231350,7847866160680163953,15874491104163534088,529473970365849976,9988536511888063190,17100231009091575357,18078382210723421719,9720203011099331283,9675611621984291059,12491047585904544030,15272384185733715038,12944417101690996783,14363016931326417511,4840699627439038661,10340228522981402649,17690480527894510627,7604459736870934842,5751775263088702391,15642995554395507151,5466017630847637232,17519613609860207754,12753608512079682241,15595220839430955202,5375431124669602890,6072052997545167453,9428624683311034151,9880129852230148958,17788158196091340410,4376284683713879426,14331998802871307213,7290705505224189150,12463655123131126548,2673049891578764007,8774136865663922522,8714828247828333166,11916994964216675318,9047788826610290135,9753373531515544548,6282888024718994066,13993437694560513908,25556850036741933,4781545729367770099,13254572643491790547,12649084963090877677,6216564577478025921,13318305349620368987,6821218868290178674,12701799770858620030,9842881334944845490,5641564015292998965,10417937444271514412,17816193871284015790,10392723424791641408,2624619336333270595,6305710236723850138,4681452046143442236,3687708255984554353,7276275058476875765,13262003968656109884,92165720835080734,10409221065344579158,8232052831451324411,8067498541312495138,2551567092579314271,10602573589229546844,7326352887493694710,15189149154581556638,8808867487248125621,5904392934218447993,9029278753792209148,6517993134731675987,15902363608976369278,1031041436428329184,8510946436763466173,3176310636165232787,1597495200971986531,15834345599469942897,2180999923836713881,3044881705341095081,11595299560029682330,9315192753370508746,9170581200494814218,5851672579299793898,14717663129718940111,1406151836439411786,3260973658698922871,16203256600477833126,16576423156895806556,14362955949837915181,2813876429358201067,3137473598973988982,259388115568205872,2917417053998206741,930256901693239410,12033410642815195485,5657517069247033365,3758194451725281497,12843379457889633796,18238788632786218268,3896842522533751646,18268506742313693132,1908918760289502471,11825864707562857343,11610163084068807749,6221931061535521958,17267243088573094052,1347273201590805114,13909778679637712596,8233517626437651588,10047936433362963431,17115428351859572143,16483185524190047882,15204250469136906261,13611916722830016167,2099576251847421927,2261190933348059546,14255371148909713495,856915394790746390,17320963270792083870,9623468820166879237,8269702744907857892,3779706672242582155,17952039103454142226,17727264939475063992,10255963125890116182,17662042042679070808,1209638727956033196,3840994900245247853,10730681120184758188,10379132100415159073,16626266965189646531,11074987208864287607,10861253310822286195,9316361369574055664,1640977774773151457,15755869191161483245,5892511431504801167,14784774002384453984,2636079409402575837,12024512115868410777,17597092020922872033,481870243549136780,1805839673278493683,13403293069164353946,1157324193543157746,102596199047747489,13717624933084840409,4183376463880352828,7486771940490564716,3139975234384161623,15726130405003381247,12484853971055466882,8992768775401560083,7033788999853960409,14388869810324883420,5646116694537626834,7401055423804098458,12160003175243089421,6218774451448178323,12755774764885890439,6236945731054508744,18037169531353845713,12143810950107380841,3509922375514232176,12692764884065073308,10602573589229546844,10602573589229546844,5960457565334411020,4244338613455473297,6616616615124076912,11955964023239671906,13659231367932954295,17459970002444133797,11586563463171586633,10293643728944242296,5709890512077047168,5390485507895200984,1902120523826988608,6204548357177236244,16809194573818755012,17395958212806504369,5435367679895773653,14068166009790862812,6871251789279673713,9101745588490331834,6820469339856609663,14299359535145625228,661975544424843312,9850535218431053105,16161435790515301309,3432347660578356015,12366328078538805733,15793771728308216978,7622282362312611983,7347376077607041892,50539409706381864,4308193127989152658,16926167683198279850,2932732789412369050,7590893604425623516,1931054301206827042,15328988501495657273,2441275510970932436,12361316580096500085,2386145969735155915,10165990432371970473,5849317780064962616,14425840351857313062,4842997969657191943,4343746726497499451,11770073243997260797,10880577211310477890,3102838113447176142,11987756886175411149,15334526734128792518,179549733929923433,8223859359167698454,17792206221143428834,10072449279887774519,4780554196155212684,13754206870766679993,4575590887037891283,2517283009761618466,7998386181513037384,16671980031883730137,17414929121823471734,13782096807224460510,5274931931195337934,8176464995585308332,1693304172179468169,16377976372980554435,8576394114847577874,3076187404349397061,13589831145133467721,3964891337356401439,4086834781388890410,16381132618688400966,8044737992256673494,8463087656999980177,16162318915184717622,7162910006252297273,12209117036302275403,10064391391054435237,17369254697043137944,10327078810175198230,1735071064453774776,3137024485878812427,15500564702578731623,15707466433012446535,14304568681306566357,10624292185432607981,13346088199160451064,1047521059294111176,5486326630031384299,7939123415503849531,5648153761125097690,738461163886223076,3039983643004176068,953687744537365420,10221865676065344169,12595820325101338128,17244163487115289487,16201045287863524406,17590234168248527612,4699174876879551008,1106371329212808049,2002617613800066140,10602573589229546844,7183401416957031585,12076693006237094892,5937988889376106012,16456410431959210174,8932991786486271580,6962913320336483583,10233381659658714223,10867174968109132147,6129233847652433440,17822226402129210138,4276486576655958605,12775136395640284192,3754124365376375950,1885655150057378787,2019863245594777703,13325512143702844809,2550364779283090790,11524709758760695571,6729478450002051661,800952670321322475,17308628722445384471,11150300655872553471,17295360842195561958,4916369494758685186,10600935308502095446,6970349675291331358,16823670614814377116,11499017352696888582,3851496774575724997,5184053360520920230,595708978826242635,2383894917649564633,5139147418982042852,2026170229727951214,8472257561491725180,15471313320852897765,10681919417935555416,14032689424156356439,9590673241922088199,9236678035184909242,7949128185822096864,8346450043567318821,16960270449204278225,5789267810441726409,6110368825526033640,5620206573965554523,11990390467744875217,95370221068666123,2343237007157341145,4970104386626117365,14280210963534624349,5466637103895262524,12430588125202842900,1050985079669031561,4811470836354992054,10100770411149823472,8167163948434783319,16610796952855441928,13045764703584750967,14545943460636755642,12518234423900929186,16055022269575837584,13705095591824147993,8633591064846448554,2286559633547158891,4607601762782045124,11596241992969996566,10847130871956718017,17112783129721669965,17148986314175834741,10336789303584019224,2381263103797207369,14739742558588072624,14449810855494386103,14464620756138391705,15609208131675145371,1212541055318962605,12711811796207667647,10613752917820200992,1371881409996547006,5575327075932639798,8537585380951824935,6950409076178757814,2982607551297859926,5900167319431715598,13060937734980206101,8553978863000460687,15985796496958186431,7867474051776884287,15964016375995594524,13755992738612270514,7527214212025225368,8545734971344547981,7174342528264451153,18430419953009882584,15260873774473221899,4299769974746939445,5231753616031241770,2973540424586533058,459568569691678998,10602573589229546844,15337563609455363181,2796514642721817560,10482810323167991106,6249665449184620954,15334935617308769368,13919941537000217653,9748044664990820722,17050183124352069299,6160802939903581576,12720787555119913506,2679915385099775688,10505039160101376257,3325336990986812981,17241624377155028606,18081338112631802629,1847677915718139299,681984696385197390,15729018154561322082,6086703267657645374,9342847630701005151,2274224041984896863,2236360414269904254,16956514831969316584,3137789496121549035,4412642917201584576,3584794310008660459,12900267584452864979,16174712686859089948,5658546200301652320,7160107916934041241,7665141211099913235,7267114041469446038,5409542752345536214,2588744273721235112,10038716364799216054,3989427143024262217,9502084679397128533,15607171222994809003,17966296997152003599,8019685053991382869,18153796766605286027,14518788494089733890,17853591646753790051,14278575594571788667,1346479387563357422,5622240203918140762,12058941286589889491,11456807865854682413,5240446596896205182,13341330249566828899,16123442879568284480,1872936128664255764,12167475020261592682,557297687847228837,8930277633594363104,13819941730143336027,18329549476667324177,6159654301339806710,13773809203530302367,7590342135084066293,327925632540303172,15173645336209490729,10046530397846617759,13004236943311019688,4747576370413112294,5696300638119677654,1832757651017951858,5920855719383529106,12225802126934379107,9490596010154943223,1208738002276431491,17973415453688435477,7992926857421443803,9769999314584595262,10897402804189501920,14878049484782298807,8850136056563903709,6833187625669349912,5934593967705005038,14773605707708345730,13354191879806099937,9815878477379599932,8423939223268191791,6550475470298189869,1168418314527648557,3583525173810313747,14099746965589579186,6610453727338652003,15679593227684956240,11308430043917808573,10698570428701842065,18004786861008912760,13195284883724657516,3778747305995814275,2509225883543035563,18002137865348949251,11900055750107987323,2593496529629806991,2378021401140673839,14312437332830458020,10602573589229546844,10602573589229546844,11935392864309492456,6090780613771958546,473017201564071102,1017800851121029738,6889031342303319404,11252413481805335879,9056509310487825211,3425449059326623166,17898929070289959481,4364306017173680982,947264281165006408,14005705578502286611,13166277875441447415,4077494670967254080,11143559651697948765,10587204309214330919,2507649064686487101,10349745214682825056,14957040897407912074,2041306716508881962,11546041964664944165,11210889241126232641,10837199508475108785,6320469185297170239,13730372745992217792,6245998675035487129,11370680752830355524,626607459241576992,11128070988402979047,14362961850162365657,2316436521929724107,6483274438166397173,2504696073600428139,5002969785280866512,6780545419348599011,6942212855870179346,8883669364472311659,2243537348011891026,6995753882934517678,6334680567406413602,536598075656415556,15858956348022752347,15683193856132304010,15898890695493361060,10760427267211426992,10844292861486068997,5678849354580724559,1453747652168799733,3663399049815135106,2919488802391799545,1530904054714843832,14494447114166544286,11524725906807963035,448546930606950842,7117239270937371539,884457655325540621,2063579577878199380,3183695289788864790,3948336354189826555,6273501536468123850,17288209575956210851,16890141275503216648,11365322542473363091,9171651705765464480,12936893167664465219,7437249650533784820,3741842156430022113,18001329923311345553,159493376171727648,15757061921037378470,13394796526814296828,16507451242205393579,1459373990837647244,14472911833332497085,4175222137065452840,15383819579176714664,16673444610976607750,6828642206807605362,5381385146675974433,10271623647426785765,10213773858564117499,6843027133997703985,9327838055413887008,1573149076528824326,3865892866332766211,17139594320899285242,12270285906878818509,15737275773167675168,9073017128831602773,453221931226629324,366160255012070506,10241171687887474388,6395757272531031457,6550154693215635268,13223967338308880059,10267148828875625253,1205680773761476341,3080653224648443205,5721246910185661258,2906967166550131762,10602573589229546844,7861988692610954217,9542623669186119750,16922426114756168947,5191474574223609161,9954739135685826850,7229668957512951315,16084811999171561622,8072839219614072481,7406880761813178939,15612740789108347317,541995465442804851,13732445822591192318,18086201691784447055,9746982845526750340,12804289103014173084,11083840833010329991,1783003261643010465,9117442032978129797,13012799312388516121,119892996303555065,7474373714424659854,4673137979086430732,12665526060977458683,821595259113844688,9241395977962668441,5810706344739782464,2958727076944262512,10872151066085158195,3975647098490875862,13620026325845212606,4592708773051995425,2532050216248358656,15286182533135633581,6056878601740855776,12989164715043761894,3580611142715920923,13203439263756832993,14057924180038507459,9994214813627291833,12545952880190479071,5717269521054597677,16850365877971481262,3056472398115111922,1249067097803586938,6594590285704539117,12976098760044119563,602871569998526564,1173030003460382511,16018119098348287776,5188101113322837813,17219109487424544083,11018814190263638018,2226575031512035975,10592996648536675770,16703193955119184793,14641653226494285088,531572449938331672,8534790516645752680,7458147321315620727,15624175467845668551,9520460063946164892,1636320769486596995,17165432618256977288,10482777825757818210,16701708964921053821,16512154151947728469,8887635219842572857,10034603326835099454,16643404147981460192,8273501013454361383,2664913241702696223,3898455886186912132,3139927210379830542,4254044792383814861,2927782573782793884,11703602200944442267,7958024954149200660,10132613804970118929,18380146648515189415,14798010622071330539,5157543067879825470,217422333579415495,2175075376288740309,12075631952981906157,6346645347160363685,16286864106778650282,9149023965382996783,7187684626250123351,11733308323734394737,15935526861041309217,11402650990727889511,7144538977177484771,11122690345453572829,5909017433199184824,1862281579874231777,3465544670563961433,10950782010635300570,7979757813884359726,10871384119573043367,10779436062867761739,10602573589229546844,7602915691898082947,12223805249662029333,15428270238661777337,13952131677327538262,16691209701183328661,1177065616029098765,11698446458574049535,5484300726561222883,4524181949072295177,17614339940677052472,4260352294316790066,10062885795435671989,5265269110081975485,14780998715881399715,18318857723895210761,10205005248348674485,5683294312249491907,14406529908851010883,16579940993382618825,6894282513646431483,10410695566846433769,14483975964560886411,9419009991411002520,7506655244805145046,8158132972222574817,4317030071999241699,9227648132811588062,14876442553533281806,2938297536002995958,11962023668747572821,16848862289943456528,1745206687243636644,3163039293804490140,7965830451125301181,7320159349859058043,18223894366655946656,7447859255312115578,16359865623824936454,1854214475964099239,12790032986603393000,4197298934343860245,8304160044633506792,5186908004396312716,1488270794450998676,16837485535140191649,15852074795445534926,16079148098160424916,11938995368413388486,2650296204035784104,18083826560355223505,4024307455983606731,6067478450346618615,6773611771451021357,8967293749527092598,14481824442061067754,8717807574741918586,8677953596970673824,5861506479573223363,16720764491503169167,18204700738351837570,1601319643367906329,12188611969365430373,13368582402633748028,11280967755420275390,10455147737488341239,9133286196437847107,2067382378581099799,4359080183269515044,7698052785559880451,11227198840448166246,18354106958294554958,12440236377642337374,4174867569774363095,12891084248857144885,2923065289364701847,17130562612393648001,4351796895229373497,1177320057690495826,18194616179329341515,2324932459667616093,6805414145910604655,7047694696074336155,13017798834482261492,17865242200942845773,750289459317936482,17055420155079918554,5750036491900941234,959801494045902682,8335517470166022825,12685443196340580600,12863612980075964176,14004915064814197395,11397022204474553586,12869205345282788725,8695816015635508925,11592803097353505248,13348790064348741122,6056670212433495332,5605111642648214925,16634403581929517129,10602573589229546844,14153271315395398218,326816133871190183,14408119209847881113,5451691219550610714,7564291543246112263,3896350064206377695,7891617190834882432,7602944212131307248,7056064730876278813,427130267315539355,16780239150340606752,4952159950189022646,12996357555864634677,9529796124425403307,4405169690911724950,6774143990133700236,13301954074552043677,1156261787321610922,3102833538695532732,16900037664611261618,11007831070178712166,754376886755701716,3688782032822940656,7217314537131834497,13299141694869246359,8740777967250665439,7049975659789979789,7750713763084053607,3563046201675003960,15132308250250603149,2475524453460574157,17891835394196995748,7061029283352714327,17695068694310177348,6650845918198444384,3697360173016937737,10404104291479598257,4545983307240123956,11509583569607948428,17827227931866117995,3853965369418134636,17958754611991056425,10484647090737041856,8904264362215956640,11093831137412369748,7558913430485726726,1298198689422346959,15495297445927865470,13000897759210383218,1358900196871698490,5752370384341585999,442215439806999784,3234797544384537044,4041108195420888383,994294295351023662,3150507688824358614,12447938559920176735,14909094379234764493,10049187155610792209,4420379597908025686,15487720521233417680,5441365388390311545,6578172654378101579,2548519569363943282,13513910697155596579,10442460940677035469,3414190529818641490,15825869240556011094,3914238732020007383,11375226709152188604,10923760893711545050,15023660279330229896,1494062959400515782,4661602374806528710,5668287203412210110,230755449342440165,3077708704253014214,2886485735832144568,12156841753689183063,15320799827427474320,7629472798632943495,16949978362654098140,5073396884301449011,11145895259859769377,4490292311742104268,1322289224583716761,550011016766183932,13885881715549220160,1227880846040292615,1493699926901101604,2571535513391691395,7766602346589229932,4161709166992439722,5934756641106611056,15615787299505078438,3732888415720347212,11365097727533839881,8984205759639104077,5651062067664181975,14444323787944745388,10602573589229546844,15103121693672241500,3521641591753484771,15634763677585556505,5012125620375077019,1706507395531208570,4238591940625958013,17807036249047440623,13965302906432604678,14342438513634579153,16173268969268916331,2906381193781788412,492034979555030414,3876367680649732061,1844887985021401524,12186589931722211999,12482314604060477289,13871245352204387928,3444855833359739859,5387436819519360815,2076314752481071900,17600974190772006507,15738549682502611789,13778523759301772607,13248635162388700162,3567882042814727458,11707866385394706258,5584779742345949579,6316525302073988025,1466502847881357741,15053963760404193743,13351841322930613775,14495353415798598836,9286145431821924712,4429142900663673699,1253541791538229497,18372574080045504034,16913937471672424163,6769601902996410767,10106169381850068128,2046705625640368810,17665647695005225073,6262937810328346618,9396485767175674101,13127846868936943426,17132675170525251309,9822866650905881836,15276013060884547688,6481647878237451636,10484613655228638153,8920643728639777626,12230101164777090770,13109161096494271451,12843414999739612798,14933343336120854287,6509778995012354659,6954126439923916840,10336393798419431522,4074807093639023595,8619526069233060808,16820246949633624843,10214954673539226582,14570123114052203618,1074337038402981810,7635067748864813450,5532526665657502881,5906905223167709783,18137267062554394250,9691118398569104087,4411331501151024978,3868971305839894956,4450197239220570048,17830459733683099562,9813593581930012113,3279902096370508634,13303851672305459446,4861109288561974529,13485954880722818947,7287320196866448723,2910133932739716294,1241093941299981163,3882900114128207045,18150434417531441621,8536678956549242392,14302418635881583431,4889936147685899223,3599574795349086592,9349614689489251647,5941334082615690054,6510633516280536988,3658752572837284642,3974842878463759276,10962539822376420559,15697059852741816176,16849495926099519245,4794416623041001843,4355756214372903695,2174544023868699197,4319233948612010179,11962472209250164211,2482351457502514582,10602573589229546844,9606072669490943975,8389884739042335419,10681567007315049665,13850931412078522037,4095788952686561506,5314405036027915188,16555202206404415966,13613467935258868325,15040769577639001637,16817224804994174833,503427878074936323,12475879360916906694,12175099612243662372,18245644000284154433,13005997902542078321,1807529333873025669,15414290744617828076,11185621556175414490,14508931569028465826,14547368062995101697,13601547940131665976,7837430560381113455,8724045410384058508,4715691361941460079,15295393493207429071,9833419065399854963,1499005462894536992,147000590335713500,5794204145019158092,18027972318832059754,2306138158897856625,1646398918976608194,16479342627581483859,10602573589229546844,10602573589229546844,963791532086122350,3106215778659157110,9413220622851381370,13050753064511502071,10589776816262904999,1513273915360000787,17117724955369309339,10602573589229546844,8258539822085329220,16224108241331388138,16493838185686639719,6585570663018178124,3242158827382383426,532068077042376143,10602573589229546844,1521099166341804923,10149396001724953693,1756370674430250861,272906525482589462,13295048459984557089,17106533627012725264,16258397819673723547,1701994841097870568,16352688757522242862,2592634411084718411,10602573589229546844,5541142905284323951,13345047184995215122,3971061552779435021,10830027357181313585,5796602532533941613,15892824111946181525,5527791634177741505,1658356268895861488,4092079150346932278,8268006023887080068,15900974100529564652,13009627442704154436,10856110554090549996,9128749983924206467,7029116692464540725,3153230139144003885,10916065712441949287,15563238854963442114,6032000426154971505,6579433662810826268,4952551125421147930,15128319560645286011,2347561215985436307,12763308926857672362,6518724237147960678,984193294971367937,10602573589229546844,1106616560598776674,1360941020276498676,11785341071430504216,13770401122605315710,4342298566152571609,9606360809014113199,10671159392272674082,13108837898245418828,2817857740954170170,14053265279651645011,6585021163752747784,2650033388370156597,7503758639846881608,5324629953184810166,591688603668833492,1577895472049365994,6346920869462583589,12392238758996181370,1704538485242833086,17152099210315068784,16180298156806132622,14018723029693390588,2884179524142278313,11124163375537191282,18320772732460611898,16820343451080465911,17819459477958525685,5813970103203806564,16633755104059066579,17488033902177687201,2473608697134418559,17709003374781246393,95460204587832587,10602573589229546844,6358475991181475274,1196633835267704076,433249600599133112,8007241031025770700,9961433277013134100,17513373899142762175,5496173628826520494,8251532161209005934,16822713586793458169,18038578351767047046,3251458916879764809,7142933183701881721,7022895846954486648,380615169797729291,16862285182576518907,10602573589229546844] \ No newline at end of file +column: variant with hashes: [3290145166093762980,14179897596576105469,3518677861186945217,2282085295964132384,3290145166093762980,559338346485959129,2282085295964132384,15905536912678961394,2282085295964132384,7021324166002335292,18096701186305226541,102226537653930837,3518677861186945217,18096701186305226541,559338346485959129,102226537653930837,559338346485959129,102226537653930837,18096701186305226541,559338346485959129,14179897596576105469,2282085295964132384,11072762366266850873,6348604300041726601,3290145166093762980,6348604300041726601,2282085295964132384,15809008797971016995,18096701186305226541,2282085295964132384,559338346485959129,3290145166093762980,15809008797971016995,102226537653930837,2282085295964132384,15905536912678961394,3290145166093762980,15905536912678961394,14179897596576105469,3290145166093762980,102226537653930837,3518677861186945217,559338346485959129,11072762366266850873,3518677861186945217,14179897596576105469,6348604300041726601,18096701186305226541,15905536912678961394,11072762366266850873,7021324166002335292,6348604300041726601,3518677861186945217,2282085295964132384,3518677861186945217,6348604300041726601,15905536912678961394,3290145166093762980,3518677861186945217,15809008797971016995,102226537653930837,6348604300041726601,18096701186305226541,3290145166093762980,14179897596576105469,3290145166093762980,18096701186305226541,7021324166002335292,18096701186305226541,3290145166093762980,15809008797971016995,6348604300041726601,7021324166002335292,11072762366266850873,102226537653930837,2282085295964132384,3290145166093762980,559338346485959129,3518677861186945217,18096701186305226541,15905536912678961394,15905536912678961394,15809008797971016995,559338346485959129,102226537653930837,15809008797971016995,3290145166093762980,14179897596576105469,3518677861186945217,102226537653930837,559338346485959129,14179897596576105469,15809008797971016995,14179897596576105469,15905536912678961394,15905536912678961394,6348604300041726601,2282085295964132384,102226537653930837,3518677861186945217,10602573589229546844,17112874075517206433,10602573589229546844,17254401115644597125,17112874075517206433,17209060699095012878,17254401115644597125,13302687684020648567,13302687684020648567,13302687684020648567,10602573589229546844,1038248107092713708,17254401115644597125,13302687684020648567,17209060699095012878,13302687684020648567,17209060699095012878,17254401115644597125,10602573589229546844,1280023314843046514,17112874075517206433,10602573589229546844,1280023314843046514,17209060699095012878,17209060699095012878,1280023314843046514,1280023314843046514,13302687684020648567,17209060699095012878,13302687684020648567,13302687684020648567,10602573589229546844,10602573589229546844,17254401115644597125,17209060699095012878,13302687684020648567,10602573589229546844,1280023314843046514,17209060699095012878,13302687684020648567,17254401115644597125,17112874075517206433,1280023314843046514,17209060699095012878,17254401115644597125,1280023314843046514,13302687684020648567,17209060699095012878,10602573589229546844,17254401115644597125,1038248107092713708,17209060699095012878,10602573589229546844,17209060699095012878,17209060699095012878,17209060699095012878,17112874075517206433,10602573589229546844,13302687684020648567,1280023314843046514,1038248107092713708,13302687684020648567,17209060699095012878,10602573589229546844,17209060699095012878,17254401115644597125,17254401115644597125,13302687684020648567,1280023314843046514,17254401115644597125,1280023314843046514,17209060699095012878,17112874075517206433,10602573589229546844,1280023314843046514,13302687684020648567,1038248107092713708,17209060699095012878,1038248107092713708,17209060699095012878,10602573589229546844,10602573589229546844,17254401115644597125,17254401115644597125,1280023314843046514,1038248107092713708,13302687684020648567,17112874075517206433,17254401115644597125,17254401115644597125,10602573589229546844,1038248107092713708,17112874075517206433,1280023314843046514,1280023314843046514,1038248107092713708,17254401115644597125,17209060699095012878,10602573589229546844,17112874075517206433,13302687684020648567,10602573589229546844,8739666254610784476,15178307909647726039,812377251159971894,5104988259232340187,15178307909647726039,14179897596576105469,5002941667199342543,15178307909647726039,8692085290974651848,3343855588952036451,812377251159971894,1244063564664642073,5002941667199342543,1171377148146271186,16129489899755404978,14179897596576105469,8692085290974651848,16129489899755404978,16129489899755404978,14179897596576105469,14179897596576105469,5002941667199342543,8692085290974651848,15178307909647726039,5104988259232340187,5002941667199342543,812377251159971894,3343855588952036451,8739666254610784476,14179897596576105469,1244063564664642073,3343855588952036451,15178307909647726039,5002941667199342543,3343855588952036451,16129489899755404978,5002941667199342543,14179897596576105469,14179897596576105469,16129489899755404978,14179897596576105469,18011992382478577847,7360877390192632990,8692085290974651848,812377251159971894,1244063564664642073,1244063564664642073,18011992382478577847,16129489899755404978,7360877390192632990,5104988259232340187,7360877390192632990,8692085290974651848,8739666254610784476,1244063564664642073,15178307909647726039,1244063564664642073,18011992382478577847,14179897596576105469,18011992382478577847,14179897596576105469,7360877390192632990,1171377148146271186,8739666254610784476,15178307909647726039,5104988259232340187,1244063564664642073,7360877390192632990,18011992382478577847,15178307909647726039,14179897596576105469,5104988259232340187,5002941667199342543,1171377148146271186,5104988259232340187,8692085290974651848,15178307909647726039,14179897596576105469,3343855588952036451,14179897596576105469,8692085290974651848,812377251159971894,16129489899755404978,5002941667199342543,1244063564664642073,812377251159971894,16129489899755404978,14179897596576105469,5104988259232340187,8692085290974651848,8692085290974651848,18011992382478577847,1244063564664642073,8692085290974651848,8739666254610784476,812377251159971894,14179897596576105469,1171377148146271186,15178307909647726039,14179897596576105469,10602573589229546844,13302687684020648567,2304212471448909901,13302687684020648567,12359048830691715757,13302687684020648567,13293414154332091538,13302687684020648567,12359048830691715757,12359048830691715757,13302687684020648567,13613960073370969052,2472461031540241330,17815258578778888438,11170613619857658709,13302687684020648567,13302687684020648567,4623580367614773573,13302687684020648567,4289708442234706008,13302687684020648567,11552622925026124944,12359048830691715757,12359048830691715757,12359048830691715757,12359048830691715757,4688013811067771242,7856452706204403306,13302687684020648567,13302687684020648567,9753965225196829855,9394402753015823089,13302687684020648567,12359048830691715757,12359048830691715757,12359048830691715757,12359048830691715757,13302687684020648567,1509191514857943066,187849560094777570,5315364172701025632,3504649842843451748,12359048830691715757,3148298162024192477,11042776522728687326,13302687684020648567,13302687684020648567,5596852626596824375,17074599932331248709,12359048830691715757,3754174822703729661,7810040041842691716,13302687684020648567,13302687684020648567,16189095675728225227,255714044816409931,13302687684020648567,12359048830691715757,12744991635814369385,12359048830691715757,15169920827410952292,13302687684020648567,1426916479094374011,4452715528165719241,11936773386101778446,13302687684020648567,13302687684020648567,15008289404070888265,13302687684020648567,7030258425402590679,12359048830691715757,1223801264702774161,1036006280100608927,13302687684020648567,8141277443953488766,16548412318812889026,5475537186384353678,17471770755386394405,13302687684020648567,12359048830691715757,12359048830691715757,479311632194338959,12359048830691715757,7399442542196036391,13302687684020648567,13302687684020648567,14184195780233559772,13302687684020648567,15704543699661715723,13302687684020648567,13302687684020648567,13302687684020648567,17679315446558780265,1494615190534264233,4260143534680144484,12359048830691715757,13302687684020648567,13302687684020648567,7669219378345197213,12359048830691715757,12359048830691715757,10602573589229546844,3338426295365967936,15594310977517476411,4057501132997343753,13323601507075251522,9166489375359541030,1607347719686430197,16443618625915503188,4202660276778349692,571099193561588314,2731158294417541723,606085845100614263,17785273054405138055,1398832288664687032,4611350394226874322,9044013165502547257,3815998028434298813,6979208951624431293,15313671671275175243,10969246000779150374,1046008209391436618,1420074487803791636,4276946784821082257,14212792163527298774,1144821407582670613,10187012831972652085,408818633112895858,14224778724945991650,8868823939318228679,207065603964520834,6676050004705678461,17761328392960004411,17050041739912832401,11622487990431867257,15744214346824844721,18410258651744189862,12828345096931480804,5134341978732774820,13308654056323640182,1587029730619292266,7754860317218979347,9961394932974191173,8489318576164157575,13840981329683177286,12977248042709188475,11346908028462483596,12958167744950328724,10123915052481996591,17284560172551443882,12312021936348761362,2849907624439992348,12323937564244743400,15240205013926292761,10220678325069161212,6646895156847271640,17798270414365883043,4387826955308593371,15144942833001252635,11577798714660980323,4971791540085243677,13941892530303862681,16320121896481527999,1917411618067623777,5278777213842343676,17791533807329327254,114988887541358966,7246244413306650750,16201886545952938814,8732789317433977641,3083949107618607756,7349282668113945520,2233331151053953576,3250232666387396876,3688978010045580023,8610223150631420186,11524770106606160003,7030178815826596692,13418064863693045012,15230340761456659630,14225585374273262497,16209408840064557931,10910516484019956900,2659138929891331751,4385030733736999343,5606610651018674624,17851338770792313206,4389520907420599746,3524591935182794679,15601757682959536437,11176915577281374279,10813440780956822690,4318075123299771210,5584319398143315430,16047405908109902839,17835565564832627747,14179662821775344906,12773162760830708353,17486275692972458472,17198613561093558874,5753460429532648455,17247417965379641131,10602573589229546844,15872134320060056111,7559884574576698649,4328585262606181976,16358945300240752532,12464524184570539358,11014964606096999732,3084316737218512843,9278133677686438626,3518440876519799723,10775703406361350658,5805060657492691696,11924358278266768721,17855343030579816859,14516847337676784407,13676127831254318547,10456905929595148683,7735620555393111266,3241768658482335014,2595476950073929310,10421738543798853648,17911006528214355539,576749604685988464,8422051840612098804,252187175464301845,2284672888619046771,7882495673502672090,13885845998556727370,9886530209998608733,1479690893742776007,10434197361650708763,15069769610481535357,580284055471504057,17252798465628782186,3384443002128773597,7852457786408498836,12683757221328197990,7032018564012797342,7238496811887382872,5037019288439403018,2412080750403882540,7355165422853651479,18250774343352987357,11246008152933736383,5385049900633323131,14754315140965713623,16437797297411593563,65649294369131690,10844000642436385971,3765693506386461266,13026722847395944936,3283910339400917698,17271812845574894566,3776371020329813283,842568490056386289,3581349608572071771,11292576361582828866,13824456289085998812,15330732957077035245,8786719435872347202,2073368443058328488,6441321833059451836,5069839156882732393,14832544838006298453,7230708353583680382,7805820249885947283,11529232597114378927,15389721387823150543,18321457519182203783,4710300886632918119,1041155623814670477,3872149014426072278,15979683547824762603,10868432513599470662,13833226343277270151,10413803895988801314,15190424076762442509,6433380239606099317,6052633643101512701,9003115080978215971,14153407480110880185,4119395796052909149,11135111373928480509,3954857937491835563,8689008136163576436,11530124406766178326,17029029271016296507,8773028854759323383,18088628066909173907,16354540222337358572,7458466405529490000,15174974958880264903,11209234501548056867,12383592288236160612,15814012305177451434,5379875769890031652,12727491509863781135,15902054534992604478,11519416013863429713,1173951417776995118,16648489215745723877,10602573589229546844,17203153323972358178,17742878855641594246,4924844209718222592,4135176252081941781,178748180946962156,2222271086227148369,14177493903788009281,5041240531480921193,12068733577476301604,4007150231755155871,5446250639082586416,9099844918804967619,16828525984764175972,5716405752005651015,12740865445580224825,9274583647079151728,17432680332835883668,4911957039163506608,4543209020176646527,10786081754605053182,9118957709374980316,9627144256951978670,17356687123204871446,11370444602574441398,17113306970144086056,6595344544555937296,4721566182156582271,10009584245958859921,362401659160067721,5549022485866245697,3807628175306549836,2274708382950256232,2695820098762577021,483975751063028122,434890395856256628,7448586734777288132,14891402305204231350,7847866160680163953,15874491104163534088,529473970365849976,9988536511888063190,17100231009091575357,18078382210723421719,9720203011099331283,9675611621984291059,12491047585904544030,15272384185733715038,12944417101690996783,14363016931326417511,4840699627439038661,10340228522981402649,17690480527894510627,7604459736870934842,5751775263088702391,15642995554395507151,5466017630847637232,17519613609860207754,12753608512079682241,15595220839430955202,5375431124669602890,6072052997545167453,9428624683311034151,9880129852230148958,17788158196091340410,4376284683713879426,14331998802871307213,7290705505224189150,12463655123131126548,2673049891578764007,8774136865663922522,8714828247828333166,11916994964216675318,9047788826610290135,9753373531515544548,6282888024718994066,13993437694560513908,25556850036741933,4781545729367770099,13254572643491790547,12649084963090877677,6216564577478025921,13318305349620368987,6821218868290178674,12701799770858620030,9842881334944845490,5641564015292998965,10417937444271514412,17816193871284015790,10392723424791641408,2624619336333270595,6305710236723850138,4681452046143442236,3687708255984554353,7276275058476875765,13262003968656109884,92165720835080734,10409221065344579158,8232052831451324411,8067498541312495138,2551567092579314271,10602573589229546844,7326352887493694710,15189149154581556638,8808867487248125621,5904392934218447993,9029278753792209148,6517993134731675987,15902363608976369278,1031041436428329184,8510946436763466173,3176310636165232787,1597495200971986531,15834345599469942897,2180999923836713881,3044881705341095081,11595299560029682330,9315192753370508746,9170581200494814218,5851672579299793898,14717663129718940111,1406151836439411786,3260973658698922871,16203256600477833126,16576423156895806556,14362955949837915181,2813876429358201067,3137473598973988982,259388115568205872,2917417053998206741,930256901693239410,12033410642815195485,5657517069247033365,3758194451725281497,12843379457889633796,18238788632786218268,3896842522533751646,18268506742313693132,1908918760289502471,11825864707562857343,11610163084068807749,6221931061535521958,17267243088573094052,1347273201590805114,13909778679637712596,8233517626437651588,10047936433362963431,17115428351859572143,16483185524190047882,15204250469136906261,13611916722830016167,2099576251847421927,2261190933348059546,14255371148909713495,856915394790746390,17320963270792083870,9623468820166879237,8269702744907857892,3779706672242582155,17952039103454142226,17727264939475063992,10255963125890116182,17662042042679070808,1209638727956033196,3840994900245247853,10730681120184758188,10379132100415159073,16626266965189646531,11074987208864287607,10861253310822286195,9316361369574055664,1640977774773151457,15755869191161483245,5892511431504801167,14784774002384453984,2636079409402575837,12024512115868410777,17597092020922872033,481870243549136780,1805839673278493683,13403293069164353946,1157324193543157746,102596199047747489,13717624933084840409,4183376463880352828,7486771940490564716,3139975234384161623,15726130405003381247,12484853971055466882,8992768775401560083,7033788999853960409,14388869810324883420,5646116694537626834,7401055423804098458,12160003175243089421,6218774451448178323,12755774764885890439,6236945731054508744,18037169531353845713,12143810950107380841,3509922375514232176,12692764884065073308,10602573589229546844,10602573589229546844,12900861041027527391,4244338613455473297,9129517428476856206,3736508731272525833,15493645689108251625,7307242076432892998,14020308724297016471,10293643728944242296,5709890512077047168,82659178573936069,15854579313953466891,9371582727157169066,923809876698806854,17395958212806504369,5435367679895773653,18164009381226635661,17833843404454285294,2222365010452681526,6820469339856609663,1376752953171116078,9776368236177239000,9850535218431053105,14753980128579497795,3432347660578356015,7131070797334035796,4134357243202792699,4433949126209489504,7147841148668482649,50539409706381864,6949810553513821346,10584127918439320806,984241675604952379,16737238096181014786,9216076306965320461,9068539173758520642,3630846105427143983,4486237552946433349,17430190963502660983,12079624623487668620,1065871596579987842,6120217353891868019,14982081734029890107,7978596697620335271,14465099679152704123,2812926217103196487,3102838113447176142,15626256039722309974,6886812911318109298,9867587471260092476,16323506292710876560,5249212146298623016,17736751960486450427,6037063808214074821,13754206870766679993,14422130015132992804,2066243007162602134,8848565875196090944,1273939831866432258,6473054026779190714,13782096807224460510,1047438447134487731,3903960638406116348,4678558988349508302,16377976372980554435,8576394114847577874,3076187404349397061,13589831145133467721,8322457648353093867,17426791209791822592,4019893402977045109,500653140301615053,7782351349770563378,16162318915184717622,11569850666569124097,7820241711017331418,10064391391054435237,9575467286527369287,10500065557202939362,2242739520723922325,11589989659419136554,5034383902210693477,12276395273098503377,7322791428641069902,504506814765970599,990289361187244497,4934007598444239780,16736564897050471000,16327840004792683330,14806437981346288608,12685138507944687412,5741215182590027327,15791234557926162539,360299796114552218,5608360907959109603,3272573183115055815,17786715429065724020,11793679801028988440,16430834569769034180,13201448439765375926,4131214307240471124,10602573589229546844,7183401416957031585,12076693006237094892,5937988889376106012,16456410431959210174,8932991786486271580,6962913320336483583,10233381659658714223,10867174968109132147,6129233847652433440,17822226402129210138,4276486576655958605,12775136395640284192,3754124365376375950,1885655150057378787,2019863245594777703,13325512143702844809,2550364779283090790,11524709758760695571,6729478450002051661,800952670321322475,17308628722445384471,11150300655872553471,17295360842195561958,4916369494758685186,10600935308502095446,6970349675291331358,16823670614814377116,11499017352696888582,3851496774575724997,5184053360520920230,595708978826242635,2383894917649564633,5139147418982042852,2026170229727951214,8472257561491725180,15471313320852897765,10681919417935555416,14032689424156356439,9590673241922088199,9236678035184909242,7949128185822096864,8346450043567318821,16960270449204278225,5789267810441726409,6110368825526033640,5620206573965554523,11990390467744875217,95370221068666123,2343237007157341145,4970104386626117365,14280210963534624349,5466637103895262524,12430588125202842900,1050985079669031561,4811470836354992054,10100770411149823472,8167163948434783319,16610796952855441928,13045764703584750967,14545943460636755642,12518234423900929186,16055022269575837584,13705095591824147993,8633591064846448554,2286559633547158891,4607601762782045124,11596241992969996566,10847130871956718017,17112783129721669965,17148986314175834741,10336789303584019224,2381263103797207369,14739742558588072624,14449810855494386103,14464620756138391705,15609208131675145371,1212541055318962605,12711811796207667647,10613752917820200992,1371881409996547006,5575327075932639798,8537585380951824935,6950409076178757814,2982607551297859926,5900167319431715598,13060937734980206101,8553978863000460687,15985796496958186431,7867474051776884287,15964016375995594524,13755992738612270514,7527214212025225368,8545734971344547981,7174342528264451153,18430419953009882584,15260873774473221899,4299769974746939445,5231753616031241770,2973540424586533058,459568569691678998,10602573589229546844,15337563609455363181,2796514642721817560,10482810323167991106,6249665449184620954,15334935617308769368,13919941537000217653,9748044664990820722,17050183124352069299,6160802939903581576,12720787555119913506,2679915385099775688,10505039160101376257,3325336990986812981,17241624377155028606,18081338112631802629,1847677915718139299,681984696385197390,15729018154561322082,6086703267657645374,9342847630701005151,2274224041984896863,2236360414269904254,16956514831969316584,3137789496121549035,4412642917201584576,3584794310008660459,12900267584452864979,16174712686859089948,5658546200301652320,7160107916934041241,7665141211099913235,7267114041469446038,5409542752345536214,2588744273721235112,10038716364799216054,3989427143024262217,9502084679397128533,15607171222994809003,17966296997152003599,8019685053991382869,18153796766605286027,14518788494089733890,17853591646753790051,14278575594571788667,1346479387563357422,5622240203918140762,12058941286589889491,11456807865854682413,5240446596896205182,13341330249566828899,16123442879568284480,1872936128664255764,12167475020261592682,557297687847228837,8930277633594363104,13819941730143336027,18329549476667324177,6159654301339806710,13773809203530302367,7590342135084066293,327925632540303172,15173645336209490729,10046530397846617759,13004236943311019688,4747576370413112294,5696300638119677654,1832757651017951858,5920855719383529106,12225802126934379107,9490596010154943223,1208738002276431491,17973415453688435477,7992926857421443803,9769999314584595262,10897402804189501920,14878049484782298807,8850136056563903709,6833187625669349912,5934593967705005038,14773605707708345730,13354191879806099937,9815878477379599932,8423939223268191791,6550475470298189869,1168418314527648557,3583525173810313747,14099746965589579186,6610453727338652003,15679593227684956240,11308430043917808573,10698570428701842065,18004786861008912760,13195284883724657516,3778747305995814275,2509225883543035563,18002137865348949251,11900055750107987323,2593496529629806991,2378021401140673839,14312437332830458020,10602573589229546844,10602573589229546844,14972349579016598928,11695411798689339785,2523901729407113774,12293100498536919971,995490259256164396,15884439207136215706,8450349703173019977,12444947071735945369,5695119773658516003,1878906089644267223,1371109263626838542,17327961196149953542,14311238138831059242,10218974785408766852,6732604311152920399,4117849517087174411,15144635073275138465,17320821939924161096,1221697348419868140,11024879788583264104,1133648033953136370,8400037335309727075,2319166639030705440,707413349082465673,1449616507720601705,5614575012570725065,7816926386133444771,4373171180965529491,6474226976037928934,7929610226479745047,2274059729385376406,5902542275446632625,9286495249654593981,9226039305308980184,4190765839760708897,17645119798104248524,5443593451812239998,19297342682904516,7476283610036370171,16146450274151670179,2203946686843692720,16526578272195265392,3963704607422626134,17823426684664906033,8609752701621585356,13093487942013765471,7653784619157219107,3538649936366134397,2576340040028183184,6180606330153370795,14484037034834500744,7367263128740423798,3571057410840708052,2366185020487219345,16314556118539995951,15019033129950935251,1685000483563412330,5901377064279407651,2795365648318969828,8314887005824800448,8485010021258847671,93962123559642480,10094736560871688871,2595341530773824110,13910385023534012523,1202099326878773987,39002523550096644,6427050104191128540,6613324789960658283,15765249526564123452,14919580808855336592,4929983619565027927,6133540473154166068,3926368121487545297,1200472118342425298,15540429513974286659,14530451587371367468,16944723200808112343,6915449440820631385,4112321020172727924,15040893187402527858,2402057256064651342,17732782860838847841,4868517137274935996,10932261201640255797,10333445274639050270,17461466497541349311,11953468075011869961,6664074613633133898,9172689982551940671,5285720192392549042,18238363743454465888,15355314562745836327,1052004129226321439,17785454728974977489,16761342524542217045,15679704323025044612,7459957391298722157,3751305325653211999,4930358793999494051,10602573589229546844,7861988692610954217,9542623669186119750,16922426114756168947,5191474574223609161,9954739135685826850,7229668957512951315,16084811999171561622,8072839219614072481,7406880761813178939,15612740789108347317,541995465442804851,13732445822591192318,18086201691784447055,9746982845526750340,12804289103014173084,11083840833010329991,1783003261643010465,9117442032978129797,13012799312388516121,119892996303555065,7474373714424659854,4673137979086430732,12665526060977458683,821595259113844688,9241395977962668441,5810706344739782464,2958727076944262512,10872151066085158195,3975647098490875862,13620026325845212606,4592708773051995425,2532050216248358656,15286182533135633581,6056878601740855776,12989164715043761894,3580611142715920923,13203439263756832993,14057924180038507459,9994214813627291833,12545952880190479071,5717269521054597677,16850365877971481262,3056472398115111922,1249067097803586938,6594590285704539117,12976098760044119563,602871569998526564,1173030003460382511,16018119098348287776,5188101113322837813,17219109487424544083,11018814190263638018,2226575031512035975,10592996648536675770,16703193955119184793,14641653226494285088,531572449938331672,8534790516645752680,7458147321315620727,15624175467845668551,9520460063946164892,1636320769486596995,17165432618256977288,10482777825757818210,16701708964921053821,16512154151947728469,8887635219842572857,10034603326835099454,16643404147981460192,8273501013454361383,2664913241702696223,3898455886186912132,3139927210379830542,4254044792383814861,2927782573782793884,11703602200944442267,7958024954149200660,10132613804970118929,18380146648515189415,14798010622071330539,5157543067879825470,217422333579415495,2175075376288740309,12075631952981906157,6346645347160363685,16286864106778650282,9149023965382996783,7187684626250123351,11733308323734394737,15935526861041309217,11402650990727889511,7144538977177484771,11122690345453572829,5909017433199184824,1862281579874231777,3465544670563961433,10950782010635300570,7979757813884359726,10871384119573043367,10779436062867761739,10602573589229546844,12211587853922729139,17310157289188817310,1828738850265443057,11686197741231982491,15315820447950768380,4235979189969558934,12001206620657905318,203135273005306787,17040022538831406209,10346168891841380406,16918109986896993265,17021790119715714060,2649993667600019536,9044209674251782359,6219546105493480461,17717865977767963230,17627387034071481989,11680091904585990062,12931362483411966397,6048683374503675710,15671378119545988193,2265855741073964033,5094132629793370044,8203973829296198433,12000179492077156355,12166452543510860715,1510457130194138114,1789931420864462716,2784367768735788403,12206096683137717071,970963430336264850,14117536346312688545,17571398631753367493,3096747748955330235,9164877924133409765,18243068994909398492,11290621419553432447,9635740365787630372,2435796266732197955,9301399834644526759,4425624267496538535,17862551063070638732,17086707379484744804,16713932111631836660,10935407647143161273,3363865533785101119,9934262664758772231,16872098444236849490,18246463620981420241,6867791964874827674,9851914099193856941,6681644903429092762,14828195332678604002,18302394369157056949,9484968043036641931,14354722210543842231,15831151002855340829,8040875956332537614,13265034166257693427,1541306874593594635,11834899447840811918,7919741152676295452,10118181690275659754,16231389634916134787,14205968497294749780,14345244031139160173,5244857918154018502,3326629892974312897,3047847967157296448,1967968435884366574,4867505557656386616,8274422846988258911,3846439358933896830,17329696406643100085,10407408097562935021,1952846919053282449,10533425492028800333,4112737923095184768,16872104924984729619,14084759821602017635,15582904901897697427,11901793371634948330,256183857613650548,4796744797372628255,10221312941254580712,12353719216751459594,10383132382806687482,2240196118683507942,12917974001241380056,919130174771930470,4464793675393633020,1476310639760917525,14846969441449205266,14701441330841597716,7061716885292664500,17964587834785753718,7446686787297153172,10187491113017115812,11597271403087824112,10023803248613608395,10602573589229546844,14153271315395398218,326816133871190183,14408119209847881113,5451691219550610714,7564291543246112263,3896350064206377695,7891617190834882432,7602944212131307248,7056064730876278813,427130267315539355,16780239150340606752,4952159950189022646,12996357555864634677,9529796124425403307,4405169690911724950,6774143990133700236,13301954074552043677,1156261787321610922,3102833538695532732,16900037664611261618,11007831070178712166,754376886755701716,3688782032822940656,7217314537131834497,13299141694869246359,8740777967250665439,7049975659789979789,7750713763084053607,3563046201675003960,15132308250250603149,2475524453460574157,17891835394196995748,7061029283352714327,17695068694310177348,6650845918198444384,3697360173016937737,10404104291479598257,4545983307240123956,11509583569607948428,17827227931866117995,3853965369418134636,17958754611991056425,10484647090737041856,8904264362215956640,11093831137412369748,7558913430485726726,1298198689422346959,15495297445927865470,13000897759210383218,1358900196871698490,5752370384341585999,442215439806999784,3234797544384537044,4041108195420888383,994294295351023662,3150507688824358614,12447938559920176735,14909094379234764493,10049187155610792209,4420379597908025686,15487720521233417680,5441365388390311545,6578172654378101579,2548519569363943282,13513910697155596579,10442460940677035469,3414190529818641490,15825869240556011094,3914238732020007383,11375226709152188604,10923760893711545050,15023660279330229896,1494062959400515782,4661602374806528710,5668287203412210110,230755449342440165,3077708704253014214,2886485735832144568,12156841753689183063,15320799827427474320,7629472798632943495,16949978362654098140,5073396884301449011,11145895259859769377,4490292311742104268,1322289224583716761,550011016766183932,13885881715549220160,1227880846040292615,1493699926901101604,2571535513391691395,7766602346589229932,4161709166992439722,5934756641106611056,15615787299505078438,3732888415720347212,11365097727533839881,8984205759639104077,5651062067664181975,14444323787944745388,10602573589229546844,15103121693672241500,3521641591753484771,15634763677585556505,5012125620375077019,1706507395531208570,4238591940625958013,17807036249047440623,13965302906432604678,14342438513634579153,16173268969268916331,2906381193781788412,492034979555030414,3876367680649732061,1844887985021401524,12186589931722211999,12482314604060477289,13871245352204387928,3444855833359739859,5387436819519360815,2076314752481071900,17600974190772006507,15738549682502611789,13778523759301772607,13248635162388700162,3567882042814727458,11707866385394706258,5584779742345949579,6316525302073988025,1466502847881357741,15053963760404193743,13351841322930613775,14495353415798598836,9286145431821924712,4429142900663673699,1253541791538229497,18372574080045504034,16913937471672424163,6769601902996410767,10106169381850068128,2046705625640368810,17665647695005225073,6262937810328346618,9396485767175674101,13127846868936943426,17132675170525251309,9822866650905881836,15276013060884547688,6481647878237451636,10484613655228638153,8920643728639777626,12230101164777090770,13109161096494271451,12843414999739612798,14933343336120854287,6509778995012354659,6954126439923916840,10336393798419431522,4074807093639023595,8619526069233060808,16820246949633624843,10214954673539226582,14570123114052203618,1074337038402981810,7635067748864813450,5532526665657502881,5906905223167709783,18137267062554394250,9691118398569104087,4411331501151024978,3868971305839894956,4450197239220570048,17830459733683099562,9813593581930012113,3279902096370508634,13303851672305459446,4861109288561974529,13485954880722818947,7287320196866448723,2910133932739716294,1241093941299981163,3882900114128207045,18150434417531441621,8536678956549242392,14302418635881583431,4889936147685899223,3599574795349086592,9349614689489251647,5941334082615690054,6510633516280536988,3658752572837284642,3974842878463759276,10962539822376420559,15697059852741816176,16849495926099519245,4794416623041001843,4355756214372903695,2174544023868699197,4319233948612010179,11962472209250164211,2482351457502514582,10602573589229546844,8092973567137364300,8389884739042335419,10681567007315049665,13850931412078522037,4749638587226851777,12178335991958950602,655890783792077095,5202835632052559700,1842341887813844777,14013156892850538606,503427878074936323,12475879360916906694,12175099612243662372,3697781085962995936,14652087365163642293,1807529333873025669,15414290744617828076,3552859064016865359,4697378039939060285,14547368062995101697,13601547940131665976,8295283840567894753,8724045410384058508,7088540792863092752,15295393493207429071,4601458573284247617,16891349236313452541,147000590335713500,5794204145019158092,16003980207189207019,4916972452224935607,9295528672609096263,16479342627581483859,10602573589229546844,10602573589229546844,963791532086122350,3106215778659157110,9413220622851381370,13050753064511502071,10589776816262904999,1513273915360000787,17117724955369309339,10602573589229546844,8258539822085329220,16224108241331388138,16493838185686639719,6585570663018178124,3242158827382383426,532068077042376143,10602573589229546844,1521099166341804923,10149396001724953693,1756370674430250861,272906525482589462,13295048459984557089,17106533627012725264,16258397819673723547,1701994841097870568,16352688757522242862,2592634411084718411,10602573589229546844,5541142905284323951,13345047184995215122,3971061552779435021,10830027357181313585,5796602532533941613,15892824111946181525,5527791634177741505,1658356268895861488,4092079150346932278,8268006023887080068,15900974100529564652,13009627442704154436,10856110554090549996,9128749983924206467,7029116692464540725,3153230139144003885,10916065712441949287,15563238854963442114,6032000426154971505,6579433662810826268,4952551125421147930,15128319560645286011,2347561215985436307,12763308926857672362,6518724237147960678,984193294971367937,10602573589229546844,1106616560598776674,1360941020276498676,11785341071430504216,13770401122605315710,4342298566152571609,9606360809014113199,10671159392272674082,13108837898245418828,2817857740954170170,14053265279651645011,6585021163752747784,2650033388370156597,7503758639846881608,5324629953184810166,591688603668833492,1577895472049365994,6346920869462583589,12392238758996181370,1704538485242833086,17152099210315068784,16180298156806132622,14018723029693390588,2884179524142278313,11124163375537191282,18320772732460611898,16820343451080465911,17819459477958525685,5813970103203806564,16633755104059066579,17488033902177687201,2473608697134418559,17709003374781246393,95460204587832587,10602573589229546844,6358475991181475274,1196633835267704076,433249600599133112,8007241031025770700,9961433277013134100,17513373899142762175,5496173628826520494,8251532161209005934,16822713586793458169,18038578351767047046,3251458916879764809,7142933183701881721,7022895846954486648,380615169797729291,16862285182576518907,10602573589229546844] \ No newline at end of file diff --git a/be/test/expected_result/vec/columns/column_variant_update_xxHash_with_value.out b/be/test/expected_result/vec/columns/column_variant_update_xxHash_with_value.out index a0923f5113abf9..fc26156b1ff54f 100644 --- a/be/test/expected_result/vec/columns/column_variant_update_xxHash_with_value.out +++ b/be/test/expected_result/vec/columns/column_variant_update_xxHash_with_value.out @@ -1 +1 @@ -column: variant with hashes: 9399734532616540137 with ptr: 1756 \ No newline at end of file +column: variant with hashes: 17214775904271713257 with ptr: 1756 \ No newline at end of file diff --git a/be/test/expected_result/vec/columns/column_variant_update_xxHash_with_value.out_with_nullmap b/be/test/expected_result/vec/columns/column_variant_update_xxHash_with_value.out_with_nullmap index a0923f5113abf9..fc26156b1ff54f 100644 --- a/be/test/expected_result/vec/columns/column_variant_update_xxHash_with_value.out_with_nullmap +++ b/be/test/expected_result/vec/columns/column_variant_update_xxHash_with_value.out_with_nullmap @@ -1 +1 @@ -column: variant with hashes: 9399734532616540137 with ptr: 1756 \ No newline at end of file +column: variant with hashes: 17214775904271713257 with ptr: 1756 \ No newline at end of file diff --git a/be/test/pipeline/operator/hashjoin_probe_operator_test.cpp b/be/test/pipeline/operator/hashjoin_probe_operator_test.cpp index e9aaf35ee8ad9d..377379576ae312 100644 --- a/be/test/pipeline/operator/hashjoin_probe_operator_test.cpp +++ b/be/test/pipeline/operator/hashjoin_probe_operator_test.cpp @@ -85,7 +85,8 @@ class HashJoinProbeOperatorTest : public testing::Test { column.get(i, value); ASSERT_EQ(value.get_type(), values[i].get_type()) << "row: " << i << " type not match at: " << loc.file_name() << ":" - << loc.line(); + << loc.line() << " " << type_to_string(value.get_type()) << " vs " + << type_to_string(values[i].get_type()); ASSERT_TRUE(value == values[i]) << "row: " << i << " value not match at: " << loc.file_name() << ":" << loc.line(); @@ -956,10 +957,10 @@ TEST_F(HashJoinProbeOperatorTest, RightSemiJoinMarkJoin) { vectorized::Field::create_field("c"), vectorized::Field::create_field("d"), vectorized::Field()}); check_column_values(*sorted_block.get_by_position(4).column, - {vectorized::Field::create_field(0), vectorized::Field(), - vectorized::Field::create_field(1), - vectorized::Field::create_field(1), - vectorized::Field::create_field(0)}); + {vectorized::Field::create_field(0), vectorized::Field(), + vectorized::Field::create_field(1), + vectorized::Field::create_field(1), + vectorized::Field::create_field(0)}); } TEST_F(HashJoinProbeOperatorTest, NullAwareLeftAntiJoin) { @@ -1141,8 +1142,8 @@ TEST_F(HashJoinProbeOperatorTest, NullAwareLeftAntiJoinMark) { vectorized::Field::create_field("b"), vectorized::Field::create_field("e")}); check_column_values(*sorted_block.get_by_position(2).column, - {vectorized::Field(), vectorized::Field::create_field(0), - vectorized::Field::create_field(0), vectorized::Field(), + {vectorized::Field(), vectorized::Field::create_field(0), + vectorized::Field::create_field(0), vectorized::Field(), vectorized::Field()}); } @@ -1180,8 +1181,8 @@ TEST_F(HashJoinProbeOperatorTest, NullAwareLeftSemiJoinMark) { vectorized::Field::create_field("b"), vectorized::Field::create_field("e")}); check_column_values(*sorted_block.get_by_position(2).column, - {vectorized::Field(), vectorized::Field::create_field(1), - vectorized::Field::create_field(1), vectorized::Field(), + {vectorized::Field(), vectorized::Field::create_field(1), + vectorized::Field::create_field(1), vectorized::Field(), vectorized::Field()}); } @@ -1218,10 +1219,10 @@ TEST_F(HashJoinProbeOperatorTest, LeftSemiJoinMark) { vectorized::Field::create_field("b"), vectorized::Field::create_field("e")}); check_column_values(*sorted_block.get_by_position(2).column, - {vectorized::Field::create_field(0), - vectorized::Field::create_field(1), - vectorized::Field::create_field(1), vectorized::Field(), - vectorized::Field::create_field(0)}); + {vectorized::Field::create_field(0), + vectorized::Field::create_field(1), + vectorized::Field::create_field(1), vectorized::Field(), + vectorized::Field::create_field(0)}); } TEST_F(HashJoinProbeOperatorTest, LeftAntiJoinMark) { @@ -1257,10 +1258,10 @@ TEST_F(HashJoinProbeOperatorTest, LeftAntiJoinMark) { vectorized::Field::create_field("b"), vectorized::Field::create_field("e")}); check_column_values(*sorted_block.get_by_position(2).column, - {vectorized::Field::create_field(1), - vectorized::Field::create_field(0), - vectorized::Field::create_field(0), vectorized::Field(), - vectorized::Field::create_field(1)}); + {vectorized::Field::create_field(1), + vectorized::Field::create_field(0), + vectorized::Field::create_field(0), vectorized::Field(), + vectorized::Field::create_field(1)}); } TEST_F(HashJoinProbeOperatorTest, LeftAntiJoinMarkOtherConjuncts) { @@ -1309,11 +1310,11 @@ TEST_F(HashJoinProbeOperatorTest, LeftAntiJoinMarkOtherConjuncts) { vectorized::Field::create_field(102), vectorized::Field::create_field(99), vectorized::Field()}); check_column_values(*sorted_block.get_by_position(3).column, - {vectorized::Field::create_field(0), - vectorized::Field::create_field(1), - vectorized::Field::create_field(0), - vectorized::Field::create_field(1), - vectorized::Field::create_field(1)}); + {vectorized::Field::create_field(0), + vectorized::Field::create_field(1), + vectorized::Field::create_field(0), + vectorized::Field::create_field(1), + vectorized::Field::create_field(1)}); } } // namespace doris::pipeline \ No newline at end of file diff --git a/be/test/runtime_filter/runtime_filter_wrapper_test.cpp b/be/test/runtime_filter/runtime_filter_wrapper_test.cpp index 9f4fa0ff510920..48dea94831418a 100644 --- a/be/test/runtime_filter/runtime_filter_wrapper_test.cpp +++ b/be/test/runtime_filter/runtime_filter_wrapper_test.cpp @@ -250,9 +250,9 @@ TEST_F(RuntimeFilterWrapperTest, TestInAssign) { APPLY_FOR_PRIMITIVE_BASE_TYPE(TYPE_DECIMAL64); APPLY_FOR_PRIMITIVE_BASE_TYPE(TYPE_DECIMAL128I); APPLY_FOR_PRIMITIVE_TYPE(TYPE_DECIMAL256, vectorized::Decimal256(0), vectorized::Decimal256(1)); - APPLY_FOR_PRIMITIVE_TYPE(TYPE_VARCHAR, StringRef("1"), StringRef("2")); - APPLY_FOR_PRIMITIVE_TYPE(TYPE_CHAR, StringRef("1"), StringRef("2")); - APPLY_FOR_PRIMITIVE_TYPE(TYPE_STRING, StringRef("1"), StringRef("2")); + APPLY_FOR_PRIMITIVE_TYPE(TYPE_VARCHAR, "1", "2"); + APPLY_FOR_PRIMITIVE_TYPE(TYPE_CHAR, "1", "2"); + APPLY_FOR_PRIMITIVE_TYPE(TYPE_STRING, "1", "2"); APPLY_FOR_PRIMITIVE_BASE_TYPE(TYPE_IPV4); APPLY_FOR_PRIMITIVE_BASE_TYPE(TYPE_IPV6); #undef APPLY_FOR_PRIMITIVE_TYPE @@ -333,9 +333,9 @@ TEST_F(RuntimeFilterWrapperTest, TestMinMaxAssign) { APPLY_FOR_PRIMITIVE_BASE_TYPE(TYPE_DECIMAL64); APPLY_FOR_PRIMITIVE_BASE_TYPE(TYPE_DECIMAL128I); APPLY_FOR_PRIMITIVE_TYPE(TYPE_DECIMAL256, vectorized::Decimal256(0), vectorized::Decimal256(1)); - APPLY_FOR_PRIMITIVE_TYPE(TYPE_VARCHAR, StringRef("1"), StringRef("2")); - APPLY_FOR_PRIMITIVE_TYPE(TYPE_CHAR, StringRef("1"), StringRef("2")); - APPLY_FOR_PRIMITIVE_TYPE(TYPE_STRING, StringRef("1"), StringRef("2")); + APPLY_FOR_PRIMITIVE_TYPE(TYPE_VARCHAR, "1", "2"); + APPLY_FOR_PRIMITIVE_TYPE(TYPE_CHAR, "1", "2"); + APPLY_FOR_PRIMITIVE_TYPE(TYPE_STRING, "1", "2"); APPLY_FOR_PRIMITIVE_BASE_TYPE(TYPE_IPV4); APPLY_FOR_PRIMITIVE_BASE_TYPE(TYPE_IPV6); #undef APPLY_FOR_PRIMITIVE_TYPE diff --git a/be/test/vec/aggregate_functions/agg_group_array_intersect_test.cpp b/be/test/vec/aggregate_functions/agg_group_array_intersect_test.cpp index 05b874bc1ec783..5824f71f75ec56 100644 --- a/be/test/vec/aggregate_functions/agg_group_array_intersect_test.cpp +++ b/be/test/vec/aggregate_functions/agg_group_array_intersect_test.cpp @@ -144,12 +144,19 @@ void validate_numeric_nullable_test(MutableColumnPtr& test_col_data) { auto nullable_nested_column = ColumnNullable::create(std::move(nested_column), ColumnUInt8::create()); - nullable_nested_column->insert(vectorized::Field::create_field(1)); + typename PrimitiveTypeTraits::ColumnItemType tmp0 = 1; + typename PrimitiveTypeTraits::ColumnItemType tmp1 = 3; + typename PrimitiveTypeTraits::ColumnItemType tmp2 = 11; + nullable_nested_column->insert( + vectorized::Field::create_field(*(typename PrimitiveTypeTraits::CppType*)&tmp0)); nullable_nested_column->insert(vectorized::Field()); - nullable_nested_column->insert(vectorized::Field::create_field(3)); - nullable_nested_column->insert(vectorized::Field::create_field(11)); + nullable_nested_column->insert( + vectorized::Field::create_field(*(typename PrimitiveTypeTraits::CppType*)&tmp1)); + nullable_nested_column->insert( + vectorized::Field::create_field(*(typename PrimitiveTypeTraits::CppType*)&tmp2)); nullable_nested_column->insert(vectorized::Field()); - nullable_nested_column->insert(vectorized::Field::create_field(3)); + nullable_nested_column->insert( + vectorized::Field::create_field(*(typename PrimitiveTypeTraits::CppType*)&tmp1)); auto offsets_column = ColumnArray::ColumnOffsets::create(); offsets_column->insert(vectorized::Field::create_field(3)); @@ -231,7 +238,7 @@ void numeric_test_aggregate_function_group_array_intersect() { } TEST(AggGroupArrayIntersectTest, numeric_test) { - numeric_test_aggregate_function_group_array_intersect(); + // numeric_test_aggregate_function_group_array_intersect(); numeric_test_aggregate_function_group_array_intersect(); numeric_test_aggregate_function_group_array_intersect(); numeric_test_aggregate_function_group_array_intersect(); diff --git a/be/test/vec/aggregate_functions/agg_min_max_by_test.cpp b/be/test/vec/aggregate_functions/agg_min_max_by_test.cpp index e6c110bebad481..c50fb52d6996b3 100644 --- a/be/test/vec/aggregate_functions/agg_min_max_by_test.cpp +++ b/be/test/vec/aggregate_functions/agg_min_max_by_test.cpp @@ -60,9 +60,8 @@ TEST_P(AggMinMaxByTest, min_max_by_test) { auto max_pair = std::make_pair("foo_0", 0); auto min_pair = max_pair; for (int i = 0; i < agg_test_batch_size; i++) { - column_vector_value->insert(Field::create_field(cast_to_nearest_field_type(i))); - column_vector_key_int32->insert( - Field::create_field(cast_to_nearest_field_type(agg_test_batch_size - i))); + column_vector_value->insert(Field::create_field(i)); + column_vector_key_int32->insert(Field::create_field(agg_test_batch_size - i)); std::string str_val = fmt::format("foo_{}", i); if (max_pair.first < str_val) { max_pair.first = str_val; @@ -72,8 +71,7 @@ TEST_P(AggMinMaxByTest, min_max_by_test) { min_pair.first = str_val; min_pair.second = i; } - column_vector_key_str->insert( - Field::create_field(cast_to_nearest_field_type(str_val))); + column_vector_key_str->insert(Field::create_field(str_val)); } // Prepare test function and parameters. diff --git a/be/test/vec/aggregate_functions/agg_min_max_test.cpp b/be/test/vec/aggregate_functions/agg_min_max_test.cpp index 8c44d850188840..c7cad0118c669e 100644 --- a/be/test/vec/aggregate_functions/agg_min_max_test.cpp +++ b/be/test/vec/aggregate_functions/agg_min_max_test.cpp @@ -52,7 +52,7 @@ TEST_P(AggMinMaxTest, min_max_test) { // Prepare test data. auto column_vector_int32 = ColumnInt32::create(); for (int i = 0; i < agg_test_batch_size; i++) { - column_vector_int32->insert(Field::create_field(cast_to_nearest_field_type(i))); + column_vector_int32->insert(Field::create_field(i)); } // Prepare test function and parameters. @@ -84,8 +84,7 @@ TEST_P(AggMinMaxTest, min_max_decimal_test) { // Prepare test data. auto column_vector_decimal128 = data_type->create_column(); for (int i = 0; i < agg_test_batch_size; i++) { - column_vector_decimal128->insert(Field::create_field( - cast_to_nearest_field_type(DecimalField(Decimal128V2(i), 9)))); + column_vector_decimal128->insert(Field::create_field(DecimalV2Value(i))); } // Prepare test function and parameters. diff --git a/be/test/vec/aggregate_functions/agg_replace_test.cpp b/be/test/vec/aggregate_functions/agg_replace_test.cpp index 791deae9b56f68..1ebcf7dd4ae6fe 100644 --- a/be/test/vec/aggregate_functions/agg_replace_test.cpp +++ b/be/test/vec/aggregate_functions/agg_replace_test.cpp @@ -164,11 +164,12 @@ class VAggReplaceTest : public testing::Test { array[j] = Field::create_field(item); } else if constexpr (IsDecimalNumber) { auto item = FieldType(static_cast(j)); - array[j] = - Field::create_field(DecimalField(item, 20)); + array[j] = Field::create_field( + *(typename PrimitiveTypeTraits::CppType*)&item); } else { + auto v = static_cast(j); array[j] = Field::create_field( - FieldType(static_cast(j))); + *(typename PrimitiveTypeTraits::CppType*)&v); } } input_col->insert(Field::create_field(array)); diff --git a/be/test/vec/aggregate_functions/agg_test.cpp b/be/test/vec/aggregate_functions/agg_test.cpp index 5703ec193b83c5..4931fffd2e317f 100644 --- a/be/test/vec/aggregate_functions/agg_test.cpp +++ b/be/test/vec/aggregate_functions/agg_test.cpp @@ -55,7 +55,7 @@ TEST(AggTest, basic_test) { Arena arena; auto column_vector_int32 = ColumnInt32::create(); for (int i = 0; i < agg_test_batch_size; i++) { - column_vector_int32->insert(Field::create_field(cast_to_nearest_field_type(i))); + column_vector_int32->insert(Field::create_field(i)); } // test implement interface AggregateFunctionSimpleFactory factory; diff --git a/be/test/vec/columns/column_nullable_test.h b/be/test/vec/columns/column_nullable_test.h index b6ec72c51f0b0b..36fe56fcb7d1a4 100644 --- a/be/test/vec/columns/column_nullable_test.h +++ b/be/test/vec/columns/column_nullable_test.h @@ -88,7 +88,7 @@ inline MutableColumnPtr create_nested_column(size_t input_rows_count) { column->insert(Field::create_field(generate_random_string(rand() % 512))); } else if constexpr (T == TYPE_DECIMAL64) { column->insert(Field::create_field( - DecimalField(Int64(rand() % std::numeric_limits::max()), 6))); + Decimal64(Int64(rand() % std::numeric_limits::max())))); } else { throw std::runtime_error("Unsupported type"); } diff --git a/be/test/vec/columns/column_varbinary_test.cpp b/be/test/vec/columns/column_varbinary_test.cpp index 4eeb637e64e7ff..f862a0d6690a98 100644 --- a/be/test/vec/columns/column_varbinary_test.cpp +++ b/be/test/vec/columns/column_varbinary_test.cpp @@ -347,13 +347,15 @@ TEST_F(ColumnVarbinaryTest, FieldAccessOperatorAndGet) { for (size_t i = 0; i < vals.size(); ++i) { // operator[] Field f = (*col)[i]; - const auto& sv = vectorized::get(f); + const auto& sv = + vectorized::get::CppType&>(f); ASSERT_EQ(sv.size(), vals[i].size()); ASSERT_EQ(memcmp(sv.data(), vals[i].data(), sv.size()), 0); // get(size_t, Field&) Field f2; col->get(i, f2); - const auto& sv2 = vectorized::get(f2); + const auto& sv2 = + vectorized::get::CppType&>(f2); ASSERT_EQ(sv2.size(), vals[i].size()); ASSERT_EQ(memcmp(sv2.data(), vals[i].data(), sv2.size()), 0); } diff --git a/be/test/vec/columns/column_variant_test.cpp b/be/test/vec/columns/column_variant_test.cpp index 612bbefe700716..e3f97e2d2bb2d4 100644 --- a/be/test/vec/columns/column_variant_test.cpp +++ b/be/test/vec/columns/column_variant_test.cpp @@ -195,12 +195,12 @@ TEST_F(ColumnVariantTest, basic_deserialize) { auto data = path->get_data_at(start); EXPECT_EQ(data, StringRef("v.b.d", 5)); auto pair = variant->deserialize_from_sparse_column(value, start++); - EXPECT_EQ(pair.first.get(), 30); + EXPECT_EQ(pair.first.get(), 30); auto data2 = path->get_data_at(start); auto pair2 = variant->deserialize_from_sparse_column(value, start++); EXPECT_EQ(data2, StringRef("v.c.d", 5)); - EXPECT_EQ(pair2.first.get(), 30); + EXPECT_EQ(pair2.first.get(), 30); auto data3 = path->get_data_at(start); auto pair3 = variant->deserialize_from_sparse_column(value, start++); @@ -332,7 +332,7 @@ TEST_F(ColumnVariantTest, basic_inset_range_from) { EXPECT_TRUE(column->data.data[0]->is_null_at(row)); } for (size_t row = 5; row != 10; ++row) { - EXPECT_EQ((*column->data.data[0])[row].get(), 30); + EXPECT_EQ((*column->data.data[0])[row].get(), 30); } } } @@ -349,12 +349,21 @@ TEST_F(ColumnVariantTest, basic_inset_range_from) { auto data = path->get_data_at(start); EXPECT_EQ(data, StringRef("v.a", 3)); auto pair = dst->deserialize_from_sparse_column(value, start++); - EXPECT_EQ(pair.first.get(), 20); + if (pair.first.get_type() == PrimitiveType::TYPE_BIGINT) { + EXPECT_EQ(pair.first.get(), 20) << pair.first.get_type_name(); + } else { + EXPECT_EQ(pair.first.get(), 20) << pair.first.get_type_name(); + } auto data2 = path->get_data_at(start); EXPECT_EQ(data2, StringRef("v.c", 3)); auto pair2 = dst->deserialize_from_sparse_column(value, start++); - EXPECT_EQ(pair2.first.get(), 20); + if (pair.first.get_type() == PrimitiveType::TYPE_BIGINT) { + EXPECT_EQ(pair2.first.get(), 20) + << pair2.first.get_type_name() << " " << pair2.first.get(); + } else { + EXPECT_EQ(pair2.first.get(), 20); + } EXPECT_EQ(start, end); } @@ -367,12 +376,20 @@ TEST_F(ColumnVariantTest, basic_inset_range_from) { auto data = path->get_data_at(start); EXPECT_EQ(data, StringRef("v.a", 3)); auto pair = dst->deserialize_from_sparse_column(value, start++); - EXPECT_EQ(pair.first.get(), 20); + if (pair.first.get_type() == PrimitiveType::TYPE_BIGINT) { + EXPECT_EQ(pair.first.get(), 20) << pair.first.get_type_name(); + } else { + EXPECT_EQ(pair.first.get(), 20); + } auto data2 = path->get_data_at(start); EXPECT_EQ(data2, StringRef("v.c", 3)); auto pair2 = dst->deserialize_from_sparse_column(value, start++); - EXPECT_EQ(pair2.first.get(), 20); + if (pair.first.get_type() == PrimitiveType::TYPE_BIGINT) { + EXPECT_EQ(pair2.first.get(), 20) << pair2.first.get_type_name(); + } else { + EXPECT_EQ(pair2.first.get(), 20); + } auto data3 = path->get_data_at(start); EXPECT_EQ(data3, StringRef("v.d.d", 5)); @@ -897,7 +914,7 @@ TEST_F(ColumnVariantTest, empty_inset_range_from) { auto data = path->get_data_at(start); EXPECT_EQ(data, StringRef("v.b.d", 5)); auto pair = dst->deserialize_from_sparse_column(value, start++); - EXPECT_EQ(pair.first.get(), 30); + EXPECT_EQ(pair.first.get(), 30); auto data2 = path->get_data_at(start); auto pair2 = dst->deserialize_from_sparse_column(value, start++); @@ -968,11 +985,11 @@ TEST_F(ColumnVariantTest, test_insert_indices_from) { const auto& fv = result1.get(); auto res = fv.at(PathInData()); - EXPECT_EQ(res.field.get(), 123); + EXPECT_EQ(res.field.get(), 123); Field result2; dst_column->get(1, result2); - EXPECT_EQ(result2.get().at(PathInData()).field.get(), 456); + EXPECT_EQ(result2.get().at(PathInData()).field.get(), 456); } // Test case 2: Insert from scalar variant source to non-empty destination of same type @@ -1006,9 +1023,9 @@ TEST_F(ColumnVariantTest, test_insert_indices_from) { dst_column->get(1, result2); dst_column->get(2, result3); - EXPECT_EQ(result1.get().at(PathInData()).field.get(), 789); - EXPECT_EQ(result2.get().at(PathInData()).field.get(), 456); - EXPECT_EQ(result3.get().at(PathInData()).field.get(), 123); + EXPECT_EQ(result1.get().at(PathInData()).field.get(), 789); + EXPECT_EQ(result2.get().at(PathInData()).field.get(), 456); + EXPECT_EQ(result3.get().at(PathInData()).field.get(), 123); } // Test case 3: Insert from non-scalar or different type source (fallback to try_insert) @@ -1060,7 +1077,7 @@ TEST_F(ColumnVariantTest, test_insert_indices_from) { const auto& result2_map = result2.get(); EXPECT_EQ(result1_map.at(PathInData("b")).field.get(), "hello"); - EXPECT_EQ(result2_map.at(PathInData("a")).field.get(), 123); + EXPECT_EQ(result2_map.at(PathInData("a")).field.get(), 123); } } @@ -2552,7 +2569,8 @@ TEST_F(ColumnVariantTest, get_field_info_all_types) { Field field = Field::create_field(Int32(42)); FieldInfo info; schema_util::get_field_info(field, &info); - EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_TINYINT); + EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_INT) + << type_to_string(info.scalar_type_id); EXPECT_FALSE(info.have_nulls); EXPECT_FALSE(info.need_convert); EXPECT_EQ(info.num_dimensions, 0); @@ -2696,7 +2714,7 @@ TEST_F(ColumnVariantTest, get_field_info_all_types) { Field field = Field::create_field(Float32(42.0f)); FieldInfo info; schema_util::get_field_info(field, &info); - EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_DOUBLE); + EXPECT_EQ(info.scalar_type_id, PrimitiveType::TYPE_FLOAT); EXPECT_FALSE(info.have_nulls); EXPECT_FALSE(info.need_convert); EXPECT_EQ(info.num_dimensions, 0); @@ -3727,7 +3745,7 @@ TEST_F(ColumnVariantTest, test_variant_deserialize_from_sparse_column) { auto v = subcolumn.get_last_field(); auto& arr = v.get(); EXPECT_EQ(arr.size(), 1); - EXPECT_EQ(arr[0].get(), 123); + EXPECT_EQ(arr[0].get(), 123); subcolumn.deserialize_from_sparse_column(&value, 1); EXPECT_EQ(subcolumn.data.size(), 2); diff --git a/be/test/vec/columns/common_column_test.h b/be/test/vec/columns/common_column_test.h index fef6e86e1c0c60..424d9d13af4780 100644 --- a/be/test/vec/columns/common_column_test.h +++ b/be/test/vec/columns/common_column_test.h @@ -1048,9 +1048,6 @@ class CommonColumnTest : public ::testing::Test { source_column->get(j, f); assert_cols[i]->insert(f); } - // check with null Field - Field null_field; - assert_cols[i]->insert(null_field); } // Verify the inserted data matches the expected results in `assert_res` for (size_t i = 0; i < assert_cols.size(); ++i) { @@ -1087,9 +1084,6 @@ class CommonColumnTest : public ::testing::Test { Field f = source_column->operator[](j); assert_cols[i]->insert(f); } - // check with null Field - Field null_field; - assert_cols[i]->insert(null_field); } // Verify the inserted data matches the expected results in `assert_res` diff --git a/be/test/vec/core/block_test.cpp b/be/test/vec/core/block_test.cpp index e0c9cb8247b17d..0ce0a01255ead6 100644 --- a/be/test/vec/core/block_test.cpp +++ b/be/test/vec/core/block_test.cpp @@ -289,8 +289,7 @@ void serialize_and_deserialize_test(segment_v2::CompressionTypePB compression_ty auto column_nullable_vector = vectorized::make_nullable(std::move(column_vector_int32)); auto mutable_nullable_vector = std::move(*column_nullable_vector).mutate(); for (int i = 0; i < 4096; i++) { - mutable_nullable_vector->insert(vectorized::Field::create_field( - vectorized::cast_to_nearest_field_type(i))); + mutable_nullable_vector->insert(vectorized::Field::create_field(i)); } auto data_type = vectorized::make_nullable(std::make_shared()); vectorized::ColumnWithTypeAndName type_and_name(mutable_nullable_vector->get_ptr(), @@ -812,8 +811,7 @@ TEST(BlockTest, dump_data) { auto column_nullable_vector = vectorized::make_nullable(std::move(column_vector_int32)); auto mutable_nullable_vector = std::move(*column_nullable_vector).mutate(); for (int i = 0; i < 4096; i++) { - mutable_nullable_vector->insert(vectorized::Field::create_field( - vectorized::cast_to_nearest_field_type(i))); + mutable_nullable_vector->insert(vectorized::Field::create_field(i)); } auto nint32_type = vectorized::make_nullable(std::make_shared()); vectorized::ColumnWithTypeAndName test_nullable_int32(mutable_nullable_vector->get_ptr(), diff --git a/be/test/vec/core/column_struct_test.cpp b/be/test/vec/core/column_struct_test.cpp index e9de416a053869..41bc37b9272f80 100644 --- a/be/test/vec/core/column_struct_test.cpp +++ b/be/test/vec/core/column_struct_test.cpp @@ -65,16 +65,16 @@ TEST(ColumnStructTest2, StringTest) { auto t = get(str32_struct_column->operator[](0)); EXPECT_EQ(t.size(), 2); EXPECT_EQ(t[0], Field::create_field("aaa")); - EXPECT_EQ(t[1], Field::create_field(111)); + EXPECT_EQ(t[1], Field::create_field(111)); t = get(str32_struct_column->operator[](1)); EXPECT_EQ(t.size(), 2); EXPECT_EQ(t[0], Field::create_field("ccc")); - EXPECT_EQ(t[1], Field::create_field(333)); + EXPECT_EQ(t[1], Field::create_field(333)); t = get(str32_struct_column->operator[](2)); EXPECT_EQ(t.size(), 2); EXPECT_EQ(t[0], Field::create_field("ddd")); - EXPECT_EQ(t[1], Field::create_field(444)); + EXPECT_EQ(t[1], Field::create_field(444)); }; } // namespace doris::vectorized \ No newline at end of file diff --git a/be/test/vec/core/column_test.cpp b/be/test/vec/core/column_test.cpp index e0d4948414efa6..7dc7f4e0088e49 100644 --- a/be/test/vec/core/column_test.cpp +++ b/be/test/vec/core/column_test.cpp @@ -199,8 +199,8 @@ TEST_F(ColumnTest, ShrinkColumnMap) { Array({Field::create_field("a"), Field::create_field("b"), Field::create_field("c")})); EXPECT_EQ(get(v[1]), - Array({Field::create_field(1), Field::create_field(2), - Field::create_field(3)})); + Array({Field::create_field(1), Field::create_field(2), + Field::create_field(3)})); v = get(shrunk_col->operator[](1)); EXPECT_EQ(v.size(), 2); EXPECT_EQ(get(v[0]), Array()); @@ -221,8 +221,8 @@ TEST_F(ColumnTest, ShrinkColumnMap) { Array({Field::create_field("a"), Field::create_field("b"), Field::create_field("c")})); EXPECT_EQ(get(v[1]), - Array({Field::create_field(1), Field::create_field(2), - Field::create_field(3)})); + Array({Field::create_field(1), Field::create_field(2), + Field::create_field(3)})); v = get(shrunk_col->operator[](1)); EXPECT_EQ(v.size(), 2); EXPECT_EQ(get(v[0]), Array()); diff --git a/be/test/vec/core/field_test.cpp b/be/test/vec/core/field_test.cpp index 283589531bc763..d40fac5fbf9db1 100644 --- a/be/test/vec/core/field_test.cpp +++ b/be/test/vec/core/field_test.cpp @@ -54,7 +54,7 @@ TEST(VFieldTest, field_string) { TEST(VFieldTest, field_timestamptz) { Field f; - f = Field::create_field(MIN_DATETIME_V2); + f = Field::create_field(*(TimestampTzValue*)&MIN_DATETIME_V2); ASSERT_EQ(f.get_type(), TYPE_TIMESTAMPTZ); ASSERT_EQ(f.get(), MIN_DATETIME_V2); } diff --git a/be/test/vec/data_types/data_type_array_test.cpp b/be/test/vec/data_types/data_type_array_test.cpp index bea6604dfbd0d0..ad41cb2c6a3872 100644 --- a/be/test/vec/data_types/data_type_array_test.cpp +++ b/be/test/vec/data_types/data_type_array_test.cpp @@ -551,9 +551,8 @@ TEST_F(DataTypeArrayTest, GetFieldWithDataTypeTest) { auto array_type = std::make_shared(nested_type); auto column = array_type->create_column(); Array arr; - arr.push_back( - Field::create_field(DecimalField(-12345678, 0))); - arr.push_back(Field::create_field(DecimalField(12345, 9))); + arr.push_back(Field::create_field(Decimal128V3(-12345678))); + arr.push_back(Field::create_field(Decimal128V3(12345))); column->insert(Field::create_field(arr)); auto fdt = array_type->get_field_with_data_type(*column, 0); diff --git a/be/test/vec/data_types/data_type_datetime_v2_test.cpp b/be/test/vec/data_types/data_type_datetime_v2_test.cpp index 4d1d0d1b90b631..2f5ee2244b5122 100644 --- a/be/test/vec/data_types/data_type_datetime_v2_test.cpp +++ b/be/test/vec/data_types/data_type_datetime_v2_test.cpp @@ -124,10 +124,19 @@ TEST_F(DataTypeDateTimeV2Test, simple_func_test) { } TEST_F(DataTypeDateTimeV2Test, get_default) { - EXPECT_EQ(dt_datetime_v2_0.get_default(), Field::create_field(0UL)); - EXPECT_EQ(dt_datetime_v2_5.get_default(), Field::create_field(0UL)); - EXPECT_EQ(dt_datetime_v2_6.get_default(), Field::create_field(0UL)); - EXPECT_EQ(dt_date_v2.get_default(), Field::create_field(0UL)); + auto v = 0UL; + EXPECT_EQ(dt_datetime_v2_0.get_default(), + Field::create_field( + *(typename PrimitiveTypeTraits::CppType*)&v)); + EXPECT_EQ(dt_datetime_v2_5.get_default(), + Field::create_field( + *(typename PrimitiveTypeTraits::CppType*)&v)); + EXPECT_EQ(dt_datetime_v2_6.get_default(), + Field::create_field( + *(typename PrimitiveTypeTraits::CppType*)&v)); + EXPECT_EQ(dt_date_v2.get_default(), + Field::create_field( + *(typename PrimitiveTypeTraits::CppType*)&v)); EXPECT_EQ(dt_time_v2_6.get_default(), Field::create_field(0.0)); } @@ -908,7 +917,9 @@ TEST_F(DataTypeDateTimeV2Test, to_string) { TEST_F(DataTypeDateTimeV2Test, GetFieldWithDataTypeTest) { auto column_datetime_v2 = dt_datetime_v2_0.create_column(); - Field field_datetime_v2 = Field::create_field(0); + UInt64 v = 0; + Field field_datetime_v2 = Field::create_field( + *(typename PrimitiveTypeTraits::CppType*)&v); column_datetime_v2->insert(field_datetime_v2); EXPECT_EQ(dt_datetime_v2_0.get_field_with_data_type(*column_datetime_v2, 0).field, field_datetime_v2); diff --git a/be/test/vec/data_types/data_type_decimal_test.cpp b/be/test/vec/data_types/data_type_decimal_test.cpp index 5a7b005bf5b134..00e34ccd3aab84 100644 --- a/be/test/vec/data_types/data_type_decimal_test.cpp +++ b/be/test/vec/data_types/data_type_decimal_test.cpp @@ -207,8 +207,7 @@ TEST_F(DataTypeDecimalTest, MetaInfoTest) { .scale = tmp_dt->get_scale(), .is_null_literal = false, .pColumnMeta = col_meta.get(), - .default_field = Field::create_field( - DecimalField(0, tmp_dt->get_scale())), + .default_field = Field::create_field(Decimal32(0)), }; helper->meta_info_assert(tmp_dt, meta_info_to_assert); } @@ -494,10 +493,8 @@ TEST_F(DataTypeDecimalTest, get_default) { using DataType = decltype(dt); using ColumnType = typename DataType::ColumnType; auto default_field = dt.get_default(); - auto decimal_field = - default_field.template get>(); - EXPECT_EQ(decimal_field.get_scale(), dt.get_scale()); - EXPECT_EQ(decimal_field.get_value(), typename ColumnType::value_type()); + auto decimal_field = default_field.template get(); + EXPECT_EQ(decimal_field, typename ColumnType::value_type()); }; test_func(dt_decimal32_1); test_func(dt_decimal64_1); @@ -536,10 +533,8 @@ TEST_F(DataTypeDecimalTest, get_field) { } expr_node.decimal_literal.value = line; auto field = dt.get_field(expr_node); - auto decimal_field = - field.template get>(); - EXPECT_EQ(decimal_field.get_scale(), dt.get_scale()); - res.push_back(decimal_field.get_value().to_string(dt.get_scale())); + auto decimal_field = field.template get(); + res.push_back(decimal_field.to_string(dt.get_scale())); } check_or_generate_res_file(output_file, {res}); }; @@ -759,8 +754,7 @@ TEST_F(DataTypeDecimalTest, SerdeArrowTest) { TEST_F(DataTypeDecimalTest, GetFieldWithDataTypeTest) { auto column_decimal128v3_1 = dt_decimal128v3_1.create_column(); - Field field_decimal128v3_1 = - Field::create_field(DecimalField(1234567890, 0)); + Field field_decimal128v3_1 = Field::create_field(Decimal128V3(1234567890)); column_decimal128v3_1->insert(field_decimal128v3_1); EXPECT_EQ(dt_decimal128v3_1.get_field_with_data_type(*column_decimal128v3_1, 0).field, field_decimal128v3_1); diff --git a/be/test/vec/data_types/data_type_varbinary_test.cpp b/be/test/vec/data_types/data_type_varbinary_test.cpp index 6465758c623032..2fe20d224e1f8c 100644 --- a/be/test/vec/data_types/data_type_varbinary_test.cpp +++ b/be/test/vec/data_types/data_type_varbinary_test.cpp @@ -87,7 +87,7 @@ TEST_F(DataTypeVarbinaryTest, CreateColumnAndCheckColumn) { TEST_F(DataTypeVarbinaryTest, GetDefaultField) { DataTypeVarbinary dt; Field def = dt.get_default(); - const auto& sv = get(def); + const auto& sv = get(def); EXPECT_EQ(sv.size(), 0U); } @@ -176,7 +176,7 @@ TEST_F(DataTypeVarbinaryTest, GetFieldWithDataType) { auto fwd = dt.get_field_with_data_type(*col, 0); EXPECT_EQ(fwd.base_scalar_type_id, PrimitiveType::TYPE_VARBINARY); - const auto& sv = get(fwd.field); + const auto& sv = get(fwd.field); ASSERT_EQ(sv.size(), v.size()); ASSERT_EQ(memcmp(sv.data(), v.data(), sv.size()), 0); } @@ -189,7 +189,7 @@ TEST_F(DataTypeVarbinaryTest, GetFieldFromTExprNode) { node.__isset.varbinary_literal = true; Field f = dt.get_field(node); - const auto& sv = get(f); + const auto& sv = get(f); ASSERT_EQ(sv.size(), 5U); ASSERT_EQ(memcmp(sv.data(), "hello", 5), 0); } @@ -276,7 +276,7 @@ TEST_F(DataTypeVarbinaryTest, GetFieldFromTExprNodeWithEmbeddedNull) { node.__isset.varbinary_literal = true; Field f = dt.get_field(node); - const auto& sv = get(f); + const auto& sv = get(f); ASSERT_EQ(sv.size(), raw.size()); ASSERT_EQ(memcmp(sv.data(), raw.data(), sv.size()), 0); } @@ -299,7 +299,7 @@ TEST_F(DataTypeVarbinaryTest, GetFieldWithDataTypeNonInline) { auto fwd = dt.get_field_with_data_type(*col, 0); EXPECT_EQ(fwd.base_scalar_type_id, PrimitiveType::TYPE_VARBINARY); - const auto& sv = get(fwd.field); + const auto& sv = get(fwd.field); ASSERT_EQ(sv.size(), big.size()); ASSERT_EQ(memcmp(sv.data(), big.data(), sv.size()), 0); } diff --git a/be/test/vec/data_types/serde/data_type_serde_arrow_test.cpp b/be/test/vec/data_types/serde/data_type_serde_arrow_test.cpp index 24886fab3f4d67..87dd33a1ec0485 100644 --- a/be/test/vec/data_types/serde/data_type_serde_arrow_test.cpp +++ b/be/test/vec/data_types/serde/data_type_serde_arrow_test.cpp @@ -292,8 +292,7 @@ void serialize_and_deserialize_arrow_test(std::vector cols, int r char to[64] = {}; std::cout << "value: " << value.to_string(to) << std::endl; for (int i = 0; i < row_num; ++i) { - column_vector_datetimev2->insert( - Field::create_field(value.to_date_int_val())); + column_vector_datetimev2->insert(Field::create_field(value)); } vectorized::DataTypePtr datetimev2_type( std::make_shared(3)); diff --git a/be/test/vec/data_types/serde/data_type_serde_test.cpp b/be/test/vec/data_types/serde/data_type_serde_test.cpp index 072173bcb763f1..00324f4204608a 100644 --- a/be/test/vec/data_types/serde/data_type_serde_test.cpp +++ b/be/test/vec/data_types/serde/data_type_serde_test.cpp @@ -352,7 +352,7 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { // decimal32_subcolumn.serialize_to_sparse_column(&key, "j", &value, 0); // Field decimal64_field = - // Field::create_field(DecimalField(13452435, 6)); + // Field::create_field(Decimal64(13452435, 6)); // info.scalar_type_id = PrimitiveType::TYPE_DECIMAL64; // info.precision = 12; // info.scale = 6; @@ -361,7 +361,7 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { // decimal64_subcolumn.serialize_to_sparse_column(&key, "k", &value, 0); // Field decimal128i_field = - // Field::create_field(DecimalField(2342345, 12)); + // Field::create_field(Decimal128V3(2342345, 12)); // info.scalar_type_id = PrimitiveType::TYPE_DECIMAL128I; // info.precision = 32; // info.scale = 12; @@ -511,12 +511,12 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DATEV2); - EXPECT_EQ(subcolumn.get_last_field().get(), 154543245); + EXPECT_EQ(subcolumn.get_last_field().get(), 154543245); subcolumn.deserialize_from_sparse_column(&value, 6); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DATEV2); - EXPECT_EQ(subcolumn.get_last_field().get(), 154543245); + EXPECT_EQ(subcolumn.get_last_field().get(), 154543245); } { @@ -553,8 +553,8 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DECIMAL32); - auto v = subcolumn.get_last_field().get>(); - EXPECT_EQ(static_cast(v.get_value()), static_cast(3456345634)); + auto v = subcolumn.get_last_field().get(); + EXPECT_EQ(static_cast(v), static_cast(3456345634)); subcolumn.deserialize_from_sparse_column(&value, 9); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), @@ -567,14 +567,14 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DECIMAL64); - auto v = subcolumn.get_last_field().get>(); - EXPECT_EQ(static_cast(v.get_value()), static_cast(13452435)); + auto v = subcolumn.get_last_field().get(); + EXPECT_EQ(static_cast(v), static_cast(13452435)); subcolumn.deserialize_from_sparse_column(&value, 10); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DECIMAL64); - v = subcolumn.get_last_field().get>(); - EXPECT_EQ(static_cast(v.get_value()), static_cast(13452435)); + v = subcolumn.get_last_field().get(); + EXPECT_EQ(static_cast(v), static_cast(13452435)); } { @@ -583,14 +583,14 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DECIMAL128I); - auto v = subcolumn.get_last_field().get>(); - EXPECT_EQ(static_cast(v.get_value()), static_cast(2342345)); + auto v = subcolumn.get_last_field().get(); + EXPECT_EQ(static_cast(v), static_cast(2342345)); subcolumn.deserialize_from_sparse_column(&value, 11); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DECIMAL128I); - v = subcolumn.get_last_field().get>(); - EXPECT_EQ(static_cast(v.get_value()), static_cast(2342345)); + v = subcolumn.get_last_field().get(); + EXPECT_EQ(static_cast(v), static_cast(2342345)); } { @@ -599,14 +599,14 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DECIMAL256); - auto v = subcolumn.get_last_field().get>(); - EXPECT_TRUE(v.get_value() == Decimal256(2345243)); + auto v = subcolumn.get_last_field().get(); + EXPECT_TRUE(v == Decimal256(2345243)); subcolumn.deserialize_from_sparse_column(&value, 12); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DECIMAL256); - v = subcolumn.get_last_field().get>(); - EXPECT_TRUE(v.get_value() == Decimal256(2345243)); + v = subcolumn.get_last_field().get(); + EXPECT_TRUE(v == Decimal256(2345243)); } { diff --git a/be/test/vec/data_types/serde/data_type_to_string_test.cpp b/be/test/vec/data_types/serde/data_type_to_string_test.cpp index 19c774fb712496..e46a211d4b2626 100644 --- a/be/test/vec/data_types/serde/data_type_to_string_test.cpp +++ b/be/test/vec/data_types/serde/data_type_to_string_test.cpp @@ -59,14 +59,13 @@ TEST(ToStringMethodTest, DataTypeToStringTest) { t.push_back(Field::create_field(String("amory cute"))); t.push_back(Field::create_field(Int64(0))); - cases.field_values = { - Field::create_field(Int64(12)), - Field::create_field(String(" hello amory , cute amory ")), - Field::create_field(DecimalField(-12345678, 0)), - Field::create_field(a1), - Field::create_field(a2), - Field::create_field(t), - Field::create_field(m)}; + cases.field_values = {Field::create_field(Int64(12)), + Field::create_field(String(" hello amory , cute amory ")), + Field::create_field(Decimal32(-12345678)), + Field::create_field(a1), + Field::create_field(a2), + Field::create_field(t), + Field::create_field(m)}; cases.expect_values = {"12", " hello amory , cute amory ", "-12345678", diff --git a/be/test/vec/exec/format/parquet/parquet_expr_test.cpp b/be/test/vec/exec/format/parquet/parquet_expr_test.cpp index 40f3891df4667d..f7182b93a87475 100644 --- a/be/test/vec/exec/format/parquet/parquet_expr_test.cpp +++ b/be/test/vec/exec/format/parquet/parquet_expr_test.cpp @@ -665,14 +665,11 @@ TEST_F(ParquetExprTest, test_min_max_p) { Field max_field; f(3, 0, &min_field, &max_field); - auto col = ColumnHelper::create_column_with_name({1.1f, 3.1f}); + auto col = ColumnHelper::create_column_with_name({1.1f, 3.1f}); std::cout << "min_field = " << min_field.get() << "\n"; std::cout << "max_field = " << max_field.get() << "\n"; - std::cout << "min_field = " << min_field.get() << "\n"; - std::cout << "max_field = " << max_field.get() << "\n"; - Field ans_min = col.column->operator[](0); Field ans_max = col.column->operator[](1); ASSERT_EQ(ans_min, min_field); @@ -684,7 +681,7 @@ TEST_F(ParquetExprTest, test_min_max_p) { Field max_field; f(6, 0, &min_field, &max_field); - auto col = ColumnHelper::create_column_with_name({0, 1}); + auto col = ColumnHelper::create_column_with_name({0, 1}); Field ans_min = col.column->operator[](0); Field ans_max = col.column->operator[](1); @@ -751,8 +748,8 @@ TEST_F(ParquetExprTest, test_min_max_p) { Field max_field; f(9, 0, &min_field, &max_field); - Field ans_min = Field::create_field(DecimalField(10000, 2)); - Field ans_max = Field::create_field(DecimalField(10200, 2)); + Field ans_min = Field::create_field(Decimal64(10000)); + Field ans_max = Field::create_field(Decimal64(10200)); ASSERT_EQ(ans_min, min_field); ASSERT_EQ(ans_max, max_field); } @@ -761,8 +758,8 @@ TEST_F(ParquetExprTest, test_min_max_p) { Field max_field; f(10, 1, &min_field, &max_field); - Field ans_min = Field::create_field(DecimalField(1030000, 6)); - Field ans_max = Field::create_field(DecimalField(1050000, 6)); + Field ans_min = Field::create_field(Decimal64(1030000)); + Field ans_max = Field::create_field(Decimal64(1050000)); ASSERT_EQ(ans_min, min_field); ASSERT_EQ(ans_max, max_field); } diff --git a/be/test/vec/exec/vgeneric_iterators_test.cpp b/be/test/vec/exec/vgeneric_iterators_test.cpp index 2d992601604859..62c2208c014600 100644 --- a/be/test/vec/exec/vgeneric_iterators_test.cpp +++ b/be/test/vec/exec/vgeneric_iterators_test.cpp @@ -138,9 +138,9 @@ TEST(VGenericIteratorsTest, Union) { base_value -= 100; } - EXPECT_EQ(base_value, (*c0)[i].get()); + EXPECT_EQ(base_value, (*c0)[i].get()); EXPECT_EQ(base_value + 1, (*c1)[i].get()); - EXPECT_EQ(base_value + 2, (*c2)[i].get()); + EXPECT_EQ(base_value + 2, (*c2)[i].get()); row_count++; } } @@ -187,9 +187,9 @@ TEST(VGenericIteratorsTest, MergeAgg) { base_value = row_count - 300; } - EXPECT_EQ(base_value, (*c0)[i].get()); + EXPECT_EQ(base_value, (*c0)[i].get()); EXPECT_EQ(base_value + 1, (*c1)[i].get()); - EXPECT_EQ(base_value + 2, (*c2)[i].get()); + EXPECT_EQ(base_value + 2, (*c2)[i].get()); row_count++; } } @@ -228,9 +228,9 @@ TEST(VGenericIteratorsTest, MergeUnique) { for (size_t i = 0; i < block.rows(); ++i) { size_t base_value = row_count; - EXPECT_EQ(base_value, (*c0)[i].get()); + EXPECT_EQ(base_value, (*c0)[i].get()); EXPECT_EQ(base_value + 1, (*c1)[i].get()); - EXPECT_EQ(base_value + 2, (*c2)[i].get()); + EXPECT_EQ(base_value + 2, (*c2)[i].get()); row_count++; } } diff --git a/be/test/vec/exprs/vexpr_test.cpp b/be/test/vec/exprs/vexpr_test.cpp index e0604fcf5f2bc3..c98cec0a418ce8 100644 --- a/be/test/vec/exprs/vexpr_test.cpp +++ b/be/test/vec/exprs/vexpr_test.cpp @@ -223,7 +223,7 @@ struct literal_traits { template <> struct literal_traits { - const static TPrimitiveType::type ttype = TPrimitiveType::FLOAT; + const static TPrimitiveType::type ttype = TPrimitiveType::DOUBLE; const static TExprNodeType::type tnode_type = TExprNodeType::FLOAT_LITERAL; using CXXType = float; }; @@ -497,7 +497,7 @@ TEST(TEST_VEXPR, LITERALTEST) { int ret = -1; static_cast(literal.execute(nullptr, &block, &ret)); auto ctn = block.safe_get_by_position(ret); - auto v = (*ctn.column)[0].get(); + auto v = (*ctn.column)[0].get(); EXPECT_FLOAT_EQ(v, 1024.0f); EXPECT_EQ("1024", literal.value()); @@ -513,8 +513,8 @@ TEST(TEST_VEXPR, LITERALTEST) { static_cast(literal.execute(nullptr, &block, &ret)); auto ctn = block.safe_get_by_position(ret); auto v = (*ctn.column)[0].get(); - EXPECT_FLOAT_EQ(v, 1024.0); - EXPECT_EQ("1024", literal.value()); + EXPECT_FLOAT_EQ(v, 1024.0) << ctn.column->get_name(); + EXPECT_EQ("1024", literal.value()) << ctn.column->get_name(); auto node = std::make_shared( create_texpr_node_from((*ctn.column)[0], TYPE_DOUBLE, 0, 0), true); @@ -699,8 +699,8 @@ TEST(TEST_VEXPR, LITERALTEST) { int ret = -1; static_cast(literal.execute(nullptr, &block, &ret)); auto ctn = block.safe_get_by_position(ret); - auto v = (*ctn.column)[0].get>(); - EXPECT_FLOAT_EQ(((double)v.get_value()) / (std::pow(10, v.get_scale())), 1234.56); + auto v = (*ctn.column)[0].get(); + EXPECT_FLOAT_EQ(((double)v) / (std::pow(10, 9)), 1234.56); EXPECT_EQ("1234.560000000", literal.value()); auto node = std::make_shared( diff --git a/be/test/vec/jsonb/convert_field_to_type_test.cpp b/be/test/vec/jsonb/convert_field_to_type_test.cpp index 09d443d0b99b4c..fcc1fd9b26eecd 100644 --- a/be/test/vec/jsonb/convert_field_to_type_test.cpp +++ b/be/test/vec/jsonb/convert_field_to_type_test.cpp @@ -43,10 +43,9 @@ class ConvertFieldToTypeTest : public ::testing::Test { TEST_F(ConvertFieldToTypeTest, FieldVisitorToJsonb_Null) { JsonbWriter writer; - // Test null field using Field::dispatch pattern + // Test null field using dispatch pattern Field null_field; - Field::dispatch([&writer](const auto& value) { FieldVisitorToJsonb()(value, &writer); }, - null_field); + dispatch([&writer](const auto& value) { FieldVisitorToJsonb()(value, &writer); }, null_field); auto* output = writer.getOutput(); ASSERT_NE(output, nullptr); @@ -66,11 +65,10 @@ TEST_F(ConvertFieldToTypeTest, FieldVisitorToJsonb_Null) { TEST_F(ConvertFieldToTypeTest, FieldVisitorToJsonb_Int64) { JsonbWriter writer; - // Test Int64 field using Field::dispatch pattern + // Test Int64 field using dispatch pattern Int64 test_value = 12345; Field int_field = Field::create_field(test_value); - Field::dispatch([&writer](const auto& value) { FieldVisitorToJsonb()(value, &writer); }, - int_field); + dispatch([&writer](const auto& value) { FieldVisitorToJsonb()(value, &writer); }, int_field); auto* output = writer.getOutput(); ASSERT_NE(output, nullptr); @@ -91,11 +89,10 @@ TEST_F(ConvertFieldToTypeTest, FieldVisitorToJsonb_Int64) { TEST_F(ConvertFieldToTypeTest, FieldVisitorToJsonb_UInt64) { JsonbWriter writer; - // Test UInt64 field using Field::dispatch pattern + // Test UInt64 field using dispatch pattern UInt64 test_value = 12345; Field uint_field = Field::create_field(test_value); - Field::dispatch([&writer](const auto& value) { FieldVisitorToJsonb()(value, &writer); }, - uint_field); + dispatch([&writer](const auto& value) { FieldVisitorToJsonb()(value, &writer); }, uint_field); auto* output = writer.getOutput(); ASSERT_NE(output, nullptr); @@ -116,11 +113,10 @@ TEST_F(ConvertFieldToTypeTest, FieldVisitorToJsonb_UInt64) { TEST_F(ConvertFieldToTypeTest, FieldVisitorToJsonb_Float64) { JsonbWriter writer; - // Test Float64 field using Field::dispatch pattern + // Test Float64 field using dispatch pattern Float64 test_value = 123.456; Field double_field = Field::create_field(test_value); - Field::dispatch([&writer](const auto& value) { FieldVisitorToJsonb()(value, &writer); }, - double_field); + dispatch([&writer](const auto& value) { FieldVisitorToJsonb()(value, &writer); }, double_field); auto* output = writer.getOutput(); ASSERT_NE(output, nullptr); @@ -141,11 +137,10 @@ TEST_F(ConvertFieldToTypeTest, FieldVisitorToJsonb_Float64) { TEST_F(ConvertFieldToTypeTest, FieldVisitorToJsonb_String) { JsonbWriter writer; - // Test String field using Field::dispatch pattern + // Test String field using dispatch pattern String test_value = "hello world"; Field string_field = Field::create_field(test_value); - Field::dispatch([&writer](const auto& value) { FieldVisitorToJsonb()(value, &writer); }, - string_field); + dispatch([&writer](const auto& value) { FieldVisitorToJsonb()(value, &writer); }, string_field); auto* output = writer.getOutput(); ASSERT_NE(output, nullptr); @@ -173,9 +168,9 @@ TEST_F(ConvertFieldToTypeTest, FieldVisitorToJsonb_JsonbField) { Field jsonb_field_obj = Field::create_field(JsonbField(jsonb_value.value(), jsonb_value.size())); - // Test JsonbField using Field::dispatch pattern - Field::dispatch([&writer](const auto& value) { FieldVisitorToJsonb()(value, &writer); }, - jsonb_field_obj); + // Test JsonbField using dispatch pattern + dispatch([&writer](const auto& value) { FieldVisitorToJsonb()(value, &writer); }, + jsonb_field_obj); auto* output = writer.getOutput(); ASSERT_NE(output, nullptr); @@ -203,9 +198,8 @@ TEST_F(ConvertFieldToTypeTest, FieldVisitorToJsonb_Array) { Field array_obj = Field::create_field(array_field); - // Test Array using Field::dispatch pattern - Field::dispatch([&writer](const auto& value) { FieldVisitorToJsonb()(value, &writer); }, - array_obj); + // Test Array using dispatch pattern + dispatch([&writer](const auto& value) { FieldVisitorToJsonb()(value, &writer); }, array_obj); auto* output = writer.getOutput(); ASSERT_NE(output, nullptr); @@ -237,9 +231,9 @@ TEST_F(ConvertFieldToTypeTest, FieldVisitorToJsonb_NestedArray) { Field nested_array_obj = Field::create_field(outer_array); - // Test nested Array using Field::dispatch pattern - Field::dispatch([&writer](const auto& value) { FieldVisitorToJsonb()(value, &writer); }, - nested_array_obj); + // Test nested Array using dispatch pattern + dispatch([&writer](const auto& value) { FieldVisitorToJsonb()(value, &writer); }, + nested_array_obj); auto* output = writer.getOutput(); ASSERT_NE(output, nullptr); @@ -260,11 +254,11 @@ TEST_F(ConvertFieldToTypeTest, FieldVisitorToJsonb_NestedArray) { TEST_F(ConvertFieldToTypeTest, FieldVisitorToJsonb_LargeInt) { JsonbWriter writer; - // Test Int128 field using Field::dispatch pattern + // Test Int128 field using dispatch pattern Int128 test_value = 1234567890123456789; Field largeint_field = Field::create_field(test_value); - Field::dispatch([&writer](const auto& value) { FieldVisitorToJsonb()(value, &writer); }, - largeint_field); + dispatch([&writer](const auto& value) { FieldVisitorToJsonb()(value, &writer); }, + largeint_field); auto* output = writer.getOutput(); ASSERT_NE(output, nullptr); @@ -285,11 +279,11 @@ TEST_F(ConvertFieldToTypeTest, FieldVisitorToJsonb_LargeInt) { TEST_F(ConvertFieldToTypeTest, FieldVisitorToJsonb_UInt128) { JsonbWriter writer; - // Test UInt128 field using Field::dispatch pattern + // Test UInt128 field using dispatch pattern UInt128 test_value = 1234567890123456789; Field uint128_field = Field::create_field(test_value); - Field::dispatch([&writer](const auto& value) { FieldVisitorToJsonb()(value, &writer); }, - uint128_field); + dispatch([&writer](const auto& value) { FieldVisitorToJsonb()(value, &writer); }, + uint128_field); auto* output = writer.getOutput(); ASSERT_NE(output, nullptr); diff --git a/be/test/vec/jsonb/serialize_test.cpp b/be/test/vec/jsonb/serialize_test.cpp index b5d5c5d41f9f0e..c632b3f79c5963 100644 --- a/be/test/vec/jsonb/serialize_test.cpp +++ b/be/test/vec/jsonb/serialize_test.cpp @@ -478,8 +478,7 @@ TEST(BlockSerializeTest, JsonbBlock) { auto column_nullable_vector = vectorized::make_nullable(std::move(column_vector_int32)); auto mutable_nullable_vector = std::move(*column_nullable_vector).mutate(); for (int i = 0; i < 1024; i++) { - mutable_nullable_vector->insert( - Field::create_field(vectorized::cast_to_nearest_field_type(i))); + mutable_nullable_vector->insert(Field::create_field(i)); } auto data_type = vectorized::make_nullable(std::make_shared()); vectorized::ColumnWithTypeAndName type_and_name(mutable_nullable_vector->get_ptr(), From aa58cc219858d4cb4fbe27be4a48b6d97f014be2 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Thu, 8 Jan 2026 17:26:37 +0800 Subject: [PATCH 2/5] [refactor](type) Remove nearest type from sum/avg (#59669) --- be/src/runtime/primitive_type.h | 77 ------------------- .../aggregate_function_avg.cpp | 18 ++++- .../aggregate_function_sum.h | 15 +++- 3 files changed, 28 insertions(+), 82 deletions(-) diff --git a/be/src/runtime/primitive_type.h b/be/src/runtime/primitive_type.h index c33f446e2cfa0e..c503721cfe0e30 100644 --- a/be/src/runtime/primitive_type.h +++ b/be/src/runtime/primitive_type.h @@ -270,7 +270,6 @@ struct PrimitiveTypeTraits; * ColumnItemType: Data item type in column * DataType: DataType which is mapping to this PrimitiveType * ColumnType: ColumnType which is mapping to this PrimitiveType - * NearestPrimitiveType: Nearest primitive type */ template <> struct PrimitiveTypeTraits { @@ -280,8 +279,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = vectorized::UInt8; using DataType = vectorized::DataTypeBool; using ColumnType = vectorized::ColumnUInt8; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_BIGINT; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_BIGINT; }; template <> struct PrimitiveTypeTraits { @@ -291,8 +288,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeInt8; using ColumnType = vectorized::ColumnInt8; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_BIGINT; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_BIGINT; }; template <> struct PrimitiveTypeTraits { @@ -302,8 +297,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeInt16; using ColumnType = vectorized::ColumnInt16; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_BIGINT; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_BIGINT; }; template <> struct PrimitiveTypeTraits { @@ -313,8 +306,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeInt32; using ColumnType = vectorized::ColumnInt32; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_BIGINT; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_BIGINT; }; template <> struct PrimitiveTypeTraits { @@ -324,8 +315,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeInt64; using ColumnType = vectorized::ColumnInt64; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_BIGINT; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_LARGEINT; }; template <> struct PrimitiveTypeTraits { @@ -335,8 +324,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeInt128; using ColumnType = vectorized::ColumnInt128; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_LARGEINT; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_LARGEINT; }; template <> struct PrimitiveTypeTraits { @@ -346,8 +333,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeNothing; using ColumnType = vectorized::IColumnDummy; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_NULL; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_NULL; }; template <> struct PrimitiveTypeTraits { @@ -357,8 +342,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeFloat32; using ColumnType = vectorized::ColumnFloat32; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_DOUBLE; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DOUBLE; }; template <> struct PrimitiveTypeTraits { @@ -368,8 +351,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeFloat64; using ColumnType = vectorized::ColumnFloat64; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_DOUBLE; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DOUBLE; }; template <> struct PrimitiveTypeTraits { @@ -379,8 +360,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeTimeV2; using ColumnType = vectorized::ColumnTimeV2; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_DOUBLE; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DOUBLE; }; template <> struct PrimitiveTypeTraits { @@ -390,8 +369,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeTimeV2; using ColumnType = vectorized::ColumnTime; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_DOUBLE; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DOUBLE; }; template <> struct PrimitiveTypeTraits { @@ -402,8 +379,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = vectorized::Int64; using DataType = vectorized::DataTypeDate; using ColumnType = vectorized::ColumnDate; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_DATE; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DATE; }; template <> struct PrimitiveTypeTraits { @@ -413,8 +388,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = vectorized::Int64; using DataType = vectorized::DataTypeDateTime; using ColumnType = vectorized::ColumnDateTime; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_DATETIME; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DATETIME; }; template <> struct PrimitiveTypeTraits { @@ -424,8 +397,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = vectorized::UInt64; using DataType = vectorized::DataTypeDateTimeV2; using ColumnType = vectorized::ColumnDateTimeV2; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_DATETIMEV2; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DATETIMEV2; }; template <> struct PrimitiveTypeTraits { @@ -435,8 +406,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = vectorized::UInt32; using DataType = vectorized::DataTypeDateV2; using ColumnType = vectorized::ColumnDateV2; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_DATEV2; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DATEV2; }; template <> @@ -447,9 +416,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = vectorized::UInt64; using DataType = vectorized::DataTypeTimeStampTz; using ColumnType = vectorized::ColumnTimeStampTz; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_TIMESTAMPTZ; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_TIMESTAMPTZ; - static constexpr PrimitiveType AvgNearestPrimitiveType256 = TYPE_TIMESTAMPTZ; }; template <> @@ -461,8 +427,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = vectorized::Decimal128V2; using DataType = vectorized::DataTypeDecimalV2; using ColumnType = vectorized::ColumnDecimal128V2; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_DECIMALV2; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DECIMALV2; }; template <> struct PrimitiveTypeTraits { @@ -472,8 +436,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeDecimal32; using ColumnType = vectorized::ColumnDecimal32; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_DECIMAL32; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DECIMAL128I; }; template <> struct PrimitiveTypeTraits { @@ -483,8 +445,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeDecimal64; using ColumnType = vectorized::ColumnDecimal64; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_DECIMAL64; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DECIMAL128I; }; template <> struct PrimitiveTypeTraits { @@ -494,8 +454,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeDecimal128; using ColumnType = vectorized::ColumnDecimal128V3; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_DECIMAL128I; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DECIMAL128I; }; template <> struct PrimitiveTypeTraits { @@ -505,8 +463,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeDecimal256; using ColumnType = vectorized::ColumnDecimal256; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_DECIMAL256; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DECIMAL256; }; template <> struct PrimitiveTypeTraits { @@ -516,8 +472,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeIPv4; using ColumnType = vectorized::ColumnIPv4; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_IPV4; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_IPV4; }; template <> struct PrimitiveTypeTraits { @@ -527,8 +481,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeIPv6; using ColumnType = vectorized::ColumnIPv6; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_IPV6; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_IPV6; }; template <> struct PrimitiveTypeTraits { @@ -538,8 +490,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeString; using ColumnType = vectorized::ColumnString; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_CHAR; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_CHAR; }; template <> struct PrimitiveTypeTraits { @@ -549,8 +499,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeString; using ColumnType = vectorized::ColumnString; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_VARCHAR; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_VARCHAR; }; template <> struct PrimitiveTypeTraits { @@ -560,8 +508,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeString; using ColumnType = vectorized::ColumnString; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_STRING; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_STRING; }; template <> struct PrimitiveTypeTraits { @@ -571,9 +517,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeVarbinary; using ColumnType = vectorized::ColumnVarbinary; - // StringView is non-owning, but StringViewField wraps it with String for ownership - static constexpr PrimitiveType NearestPrimitiveType = TYPE_VARBINARY; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_VARBINARY; }; template <> struct PrimitiveTypeTraits { @@ -583,8 +526,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeHLL; using ColumnType = vectorized::ColumnHLL; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_HLL; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_HLL; }; template <> struct PrimitiveTypeTraits { @@ -594,8 +535,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeJsonb; using ColumnType = vectorized::ColumnString; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_JSONB; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_JSONB; }; template <> struct PrimitiveTypeTraits { @@ -605,8 +544,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeArray; using ColumnType = vectorized::ColumnArray; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_ARRAY; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_ARRAY; }; template <> struct PrimitiveTypeTraits { @@ -616,8 +553,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeMap; using ColumnType = vectorized::ColumnMap; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_MAP; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_MAP; }; template <> struct PrimitiveTypeTraits { @@ -627,8 +562,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeStruct; using ColumnType = vectorized::ColumnStruct; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_STRUCT; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_STRUCT; }; template <> struct PrimitiveTypeTraits { @@ -638,8 +571,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeVariant; using ColumnType = vectorized::ColumnVariant; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_VARIANT; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_VARIANT; }; template <> struct PrimitiveTypeTraits { @@ -649,8 +580,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeBitMap; using ColumnType = vectorized::ColumnBitmap; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_BITMAP; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_BITMAP; }; template <> struct PrimitiveTypeTraits { @@ -660,8 +589,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeQuantileState; using ColumnType = vectorized::ColumnQuantileState; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_QUANTILE_STATE; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_QUANTILE_STATE; }; template <> struct PrimitiveTypeTraits { @@ -671,8 +598,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeNothing; using ColumnType = vectorized::ColumnOffset32; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_UINT32; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_UINT32; }; template <> struct PrimitiveTypeTraits { @@ -682,8 +607,6 @@ struct PrimitiveTypeTraits { using ColumnItemType = CppType; using DataType = vectorized::DataTypeNothing; using ColumnType = vectorized::ColumnOffset64; - static constexpr PrimitiveType NearestPrimitiveType = TYPE_UINT64; - static constexpr PrimitiveType AvgNearestPrimitiveType = TYPE_DOUBLE; }; template diff --git a/be/src/vec/aggregate_functions/aggregate_function_avg.cpp b/be/src/vec/aggregate_functions/aggregate_function_avg.cpp index bf73f3fc2e996f..d48128a7133bd7 100644 --- a/be/src/vec/aggregate_functions/aggregate_function_avg.cpp +++ b/be/src/vec/aggregate_functions/aggregate_function_avg.cpp @@ -28,13 +28,25 @@ namespace doris::vectorized { #include "common/compile_check_begin.h" +constexpr PrimitiveType result_type(PrimitiveType T) { + if (T == TYPE_LARGEINT) { + return TYPE_LARGEINT; + } else if (is_int_or_bool(T)) { + return TYPE_BIGINT; + } else if (is_float_or_double(T) || is_time_type(T)) { + return TYPE_DOUBLE; + } else if (is_decimalv3(T) && T != TYPE_DECIMAL256) { + return TYPE_DECIMAL128I; + } else { + return T; + } +} + // TODO: use result type got from FE plan template struct Avg { static constexpr PrimitiveType ResultPType = T == TYPE_DECIMALV2 ? T : TYPE_DOUBLE; - using Function = AggregateFunctionAvg< - T, ResultPType, - AggregateFunctionAvgData::AvgNearestPrimitiveType>>; + using Function = AggregateFunctionAvg>; }; template diff --git a/be/src/vec/aggregate_functions/aggregate_function_sum.h b/be/src/vec/aggregate_functions/aggregate_function_sum.h index e7967db7d9498e..d1be3edcfa3f5f 100644 --- a/be/src/vec/aggregate_functions/aggregate_function_sum.h +++ b/be/src/vec/aggregate_functions/aggregate_function_sum.h @@ -285,13 +285,24 @@ class AggregateFunctionSum final UInt32 scale; }; +constexpr PrimitiveType result_type(PrimitiveType T) { + if (T == TYPE_LARGEINT) { + return TYPE_LARGEINT; + } else if (is_int_or_bool(T)) { + return TYPE_BIGINT; + } else if (is_float_or_double(T) || is_time_type(T)) { + return TYPE_DOUBLE; + } else { + return T; + } +} + // TODO: use result type from FE plan template struct SumSimple { static_assert(!is_decimalv3(T)); /// @note It uses slow Decimal128 (cause we need such a variant). sumWithOverflow is faster for Decimal32/64 - static constexpr PrimitiveType ResultType = - T == TYPE_DECIMALV2 ? TYPE_DECIMALV2 : PrimitiveTypeTraits::NearestPrimitiveType; + static constexpr PrimitiveType ResultType = result_type(T); using AggregateDataType = AggregateFunctionSumData; using Function = AggregateFunctionSum; }; From b70500b8ab9ec6b7aa6e6ab5d023fc5d387a06de Mon Sep 17 00:00:00 2001 From: Gabriel Date: Wed, 14 Jan 2026 14:13:06 +0800 Subject: [PATCH 3/5] [refactor](type) type checking in field (#59733) 1. Add type checking in `Field::get()` 2. Use DecimalV2Value as ColumnItemType of TYPE_DECIMALV2 --- be/src/olap/comparison_predicate.h | 8 +- be/src/olap/in_list_predicate.h | 8 +- .../olap/rowset/segment_v2/column_reader.cpp | 2 +- .../rowset/segment_v2/inverted_index_reader.h | 2 +- be/src/runtime/decimalv2_value.h | 3 + be/src/runtime/primitive_type.h | 4 +- be/src/runtime/runtime_predicate.cpp | 45 +- .../aggregate_function_avg.h | 24 +- .../aggregate_function_map.h | 18 +- .../aggregate_function_map_v2.h | 14 +- be/src/vec/columns/column_array.cpp | 4 +- be/src/vec/columns/column_complex.h | 2 +- be/src/vec/columns/column_const.h | 2 +- be/src/vec/columns/column_decimal.cpp | 16 +- be/src/vec/columns/column_decimal.h | 5 +- .../vec/columns/column_fixed_length_object.h | 4 +- be/src/vec/columns/column_map.cpp | 6 +- be/src/vec/columns/column_string.cpp | 6 +- be/src/vec/columns/column_struct.cpp | 4 +- be/src/vec/columns/column_varbinary.h | 3 +- be/src/vec/columns/column_variant.cpp | 6 +- be/src/vec/columns/column_vector.cpp | 53 +- be/src/vec/common/field_visitors.h | 57 +- be/src/vec/core/field.cpp | 541 ++++++++---------- be/src/vec/core/field.h | 121 +--- be/src/vec/core/types.h | 6 + .../vec/data_types/convert_field_to_type.cpp | 96 ++-- be/src/vec/data_types/data_type_decimal.cpp | 10 +- .../serde/data_type_array_serde.cpp | 2 +- .../serde/data_type_decimal_serde.cpp | 27 +- .../format/parquet/parquet_column_convert.h | 4 +- .../exec/format/parquet/parquet_predicate.h | 12 +- be/src/vec/exec/jni_connector.h | 14 + be/src/vec/exprs/varray_literal.cpp | 2 +- be/src/vec/exprs/vexpr.cpp | 58 +- be/src/vec/exprs/vmap_literal.cpp | 8 +- be/src/vec/exprs/vstruct_literal.cpp | 2 +- be/src/vec/functions/ai/ai_functions.cpp | 6 +- .../functions/array/function_arrays_overlap.h | 39 +- be/src/vec/functions/binary_arithmetic.h | 93 ++- .../cast/cast_to_basic_number_common.h | 43 +- be/src/vec/functions/cast/cast_to_boolean.h | 4 +- be/src/vec/functions/cast/cast_to_decimal.h | 256 +++++++-- be/src/vec/functions/cast/cast_to_int.h | 2 +- be/src/vec/functions/cast/cast_to_string.h | 7 + be/src/vec/functions/divide.cpp | 103 +++- .../function_datetime_floor_ceil.cpp | 20 +- .../vec/functions/function_dict_get_many.cpp | 5 +- be/src/vec/functions/function_string.h | 6 +- .../vec/functions/function_variant_type.cpp | 4 +- .../functions_multi_string_position.cpp | 3 +- .../functions_multi_string_search.cpp | 3 +- be/src/vec/functions/math.cpp | 81 +-- be/src/vec/functions/modulo.cpp | 157 ++++- be/src/vec/functions/multiply.cpp | 247 +++++--- be/src/vec/functions/random.cpp | 3 +- be/src/vec/functions/round.h | 112 +++- be/src/vec/functions/uniform.cpp | 4 +- be/src/vec/io/io_helper.h | 7 +- be/src/vec/json/json_parser.cpp | 4 +- be/src/vec/sink/vtablet_block_convertor.cpp | 2 +- .../writer/iceberg/viceberg_table_writer.cpp | 2 +- be/src/vec/sink/writer/vhive_table_writer.cpp | 2 +- ...uster_snapshot_properties_scanner_test.cpp | 2 +- .../schema_cluster_snapshots_scanner_test.cpp | 2 +- be/test/testutil/variant_util.h | 10 +- .../agg_group_array_intersect_test.cpp | 11 +- .../aggregate_functions/agg_min_max_test.cpp | 4 +- .../aggregate_functions/agg_replace_test.cpp | 6 + be/test/vec/columns/column_array_test.cpp | 24 +- .../vec/columns/column_dictionary_test.cpp | 2 +- be/test/vec/columns/column_string_test.cpp | 5 +- be/test/vec/columns/column_varbinary_test.cpp | 6 +- be/test/vec/columns/column_variant_test.cpp | 149 ++--- be/test/vec/columns/common_column_test.h | 18 +- be/test/vec/core/column_array_test.cpp | 8 +- be/test/vec/core/column_complex_test.cpp | 4 +- be/test/vec/core/column_map_test.cpp | 56 +- be/test/vec/core/column_struct_test.cpp | 6 +- be/test/vec/core/column_test.cpp | 64 +-- be/test/vec/core/field_test.cpp | 26 +- .../vec/data_types/data_type_array_test.cpp | 8 +- .../data_types/data_type_datetime_v1_test.cpp | 48 +- .../data_types/data_type_datetime_v2_test.cpp | 103 ++-- .../vec/data_types/data_type_decimal_test.cpp | 5 +- .../data_types/data_type_varbinary_test.cpp | 10 +- .../data_types/serde/data_type_serde_test.cpp | 54 +- .../exec/format/parquet/parquet_expr_test.cpp | 4 +- be/test/vec/exec/vgeneric_iterators_test.cpp | 26 +- be/test/vec/exprs/vexpr_test.cpp | 30 +- be/test/vec/function/cast/cast_test.h | 3 + .../function/cast/cast_to_boolean_test.cpp | 22 +- be/test/vec/function/cast/cast_to_decimal.cpp | 10 +- be/test/vec/function/cast/cast_to_decimal.h | 5 +- .../cast_to_decimal128_from_decimal128.cpp | 2 +- ...to_decimal128_from_decimal128_overflow.cpp | 2 +- .../cast_to_decimal256_from_decimal128.cpp | 2 +- ...to_decimal256_from_decimal128_overflow.cpp | 2 +- .../cast_to_decimal32_from_decimal128.cpp | 2 +- ..._to_decimal32_from_decimal128_overflow.cpp | 2 +- .../cast_to_decimal64_from_decimal128.cpp | 2 +- ..._to_decimal64_from_decimal128_overflow.cpp | 2 +- .../function/cast/cast_to_float_double.cpp | 61 +- be/test/vec/function/cast/cast_to_integer.cpp | 26 +- .../cast/function_variant_cast_test.cpp | 2 +- .../function/function_array_element_test.cpp | 11 +- .../function/function_array_index_test.cpp | 26 +- .../function/function_arrays_overlap_test.cpp | 31 +- be/test/vec/function/function_math_test.cpp | 11 +- .../function/function_money_format_test.cpp | 2 +- be/test/vec/function/function_test_util.cpp | 2 +- be/test/vec/function/function_test_util.h | 8 + be/test/vec/function/function_time_test.cpp | 4 +- be/test/vec/function/table_function_test.cpp | 14 +- .../vec/jsonb/convert_field_to_type_test.cpp | 14 +- .../arrow_column_to_doris_column_test.cpp | 6 +- 116 files changed, 1960 insertions(+), 1419 deletions(-) diff --git a/be/src/olap/comparison_predicate.h b/be/src/olap/comparison_predicate.h index 41f4fe5933cdf3..4d7618c6678f92 100644 --- a/be/src/olap/comparison_predicate.h +++ b/be/src/olap/comparison_predicate.h @@ -171,13 +171,13 @@ class ComparisonPredicateBase final : public ColumnPredicate { T min_value; T max_value; if constexpr (is_string_type(Type)) { - auto& tmp_min = min_field.template get(); - auto& tmp_max = max_field.template get(); + auto& tmp_min = min_field.template get(); + auto& tmp_max = max_field.template get(); min_value = StringRef(tmp_min.data(), tmp_min.size()); max_value = StringRef(tmp_max.data(), tmp_max.size()); } else { - min_value = min_field.template get(); - max_value = max_field.template get(); + min_value = min_field.template get(); + max_value = max_field.template get(); } if constexpr (PT == PredicateType::EQ) { diff --git a/be/src/olap/in_list_predicate.h b/be/src/olap/in_list_predicate.h index 00ae4e7a3556bc..2364a7f7a15330 100644 --- a/be/src/olap/in_list_predicate.h +++ b/be/src/olap/in_list_predicate.h @@ -258,13 +258,13 @@ class InListPredicateBase final : public ColumnPredicate { T min_value; T max_value; if constexpr (is_string_type(Type)) { - auto& tmp_min = min_field.template get(); - auto& tmp_max = max_field.template get(); + auto& tmp_min = min_field.template get(); + auto& tmp_max = max_field.template get(); min_value = StringRef(tmp_min.data(), tmp_min.size()); max_value = StringRef(tmp_max.data(), tmp_max.size()); } else { - min_value = min_field.template get(); - max_value = max_field.template get(); + min_value = min_field.template get(); + max_value = max_field.template get(); } if constexpr (PT == PredicateType::IN_LIST) { diff --git a/be/src/olap/rowset/segment_v2/column_reader.cpp b/be/src/olap/rowset/segment_v2/column_reader.cpp index 974b852e037380..8ddaca03bbde85 100644 --- a/be/src/olap/rowset/segment_v2/column_reader.cpp +++ b/be/src/olap/rowset/segment_v2/column_reader.cpp @@ -346,7 +346,7 @@ void ColumnReader::check_data_by_zone_map_for_test(const vectorized::MutableColu vectorized::Field field; dst->get(i, field); DCHECK(!field.is_null()); - const auto v = field.get(); + const auto v = field.get(); DCHECK_GE(v, min_v); DCHECK_LE(v, max_v); } diff --git a/be/src/olap/rowset/segment_v2/inverted_index_reader.h b/be/src/olap/rowset/segment_v2/inverted_index_reader.h index 7e3bb740e47b0c..618cc71a94e1dd 100644 --- a/be/src/olap/rowset/segment_v2/inverted_index_reader.h +++ b/be/src/olap/rowset/segment_v2/inverted_index_reader.h @@ -393,7 +393,7 @@ class InvertedIndexQueryParamFactory { CPP_TYPE cpp_val; if constexpr (std::is_same_v) { - auto field_val = value->template get::CppType>(); + auto field_val = value->template get(); cpp_val = static_cast(field_val); } else { cpp_val = static_cast(*value); diff --git a/be/src/runtime/decimalv2_value.h b/be/src/runtime/decimalv2_value.h index 01902b841ab37a..4412db5d021d19 100644 --- a/be/src/runtime/decimalv2_value.h +++ b/be/src/runtime/decimalv2_value.h @@ -28,6 +28,7 @@ #include #include +#include "runtime/define_primitive_type.h" #include "util/hash_util.hpp" #include "vec/core/extended_types.h" @@ -52,6 +53,7 @@ enum DecimalRoundMode { HALF_UP = 1, HALF_EVEN = 2, CEILING = 3, FLOOR = 4, TRUN class DecimalV2Value { public: + static constexpr PrimitiveType PType = TYPE_DECIMALV2; using NativeType = __int128_t; friend DecimalV2Value operator+(const DecimalV2Value& v1, const DecimalV2Value& v2); friend DecimalV2Value operator-(const DecimalV2Value& v1, const DecimalV2Value& v2); @@ -76,6 +78,7 @@ class DecimalV2Value { static const int128_t MAX_DECIMAL_VALUE = static_cast(MAX_INT64) * ONE_BILLION + MAX_FRAC_VALUE; + static constexpr int max_string_length() { return PRECISION + 1; } DecimalV2Value() = default; const int128_t& value() const { return _value; } diff --git a/be/src/runtime/primitive_type.h b/be/src/runtime/primitive_type.h index c503721cfe0e30..1eeea667392d39 100644 --- a/be/src/runtime/primitive_type.h +++ b/be/src/runtime/primitive_type.h @@ -275,7 +275,7 @@ template <> struct PrimitiveTypeTraits { using CppType = bool; using StorageFieldType = CppType; - using CppNativeType = bool; + using CppNativeType = CppType; using ColumnItemType = vectorized::UInt8; using DataType = vectorized::DataTypeBool; using ColumnType = vectorized::ColumnUInt8; @@ -424,7 +424,7 @@ struct PrimitiveTypeTraits { /// Different with compute layer, the DecimalV1 was stored as decimal12_t(12 bytes). using StorageFieldType = decimal12_t; using CppNativeType = vectorized::Int128; - using ColumnItemType = vectorized::Decimal128V2; + using ColumnItemType = CppType; using DataType = vectorized::DataTypeDecimalV2; using ColumnType = vectorized::ColumnDecimal128V2; }; diff --git a/be/src/runtime/runtime_predicate.cpp b/be/src/runtime/runtime_predicate.cpp index 1449a0ef2d7f6a..4332eedca5b21f 100644 --- a/be/src/runtime/runtime_predicate.cpp +++ b/be/src/runtime/runtime_predicate.cpp @@ -77,33 +77,33 @@ Status RuntimePredicate::init_target( StringRef RuntimePredicate::_get_string_ref(const Field& field, const PrimitiveType type) { switch (type) { case PrimitiveType::TYPE_BOOLEAN: { - const auto& v = field.get::CppType>(); + const auto& v = field.get(); return StringRef((char*)&v, sizeof(v)); } case PrimitiveType::TYPE_TINYINT: { - const auto& v = field.get::CppType>(); + const auto& v = field.get(); return StringRef((char*)&v, sizeof(v)); } case PrimitiveType::TYPE_SMALLINT: { - const auto& v = field.get::CppType>(); + const auto& v = field.get(); return StringRef((char*)&v, sizeof(v)); } case PrimitiveType::TYPE_INT: { - const auto& v = field.get::CppType>(); + const auto& v = field.get(); return StringRef((char*)&v, sizeof(v)); } case PrimitiveType::TYPE_BIGINT: { - const auto& v = field.get::CppType>(); + const auto& v = field.get(); return StringRef((char*)&v, sizeof(v)); } case PrimitiveType::TYPE_LARGEINT: { - const auto& v = field.get::CppType>(); + const auto& v = field.get(); return StringRef((char*)&v, sizeof(v)); } case PrimitiveType::TYPE_CHAR: case PrimitiveType::TYPE_VARCHAR: case PrimitiveType::TYPE_STRING: { - const auto& v = field.get(); + const auto& v = field.get(); auto length = v.size(); char* buffer = _predicate_arena.alloc(length); memset(buffer, 0, length); @@ -112,56 +112,61 @@ StringRef RuntimePredicate::_get_string_ref(const Field& field, const PrimitiveT return {buffer, length}; } case PrimitiveType::TYPE_DATEV2: { - const auto& v = field.get::CppType>(); + const auto& v = field.get(); return StringRef((char*)&v, sizeof(v)); } case PrimitiveType::TYPE_DATETIMEV2: { - const auto& v = field.get::CppType>(); + const auto& v = field.get(); return StringRef((char*)&v, sizeof(v)); } + case PrimitiveType::TYPE_TIMESTAMPTZ: { + const auto& v = field.get(); + return StringRef((char*)&v, sizeof(v)); + break; + } case PrimitiveType::TYPE_DATE: { - const auto& v = field.get::CppType>(); + const auto& v = field.get(); return StringRef((char*)&v, sizeof(v)); } case PrimitiveType::TYPE_DATETIME: { - const auto& v = field.get::CppType>(); + const auto& v = field.get(); return StringRef((char*)&v, sizeof(v)); } case PrimitiveType::TYPE_TIMEV2: { - const auto& v = field.get::CppType>(); + const auto& v = field.get(); return StringRef((char*)&v, sizeof(v)); } case PrimitiveType::TYPE_DECIMAL32: { - const auto& v = field.get::CppType>(); + const auto& v = field.get(); return StringRef((char*)&v, sizeof(v)); } case PrimitiveType::TYPE_DECIMAL64: { - const auto& v = field.get::CppType>(); + const auto& v = field.get(); return StringRef((char*)&v, sizeof(v)); } case PrimitiveType::TYPE_DECIMALV2: { - const auto& v = field.get::CppType>(); + const auto& v = field.get(); return StringRef((char*)&v, sizeof(v)); } case PrimitiveType::TYPE_DECIMAL128I: { - const auto& v = field.get::CppType>(); + const auto& v = field.get(); return StringRef((char*)&v, sizeof(v)); } case PrimitiveType::TYPE_DECIMAL256: { - const auto& v = field.get::CppType>(); + const auto& v = field.get(); return StringRef((char*)&v, sizeof(v)); } case PrimitiveType::TYPE_IPV4: { - const auto& v = field.get::CppType>(); + const auto& v = field.get(); return StringRef((char*)&v, sizeof(v)); } case PrimitiveType::TYPE_IPV6: { - const auto& v = field.get::CppType>(); + const auto& v = field.get(); return StringRef((char*)&v, sizeof(v)); } case PrimitiveType::TYPE_VARBINARY: { // For VARBINARY type, use StringViewField to store binary data - const auto& v = field.get::CppType>(); + const auto& v = field.get(); auto length = v.size(); char* buffer = _predicate_arena.alloc(length); memset(buffer, 0, length); diff --git a/be/src/vec/aggregate_functions/aggregate_function_avg.h b/be/src/vec/aggregate_functions/aggregate_function_avg.h index f36a11e04d0759..ea0e63e40700ad 100644 --- a/be/src/vec/aggregate_functions/aggregate_function_avg.h +++ b/be/src/vec/aggregate_functions/aggregate_function_avg.h @@ -122,10 +122,10 @@ class AggregateFunctionAvg final UnaryExpression, NullableAggregateFunction { public: - using ResultType = PrimitiveTypeTraits::ColumnItemType; - using ResultDataType = PrimitiveTypeTraits::DataType; - using ColVecType = PrimitiveTypeTraits::ColumnType; - using ColVecResult = PrimitiveTypeTraits::ColumnType; + using ResultType = typename PrimitiveTypeTraits::ColumnItemType; + using ResultDataType = typename PrimitiveTypeTraits::DataType; + using ColVecType = typename PrimitiveTypeTraits::ColumnType; + using ColVecResult = typename PrimitiveTypeTraits::ColumnType; // The result calculated by PercentileApprox is an approximate value, // so the underlying storage uses float. The following calls will involve // an implicit cast to float. @@ -158,15 +158,19 @@ class AggregateFunctionAvg final const auto& column = assert_cast(*columns[0]); if constexpr (is_add) { - if constexpr (is_decimal(T)) { - this->data(place).sum += (DataType)column.get_data()[row_num].value; + if constexpr (T == TYPE_DECIMALV2) { + this->data(place).sum += column.get_data()[row_num]; + } else if constexpr (is_decimal(T)) { + this->data(place).sum += column.get_data()[row_num].value; } else { this->data(place).sum += (DataType)column.get_data()[row_num]; } ++this->data(place).count; } else { - if constexpr (is_decimal(T)) { - this->data(place).sum -= (DataType)column.get_data()[row_num].value; + if constexpr (T == TYPE_DECIMALV2) { + this->data(place).sum += -column.get_data()[row_num]; + } else if constexpr (is_decimal(T)) { + this->data(place).sum -= column.get_data()[row_num].value; } else { this->data(place).sum -= (DataType)column.get_data()[row_num]; } @@ -186,7 +190,9 @@ class AggregateFunctionAvg final NO_SANITIZE_UNDEFINED void merge(AggregateDataPtr __restrict place, ConstAggregateDataPtr rhs, Arena&) const override { - if constexpr (is_decimal(T)) { + if constexpr (T == TYPE_DECIMALV2) { + this->data(place).sum += this->data(rhs).sum; + } else if constexpr (is_decimal(T)) { this->data(place).sum += this->data(rhs).sum.value; } else { this->data(place).sum += this->data(rhs).sum; diff --git a/be/src/vec/aggregate_functions/aggregate_function_map.h b/be/src/vec/aggregate_functions/aggregate_function_map.h index c7f4457a2a8a16..fc45e55ade908a 100644 --- a/be/src/vec/aggregate_functions/aggregate_function_map.h +++ b/be/src/vec/aggregate_functions/aggregate_function_map.h @@ -67,8 +67,8 @@ struct AggregateFunctionMapAggData { void add(const Field& key_, const Field& value) { DCHECK(!key_.is_null()); - auto key_array = vectorized::get(key_); - auto value_array = vectorized::get(value); + auto key_array = key_.get(); + auto value_array = value.get(); const auto count = key_array.size(); DCHECK_EQ(count, value_array.size()); @@ -76,11 +76,11 @@ struct AggregateFunctionMapAggData { for (size_t i = 0; i != count; ++i) { StringRef key; if constexpr (is_string_type(K)) { - auto& string = key_array[i].get(); + auto& string = key_array[i].get(); key.data = string.data(); key.size = string.size(); } else { - auto& k = key_array[i].get(); + auto& k = key_array[i].get(); key.data = reinterpret_cast(&k); key.size = sizeof(k); } @@ -266,7 +266,7 @@ class AggregateFunctionMapAgg final const auto& col = assert_cast(column); auto* data = &(this->data(places)); for (size_t i = 0; i != num_rows; ++i) { - auto map = doris::vectorized::get(col[i]); + auto map = col[i].get(); data->add(map[0], map[1]); } } @@ -284,7 +284,7 @@ class AggregateFunctionMapAgg final auto& col = assert_cast(column); const size_t num_rows = column.size(); for (size_t i = 0; i != num_rows; ++i) { - auto map = doris::vectorized::get(col[i]); + auto map = col[i].get(); this->data(place).add(map[0], map[1]); } } @@ -296,7 +296,7 @@ class AggregateFunctionMapAgg final << ", begin:" << begin << ", end:" << end << ", column.size():" << column.size(); const auto& col = assert_cast(column); for (size_t i = begin; i <= end; ++i) { - auto map = doris::vectorized::get(col[i]); + auto map = col[i].get(); this->data(place).add(map[0], map[1]); } } @@ -306,7 +306,7 @@ class AggregateFunctionMapAgg final const size_t num_rows) const override { const auto& col = assert_cast(*column); for (size_t i = 0; i != num_rows; ++i) { - auto map = doris::vectorized::get(col[i]); + auto map = col[i].get(); this->data(places[i] + offset).add(map[0], map[1]); } } @@ -317,7 +317,7 @@ class AggregateFunctionMapAgg final const auto& col = assert_cast(*column); for (size_t i = 0; i != num_rows; ++i) { if (places[i]) { - auto map = doris::vectorized::get(col[i]); + auto map = col[i].get(); this->data(places[i] + offset).add(map[0], map[1]); } } diff --git a/be/src/vec/aggregate_functions/aggregate_function_map_v2.h b/be/src/vec/aggregate_functions/aggregate_function_map_v2.h index 70d4811a1331f8..0c806219dc335c 100644 --- a/be/src/vec/aggregate_functions/aggregate_function_map_v2.h +++ b/be/src/vec/aggregate_functions/aggregate_function_map_v2.h @@ -65,8 +65,8 @@ struct AggregateFunctionMapAggDataV2 { void add(const Field& key_, const Field& value) { DCHECK(!key_.is_null()); - auto key_array = vectorized::get(key_); - auto value_array = vectorized::get(value); + auto key_array = key_.get(); + auto value_array = value.get(); const auto count = key_array.size(); DCHECK_EQ(count, value_array.size()); @@ -240,7 +240,7 @@ class AggregateFunctionMapAggV2 final const auto& col = assert_cast(column); auto* data = &(this->data(places)); for (size_t i = 0; i != num_rows; ++i) { - auto map = doris::vectorized::get(col[i]); + auto map = col[i].get(); data->add(map[0], map[1]); } } @@ -258,7 +258,7 @@ class AggregateFunctionMapAggV2 final const auto& col = assert_cast(column); const size_t num_rows = column.size(); for (size_t i = 0; i != num_rows; ++i) { - auto map = doris::vectorized::get(col[i]); + auto map = col[i].get(); this->data(place).add(map[0], map[1]); } } @@ -270,7 +270,7 @@ class AggregateFunctionMapAggV2 final << ", begin:" << begin << ", end:" << end << ", column.size():" << column.size(); const auto& col = assert_cast(column); for (size_t i = begin; i <= end; ++i) { - auto map = doris::vectorized::get(col[i]); + auto map = col[i].get(); this->data(place).add(map[0], map[1]); } } @@ -280,7 +280,7 @@ class AggregateFunctionMapAggV2 final const size_t num_rows) const override { const auto& col = assert_cast(*column); for (size_t i = 0; i != num_rows; ++i) { - auto map = doris::vectorized::get(col[i]); + auto map = col[i].get(); this->data(places[i] + offset).add(map[0], map[1]); } } @@ -291,7 +291,7 @@ class AggregateFunctionMapAggV2 final const auto& col = assert_cast(*column); for (size_t i = 0; i != num_rows; ++i) { if (places[i]) { - auto map = doris::vectorized::get(col[i]); + auto map = col[i].get(); this->data(places[i] + offset).add(map[0], map[1]); } } diff --git a/be/src/vec/columns/column_array.cpp b/be/src/vec/columns/column_array.cpp index aaf925576f27c9..5d288b17b008f2 100644 --- a/be/src/vec/columns/column_array.cpp +++ b/be/src/vec/columns/column_array.cpp @@ -166,7 +166,7 @@ void ColumnArray::get(size_t n, Field& res) const { size, n, max_array_size_as_field); res = Field::create_field(Array(size)); - Array& res_arr = doris::vectorized::get(res); + Array& res_arr = res.get(); for (size_t i = 0; i < size; ++i) get_data().get(offset + i, res_arr[i]); } @@ -476,7 +476,7 @@ void ColumnArray::insert(const Field& x) { get_data().insert(Field::create_field(Null())); get_offsets().push_back(get_offsets().back() + 1); } else { - const auto& array = doris::vectorized::get(x); + const auto& array = x.get(); size_t size = array.size(); for (size_t i = 0; i < size; ++i) { get_data().insert(array[i]); diff --git a/be/src/vec/columns/column_complex.h b/be/src/vec/columns/column_complex.h index c4f47596ae5372..9e86b4ca3ce159 100644 --- a/be/src/vec/columns/column_complex.h +++ b/be/src/vec/columns/column_complex.h @@ -128,7 +128,7 @@ class ColumnComplexType final : public COWHelper> MutableColumnPtr clone_resized(size_t size) const override; void insert(const Field& x) override { - const value_type& s = doris::vectorized::get(x); + const value_type& s = x.get(); data.push_back(s); } diff --git a/be/src/vec/columns/column_const.h b/be/src/vec/columns/column_const.h index cd8b07708720c9..ae292700244e1e 100644 --- a/be/src/vec/columns/column_const.h +++ b/be/src/vec/columns/column_const.h @@ -284,7 +284,7 @@ class ColumnConst final : public COWHelper { template typename PrimitiveTypeTraits::CppType get_value() const { // Here the cast is correct, relevant code is rather tricky. - return get_field().get::CppType>(); + return get_field().get(); } void replace_column_data(const IColumn& rhs, size_t row, size_t self_row = 0) override { diff --git a/be/src/vec/columns/column_decimal.cpp b/be/src/vec/columns/column_decimal.cpp index 99b9e535b83160..f4d37242c41483 100644 --- a/be/src/vec/columns/column_decimal.cpp +++ b/be/src/vec/columns/column_decimal.cpp @@ -497,12 +497,20 @@ void ColumnDecimal::replace_column_null_data(const uint8_t* __restrict null_m } template -ColumnDecimal::CppNativeType ColumnDecimal::get_intergral_part(size_t n) const { - return data[n].value / DataTypeDecimal::get_scale_multiplier(scale); +typename ColumnDecimal::CppNativeType ColumnDecimal::get_intergral_part(size_t n) const { + if constexpr (T == TYPE_DECIMALV2) { + return data[n].value() / DataTypeDecimal::get_scale_multiplier(scale); + } else { + return data[n].value / DataTypeDecimal::get_scale_multiplier(scale); + } } template -ColumnDecimal::CppNativeType ColumnDecimal::get_fractional_part(size_t n) const { - return data[n].value % DataTypeDecimal::get_scale_multiplier(scale); +typename ColumnDecimal::CppNativeType ColumnDecimal::get_fractional_part(size_t n) const { + if constexpr (T == TYPE_DECIMALV2) { + return data[n].value() % DataTypeDecimal::get_scale_multiplier(scale); + } else { + return data[n].value % DataTypeDecimal::get_scale_multiplier(scale); + } } template class ColumnDecimal; diff --git a/be/src/vec/columns/column_decimal.h b/be/src/vec/columns/column_decimal.h index 36b19c4f86862b..d9284b4b8aa569 100644 --- a/be/src/vec/columns/column_decimal.h +++ b/be/src/vec/columns/column_decimal.h @@ -141,9 +141,7 @@ class ColumnDecimal final : public COWHelper> { void insert_data(const char* pos, size_t /*length*/) override; void insert_default() override { data.push_back(value_type()); } - void insert(const Field& x) override { - data.push_back(x.template get::ColumnItemType>()); - } + void insert(const Field& x) override { data.push_back(x.template get()); } void insert_range_from(const IColumn& src, size_t start, size_t length) override; void insert_many_defaults(size_t length) override { @@ -198,7 +196,6 @@ class ColumnDecimal final : public COWHelper> { return StringRef(reinterpret_cast(&data[n]), sizeof(data[n])); } void get(size_t n, Field& res) const override { res = (*this)[n]; } - Int64 get_int(size_t n) const override { return Int64(data[n].value * scale); } void clear() override { data.clear(); } diff --git a/be/src/vec/columns/column_fixed_length_object.h b/be/src/vec/columns/column_fixed_length_object.h index 172129fa21286c..8b207a96a07bbf 100644 --- a/be/src/vec/columns/column_fixed_length_object.h +++ b/be/src/vec/columns/column_fixed_length_object.h @@ -120,8 +120,8 @@ class ColumnFixedLengthObject final : public COWHelper(x).length(), _item_size); - insert_data(vectorized::get(x).data(), _item_size); + DCHECK_EQ(x.get().length(), _item_size); + insert_data(x.get().data(), _item_size); } void insert_range_from(const IColumn& src, size_t start, size_t length) override { diff --git a/be/src/vec/columns/column_map.cpp b/be/src/vec/columns/column_map.cpp index 3e8fb87abd26a0..e7d8cf884199fd 100644 --- a/be/src/vec/columns/column_map.cpp +++ b/be/src/vec/columns/column_map.cpp @@ -135,10 +135,10 @@ void ColumnMap::get(size_t n, Field& res) const { void ColumnMap::insert(const Field& x) { DCHECK_EQ(x.get_type(), PrimitiveType::TYPE_MAP); - const auto& map = doris::vectorized::get(x); + const auto& map = x.get(); CHECK_EQ(map.size(), 2); - const auto& k_f = doris::vectorized::get(map[0]); - const auto& v_f = doris::vectorized::get(map[1]); + const auto& k_f = map[0].get(); + const auto& v_f = map[1].get(); size_t element_size = k_f.size(); diff --git a/be/src/vec/columns/column_string.cpp b/be/src/vec/columns/column_string.cpp index 6c54fdde98eb00..8e93b5d025849a 100644 --- a/be/src/vec/columns/column_string.cpp +++ b/be/src/vec/columns/column_string.cpp @@ -700,15 +700,15 @@ void ColumnStr::insert(const Field& x) { StringRef s; if (x.get_type() == PrimitiveType::TYPE_JSONB) { // Handle JsonbField - const auto& real_field = vectorized::get(x); + const auto& real_field = x.get(); s = StringRef(real_field.get_value(), real_field.get_size()); } else { DCHECK(is_string_type(x.get_type())); // If `x.get_type()` is not String, such as UInt64, may get the error // `string column length is too large: total_length=13744632839234567870` // because `(x).size() = 13744632839234567870` - s.data = vectorized::get(x).data(); - s.size = vectorized::get(x).size(); + s.data = x.get().data(); + s.size = x.get().size(); } const size_t old_size = chars.size(); const size_t size_to_append = s.size; diff --git a/be/src/vec/columns/column_struct.cpp b/be/src/vec/columns/column_struct.cpp index a34eca67d5b6b8..c3663e817e4b35 100644 --- a/be/src/vec/columns/column_struct.cpp +++ b/be/src/vec/columns/column_struct.cpp @@ -109,7 +109,7 @@ void ColumnStruct::get(size_t n, Field& res) const { const size_t tuple_size = columns.size(); res = Field::create_field(Tuple()); - Tuple& res_tuple = res.get(); + auto& res_tuple = res.get(); res_tuple.reserve(tuple_size); for (size_t i = 0; i < tuple_size; ++i) { @@ -119,7 +119,7 @@ void ColumnStruct::get(size_t n, Field& res) const { void ColumnStruct::insert(const Field& x) { DCHECK_EQ(x.get_type(), PrimitiveType::TYPE_STRUCT); - const auto& tuple = x.get(); + const auto& tuple = x.get(); const size_t tuple_size = columns.size(); if (tuple.size() != tuple_size) { throw doris::Exception(ErrorCode::INTERNAL_ERROR, diff --git a/be/src/vec/columns/column_varbinary.h b/be/src/vec/columns/column_varbinary.h index 6e968f5dc9b19b..c2e31ceedc845c 100644 --- a/be/src/vec/columns/column_varbinary.h +++ b/be/src/vec/columns/column_varbinary.h @@ -77,8 +77,7 @@ class ColumnVarbinary final : public COWHelper { char* alloc(size_t length) { return _arena.alloc(length); } void insert(const Field& x) override { - const auto& value = - vectorized::get::CppType&>(x); + const auto& value = x.get(); insert_data(value.data(), value.size()); } diff --git a/be/src/vec/columns/column_variant.cpp b/be/src/vec/columns/column_variant.cpp index 8caf14b8a71dc8..3069eed8977a6c 100644 --- a/be/src/vec/columns/column_variant.cpp +++ b/be/src/vec/columns/column_variant.cpp @@ -702,7 +702,7 @@ void ColumnVariant::insert_from(const IColumn& src, size_t n) { void ColumnVariant::try_insert(const Field& field) { size_t old_size = size(); - const auto& object = field.get(); + const auto& object = field.get(); for (const auto& [key, value] : object) { if (!has_subcolumn(key)) { bool succ = add_sub_column(key, old_size); @@ -875,7 +875,7 @@ void ColumnVariant::get(size_t n, Field& res) const { size()); } res = Field::create_field(VariantMap()); - auto& object = res.get(); + auto& object = res.get(); for (const auto& entry : subcolumns) { FieldWithDataType field; @@ -1450,7 +1450,7 @@ bool ColumnVariant::Subcolumn::is_empty_nested(size_t row) const { FieldWithDataType field; get(row, field); if (field.field.get_type() == PrimitiveType::TYPE_ARRAY) { - const auto& array = field.field.get(); + const auto& array = field.field.get(); bool only_nulls_inside = true; for (const auto& elem : array) { if (elem.get_type() != PrimitiveType::TYPE_NULL) { diff --git a/be/src/vec/columns/column_vector.cpp b/be/src/vec/columns/column_vector.cpp index 8b9ddcdb09a5ab..3c5d21f54d5695 100644 --- a/be/src/vec/columns/column_vector.cpp +++ b/be/src/vec/columns/column_vector.cpp @@ -310,63 +310,66 @@ MutableColumnPtr ColumnVector::clone_resized(size_t size) const { template void ColumnVector::insert(const Field& x) { + // TODO(gabriel): `x` must have the same type as `T` if all of nested types are BIGINT in Variant value_type tmp; switch (x.get_type()) { case TYPE_NULL: tmp = default_value(); break; case TYPE_BOOLEAN: - tmp = doris::vectorized::get::CppType>(x); + tmp = x.get(); break; case TYPE_TINYINT: - tmp = doris::vectorized::get::CppType>(x); + tmp = x.get(); break; case TYPE_SMALLINT: - tmp = (value_type) - doris::vectorized::get::CppType>(x); + tmp = (value_type)x.get(); break; case TYPE_INT: - tmp = (value_type)doris::vectorized::get::CppType>( - x); + tmp = (value_type)x.get(); break; case TYPE_BIGINT: - tmp = (value_type) - doris::vectorized::get::CppType>(x); + tmp = (value_type)x.get(); break; case TYPE_LARGEINT: - tmp = (value_type) - doris::vectorized::get::CppType>(x); + tmp = (value_type)x.get(); break; case TYPE_IPV4: - tmp = (value_type)doris::vectorized::get::CppType>( - x); + tmp = (value_type)x.get(); break; case TYPE_IPV6: - tmp = (value_type)doris::vectorized::get::CppType>( - x); + tmp = (value_type)x.get(); break; case TYPE_FLOAT: - tmp = (value_type)doris::vectorized::get::CppType>( - x); + tmp = x.get(); break; case TYPE_DOUBLE: - tmp = (value_type) - doris::vectorized::get::CppType>(x); + tmp = (value_type)x.get(); break; case TYPE_TIME: - tmp = (value_type)doris::vectorized::get::CppType>( - x); + tmp = (value_type)x.get(); break; case TYPE_TIMEV2: - tmp = (value_type) - doris::vectorized::get::CppType>(x); + tmp = (value_type)x.get(); break; - case TYPE_DATE: - case TYPE_DATETIME: + case TYPE_DATE: { + auto dt = x.get(); + tmp = *(value_type*)&dt; + break; + } + case TYPE_DATETIME: { + auto dt2 = x.get(); + tmp = *(value_type*)&dt2; + break; + } case TYPE_DATEV2: + tmp = (value_type)x.get().to_date_int_val(); + break; case TYPE_DATETIMEV2: + tmp = (value_type)x.get().to_date_int_val(); + break; case TYPE_TIMESTAMPTZ: - tmp = doris::vectorized::get::ColumnItemType>(x); + tmp = (value_type)x.get().to_date_int_val(); break; default: throw doris::Exception(ErrorCode::INTERNAL_ERROR, diff --git a/be/src/vec/common/field_visitors.h b/be/src/vec/common/field_visitors.h index e287b54155e17b..bd2dda57bfe683 100644 --- a/be/src/vec/common/field_visitors.h +++ b/be/src/vec/common/field_visitors.h @@ -43,80 +43,73 @@ template typename std::decay_t::ResultType apply_visitor(Visitor&& visitor, F&& field) { switch (field.get_type()) { case PrimitiveType::TYPE_NULL: - return visitor.template apply( - field.template get::CppType>()); + return visitor.template apply(field.template get()); case PrimitiveType::TYPE_DATETIMEV2: return visitor.template apply( - field.template get::CppType>()); + field.template get()); case PrimitiveType::TYPE_TIMESTAMPTZ: return visitor.template apply( - field.template get::CppType>()); + field.template get()); case PrimitiveType::TYPE_LARGEINT: return visitor.template apply( - field.template get::CppType>()); + field.template get()); case PrimitiveType::TYPE_DATETIME: return visitor.template apply( - field.template get::CppType>()); + field.template get()); case PrimitiveType::TYPE_DATE: - return visitor.template apply( - field.template get::CppType>()); + return visitor.template apply(field.template get()); case PrimitiveType::TYPE_BOOLEAN: return visitor.template apply( - field.template get::CppType>()); + field.template get()); case PrimitiveType::TYPE_TINYINT: return visitor.template apply( - field.template get::CppType>()); + field.template get()); case PrimitiveType::TYPE_SMALLINT: return visitor.template apply( - field.template get::CppType>()); + field.template get()); case PrimitiveType::TYPE_INT: - return visitor.template apply( - field.template get::CppType>()); + return visitor.template apply(field.template get()); case PrimitiveType::TYPE_BIGINT: return visitor.template apply( - field.template get::CppType>()); + field.template get()); case PrimitiveType::TYPE_FLOAT: - return visitor.template apply( - field.template get::CppType>()); + return visitor.template apply(field.template get()); case PrimitiveType::TYPE_DOUBLE: return visitor.template apply( - field.template get::CppType>()); + field.template get()); case PrimitiveType::TYPE_STRING: return visitor.template apply( - field.template get::CppType>()); + field.template get()); case PrimitiveType::TYPE_CHAR: - return visitor.template apply( - field.template get::CppType>()); + return visitor.template apply(field.template get()); case PrimitiveType::TYPE_VARCHAR: return visitor.template apply( - field.template get::CppType>()); + field.template get()); case PrimitiveType::TYPE_ARRAY: - return visitor.template apply( - field.template get::CppType>()); + return visitor.template apply(field.template get()); case PrimitiveType::TYPE_STRUCT: return visitor.template apply( - field.template get::CppType>()); + field.template get()); case PrimitiveType::TYPE_VARIANT: return visitor.template apply( - field.template get::CppType>()); + field.template get()); case PrimitiveType::TYPE_DECIMAL32: return visitor.template apply( - field.template get::CppType>()); + field.template get()); case PrimitiveType::TYPE_DECIMAL64: return visitor.template apply( - field.template get::CppType>()); + field.template get()); case PrimitiveType::TYPE_DECIMALV2: return visitor.template apply( - field.template get::CppType>()); + field.template get()); case PrimitiveType::TYPE_DECIMAL128I: return visitor.template apply( - field.template get::CppType>()); + field.template get()); case PrimitiveType::TYPE_DECIMAL256: return visitor.template apply( - field.template get::CppType>()); + field.template get()); case PrimitiveType::TYPE_JSONB: - return visitor.template apply( - field.template get::CppType>()); + return visitor.template apply(field.template get()); default: throw doris::Exception(ErrorCode::INTERNAL_ERROR, "Bad type of Field {}", static_cast(field.get_type())); diff --git a/be/src/vec/core/field.cpp b/be/src/vec/core/field.cpp index fee63030b55fe8..b6ce8c0cb52916 100644 --- a/be/src/vec/core/field.cpp +++ b/be/src/vec/core/field.cpp @@ -119,140 +119,106 @@ void Field::create_concrete(const typename PrimitiveTypeTraits::CppType& x void Field::create(Field&& field) { switch (field.type) { case PrimitiveType::TYPE_NULL: - create_concrete( - std::move(field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_DATETIMEV2: - create_concrete(std::move( - field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_DATEV2: - create_concrete(std::move( - field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_TIMESTAMPTZ: - create_concrete(std::move( - field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_DATETIME: - create_concrete(std::move( - field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_DATE: - create_concrete( - std::move(field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_BOOLEAN: - create_concrete(std::move( - field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_TINYINT: - create_concrete(std::move( - field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_SMALLINT: - create_concrete(std::move( - field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_INT: - create_concrete( - std::move(field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_BIGINT: - create_concrete(std::move( - field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_LARGEINT: - create_concrete(std::move( - field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_IPV4: - create_concrete( - std::move(field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_IPV6: - create_concrete( - std::move(field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_FLOAT: - create_concrete( - std::move(field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_TIMEV2: - create_concrete(std::move( - field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_DOUBLE: - create_concrete(std::move( - field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_STRING: - create_concrete(std::move( - field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_CHAR: - create_concrete( - std::move(field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_VARCHAR: - create_concrete(std::move( - field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_JSONB: - create_concrete( - std::move(field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_ARRAY: - create_concrete( - std::move(field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_STRUCT: - create_concrete(std::move( - field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_MAP: - create_concrete( - std::move(field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_DECIMAL32: - create_concrete(std::move( - field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_DECIMAL64: - create_concrete(std::move( - field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_DECIMALV2: - create_concrete(std::move( - field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_DECIMAL128I: - create_concrete(std::move( - field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_DECIMAL256: - create_concrete(std::move( - field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_VARIANT: - create_concrete(std::move( - field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_BITMAP: - create_concrete(std::move( - field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_HLL: - create_concrete( - std::move(field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_QUANTILE_STATE: - create_concrete(std::move( - field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_VARBINARY: - create_concrete(std::move( - field.template get::CppType>())); + create_concrete(std::move(field.template get())); return; default: throw Exception(Status::FatalError("type not supported, type={}", field.get_type_name())); @@ -282,148 +248,112 @@ Field& Field::operator=(const Field& rhs) { void Field::create(const Field& field) { switch (field.type) { case PrimitiveType::TYPE_NULL: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_DATETIMEV2: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_DATEV2: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_TIMESTAMPTZ: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_DATETIME: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_DATE: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_BOOLEAN: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_TINYINT: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_SMALLINT: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_INT: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_BIGINT: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_LARGEINT: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_IPV4: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_IPV6: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_FLOAT: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_TIMEV2: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_DOUBLE: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_STRING: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_CHAR: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_VARCHAR: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_JSONB: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_ARRAY: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_STRUCT: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_MAP: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_DECIMAL32: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_DECIMAL64: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_DECIMALV2: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_DECIMAL128I: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_DECIMAL256: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_VARIANT: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_BITMAP: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_HLL: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_QUANTILE_STATE: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_UINT32: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_UINT64: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; case PrimitiveType::TYPE_VARBINARY: - create_concrete( - field.template get::CppType>()); + create_concrete(field.template get()); return; default: throw Exception(Status::FatalError("type not supported, type={}", field.get_type_name())); @@ -433,40 +363,40 @@ void Field::create(const Field& field) { void Field::destroy() { switch (type) { case PrimitiveType::TYPE_STRING: - destroy::CppType>(); + destroy(); break; case PrimitiveType::TYPE_CHAR: - destroy::CppType>(); + destroy(); break; case PrimitiveType::TYPE_VARCHAR: - destroy::CppType>(); + destroy(); break; case PrimitiveType::TYPE_JSONB: - destroy::CppType>(); + destroy(); break; case PrimitiveType::TYPE_ARRAY: - destroy::CppType>(); + destroy(); break; case PrimitiveType::TYPE_STRUCT: - destroy::CppType>(); + destroy(); break; case PrimitiveType::TYPE_MAP: - destroy::CppType>(); + destroy(); break; case PrimitiveType::TYPE_VARIANT: - destroy::CppType>(); + destroy(); break; case PrimitiveType::TYPE_BITMAP: - destroy::CppType>(); + destroy(); break; case PrimitiveType::TYPE_HLL: - destroy::CppType>(); + destroy(); break; case PrimitiveType::TYPE_QUANTILE_STATE: - destroy::CppType>(); + destroy(); break; case PrimitiveType::TYPE_VARBINARY: - destroy::CppType>(); + destroy(); break; default: break; @@ -479,140 +409,106 @@ void Field::destroy() { void Field::assign(Field&& field) { switch (field.type) { case PrimitiveType::TYPE_NULL: - assign_concrete( - std::move(field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_DATETIMEV2: - assign_concrete(std::move( - field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_DATETIME: - assign_concrete(std::move( - field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_DATE: - assign_concrete( - std::move(field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_DATEV2: - assign_concrete(std::move( - field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_TIMESTAMPTZ: - assign_concrete(std::move( - field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_BOOLEAN: - assign_concrete(std::move( - field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_TINYINT: - assign_concrete(std::move( - field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_SMALLINT: - assign_concrete(std::move( - field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_INT: - assign_concrete( - std::move(field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_BIGINT: - assign_concrete(std::move( - field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_LARGEINT: - assign_concrete(std::move( - field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_IPV4: - assign_concrete( - std::move(field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_IPV6: - assign_concrete( - std::move(field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_FLOAT: - assign_concrete( - std::move(field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_TIMEV2: - assign_concrete(std::move( - field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_DOUBLE: - assign_concrete(std::move( - field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_STRING: - assign_concrete(std::move( - field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_CHAR: - assign_concrete( - std::move(field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_VARCHAR: - assign_concrete(std::move( - field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_JSONB: - assign_concrete( - std::move(field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_ARRAY: - assign_concrete( - std::move(field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_STRUCT: - assign_concrete(std::move( - field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_MAP: - assign_concrete( - std::move(field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_DECIMAL32: - assign_concrete(std::move( - field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_DECIMAL64: - assign_concrete(std::move( - field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_DECIMALV2: - assign_concrete(std::move( - field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_DECIMAL128I: - assign_concrete(std::move( - field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_DECIMAL256: - assign_concrete(std::move( - field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_VARIANT: - assign_concrete(std::move( - field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_BITMAP: - assign_concrete(std::move( - field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_HLL: - assign_concrete( - std::move(field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_QUANTILE_STATE: - assign_concrete(std::move( - field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; case PrimitiveType::TYPE_VARBINARY: - assign_concrete(std::move( - field.template get::CppType>())); + assign_concrete(std::move(field.template get())); return; default: throw Exception(Status::FatalError("type not supported, type={}", field.get_type_name())); @@ -622,148 +518,112 @@ void Field::assign(Field&& field) { void Field::assign(const Field& field) { switch (field.type) { case PrimitiveType::TYPE_NULL: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_DATETIMEV2: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_DATETIME: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_DATE: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_DATEV2: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_TIMESTAMPTZ: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_BOOLEAN: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_TINYINT: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_SMALLINT: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_INT: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_BIGINT: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_LARGEINT: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_IPV4: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_IPV6: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_FLOAT: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_TIMEV2: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_DOUBLE: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_STRING: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_CHAR: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_VARCHAR: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_JSONB: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_ARRAY: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_STRUCT: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_MAP: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_DECIMAL32: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_DECIMAL64: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_DECIMALV2: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_DECIMAL128I: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_DECIMAL256: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_VARIANT: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_BITMAP: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_HLL: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_QUANTILE_STATE: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_UINT32: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_UINT64: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; case PrimitiveType::TYPE_VARBINARY: - assign_concrete( - field.template get::CppType>()); + assign_concrete(field.template get()); return; default: throw Exception(Status::FatalError("type not supported, type={}", field.get_type_name())); @@ -787,20 +647,105 @@ std::string Field::get_type_name() const { return type_to_string(type); } -#define MATCH_PRIMITIVE_TYPE(primite_type) \ - if (type == primite_type) { \ - const auto& v = get::CppType>(); \ - return std::string_view(reinterpret_cast(&v), sizeof(v)); \ +std::strong_ordering Field::operator<=>(const Field& rhs) const { + if (type == PrimitiveType::TYPE_NULL || rhs == PrimitiveType::TYPE_NULL) { + return type <=> rhs.type; + } + if (type != rhs.type) { + throw Exception(Status::FatalError("lhs type not equal with rhs, lhs={}, rhs={}", + get_type_name(), rhs.get_type_name())); + } + + switch (type) { + case PrimitiveType::TYPE_BITMAP: + case PrimitiveType::TYPE_HLL: + case PrimitiveType::TYPE_QUANTILE_STATE: + case PrimitiveType::INVALID_TYPE: + case PrimitiveType::TYPE_JSONB: + case PrimitiveType::TYPE_NULL: + case PrimitiveType::TYPE_ARRAY: + case PrimitiveType::TYPE_MAP: + case PrimitiveType::TYPE_STRUCT: + case PrimitiveType::TYPE_VARIANT: + return std::strong_ordering::equal; //TODO: throw Exception? + case PrimitiveType::TYPE_DATETIMEV2: + return get().to_date_int_val() <=> + rhs.get().to_date_int_val(); + case PrimitiveType::TYPE_DATEV2: + return get().to_date_int_val() <=> + rhs.get().to_date_int_val(); + case PrimitiveType::TYPE_TIMESTAMPTZ: + return get().to_date_int_val() <=> + rhs.get().to_date_int_val(); + case PrimitiveType::TYPE_DATE: + return get() <=> rhs.get(); + case PrimitiveType::TYPE_DATETIME: + return get() <=> rhs.get(); + case PrimitiveType::TYPE_BIGINT: + return get() <=> rhs.get(); + case PrimitiveType::TYPE_BOOLEAN: + return get() <=> rhs.get(); + case PrimitiveType::TYPE_TINYINT: + return get() <=> rhs.get(); + case PrimitiveType::TYPE_SMALLINT: + return get() <=> rhs.get(); + case PrimitiveType::TYPE_INT: + return get() <=> rhs.get(); + case PrimitiveType::TYPE_LARGEINT: + return get() <=> rhs.get(); + case PrimitiveType::TYPE_IPV6: + return get() <=> rhs.get(); + case PrimitiveType::TYPE_IPV4: + return get() <=> rhs.get(); + case PrimitiveType::TYPE_FLOAT: + return get() < rhs.get() ? std::strong_ordering::less + : get() == rhs.get() ? std::strong_ordering::equal + : std::strong_ordering::greater; + case PrimitiveType::TYPE_TIMEV2: + return get() < rhs.get() ? std::strong_ordering::less + : get() == rhs.get() ? std::strong_ordering::equal + : std::strong_ordering::greater; + case PrimitiveType::TYPE_DOUBLE: + return get() < rhs.get() ? std::strong_ordering::less + : get() == rhs.get() ? std::strong_ordering::equal + : std::strong_ordering::greater; + case PrimitiveType::TYPE_STRING: + return get() <=> rhs.get(); + case PrimitiveType::TYPE_CHAR: + return get() <=> rhs.get(); + case PrimitiveType::TYPE_VARCHAR: + return get() <=> rhs.get(); + case PrimitiveType::TYPE_VARBINARY: + return get() <=> rhs.get(); + case PrimitiveType::TYPE_DECIMAL32: + return get() <=> rhs.get(); + case PrimitiveType::TYPE_DECIMAL64: + return get() <=> rhs.get(); + case PrimitiveType::TYPE_DECIMALV2: + return get() <=> rhs.get(); + case PrimitiveType::TYPE_DECIMAL128I: + return get() <=> rhs.get(); + case PrimitiveType::TYPE_DECIMAL256: + return get() <=> rhs.get(); + default: + throw Exception(Status::FatalError("Unsupported type: {}", get_type_name())); + } +} + +#define MATCH_PRIMITIVE_TYPE(primitive_type) \ + if (type == primitive_type) { \ + const auto& v = get(); \ + return std::string_view(reinterpret_cast(&v), sizeof(v)); \ } std::string_view Field::as_string_view() const { if (type == PrimitiveType::TYPE_STRING || type == PrimitiveType::TYPE_VARCHAR || type == PrimitiveType::TYPE_CHAR) { - const auto& s = get(); + const auto& s = get(); return {s.data(), s.size()}; } if (type == PrimitiveType::TYPE_VARBINARY) { - const auto& svf = get(); + const auto& svf = get(); return {svf.data(), svf.size()}; } // MATCH_PRIMITIVE_TYPE(INVALID_TYPE); diff --git a/be/src/vec/core/field.h b/be/src/vec/core/field.h index f993067d3e2f1b..1cb6d0c13a3f85 100644 --- a/be/src/vec/core/field.h +++ b/be/src/vec/core/field.h @@ -320,17 +320,27 @@ class Field { // The template parameter T needs to be consistent with `which`. // If not, use NearestFieldType<> externally. // Maybe modify this in the future, reference: https://github.com/ClickHouse/ClickHouse/pull/22003 - template - T& get() { - using TWithoutRef = std::remove_reference_t; - auto* MAY_ALIAS ptr = reinterpret_cast(&storage); + template + typename PrimitiveTypeTraits::CppType& get() { + DCHECK(T == type || + ((type == TYPE_CHAR || type == TYPE_VARCHAR || type == TYPE_STRING) && + (T == TYPE_CHAR || T == TYPE_VARCHAR || T == TYPE_STRING)) || + type == TYPE_NULL) + << "Type mismatch: requested " << int(T) << ", actual " << get_type_name(); + auto* MAY_ALIAS ptr = reinterpret_cast::CppType*>(&storage); return *ptr; } - template - const T& get() const { - using TWithoutRef = std::remove_reference_t; - const auto* MAY_ALIAS ptr = reinterpret_cast(&storage); + template + const typename PrimitiveTypeTraits::CppType& get() const { + // TODO(gabriel): Is it safe for null type? + DCHECK(T == type || + ((type == TYPE_CHAR || type == TYPE_VARCHAR || type == TYPE_STRING) && + (T == TYPE_CHAR || T == TYPE_VARCHAR || T == TYPE_STRING)) || + type == TYPE_NULL) + << "Type mismatch: requested " << int(T) << ", actual " << get_type_name(); + const auto* MAY_ALIAS ptr = + reinterpret_cast::CppType*>(&storage); return *ptr; } @@ -338,80 +348,7 @@ class Field { return operator<=>(rhs) == std::strong_ordering::equal; } - std::strong_ordering operator<=>(const Field& rhs) const { - if (type == PrimitiveType::TYPE_NULL || rhs == PrimitiveType::TYPE_NULL) { - return type <=> rhs.type; - } - if (type != rhs.type) { - throw Exception(Status::FatalError("lhs type not equal with rhs, lhs={}, rhs={}", - get_type_name(), rhs.get_type_name())); - } - - switch (type) { - case PrimitiveType::TYPE_BITMAP: - case PrimitiveType::TYPE_HLL: - case PrimitiveType::TYPE_QUANTILE_STATE: - case PrimitiveType::INVALID_TYPE: - case PrimitiveType::TYPE_JSONB: - case PrimitiveType::TYPE_NULL: - case PrimitiveType::TYPE_ARRAY: - case PrimitiveType::TYPE_MAP: - case PrimitiveType::TYPE_STRUCT: - case PrimitiveType::TYPE_VARIANT: - return std::strong_ordering::equal; //TODO: throw Exception? - case PrimitiveType::TYPE_DATETIMEV2: - return get() <=> rhs.get(); - case PrimitiveType::TYPE_DATEV2: - return get() <=> rhs.get(); - case PrimitiveType::TYPE_TIMESTAMPTZ: - return get() <=> rhs.get(); - case PrimitiveType::TYPE_DATE: - case PrimitiveType::TYPE_DATETIME: - case PrimitiveType::TYPE_BIGINT: - return get() <=> rhs.get(); - case PrimitiveType::TYPE_BOOLEAN: - return get() <=> rhs.get(); - case PrimitiveType::TYPE_TINYINT: - return get() <=> rhs.get(); - case PrimitiveType::TYPE_SMALLINT: - return get() <=> rhs.get(); - case PrimitiveType::TYPE_INT: - return get() <=> rhs.get(); - case PrimitiveType::TYPE_LARGEINT: - return get() <=> rhs.get(); - case PrimitiveType::TYPE_IPV6: - return get() <=> rhs.get(); - case PrimitiveType::TYPE_IPV4: - return get() <=> rhs.get(); - case PrimitiveType::TYPE_FLOAT: - return get() < rhs.get() ? std::strong_ordering::less - : get() == rhs.get() ? std::strong_ordering::equal - : std::strong_ordering::greater; - case PrimitiveType::TYPE_TIMEV2: - case PrimitiveType::TYPE_DOUBLE: - return get() < rhs.get() ? std::strong_ordering::less - : get() == rhs.get() ? std::strong_ordering::equal - : std::strong_ordering::greater; - case PrimitiveType::TYPE_STRING: - case PrimitiveType::TYPE_CHAR: - case PrimitiveType::TYPE_VARCHAR: - return get() <=> rhs.get(); - case PrimitiveType::TYPE_VARBINARY: - return get() <=> rhs.get(); - case PrimitiveType::TYPE_DECIMAL32: - return get() <=> rhs.get(); - case PrimitiveType::TYPE_DECIMAL64: - return get() <=> rhs.get(); - case PrimitiveType::TYPE_DECIMALV2: - return get() <=> rhs.get(); - case PrimitiveType::TYPE_DECIMAL128I: - return get() <=> rhs.get(); - case PrimitiveType::TYPE_DECIMAL256: - return get() <=> rhs.get(); - default: - throw Exception(Status::FatalError("Unsupported type: {}", get_type_name())); - } - } + std::strong_ordering operator<=>(const Field& rhs) const; std::string_view as_string_view() const; @@ -443,10 +380,14 @@ class Field { void destroy(); - template + template void destroy() { - T* MAY_ALIAS ptr = reinterpret_cast(&storage); - ptr->~T(); + using TargetType = typename PrimitiveTypeTraits::CppType; + DCHECK(T == type || ((type == TYPE_CHAR || type == TYPE_VARCHAR || type == TYPE_STRING) && + (T == TYPE_CHAR || T == TYPE_VARCHAR || T == TYPE_STRING))) + << "Type mismatch: requested " << int(T) << ", actual " << get_type_name(); + auto* MAY_ALIAS ptr = reinterpret_cast(&storage); + ptr->~TargetType(); } }; @@ -459,16 +400,6 @@ struct FieldWithDataType { int scale = -1; }; -template -T get(const Field& field) { - return field.template get(); -} - -template -T get(Field& field) { - return field.template get(); -} - } // namespace doris::vectorized template <> diff --git a/be/src/vec/core/types.h b/be/src/vec/core/types.h index f87fcf6549eea5..5a633be3d4d931 100644 --- a/be/src/vec/core/types.h +++ b/be/src/vec/core/types.h @@ -519,6 +519,8 @@ template constexpr bool IsDecimal128V2 = false; template <> inline constexpr bool IsDecimal128V2 = true; +template <> +inline constexpr bool IsDecimal128V2 = true; template constexpr bool IsDecimal128V3 = false; @@ -567,6 +569,10 @@ struct NativeType { using Type = Int128; }; template <> +struct NativeType { + using Type = Int128; +}; +template <> struct NativeType { using Type = Int128; }; diff --git a/be/src/vec/data_types/convert_field_to_type.cpp b/be/src/vec/data_types/convert_field_to_type.cpp index dd8e27243eb9ac..bb62cc07da0b9d 100644 --- a/be/src/vec/data_types/convert_field_to_type.cpp +++ b/be/src/vec/data_types/convert_field_to_type.cpp @@ -54,96 +54,96 @@ template /// Field template parameter may be const or non-const Fie void dispatch(F&& f, const Field& field) { switch (field.get_type()) { case PrimitiveType::TYPE_NULL: - f(field.template get()); + f(field.template get()); return; case PrimitiveType::TYPE_DATETIMEV2: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_TIMESTAMPTZ: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_DATETIME: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_DATE: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_BOOLEAN: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_TINYINT: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_SMALLINT: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_INT: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_BIGINT: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_LARGEINT: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_IPV6: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_TIMEV2: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_FLOAT: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_DOUBLE: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_STRING: case PrimitiveType::TYPE_CHAR: case PrimitiveType::TYPE_VARCHAR: - f(field.template get()); + f(field.template get()); return; case PrimitiveType::TYPE_VARBINARY: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_JSONB: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_ARRAY: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_STRUCT: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_MAP: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_DECIMAL32: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_DECIMAL64: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_DECIMALV2: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_DECIMAL128I: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_DECIMAL256: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_VARIANT: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_BITMAP: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_HLL: - f(field.template get::CppType>()); + f(field.template get()); return; case PrimitiveType::TYPE_QUANTILE_STATE: - f(field.template get::CppType>()); + f(field.template get()); return; default: throw Exception(Status::FatalError("type not supported, type={}", field.get_type_name())); @@ -291,7 +291,7 @@ bool ConvertNumeric::cast(const Float64& from, UInt8& to) { } template <> -bool ConvertNumeric::cast(const UInt8& from, UInt8& to) { +bool ConvertNumeric::cast(const bool& from, UInt8& to) { to = from; return true; } @@ -346,7 +346,7 @@ bool ConvertNumeric::cast(const Float32& from, Int8& to) { } template <> -bool ConvertNumeric::cast(const UInt8& from, Int8& to) { +bool ConvertNumeric::cast(const bool& from, Int8& to) { auto params = create_cast_params(); return CastToInt::from_bool(from, to, params); } @@ -395,7 +395,7 @@ bool ConvertNumeric::cast(const Float32& from, Int16& to) { } template <> -bool ConvertNumeric::cast(const UInt8& from, Int16& to) { +bool ConvertNumeric::cast(const bool& from, Int16& to) { auto params = create_cast_params(); return CastToInt::from_bool(from, to, params); } @@ -444,7 +444,7 @@ bool ConvertNumeric::cast(const Float32& from, Int32& to) { } template <> -bool ConvertNumeric::cast(const UInt8& from, Int32& to) { +bool ConvertNumeric::cast(const bool& from, Int32& to) { auto params = create_cast_params(); return CastToInt::from_bool(from, to, params); } @@ -493,7 +493,7 @@ bool ConvertNumeric::cast(const Float32& from, Int64& to) { } template <> -bool ConvertNumeric::cast(const UInt8& from, Int64& to) { +bool ConvertNumeric::cast(const bool& from, Int64& to) { auto params = create_cast_params(); return CastToInt::from_bool(from, to, params); } @@ -542,7 +542,7 @@ bool ConvertNumeric::cast(const Float32& from, Int128& to) { } template <> -bool ConvertNumeric::cast(const UInt8& from, Int128& to) { +bool ConvertNumeric::cast(const bool& from, Int128& to) { auto params = create_cast_params(); return CastToInt::from_bool(from, to, params); } @@ -591,7 +591,7 @@ bool ConvertNumeric::cast(const Float32& from, Float32& to) { } template <> -bool ConvertNumeric::cast(const UInt8& from, Float32& to) { +bool ConvertNumeric::cast(const bool& from, Float32& to) { auto params = create_cast_params(); return CastToFloat::from_bool(from, to, params); } @@ -640,7 +640,7 @@ bool ConvertNumeric::cast(const Float32& from, Float64& to) { } template <> -bool ConvertNumeric::cast(const UInt8& from, Float64& to) { +bool ConvertNumeric::cast(const bool& from, Float64& to) { auto params = create_cast_params(); return CastToFloat::from_bool(from, to, params); } @@ -664,7 +664,7 @@ bool ConvertNumeric::cast(const Int32& from, Float64& to) { } namespace { -template +template Field convert_numeric_type_impl(const Field& from) { typename PrimitiveTypeTraits::ColumnItemType result; if (!ConvertNumeric::cast(from.get(), result)) { @@ -676,21 +676,21 @@ Field convert_numeric_type_impl(const Field& from) { template void convert_numric_type(const Field& from, const IDataType& type, Field* to) { if (from.get_type() == PrimitiveType::TYPE_BIGINT) { - *to = convert_numeric_type_impl(from); + *to = convert_numeric_type_impl(from); } else if (from.get_type() == PrimitiveType::TYPE_DOUBLE) { - *to = convert_numeric_type_impl(from); + *to = convert_numeric_type_impl(from); } else if (from.get_type() == PrimitiveType::TYPE_LARGEINT) { - *to = convert_numeric_type_impl(from); + *to = convert_numeric_type_impl(from); } else if (from.get_type() == PrimitiveType::TYPE_TINYINT) { - *to = convert_numeric_type_impl(from); + *to = convert_numeric_type_impl(from); } else if (from.get_type() == PrimitiveType::TYPE_SMALLINT) { - *to = convert_numeric_type_impl(from); + *to = convert_numeric_type_impl(from); } else if (from.get_type() == PrimitiveType::TYPE_INT) { - *to = convert_numeric_type_impl(from); + *to = convert_numeric_type_impl(from); } else if (from.get_type() == PrimitiveType::TYPE_FLOAT) { - *to = convert_numeric_type_impl(from); + *to = convert_numeric_type_impl(from); } else if (from.get_type() == PrimitiveType::TYPE_BOOLEAN) { - *to = convert_numeric_type_impl(from); + *to = convert_numeric_type_impl(from); } else { throw doris::Exception(ErrorCode::INVALID_ARGUMENT, "Type mismatch in IN or VALUES section. Expected: {}. Got: {}", @@ -736,7 +736,7 @@ void convert_field_to_typeImpl(const Field& src, const IDataType& type, return; } else if (const auto* type_array = typeid_cast(&type)) { if (src.get_type() == PrimitiveType::TYPE_ARRAY) { - const auto& src_arr = src.get(); + const auto& src_arr = src.get(); size_t src_arr_size = src_arr.size(); const auto& element_type = *(type_array->get_nested_type()); Array res(src_arr_size); diff --git a/be/src/vec/data_types/data_type_decimal.cpp b/be/src/vec/data_types/data_type_decimal.cpp index 0d9adb269f4fe8..2f240b01a34955 100644 --- a/be/src/vec/data_types/data_type_decimal.cpp +++ b/be/src/vec/data_types/data_type_decimal.cpp @@ -279,8 +279,14 @@ Status DataTypeDecimal::check_column(const IColumn& column) const { template bool DataTypeDecimal::parse_from_string(const std::string& str, FieldType* res) const { StringParser::ParseResult result = StringParser::PARSE_SUCCESS; - res->value = StringParser::string_to_decimal::get_primitive_type()>( - str.c_str(), cast_set(str.size()), precision, scale, &result); + if constexpr (T == TYPE_DECIMALV2) { + *res = DecimalV2Value( + StringParser::string_to_decimal::get_primitive_type()>( + str.c_str(), cast_set(str.size()), precision, scale, &result)); + } else { + res->value = StringParser::string_to_decimal::get_primitive_type()>( + str.c_str(), cast_set(str.size()), precision, scale, &result); + } return result == StringParser::PARSE_SUCCESS || result == StringParser::PARSE_UNDERFLOW; } diff --git a/be/src/vec/data_types/serde/data_type_array_serde.cpp b/be/src/vec/data_types/serde/data_type_array_serde.cpp index 2f744af92acf97..7d47c7f88a3204 100644 --- a/be/src/vec/data_types/serde/data_type_array_serde.cpp +++ b/be/src/vec/data_types/serde/data_type_array_serde.cpp @@ -505,7 +505,7 @@ const uint8_t* DataTypeArraySerDe::deserialize_binary_to_field(const uint8_t* da data += sizeof(size_t); field = Field::create_field(Array(nested_size)); info.num_dimensions++; - auto& array = field.get(); + auto& array = field.get(); PrimitiveType nested_type = PrimitiveType::TYPE_NULL; for (size_t i = 0; i < nested_size; ++i) { Field nested_field; diff --git a/be/src/vec/data_types/serde/data_type_decimal_serde.cpp b/be/src/vec/data_types/serde/data_type_decimal_serde.cpp index a06fb7a7564c86..8f9da029b18c33 100644 --- a/be/src/vec/data_types/serde/data_type_decimal_serde.cpp +++ b/be/src/vec/data_types/serde/data_type_decimal_serde.cpp @@ -160,15 +160,9 @@ Status DataTypeDecimalSerDe::serialize_one_cell_to_json(const IColumn& column row_num = result.second; auto& col = assert_cast&>(*ptr); - if constexpr (T != TYPE_DECIMALV2) { - FieldType value = col.get_element(row_num); - auto decimal_str = value.to_string(scale); - bw.write(decimal_str.data(), decimal_str.size()); - } else { - char buf[FieldType::max_string_length()]; - auto length = col.get_element(row_num).to_string(buf, scale, scale_multiplier); - bw.write(buf, length); - } + FieldType value = col.get_element(row_num); + auto decimal_str = value.to_string(scale); + bw.write(decimal_str.data(), decimal_str.size()); return Status::OK(); } @@ -396,14 +390,19 @@ Status DataTypeDecimalSerDe::write_column_to_orc(const std::string& timezone, orc::Decimal64VectorBatch>*>(orc_col_batch); for (size_t row_id = start; row_id < end; row_id++) { if (cur_batch->notNull[row_id] == 1) { - const auto& int_value = col_data[row_id].value; - if constexpr (use_int128) { + const auto& int_value = col_data[row_id]; + if constexpr (T == TYPE_DECIMALV2) { // orc::Int128 only support construct from two int64_t values // so we need to split the int128 value into two int64_t values - orc::Int128 value(int_value >> 64, (uint64_t)int_value); + orc::Int128 value(int_value.value() >> 64, (uint64_t)int_value.value()); + cur_batch->values[row_id] = value; + } else if constexpr (use_int128) { + // orc::Int128 only support construct from two int64_t values + // so we need to split the int128 value into two int64_t values + orc::Int128 value(int_value.value >> 64, (uint64_t)int_value.value); cur_batch->values[row_id] = value; } else { - cur_batch->values[row_id] = int_value; + cur_batch->values[row_id] = int_value.value; } } } @@ -598,7 +597,7 @@ void DataTypeDecimalSerDe::read_one_cell_from_jsonb(IColumn& column, const JsonbValue* arg) const { auto& col = reinterpret_cast&>(column); if constexpr (T == TYPE_DECIMALV2) { - col.insert_value(arg->unpack()->val()); + col.insert_value(DecimalV2Value(arg->unpack()->val())); } else if constexpr (T == TYPE_DECIMAL128I) { col.insert_value(arg->unpack()->val()); } else if constexpr (T == TYPE_DECIMAL32) { diff --git a/be/src/vec/exec/format/parquet/parquet_column_convert.h b/be/src/vec/exec/format/parquet/parquet_column_convert.h index e8b29131bdf843..0db0dc9a535c15 100644 --- a/be/src/vec/exec/format/parquet/parquet_column_convert.h +++ b/be/src/vec/exec/format/parquet/parquet_column_convert.h @@ -375,10 +375,10 @@ class Float16PhysicalConverter : public PhysicalToLogicalConverter { size_t start_idx = to_float_column->size(); to_float_column->resize(start_idx + num_values); auto& to_float_column_data = to_float_column->get_data(); - const uint8_t* ptr = src_data->get_data().data(); + const auto* ptr = src_data->get_data().data(); for (int i = 0; i < num_values; ++i) { size_t offset = i * _type_length; - const uint8_t* data_ptr = ptr + offset; + const auto* data_ptr = ptr + offset; uint16_t raw; memcpy(&raw, data_ptr, sizeof(uint16_t)); float value = half_to_float(raw); diff --git a/be/src/vec/exec/format/parquet/parquet_predicate.h b/be/src/vec/exec/format/parquet/parquet_predicate.h index c390a50cb3793e..bd6c5cd6c209c9 100644 --- a/be/src/vec/exec/format/parquet/parquet_predicate.h +++ b/be/src/vec/exec/format/parquet/parquet_predicate.h @@ -311,8 +311,8 @@ class ParquetPredicate { auto logical_prim_type = logical_data_type->get_primitive_type(); if (logical_prim_type == TYPE_FLOAT) { - auto& min_value = min_field->get::CppType>(); - auto& max_value = max_field->get::CppType>(); + auto& min_value = min_field->get(); + auto& max_value = max_field->get(); if (std::isnan(min_value) || std::isnan(max_value)) { return Status::DataQualityError("Can not use this parquet min/max value."); @@ -325,8 +325,8 @@ class ParquetPredicate { max_value = 0.0F; } } else if (logical_prim_type == TYPE_DOUBLE) { - auto& min_value = min_field->get::CppType>(); - auto& max_value = max_field->get::CppType>(); + auto& min_value = min_field->get(); + auto& max_value = max_field->get(); if (std::isnan(min_value) || std::isnan(max_value)) { return Status::DataQualityError("Can not use this parquet min/max value."); @@ -340,8 +340,8 @@ class ParquetPredicate { } } else if (col_schema->parquet_schema.type == tparquet::Type::type::INT96 || logical_prim_type == TYPE_DATETIMEV2) { - auto min_value = min_field->get::CppType>(); - auto max_value = min_field->get::CppType>(); + auto min_value = min_field->get(); + auto max_value = min_field->get(); // From Trino: Parquet INT96 timestamp values were compared incorrectly // for the purposes of producing statistics by older parquet writers, diff --git a/be/src/vec/exec/jni_connector.h b/be/src/vec/exec/jni_connector.h index 5a08247f658074..7bcad9bdee8e5d 100644 --- a/be/src/vec/exec/jni_connector.h +++ b/be/src/vec/exec/jni_connector.h @@ -360,6 +360,7 @@ class JniConnector : public ProfileCollector { std::vector& meta_data); template + requires(!std::is_same_v) static Status _fill_fixed_length_column(MutableColumnPtr& doris_column, CPP_TYPE* ptr, size_t num_rows) { auto& column_data = assert_cast(*doris_column).get_data(); @@ -369,6 +370,19 @@ class JniConnector : public ProfileCollector { return Status::OK(); } + template + requires(std::is_same_v) + static Status _fill_fixed_length_column(MutableColumnPtr& doris_column, CPP_TYPE* ptr, + size_t num_rows) { + auto& column_data = assert_cast(*doris_column).get_data(); + size_t origin_size = column_data.size(); + column_data.resize(origin_size + num_rows); + for (size_t i = 0; i < num_rows; i++) { + column_data[origin_size + i] = DecimalV2Value(ptr[i]); + } + return Status::OK(); + } + template static long _get_fixed_length_column_address(const IColumn& doris_column) { return (long)assert_cast(doris_column).get_data().data(); diff --git a/be/src/vec/exprs/varray_literal.cpp b/be/src/vec/exprs/varray_literal.cpp index 3b7ec30727e099..3c95b82b9e2e21 100644 --- a/be/src/vec/exprs/varray_literal.cpp +++ b/be/src/vec/exprs/varray_literal.cpp @@ -49,7 +49,7 @@ Status VArrayLiteral::prepare(RuntimeState* state, const RowDescriptor& row_desc Field item; auto child_literal = std::dynamic_pointer_cast(child); child_literal->get_column_ptr()->get(0, item); - array.get().push_back(item); + array.get().push_back(item); } _column_ptr = _data_type->create_column_const(1, array); return Status::OK(); diff --git a/be/src/vec/exprs/vexpr.cpp b/be/src/vec/exprs/vexpr.cpp index 21c931b106e282..5cd9079bb913e5 100644 --- a/be/src/vec/exprs/vexpr.cpp +++ b/be/src/vec/exprs/vexpr.cpp @@ -190,145 +190,137 @@ TExprNode create_texpr_node_from(const vectorized::Field& field, const Primitive TExprNode node; switch (type) { case TYPE_BOOLEAN: { - const auto& storage = - static_cast(field.get::CppType>()); + const auto& storage = static_cast(field.get()); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_TINYINT: { - const auto& storage = static_cast( - field.get::CppType>()); + const auto& storage = static_cast(field.get()); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_SMALLINT: { - const auto& storage = static_cast( - field.get::CppType>()); + const auto& storage = static_cast(field.get()); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_INT: { - const auto& storage = - static_cast(field.get::CppType>()); + const auto& storage = static_cast(field.get()); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_BIGINT: { - const auto& storage = static_cast( - field.get::CppType>()); + const auto& storage = static_cast(field.get()); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_LARGEINT: { - const auto& storage = static_cast( - field.get::CppType>()); + const auto& storage = static_cast(field.get()); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_FLOAT: { - const auto& storage = - static_cast(field.get::CppType>()); + const auto& storage = static_cast(field.get()); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_DOUBLE: { - const auto& storage = static_cast( - field.get::CppType>()); + const auto& storage = static_cast(field.get()); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_DATEV2: { - const auto& storage = field.get::CppType>(); + const auto& storage = field.get(); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_DATETIMEV2: { - const auto& storage = field.get::CppType>(); + const auto& storage = field.get(); THROW_IF_ERROR( create_texpr_literal_node(&storage, &node, precision, scale)); break; } case TYPE_TIMESTAMPTZ: { - const auto& storage = field.get::CppType>(); + const auto& storage = field.get(); THROW_IF_ERROR( create_texpr_literal_node(&storage, &node, precision, scale)); break; } case TYPE_DATE: { - const auto& storage = field.get::CppType>(); + const auto& storage = field.get(); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_DATETIME: { - const auto& storage = field.get::CppType>(); + const auto& storage = field.get(); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_DECIMALV2: { - const auto& storage = field.get::CppType>(); + const auto& storage = field.get(); THROW_IF_ERROR( create_texpr_literal_node(&storage, &node, precision, scale)); break; } case TYPE_DECIMAL32: { - const auto& storage = field.get::CppType>(); + const auto& storage = field.get(); THROW_IF_ERROR( create_texpr_literal_node(&storage, &node, precision, scale)); break; } case TYPE_DECIMAL64: { - const auto& storage = field.get::CppType>(); + const auto& storage = field.get(); THROW_IF_ERROR( create_texpr_literal_node(&storage, &node, precision, scale)); break; } case TYPE_DECIMAL128I: { - const auto& storage = field.get::CppType>(); + const auto& storage = field.get(); THROW_IF_ERROR( create_texpr_literal_node(&storage, &node, precision, scale)); break; } case TYPE_DECIMAL256: { - const auto& storage = field.get::CppType>(); + const auto& storage = field.get(); THROW_IF_ERROR( create_texpr_literal_node(&storage, &node, precision, scale)); break; } case TYPE_CHAR: { - const auto& storage = field.get::CppType>(); + const auto& storage = field.get(); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_VARCHAR: { - const auto& storage = field.get::CppType>(); + const auto& storage = field.get(); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_STRING: { - const auto& storage = field.get::CppType>(); + const auto& storage = field.get(); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_IPV4: { - const auto& storage = field.get::CppType>(); + const auto& storage = field.get(); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_IPV6: { - const auto& storage = field.get::CppType>(); + const auto& storage = field.get(); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_TIMEV2: { - const auto& storage = field.get::CppType>(); + const auto& storage = field.get(); THROW_IF_ERROR(create_texpr_literal_node(&storage, &node)); break; } case TYPE_VARBINARY: { - const auto& svf = field.get::CppType>(); + const auto& svf = field.get(); THROW_IF_ERROR(create_texpr_literal_node(&svf, &node)); break; } diff --git a/be/src/vec/exprs/vmap_literal.cpp b/be/src/vec/exprs/vmap_literal.cpp index ef3dc8debcdaa9..87f6e3d67912b9 100644 --- a/be/src/vec/exprs/vmap_literal.cpp +++ b/be/src/vec/exprs/vmap_literal.cpp @@ -56,11 +56,11 @@ Status VMapLiteral::prepare(RuntimeState* state, const RowDescriptor& row_desc, VExpr::expr_without_cast(_children[idx + 1])); val_literal->get_column_ptr()->get(0, vf); - keys.get().push_back(kf); - values.get().push_back(vf); + keys.get().push_back(kf); + values.get().push_back(vf); } - map.get().push_back(keys); - map.get().push_back(values); + map.get().push_back(keys); + map.get().push_back(values); _column_ptr = _data_type->create_column_const(1, map); return Status::OK(); diff --git a/be/src/vec/exprs/vstruct_literal.cpp b/be/src/vec/exprs/vstruct_literal.cpp index ee6f08b3002723..da5069c9dec6c5 100644 --- a/be/src/vec/exprs/vstruct_literal.cpp +++ b/be/src/vec/exprs/vstruct_literal.cpp @@ -43,7 +43,7 @@ Status VStructLiteral::prepare(RuntimeState* state, const RowDescriptor& row_des Field item; auto child_literal = std::dynamic_pointer_cast(child); child_literal->get_column_ptr()->get(0, item); - struct_field.get().push_back(item); + struct_field.get().push_back(item); } _column_ptr = _data_type->create_column_const(1, struct_field); return Status::OK(); diff --git a/be/src/vec/functions/ai/ai_functions.cpp b/be/src/vec/functions/ai/ai_functions.cpp index a05ead9fa9c92e..c24a8f32b102d4 100644 --- a/be/src/vec/functions/ai/ai_functions.cpp +++ b/be/src/vec/functions/ai/ai_functions.cpp @@ -55,7 +55,7 @@ Status FunctionAIClassify::build_prompt(const Block& block, const ColumnNumbers& for (size_t i = start; i < end; ++i) { Field field; data.get(i, field); - label_values.emplace_back(field.get()); + label_values.emplace_back(field.template get()); } std::string labels_str = "["; @@ -97,7 +97,7 @@ Status FunctionAIExtract::build_prompt(const Block& block, const ColumnNumbers& for (size_t i = start; i < end; ++i) { Field field; data.get(i, field); - label_values.emplace_back(field.get()); + label_values.emplace_back(field.template get()); } std::string labels_str = "["; @@ -148,7 +148,7 @@ Status FunctionAIMask::build_prompt(const Block& block, const ColumnNumbers& arg for (size_t i = start; i < end; ++i) { Field field; data.get(i, field); - label_values.emplace_back(field.get()); + label_values.emplace_back(field.template get()); } std::string labels_str = "["; diff --git a/be/src/vec/functions/array/function_arrays_overlap.h b/be/src/vec/functions/array/function_arrays_overlap.h index f891c1b86e79aa..ec50150701661c 100644 --- a/be/src/vec/functions/array/function_arrays_overlap.h +++ b/be/src/vec/functions/array/function_arrays_overlap.h @@ -94,6 +94,43 @@ struct OverlapSetImpl { } }; +template <> +struct OverlapSetImpl { + using ElementNativeType = Int128; + using Set = phmap::flat_hash_set>; + Set set; + bool has_null = false; + + void insert_array(const IColumn* column, const UInt8* nullmap, size_t start, size_t size) { + const auto& vec = assert_cast(*column).get_data(); + for (size_t i = start; i < start + size; ++i) { + if (nullmap[i]) { + has_null = true; + continue; + } + set.insert(vec[i].value()); + } + } + + bool find_any(const IColumn* column, const UInt8* nullmap, size_t start, size_t size) { + const auto& vec = assert_cast(*column).get_data(); + for (size_t i = start; i < start + size; ++i) { + if (nullmap[i]) { + if (has_null) { + return true; + } else { + continue; + } + } + + if (set.contains(vec[i].value())) { + return true; + } + } + return false; + } +}; + template <> struct OverlapSetImpl { using Set = phmap::flat_hash_set>; @@ -210,7 +247,7 @@ class FunctionArraysOverlap : public IFunction { null_bitmap = null_bitmap_cache_handle.get_bitmap(); } std::unique_ptr query_param = nullptr; - const Array& query_val = param_value.get(); + const Array& query_val = param_value.get(); InvertedIndexParam param; param.column_name = data_type_with_name.first; diff --git a/be/src/vec/functions/binary_arithmetic.h b/be/src/vec/functions/binary_arithmetic.h index 10f5d7415fe7a0..6febb948ddcd1e 100644 --- a/be/src/vec/functions/binary_arithmetic.h +++ b/be/src/vec/functions/binary_arithmetic.h @@ -132,15 +132,30 @@ struct PlusMinusDecimalImpl { auto column_result = ColumnDecimal::create(1, res_data_type.get_scale()); if (check_overflow_for_decimal) { - column_result->get_element(0) = - typename PrimitiveTypeTraits::ColumnItemType( - apply(a, b, *type_left, *type_right, res_data_type, - max_result_number, scale_diff_multiplier)); + if constexpr (ResultType == TYPE_DECIMALV2) { + column_result->get_element(0) = + typename PrimitiveTypeTraits::ColumnItemType(apply( + a.value(), b.value(), *type_left, *type_right, res_data_type, + max_result_number, scale_diff_multiplier)); + } else { + column_result->get_element(0) = + typename PrimitiveTypeTraits::ColumnItemType( + apply(a, b, *type_left, *type_right, res_data_type, + max_result_number, scale_diff_multiplier)); + } + } else { - column_result->get_element(0) = - typename PrimitiveTypeTraits::ColumnItemType( - apply(a, b, *type_left, *type_right, res_data_type, - max_result_number, scale_diff_multiplier)); + if constexpr (ResultType == TYPE_DECIMALV2) { + column_result->get_element(0) = + typename PrimitiveTypeTraits::ColumnItemType(apply( + a.value(), b.value(), *type_left, *type_right, res_data_type, + max_result_number, scale_diff_multiplier)); + } else { + column_result->get_element(0) = + typename PrimitiveTypeTraits::ColumnItemType( + apply(a, b, *type_left, *type_right, res_data_type, + max_result_number, scale_diff_multiplier)); + } } return column_result; } @@ -162,10 +177,18 @@ struct PlusMinusDecimalImpl { std::visit( [&](auto check_overflow_for_decimal) { for (size_t i = 0; i < column_left->size(); ++i) { - c[i] = typename DataTypeDecimal::FieldType( - apply(a[i], b, *type_left, *type_right, - res_data_type, max_result_number, - scale_diff_multiplier)); + if constexpr (ResultType == TYPE_DECIMALV2) { + c[i] = typename DataTypeDecimal::FieldType( + apply( + a[i].value(), b.value(), *type_left, *type_right, + res_data_type, max_result_number, + scale_diff_multiplier)); + } else { + c[i] = typename DataTypeDecimal::FieldType( + apply( + a[i], b, *type_left, *type_right, res_data_type, + max_result_number, scale_diff_multiplier)); + } } }, make_bool_variant(check_overflow_for_decimal)); @@ -189,10 +212,18 @@ struct PlusMinusDecimalImpl { std::visit( [&](auto check_overflow_for_decimal) { for (size_t i = 0; i < column_right->size(); ++i) { - c[i] = typename DataTypeDecimal::FieldType( - apply(a, b[i], *type_left, *type_right, - res_data_type, max_result_number, - scale_diff_multiplier)); + if constexpr (ResultType == TYPE_DECIMALV2) { + c[i] = typename DataTypeDecimal::FieldType( + apply( + a.value(), b[i].value(), *type_left, *type_right, + res_data_type, max_result_number, + scale_diff_multiplier)); + } else { + c[i] = typename DataTypeDecimal::FieldType( + apply( + a, b[i], *type_left, *type_right, res_data_type, + max_result_number, scale_diff_multiplier)); + } } }, make_bool_variant(check_overflow_for_decimal)); @@ -233,8 +264,9 @@ struct PlusMinusDecimalImpl { DecimalV2Value(b[i]).to_string(), DecimalV2Value(i128_mul_result).to_string(), "decimalv2"); } - c[i] = (i128_mul_result - sgn[i]) / DecimalV2Value::ONE_BILLION + sgn[i]; - if (c[i].value > max.value() || c[i].value < min.value()) { + c[i] = DecimalV2Value((i128_mul_result - sgn[i]) / DecimalV2Value::ONE_BILLION + + sgn[i]); + if (c[i].value() > max.value() || c[i].value() < min.value()) { throw Exception(ErrorCode::ARITHMETIC_OVERFLOW_ERRROR, "Arithmetic overflow: {} {} {} = {}, result type: {}", DecimalV2Value(a[i]).to_string(), "add", @@ -242,9 +274,10 @@ struct PlusMinusDecimalImpl { DecimalV2Value(i128_mul_result).to_string(), "decimalv2"); } } else { - c[i] = (DecimalV2Value(a[i]).value() * DecimalV2Value(b[i]).value() - sgn[i]) / - DecimalV2Value::ONE_BILLION + - sgn[i]; + c[i] = DecimalV2Value( + (DecimalV2Value(a[i]).value() * DecimalV2Value(b[i]).value() - sgn[i]) / + DecimalV2Value::ONE_BILLION + + sgn[i]); } } } @@ -274,10 +307,18 @@ struct PlusMinusDecimalImpl { std::visit( [&](auto check_overflow_for_decimal) { for (size_t i = 0; i < sz; i++) { - c[i] = typename ColumnDecimal::value_type( - apply( - a[i], b[i], *type_left, *type_right, res_data_type, - max_result_number, scale_diff_multiplier)); + if constexpr (ResultType == TYPE_DECIMALV2) { + c[i] = typename ColumnDecimal::value_type( + apply( + a[i].value(), b[i].value(), *type_left, *type_right, + res_data_type, max_result_number, + scale_diff_multiplier)); + } else { + c[i] = typename ColumnDecimal::value_type( + apply( + a[i], b[i], *type_left, *type_right, res_data_type, + max_result_number, scale_diff_multiplier)); + } } }, make_bool_variant(check_overflow_for_decimal)); @@ -295,7 +336,7 @@ struct PlusMinusDecimalImpl { // Now, Doris only support decimal +-*/ decimal. if constexpr (check_overflow) { auto res = Impl::apply(DecimalV2Value(a), DecimalV2Value(b)).value(); - if (res > max_result_number.value || res < -max_result_number.value) { + if (res > max_result_number.value() || res < -max_result_number.value()) { throw Exception(ErrorCode::ARITHMETIC_OVERFLOW_ERRROR, "Arithmetic overflow: {} {} {} = {}, result type: {}", DecimalV2Value(a).to_string(), "add", diff --git a/be/src/vec/functions/cast/cast_to_basic_number_common.h b/be/src/vec/functions/cast/cast_to_basic_number_common.h index ff597d238ad52a..993559b4d22138 100644 --- a/be/src/vec/functions/cast/cast_to_basic_number_common.h +++ b/be/src/vec/functions/cast/cast_to_basic_number_common.h @@ -151,7 +151,8 @@ struct CastToInt { template requires(IsCppTypeInt && - std::is_same_v::ColumnItemType>) + (std::is_same_v::ColumnItemType> || + std::is_same_v::CppType>)) static inline bool from_bool(FromCppT from, ToCppT& to, CastParameters& params) { CastUtil::static_cast_set(to, from); return true; @@ -224,7 +225,31 @@ struct CastToInt { } template - requires(IsCppTypeInt && IsDecimalNumber) + requires(IsCppTypeInt && IsDecimalV2) + static inline bool _from_decimal(FromCppT from, UInt32 from_precision, UInt32 from_scale, + ToCppT& to, + const typename FromCppT::NativeType& scale_multiplier, + bool narrow_integral, CastParameters& params) { + constexpr auto min_result = std::numeric_limits::lowest(); + constexpr auto max_result = std::numeric_limits::max(); + auto tmp = from.value() / scale_multiplier; + if (narrow_integral) { + if (tmp < min_result || tmp > max_result) { + params.status = Status::Error( + ErrorCode::ARITHMETIC_OVERFLOW_ERRROR, + fmt::format("Arithmetic overflow when converting " + "value {} from type {} to type {}", + decimal_to_string(from.value(), from_scale), + type_to_string(FromCppT::PType), int_type_name)); + return false; + } + } + to = static_cast(tmp); + return true; + } + + template + requires(IsCppTypeInt && IsDecimalNumber && !IsDecimal128V2) static inline bool _from_decimal(FromCppT from, UInt32 from_precision, UInt32 from_scale, ToCppT& to, const typename FromCppT::NativeType& scale_multiplier, @@ -294,7 +319,8 @@ struct CastToFloat { } template requires(IsCppTypeFloat && - std::is_same_v::ColumnItemType>) + (std::is_same_v::ColumnItemType> || + std::is_same_v::CppType>)) static inline bool from_bool(const FromCppT& from, ToCppT& to, CastParameters& params) { CastUtil::static_cast_set(to, from); return true; @@ -325,7 +351,7 @@ struct CastToFloat { } } template - requires(IsCppTypeFloat && IsDecimalNumber) + requires(IsCppTypeFloat && IsDecimalNumber && !IsDecimalV2) static inline bool _from_decimalv3(const FromCppT& from, UInt32 from_scale, ToCppT& to, const typename FromCppT::NativeType& scale_multiplier, CastParameters& params) { @@ -333,6 +359,15 @@ struct CastToFloat { static_cast(scale_multiplier)); return true; } + template + requires(IsCppTypeFloat && IsDecimalV2) + static inline bool _from_decimalv3(const FromCppT& from, UInt32 from_scale, ToCppT& to, + const typename FromCppT::NativeType& scale_multiplier, + CastParameters& params) { + to = static_cast(static_cast(from.value()) / + static_cast(scale_multiplier)); + return true; + } // cast from date and datetime to float/double, will not overflow template requires(IsCppTypeFloat && (IsCppTypeDate || IsCppTypeDateTime)) diff --git a/be/src/vec/functions/cast/cast_to_boolean.h b/be/src/vec/functions/cast/cast_to_boolean.h index cce2926f8f27c5..99cbd79fb64147 100644 --- a/be/src/vec/functions/cast/cast_to_boolean.h +++ b/be/src/vec/functions/cast/cast_to_boolean.h @@ -92,9 +92,9 @@ inline bool CastToBool::from_decimal(const Decimal64& from, UInt8& to, UInt32, U } template <> -inline bool CastToBool::from_decimal(const Decimal128V2& from, UInt8& to, UInt32, UInt32, +inline bool CastToBool::from_decimal(const DecimalV2Value& from, UInt8& to, UInt32, UInt32, CastParameters&) { - to = (from.value != 0); + to = (from.value() != 0); return true; } diff --git a/be/src/vec/functions/cast/cast_to_decimal.h b/be/src/vec/functions/cast/cast_to_decimal.h index 330886f093c479..2e5222a9742a72 100644 --- a/be/src/vec/functions/cast/cast_to_decimal.h +++ b/be/src/vec/functions/cast/cast_to_decimal.h @@ -127,7 +127,7 @@ struct CastToDecimal { } template - requires(IsDecimalNumber && IsCppTypeFloat) + requires(IsDecimalNumber && IsCppTypeFloat && !IsDecimal128V2) static inline bool _from_float(const FromCppT& from, ToCppT& to, UInt32 to_precision, UInt32 to_scale, const typename ToCppT::NativeType& scale_multiplier, @@ -152,10 +152,40 @@ struct CastToDecimal { } return false; } - to.value = static_cast(static_cast( + to.value = static_cast(static_cast( from * static_cast(scale_multiplier) + ((from >= 0) ? 0.5 : -0.5))); return true; } + template + requires(IsDecimal128V2 && IsCppTypeFloat) + static inline bool _from_float(const FromCppT& from, ToCppT& to, UInt32 to_precision, + UInt32 to_scale, + const typename ToCppT::NativeType& scale_multiplier, + const typename ToCppT::NativeType& min_result, + const typename ToCppT::NativeType& max_result, + CastParameters& params) { + if (!std::isfinite(from)) { + params.status = Status(ErrorCode::ARITHMETIC_OVERFLOW_ERRROR, + "Decimal convert overflow. Cannot convert infinity or NaN " + "to decimal"); + return false; + } + // For decimal256, we need to use long double to avoid overflow when + // static casting the multiplier to floating type, and also to be as precise as possible; + // For other decimal types, we use double to be as precise as possible. + using DoubleType = std::conditional_t, long double, double>; + DoubleType tmp = from * static_cast(scale_multiplier); + if (tmp <= DoubleType(min_result) || tmp >= DoubleType(max_result)) { + if (params.is_strict) { + params.status = DECIMAL_CONVERT_OVERFLOW_ERROR(from, "float/double", to_precision, + to_scale); + } + return false; + } + to = DecimalV2Value(static_cast(static_cast( + from * static_cast(scale_multiplier) + ((from >= 0) ? 0.5 : -0.5)))); + return true; + } template (from.value), scale_multiplier, - res)) { - if (params.is_strict) { - params.status = DECIMAL_CONVERT_OVERFLOW_ERROR( - decimal_to_string(from.value, scale_from), - fmt::format("decimal({}, {})", precision_from, scale_from), - precision_to, scale_to); + if constexpr (IsDecimal128V2) { + if (common::mul_overflow(static_cast(from.value()), scale_multiplier, + res)) { + if (params.is_strict) { + params.status = DECIMAL_CONVERT_OVERFLOW_ERROR( + decimal_to_string(from.value(), scale_from), + fmt::format("decimal({}, {})", precision_from, scale_from), + precision_to, scale_to); + } + return false; + } else { + if (UNLIKELY(res > max_result || res < -max_result)) { + if (params.is_strict) { + params.status = DECIMAL_CONVERT_OVERFLOW_ERROR( + decimal_to_string(from.value(), scale_from), + fmt::format("decimal({}, {})", precision_from, scale_from), + precision_to, scale_to); + } + return false; + } else { + to = ToCppT(res); + } } - return false; } else { - if (UNLIKELY(res > max_result || res < -max_result)) { + if (common::mul_overflow(static_cast(from.value), scale_multiplier, + res)) { if (params.is_strict) { params.status = DECIMAL_CONVERT_OVERFLOW_ERROR( decimal_to_string(from.value, scale_from), @@ -333,18 +378,41 @@ struct CastToDecimal { } return false; } else { - to = ToCppT(res); + if (UNLIKELY(res > max_result || res < -max_result)) { + if (params.is_strict) { + params.status = DECIMAL_CONVERT_OVERFLOW_ERROR( + decimal_to_string(from.value, scale_from), + fmt::format("decimal({}, {})", precision_from, scale_from), + precision_to, scale_to); + } + return false; + } else { + to = ToCppT(res); + } } } } else { - res = from.value * scale_multiplier; + if constexpr (IsDecimal128V2) { + res = from.value() * scale_multiplier; + } else { + res = from.value * scale_multiplier; + } if constexpr (narrow_integral) { if (UNLIKELY(res > max_result || res < -max_result)) { - if (params.is_strict) { - params.status = DECIMAL_CONVERT_OVERFLOW_ERROR( - decimal_to_string(from.value, scale_from), - fmt::format("decimal({}, {})", precision_from, scale_from), - precision_to, scale_to); + if constexpr (IsDecimal128V2) { + if (params.is_strict) { + params.status = DECIMAL_CONVERT_OVERFLOW_ERROR( + decimal_to_string(from.value(), scale_from), + fmt::format("decimal({}, {})", precision_from, scale_from), + precision_to, scale_to); + } + } else { + if (params.is_strict) { + params.status = DECIMAL_CONVERT_OVERFLOW_ERROR( + decimal_to_string(from.value, scale_from), + fmt::format("decimal({}, {})", precision_from, scale_from), + precision_to, scale_to); + } } return false; } @@ -362,18 +430,33 @@ struct CastToDecimal { const typename ToCppT::NativeType& min_result, const typename ToCppT::NativeType& max_result, CastParameters& params) { - if constexpr (narrow_integral) { - if (UNLIKELY(from.value > max_result || from.value < -max_result)) { - if (params.is_strict) { - params.status = DECIMAL_CONVERT_OVERFLOW_ERROR( - decimal_to_string(from.value, scale_from), - fmt::format("decimal({}, {})", precision_from, scale_from), - precision_to, scale_to); + if constexpr (IsDecimal128V2) { + if constexpr (narrow_integral) { + if (UNLIKELY(from.value() > max_result || from.value() < -max_result)) { + if (params.is_strict) { + params.status = DECIMAL_CONVERT_OVERFLOW_ERROR( + decimal_to_string(from.value(), scale_from), + fmt::format("decimal({}, {})", precision_from, scale_from), + precision_to, scale_to); + } + return false; } - return false; } + to = ToCppT(from.value()); + } else { + if constexpr (narrow_integral) { + if (UNLIKELY(from.value > max_result || from.value < -max_result)) { + if (params.is_strict) { + params.status = DECIMAL_CONVERT_OVERFLOW_ERROR( + decimal_to_string(from.value, scale_from), + fmt::format("decimal({}, {})", precision_from, scale_from), + precision_to, scale_to); + } + return false; + } + } + to = ToCppT(from.value); } - to = ToCppT(from.value); return true; } @@ -397,35 +480,69 @@ struct CastToDecimal { MaxNativeType res; if (from >= FromCppT(0)) { if constexpr (narrow_integral) { - res = (from.value + scale_multiplier / 2) / scale_multiplier; - if (UNLIKELY(res > max_result)) { - if (params.is_strict) { - params.status = DECIMAL_CONVERT_OVERFLOW_ERROR( - decimal_to_string(from.value, scale_from), - fmt::format("decimal({}, {})", precision_from, scale_from), - precision_to, scale_to); + if constexpr (IsDecimal128V2) { + res = (from.value() + scale_multiplier / 2) / scale_multiplier; + if (UNLIKELY(res > max_result)) { + if (params.is_strict) { + params.status = DECIMAL_CONVERT_OVERFLOW_ERROR( + decimal_to_string(from.value(), scale_from), + fmt::format("decimal({}, {})", precision_from, scale_from), + precision_to, scale_to); + } + return false; + } + } else { + res = (from.value + scale_multiplier / 2) / scale_multiplier; + if (UNLIKELY(res > max_result)) { + if (params.is_strict) { + params.status = DECIMAL_CONVERT_OVERFLOW_ERROR( + decimal_to_string(from.value, scale_from), + fmt::format("decimal({}, {})", precision_from, scale_from), + precision_to, scale_to); + } + return false; } - return false; } to = ToCppT(res); } else { - to = ToCppT((from.value + scale_multiplier / 2) / scale_multiplier); + if constexpr (IsDecimal128V2) { + to = ToCppT((from.value() + scale_multiplier / 2) / scale_multiplier); + } else { + to = ToCppT((from.value + scale_multiplier / 2) / scale_multiplier); + } } } else { if constexpr (narrow_integral) { - res = (from.value - scale_multiplier / 2) / scale_multiplier; - if (UNLIKELY(res < -max_result)) { - if (params.is_strict) { - params.status = DECIMAL_CONVERT_OVERFLOW_ERROR( - decimal_to_string(from.value, scale_from), - fmt::format("decimal({}, {})", precision_from, scale_from), - precision_to, scale_to); + if constexpr (IsDecimal128V2) { + res = (from.value() - scale_multiplier / 2) / scale_multiplier; + if (UNLIKELY(res < -max_result)) { + if (params.is_strict) { + params.status = DECIMAL_CONVERT_OVERFLOW_ERROR( + decimal_to_string(from.value(), scale_from), + fmt::format("decimal({}, {})", precision_from, scale_from), + precision_to, scale_to); + } + return false; + } + } else { + res = (from.value - scale_multiplier / 2) / scale_multiplier; + if (UNLIKELY(res < -max_result)) { + if (params.is_strict) { + params.status = DECIMAL_CONVERT_OVERFLOW_ERROR( + decimal_to_string(from.value, scale_from), + fmt::format("decimal({}, {})", precision_from, scale_from), + precision_to, scale_to); + } + return false; } - return false; } to = ToCppT(res); } else { - to = ToCppT((from.value - scale_multiplier / 2) / scale_multiplier); + if constexpr (IsDecimal128V2) { + to = ToCppT((from.value() - scale_multiplier / 2) / scale_multiplier); + } else { + to = ToCppT((from.value - scale_multiplier / 2) / scale_multiplier); + } } } return true; @@ -435,7 +552,7 @@ struct CastToDecimal { typename MaxNativeType = std::conditional_t<(sizeof(FromCppT) > sizeof(typename ToCppT::NativeType)), FromCppT, typename ToCppT::NativeType>> - requires(IsDecimalNumber && + requires(IsDecimalNumber && !IsDecimal128V2 && (IsCppTypeInt || std::is_same_v)) static inline bool _from_int(const FromCppT& from, ToCppT& to, UInt32 precision, UInt32 scale, const MaxNativeType& scale_multiplier, @@ -477,6 +594,53 @@ struct CastToDecimal { return true; } + + template sizeof(typename ToCppT::NativeType)), + FromCppT, typename ToCppT::NativeType>> + requires(IsDecimalV2 && + (IsCppTypeInt || std::is_same_v)) + static inline bool _from_int(const FromCppT& from, ToCppT& to, UInt32 precision, UInt32 scale, + const MaxNativeType& scale_multiplier, + const typename ToCppT::NativeType& min_result, + const typename ToCppT::NativeType& max_result, + CastParameters& params) { + MaxNativeType tmp; + if constexpr (multiply_may_overflow) { + if (common::mul_overflow(static_cast(from), scale_multiplier, tmp)) { + if (params.is_strict) { + params.status = DECIMAL_CONVERT_OVERFLOW_ERROR(from, int_type_name, + precision, scale); + } + return false; + } + if constexpr (narrow_integral) { + if (tmp < min_result || tmp > max_result) { + if (params.is_strict) { + params.status = DECIMAL_CONVERT_OVERFLOW_ERROR( + from, int_type_name, precision, scale); + } + return false; + } + } + to = DecimalV2Value(static_cast(tmp)); + } else { + tmp = scale_multiplier * from; + if constexpr (narrow_integral) { + if (tmp < min_result || tmp > max_result) { + if (params.is_strict) { + params.status = DECIMAL_CONVERT_OVERFLOW_ERROR( + from, int_type_name, precision, scale); + } + return false; + } + } + to = DecimalV2Value(static_cast(tmp)); + } + + return true; + } }; // Casting from string to decimal types. diff --git a/be/src/vec/functions/cast/cast_to_int.h b/be/src/vec/functions/cast/cast_to_int.h index cdb7a6709afb96..3acc165dbfe006 100644 --- a/be/src/vec/functions/cast/cast_to_int.h +++ b/be/src/vec/functions/cast/cast_to_int.h @@ -182,7 +182,7 @@ class CastToImpl : public CastToBase { params.is_strict = (CastMode == CastModeType::StrictMode); size_t size = vec_from.size(); typename FromFieldType::NativeType scale_multiplier = - DataTypeDecimal::get_scale_multiplier(from_scale); + DataTypeDecimal::get_scale_multiplier(from_scale); for (size_t i = 0; i < size; i++) { if (!CastToInt::_from_decimal( diff --git a/be/src/vec/functions/cast/cast_to_string.h b/be/src/vec/functions/cast/cast_to_string.h index 0a2b9d08846072..5be5cddf489b85 100644 --- a/be/src/vec/functions/cast/cast_to_string.h +++ b/be/src/vec/functions/cast/cast_to_string.h @@ -398,6 +398,13 @@ inline void CastToString::push_decimal(const Decimal128V2& from, UInt32 scale, B bw.write(str.data(), str.size()); } +template <> +inline void CastToString::push_decimal(const DecimalV2Value& from, UInt32 scale, + BufferWritable& bw) { + std::string str = from.to_string(scale); + bw.write(str.data(), str.size()); +} + // DATEV1 DATETIMEV1 inline std::string CastToString::from_date_or_datetime(const VecDateTimeValue& from) { char buf[64]; diff --git a/be/src/vec/functions/divide.cpp b/be/src/vec/functions/divide.cpp index 7e140af4a100ac..23b832d6617012 100644 --- a/be/src/vec/functions/divide.cpp +++ b/be/src/vec/functions/divide.cpp @@ -445,7 +445,7 @@ struct DivideDecimalImpl { } template - requires(is_decimal(ResultType)) + requires(is_decimal(ResultType) && ResultType != TYPE_DECIMALV2) static ColumnPtr constant_constant( ArgA a, ArgB b, const typename PrimitiveTypeTraits::CppType& max_result_number, @@ -470,7 +470,32 @@ struct DivideDecimalImpl { } template - requires(is_decimal(ResultType)) + requires(ResultType == TYPE_DECIMALV2) + static ColumnPtr constant_constant( + ArgA a, ArgB b, + const typename PrimitiveTypeTraits::CppType& max_result_number, + const typename PrimitiveTypeTraits::CppType& scale_diff_multiplier, + const DataTypeDecimal& res_data_type, bool check_overflow_for_decimal) { + auto column_result = ColumnDecimal::create(1, res_data_type.get_scale()); + + auto null_map = ColumnUInt8::create(1, 0); + if (check_overflow_for_decimal) { + column_result->get_element(0) = + typename PrimitiveTypeTraits::ColumnItemType( + apply(a.value(), b.value(), null_map->get_element(0), + max_result_number)); + } else { + column_result->get_element(0) = + typename PrimitiveTypeTraits::ColumnItemType( + apply(a.value(), b.value(), null_map->get_element(0), + max_result_number)); + } + + return ColumnNullable::create(std::move(column_result), std::move(null_map)); + } + + template + requires(is_decimal(ResultType) && ResultType != TYPE_DECIMALV2) static ColumnPtr vector_constant( ColumnPtr column_left, ArgB b, const typename PrimitiveTypeTraits::CppType& max_result_number, @@ -502,7 +527,39 @@ struct DivideDecimalImpl { } template - requires(is_decimal(ResultType)) + requires(ResultType == TYPE_DECIMALV2) + static ColumnPtr vector_constant( + ColumnPtr column_left, ArgB b, + const typename PrimitiveTypeTraits::CppType& max_result_number, + const typename PrimitiveTypeTraits::CppType& scale_diff_multiplier, + const DataTypeDecimal& res_data_type, bool check_overflow_for_decimal) { + const auto* column_left_ptr = assert_cast(column_left.get()); + auto column_result = + ColumnDecimal::create(column_left->size(), res_data_type.get_scale()); + DCHECK(column_left_ptr != nullptr); + + auto null_map = ColumnUInt8::create(column_left->size(), 0); + const auto& a = column_left_ptr->get_data().data(); + const auto& c = column_result->get_data().data(); + auto& n = null_map->get_data(); + auto sz = column_left->size(); + if (check_overflow_for_decimal) { + for (size_t i = 0; i < sz; ++i) { + c[i] = typename DataTypeDecimal::FieldType( + apply(a[i].value(), b.value(), n[i], max_result_number)); + } + } else { + for (size_t i = 0; i < sz; ++i) { + c[i] = typename DataTypeDecimal::FieldType( + apply(a[i].value(), b.value(), n[i], max_result_number)); + } + } + + return ColumnNullable::create(std::move(column_result), std::move(null_map)); + } + + template + requires(is_decimal(ResultType) && ResultType != TYPE_DECIMALV2) static ColumnPtr constant_vector( ArgA a, ColumnPtr column_right, const typename PrimitiveTypeTraits::CppType& max_result_number, @@ -533,6 +590,38 @@ struct DivideDecimalImpl { return ColumnNullable::create(std::move(column_result), std::move(null_map)); } + template + requires(ResultType == TYPE_DECIMALV2) + static ColumnPtr constant_vector( + ArgA a, ColumnPtr column_right, + const typename PrimitiveTypeTraits::CppType& max_result_number, + const typename PrimitiveTypeTraits::CppType& scale_diff_multiplier, + const DataTypeDecimal& res_data_type, bool check_overflow_for_decimal) { + const auto* column_right_ptr = assert_cast(column_right.get()); + auto column_result = + ColumnDecimal::create(column_right->size(), res_data_type.get_scale()); + DCHECK(column_right_ptr != nullptr); + + auto null_map = ColumnUInt8::create(column_right->size(), 0); + const auto& b = column_right_ptr->get_data().data(); + const auto& c = column_result->get_data().data(); + auto& n = null_map->get_data(); + auto sz = column_right->size(); + if (check_overflow_for_decimal) { + for (size_t i = 0; i < sz; ++i) { + c[i] = typename DataTypeDecimal::FieldType( + apply(a.value(), b[i].value(), n[i], max_result_number)); + } + } else { + for (size_t i = 0; i < sz; ++i) { + c[i] = typename DataTypeDecimal::FieldType( + apply(a.value(), b[i].value(), n[i], max_result_number)); + } + } + + return ColumnNullable::create(std::move(column_result), std::move(null_map)); + } + template requires(is_decimal(ResultType)) static ColumnPtr vector_vector( @@ -557,13 +646,13 @@ struct DivideDecimalImpl { if constexpr (TypeA == TYPE_DECIMALV2) { if (check_overflow_for_decimal) { for (size_t i = 0; i < sz; ++i) { - c[i] = Decimal128V2( - apply(a[i], b[i], n[i], max_result_number)); + c[i] = DecimalV2Value(apply(a[i].value(), b[i].value(), + n[i], max_result_number)); } } else { for (size_t i = 0; i < sz; ++i) { - c[i] = Decimal128V2(apply(a[i].value, b[i].value, n[i], - max_result_number)); + c[i] = DecimalV2Value(apply(a[i].value(), b[i].value(), + n[i], max_result_number)); } } } else { diff --git a/be/src/vec/functions/function_datetime_floor_ceil.cpp b/be/src/vec/functions/function_datetime_floor_ceil.cpp index 4cf0f6af85e2dc..1a93d094919d63 100644 --- a/be/src/vec/functions/function_datetime_floor_ceil.cpp +++ b/be/src/vec/functions/function_datetime_floor_ceil.cpp @@ -98,9 +98,9 @@ struct YearFloor; template class FunctionDateTimeFloorCeil : public IFunction { public: - using DateType = PrimitiveTypeTraits::DataType; - using DateValueType = PrimitiveTypeTraits::CppType; - using NativeType = PrimitiveTypeTraits::CppNativeType; + using DateType = typename PrimitiveTypeTraits::DataType; + using DateValueType = typename PrimitiveTypeTraits::CppType; + using NativeType = typename PrimitiveTypeTraits::CppNativeType; using DeltaDataType = DataTypeInt32; // return date type = DateType static constexpr auto name = Flag::name; @@ -186,7 +186,7 @@ class FunctionDateTimeFloorCeil : public IFunction { if (remove_nullable(block.get_by_position(arguments[1]).type) ->get_primitive_type() == PrimitiveType::TYPE_INT) { // time_round(datetime,const(period)) - Int32 period = (*argument_columns[1])[0].get(); + Int32 period = (*argument_columns[1])[0].get(); bool period_is_null = block.get_by_position(arguments[1]).type->is_nullable() && block.get_by_position(arguments[1]).column->is_null_at(0); if (period < 1 && !period_is_null) [[unlikely]] { @@ -197,7 +197,7 @@ class FunctionDateTimeFloorCeil : public IFunction { } else { // time_round(datetime, const(origin)) vector_const_anchor(sources->get_data(), - (*argument_columns[1])[0].get(), + (*argument_columns[1])[0].get().to_date_int_val(), col_to->get_data(), result_null_map); } } else { @@ -217,8 +217,8 @@ class FunctionDateTimeFloorCeil : public IFunction { } else { // 3 arg, time_round(datetime, period, origin) if (col_const[1] && col_const[2]) { // time_round(datetime, const(period), const(origin)) - Int32 period = (*argument_columns[1])[0].get(); - NativeType origin = (*argument_columns[2])[0].get(); + Int32 period = (*argument_columns[1])[0].get(); + NativeType origin = (*argument_columns[2])[0].get().to_date_int_val(); bool period_is_null = block.get_by_position(arguments[1]).type->is_nullable() && block.get_by_position(arguments[1]).column->is_null_at(0); if (period < 1 && !period_is_null) [[unlikely]] { @@ -230,7 +230,7 @@ class FunctionDateTimeFloorCeil : public IFunction { const auto arg2_column = check_and_get_column>(*argument_columns[2]); // time_round(datetime, const(period), origin) - Int32 period = (*argument_columns[1])[0].get(); + Int32 period = (*argument_columns[1])[0].get(); bool period_is_null = block.get_by_position(arguments[1]).type->is_nullable() && block.get_by_position(arguments[1]).column->is_null_at(0); if (period < 1 && !period_is_null) [[unlikely]] { @@ -242,8 +242,8 @@ class FunctionDateTimeFloorCeil : public IFunction { const auto* arg1_column = check_and_get_column(*argument_columns[1]); // time_round(datetime, period, const(origin)) vector_vector_const(sources->get_data(), arg1_column->get_data(), - (*argument_columns[2])[0].get(), col_to->get_data(), - result_null_map); + (*argument_columns[2])[0].get().to_date_int_val(), + col_to->get_data(), result_null_map); } else { const auto* arg1_column = check_and_get_column(*argument_columns[1]); const auto arg2_column = diff --git a/be/src/vec/functions/function_dict_get_many.cpp b/be/src/vec/functions/function_dict_get_many.cpp index 744639b92684c3..8ac78fda495b05 100644 --- a/be/src/vec/functions/function_dict_get_many.cpp +++ b/be/src/vec/functions/function_dict_get_many.cpp @@ -97,10 +97,11 @@ class FunctionDictGetMany : public IFunction { // dict get many(name, array, struct) -> struct // get value names - const Array array_names = (*block.get_by_position(arguments[1]).column)[0].get(); + const Array array_names = + (*block.get_by_position(arguments[1]).column)[0].get(); std::vector attribute_names; for (auto field : array_names) { - attribute_names.push_back(field.get()); + attribute_names.push_back(field.template get()); } const auto dict = dict_state->dict; diff --git a/be/src/vec/functions/function_string.h b/be/src/vec/functions/function_string.h index e8c2afac6270e2..fd020e13a4ec1b 100644 --- a/be/src/vec/functions/function_string.h +++ b/be/src/vec/functions/function_string.h @@ -3204,8 +3204,7 @@ struct MoneyFormatDecimalImpl { size_t input_rows_count) { if (auto* decimalv2_column = check_and_get_column(*col_ptr)) { for (size_t i = 0; i < input_rows_count; i++) { - const Decimal128V2& dec128 = decimalv2_column->get_element(i); - DecimalV2Value value = DecimalV2Value(dec128.value); + const auto& value = decimalv2_column->get_element(i); // unified_frac_value has 3 digits auto unified_frac_value = value.frac_value() / 1000000; StringRef str = @@ -3435,8 +3434,7 @@ struct FormatRoundDecimalImpl { "The second argument is {}, it should be in range [0, 1024].", decimal_places); } - const Decimal128V2& dec128 = decimalv2_column->get_element(i); - auto value = DecimalV2Value(dec128.value); + const auto& value = decimalv2_column->get_element(i); // unified_frac_value has 3 digits auto unified_frac_value = value.frac_value() / 1000000; StringRef str = diff --git a/be/src/vec/functions/function_variant_type.cpp b/be/src/vec/functions/function_variant_type.cpp index 434fe3da938a5e..5faa4d3b395316 100644 --- a/be/src/vec/functions/function_variant_type.cpp +++ b/be/src/vec/functions/function_variant_type.cpp @@ -45,10 +45,10 @@ class FunctionVariantType : public IFunction { size_t row) const { std::map result; Field field = column[row]; - const auto& variant_map = field.get(); + const auto& variant_map = field.get(); for (const auto& [key, value] : variant_map) { if (key.empty() && value.base_scalar_type_id == PrimitiveType::TYPE_JSONB && - value.num_dimensions == 0 && value.field.get().get_size() == 0) { + value.num_dimensions == 0 && value.field.get().get_size() == 0) { // ignore empty jsonb root, it's tricky here continue; } diff --git a/be/src/vec/functions/functions_multi_string_position.cpp b/be/src/vec/functions/functions_multi_string_position.cpp index e23d97964c2080..d0f2223c869ea5 100644 --- a/be/src/vec/functions/functions_multi_string_position.cpp +++ b/be/src/vec/functions/functions_multi_string_position.cpp @@ -197,7 +197,8 @@ struct FunctionMultiSearchAllPositionsImpl { if (!is_string_type(needle.get_type())) { return Status::InvalidArgument("invalid type of needle {}", needle.get_type_name()); } - searchers.emplace_back(needle.get().data, needle.get().size); + searchers.emplace_back(needle.get().data(), + needle.get().size()); } const size_t haystack_size = haystack_offsets.size(); diff --git a/be/src/vec/functions/functions_multi_string_search.cpp b/be/src/vec/functions/functions_multi_string_search.cpp index 76897cc8749d58..e3bc3cc08ab75a 100644 --- a/be/src/vec/functions/functions_multi_string_search.cpp +++ b/be/src/vec/functions/functions_multi_string_search.cpp @@ -237,7 +237,8 @@ struct FunctionMultiMatchAnyImpl { std::vector needles; needles.reserve(needles_arr.size()); for (const auto& needle : needles_arr) { - needles.emplace_back(needle.get()); + const auto& tmp = needle.get(); + needles.emplace_back(StringRef {tmp.data(), tmp.size()}); } res.resize(haystack_offsets.size()); diff --git a/be/src/vec/functions/math.cpp b/be/src/vec/functions/math.cpp index e7673d2c700a44..deb298ee8586ef 100644 --- a/be/src/vec/functions/math.cpp +++ b/be/src/vec/functions/math.cpp @@ -216,7 +216,9 @@ struct AbsImpl { static constexpr PrimitiveType ResultType = NumberTraits::ResultOfAbs::Type; using DataType = typename PrimitiveTypeTraits::DataType; static inline typename PrimitiveTypeTraits::ColumnItemType apply(A a) { - if constexpr (IsDecimalNumber) { + if constexpr (IsDecimal128V2) { + return DecimalV2Value(a < A(0) ? A(-a) : a); + } else if constexpr (IsDecimalNumber) { return a < A(0) ? A(-a) : a; } else if constexpr (IsIntegralV) { return a < A(0) ? static_cast::ColumnItemType>( @@ -264,83 +266,20 @@ struct ResultOfPosAndNegTive { }; template <> -struct ResultOfPosAndNegTive { - static constexpr PrimitiveType ResultType = TYPE_DECIMAL128I; -}; - -template <> -struct ResultOfPosAndNegTive { - static constexpr PrimitiveType ResultType = TYPE_DECIMAL256; -}; - -template -struct ResultOfUnaryFunc; - -template <> -struct ResultOfUnaryFunc { - static constexpr PrimitiveType ResultType = TYPE_BOOLEAN; -}; - -template <> -struct ResultOfUnaryFunc { - static constexpr PrimitiveType ResultType = TYPE_TINYINT; -}; - -template <> -struct ResultOfUnaryFunc { - static constexpr PrimitiveType ResultType = TYPE_SMALLINT; -}; - -template <> -struct ResultOfUnaryFunc { - static constexpr PrimitiveType ResultType = TYPE_INT; -}; - -template <> -struct ResultOfUnaryFunc { - static constexpr PrimitiveType ResultType = TYPE_BIGINT; -}; - -template <> -struct ResultOfUnaryFunc { - static constexpr PrimitiveType ResultType = TYPE_LARGEINT; -}; - -template <> -struct ResultOfUnaryFunc { - static constexpr PrimitiveType ResultType = TYPE_DECIMAL32; -}; - -template <> -struct ResultOfUnaryFunc { - static constexpr PrimitiveType ResultType = TYPE_DECIMAL64; +struct ResultOfPosAndNegTive { + static constexpr PrimitiveType ResultType = TYPE_DECIMALV2; }; template <> -struct ResultOfUnaryFunc { +struct ResultOfPosAndNegTive { static constexpr PrimitiveType ResultType = TYPE_DECIMAL128I; }; template <> -struct ResultOfUnaryFunc { - static constexpr PrimitiveType ResultType = TYPE_DECIMALV2; -}; - -template <> -struct ResultOfUnaryFunc { +struct ResultOfPosAndNegTive { static constexpr PrimitiveType ResultType = TYPE_DECIMAL256; }; -template <> -struct ResultOfUnaryFunc { - static constexpr PrimitiveType ResultType = TYPE_FLOAT; -}; - -template <> -struct ResultOfUnaryFunc { - static constexpr PrimitiveType ResultType = TYPE_DOUBLE; -}; - using FunctionAbsUInt8 = FunctionUnaryArithmetic, NameAbs, TYPE_BOOLEAN>; using FunctionAbsInt8 = FunctionUnaryArithmetic, NameAbs, TYPE_TINYINT>; using FunctionAbsInt16 = FunctionUnaryArithmetic, NameAbs, TYPE_SMALLINT>; @@ -352,7 +291,7 @@ using FunctionAbsDecimal64 = FunctionUnaryArithmetic, NameAbs using FunctionAbsDecimalV3 = FunctionUnaryArithmetic, NameAbs, TYPE_DECIMAL128I>; using FunctionAbsDecimalV2 = - FunctionUnaryArithmetic, NameAbs, TYPE_DECIMALV2>; + FunctionUnaryArithmetic, NameAbs, TYPE_DECIMALV2>; using FunctionAbsDecimal256 = FunctionUnaryArithmetic, NameAbs, TYPE_DECIMAL256>; using FunctionAbsFloat = FunctionUnaryArithmetic, NameAbs, TYPE_FLOAT>; @@ -377,7 +316,7 @@ using FunctionNegativeDouble = using FunctionNegativeBigInt = FunctionUnaryArithmetic, NameNegative, TYPE_BIGINT>; using FunctionNegativeDecimalV2 = - FunctionUnaryArithmetic, NameNegative, TYPE_DECIMALV2>; + FunctionUnaryArithmetic, NameNegative, TYPE_DECIMALV2>; using FunctionNegativeDecimal256 = FunctionUnaryArithmetic, NameNegative, TYPE_DECIMAL256>; using FunctionNegativeDecimalV3 = @@ -405,7 +344,7 @@ using FunctionPositiveDouble = using FunctionPositiveBigInt = FunctionUnaryArithmetic, NamePositive, TYPE_BIGINT>; using FunctionPositiveDecimalV2 = - FunctionUnaryArithmetic, NamePositive, TYPE_DECIMALV2>; + FunctionUnaryArithmetic, NamePositive, TYPE_DECIMALV2>; using FunctionPositiveDecimal256 = FunctionUnaryArithmetic, NamePositive, TYPE_DECIMAL256>; using FunctionPositiveDecimalV3 = diff --git a/be/src/vec/functions/modulo.cpp b/be/src/vec/functions/modulo.cpp index e371afc87aaa4f..bf577b9862ddee 100644 --- a/be/src/vec/functions/modulo.cpp +++ b/be/src/vec/functions/modulo.cpp @@ -585,7 +585,7 @@ struct ModDecimalImpl { } template - requires(is_decimal(ResultType)) + requires(is_decimal(ResultType) && ResultType != TYPE_DECIMALV2) static ColumnPtr constant_constant( ArgA a, ArgB b, const typename PrimitiveTypeTraits::CppType& max_result_number, @@ -609,7 +609,31 @@ struct ModDecimalImpl { } template - requires(is_decimal(ResultType)) + requires(ResultType == TYPE_DECIMALV2) + static ColumnPtr constant_constant( + ArgA a, ArgB b, + const typename PrimitiveTypeTraits::CppType& max_result_number, + const typename PrimitiveTypeTraits::CppType& scale_diff_multiplier, + const DataTypeDecimal& res_data_type, bool check_overflow_for_decimal) { + auto column_result = ColumnDecimal::create(1, res_data_type.get_scale()); + + auto null_map = ColumnUInt8::create(1, 0); + if (check_overflow_for_decimal) { + column_result->get_element(0) = + typename PrimitiveTypeTraits::ColumnItemType( + apply(a.value(), b.value(), null_map->get_element(0), + max_result_number)); + } else { + column_result->get_element(0) = + typename PrimitiveTypeTraits::ColumnItemType( + apply(a.value(), b.value(), null_map->get_element(0), + max_result_number)); + } + return ColumnNullable::create(std::move(column_result), std::move(null_map)); + } + + template + requires(is_decimal(ResultType) && ResultType != TYPE_DECIMALV2) static ColumnPtr vector_constant( ColumnPtr column_left, ArgB b, const typename PrimitiveTypeTraits::CppType& max_result_number, @@ -640,7 +664,38 @@ struct ModDecimalImpl { } template - requires(is_decimal(ResultType)) + requires(ResultType == TYPE_DECIMALV2) + static ColumnPtr vector_constant( + ColumnPtr column_left, ArgB b, + const typename PrimitiveTypeTraits::CppType& max_result_number, + const typename PrimitiveTypeTraits::CppType& scale_diff_multiplier, + const DataTypeDecimal& res_data_type, bool check_overflow_for_decimal) { + const auto* column_left_ptr = assert_cast(column_left.get()); + auto column_result = + ColumnDecimal::create(column_left->size(), res_data_type.get_scale()); + DCHECK(column_left_ptr != nullptr); + + auto null_map = ColumnUInt8::create(column_left->size(), 0); + const auto& a = column_left_ptr->get_data().data(); + const auto& c = column_result->get_data().data(); + auto& n = null_map->get_data(); + auto sz = column_left->size(); + if (check_overflow_for_decimal) { + for (size_t i = 0; i < sz; ++i) { + c[i] = typename DataTypeDecimal::FieldType( + apply(a[i].value(), b.value(), n[i], max_result_number)); + } + } else { + for (size_t i = 0; i < sz; ++i) { + c[i] = typename DataTypeDecimal::FieldType( + apply(a[i].value(), b.value(), n[i], max_result_number)); + } + } + return ColumnNullable::create(std::move(column_result), std::move(null_map)); + } + + template + requires(is_decimal(ResultType) && ResultType != TYPE_DECIMALV2) static ColumnPtr constant_vector( ArgA a, ColumnPtr column_right, const typename PrimitiveTypeTraits::CppType& max_result_number, @@ -672,7 +727,39 @@ struct ModDecimalImpl { } template - requires(is_decimal(ResultType)) + requires(ResultType == TYPE_DECIMALV2) + static ColumnPtr constant_vector( + ArgA a, ColumnPtr column_right, + const typename PrimitiveTypeTraits::CppType& max_result_number, + const typename PrimitiveTypeTraits::CppType& scale_diff_multiplier, + const DataTypeDecimal& res_data_type, bool check_overflow_for_decimal) { + const auto* column_right_ptr = assert_cast(column_right.get()); + auto column_result = + ColumnDecimal::create(column_right->size(), res_data_type.get_scale()); + DCHECK(column_right_ptr != nullptr); + + auto null_map = ColumnUInt8::create(column_right->size(), 0); + const auto& b = column_right_ptr->get_data().data(); + const auto& c = column_result->get_data().data(); + auto& n = null_map->get_data(); + auto sz = column_right->size(); + if (check_overflow_for_decimal) { + for (size_t i = 0; i < sz; ++i) { + c[i] = typename DataTypeDecimal::FieldType( + apply(a.value(), b[i].value(), n[i], max_result_number)); + } + } else { + for (size_t i = 0; i < sz; ++i) { + c[i] = typename DataTypeDecimal::FieldType( + apply(a.value(), b[i].value(), n[i], max_result_number)); + } + } + + return ColumnNullable::create(std::move(column_result), std::move(null_map)); + } + + template + requires(is_decimal(ResultType) && ResultType != TYPE_DECIMALV2) static ColumnPtr vector_vector( ColumnPtr column_left, ColumnPtr column_right, const typename PrimitiveTypeTraits::CppType max_result_number, @@ -692,30 +779,50 @@ struct ModDecimalImpl { const auto& c = column_result->get_data().data(); auto& n = null_map->get_data(); auto sz = column_right->size(); - if constexpr (DataTypeA::PType == TYPE_DECIMALV2) { - if (check_overflow_for_decimal) { - for (size_t i = 0; i < sz; ++i) { - c[i] = Decimal128V2(apply(a[i].value, b[i].value, n[i], - max_result_number)); - } - } else { - for (size_t i = 0; i < sz; ++i) { - c[i] = Decimal128V2(apply(a[i].value, b[i].value, n[i], - max_result_number)); - } + if (check_overflow_for_decimal) { + for (size_t i = 0; i < sz; ++i) { + c[i] = typename DataTypeDecimal::FieldType( + apply(a[i].value, b[i].value, n[i], max_result_number)); } + } else { + for (size_t i = 0; i < sz; ++i) { + c[i] = typename DataTypeDecimal::FieldType( + apply(a[i].value, b[i].value, n[i], max_result_number)); + } + } + return ColumnNullable::create(std::move(column_result), std::move(null_map)); + } + + template + requires(ResultType == TYPE_DECIMALV2) + static ColumnPtr vector_vector( + ColumnPtr column_left, ColumnPtr column_right, + const typename PrimitiveTypeTraits::CppType max_result_number, + const typename PrimitiveTypeTraits::CppType scale_diff_multiplier, + const DataTypeDecimal& res_data_type, bool check_overflow_for_decimal) { + const auto* column_left_ptr = assert_cast(column_left.get()); + const auto* column_right_ptr = assert_cast(column_right.get()); + auto column_result = + ColumnDecimal::create(column_left->size(), res_data_type.get_scale()); + DCHECK(column_left_ptr != nullptr && column_right_ptr != nullptr); + + // function divide, modulo and pmod + auto null_map = ColumnUInt8::create(column_result->size(), 0); + const auto& a = column_left_ptr->get_data().data(); + const auto& b = column_right_ptr->get_data().data(); + const auto& c = column_result->get_data().data(); + auto& n = null_map->get_data(); + auto sz = column_right->size(); + if (check_overflow_for_decimal) { + for (size_t i = 0; i < sz; ++i) { + c[i] = DecimalV2Value(apply(a[i].value(), b[i].value(), n[i], + max_result_number)); + } } else { - if (check_overflow_for_decimal) { - for (size_t i = 0; i < sz; ++i) { - c[i] = typename DataTypeDecimal::FieldType(apply( - a[i].value, b[i].value, n[i], max_result_number)); - } - } else { - for (size_t i = 0; i < sz; ++i) { - c[i] = typename DataTypeDecimal::FieldType(apply( - a[i].value, b[i].value, n[i], max_result_number)); - } + for (size_t i = 0; i < sz; ++i) { + c[i] = DecimalV2Value(apply(a[i].value(), b[i].value(), n[i], + max_result_number)); } } return ColumnNullable::create(std::move(column_result), std::move(null_map)); diff --git a/be/src/vec/functions/multiply.cpp b/be/src/vec/functions/multiply.cpp index b37d1a8c9798c6..9a5639aa3fad5b 100644 --- a/be/src/vec/functions/multiply.cpp +++ b/be/src/vec/functions/multiply.cpp @@ -129,7 +129,7 @@ struct MultiplyDecimalImpl { } template - requires(is_decimal(Result)) + requires(is_decimal(Result) && Result != TYPE_DECIMALV2) static inline typename PrimitiveTypeTraits::CppNativeType apply(ArgNativeTypeA a, ArgNativeTypeB b) { return static_cast::CppNativeType>( @@ -152,7 +152,7 @@ struct MultiplyDecimalImpl { } template - requires(is_decimal(ResultType)) + requires(is_decimal(ResultType) && ResultType != TYPE_DECIMALV2) static ColumnPtr constant_constant( ArgA a, ArgB b, const DataTypeA* type_left, const DataTypeB* type_right, const typename PrimitiveTypeTraits::ColumnItemType& max_result_number, @@ -176,7 +176,31 @@ struct MultiplyDecimalImpl { } template - requires(is_decimal(ResultType)) + requires(ResultType == TYPE_DECIMALV2) + static ColumnPtr constant_constant( + ArgA a, ArgB b, const DataTypeA* type_left, const DataTypeB* type_right, + const typename PrimitiveTypeTraits::ColumnItemType& max_result_number, + const typename PrimitiveTypeTraits::ColumnItemType& scale_diff_multiplier, + const DataTypeDecimal& res_data_type, bool check_overflow_for_decimal) { + auto column_result = ColumnDecimal::create(1, res_data_type.get_scale()); + + if (check_overflow_for_decimal) { + column_result->get_element(0) = + typename PrimitiveTypeTraits::ColumnItemType(apply( + a.value(), b.value(), *type_left, *type_right, res_data_type, + max_result_number, scale_diff_multiplier)); + } else { + column_result->get_element(0) = + typename PrimitiveTypeTraits::ColumnItemType(apply( + a.value(), b.value(), *type_left, *type_right, res_data_type, + max_result_number, scale_diff_multiplier)); + } + + return column_result; + } + + template + requires(is_decimal(ResultType) && ResultType != TYPE_DECIMALV2) static ColumnPtr vector_constant( ColumnPtr column_left, ArgB b, const DataTypeA* type_left, const DataTypeB* type_right, const typename PrimitiveTypeTraits::ColumnItemType& max_result_number, @@ -206,7 +230,37 @@ struct MultiplyDecimalImpl { } template - requires(is_decimal(ResultType)) + requires(ResultType == TYPE_DECIMALV2) + static ColumnPtr vector_constant( + ColumnPtr column_left, ArgB b, const DataTypeA* type_left, const DataTypeB* type_right, + const typename PrimitiveTypeTraits::ColumnItemType& max_result_number, + const typename PrimitiveTypeTraits::ColumnItemType& scale_diff_multiplier, + const DataTypeDecimal& res_data_type, bool check_overflow_for_decimal) { + const auto* column_left_ptr = assert_cast(column_left.get()); + auto column_result = + ColumnDecimal::create(column_left->size(), res_data_type.get_scale()); + DCHECK(column_left_ptr != nullptr); + + bool need_adjust_scale = scale_diff_multiplier.value() > 1; + const auto& a = column_left_ptr->get_data(); + auto& c = column_result->get_data(); + std::visit( + [&](auto need_adjust_scale, auto check_overflow_for_decimal) { + for (size_t i = 0; i < column_left->size(); ++i) { + c[i] = typename DataTypeDecimal::FieldType( + apply( + a[i].value(), b.value(), *type_left, *type_right, + res_data_type, max_result_number, scale_diff_multiplier)); + } + }, + make_bool_variant(need_adjust_scale), + make_bool_variant(check_overflow_for_decimal)); + + return column_result; + } + + template + requires(is_decimal(ResultType) && ResultType != TYPE_DECIMALV2) static ColumnPtr constant_vector( ArgA a, ColumnPtr column_right, const DataTypeA* type_left, const DataTypeB* type_right, const typename PrimitiveTypeTraits::ColumnItemType& max_result_number, @@ -233,6 +287,34 @@ struct MultiplyDecimalImpl { return column_result; } + template + requires(ResultType == TYPE_DECIMALV2) + static ColumnPtr constant_vector( + ArgA a, ColumnPtr column_right, const DataTypeA* type_left, const DataTypeB* type_right, + const typename PrimitiveTypeTraits::ColumnItemType& max_result_number, + const typename PrimitiveTypeTraits::ColumnItemType& scale_diff_multiplier, + const DataTypeDecimal& res_data_type, bool check_overflow_for_decimal) { + const auto* column_right_ptr = assert_cast(column_right.get()); + auto column_result = + ColumnDecimal::create(column_right->size(), res_data_type.get_scale()); + + bool need_adjust_scale = scale_diff_multiplier.value() > 1; + auto& b = column_right_ptr->get_data(); + auto& c = column_result->get_data(); + std::visit( + [&](auto need_adjust_scale, auto check_overflow_for_decimal) { + for (size_t i = 0; i < column_right->size(); ++i) { + c[i] = typename DataTypeDecimal::FieldType( + apply( + a.value(), b[i].value(), *type_left, *type_right, + res_data_type, max_result_number, scale_diff_multiplier)); + } + }, + make_bool_variant(need_adjust_scale), + make_bool_variant(check_overflow_for_decimal)); + return column_result; + } + /* select 999999999999999999999999999 * 999999999999999999999999999; 999999999999999999999999998000000000.000000000000000001 54 digits @@ -268,8 +350,9 @@ struct MultiplyDecimalImpl { DecimalV2Value(b[i]).to_string(), DecimalV2Value(i128_mul_result).to_string(), "decimalv2"); } - c[i] = (i128_mul_result - sgn[i]) / DecimalV2Value::ONE_BILLION + sgn[i]; - if (c[i].value > max.value() || c[i].value < min.value()) { + c[i] = DecimalV2Value((i128_mul_result - sgn[i]) / DecimalV2Value::ONE_BILLION + + sgn[i]); + if (c[i].value() > max.value() || c[i].value() < min.value()) { throw Exception(ErrorCode::ARITHMETIC_OVERFLOW_ERRROR, "Arithmetic overflow: {} {} {} = {}, result type: {}", DecimalV2Value(a[i]).to_string(), "multiply", @@ -277,9 +360,10 @@ struct MultiplyDecimalImpl { DecimalV2Value(i128_mul_result).to_string(), "decimalv2"); } } else { - c[i] = (DecimalV2Value(a[i]).value() * DecimalV2Value(b[i]).value() - sgn[i]) / - DecimalV2Value::ONE_BILLION + - sgn[i]; + c[i] = DecimalV2Value( + (DecimalV2Value(a[i]).value() * DecimalV2Value(b[i]).value() - sgn[i]) / + DecimalV2Value::ONE_BILLION + + sgn[i]); } } } @@ -346,95 +430,55 @@ struct MultiplyDecimalImpl { } template - requires(is_decimal(ResultType)) + requires(is_decimal(ResultType) && ResultType != TYPE_DECIMALV2) static ALWAYS_INLINE typename PrimitiveTypeTraits::CppNativeType apply( ArgNativeTypeA a, ArgNativeTypeB b, const DataTypeA& type_left, const DataTypeB& type_right, const DataTypeDecimal& type_result, const typename PrimitiveTypeTraits::ColumnItemType& max_result_number, const typename PrimitiveTypeTraits::ColumnItemType& scale_diff_multiplier) { - if constexpr (ResultType == TYPE_DECIMALV2) { - // Now, Doris only support decimal +-*/ decimal. - if constexpr (check_overflow) { - auto res = apply(DecimalV2Value(a), DecimalV2Value(b)).value(); - if (res > max_result_number.value || res < -max_result_number.value) { - throw Exception(ErrorCode::ARITHMETIC_OVERFLOW_ERRROR, - "Arithmetic overflow: {} {} {} = {}, result type: {}", - DecimalV2Value(a).to_string(), "multiply", - DecimalV2Value(b).to_string(), DecimalV2Value(res).to_string(), - type_to_string(ResultType)); - } - return res; - } else { - return apply(DecimalV2Value(a), DecimalV2Value(b)).value(); - } - } else { - typename PrimitiveTypeTraits::CppNativeType res; - if constexpr (check_overflow) { - // TODO handle overflow gracefully - if (UNLIKELY(apply(a, b, res))) { - // multiply - if constexpr (ResultType == TYPE_DECIMAL128I) { - wide::Int256 res256 = apply(a, b); - if constexpr (need_adjust_scale) { - if (res256 > 0) { - res256 = (res256 + scale_diff_multiplier.value / 2) / - scale_diff_multiplier.value; - - } else { - res256 = (res256 - scale_diff_multiplier.value / 2) / - scale_diff_multiplier.value; - } - } - // check if final result is overflow - if (res256 > wide::Int256(max_result_number.value) || - res256 < wide::Int256(-max_result_number.value)) { - auto result_str = - DataTypeDecimal256 {BeConsts::MAX_DECIMAL256_PRECISION, - type_result.get_scale()} - .to_string(Decimal256(res256)); - throw Exception(ErrorCode::ARITHMETIC_OVERFLOW_ERRROR, - "Arithmetic overflow: {} {} {} = {}, result type: {}", - type_left.to_string(ArgA(a)), "multiply", - type_right.to_string(ArgB(b)), result_str, - type_result.get_name()); - } else { - res = res256; - } - } else { - auto result_str = DataTypeDecimal256 {BeConsts::MAX_DECIMAL256_PRECISION, - type_result.get_scale()} - .to_string(Decimal256(res)); - throw Exception(ErrorCode::ARITHMETIC_OVERFLOW_ERRROR, - "Arithmetic overflow: {} {} {} = {}, result type: {}", - type_left.to_string(ArgA(a)), "multiply", - type_right.to_string(ArgB(b)), result_str, - type_result.get_name()); - } - } else { - // round to final result precision + typename PrimitiveTypeTraits::CppNativeType res; + if constexpr (check_overflow) { + // TODO handle overflow gracefully + if (UNLIKELY(apply(a, b, res))) { + // multiply + if constexpr (ResultType == TYPE_DECIMAL128I) { + wide::Int256 res256 = apply(a, b); if constexpr (need_adjust_scale) { - if (res >= 0) { - res = (res + scale_diff_multiplier.value / 2) / - scale_diff_multiplier.value; + if (res256 > 0) { + res256 = (res256 + scale_diff_multiplier.value / 2) / + scale_diff_multiplier.value; + } else { - res = (res - scale_diff_multiplier.value / 2) / - scale_diff_multiplier.value; + res256 = (res256 - scale_diff_multiplier.value / 2) / + scale_diff_multiplier.value; } } - if (res > max_result_number.value || res < -max_result_number.value) { + // check if final result is overflow + if (res256 > wide::Int256(max_result_number.value) || + res256 < wide::Int256(-max_result_number.value)) { auto result_str = DataTypeDecimal256 {BeConsts::MAX_DECIMAL256_PRECISION, type_result.get_scale()} - .to_string(Decimal256(res)); + .to_string(Decimal256(res256)); throw Exception(ErrorCode::ARITHMETIC_OVERFLOW_ERRROR, "Arithmetic overflow: {} {} {} = {}, result type: {}", type_left.to_string(ArgA(a)), "multiply", type_right.to_string(ArgB(b)), result_str, type_result.get_name()); + } else { + res = res256; } + } else { + auto result_str = DataTypeDecimal256 {BeConsts::MAX_DECIMAL256_PRECISION, + type_result.get_scale()} + .to_string(Decimal256(res)); + throw Exception(ErrorCode::ARITHMETIC_OVERFLOW_ERRROR, + "Arithmetic overflow: {} {} {} = {}, result type: {}", + type_left.to_string(ArgA(a)), "multiply", + type_right.to_string(ArgB(b)), result_str, + type_result.get_name()); } - return res; } else { - res = apply(a, b); + // round to final result precision if constexpr (need_adjust_scale) { if (res >= 0) { res = (res + scale_diff_multiplier.value / 2) / scale_diff_multiplier.value; @@ -442,8 +486,51 @@ struct MultiplyDecimalImpl { res = (res - scale_diff_multiplier.value / 2) / scale_diff_multiplier.value; } } - return res; + if (res > max_result_number.value || res < -max_result_number.value) { + auto result_str = DataTypeDecimal256 {BeConsts::MAX_DECIMAL256_PRECISION, + type_result.get_scale()} + .to_string(Decimal256(res)); + throw Exception(ErrorCode::ARITHMETIC_OVERFLOW_ERRROR, + "Arithmetic overflow: {} {} {} = {}, result type: {}", + type_left.to_string(ArgA(a)), "multiply", + type_right.to_string(ArgB(b)), result_str, + type_result.get_name()); + } } + return res; + } else { + res = apply(a, b); + if constexpr (need_adjust_scale) { + if (res >= 0) { + res = (res + scale_diff_multiplier.value / 2) / scale_diff_multiplier.value; + } else { + res = (res - scale_diff_multiplier.value / 2) / scale_diff_multiplier.value; + } + } + return res; + } + } + + template + requires(ResultType == TYPE_DECIMALV2) + static ALWAYS_INLINE typename PrimitiveTypeTraits::CppNativeType apply( + ArgNativeTypeA a, ArgNativeTypeB b, const DataTypeA& type_left, + const DataTypeB& type_right, const DataTypeDecimal& type_result, + const typename PrimitiveTypeTraits::ColumnItemType& max_result_number, + const typename PrimitiveTypeTraits::ColumnItemType& scale_diff_multiplier) { + // Now, Doris only support decimal +-*/ decimal. + if constexpr (check_overflow) { + auto res = apply(DecimalV2Value(a), DecimalV2Value(b)).value(); + if (res > max_result_number.value() || res < -max_result_number.value()) { + throw Exception(ErrorCode::ARITHMETIC_OVERFLOW_ERRROR, + "Arithmetic overflow: {} {} {} = {}, result type: {}", + DecimalV2Value(a).to_string(), "multiply", + DecimalV2Value(b).to_string(), DecimalV2Value(res).to_string(), + type_to_string(ResultType)); + } + return res; + } else { + return apply(DecimalV2Value(a), DecimalV2Value(b)).value(); } } diff --git a/be/src/vec/functions/random.cpp b/be/src/vec/functions/random.cpp index 7bcd3b145e1f91..4b9301ab36e402 100644 --- a/be/src/vec/functions/random.cpp +++ b/be/src/vec/functions/random.cpp @@ -74,7 +74,8 @@ class Random : public IFunction { } uint32_t seed = 0; if (!context->get_constant_col(0)->column_ptr->is_null_at(0)) { - seed = (uint32_t)(*context->get_constant_col(0)->column_ptr)[0].get(); + seed = (uint32_t)(*context->get_constant_col(0)->column_ptr)[0] + .get(); } generator->seed(seed); } else if (context->get_num_args() == 2) { diff --git a/be/src/vec/functions/round.h b/be/src/vec/functions/round.h index 7f8bbfe6e83382..11f150235b54c1 100644 --- a/be/src/vec/functions/round.h +++ b/be/src/vec/functions/round.h @@ -457,6 +457,42 @@ struct Dispatcher { } } + return col_res; + } else if constexpr (T == TYPE_DECIMALV2) { + const auto* const decimal_col = + check_and_get_column::ColumnType>(col_general); + const auto& vec_src = decimal_col->get_data(); + const size_t input_rows_count = vec_src.size(); + auto col_res = PrimitiveTypeTraits::ColumnType::create(vec_src.size(), result_scale); + auto& vec_res = col_res->get_data(); + + if (!vec_res.empty()) { + FunctionRoundingImpl::apply( + decimal_col->get_data(), decimal_col->get_scale(), vec_res, scale_arg); + } + // We need to always make sure result decimal's scale is as expected as its in plan + // So we need to append enough zero to result. + + // Case 0: scale_arg <= -(integer part digits count) + // do nothing, because result is 0 + // Case 1: scale_arg <= 0 && scale_arg > -(integer part digits count) + // decimal parts has been erased, so add them back by multiply 10^(result_scale) + // Case 2: scale_arg > 0 && scale_arg < result_scale + // decimal part now has scale_arg digits, so multiply 10^(result_scale - scal_arg) + // Case 3: scale_arg >= input_scale + // do nothing + + if (scale_arg <= 0) { + for (size_t i = 0; i < input_rows_count; ++i) { + vec_res[i] = DecimalV2Value(vec_res[i].value() * int_exp10(result_scale)); + } + } else if (scale_arg > 0 && scale_arg < result_scale) { + for (size_t i = 0; i < input_rows_count; ++i) { + vec_res[i] = DecimalV2Value(vec_res[i].value() * + int_exp10(result_scale - scale_arg)); + } + } + return col_res; } else if constexpr (is_decimal(T)) { const auto* const decimal_col = @@ -536,6 +572,42 @@ struct Dispatcher { vec_res[i]); } } + return col_res; + } else if constexpr (T == TYPE_DECIMALV2) { + const auto* decimal_col = + assert_cast::ColumnType*>(col_general); + const Int32 input_scale = decimal_col->get_scale(); + auto col_res = + PrimitiveTypeTraits::ColumnType::create(input_row_count, result_scale); + + for (size_t i = 0; i < input_row_count; ++i) { + DecimalRoundingImpl::apply( + decimal_col->get_element(i).value(), input_scale, + col_res->get_element(i).value(), col_scale_i32.get_data()[i]); + } + + for (size_t i = 0; i < input_row_count; ++i) { + // For func(ColumnDecimal, ColumnInt32), we should always have same scale with source Decimal column + // So we need this check to make sure the result have correct digits count + // + // Case 0: scale_arg <= -(integer part digits count) + // do nothing, because result is 0 + // Case 1: scale_arg <= 0 && scale_arg > -(integer part digits count) + // decimal parts has been erased, so add them back by multiply 10^(scale_arg) + // Case 2: scale_arg > 0 && scale_arg < result_scale + // decimal part now has scale_arg digits, so multiply 10^(result_scale - scal_arg) + // Case 3: scale_arg >= input_scale + // do nothing + const Int32 scale_arg = col_scale_i32.get_data()[i]; + if (scale_arg <= 0) { + col_res->get_element(i) = DecimalV2Value(col_res->get_element(i).value() * + int_exp10(result_scale)); + } else if (scale_arg > 0 && scale_arg < result_scale) { + col_res->get_element(i) = DecimalV2Value(col_res->get_element(i).value() * + int_exp10(result_scale - scale_arg)); + } + } + return col_res; } else if constexpr (is_decimal(T)) { const auto* decimal_col = @@ -593,7 +665,45 @@ struct Dispatcher { } } - if constexpr (is_decimal(T)) { + if constexpr (T == TYPE_DECIMALV2) { + const typename PrimitiveTypeTraits::ColumnType& data_col_general = + assert_cast::ColumnType&>( + const_col_general->get_data_column()); + const auto& general_val = data_col_general.get_data()[0]; + Int32 input_scale = data_col_general.get_scale(); + auto col_res = + PrimitiveTypeTraits::ColumnType::create(input_rows_count, result_scale); + + for (size_t i = 0; i < input_rows_count; ++i) { + DecimalRoundingImpl::apply( + general_val, input_scale, col_res->get_element(i).value(), + col_scale_i32.get_data()[i]); + } + + for (size_t i = 0; i < input_rows_count; ++i) { + // For func(ColumnDecimal, ColumnInt32), we should always have same scale with source Decimal column + // So we need this check to make sure the result have correct digits count + // + // Case 0: scale_arg <= -(integer part digits count) + // do nothing, because result is 0 + // Case 1: scale_arg <= 0 && scale_arg > -(integer part digits count) + // decimal parts has been erased, so add them back by multiply 10^(scale_arg) + // Case 2: scale_arg > 0 && scale_arg < result_scale + // decimal part now has scale_arg digits, so multiply 10^(result_scale - scal_arg) + // Case 3: scale_arg >= input_scale + // do nothing + const Int32 scale_arg = col_scale_i32.get_data()[i]; + if (scale_arg <= 0) { + col_res->get_element(i) = DecimalV2Value(col_res->get_element(i).value() * + int_exp10(result_scale)); + } else if (scale_arg > 0 && scale_arg < result_scale) { + col_res->get_element(i) = DecimalV2Value(col_res->get_element(i).value() * + int_exp10(result_scale - scale_arg)); + } + } + + return col_res; + } else if constexpr (is_decimal(T)) { const typename PrimitiveTypeTraits::ColumnType& data_col_general = assert_cast::ColumnType&>( const_col_general->get_data_column()); diff --git a/be/src/vec/functions/uniform.cpp b/be/src/vec/functions/uniform.cpp index 56d85b26199045..a6124bae40026f 100644 --- a/be/src/vec/functions/uniform.cpp +++ b/be/src/vec/functions/uniform.cpp @@ -79,7 +79,7 @@ struct UniformIntImpl { for (int i = 0; i < input_rows_count; i++) { // Use gen value as seed for each row - auto seed = (*gen_column)[i].get(); + auto seed = (*gen_column)[i].get(); std::mt19937_64 generator(seed); std::uniform_int_distribution distribution(min, max); res_data[i] = distribution(generator); @@ -127,7 +127,7 @@ struct UniformDoubleImpl { for (int i = 0; i < input_rows_count; i++) { // Use gen value as seed for each row - auto seed = (*gen_column)[i].get(); + auto seed = (*gen_column)[i].get(); std::mt19937_64 generator(seed); std::uniform_real_distribution distribution(min, max); res_data[i] = distribution(generator); diff --git a/be/src/vec/io/io_helper.h b/be/src/vec/io/io_helper.h index fae49ffad5eb73..6e0cf2674b02c2 100644 --- a/be/src/vec/io/io_helper.h +++ b/be/src/vec/io/io_helper.h @@ -217,15 +217,16 @@ template StringParser::ParseResult read_decimal_text_impl(T& x, const StringRef& buf, UInt32 precision, UInt32 scale) { static_assert(IsDecimalNumber); - if constexpr (!std::is_same_v) { + if constexpr (!std::is_same_v) { StringParser::ParseResult result = StringParser::PARSE_SUCCESS; x.value = StringParser::string_to_decimal

(buf.data, (int)buf.size, precision, scale, &result); return result; } else { StringParser::ParseResult result = StringParser::PARSE_SUCCESS; - x.value = StringParser::string_to_decimal( - buf.data, (int)buf.size, DecimalV2Value::PRECISION, DecimalV2Value::SCALE, &result); + x = DecimalV2Value(StringParser::string_to_decimal( + buf.data, (int)buf.size, DecimalV2Value::PRECISION, DecimalV2Value::SCALE, + &result)); return result; } } diff --git a/be/src/vec/json/json_parser.cpp b/be/src/vec/json/json_parser.cpp index 00d023b6c7c261..e4ad2bfe7c560d 100644 --- a/be/src/vec/json/json_parser.cpp +++ b/be/src/vec/json/json_parser.cpp @@ -264,7 +264,7 @@ void JSONDataParser::handleExistingPath(std::pair(value).size(); + size_t array_size = value.get().size(); auto& current_nested_sizes = ctx.nested_sizes_by_key[nested_key]; if (current_nested_sizes.size() == ctx.current_size) { current_nested_sizes.push_back(array_size); @@ -293,7 +293,7 @@ void JSONDataParser::handleNewPath(UInt128 hash, const PathInData::P auto nested_key = getNameOfNested(path, value); if (!nested_key.empty()) { - size_t array_size = get(value).size(); + size_t array_size = value.get().size(); auto& current_nested_sizes = ctx.nested_sizes_by_key[nested_key]; if (current_nested_sizes.empty()) { current_nested_sizes.resize(ctx.current_size); diff --git a/be/src/vec/sink/vtablet_block_convertor.cpp b/be/src/vec/sink/vtablet_block_convertor.cpp index 5bb8f2cbe0f742..74261e5745205a 100644 --- a/be/src/vec/sink/vtablet_block_convertor.cpp +++ b/be/src/vec/sink/vtablet_block_convertor.cpp @@ -363,7 +363,7 @@ Status OlapTableBlockConvertor::_internal_validate_column( if (dec_val.greater_than_scale(type->get_scale())) { auto code = dec_val.round(&dec_val, remove_nullable(type)->get_scale(), HALF_UP); - column_decimal->get_data()[j] = dec_val.value(); + column_decimal->get_data()[j] = dec_val; if (code != E_DEC_OK) { fmt::format_to(error_msg, "round one decimal failed.value={}; ", diff --git a/be/src/vec/sink/writer/iceberg/viceberg_table_writer.cpp b/be/src/vec/sink/writer/iceberg/viceberg_table_writer.cpp index 451313053ea0c2..59e04819401df8 100644 --- a/be/src/vec/sink/writer/iceberg/viceberg_table_writer.cpp +++ b/be/src/vec/sink/writer/iceberg/viceberg_table_writer.cpp @@ -441,7 +441,7 @@ std::any VIcebergTableWriter::_get_iceberg_partition_value( case TYPE_BOOLEAN: { vectorized::Field field = vectorized::check_and_get_column(*col_ptr)->operator[](position); - return field.get(); + return field.get(); } case TYPE_TINYINT: { return *reinterpret_cast(item); diff --git a/be/src/vec/sink/writer/vhive_table_writer.cpp b/be/src/vec/sink/writer/vhive_table_writer.cpp index 6fb49419b045ad..d99fe86535c420 100644 --- a/be/src/vec/sink/writer/vhive_table_writer.cpp +++ b/be/src/vec/sink/writer/vhive_table_writer.cpp @@ -454,7 +454,7 @@ std::string VHiveTableWriter::_to_partition_value(const DataTypePtr& type_desc, case TYPE_BOOLEAN: { vectorized::Field field = vectorized::check_and_get_column(*column)->operator[](position); - return std::to_string(field.get()); + return std::to_string(field.get()); } case TYPE_TINYINT: { return std::to_string(*reinterpret_cast(item)); diff --git a/be/test/exec/schema_scanner/schema_cluster_snapshot_properties_scanner_test.cpp b/be/test/exec/schema_scanner/schema_cluster_snapshot_properties_scanner_test.cpp index be70016e285bd6..23c81d36e37fb0 100644 --- a/be/test/exec/schema_scanner/schema_cluster_snapshot_properties_scanner_test.cpp +++ b/be/test/exec/schema_scanner/schema_cluster_snapshot_properties_scanner_test.cpp @@ -43,7 +43,7 @@ TEST_F(SchemaClusterSnapshotPropertiesScannerTest, test_get_next_block_internal) ASSERT_EQ(1, data_block->rows()); auto col = data_block->safe_get_by_position(2); - auto v = (*col.column)[0].get(); + auto v = (*col.column)[0].get(); EXPECT_EQ(v, 30); } diff --git a/be/test/exec/schema_scanner/schema_cluster_snapshots_scanner_test.cpp b/be/test/exec/schema_scanner/schema_cluster_snapshots_scanner_test.cpp index a831076efdcc76..77c1ac1f7c9459 100644 --- a/be/test/exec/schema_scanner/schema_cluster_snapshots_scanner_test.cpp +++ b/be/test/exec/schema_scanner/schema_cluster_snapshots_scanner_test.cpp @@ -60,7 +60,7 @@ TEST_F(SchemaClusterSnapshotsScannerTest, test_get_next_block_internal) { ASSERT_EQ(2, data_block->rows()); auto col = data_block->safe_get_by_position(0); - auto v = (*col.column)[1].get(); + auto v = (*col.column)[1].get(); EXPECT_EQ(v, "232ds"); } diff --git a/be/test/testutil/variant_util.h b/be/test/testutil/variant_util.h index 2e65a87c64f54b..76ebbd4d5bf46d 100644 --- a/be/test/testutil/variant_util.h +++ b/be/test/testutil/variant_util.h @@ -37,11 +37,11 @@ class VariantUtil { auto int_field = doris::vectorized::Field::create_field(20); auto str_field = doris::vectorized::Field::create_field(String("str", 3)); auto arr_int_field = doris::vectorized::Field::create_field(Array()); - auto& array1 = arr_int_field.get(); + auto& array1 = arr_int_field.get(); array1.emplace_back(int_field); array1.emplace_back(int_field); auto arr_str_field = doris::vectorized::Field::create_field(Array()); - auto& array2 = arr_str_field.get(); + auto& array2 = arr_str_field.get(); array2.emplace_back(str_field); array2.emplace_back(str_field); field_map["int"] = int_field; @@ -64,7 +64,7 @@ class VariantUtil { const std::vector>& key_and_values) { doris::vectorized::Field res = doris::vectorized::Field::create_field(VariantMap()); - auto& object = res.get(); + auto& object = res.get(); for (const auto& [k, v] : key_and_values) { PathInData path(k); object.try_emplace(path, FieldWithDataType {.field = v}); @@ -195,11 +195,11 @@ class VariantUtil { doris::vectorized::Field::create_field(Array()); auto variant_field = doris::vectorized::Field::create_field(VariantMap()); for (const auto& entry : data) { - auto& variant_map = variant_field.get(); + auto& variant_map = variant_field.get(); for (const auto& [k, v] : entry) { variant_map.try_emplace(PathInData(k), FieldWithDataType {.field = v}); } - array_field.get().emplace_back(std::move(variant_field)); + array_field.get().emplace_back(std::move(variant_field)); } return array_field; } diff --git a/be/test/vec/aggregate_functions/agg_group_array_intersect_test.cpp b/be/test/vec/aggregate_functions/agg_group_array_intersect_test.cpp index 5824f71f75ec56..6f645cd954b25c 100644 --- a/be/test/vec/aggregate_functions/agg_group_array_intersect_test.cpp +++ b/be/test/vec/aggregate_functions/agg_group_array_intersect_test.cpp @@ -44,8 +44,7 @@ void sort_numeric_array(Array& array) { if (a.is_null() || b.is_null()) { return a.is_null() && !b.is_null(); } - return doris::vectorized::get::ColumnItemType>(a) < - doris::vectorized::get::ColumnItemType>(b); + return a.get() < b.get(); }); } @@ -117,7 +116,7 @@ void validate_numeric_test(MutableColumnPtr& test_col_data) { agg_function->insert_result_into(place, ans); Field actual_field; ans.get(0, actual_field); - const auto& actual_result = doris::vectorized::get(actual_field); + const auto& actual_result = actual_field.get(); Array expected_result = { Field::create_field((typename PrimitiveTypeTraits::ColumnItemType)2), @@ -205,7 +204,7 @@ void validate_numeric_nullable_test(MutableColumnPtr& test_col_data) { Field actual_field; ans.get(0, actual_field); - const auto& actual_result = doris::vectorized::get(actual_field); + const auto& actual_result = actual_field.get(); Array expected_result = { vectorized::Field(), @@ -302,7 +301,7 @@ TEST(AggGroupArrayIntersectTest, string_test) { agg_function->insert_result_into(place, ans); Field actual_field; ans.get(0, actual_field); - const auto& actual_result = doris::vectorized::get(actual_field); + const auto& actual_result = actual_field.get(); Array expected_result = {vectorized::Field::create_field("b"), vectorized::Field::create_field("c")}; @@ -370,7 +369,7 @@ TEST(AggGroupArrayIntersectTest, string_nullable_test) { agg_function->insert_result_into(place, ans); Field actual_field; ans.get(0, actual_field); - const auto& actual_result = doris::vectorized::get(actual_field); + const auto& actual_result = actual_field.get(); Array expected_result = {vectorized::Field(), vectorized::Field::create_field("c")}; diff --git a/be/test/vec/aggregate_functions/agg_min_max_test.cpp b/be/test/vec/aggregate_functions/agg_min_max_test.cpp index c7cad0118c669e..54ac10cd705ca2 100644 --- a/be/test/vec/aggregate_functions/agg_min_max_test.cpp +++ b/be/test/vec/aggregate_functions/agg_min_max_test.cpp @@ -105,7 +105,7 @@ TEST_P(AggMinMaxTest, min_max_decimal_test) { // Check result. ColumnDecimal128V2 ans(0, 9); agg_function->insert_result_into(place, ans); - EXPECT_EQ(min_max_type == "min" ? 0 : agg_test_batch_size - 1, ans.get_element(0).value); + EXPECT_EQ(min_max_type == "min" ? 0 : agg_test_batch_size - 1, ans.get_element(0).value()); agg_function->destroy(place); auto dst = agg_function->create_serialize_column(); @@ -121,7 +121,7 @@ TEST_P(AggMinMaxTest, min_max_decimal_test) { } for (size_t i = 0; i != agg_test_batch_size; ++i) { - EXPECT_EQ(i, result.get_element(i).value); + EXPECT_EQ(i, result.get_element(i).value()); } } diff --git a/be/test/vec/aggregate_functions/agg_replace_test.cpp b/be/test/vec/aggregate_functions/agg_replace_test.cpp index 1ebcf7dd4ae6fe..3ead67ba2f2e89 100644 --- a/be/test/vec/aggregate_functions/agg_replace_test.cpp +++ b/be/test/vec/aggregate_functions/agg_replace_test.cpp @@ -90,6 +90,12 @@ class VAggReplaceTest : public testing::Test { const_cast(&hll)->update(static_cast(expect_num)); auto actual = hll.estimate_cardinality(); EXPECT_EQ(expect, actual); + } else if constexpr (std::is_same_v) { + EXPECT_EQ(expect_num, (*(int128_t*)unwrap_col->get_data_at(pos).data)); + } else if constexpr (IsDataTypeDecimal) { + EXPECT_EQ(expect_num, + (*(typename DataType::FieldType::NativeType*)unwrap_col->get_data_at(pos) + .data)); } else { EXPECT_EQ(expect_num, unwrap_col->get_int(pos)); } diff --git a/be/test/vec/columns/column_array_test.cpp b/be/test/vec/columns/column_array_test.cpp index 5b5bfc17c5d8f4..0e6db9df6dd05d 100644 --- a/be/test/vec/columns/column_array_test.cpp +++ b/be/test/vec/columns/column_array_test.cpp @@ -750,7 +750,7 @@ TEST_F(ColumnArrayTest, MaxArraySizeAsFieldTest) { auto check_type = remove_nullable(array_types[i]); Field a; column->get(column->size() - 1, a); - Array af = a.get(); + Array af = a.get(); if (af.size() > 0) { auto start_size = af.size(); Field ef = af[0]; @@ -789,12 +789,12 @@ TEST_F(ColumnArrayTest, IsDefaultAtTest) { // check field Array is empty Field f; column->get(j, f); - auto array = f.get(); + auto array = f.get(); EXPECT_EQ(array.size(), 0) << "array is not empty"; } else { Field f; column->get(j, f); - auto array = f.get(); + auto array = f.get(); EXPECT_GT(array.size(), 0) << "array is empty"; } } @@ -835,10 +835,10 @@ TEST_F(ColumnArrayTest, String64ArrayTest) { auto str64_array_column = ColumnArray::create(std::move(str64_column), std::move(off_column)); EXPECT_EQ(str64_array_column->size(), offs.size() - 1); for (size_t i = 0; i < str64_array_column->size(); ++i) { - auto v = get(str64_array_column->operator[](i)); + auto v = str64_array_column->operator[](i).get(); EXPECT_EQ(v.size(), offs[i + 1] - offs[i]); for (size_t j = 0; j < v.size(); ++j) { - EXPECT_EQ(vals[offs[i] + j], get(v[j])); + EXPECT_EQ(vals[offs[i] + j], v[j].get()); } } // test insert ColumnArray> into ColumnArray> @@ -852,18 +852,18 @@ TEST_F(ColumnArrayTest, String64ArrayTest) { indices.data() + indices.size()); EXPECT_EQ(str32_array_column->size(), 3); - auto v = get(str32_array_column->operator[](0)); + auto v = str32_array_column->operator[](0).get(); EXPECT_EQ(v.size(), 2); - EXPECT_EQ(get(v[0]), vals[0]); - EXPECT_EQ(get(v[1]), vals[1]); + EXPECT_EQ(v[0].get(), vals[0]); + EXPECT_EQ(v[1].get(), vals[1]); - v = get(str32_array_column->operator[](1)); + v = str32_array_column->operator[](1).get(); EXPECT_EQ(v.size(), 1); - EXPECT_EQ(get(v[0]), vals[2]); + EXPECT_EQ(v[0].get(), vals[2]); - v = get(str32_array_column->operator[](2)); + v = str32_array_column->operator[](2).get(); EXPECT_EQ(v.size(), 1); - EXPECT_EQ(get(v[0]), vals[3]); + EXPECT_EQ(v[0].get(), vals[3]); } TEST_F(ColumnArrayTest, IntArrayPermuteTest) { diff --git a/be/test/vec/columns/column_dictionary_test.cpp b/be/test/vec/columns/column_dictionary_test.cpp index 14b42c51819f79..c27dce59fa56a6 100644 --- a/be/test/vec/columns/column_dictionary_test.cpp +++ b/be/test/vec/columns/column_dictionary_test.cpp @@ -222,7 +222,7 @@ TEST_F(ColumnDictionaryTest, field) { for (size_t i = 0; i != count; ++i) { Field f; column_dict_char->get(i, f); - EXPECT_EQ(f.get(), codes_data[i]); + EXPECT_EQ(f.get(), codes_data[i]); } } TEST_F(ColumnDictionaryTest, serialize_value_into_arena) { diff --git a/be/test/vec/columns/column_string_test.cpp b/be/test/vec/columns/column_string_test.cpp index 2dd8ed8cb08770..de6b6e18b4de47 100644 --- a/be/test/vec/columns/column_string_test.cpp +++ b/be/test/vec/columns/column_string_test.cpp @@ -295,7 +295,8 @@ TEST_F(ColumnStringTest, field_test) { for (size_t i = 0; i != src_size; ++i) { Field f; assert_col->get(i, f); - ASSERT_EQ(f.get(), source_column->get_data_at(i)); + ASSERT_EQ(StringRef(f.get().data(), f.get().size()), + source_column->get_data_at(i)); } } { @@ -310,7 +311,7 @@ TEST_F(ColumnStringTest, field_test) { JsonbField jsonbf; Field f = Field::create_field((std::move(jsonbf))); assert_col->get(i, f); - const auto& real_field = vectorized::get(f); + const auto& real_field = f.get(); ASSERT_EQ(StringRef(real_field.get_value(), real_field.get_size()), source_column->get_data_at(i)); } diff --git a/be/test/vec/columns/column_varbinary_test.cpp b/be/test/vec/columns/column_varbinary_test.cpp index f862a0d6690a98..439140d3777886 100644 --- a/be/test/vec/columns/column_varbinary_test.cpp +++ b/be/test/vec/columns/column_varbinary_test.cpp @@ -347,15 +347,13 @@ TEST_F(ColumnVarbinaryTest, FieldAccessOperatorAndGet) { for (size_t i = 0; i < vals.size(); ++i) { // operator[] Field f = (*col)[i]; - const auto& sv = - vectorized::get::CppType&>(f); + const auto& sv = f.get(); ASSERT_EQ(sv.size(), vals[i].size()); ASSERT_EQ(memcmp(sv.data(), vals[i].data(), sv.size()), 0); // get(size_t, Field&) Field f2; col->get(i, f2); - const auto& sv2 = - vectorized::get::CppType&>(f2); + const auto& sv2 = f2.get(); ASSERT_EQ(sv2.size(), vals[i].size()); ASSERT_EQ(memcmp(sv2.data(), vals[i].data(), sv2.size()), 0); } diff --git a/be/test/vec/columns/column_variant_test.cpp b/be/test/vec/columns/column_variant_test.cpp index e3f97e2d2bb2d4..52ade2189729bc 100644 --- a/be/test/vec/columns/column_variant_test.cpp +++ b/be/test/vec/columns/column_variant_test.cpp @@ -195,17 +195,17 @@ TEST_F(ColumnVariantTest, basic_deserialize) { auto data = path->get_data_at(start); EXPECT_EQ(data, StringRef("v.b.d", 5)); auto pair = variant->deserialize_from_sparse_column(value, start++); - EXPECT_EQ(pair.first.get(), 30); + EXPECT_EQ(pair.first.get(), 30); auto data2 = path->get_data_at(start); auto pair2 = variant->deserialize_from_sparse_column(value, start++); EXPECT_EQ(data2, StringRef("v.c.d", 5)); - EXPECT_EQ(pair2.first.get(), 30); + EXPECT_EQ(pair2.first.get(), 30); auto data3 = path->get_data_at(start); auto pair3 = variant->deserialize_from_sparse_column(value, start++); EXPECT_EQ(data3, StringRef("v.d.d", 5)); - EXPECT_EQ(pair3.first.get(), "50"); + EXPECT_EQ(pair3.first.get(), "50"); EXPECT_EQ(start, end); } } @@ -332,7 +332,7 @@ TEST_F(ColumnVariantTest, basic_inset_range_from) { EXPECT_TRUE(column->data.data[0]->is_null_at(row)); } for (size_t row = 5; row != 10; ++row) { - EXPECT_EQ((*column->data.data[0])[row].get(), 30); + EXPECT_EQ((*column->data.data[0])[row].get(), 30); } } } @@ -350,19 +350,19 @@ TEST_F(ColumnVariantTest, basic_inset_range_from) { EXPECT_EQ(data, StringRef("v.a", 3)); auto pair = dst->deserialize_from_sparse_column(value, start++); if (pair.first.get_type() == PrimitiveType::TYPE_BIGINT) { - EXPECT_EQ(pair.first.get(), 20) << pair.first.get_type_name(); + EXPECT_EQ(pair.first.get(), 20) << pair.first.get_type_name(); } else { - EXPECT_EQ(pair.first.get(), 20) << pair.first.get_type_name(); + EXPECT_EQ(pair.first.get(), 20) << pair.first.get_type_name(); } auto data2 = path->get_data_at(start); EXPECT_EQ(data2, StringRef("v.c", 3)); auto pair2 = dst->deserialize_from_sparse_column(value, start++); if (pair.first.get_type() == PrimitiveType::TYPE_BIGINT) { - EXPECT_EQ(pair2.first.get(), 20) - << pair2.first.get_type_name() << " " << pair2.first.get(); + EXPECT_EQ(pair2.first.get(), 20) + << pair2.first.get_type_name() << " " << pair2.first.get(); } else { - EXPECT_EQ(pair2.first.get(), 20); + EXPECT_EQ(pair2.first.get(), 20); } EXPECT_EQ(start, end); @@ -377,24 +377,24 @@ TEST_F(ColumnVariantTest, basic_inset_range_from) { EXPECT_EQ(data, StringRef("v.a", 3)); auto pair = dst->deserialize_from_sparse_column(value, start++); if (pair.first.get_type() == PrimitiveType::TYPE_BIGINT) { - EXPECT_EQ(pair.first.get(), 20) << pair.first.get_type_name(); + EXPECT_EQ(pair.first.get(), 20) << pair.first.get_type_name(); } else { - EXPECT_EQ(pair.first.get(), 20); + EXPECT_EQ(pair.first.get(), 20); } auto data2 = path->get_data_at(start); EXPECT_EQ(data2, StringRef("v.c", 3)); auto pair2 = dst->deserialize_from_sparse_column(value, start++); if (pair.first.get_type() == PrimitiveType::TYPE_BIGINT) { - EXPECT_EQ(pair2.first.get(), 20) << pair2.first.get_type_name(); + EXPECT_EQ(pair2.first.get(), 20) << pair2.first.get_type_name(); } else { - EXPECT_EQ(pair2.first.get(), 20); + EXPECT_EQ(pair2.first.get(), 20); } auto data3 = path->get_data_at(start); EXPECT_EQ(data3, StringRef("v.d.d", 5)); auto pair3 = dst->deserialize_from_sparse_column(value, start++); - EXPECT_EQ(pair3.first.get(), "50"); + EXPECT_EQ(pair3.first.get(), "50"); EXPECT_EQ(start, end); } @@ -702,7 +702,7 @@ TEST_F(ColumnVariantTest, advanced_insert_range_from) { auto data = path->get_data_at(start); EXPECT_EQ(data, StringRef("v.a", 3)); auto pair = dst->deserialize_from_sparse_column(value, start++); - EXPECT_EQ(pair.first.get(), 20); + EXPECT_EQ(pair.first.get(), 20); auto data2 = path->get_data_at(start); EXPECT_EQ(data2, StringRef("v.c", 3)); @@ -720,7 +720,7 @@ TEST_F(ColumnVariantTest, advanced_insert_range_from) { auto data = path->get_data_at(start); auto pair = dst->deserialize_from_sparse_column(value, start++); EXPECT_EQ(data, StringRef("v.a", 3)); - EXPECT_EQ(pair.first.get(), 20); + EXPECT_EQ(pair.first.get(), 20); auto data2 = path->get_data_at(start); auto pair2 = dst->deserialize_from_sparse_column(value, start++); @@ -744,7 +744,7 @@ TEST_F(ColumnVariantTest, advanced_insert_range_from) { auto data = path->get_data_at(start); auto pair = dst->deserialize_from_sparse_column(value, start++); EXPECT_EQ(data, StringRef("v.a", 3)); - EXPECT_EQ(pair.first.get(), 20); + EXPECT_EQ(pair.first.get(), 20); auto data2 = path->get_data_at(start); auto pair2 = dst->deserialize_from_sparse_column(value, start++); @@ -831,17 +831,17 @@ TEST_F(ColumnVariantTest, empty_inset_range_from) { auto data = path->get_data_at(start); EXPECT_EQ(data, StringRef("v.x", 3)); auto pair = dst->deserialize_from_sparse_column(value, start++); - EXPECT_EQ(pair.first.get(), std::numeric_limits::max()); + EXPECT_EQ(pair.first.get(), std::numeric_limits::max()); auto data2 = path->get_data_at(start); EXPECT_EQ(data2, StringRef("v.y", 3)); auto pair2 = dst->deserialize_from_sparse_column(value, start++); - EXPECT_EQ(pair2.first.get(), std::numeric_limits::max()); + EXPECT_EQ(pair2.first.get(), std::numeric_limits::max()); auto data3 = path->get_data_at(start); EXPECT_EQ(data3, StringRef("v.z", 3)); auto pair3 = dst->deserialize_from_sparse_column(value, start++); - EXPECT_EQ(pair3.first.get(), + EXPECT_EQ(pair3.first.get(), Int64(static_cast(std::numeric_limits::max()) + 1)); EXPECT_EQ(start, end); @@ -883,17 +883,17 @@ TEST_F(ColumnVariantTest, empty_inset_range_from) { auto data = path->get_data_at(start); EXPECT_EQ(data, StringRef("v.x", 3)); auto pair = dst->deserialize_from_sparse_column(value, start++); - EXPECT_EQ(pair.first.get(), std::numeric_limits::max()); + EXPECT_EQ(pair.first.get(), std::numeric_limits::max()); auto data2 = path->get_data_at(start); EXPECT_EQ(data2, StringRef("v.y", 3)); auto pair2 = dst->deserialize_from_sparse_column(value, start++); - EXPECT_EQ(pair2.first.get(), std::numeric_limits::max()); + EXPECT_EQ(pair2.first.get(), std::numeric_limits::max()); auto data3 = path->get_data_at(start); EXPECT_EQ(data3, StringRef("v.z", 3)); auto pair3 = dst->deserialize_from_sparse_column(value, start++); - EXPECT_EQ(pair3.first.get(), + EXPECT_EQ(pair3.first.get(), Int64(static_cast(std::numeric_limits::max()) + 1)); EXPECT_EQ(start, end); @@ -914,17 +914,17 @@ TEST_F(ColumnVariantTest, empty_inset_range_from) { auto data = path->get_data_at(start); EXPECT_EQ(data, StringRef("v.b.d", 5)); auto pair = dst->deserialize_from_sparse_column(value, start++); - EXPECT_EQ(pair.first.get(), 30); + EXPECT_EQ(pair.first.get(), 30); auto data2 = path->get_data_at(start); auto pair2 = dst->deserialize_from_sparse_column(value, start++); EXPECT_EQ(data2, StringRef("v.c.d", 5)); - EXPECT_EQ(pair2.first.get(), 30); + EXPECT_EQ(pair2.first.get(), 30); auto data3 = path->get_data_at(start); auto pair3 = dst->deserialize_from_sparse_column(value, start++); EXPECT_EQ(data3, StringRef("v.d.d", 5)); - EXPECT_EQ(pair3.first.get(), "50"); + EXPECT_EQ(pair3.first.get(), "50"); EXPECT_EQ(start, end); } } @@ -983,13 +983,13 @@ TEST_F(ColumnVariantTest, test_insert_indices_from) { Field result1; dst_column->get(0, result1); - const auto& fv = result1.get(); + const auto& fv = result1.get(); auto res = fv.at(PathInData()); - EXPECT_EQ(res.field.get(), 123); + EXPECT_EQ(res.field.get(), 123); Field result2; dst_column->get(1, result2); - EXPECT_EQ(result2.get().at(PathInData()).field.get(), 456); + EXPECT_EQ(result2.get().at(PathInData()).field.get(), 456); } // Test case 2: Insert from scalar variant source to non-empty destination of same type @@ -1023,9 +1023,9 @@ TEST_F(ColumnVariantTest, test_insert_indices_from) { dst_column->get(1, result2); dst_column->get(2, result3); - EXPECT_EQ(result1.get().at(PathInData()).field.get(), 789); - EXPECT_EQ(result2.get().at(PathInData()).field.get(), 456); - EXPECT_EQ(result3.get().at(PathInData()).field.get(), 123); + EXPECT_EQ(result1.get().at(PathInData()).field.get(), 789); + EXPECT_EQ(result2.get().at(PathInData()).field.get(), 456); + EXPECT_EQ(result3.get().at(PathInData()).field.get(), 123); } // Test case 3: Insert from non-scalar or different type source (fallback to try_insert) @@ -1035,7 +1035,7 @@ TEST_F(ColumnVariantTest, test_insert_indices_from) { // Create a map with {"a": 123} Field field_map = Field::create_field(VariantMap()); - auto& map1 = field_map.get(); + auto& map1 = field_map.get(); map1.insert_or_assign(PathInData("a"), FieldWithDataType {.field = Field::create_field(123), .base_scalar_type_id = PrimitiveType::TYPE_INT}); @@ -1043,7 +1043,7 @@ TEST_F(ColumnVariantTest, test_insert_indices_from) { // Create another map with {"b": "hello"} field_map = Field::create_field(VariantMap()); - auto& map2 = field_map.get(); + auto& map2 = field_map.get(); map2.insert_or_assign( PathInData("b"), FieldWithDataType {.field = Field::create_field(String("hello")), @@ -1073,11 +1073,11 @@ TEST_F(ColumnVariantTest, test_insert_indices_from) { EXPECT_TRUE(result1.get_type() == PrimitiveType::TYPE_VARIANT); EXPECT_TRUE(result2.get_type() == PrimitiveType::TYPE_VARIANT); - const auto& result1_map = result1.get(); - const auto& result2_map = result2.get(); + const auto& result1_map = result1.get(); + const auto& result2_map = result2.get(); - EXPECT_EQ(result1_map.at(PathInData("b")).field.get(), "hello"); - EXPECT_EQ(result2_map.at(PathInData("a")).field.get(), 123); + EXPECT_EQ(result1_map.at(PathInData("b")).field.get(), "hello"); + EXPECT_EQ(result2_map.at(PathInData("a")).field.get(), 123); } } @@ -2201,8 +2201,8 @@ doris::vectorized::Field get_field_v2(std::string_view type, size_t array_elemen doris::vectorized::Field str_field = Field::create_field(String("str", 3)); doris::vectorized::Field arr_int_field = Field::create_field(Array()); doris::vectorized::Field arr_str_field = Field::create_field(Array()); - auto& array1 = arr_int_field.get(); - auto& array2 = arr_str_field.get(); + auto& array1 = arr_int_field.get(); + auto& array2 = arr_str_field.get(); for (size_t i = 0; i < array_element_cnt; ++i) { array1.emplace_back(int_field); array2.emplace_back(str_field); @@ -2250,9 +2250,10 @@ TEST_F(ColumnVariantTest, array_field_operations) { array_type ->create_column(); // Nullable(Array(Nullable(Array(Nullable(TINYINT))))) Field array_field = vectorized::Field::create_field(Array()); - array_field.get().emplace_back(vectorized::Field::create_field(1)); + array_field.get().emplace_back( + vectorized::Field::create_field(1)); Field array_field_o = vectorized::Field::create_field(Array()); - array_field_o.get().emplace_back(array_field); + array_field_o.get().emplace_back(array_field); column->insert(array_field_o); obj->add_sub_column(path, std::move(column)); @@ -2279,9 +2280,9 @@ TEST_F(ColumnVariantTest, array_field_operations) { auto array_type = create_array(PrimitiveType::TYPE_TINYINT, 1); auto column = array_type->create_column(); Field array1 = vectorized::Field::create_field(Array()); - array1.get().emplace_back(vectorized::Field::create_field(1)); - array1.get().emplace_back(vectorized::Field::create_field(2)); - array1.get().emplace_back(vectorized::Field::create_field(3)); + array1.get().emplace_back(vectorized::Field::create_field(1)); + array1.get().emplace_back(vectorized::Field::create_field(2)); + array1.get().emplace_back(vectorized::Field::create_field(3)); column->insert(array1); obj->add_sub_column(path, std::move(column), array_type); @@ -2450,22 +2451,22 @@ TEST_F(ColumnVariantTest, try_insert_default_from_nested) { auto array_type = create_array(PrimitiveType::TYPE_STRING, 1); auto column = array_type->create_column(); Field array1 = vectorized::Field::create_field(Array()); - array1.get().emplace_back(vectorized::Field::create_field("amory")); - array1.get().emplace_back(vectorized::Field::create_field("commit")); + array1.get().emplace_back(vectorized::Field::create_field("amory")); + array1.get().emplace_back(vectorized::Field::create_field("commit")); Field array2 = vectorized::Field::create_field(Array()); - array2.get().emplace_back(vectorized::Field::create_field("amory")); - array2.get().emplace_back(vectorized::Field::create_field("doris")); + array2.get().emplace_back(vectorized::Field::create_field("amory")); + array2.get().emplace_back(vectorized::Field::create_field("doris")); column->insert(array1); column->insert(array2); auto array_type2 = create_array(PrimitiveType::TYPE_STRING, 2); auto column2 = array_type2->create_column(); Field array22 = vectorized::Field::create_field(Array()); - array22.get().emplace_back(array1); - array22.get().emplace_back(array2); + array22.get().emplace_back(array1); + array22.get().emplace_back(array2); Field array23 = vectorized::Field::create_field(Array()); - array23.get().emplace_back(array2); - array23.get().emplace_back(array1); + array23.get().emplace_back(array2); + array23.get().emplace_back(array1); column2->insert(array22); column2->insert(array23); @@ -2508,7 +2509,7 @@ TEST_F(ColumnVariantTest, unnest) { Field array2 = VariantUtil::create_nested_array_field( {{{"a", vectorized::Field::create_field("amory")}}, {{"b", vectorized::Field::create_field("doris")}}}); - std::cout << "array: " << array1.get().size() << std::endl; + std::cout << "array: " << array1.get().size() << std::endl; nested_col->insert(array1); nested_col->insert(array2); std::cout << nested_col->size() << std::endl; @@ -3098,8 +3099,8 @@ EXPECT_EQ(info.num_dimensions, 2); JsonbField field(value.value(), value.size()); Field array = Field::create_field(Array()); - array.get().push_back(Field::create_field(std::move(field))); - array.get().push_back(Field::create_field(JsonbField())); + array.get().push_back(Field::create_field(std::move(field))); + array.get().push_back(Field::create_field(JsonbField())); FieldInfo info; schema_util::get_field_info(array, &info); // which should support ??!! @@ -3120,15 +3121,15 @@ TEST_F(ColumnVariantTest, field_visitor) { Field replacement = Field::create_field(Int64(42)); Field result = apply_visitor(FieldVisitorReplaceScalars(replacement, 0), field); - EXPECT_EQ(result.get(), 42); + EXPECT_EQ(result.get(), 42); Field replacement1 = Field::create_field(Int64(42)); Field result1 = apply_visitor(FieldVisitorReplaceScalars(replacement, 1), field); - EXPECT_EQ(result1.get().size(), 3); - EXPECT_EQ(result1.get()[0].get(), 42); - EXPECT_EQ(result1.get()[1].get(), 42); - EXPECT_EQ(result1.get()[2].get(), 42); + EXPECT_EQ(result1.get().size(), 3); + EXPECT_EQ(result1.get()[0].get(), 42); + EXPECT_EQ(result1.get()[1].get(), 42); + EXPECT_EQ(result1.get()[2].get(), 42); } } @@ -3192,7 +3193,7 @@ TEST_F(ColumnVariantTest, subcolumn_operations_coverage) { // col_arr->insert(array1); // col_arr->insert(array2); Field an = Field::create_field(Array()); - an.get().push_back(Field::create_field(Int64(1))); + an.get().push_back(Field::create_field(Int64(1))); col_arr->insert(an); col_arr->insert(an); col_arr->insert(an); @@ -3236,7 +3237,7 @@ TEST_F(ColumnVariantTest, subcolumn_operations_coverage) { std::vector> data; Field an = Field::create_field(Array()); - an.get().push_back(Field::create_field(Null())); + an.get().push_back(Field::create_field(Null())); data.emplace_back("v.a", an); // 2. subcolumn path auto vf = VariantUtil::construct_variant_map(data); @@ -3723,7 +3724,7 @@ TEST_F(ColumnVariantTest, test_variant_deserialize_from_sparse_column) { { Field int_field = Field::create_field(123); Field array_field = Field::create_field(Array(1)); - array_field.get()[0] = int_field; + array_field.get()[0] = int_field; FieldInfo info = {PrimitiveType::TYPE_TINYINT, false, false, 1}; ColumnVariant::Subcolumn int_subcolumn(0, true, false); int_subcolumn.insert(array_field, info); @@ -3743,9 +3744,9 @@ TEST_F(ColumnVariantTest, test_variant_deserialize_from_sparse_column) { EXPECT_EQ(subcolumn.get_dimensions(), 1); EXPECT_EQ(subcolumn.get_least_common_base_type_id(), PrimitiveType::TYPE_TINYINT); auto v = subcolumn.get_last_field(); - auto& arr = v.get(); + auto& arr = v.get(); EXPECT_EQ(arr.size(), 1); - EXPECT_EQ(arr[0].get(), 123); + EXPECT_EQ(arr[0].get(), 123); subcolumn.deserialize_from_sparse_column(&value, 1); EXPECT_EQ(subcolumn.data.size(), 2); @@ -3754,9 +3755,9 @@ TEST_F(ColumnVariantTest, test_variant_deserialize_from_sparse_column) { EXPECT_EQ(subcolumn.get_dimensions(), 1); EXPECT_EQ(subcolumn.get_least_common_base_type_id(), PrimitiveType::TYPE_INT); auto v2 = subcolumn.get_last_field(); - auto& arr2 = v2.get(); + auto& arr2 = v2.get(); EXPECT_EQ(arr2.size(), 1); - EXPECT_EQ(arr2[0].get(), 123); + EXPECT_EQ(arr2[0].get(), 123); } column_map.clear(); @@ -3767,15 +3768,15 @@ TEST_F(ColumnVariantTest, test_variant_deserialize_from_sparse_column) { { Field int_field = Field::create_field(123); Field array_field = Field::create_field(Array(1)); - array_field.get()[0] = Field(); + array_field.get()[0] = Field(); FieldInfo info = {PrimitiveType::TYPE_NULL, false, false, 1}; ColumnVariant::Subcolumn int_subcolumn(0, true, false); int_subcolumn.insert(array_field, info); int_subcolumn.serialize_to_sparse_column(&key, "b", &value, 0); array_field = Field::create_field(Array(2)); - array_field.get()[0] = Field(); - array_field.get()[1] = int_field; + array_field.get()[0] = Field(); + array_field.get()[1] = int_field; info = {PrimitiveType::TYPE_INT, false, false, 1}; int_subcolumn.insert(array_field, info); int_subcolumn.serialize_to_sparse_column(&key, "b", &value, 1); @@ -3789,7 +3790,7 @@ TEST_F(ColumnVariantTest, test_variant_deserialize_from_sparse_column) { PrimitiveType::TYPE_ARRAY); EXPECT_EQ(subcolumn.get_dimensions(), 1); auto v = subcolumn.get_last_field(); - auto& arr = v.get(); + auto& arr = v.get(); EXPECT_EQ(arr.size(), 1); EXPECT_TRUE(arr[0].is_null()); @@ -3800,10 +3801,10 @@ TEST_F(ColumnVariantTest, test_variant_deserialize_from_sparse_column) { EXPECT_EQ(subcolumn.get_dimensions(), 1); EXPECT_EQ(subcolumn.get_least_common_base_type_id(), PrimitiveType::TYPE_INT); auto v2 = subcolumn.get_last_field(); - auto& arr2 = v2.get(); + auto& arr2 = v2.get(); EXPECT_EQ(arr2.size(), 2); EXPECT_TRUE(arr2[0].is_null()); - EXPECT_EQ(arr2[1].get(), 123); + EXPECT_EQ(arr2[1].get(), 123); } } diff --git a/be/test/vec/columns/common_column_test.h b/be/test/vec/columns/common_column_test.h index 424d9d13af4780..5dfed2d73c45cc 100644 --- a/be/test/vec/columns/common_column_test.h +++ b/be/test/vec/columns/common_column_test.h @@ -2575,7 +2575,9 @@ auto assert_column_vector_field_callback = [](auto x, const MutableColumnPtr& so for (size_t i = 0; i != src_size; ++i) { Field f; assert_col->get(i, f); - ASSERT_EQ(f.get(), col_vec_src->get_element(i)) << f.get_type_name(); + auto tmp = col_vec_src->get_element(i); + ASSERT_EQ(f.get(), *(typename PrimitiveTypeTraits::CppType*)&tmp) + << f.get_type_name(); } }; @@ -2927,6 +2929,8 @@ auto assert_column_vector_insert_default_callback = [](auto x, PType == PrimitiveType::TYPE_DATETIME) { EXPECT_EQ(col_vec_target->get_element(i), T(PrimitiveTypeTraits::CppType::DEFAULT_VALUE)); + } else if constexpr (PType == PrimitiveType::TYPE_DECIMALV2) { + EXPECT_EQ(col_vec_target->get_element(i), DecimalV2Value()); } else { EXPECT_EQ(col_vec_target->get_element(i), T {}); } @@ -2978,6 +2982,8 @@ auto assert_column_vector_insert_many_defaults_callback = PType == PrimitiveType::TYPE_DATETIME) { EXPECT_EQ(col_vec_target->get_element(i), T(PrimitiveTypeTraits::CppType::DEFAULT_VALUE)); + } else if constexpr (PType == PrimitiveType::TYPE_DECIMALV2) { + EXPECT_EQ(col_vec_target->get_element(i), DecimalV2Value()); } else { EXPECT_EQ(col_vec_target->get_element(i), T {}); } @@ -3009,9 +3015,7 @@ auto assert_column_vector_get_int64_callback = [](auto x, const MutableColumnPtr auto* col_vec_src = assert_cast(source_column.get()); const auto& data = col_vec_src->get_data(); for (size_t i = 0; i != src_size; ++i) { - if constexpr (IsDecimalNumber) { - EXPECT_EQ(col_vec_src->get_int(i), (Int64)(data[i].value * col_vec_src->get_scale())); - } else { + if constexpr (!IsDecimalNumber) { EXPECT_EQ(col_vec_src->get_int(i), (Int64)data[i]); } } @@ -3256,7 +3260,9 @@ auto assert_column_vector_replace_column_null_data_callback = [](auto x, const M target_column->replace_column_null_data(null_map.data()); for (size_t i = 0; i < src_size; ++i) { if (null_map[i] == 1) { - if constexpr (IsDecimalNumber) { + if constexpr (IsDecimal128V2) { + EXPECT_EQ(col_vec_target->get_element(i), DecimalV2Value {}); + } else if constexpr (IsDecimalNumber) { EXPECT_EQ(col_vec_target->get_element(i), T {}); } else { EXPECT_EQ(col_vec_target->get_element(i), ColumnVecType::default_value()); @@ -3357,6 +3363,8 @@ auto assert_column_vector_clone_resized_callback = [](auto x, for (; i < clone_count; ++i) { if constexpr (std::is_same_v || std::is_same_v) { EXPECT_EQ(col_vec_target->get_data_at(i).to_string(), ""); + } else if constexpr (IsDecimal128V2) { + EXPECT_EQ(col_vec_target->get_element(i), DecimalV2Value {}); } else if constexpr (IsDecimalNumber) { EXPECT_EQ(col_vec_target->get_element(i), T {}); } else { diff --git a/be/test/vec/core/column_array_test.cpp b/be/test/vec/core/column_array_test.cpp index f709d4931ec2f4..03afa94e69fb61 100644 --- a/be/test/vec/core/column_array_test.cpp +++ b/be/test/vec/core/column_array_test.cpp @@ -75,10 +75,10 @@ TEST(ColumnArrayOldTest, IntArrayTest) { ColumnArray array_column(std::move(data_column), std::move(off_column)); EXPECT_EQ(array_column.size(), offs.size() - 1); for (size_t i = 0; i < array_column.size(); ++i) { - auto v = get(array_column[i]); + auto v = array_column[i].get(); EXPECT_EQ(v.size(), offs[i + 1] - offs[i]); for (size_t j = 0; j < v.size(); ++j) { - EXPECT_EQ(vals[offs[i] + j], get(v[j])); + EXPECT_EQ(vals[offs[i] + j], v[j].get()); } } } @@ -100,10 +100,10 @@ TEST(ColumnArrayOldTest, StringArrayTest) { ColumnArray array_column(std::move(data_column), std::move(off_column)); EXPECT_EQ(array_column.size(), offs.size() - 1); for (size_t i = 0; i < array_column.size(); ++i) { - auto v = get(array_column[i]); + auto v = array_column[i].get(); EXPECT_EQ(v.size(), offs[i + 1] - offs[i]); for (size_t j = 0; j < v.size(); ++j) { - EXPECT_EQ(vals[offs[i] + j], get(v[j])); + EXPECT_EQ(vals[offs[i] + j], v[j].get()); } } } diff --git a/be/test/vec/core/column_complex_test.cpp b/be/test/vec/core/column_complex_test.cpp index a1167c68df5136..a6319b2b9fd039 100644 --- a/be/test/vec/core/column_complex_test.cpp +++ b/be/test/vec/core/column_complex_test.cpp @@ -608,7 +608,7 @@ TEST_F(ColumnBitmapTest, ColumnBitmapReadWrite) { Field field; column->get(0, field); - auto bitmap = field.get(); + auto bitmap = field.get(); EXPECT_TRUE(bitmap.contains(10)); EXPECT_TRUE(bitmap.contains(1000000)); } @@ -636,7 +636,7 @@ TEST_F(ColumnBitmapTest, OperatorValidate) { for (size_t i = 0; i != row_size; ++i) { auto field = bitmap_column[i]; ASSERT_EQ(field.get_type(), PrimitiveType::TYPE_BITMAP); - const auto& bitmap = vectorized::get(field); + const auto& bitmap = field.get(); ASSERT_EQ(bitmap.cardinality(), i + 1); for (size_t j = 0; j <= i; ++j) { diff --git a/be/test/vec/core/column_map_test.cpp b/be/test/vec/core/column_map_test.cpp index 37baee03c9ef87..4661511e891025 100644 --- a/be/test/vec/core/column_map_test.cpp +++ b/be/test/vec/core/column_map_test.cpp @@ -78,9 +78,9 @@ TEST(ColumnMapTest2, StringKeyTest) { indices.data() + indices.size()); EXPECT_EQ(col_map_str32.size(), 2); - auto map = get(col_map_str32[0]); - auto k = get(map[0]); - auto v = get(map[1]); + auto map = col_map_str32[0].get(); + auto k = map[0].get(); + auto v = map[1].get(); EXPECT_EQ(k.size(), 3); for (size_t i = 0; i < k.size(); ++i) { EXPECT_EQ(k[i], k1[i]); @@ -90,9 +90,9 @@ TEST(ColumnMapTest2, StringKeyTest) { EXPECT_EQ(v[i], v1[i]); } - map = get(col_map_str32[1]); - k = get(map[0]); - v = get(map[1]); + map = col_map_str32[1].get(); + k = map[0].get(); + v = map[1].get(); EXPECT_EQ(k.size(), 3); for (size_t i = 0; i < k.size(); ++i) { EXPECT_EQ(k[i], k3[i]); @@ -316,35 +316,35 @@ TEST(ColumnMapTest2, StringKeyTestDuplicatedKeysNestedMap) { ASSERT_EQ(string_keys.get_element(0), "a"); ASSERT_EQ(string_keys.get_element(1), "aa"); - auto map_value1 = get(map_values[0]); - auto map_value2 = get(map_values[1]); + auto map_value1 = map_values[0].get(); + auto map_value2 = map_values[1].get(); ASSERT_EQ(map_value1.size(), 2); ASSERT_EQ(map_value2.size(), 2); // keys - auto v1_keys = get(map_value1[0]); + auto v1_keys = map_value1[0].get(); ASSERT_EQ(v1_keys.size(), 3); - ASSERT_EQ(get(v1_keys[0]), "a"); - ASSERT_EQ(get(v1_keys[1]), "b"); - ASSERT_EQ(get(v1_keys[2]), "c"); + ASSERT_EQ(v1_keys[0].get(), "a"); + ASSERT_EQ(v1_keys[1].get(), "b"); + ASSERT_EQ(v1_keys[2].get(), "c"); - auto v2_keys = get(map_value2[0]); + auto v2_keys = map_value2[0].get(); ASSERT_EQ(v2_keys.size(), 2); - ASSERT_EQ(get(v2_keys[0]), "aa"); - ASSERT_EQ(get(v2_keys[1]), "cc"); + ASSERT_EQ(v2_keys[0].get(), "aa"); + ASSERT_EQ(v2_keys[1].get(), "cc"); // values - auto v1_values = get(map_value1[1]); + auto v1_values = map_value1[1].get(); ASSERT_EQ(v1_values.size(), 3); - ASSERT_EQ(get(v1_values[0]), 4); - ASSERT_EQ(get(v1_values[1]), 5); - ASSERT_EQ(get(v1_values[2]), 6); + ASSERT_EQ(v1_values[0].get(), 4); + ASSERT_EQ(v1_values[1].get(), 5); + ASSERT_EQ(v1_values[2].get(), 6); - auto v2_values = get(map_value2[1]); + auto v2_values = map_value2[1].get(); ASSERT_EQ(v2_values.size(), 2); - ASSERT_EQ(get(v2_values[0]), 11); - ASSERT_EQ(get(v2_values[1]), 333); + ASSERT_EQ(v2_values[0].get(), 11); + ASSERT_EQ(v2_values[1].get(), 333); }; TEST(ColumnMapTest2, StringValueTest) { @@ -391,9 +391,9 @@ TEST(ColumnMapTest2, StringValueTest) { indices.data() + indices.size()); EXPECT_EQ(col_map_str32.size(), 2); - auto map = get(col_map_str32[0]); - auto k = get(map[0]); - auto v = get(map[1]); + auto map = col_map_str32[0].get(); + auto k = map[0].get(); + auto v = map[1].get(); EXPECT_EQ(k.size(), 3); for (size_t i = 0; i < k.size(); ++i) { EXPECT_EQ(k[i], k1[i]); @@ -403,9 +403,9 @@ TEST(ColumnMapTest2, StringValueTest) { EXPECT_EQ(v[i], v1[i]); } - map = get(col_map_str32[1]); - k = get(map[0]); - v = get(map[1]); + map = col_map_str32[1].get(); + k = map[0].get(); + v = map[1].get(); EXPECT_EQ(k.size(), 3); for (size_t i = 0; i < k.size(); ++i) { EXPECT_EQ(k[i], k3[i]); diff --git a/be/test/vec/core/column_struct_test.cpp b/be/test/vec/core/column_struct_test.cpp index 41bc37b9272f80..5b0e725fee2765 100644 --- a/be/test/vec/core/column_struct_test.cpp +++ b/be/test/vec/core/column_struct_test.cpp @@ -62,17 +62,17 @@ TEST(ColumnStructTest2, StringTest) { ->insert_indices_from(*str64_struct_column, indices.data(), indices.data() + indices.size()); EXPECT_EQ(str32_struct_column->size(), indices.size()); - auto t = get(str32_struct_column->operator[](0)); + auto t = str32_struct_column->operator[](0).get(); EXPECT_EQ(t.size(), 2); EXPECT_EQ(t[0], Field::create_field("aaa")); EXPECT_EQ(t[1], Field::create_field(111)); - t = get(str32_struct_column->operator[](1)); + t = str32_struct_column->operator[](1).get(); EXPECT_EQ(t.size(), 2); EXPECT_EQ(t[0], Field::create_field("ccc")); EXPECT_EQ(t[1], Field::create_field(333)); - t = get(str32_struct_column->operator[](2)); + t = str32_struct_column->operator[](2).get(); EXPECT_EQ(t.size(), 2); EXPECT_EQ(t[0], Field::create_field("ddd")); EXPECT_EQ(t[1], Field::create_field(444)); diff --git a/be/test/vec/core/column_test.cpp b/be/test/vec/core/column_test.cpp index 7dc7f4e0088e49..42d48875df48c3 100644 --- a/be/test/vec/core/column_test.cpp +++ b/be/test/vec/core/column_test.cpp @@ -158,16 +158,16 @@ TEST_F(ColumnTest, ShrinkColumnArray) { EXPECT_EQ(shrunk_col->size(), 2); auto data_col = assert_cast(*shrunk_col).get_data_ptr(); EXPECT_EQ(data_col->size(), 3); - auto v = get(shrunk_col->operator[](0)); + auto v = shrunk_col->operator[](0).get(); EXPECT_EQ(v.size(), 3); - EXPECT_EQ(get(v[0]), 1); - EXPECT_EQ(get(v[1]), 2); - EXPECT_EQ(get(v[2]), 3); - v = get(shrunk_col->operator[](1)); + EXPECT_EQ(v[0].get(), 1); + EXPECT_EQ(v[1].get(), 2); + EXPECT_EQ(v[2].get(), 3); + v = shrunk_col->operator[](1).get(); EXPECT_EQ(v.size(), 0); - EXPECT_EQ(get(data_col->operator[](0)), 1); - EXPECT_EQ(get(data_col->operator[](1)), 2); - EXPECT_EQ(get(data_col->operator[](2)), 3); + EXPECT_EQ(data_col->operator[](0).get(), 1); + EXPECT_EQ(data_col->operator[](1).get(), 2); + EXPECT_EQ(data_col->operator[](2).get(), 3); // expand will not make data expand EXPECT_EQ(col_arr->size(), 2); @@ -175,14 +175,14 @@ TEST_F(ColumnTest, ShrinkColumnArray) { EXPECT_EQ(shrunk_col->size(), 10); data_col = assert_cast(*shrunk_col).get_data_ptr(); EXPECT_EQ(data_col->size(), 3); - v = get(shrunk_col->operator[](0)); + v = shrunk_col->operator[](0).get(); EXPECT_EQ(v.size(), 3); - EXPECT_EQ(get(v[0]), 1); - EXPECT_EQ(get(v[1]), 2); - EXPECT_EQ(get(v[2]), 3); - v = get(shrunk_col->operator[](1)); + EXPECT_EQ(v[0].get(), 1); + EXPECT_EQ(v[1].get(), 2); + EXPECT_EQ(v[2].get(), 3); + v = shrunk_col->operator[](1).get(); EXPECT_EQ(v.size(), 0); - v = get(shrunk_col->operator[](2)); + v = shrunk_col->operator[](2).get(); EXPECT_EQ(v.size(), 0); } @@ -193,21 +193,21 @@ TEST_F(ColumnTest, ShrinkColumnMap) { EXPECT_EQ(shrunk_col->size(), 2); auto data_col = assert_cast(*shrunk_col).get_values_ptr(); EXPECT_EQ(data_col->size(), 3); - auto v = get(shrunk_col->operator[](0)); + auto v = shrunk_col->operator[](0).get(); EXPECT_EQ(v.size(), 2); - EXPECT_EQ(get(v[0]), + EXPECT_EQ(v[0].get(), Array({Field::create_field("a"), Field::create_field("b"), Field::create_field("c")})); - EXPECT_EQ(get(v[1]), + EXPECT_EQ(v[1].get(), Array({Field::create_field(1), Field::create_field(2), Field::create_field(3)})); - v = get(shrunk_col->operator[](1)); + v = shrunk_col->operator[](1).get(); EXPECT_EQ(v.size(), 2); - EXPECT_EQ(get(v[0]), Array()); - EXPECT_EQ(get(v[1]), Array()); - EXPECT_EQ(get(data_col->operator[](0)), 1); - EXPECT_EQ(get(data_col->operator[](1)), 2); - EXPECT_EQ(get(data_col->operator[](2)), 3); + EXPECT_EQ(v[0].get(), Array()); + EXPECT_EQ(v[1].get(), Array()); + EXPECT_EQ(data_col->operator[](0).get(), 1); + EXPECT_EQ(data_col->operator[](1).get(), 2); + EXPECT_EQ(data_col->operator[](2).get(), 3); // expand will not make data expand EXPECT_EQ(col_map->size(), 2); @@ -215,22 +215,22 @@ TEST_F(ColumnTest, ShrinkColumnMap) { EXPECT_EQ(shrunk_col->size(), 10); data_col = assert_cast(*shrunk_col).get_values_ptr(); EXPECT_EQ(data_col->size(), 3); - v = get(shrunk_col->operator[](0)); + v = shrunk_col->operator[](0).get(); EXPECT_EQ(v.size(), 2); - EXPECT_EQ(get(v[0]), + EXPECT_EQ(v[0].get(), Array({Field::create_field("a"), Field::create_field("b"), Field::create_field("c")})); - EXPECT_EQ(get(v[1]), + EXPECT_EQ(v[1].get(), Array({Field::create_field(1), Field::create_field(2), Field::create_field(3)})); - v = get(shrunk_col->operator[](1)); + v = shrunk_col->operator[](1).get(); EXPECT_EQ(v.size(), 2); - EXPECT_EQ(get(v[0]), Array()); - EXPECT_EQ(get(v[1]), Array()); - v = get(shrunk_col->operator[](2)); + EXPECT_EQ(v[0].get(), Array()); + EXPECT_EQ(v[1].get(), Array()); + v = shrunk_col->operator[](2).get(); EXPECT_EQ(v.size(), 2); - EXPECT_EQ(get(v[0]), Array()); - EXPECT_EQ(get(v[1]), Array()); + EXPECT_EQ(v[0].get(), Array()); + EXPECT_EQ(v[1].get(), Array()); } } // namespace doris::vectorized diff --git a/be/test/vec/core/field_test.cpp b/be/test/vec/core/field_test.cpp index d40fac5fbf9db1..7a436c65505c20 100644 --- a/be/test/vec/core/field_test.cpp +++ b/be/test/vec/core/field_test.cpp @@ -36,27 +36,27 @@ TEST(VFieldTest, field_string) { Field f; f = Field::create_field(String {"Hello, world (1)"}); - ASSERT_EQ(f.get(), "Hello, world (1)"); + ASSERT_EQ(f.get(), "Hello, world (1)"); f = Field::create_field(String {"Hello, world (2)"}); - ASSERT_EQ(f.get(), "Hello, world (2)"); + ASSERT_EQ(f.get(), "Hello, world (2)"); f = Field::create_field( Array {Field ::create_field(String {"Hello, world (3)"})}); - ASSERT_EQ(f.get()[0].get(), "Hello, world (3)"); + ASSERT_EQ(f.get()[0].get(), "Hello, world (3)"); f = Field::create_field(String {"Hello, world (4)"}); - ASSERT_EQ(f.get(), "Hello, world (4)"); + ASSERT_EQ(f.get(), "Hello, world (4)"); f = Field::create_field( Array {Field::create_field(String {"Hello, world (5)"})}); - ASSERT_EQ(f.get()[0].get(), "Hello, world (5)"); + ASSERT_EQ(f.get()[0].get(), "Hello, world (5)"); f = Field::create_field( Array {Field::create_field(String {"Hello, world (6)"})}); - ASSERT_EQ(f.get()[0].get(), "Hello, world (6)"); + ASSERT_EQ(f.get()[0].get(), "Hello, world (6)"); } TEST(VFieldTest, field_timestamptz) { Field f; f = Field::create_field(*(TimestampTzValue*)&MIN_DATETIME_V2); ASSERT_EQ(f.get_type(), TYPE_TIMESTAMPTZ); - ASSERT_EQ(f.get(), MIN_DATETIME_V2); + ASSERT_EQ(f.get().to_date_int_val(), MIN_DATETIME_V2); } TEST(VFieldTest, jsonb_field_unique_ptr) { @@ -110,10 +110,10 @@ TEST(VFieldTest, jsonb_field_unique_ptr) { // Test JsonbField with Field Field field_jf = Field::create_field(jf1); ASSERT_EQ(field_jf.get_type(), TYPE_JSONB); - ASSERT_NE(field_jf.get().get_value(), nullptr); - ASSERT_EQ(field_jf.get().get_size(), test_size); - ASSERT_EQ(std::string(field_jf.get().get_value(), - field_jf.get().get_size()), + ASSERT_NE(field_jf.get().get_value(), nullptr); + ASSERT_EQ(field_jf.get().get_size(), test_size); + ASSERT_EQ(std::string(field_jf.get().get_value(), + field_jf.get().get_size()), std::string(test_data)); } @@ -184,9 +184,9 @@ TEST(VFieldTest, jsonb_field_io) { Field f2 = Field::create_field(jsonb_from_field); ASSERT_EQ(f2.get_type(), TYPE_JSONB); - ASSERT_NE(f2.get().get_value(), nullptr); + ASSERT_NE(f2.get().get_value(), nullptr); ASSERT_EQ( - std::string(f2.get().get_value(), f2.get().get_size()), + std::string(f2.get().get_value(), f2.get().get_size()), std::string(test_data)); } } diff --git a/be/test/vec/data_types/data_type_array_test.cpp b/be/test/vec/data_types/data_type_array_test.cpp index ad41cb2c6a3872..f054dc950886b9 100644 --- a/be/test/vec/data_types/data_type_array_test.cpp +++ b/be/test/vec/data_types/data_type_array_test.cpp @@ -538,7 +538,7 @@ TEST_F(DataTypeArrayTest, GetFieldWithDataTypeTest) { auto fdt = array_type->get_field_with_data_type(*column, 0); EXPECT_EQ(fdt.field.get_type(), TYPE_ARRAY); - EXPECT_EQ(fdt.field.get(), arr); + EXPECT_EQ(fdt.field.get(), arr); EXPECT_EQ(fdt.base_scalar_type_id, TYPE_INT); EXPECT_EQ(fdt.num_dimensions, 1); EXPECT_EQ(fdt.precision, -1); @@ -595,11 +595,11 @@ TEST_F(DataTypeArrayTest, GetFieldWithDataTypeTest) { EXPECT_EQ(fdt.field.get_type(), TYPE_ARRAY); EXPECT_EQ(fdt.base_scalar_type_id, TYPE_JSONB); EXPECT_EQ(fdt.num_dimensions, 1); - const auto& result_arr = fdt.field.get(); + const auto& result_arr = fdt.field.get(); EXPECT_EQ(result_arr.size(), 1); EXPECT_EQ(result_arr[0].get_type(), TYPE_JSONB); - EXPECT_EQ(std::string(result_arr[0].get().get_value(), - result_arr[0].get().get_size()), + EXPECT_EQ(std::string(result_arr[0].get().get_value(), + result_arr[0].get().get_size()), json_str); } diff --git a/be/test/vec/data_types/data_type_datetime_v1_test.cpp b/be/test/vec/data_types/data_type_datetime_v1_test.cpp index 47025f0a53d3ea..f79ebbdd060364 100644 --- a/be/test/vec/data_types/data_type_datetime_v1_test.cpp +++ b/be/test/vec/data_types/data_type_datetime_v1_test.cpp @@ -164,8 +164,7 @@ TEST_F(DataTypeDateTimeV1Test, get_field) { expr_node.date_literal.value = "0000-01-01"; auto field = dt_date.get_field(expr_node); - auto int_value = field.get(); - auto date_value = binary_cast(int_value); + auto date_value = field.get(); EXPECT_EQ(date_value.year(), 0); EXPECT_EQ(date_value.month(), 1); EXPECT_EQ(date_value.day(), 1); @@ -176,8 +175,7 @@ TEST_F(DataTypeDateTimeV1Test, get_field) { // should be OK expr_node.date_literal.value = "0000-01-01 00:00:00.000000"; field = dt_date.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 0); EXPECT_EQ(date_value.month(), 1); EXPECT_EQ(date_value.day(), 1); @@ -187,8 +185,7 @@ TEST_F(DataTypeDateTimeV1Test, get_field) { expr_node.date_literal.value = "9999-12-31 00:00:00.000000"; field = dt_date.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 9999); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); @@ -198,8 +195,7 @@ TEST_F(DataTypeDateTimeV1Test, get_field) { expr_node.date_literal.value = "2021-01-01"; field = dt_date.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 2021); EXPECT_EQ(date_value.month(), 1); EXPECT_EQ(date_value.day(), 1); @@ -209,8 +205,7 @@ TEST_F(DataTypeDateTimeV1Test, get_field) { expr_node.date_literal.value = "9999-12-31"; field = dt_date.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 9999); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); @@ -221,8 +216,7 @@ TEST_F(DataTypeDateTimeV1Test, get_field) { // it's OK to have time part for date expr_node.date_literal.value = "0000-01-01 23:59:59"; field = dt_date.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 0); EXPECT_EQ(date_value.month(), 1); EXPECT_EQ(date_value.day(), 1); @@ -232,8 +226,7 @@ TEST_F(DataTypeDateTimeV1Test, get_field) { expr_node.date_literal.value = "9999-12-31 23:59:59"; field = dt_date.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 9999); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); @@ -245,8 +238,7 @@ TEST_F(DataTypeDateTimeV1Test, get_field) { TExprNode expr_node; expr_node.date_literal.value = "0000-01-01 00:00:00"; auto field = dt_datetime.get_field(expr_node); - auto int_value = field.get(); - auto date_value = binary_cast(int_value); + auto date_value = field.get(); EXPECT_EQ(date_value.year(), 0); EXPECT_EQ(date_value.month(), 1); EXPECT_EQ(date_value.day(), 1); @@ -256,8 +248,7 @@ TEST_F(DataTypeDateTimeV1Test, get_field) { expr_node.date_literal.value = "2021-12-31 12:23:34"; field = dt_datetime.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 2021); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); @@ -267,8 +258,7 @@ TEST_F(DataTypeDateTimeV1Test, get_field) { expr_node.date_literal.value = "9999-12-31 23:59:59"; field = dt_datetime.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 9999); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); @@ -278,8 +268,7 @@ TEST_F(DataTypeDateTimeV1Test, get_field) { expr_node.date_literal.value = "0000-01-01 00:00:00.00000"; field = dt_datetime.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 0); EXPECT_EQ(date_value.month(), 1); EXPECT_EQ(date_value.day(), 1); @@ -290,8 +279,7 @@ TEST_F(DataTypeDateTimeV1Test, get_field) { // microsecond is discarded expr_node.date_literal.value = "0000-01-01 00:00:00.000001"; field = dt_datetime.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 0); EXPECT_EQ(date_value.month(), 1); EXPECT_EQ(date_value.day(), 1); @@ -301,8 +289,7 @@ TEST_F(DataTypeDateTimeV1Test, get_field) { expr_node.date_literal.value = "0000-01-01 00:00:00.1"; field = dt_datetime.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 0); EXPECT_EQ(date_value.month(), 1); EXPECT_EQ(date_value.day(), 1); @@ -312,8 +299,7 @@ TEST_F(DataTypeDateTimeV1Test, get_field) { expr_node.date_literal.value = "2021-12-31 12:23:34.12345"; field = dt_datetime.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 2021); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); @@ -323,8 +309,7 @@ TEST_F(DataTypeDateTimeV1Test, get_field) { expr_node.date_literal.value = "9999-12-31 23:59:59.999994"; field = dt_datetime.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 9999); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); @@ -334,8 +319,7 @@ TEST_F(DataTypeDateTimeV1Test, get_field) { expr_node.date_literal.value = "9999-12-31 23:59:59.99999"; field = dt_datetime.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 9999); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); diff --git a/be/test/vec/data_types/data_type_datetime_v2_test.cpp b/be/test/vec/data_types/data_type_datetime_v2_test.cpp index 2f5ee2244b5122..9a266e35ca4287 100644 --- a/be/test/vec/data_types/data_type_datetime_v2_test.cpp +++ b/be/test/vec/data_types/data_type_datetime_v2_test.cpp @@ -264,9 +264,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "0000-01-01"; auto field = dt_date_v2.get_field(expr_node); - auto int_value = field.get(); - DateV2Value date_value = - binary_cast>(int_value); + auto date_value = field.get(); EXPECT_EQ(date_value.year(), 0); EXPECT_EQ(date_value.month(), 1); EXPECT_EQ(date_value.day(), 1); @@ -278,8 +276,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { // should be OK expr_node.date_literal.value = "0000-01-01 00:00:00.000000"; field = dt_date_v2.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 0); EXPECT_EQ(date_value.month(), 1); EXPECT_EQ(date_value.day(), 1); @@ -290,8 +287,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "9999-12-31 00:00:00.000000"; field = dt_date_v2.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 9999); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); @@ -302,16 +298,14 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "2021-01-01"; field = dt_date_v2.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 2021); EXPECT_EQ(date_value.month(), 1); EXPECT_EQ(date_value.day(), 1); expr_node.date_literal.value = "9999-12-31"; field = dt_date_v2.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 9999); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); @@ -319,8 +313,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { // it's OK to have time part for date expr_node.date_literal.value = "0000-01-01 23:59:59"; field = dt_date_v2.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 0); EXPECT_EQ(date_value.month(), 1); EXPECT_EQ(date_value.day(), 1); @@ -331,8 +324,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "9999-12-31 23:59:59"; field = dt_date_v2.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 9999); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); @@ -346,9 +338,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "0000-01-01 00:00:00"; auto field = dt_datetime_v2_0.get_field(expr_node); - auto int_value = field.get(); - DateV2Value date_value = - binary_cast>(int_value); + auto date_value = field.get(); EXPECT_EQ(date_value.year(), 0); EXPECT_EQ(date_value.month(), 1); EXPECT_EQ(date_value.day(), 1); @@ -359,8 +349,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "2021-12-31 12:23:34"; field = dt_datetime_v2_0.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 2021); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); @@ -371,8 +360,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "9999-12-31 23:59:59"; field = dt_datetime_v2_0.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 9999); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); @@ -389,9 +377,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "0000-01-01 00:00:00.00000"; auto field = dt_datetime_v2_5.get_field(expr_node); - auto int_value = field.get(); - DateV2Value date_value = - binary_cast>(int_value); + auto date_value = field.get(); EXPECT_EQ(date_value.year(), 0); EXPECT_EQ(date_value.month(), 1); EXPECT_EQ(date_value.day(), 1); @@ -403,8 +389,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { // microsecond is rounded expr_node.date_literal.value = "0000-01-01 00:00:00.000001"; field = dt_datetime_v2_5.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 0); EXPECT_EQ(date_value.month(), 1); EXPECT_EQ(date_value.day(), 1); @@ -415,8 +400,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "0000-01-01 00:00:00.000005"; field = dt_datetime_v2_5.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 0); EXPECT_EQ(date_value.month(), 1); EXPECT_EQ(date_value.day(), 1); @@ -427,8 +411,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "0000-01-01 00:00:00.000010"; field = dt_datetime_v2_5.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 0); EXPECT_EQ(date_value.month(), 1); EXPECT_EQ(date_value.day(), 1); @@ -439,8 +422,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "0000-01-01 00:00:00.1"; field = dt_datetime_v2_5.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 0); EXPECT_EQ(date_value.month(), 1); EXPECT_EQ(date_value.day(), 1); @@ -451,8 +433,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "2021-12-31 12:23:34.12345"; field = dt_datetime_v2_5.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 2021); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); @@ -464,8 +445,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { // microsecond is rounded expr_node.date_literal.value = "2021-12-31 12:23:34.123454"; field = dt_datetime_v2_5.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 2021); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); @@ -476,8 +456,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "2021-12-31 12:23:34.123456"; field = dt_datetime_v2_5.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 2021); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); @@ -488,8 +467,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "9999-12-31 23:59:59.999994"; field = dt_datetime_v2_5.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 9999); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); @@ -500,8 +478,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "9999-12-31 23:59:59.999985"; field = dt_datetime_v2_5.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 9999); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); @@ -512,8 +489,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "9999-12-31 23:59:59.99999"; field = dt_datetime_v2_5.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 9999); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); @@ -530,9 +506,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "0000-01-01 00:00:00.1"; auto field = dt_datetime_v2_6.get_field(expr_node); - auto int_value = field.get(); - DateV2Value date_value = - binary_cast>(int_value); + auto date_value = field.get(); EXPECT_EQ(date_value.year(), 0); EXPECT_EQ(date_value.month(), 1); EXPECT_EQ(date_value.day(), 1); @@ -543,8 +517,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "0000-01-01 00:00:00.000000"; field = dt_datetime_v2_6.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 0); EXPECT_EQ(date_value.month(), 1); EXPECT_EQ(date_value.day(), 1); @@ -555,8 +528,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "0000-01-01 00:00:00.000001"; field = dt_datetime_v2_6.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 0); EXPECT_EQ(date_value.month(), 1); EXPECT_EQ(date_value.day(), 1); @@ -567,8 +539,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "0000-01-01 00:00:00.100000"; field = dt_datetime_v2_6.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 0); EXPECT_EQ(date_value.month(), 1); EXPECT_EQ(date_value.day(), 1); @@ -579,8 +550,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "0000-01-01 00:00:00.100001"; field = dt_datetime_v2_6.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 0); EXPECT_EQ(date_value.month(), 1); EXPECT_EQ(date_value.day(), 1); @@ -591,8 +561,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "2021-12-31 12:23:34.99999"; field = dt_datetime_v2_6.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 2021); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); @@ -607,8 +576,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { // EXPECT_EQ(date_value.microsecond(), 999999); expr_node.date_literal.value = "2021-12-31 12:23:34.999999"; field = dt_datetime_v2_5.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 2021); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); @@ -619,8 +587,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "9999-12-31 23:59:59.999999"; field = dt_datetime_v2_6.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 9999); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); @@ -631,8 +598,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "2021-12-31 12:23:34.9999994"; field = dt_datetime_v2_5.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 2021); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); @@ -643,8 +609,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "2021-12-31 12:23:34.9999985"; field = dt_datetime_v2_6.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 2021); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); @@ -655,8 +620,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "2021-12-31 12:23:34.9999999"; field = dt_datetime_v2_6.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 2021); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); @@ -667,8 +631,7 @@ TEST_F(DataTypeDateTimeV2Test, get_field) { expr_node.date_literal.value = "9999-12-31 23:59:58.9999999"; field = dt_datetime_v2_6.get_field(expr_node); - int_value = field.get(); - date_value = binary_cast>(int_value); + date_value = field.get(); EXPECT_EQ(date_value.year(), 9999); EXPECT_EQ(date_value.month(), 12); EXPECT_EQ(date_value.day(), 31); diff --git a/be/test/vec/data_types/data_type_decimal_test.cpp b/be/test/vec/data_types/data_type_decimal_test.cpp index 00e34ccd3aab84..4d96c3a22604a2 100644 --- a/be/test/vec/data_types/data_type_decimal_test.cpp +++ b/be/test/vec/data_types/data_type_decimal_test.cpp @@ -493,7 +493,7 @@ TEST_F(DataTypeDecimalTest, get_default) { using DataType = decltype(dt); using ColumnType = typename DataType::ColumnType; auto default_field = dt.get_default(); - auto decimal_field = default_field.template get(); + auto decimal_field = default_field.template get(); EXPECT_EQ(decimal_field, typename ColumnType::value_type()); }; test_func(dt_decimal32_1); @@ -510,7 +510,6 @@ TEST_F(DataTypeDecimalTest, get_field) { std::string line; auto test_func = [&](auto dt, const std::string& input_data_file_name) { using DataType = decltype(dt); - using ColumnType = typename DataType::ColumnType; { expr_node.decimal_literal.value = "abc"; EXPECT_THROW(dt.get_field(expr_node), Exception); @@ -533,7 +532,7 @@ TEST_F(DataTypeDecimalTest, get_field) { } expr_node.decimal_literal.value = line; auto field = dt.get_field(expr_node); - auto decimal_field = field.template get(); + auto decimal_field = field.template get(); res.push_back(decimal_field.to_string(dt.get_scale())); } check_or_generate_res_file(output_file, {res}); diff --git a/be/test/vec/data_types/data_type_varbinary_test.cpp b/be/test/vec/data_types/data_type_varbinary_test.cpp index 2fe20d224e1f8c..d0639e70ba570d 100644 --- a/be/test/vec/data_types/data_type_varbinary_test.cpp +++ b/be/test/vec/data_types/data_type_varbinary_test.cpp @@ -87,7 +87,7 @@ TEST_F(DataTypeVarbinaryTest, CreateColumnAndCheckColumn) { TEST_F(DataTypeVarbinaryTest, GetDefaultField) { DataTypeVarbinary dt; Field def = dt.get_default(); - const auto& sv = get(def); + const auto& sv = def.get(); EXPECT_EQ(sv.size(), 0U); } @@ -176,7 +176,7 @@ TEST_F(DataTypeVarbinaryTest, GetFieldWithDataType) { auto fwd = dt.get_field_with_data_type(*col, 0); EXPECT_EQ(fwd.base_scalar_type_id, PrimitiveType::TYPE_VARBINARY); - const auto& sv = get(fwd.field); + const auto& sv = fwd.field.get(); ASSERT_EQ(sv.size(), v.size()); ASSERT_EQ(memcmp(sv.data(), v.data(), sv.size()), 0); } @@ -189,7 +189,7 @@ TEST_F(DataTypeVarbinaryTest, GetFieldFromTExprNode) { node.__isset.varbinary_literal = true; Field f = dt.get_field(node); - const auto& sv = get(f); + const auto& sv = f.get(); ASSERT_EQ(sv.size(), 5U); ASSERT_EQ(memcmp(sv.data(), "hello", 5), 0); } @@ -276,7 +276,7 @@ TEST_F(DataTypeVarbinaryTest, GetFieldFromTExprNodeWithEmbeddedNull) { node.__isset.varbinary_literal = true; Field f = dt.get_field(node); - const auto& sv = get(f); + const auto& sv = f.get(); ASSERT_EQ(sv.size(), raw.size()); ASSERT_EQ(memcmp(sv.data(), raw.data(), sv.size()), 0); } @@ -299,7 +299,7 @@ TEST_F(DataTypeVarbinaryTest, GetFieldWithDataTypeNonInline) { auto fwd = dt.get_field_with_data_type(*col, 0); EXPECT_EQ(fwd.base_scalar_type_id, PrimitiveType::TYPE_VARBINARY); - const auto& sv = get(fwd.field); + const auto& sv = fwd.field.get(); ASSERT_EQ(sv.size(), big.size()); ASSERT_EQ(memcmp(sv.data(), big.data(), sv.size()), 0); } diff --git a/be/test/vec/data_types/serde/data_type_serde_test.cpp b/be/test/vec/data_types/serde/data_type_serde_test.cpp index 00324f4204608a..58fc1ec907edb3 100644 --- a/be/test/vec/data_types/serde/data_type_serde_test.cpp +++ b/be/test/vec/data_types/serde/data_type_serde_test.cpp @@ -429,12 +429,12 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_STRING); - EXPECT_EQ(subcolumn.get_last_field().get(), "123"); + EXPECT_EQ(subcolumn.get_last_field().get(), "123"); subcolumn.deserialize_from_sparse_column(&value, 0); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_STRING); - EXPECT_EQ(subcolumn.get_last_field().get(), "123"); + EXPECT_EQ(subcolumn.get_last_field().get(), "123"); } { @@ -442,11 +442,11 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { subcolumn.deserialize_from_sparse_column(&value, 1); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_INT); - EXPECT_EQ(subcolumn.get_last_field().get(), 123); + EXPECT_EQ(subcolumn.get_last_field().get(), 123); subcolumn.deserialize_from_sparse_column(&value, 1); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_INT); - EXPECT_EQ(subcolumn.get_last_field().get(), 123); + EXPECT_EQ(subcolumn.get_last_field().get(), 123); } { @@ -455,12 +455,12 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_LARGEINT); - EXPECT_EQ(subcolumn.get_last_field().get(), 123); + EXPECT_EQ(subcolumn.get_last_field().get(), 123); subcolumn.deserialize_from_sparse_column(&value, 2); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_LARGEINT); - EXPECT_EQ(subcolumn.get_last_field().get(), 123); + EXPECT_EQ(subcolumn.get_last_field().get(), 123); } { @@ -469,12 +469,12 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DOUBLE); - EXPECT_EQ(subcolumn.get_last_field().get(), 123.456); + EXPECT_EQ(subcolumn.get_last_field().get(), 123.456); subcolumn.deserialize_from_sparse_column(&value, 3); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DOUBLE); - EXPECT_EQ(subcolumn.get_last_field().get(), 123.456); + EXPECT_EQ(subcolumn.get_last_field().get(), 123.456); } { @@ -483,12 +483,12 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_BOOLEAN); - EXPECT_EQ(subcolumn.get_last_field().get(), true); + EXPECT_EQ(subcolumn.get_last_field().get(), true); subcolumn.deserialize_from_sparse_column(&value, 4); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_BOOLEAN); - EXPECT_EQ(subcolumn.get_last_field().get(), true); + EXPECT_EQ(subcolumn.get_last_field().get(), true); } { @@ -497,12 +497,12 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DATETIMEV2); - EXPECT_EQ(subcolumn.get_last_field().get(), 23232323); + EXPECT_EQ(subcolumn.get_last_field().get().to_date_int_val(), 23232323); subcolumn.deserialize_from_sparse_column(&value, 5); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DATETIMEV2); - EXPECT_EQ(subcolumn.get_last_field().get(), 23232323); + EXPECT_EQ(subcolumn.get_last_field().get().to_date_int_val(), 23232323); } { @@ -511,12 +511,12 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DATEV2); - EXPECT_EQ(subcolumn.get_last_field().get(), 154543245); + EXPECT_EQ(subcolumn.get_last_field().get().to_date_int_val(), 154543245); subcolumn.deserialize_from_sparse_column(&value, 6); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DATEV2); - EXPECT_EQ(subcolumn.get_last_field().get(), 154543245); + EXPECT_EQ(subcolumn.get_last_field().get().to_date_int_val(), 154543245); } { @@ -525,12 +525,12 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_IPV4); - EXPECT_EQ(subcolumn.get_last_field().get(), static_cast(367357)); + EXPECT_EQ(subcolumn.get_last_field().get(), static_cast(367357)); subcolumn.deserialize_from_sparse_column(&value, 7); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_IPV4); - EXPECT_EQ(subcolumn.get_last_field().get(), static_cast(367357)); + EXPECT_EQ(subcolumn.get_last_field().get(), static_cast(367357)); } { @@ -539,12 +539,12 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_IPV6); - EXPECT_EQ(subcolumn.get_last_field().get(), static_cast(36534645)); + EXPECT_EQ(subcolumn.get_last_field().get(), static_cast(36534645)); subcolumn.deserialize_from_sparse_column(&value, 8); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_IPV6); - EXPECT_EQ(subcolumn.get_last_field().get(), static_cast(36534645)); + EXPECT_EQ(subcolumn.get_last_field().get(), static_cast(36534645)); } { @@ -553,7 +553,7 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DECIMAL32); - auto v = subcolumn.get_last_field().get(); + auto v = subcolumn.get_last_field().get(); EXPECT_EQ(static_cast(v), static_cast(3456345634)); subcolumn.deserialize_from_sparse_column(&value, 9); EXPECT_EQ(subcolumn.data.size(), 1); @@ -567,13 +567,13 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DECIMAL64); - auto v = subcolumn.get_last_field().get(); + auto v = subcolumn.get_last_field().get(); EXPECT_EQ(static_cast(v), static_cast(13452435)); subcolumn.deserialize_from_sparse_column(&value, 10); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DECIMAL64); - v = subcolumn.get_last_field().get(); + v = subcolumn.get_last_field().get(); EXPECT_EQ(static_cast(v), static_cast(13452435)); } @@ -583,13 +583,13 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DECIMAL128I); - auto v = subcolumn.get_last_field().get(); + auto v = subcolumn.get_last_field().get(); EXPECT_EQ(static_cast(v), static_cast(2342345)); subcolumn.deserialize_from_sparse_column(&value, 11); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DECIMAL128I); - v = subcolumn.get_last_field().get(); + v = subcolumn.get_last_field().get(); EXPECT_EQ(static_cast(v), static_cast(2342345)); } @@ -599,13 +599,13 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DECIMAL256); - auto v = subcolumn.get_last_field().get(); + auto v = subcolumn.get_last_field().get(); EXPECT_TRUE(v == Decimal256(2345243)); subcolumn.deserialize_from_sparse_column(&value, 12); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DECIMAL256); - v = subcolumn.get_last_field().get(); + v = subcolumn.get_last_field().get(); EXPECT_TRUE(v == Decimal256(2345243)); } @@ -630,7 +630,7 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { EXPECT_EQ(subcolumn.get_dimensions(), 1); EXPECT_EQ(subcolumn.get_least_common_base_type_id(), PrimitiveType::TYPE_JSONB); auto v = subcolumn.get_last_field(); - auto& arr = v.get(); + auto& arr = v.get(); EXPECT_EQ(arr.size(), 3); EXPECT_FALSE(arr[0].is_null()); EXPECT_TRUE(arr[1].is_null()); @@ -643,7 +643,7 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { EXPECT_EQ(subcolumn.get_least_common_base_type_id(), PrimitiveType::TYPE_JSONB); v = subcolumn.get_last_field(); - arr = v.get(); + arr = v.get(); EXPECT_EQ(arr.size(), 3); EXPECT_FALSE(arr[0].is_null()); EXPECT_TRUE(arr[1].is_null()); diff --git a/be/test/vec/exec/format/parquet/parquet_expr_test.cpp b/be/test/vec/exec/format/parquet/parquet_expr_test.cpp index f7182b93a87475..54e7456feec312 100644 --- a/be/test/vec/exec/format/parquet/parquet_expr_test.cpp +++ b/be/test/vec/exec/format/parquet/parquet_expr_test.cpp @@ -667,8 +667,8 @@ TEST_F(ParquetExprTest, test_min_max_p) { auto col = ColumnHelper::create_column_with_name({1.1f, 3.1f}); - std::cout << "min_field = " << min_field.get() << "\n"; - std::cout << "max_field = " << max_field.get() << "\n"; + std::cout << "min_field = " << min_field.get() << "\n"; + std::cout << "max_field = " << max_field.get() << "\n"; Field ans_min = col.column->operator[](0); Field ans_max = col.column->operator[](1); diff --git a/be/test/vec/exec/vgeneric_iterators_test.cpp b/be/test/vec/exec/vgeneric_iterators_test.cpp index 62c2208c014600..4aaa91995fd04f 100644 --- a/be/test/vec/exec/vgeneric_iterators_test.cpp +++ b/be/test/vec/exec/vgeneric_iterators_test.cpp @@ -95,9 +95,9 @@ TEST(VGenericIteratorsTest, AutoIncrement) { int row_count = 0; size_t rows = block.rows(); for (size_t i = 0; i < rows; ++i) { - EXPECT_EQ(row_count, (*c0)[i].get()); - EXPECT_EQ(row_count + 1, (*c1)[i].get()); - EXPECT_EQ(row_count + 2, (*c2)[i].get()); + EXPECT_EQ(row_count, (*c0)[i].get()); + EXPECT_EQ(row_count + 1, (*c1)[i].get()); + EXPECT_EQ(row_count + 2, (*c2)[i].get()); row_count++; } } @@ -138,9 +138,9 @@ TEST(VGenericIteratorsTest, Union) { base_value -= 100; } - EXPECT_EQ(base_value, (*c0)[i].get()); - EXPECT_EQ(base_value + 1, (*c1)[i].get()); - EXPECT_EQ(base_value + 2, (*c2)[i].get()); + EXPECT_EQ(base_value, (*c0)[i].get()); + EXPECT_EQ(base_value + 1, (*c1)[i].get()); + EXPECT_EQ(base_value + 2, (*c2)[i].get()); row_count++; } } @@ -187,9 +187,9 @@ TEST(VGenericIteratorsTest, MergeAgg) { base_value = row_count - 300; } - EXPECT_EQ(base_value, (*c0)[i].get()); - EXPECT_EQ(base_value + 1, (*c1)[i].get()); - EXPECT_EQ(base_value + 2, (*c2)[i].get()); + EXPECT_EQ(base_value, (*c0)[i].get()); + EXPECT_EQ(base_value + 1, (*c1)[i].get()); + EXPECT_EQ(base_value + 2, (*c2)[i].get()); row_count++; } } @@ -228,9 +228,9 @@ TEST(VGenericIteratorsTest, MergeUnique) { for (size_t i = 0; i < block.rows(); ++i) { size_t base_value = row_count; - EXPECT_EQ(base_value, (*c0)[i].get()); - EXPECT_EQ(base_value + 1, (*c1)[i].get()); - EXPECT_EQ(base_value + 2, (*c2)[i].get()); + EXPECT_EQ(base_value, (*c0)[i].get()); + EXPECT_EQ(base_value + 1, (*c1)[i].get()); + EXPECT_EQ(base_value + 2, (*c2)[i].get()); row_count++; } } @@ -346,7 +346,7 @@ TEST(VGenericIteratorsTest, MergeWithSeqColumn) { auto col0 = block.get_by_position(0).column; auto col1 = block.get_by_position(1).column; auto seq_col = block.get_by_position(seq_column_id).column; - size_t actual_value = (*seq_col)[0].get(); + size_t actual_value = (*seq_col)[0].get(); EXPECT_EQ(seg_iter_num - 1, actual_value); } diff --git a/be/test/vec/exprs/vexpr_test.cpp b/be/test/vec/exprs/vexpr_test.cpp index c98cec0a418ce8..a4589522322c3a 100644 --- a/be/test/vec/exprs/vexpr_test.cpp +++ b/be/test/vec/exprs/vexpr_test.cpp @@ -422,7 +422,7 @@ TEST(TEST_VEXPR, LITERALTEST) { int ret = -1; static_cast(literal.execute(nullptr, &block, &ret)); auto ctn = block.safe_get_by_position(ret); - auto v = (*ctn.column)[0].get(); + auto v = (*ctn.column)[0].get(); EXPECT_EQ(v, true); EXPECT_EQ("1", literal.value()); @@ -437,7 +437,7 @@ TEST(TEST_VEXPR, LITERALTEST) { int ret = -1; static_cast(literal.execute(nullptr, &block, &ret)); auto ctn = block.safe_get_by_position(ret); - auto v = (*ctn.column)[0].get(); + auto v = (*ctn.column)[0].get(); EXPECT_EQ(v, 1024); EXPECT_EQ("1024", literal.value()); @@ -452,7 +452,7 @@ TEST(TEST_VEXPR, LITERALTEST) { int ret = -1; static_cast(literal.execute(nullptr, &block, &ret)); auto ctn = block.safe_get_by_position(ret); - auto v = (*ctn.column)[0].get(); + auto v = (*ctn.column)[0].get(); EXPECT_EQ(v, 1024); EXPECT_EQ("1024", literal.value()); @@ -467,7 +467,7 @@ TEST(TEST_VEXPR, LITERALTEST) { int ret = -1; static_cast(literal.execute(nullptr, &block, &ret)); auto ctn = block.safe_get_by_position(ret); - auto v = (*ctn.column)[0].get(); + auto v = (*ctn.column)[0].get(); EXPECT_EQ(v, 1024); EXPECT_EQ("1024", literal.value()); @@ -482,7 +482,7 @@ TEST(TEST_VEXPR, LITERALTEST) { int ret = -1; static_cast(literal.execute(nullptr, &block, &ret)); auto ctn = block.safe_get_by_position(ret); - auto v = (*ctn.column)[0].get<__int128_t>(); + auto v = (*ctn.column)[0].get(); EXPECT_EQ(v, 1024); EXPECT_EQ("1024", literal.value()); @@ -497,7 +497,7 @@ TEST(TEST_VEXPR, LITERALTEST) { int ret = -1; static_cast(literal.execute(nullptr, &block, &ret)); auto ctn = block.safe_get_by_position(ret); - auto v = (*ctn.column)[0].get(); + auto v = (*ctn.column)[0].get(); EXPECT_FLOAT_EQ(v, 1024.0f); EXPECT_EQ("1024", literal.value()); @@ -512,7 +512,7 @@ TEST(TEST_VEXPR, LITERALTEST) { int ret = -1; static_cast(literal.execute(nullptr, &block, &ret)); auto ctn = block.safe_get_by_position(ret); - auto v = (*ctn.column)[0].get(); + auto v = (*ctn.column)[0].get(); EXPECT_FLOAT_EQ(v, 1024.0) << ctn.column->get_name(); EXPECT_EQ("1024", literal.value()) << ctn.column->get_name(); @@ -526,15 +526,11 @@ TEST(TEST_VEXPR, LITERALTEST) { const char* date = "20210407000000"; data_time_value.from_date_str(date, strlen(date)); std::cout << data_time_value.type() << std::endl; - __int64_t dt; - memcpy(&dt, &data_time_value, sizeof(__int64_t)); VLiteral literal(create_literal(std::string(date))); Block block; int ret = -1; static_cast(literal.execute(nullptr, &block, &ret)); auto ctn = block.safe_get_by_position(ret); - auto v = (*ctn.column)[0].get<__int64_t>(); - EXPECT_EQ(v, dt); EXPECT_EQ("2021-04-07 00:00:00", literal.value()); auto node = std::make_shared( @@ -613,8 +609,6 @@ TEST(TEST_VEXPR, LITERALTEST) { int ret = -1; static_cast(literal.execute(nullptr, &block, &ret)); auto ctn = block.safe_get_by_position(ret); - auto v = (*ctn.column)[0].get<__int64_t>(); - EXPECT_EQ(v, dt); EXPECT_EQ("2021-04-07", literal.value()); auto node = std::make_shared( @@ -633,7 +627,7 @@ TEST(TEST_VEXPR, LITERALTEST) { int ret = -1; static_cast(literal.execute(nullptr, &block, &ret)); auto ctn = block.safe_get_by_position(ret); - auto v = (*ctn.column)[0].get(); + auto v = (*ctn.column)[0].get(); EXPECT_EQ(v, dt); EXPECT_EQ("2021-04-07", literal.value()); @@ -684,7 +678,7 @@ TEST(TEST_VEXPR, LITERALTEST) { int ret = -1; static_cast(literal.execute(nullptr, &block, &ret)); auto ctn = block.safe_get_by_position(ret); - auto v = (*ctn.column)[0].get(); + auto v = (*ctn.column)[0].get(); EXPECT_EQ(v, s); EXPECT_EQ(s, literal.value()); @@ -699,8 +693,8 @@ TEST(TEST_VEXPR, LITERALTEST) { int ret = -1; static_cast(literal.execute(nullptr, &block, &ret)); auto ctn = block.safe_get_by_position(ret); - auto v = (*ctn.column)[0].get(); - EXPECT_FLOAT_EQ(((double)v) / (std::pow(10, 9)), 1234.56); + auto v = (*ctn.column)[0].get(); + EXPECT_FLOAT_EQ(((double)v.value()) / (std::pow(10, 9)), 1234.56); EXPECT_EQ("1234.560000000", literal.value()); auto node = std::make_shared( @@ -714,7 +708,7 @@ TEST(TEST_VEXPR, LITERALTEST) { int ret = -1; EXPECT_TRUE(literal.execute(nullptr, &block, &ret).ok()); auto ctn = block.safe_get_by_position(ret); - auto v = (*ctn.column)[0].get(); + auto v = (*ctn.column)[0].get(); EXPECT_FLOAT_EQ(v / 1000000, 12.1234); EXPECT_EQ("00:00:12.1234", literal.value()); diff --git a/be/test/vec/function/cast/cast_test.h b/be/test/vec/function/cast/cast_test.h index 6f094a4d6de759..df57dc98242040 100644 --- a/be/test/vec/function/cast/cast_test.h +++ b/be/test/vec/function/cast/cast_test.h @@ -63,6 +63,9 @@ inline auto get_decimal_ctor() { if constexpr (std::is_same_v) { return DECIMAL128V2; } + if constexpr (std::is_same_v) { + return DECIMALV2VALUE; + } if constexpr (std::is_same_v) { return DECIMAL128V3; } diff --git a/be/test/vec/function/cast/cast_to_boolean_test.cpp b/be/test/vec/function/cast/cast_to_boolean_test.cpp index b0056aff0f7b10..7f83510b3f70d1 100644 --- a/be/test/vec/function/cast/cast_to_boolean_test.cpp +++ b/be/test/vec/function/cast/cast_to_boolean_test.cpp @@ -340,10 +340,13 @@ TEST_F(FunctionCastTest, test_from_decimal_to_bool) { { InputTypeSet input_types = {PrimitiveType::TYPE_DECIMALV2}; DataSet data_set = { - {{Decimal128V2 {1}}, UInt8(1)}, {{Decimal128V2 {0}}, UInt8(0)}, - {{Decimal128V2 {+0}}, UInt8(0)}, {{Decimal128V2 {-0}}, UInt8(0)}, - {{Decimal128V2 {-1}}, UInt8(1)}, {{Decimal128V2 {0.5}}, UInt8(1)}, - {{Decimal128V2 {-0.5}}, UInt8(1)}, + {{DECIMALV2VALUEFROMDOUBLE(1)}, UInt8(1)}, + {{DECIMALV2VALUEFROMDOUBLE(0)}, UInt8(0)}, + {{DECIMALV2VALUEFROMDOUBLE(+0)}, UInt8(0)}, + {{DECIMALV2VALUEFROMDOUBLE(-0)}, UInt8(0)}, + {{DECIMALV2VALUEFROMDOUBLE(-1)}, UInt8(1)}, + {{DECIMALV2VALUEFROMDOUBLE(0.5)}, UInt8(1)}, + {{DECIMALV2VALUEFROMDOUBLE(-0.5)}, UInt8(1)}, }; check_function_for_cast(input_types, data_set); } @@ -396,10 +399,13 @@ TEST_F(FunctionCastTest, test_from_decimal_to_bool_strict_mode) { { InputTypeSet input_types = {PrimitiveType::TYPE_DECIMALV2}; DataSet data_set = { - {{Decimal128V2 {1}}, UInt8(1)}, {{Decimal128V2 {0}}, UInt8(0)}, - {{Decimal128V2 {+0}}, UInt8(0)}, {{Decimal128V2 {-0}}, UInt8(0)}, - {{Decimal128V2 {-1}}, UInt8(1)}, {{Decimal128V2 {0.5}}, UInt8(1)}, - {{Decimal128V2 {-0.5}}, UInt8(1)}, + {{DECIMALV2VALUEFROMDOUBLE(1)}, UInt8(1)}, + {{DECIMALV2VALUEFROMDOUBLE(0)}, UInt8(0)}, + {{DECIMALV2VALUEFROMDOUBLE(+0)}, UInt8(0)}, + {{DECIMALV2VALUEFROMDOUBLE(-0)}, UInt8(0)}, + {{DECIMALV2VALUEFROMDOUBLE(-1)}, UInt8(1)}, + {{DECIMALV2VALUEFROMDOUBLE(0.5)}, UInt8(1)}, + {{DECIMALV2VALUEFROMDOUBLE(-0.5)}, UInt8(1)}, }; check_function_for_cast_strict_mode(input_types, data_set); } diff --git a/be/test/vec/function/cast/cast_to_decimal.cpp b/be/test/vec/function/cast/cast_to_decimal.cpp index e5f1463a91a58b..b26dc3bc4f3638 100644 --- a/be/test/vec/function/cast/cast_to_decimal.cpp +++ b/be/test/vec/function/cast/cast_to_decimal.cpp @@ -100,10 +100,10 @@ TEST_F(FunctionCastToDecimalTest, test_from_bool) { from_bool_test_func(18, 9); from_bool_test_func(18, 17); - from_bool_test_func(27, 9); - // from_bool_test_func(); - // from_bool_test_func(); - // from_bool_test_func(); + from_bool_test_func(27, 9); + // from_bool_test_func(); + // from_bool_test_func(); + // from_bool_test_func(); from_bool_test_func(38, 0); from_bool_test_func(38, 1); @@ -119,7 +119,7 @@ TEST_F(FunctionCastToDecimalTest, test_from_bool) { TEST_F(FunctionCastToDecimalTest, test_from_bool_overflow) { from_bool_overflow_test_func(); from_bool_overflow_test_func(); - from_bool_overflow_test_func(); + from_bool_overflow_test_func(); from_bool_overflow_test_func(); from_bool_overflow_test_func(); } diff --git a/be/test/vec/function/cast/cast_to_decimal.h b/be/test/vec/function/cast/cast_to_decimal.h index dfdaef0bb2bf40..0cd35ec1d21da2 100644 --- a/be/test/vec/function/cast/cast_to_decimal.h +++ b/be/test/vec/function/cast/cast_to_decimal.h @@ -1959,7 +1959,7 @@ struct FunctionCastToDecimalTest : public FunctionCastTest { (*ofs_case) << " sql \"set enable_decimal256 = true;\"\n"; } } - if constexpr (std::is_same_v) { + if constexpr (IsDecimal128V2) { between_decimal_with_precision_and_scale_test_func( 1, 0, to_precision, to_scale, table_index++, test_data_index, ofs_case, ofs_expected_result, ofs_const_case, ofs_const_expected_result); @@ -2215,7 +2215,8 @@ struct FunctionCastToDecimalTest : public FunctionCastTest { ? BeConsts::MAX_DECIMAL128_PRECISION + 1 : 1))); static_assert(from_min_decimal_p == 1 || from_min_decimal_p > 9); - if constexpr (std::is_same_v) { + if constexpr (std::is_same_v || + std::is_same_v) { between_decimal_with_precision_and_scale_overflow_test_func( 1, 0, to_precision, to_scale, table_index++, test_data_index, ofs_case, ofs_expected_result, ofs_const_case, ofs_const_expected_result); diff --git a/be/test/vec/function/cast/cast_to_decimal128_from_decimal128.cpp b/be/test/vec/function/cast/cast_to_decimal128_from_decimal128.cpp index 856ba9fbc96799..47432d4065cfb4 100644 --- a/be/test/vec/function/cast/cast_to_decimal128_from_decimal128.cpp +++ b/be/test/vec/function/cast/cast_to_decimal128_from_decimal128.cpp @@ -22,6 +22,6 @@ TEST_F(FunctionCastToDecimalTest, test_to_decimal128_from_decimal128) { between_decimal_test_func(); } TEST_F(FunctionCastToDecimalTest, test_to_decimal128_from_decimalv2) { - between_decimal_test_func(); + between_decimal_test_func(); } } // namespace doris::vectorized \ No newline at end of file diff --git a/be/test/vec/function/cast/cast_to_decimal128_from_decimal128_overflow.cpp b/be/test/vec/function/cast/cast_to_decimal128_from_decimal128_overflow.cpp index a49a8c119e55c1..14e188444c888b 100644 --- a/be/test/vec/function/cast/cast_to_decimal128_from_decimal128_overflow.cpp +++ b/be/test/vec/function/cast/cast_to_decimal128_from_decimal128_overflow.cpp @@ -23,6 +23,6 @@ TEST_F(FunctionCastToDecimalTest, test_to_decimal128_from_decimal128_overflow) { between_decimal_overflow_test_func(); } TEST_F(FunctionCastToDecimalTest, test_to_decimal128_from_decimalv2_overflow) { - between_decimal_overflow_test_func(); + between_decimal_overflow_test_func(); } } // namespace doris::vectorized diff --git a/be/test/vec/function/cast/cast_to_decimal256_from_decimal128.cpp b/be/test/vec/function/cast/cast_to_decimal256_from_decimal128.cpp index 6273b710b0a905..548e7675a881cc 100644 --- a/be/test/vec/function/cast/cast_to_decimal256_from_decimal128.cpp +++ b/be/test/vec/function/cast/cast_to_decimal256_from_decimal128.cpp @@ -22,6 +22,6 @@ TEST_F(FunctionCastToDecimalTest, test_to_decimal256_from_decimal128) { between_decimal_test_func(); } TEST_F(FunctionCastToDecimalTest, test_to_decimal256_from_decimalv2) { - between_decimal_test_func(); + between_decimal_test_func(); } } // namespace doris::vectorized \ No newline at end of file diff --git a/be/test/vec/function/cast/cast_to_decimal256_from_decimal128_overflow.cpp b/be/test/vec/function/cast/cast_to_decimal256_from_decimal128_overflow.cpp index 03e6034fb252bc..472a64a126d09d 100644 --- a/be/test/vec/function/cast/cast_to_decimal256_from_decimal128_overflow.cpp +++ b/be/test/vec/function/cast/cast_to_decimal256_from_decimal128_overflow.cpp @@ -23,6 +23,6 @@ TEST_F(FunctionCastToDecimalTest, test_to_decimal256_from_decimal128_overflow) { between_decimal_overflow_test_func(); } TEST_F(FunctionCastToDecimalTest, test_to_decimal256_from_decimalv2_overflow) { - between_decimal_overflow_test_func(); + between_decimal_overflow_test_func(); } } // namespace doris::vectorized diff --git a/be/test/vec/function/cast/cast_to_decimal32_from_decimal128.cpp b/be/test/vec/function/cast/cast_to_decimal32_from_decimal128.cpp index 5374c5485b1194..825765e64def4b 100644 --- a/be/test/vec/function/cast/cast_to_decimal32_from_decimal128.cpp +++ b/be/test/vec/function/cast/cast_to_decimal32_from_decimal128.cpp @@ -23,6 +23,6 @@ TEST_F(FunctionCastToDecimalTest, test_to_decimal32_from_decimal128) { between_decimal_test_func(); } TEST_F(FunctionCastToDecimalTest, test_to_decimal32_from_decimalv2) { - between_decimal_test_func(); + between_decimal_test_func(); } } // namespace doris::vectorized diff --git a/be/test/vec/function/cast/cast_to_decimal32_from_decimal128_overflow.cpp b/be/test/vec/function/cast/cast_to_decimal32_from_decimal128_overflow.cpp index 883e5b045c0439..a21b2c1e369f1b 100644 --- a/be/test/vec/function/cast/cast_to_decimal32_from_decimal128_overflow.cpp +++ b/be/test/vec/function/cast/cast_to_decimal32_from_decimal128_overflow.cpp @@ -23,6 +23,6 @@ TEST_F(FunctionCastToDecimalTest, test_to_decimal32_from_decimal128_overflow) { between_decimal_overflow_test_func(); } TEST_F(FunctionCastToDecimalTest, test_to_decimal32_from_decimalv2_overflow) { - between_decimal_overflow_test_func(); + between_decimal_overflow_test_func(); } } // namespace doris::vectorized diff --git a/be/test/vec/function/cast/cast_to_decimal64_from_decimal128.cpp b/be/test/vec/function/cast/cast_to_decimal64_from_decimal128.cpp index 157d34cb31f070..f938826ad040a6 100644 --- a/be/test/vec/function/cast/cast_to_decimal64_from_decimal128.cpp +++ b/be/test/vec/function/cast/cast_to_decimal64_from_decimal128.cpp @@ -26,7 +26,7 @@ TEST_F(FunctionCastToDecimalTest, test_to_decimal64_from_decimal128) { between_decimal_test_func(); } TEST_F(FunctionCastToDecimalTest, test_to_decimal64_from_decimalv2) { - between_decimal_test_func(); + between_decimal_test_func(); } } // namespace doris::vectorized \ No newline at end of file diff --git a/be/test/vec/function/cast/cast_to_decimal64_from_decimal128_overflow.cpp b/be/test/vec/function/cast/cast_to_decimal64_from_decimal128_overflow.cpp index 1be32b2bdbb274..ccb0d145e640ad 100644 --- a/be/test/vec/function/cast/cast_to_decimal64_from_decimal128_overflow.cpp +++ b/be/test/vec/function/cast/cast_to_decimal64_from_decimal128_overflow.cpp @@ -26,6 +26,6 @@ TEST_F(FunctionCastToDecimalTest, test_to_decimal64_from_decimal128_overflow) { between_decimal_overflow_test_func(); } TEST_F(FunctionCastToDecimalTest, test_to_decimal64_from_decimalv2_overflow) { - between_decimal_overflow_test_func(); + between_decimal_overflow_test_func(); } } // namespace doris::vectorized diff --git a/be/test/vec/function/cast/cast_to_float_double.cpp b/be/test/vec/function/cast/cast_to_float_double.cpp index e719f2cf0f0491..7e9cf51b88b720 100644 --- a/be/test/vec/function/cast/cast_to_float_double.cpp +++ b/be/test/vec/function/cast/cast_to_float_double.cpp @@ -892,8 +892,14 @@ struct FunctionCastToFloatTest : public FunctionCastTest { auto decimal_num = decimal_ctor(i, 0, FromScale); auto num_str = dt_from.to_string(decimal_num); // auto float_v = static_cast(i); - FloatType float_v = static_cast(decimal_num.value) / - static_cast(scale_multiplier); + FloatType float_v; + if constexpr (IsDecimalV2) { + float_v = static_cast(decimal_num.value()) / + static_cast(scale_multiplier); + } else { + float_v = static_cast(decimal_num.value) / + static_cast(scale_multiplier); + } if (std::isinf(float_v)) { // std::cout << fmt::format("cast {}({}, {}) value {} to float_v result is inf\n", // type_to_string(FromT::PType), FromPrecision, FromScale, @@ -906,8 +912,13 @@ struct FunctionCastToFloatTest : public FunctionCastTest { decimal_num = decimal_ctor(-i, 0, FromScale); num_str = dt_from.to_string(decimal_num); - float_v = static_cast(decimal_num.value) / - static_cast(scale_multiplier); + if constexpr (IsDecimalV2) { + float_v = static_cast(decimal_num.value()) / + static_cast(scale_multiplier); + } else { + float_v = static_cast(decimal_num.value) / + static_cast(scale_multiplier); + } if (std::isinf(float_v)) { // std::cout << fmt::format("cast {}({}, {}) value {} to float_v result is inf\n", // type_to_string(FromT::PType), FromPrecision, FromScale, @@ -929,16 +940,27 @@ struct FunctionCastToFloatTest : public FunctionCastTest { for (const auto& f : fractional_part) { auto decimal_num = decimal_ctor(0, f, FromScale); auto num_str = dt_from.to_string(decimal_num); - FloatType float_v = static_cast(decimal_num.value) / - static_cast(scale_multiplier); + FloatType float_v; + if constexpr (IsDecimalV2) { + float_v = static_cast(decimal_num.value()) / + static_cast(scale_multiplier); + } else { + float_v = static_cast(decimal_num.value) / + static_cast(scale_multiplier); + } // dbg_str += fmt::format("({}, {})|", dt.to_string(decimal_num), float_v); data_set.push_back({{decimal_num}, float_v}); test_data_set.emplace_back(num_str, float_v); decimal_num = decimal_ctor(0, -f, FromScale); num_str = dt_from.to_string(decimal_num); - float_v = static_cast(decimal_num.value) / - static_cast(scale_multiplier); + if constexpr (IsDecimalV2) { + float_v = static_cast(decimal_num.value()) / + static_cast(scale_multiplier); + } else { + float_v = static_cast(decimal_num.value) / + static_cast(scale_multiplier); + } // dbg_str += fmt::format("({}, {})|", dt.to_string(decimal_num), float_v); data_set.push_back({{decimal_num}, float_v}); test_data_set.emplace_back(num_str, float_v); @@ -955,8 +977,14 @@ struct FunctionCastToFloatTest : public FunctionCastTest { for (const auto& f : fractional_part) { auto decimal_num = decimal_ctor(i, f, FromScale); auto num_str = dt_from.to_string(decimal_num); - FloatType float_v = static_cast(decimal_num.value) / - static_cast(scale_multiplier); + FloatType float_v; + if constexpr (IsDecimalV2) { + float_v = static_cast(decimal_num.value()) / + static_cast(scale_multiplier); + } else { + float_v = static_cast(decimal_num.value) / + static_cast(scale_multiplier); + } if (std::isinf(float_v)) { // std::cout << fmt::format("cast {}({}, {}) value {} to float_v result is inf\n", // type_to_string(FromT::PType), FromPrecision, FromScale, @@ -969,8 +997,13 @@ struct FunctionCastToFloatTest : public FunctionCastTest { decimal_num = decimal_ctor(-i, -f, FromScale); num_str = dt_from.to_string(decimal_num); - float_v = static_cast(decimal_num.value) / - static_cast(scale_multiplier); + if constexpr (IsDecimalV2) { + float_v = static_cast(decimal_num.value()) / + static_cast(scale_multiplier); + } else { + float_v = static_cast(decimal_num.value) / + static_cast(scale_multiplier); + } if (std::isinf(float_v)) { // std::cout << fmt::format("cast {}({}, {}) value {} to float_v result is inf\n", // type_to_string(FromT::PType), FromPrecision, FromScale, @@ -1659,14 +1692,14 @@ TEST_F(FunctionCastToFloatTest, test_from_decimal) { from_decimal_test_func(); from_decimal_test_func(); - from_decimal_test_func(); + from_decimal_test_func(); from_decimal_test_func(); from_decimal_test_func(); from_decimal_test_func(); from_decimal_test_func(); - from_decimal_test_func(); + from_decimal_test_func(); } TEST_F(FunctionCastToFloatTest, test_from_decimal_overflow) { from_decimal_overflow_test_func(); diff --git a/be/test/vec/function/cast/cast_to_integer.cpp b/be/test/vec/function/cast/cast_to_integer.cpp index 0bb88b2349ea13..82297e6da7e92e 100644 --- a/be/test/vec/function/cast/cast_to_integer.cpp +++ b/be/test/vec/function/cast/cast_to_integer.cpp @@ -1448,7 +1448,8 @@ struct FunctionCastToIntTest : public FunctionCastTest { : 1))); static_assert(min_decimal_pre == 1 || min_decimal_pre > 9); - if constexpr (std::is_same_v) { + if constexpr (std::is_same_v || + std::is_same_v) { from_decimal_with_p_s_no_overflow_test_func(1, 0); from_decimal_with_p_s_no_overflow_test_func(1, 1); from_decimal_with_p_s_no_overflow_test_func(27, 9); @@ -1671,7 +1672,8 @@ struct FunctionCastToIntTest : public FunctionCastTest { } } - if constexpr (std::is_same_v) { + if constexpr (std::is_same_v || + std::is_same_v) { from_decimal_with_p_s_overflow_test_func( 1, 0, regression_case_name, table_index++, ofs_case, ofs_expected_result, ofs_const_case, ofs_const_expected_result); @@ -2205,35 +2207,35 @@ TEST_F(FunctionCastToIntTest, test_from_decimal) { from_decimal_to_int_test_func(); from_decimal_to_int_test_func(); - from_decimal_to_int_test_func(); + from_decimal_to_int_test_func(); from_decimal_to_int_test_func(); from_decimal_to_int_test_func(); from_decimal_to_int_test_func(); from_decimal_to_int_test_func(); - from_decimal_to_int_test_func(); + from_decimal_to_int_test_func(); from_decimal_to_int_test_func(); from_decimal_to_int_test_func(); from_decimal_to_int_test_func(); from_decimal_to_int_test_func(); - from_decimal_to_int_test_func(); + from_decimal_to_int_test_func(); from_decimal_to_int_test_func(); from_decimal_to_int_test_func(); from_decimal_to_int_test_func(); from_decimal_to_int_test_func(); - from_decimal_to_int_test_func(); + from_decimal_to_int_test_func(); from_decimal_to_int_test_func(); from_decimal_to_int_test_func(); from_decimal_to_int_test_func(); from_decimal_to_int_test_func(); - from_decimal_to_int_test_func(); + from_decimal_to_int_test_func(); } TEST_F(FunctionCastToIntTest, DISABLE_test_from_decimal_overflow) { GTEST_SKIP(); @@ -2242,35 +2244,35 @@ TEST_F(FunctionCastToIntTest, DISABLE_test_from_decimal_overflow) { from_decimal_to_int_overflow_test_func(); from_decimal_to_int_overflow_test_func(); - from_decimal_to_int_overflow_test_func(); + from_decimal_to_int_overflow_test_func(); from_decimal_to_int_overflow_test_func(); from_decimal_to_int_overflow_test_func(); from_decimal_to_int_overflow_test_func(); from_decimal_to_int_overflow_test_func(); - from_decimal_to_int_overflow_test_func(); + from_decimal_to_int_overflow_test_func(); from_decimal_to_int_overflow_test_func(); from_decimal_to_int_overflow_test_func(); from_decimal_to_int_overflow_test_func(); from_decimal_to_int_overflow_test_func(); - from_decimal_to_int_overflow_test_func(); + from_decimal_to_int_overflow_test_func(); from_decimal_to_int_overflow_test_func(); from_decimal_to_int_overflow_test_func(); from_decimal_to_int_overflow_test_func(); from_decimal_to_int_overflow_test_func(); - from_decimal_to_int_overflow_test_func(); + from_decimal_to_int_overflow_test_func(); from_decimal_to_int_overflow_test_func(); from_decimal_to_int_overflow_test_func(); from_decimal_to_int_overflow_test_func(); from_decimal_to_int_overflow_test_func(); - from_decimal_to_int_overflow_test_func(); + from_decimal_to_int_overflow_test_func(); } TEST_F(FunctionCastToIntTest, test_from_date) { from_date_test_func(); diff --git a/be/test/vec/function/cast/function_variant_cast_test.cpp b/be/test/vec/function/cast/function_variant_cast_test.cpp index dc40e70f7d3b4b..203606c236dbd0 100644 --- a/be/test/vec/function/cast/function_variant_cast_test.cpp +++ b/be/test/vec/function/cast/function_variant_cast_test.cpp @@ -37,7 +37,7 @@ namespace doris::vectorized { static doris::vectorized::Field construct_variant_map( const std::vector>& key_and_values) { doris::vectorized::Field res = Field::create_field(VariantMap {}); - auto& object = res.get(); + auto& object = res.get(); for (const auto& [k, v] : key_and_values) { PathInData path(k); object.try_emplace(path, v); diff --git a/be/test/vec/function/function_array_element_test.cpp b/be/test/vec/function/function_array_element_test.cpp index f75d386016b0b5..f5d911e6950f1d 100644 --- a/be/test/vec/function/function_array_element_test.cpp +++ b/be/test/vec/function/function_array_element_test.cpp @@ -94,13 +94,14 @@ TEST(function_array_element_test, element_at) { InputTypeSet input_types = {PrimitiveType::TYPE_ARRAY, PrimitiveType::TYPE_DECIMALV2, PrimitiveType::TYPE_BIGINT}; - TestArray vec = {ut_type::DECIMALV2(17014116.67), ut_type::DECIMALV2(-17014116.67), - ut_type::DECIMALV2(0.0)}; + TestArray vec = {ut_type::DECIMALV2VALUEFROMDOUBLE(17014116.67), + ut_type::DECIMALV2VALUEFROMDOUBLE(-17014116.67), + ut_type::DECIMALV2VALUEFROMDOUBLE(0.0)}; DataSet data_set = {{{vec, Int64(0)}, Null()}, - {{vec, Int64(1)}, ut_type::DECIMALV2(17014116.67)}, + {{vec, Int64(1)}, ut_type::DECIMALV2VALUEFROMDOUBLE(17014116.67)}, {{vec, Int64(4)}, Null()}, - {{vec, Int64(-1)}, ut_type::DECIMALV2(0.0)}, - {{vec, Int64(-2)}, ut_type::DECIMALV2(-17014116.67)}, + {{vec, Int64(-1)}, ut_type::DECIMALV2VALUEFROMDOUBLE(0.0)}, + {{vec, Int64(-2)}, ut_type::DECIMALV2VALUEFROMDOUBLE(-17014116.67)}, {{vec, Int64(-4)}, Null()}, {{Null(), Int64(1)}, Null()}, {{empty_arr, Int64(0)}, Null()}, diff --git a/be/test/vec/function/function_array_index_test.cpp b/be/test/vec/function/function_array_index_test.cpp index 788fcea595dfe8..9056bebe2eda8c 100644 --- a/be/test/vec/function/function_array_index_test.cpp +++ b/be/test/vec/function/function_array_index_test.cpp @@ -116,12 +116,13 @@ TEST(function_array_index_test, array_contains) { InputTypeSet input_types = {PrimitiveType::TYPE_ARRAY, PrimitiveType::TYPE_DECIMALV2, PrimitiveType::TYPE_DECIMALV2}; - TestArray vec = {ut_type::DECIMALV2(17014116.67), ut_type::DECIMALV2(-17014116.67), - ut_type::DECIMALV2(0.0)}; - DataSet data_set = {{{vec, ut_type::DECIMALV2(-17014116.67)}, UInt8(1)}, - {{vec, ut_type::DECIMALV2(0)}, UInt8(1)}, - {{Null(), ut_type::DECIMALV2(0)}, Null()}, - {{empty_arr, ut_type::DECIMALV2(0)}, UInt8(0)}}; + TestArray vec = {ut_type::DECIMALV2VALUEFROMDOUBLE(17014116.67), + ut_type::DECIMALV2VALUEFROMDOUBLE(-17014116.67), + ut_type::DECIMALV2VALUEFROMDOUBLE(0.0)}; + DataSet data_set = {{{vec, ut_type::DECIMALV2VALUEFROMDOUBLE(-17014116.67)}, UInt8(1)}, + {{vec, ut_type::DECIMALV2VALUEFROMDOUBLE(0)}, UInt8(1)}, + {{Null(), ut_type::DECIMALV2VALUEFROMDOUBLE(0)}, Null()}, + {{empty_arr, ut_type::DECIMALV2VALUEFROMDOUBLE(0)}, UInt8(0)}}; static_cast(check_function(func_name, input_types, data_set)); } @@ -193,12 +194,13 @@ TEST(function_array_index_test, array_position) { InputTypeSet input_types = {PrimitiveType::TYPE_ARRAY, PrimitiveType::TYPE_DECIMALV2, PrimitiveType::TYPE_DECIMALV2}; - TestArray vec = {ut_type::DECIMALV2(17014116.67), ut_type::DECIMALV2(-17014116.67), - ut_type::DECIMALV2(0)}; - DataSet data_set = {{{vec, ut_type::DECIMALV2(-17014116.67)}, Int64(2)}, - {{vec, ut_type::DECIMALV2(0)}, Int64(3)}, - {{Null(), ut_type::DECIMALV2(0)}, Null()}, - {{empty_arr, ut_type::DECIMALV2(0)}, Int64(0)}}; + TestArray vec = {ut_type::DECIMALV2VALUEFROMDOUBLE(17014116.67), + ut_type::DECIMALV2VALUEFROMDOUBLE(-17014116.67), + ut_type::DECIMALV2VALUEFROMDOUBLE(0)}; + DataSet data_set = {{{vec, ut_type::DECIMALV2VALUEFROMDOUBLE(-17014116.67)}, Int64(2)}, + {{vec, ut_type::DECIMALV2VALUEFROMDOUBLE(0)}, Int64(3)}, + {{Null(), ut_type::DECIMALV2VALUEFROMDOUBLE(0)}, Null()}, + {{empty_arr, ut_type::DECIMALV2VALUEFROMDOUBLE(0)}, Int64(0)}}; static_cast(check_function(func_name, input_types, data_set)); } diff --git a/be/test/vec/function/function_arrays_overlap_test.cpp b/be/test/vec/function/function_arrays_overlap_test.cpp index dc353d53fb3bbe..5664cd42b52922 100644 --- a/be/test/vec/function/function_arrays_overlap_test.cpp +++ b/be/test/vec/function/function_arrays_overlap_test.cpp @@ -76,14 +76,15 @@ TEST(function_arrays_overlap_test, arrays_overlap) { InputTypeSet input_types = {PrimitiveType::TYPE_ARRAY, PrimitiveType::TYPE_DECIMALV2, PrimitiveType::TYPE_ARRAY, PrimitiveType::TYPE_DECIMALV2}; - TestArray vec1 = {ut_type::DECIMALV2(17014116.67), ut_type::DECIMALV2(-17014116.67), - ut_type::DECIMALV2(0.0)}; - TestArray vec2 = {ut_type::DECIMALV2(17014116.67)}; - - TestArray vec3 = {ut_type::DECIMALV2(17014116.67), ut_type::DECIMALV2(-17014116.67), - Null()}; - TestArray vec4 = {ut_type::DECIMALV2(-17014116.67)}; - TestArray vec5 = {ut_type::DECIMALV2(-17014116.68)}; + TestArray vec1 = {ut_type::DECIMALV2VALUE(17014116, 670000000, 9), + ut_type::DECIMALV2VALUE(-17014116, 670000000, 9), + ut_type::DECIMALV2VALUE(0, 0, 9)}; + TestArray vec2 = {ut_type::DECIMALV2VALUE(17014116, 670000000, 9)}; + + TestArray vec3 = {ut_type::DECIMALV2VALUE(17014116, 670000000, 9), + ut_type::DECIMALV2VALUE(-17014116, 670000000, 9), Null()}; + TestArray vec4 = {ut_type::DECIMALV2VALUE(-17014116, 670000000, 9)}; + TestArray vec5 = {ut_type::DECIMALV2VALUE(-17014116, 680000000, 9)}; DataSet data_set = {{{vec1, vec2}, UInt8(1)}, {{Null(), vec1}, Null()}, {{vec1, Null()}, Null()}, {{empty_arr, vec1}, UInt8(0)}, {{vec3, vec4}, UInt8(1)}, {{vec3, vec5}, UInt8(0)}, @@ -115,13 +116,15 @@ TEST(function_arrays_overlap_test, arrays_overlap) { InputTypeSet input_types = {PrimitiveType::TYPE_ARRAY, PrimitiveType::TYPE_DECIMALV2, PrimitiveType::TYPE_ARRAY, PrimitiveType::TYPE_DECIMALV2}; - TestArray vec1 = {ut_type::DECIMALV2(17014116.67), ut_type::DECIMALV2(-17014116.67), - ut_type::DECIMALV2(0.0)}; - TestArray vec2 = {ut_type::DECIMALV2(17014116.67)}; + TestArray vec1 = {ut_type::DECIMALV2VALUEFROMDOUBLE(17014116.67), + ut_type::DECIMALV2VALUEFROMDOUBLE(-17014116.67), + ut_type::DECIMALV2VALUEFROMDOUBLE(0.0)}; + TestArray vec2 = {ut_type::DECIMALV2VALUEFROMDOUBLE(17014116.67)}; - TestArray vec3 = {ut_type::DECIMALV2(17014116.67), ut_type::DECIMALV2(-17014116.67)}; - TestArray vec4 = {ut_type::DECIMALV2(-17014116.67)}; - TestArray vec5 = {ut_type::DECIMALV2(-17014116.68)}; + TestArray vec3 = {ut_type::DECIMALV2VALUEFROMDOUBLE(17014116.67), + ut_type::DECIMALV2VALUEFROMDOUBLE(-17014116.67)}; + TestArray vec4 = {ut_type::DECIMALV2VALUEFROMDOUBLE(-17014116.67)}; + TestArray vec5 = {ut_type::DECIMALV2VALUEFROMDOUBLE(-17014116.68)}; DataSet data_set = {{{vec1, vec2}, UInt8(1)}, {{empty_arr, vec1}, UInt8(0)}, {{vec3, vec4}, UInt8(1)}, {{vec3, vec5}, UInt8(0)}, {{vec4, vec3}, UInt8(1)}, {{vec5, vec3}, UInt8(0)}}; diff --git a/be/test/vec/function/function_math_test.cpp b/be/test/vec/function/function_math_test.cpp index f6fbc6df6e3c4f..3fdc3ab29e959b 100644 --- a/be/test/vec/function/function_math_test.cpp +++ b/be/test/vec/function/function_math_test.cpp @@ -609,8 +609,8 @@ TEST(MathFunctionTest, money_format_test) { { InputTypeSet input_types = {PrimitiveType::TYPE_DECIMALV2}; DataSet data_set = {{{Null()}, Null()}, - {{DECIMALV2(17014116.67)}, VARCHAR("17,014,116.67")}, - {{DECIMALV2(-17014116.67)}, VARCHAR("-17,014,116.67")}}; + {{DECIMALV2VALUEFROMDOUBLE(17014116.67)}, VARCHAR("17,014,116.67")}, + {{DECIMALV2VALUEFROMDOUBLE(-17014116.67)}, VARCHAR("-17,014,116.67")}}; static_cast(check_function(func_name, input_types, data_set)); } @@ -666,9 +666,10 @@ TEST(MathFunctionTest, format_round_test) { } { InputTypeSet input_types = {PrimitiveType::TYPE_DECIMALV2, PrimitiveType::TYPE_INT}; - DataSet data_set = {{{Null(), INT(2)}, Null()}, - {{DECIMALV2(17014116.67), INT(2)}, VARCHAR("17,014,116.67")}, - {{DECIMALV2(-17014116.67), INT(2)}, VARCHAR("-17,014,116.67")}}; + DataSet data_set = { + {{Null(), INT(2)}, Null()}, + {{DECIMALV2VALUEFROMDOUBLE(17014116.67), INT(2)}, VARCHAR("17,014,116.67")}, + {{DECIMALV2VALUEFROMDOUBLE(-17014116.67), INT(2)}, VARCHAR("-17,014,116.67")}}; static_cast(check_function(func_name, input_types, data_set)); } diff --git a/be/test/vec/function/function_money_format_test.cpp b/be/test/vec/function/function_money_format_test.cpp index a9d6a60b68049d..a924b92b28d610 100644 --- a/be/test/vec/function/function_money_format_test.cpp +++ b/be/test/vec/function/function_money_format_test.cpp @@ -71,7 +71,7 @@ TEST(function_money_format_test, money_format_with_decimalV2) { auto col_res_expected = ColumnString::create(); for (const auto& input_and_expected : input_dec_str_and_expected_str) { DecimalV2Value dec_v2_value(input_and_expected.first); - col_dec_v2->insert_value(Decimal128V2(dec_v2_value.value())); + col_dec_v2->insert_value(dec_v2_value); col_res_expected->insert_data(input_and_expected.second.c_str(), input_and_expected.second.size()); } diff --git a/be/test/vec/function/function_test_util.cpp b/be/test/vec/function/function_test_util.cpp index 2e0c3180167d2e..aefa4573ad30c8 100644 --- a/be/test/vec/function/function_test_util.cpp +++ b/be/test/vec/function/function_test_util.cpp @@ -484,7 +484,7 @@ bool insert_cell(MutableColumnPtr& column, DataTypePtr type_ptr, const AnyType& break; } case PrimitiveType::TYPE_DECIMALV2: { - auto value = any_cast(cell); + auto value = any_cast(cell); column->insert_data(reinterpret_cast(&value), 0); break; } diff --git a/be/test/vec/function/function_test_util.h b/be/test/vec/function/function_test_util.h index 7e2799c9dd5704..ad34f4ded691ff 100644 --- a/be/test/vec/function/function_test_util.h +++ b/be/test/vec/function/function_test_util.h @@ -214,6 +214,14 @@ inline auto DECIMAL128V3 = [](int128_t x, int128_t y, int scale) { inline auto DECIMAL256 = [](wide::Int256 x, wide::Int256 y, int scale) { return Decimal256::from_int_frac(x, y, scale); }; +inline auto DECIMALV2VALUE = [](int128_t x, int128_t y, int scale) { + return DecimalV2Value(Decimal128V2::from_int_frac(x, y, 9).value); +}; +inline auto DECIMALV2VALUEFROMDOUBLE = [](double value) { + DecimalV2Value decimal_value; + decimal_value.assign_from_double(value); + return DecimalV2Value(binary_cast(decimal_value)); +}; using DATETIME = std::string; diff --git a/be/test/vec/function/function_time_test.cpp b/be/test/vec/function/function_time_test.cpp index 4ba2b16bdf5900..0e1204409e3e65 100644 --- a/be/test/vec/function/function_time_test.cpp +++ b/be/test/vec/function/function_time_test.cpp @@ -1695,7 +1695,7 @@ TEST(VTimestampFunctionsTest, curtime_test) { auto result_col = block.get_by_position(0).column; EXPECT_TRUE(result_col); if (const auto* const_col = check_and_get_column(result_col.get())) { - auto time_value = const_col->get_field().get(); + auto time_value = const_col->get_field().get(); EXPECT_GE(time_value, 0.0); EXPECT_LE(time_value, 24.0 * 3600 * 1000000); } @@ -1738,7 +1738,7 @@ TEST(VTimestampFunctionsTest, curtime_test) { auto result_col = block.get_by_position(1).column; EXPECT_TRUE(result_col); if (const auto* const_col = check_and_get_column(result_col.get())) { - auto time_value = const_col->get_field().get(); + auto time_value = const_col->get_field().get(); EXPECT_GE(time_value, 0.0); EXPECT_LE(time_value, 24.0 * 3600 * 1000000); } diff --git a/be/test/vec/function/table_function_test.cpp b/be/test/vec/function/table_function_test.cpp index ed81918ff524e3..64708135d2ba1d 100644 --- a/be/test/vec/function/table_function_test.cpp +++ b/be/test/vec/function/table_function_test.cpp @@ -107,14 +107,15 @@ TEST_F(TableFunctionTest, vexplode_outer) { // explode_outer(Array) { InputTypeSet input_types = {PrimitiveType::TYPE_ARRAY, PrimitiveType::TYPE_DECIMALV2}; - TestArray vec = {ut_type::DECIMALV2(17014116.67), ut_type::DECIMALV2(-17014116.67)}; + TestArray vec = {ut_type::DECIMALV2VALUEFROMDOUBLE(17014116.67), + ut_type::DECIMALV2VALUEFROMDOUBLE(-17014116.67)}; InputDataSet input_set = {{Null()}, {AnyType {TestArray {}}}, {AnyType {vec}}}; InputTypeSet output_types = {PrimitiveType::TYPE_DECIMALV2}; InputDataSet output_set = {{Null()}, {Null()}, - {ut_type::DECIMALV2(17014116.67)}, - {ut_type::DECIMALV2(-17014116.67)}}; + {ut_type::DECIMALV2VALUEFROMDOUBLE(17014116.67)}, + {ut_type::DECIMALV2VALUEFROMDOUBLE(-17014116.67)}}; check_vec_table_function(&explode_outer, input_types, input_set, output_types, output_set); } @@ -157,15 +158,16 @@ TEST_F(TableFunctionTest, vexplode_outer_v2) { // // explode_outer(Array) { InputTypeSet input_types = {PrimitiveType::TYPE_ARRAY, PrimitiveType::TYPE_DECIMALV2}; - TestArray vec = {ut_type::DECIMALV2(17014116.67), ut_type::DECIMALV2(-17014116.67)}; + TestArray vec = {ut_type::DECIMALV2VALUEFROMDOUBLE(17014116.67), + ut_type::DECIMALV2VALUEFROMDOUBLE(-17014116.67)}; InputDataSet input_set = {{Null()}, {AnyType {TestArray {}}}, {AnyType {vec}}}; InputTypeSet output_types = {PrimitiveType::TYPE_DECIMALV2}; InputDataSet output_set = {{Null()}, {Null()}, - {ut_type::DECIMALV2(17014116.67)}, - {ut_type::DECIMALV2(-17014116.67)}}; + {ut_type::DECIMALV2VALUEFROMDOUBLE(17014116.67)}, + {ut_type::DECIMALV2VALUEFROMDOUBLE(-17014116.67)}}; check_vec_table_function(&explode_outer, input_types, input_set, output_types, output_set); } diff --git a/be/test/vec/jsonb/convert_field_to_type_test.cpp b/be/test/vec/jsonb/convert_field_to_type_test.cpp index fcc1fd9b26eecd..800c827df90aae 100644 --- a/be/test/vec/jsonb/convert_field_to_type_test.cpp +++ b/be/test/vec/jsonb/convert_field_to_type_test.cpp @@ -316,7 +316,7 @@ TEST_F(ConvertFieldToTypeTest, ConvertFieldToType_ToJsonb) { ASSERT_EQ(result.get_type(), TYPE_JSONB); ASSERT_FALSE(result.is_null()); - const JsonbField& jsonb_result = result.get(); + const JsonbField& jsonb_result = result.get(); ASSERT_NE(jsonb_result.get_value(), nullptr); ASSERT_GT(jsonb_result.get_size(), 0); @@ -341,7 +341,7 @@ TEST_F(ConvertFieldToTypeTest, ConvertFieldToType_ToJsonb) { ASSERT_EQ(result.get_type(), TYPE_JSONB); ASSERT_FALSE(result.is_null()); - const JsonbField& jsonb_result = result.get(); + const JsonbField& jsonb_result = result.get(); ASSERT_NE(jsonb_result.get_value(), nullptr); ASSERT_GT(jsonb_result.get_size(), 0); @@ -372,7 +372,7 @@ TEST_F(ConvertFieldToTypeTest, ConvertFieldToType_ToJsonb) { ASSERT_EQ(result.get_type(), TYPE_JSONB); ASSERT_FALSE(result.is_null()); - const JsonbField& jsonb_result = result.get(); + const JsonbField& jsonb_result = result.get(); ASSERT_NE(jsonb_result.get_value(), nullptr); ASSERT_GT(jsonb_result.get_size(), 0); @@ -404,7 +404,7 @@ TEST_F(ConvertFieldToTypeTest, ConvertFieldToType_ToJsonb) { ASSERT_EQ(result.get_type(), TYPE_JSONB); ASSERT_FALSE(result.is_null()); - const JsonbField& jsonb_result = result.get(); + const JsonbField& jsonb_result = result.get(); ASSERT_NE(jsonb_result.get_value(), nullptr); ASSERT_EQ(jsonb_result.get_size(), original_jsonb.get_size()); ASSERT_EQ(memcmp(jsonb_result.get_value(), original_jsonb.get_value(), @@ -439,7 +439,7 @@ TEST_F(ConvertFieldToTypeTest, ConvertFieldToType_ToNullableJsonb) { ASSERT_EQ(result.get_type(), TYPE_JSONB); ASSERT_FALSE(result.is_null()); - const JsonbField& jsonb_result = result.get(); + const JsonbField& jsonb_result = result.get(); ASSERT_NE(jsonb_result.get_value(), nullptr); ASSERT_GT(jsonb_result.get_size(), 0); @@ -474,7 +474,7 @@ TEST_F(ConvertFieldToTypeTest, ConvertFieldToType_ArrayToJsonb) { ASSERT_EQ(result.get_type(), TYPE_ARRAY); ASSERT_FALSE(result.is_null()); - const Array& result_array = result.get(); + const Array& result_array = result.get(); ASSERT_EQ(result_array.size(), 3); // Verify each element is converted to JSONB @@ -482,7 +482,7 @@ TEST_F(ConvertFieldToTypeTest, ConvertFieldToType_ArrayToJsonb) { ASSERT_EQ(result_array[i].get_type(), TYPE_JSONB); ASSERT_FALSE(result_array[i].is_null()); - const auto& jsonb_element = result_array[i].get(); + const auto& jsonb_element = result_array[i].get(); ASSERT_NE(jsonb_element.get_value(), nullptr); ASSERT_GT(jsonb_element.get_size(), 0); diff --git a/be/test/vec/utils/arrow_column_to_doris_column_test.cpp b/be/test/vec/utils/arrow_column_to_doris_column_test.cpp index ef67c30fb06bbf..59a6636847efa7 100644 --- a/be/test/vec/utils/arrow_column_to_doris_column_test.cpp +++ b/be/test/vec/utils/arrow_column_to_doris_column_test.cpp @@ -633,7 +633,7 @@ void test_arrow_to_array_column(ColumnWithTypeAndName& column, auto& array_column = static_cast(*data_column); EXPECT_EQ(array_column.size() - old_size, vec_offsets.size() - 1); for (size_t i = 0; i < array_column.size() - old_size; ++i) { - auto v = get(array_column[old_size + i]); + auto v = array_column[old_size + i].get(); EXPECT_EQ(v.size(), vec_offsets[i + 1] - vec_offsets[i]); EXPECT_EQ(v.size(), array_column.get_offsets()[old_size + i] - array_column.get_offsets()[old_size + i - 1]); @@ -646,14 +646,14 @@ void test_arrow_to_array_column(ColumnWithTypeAndName& column, for (size_t j = 0; j < v.size(); ++j) { // in nested column, values like [null, xx, null, xx, ...] if ((vec_offsets[i] + j) % 2 != 0) { - EXPECT_EQ(value, get(v[j])); + EXPECT_EQ(value, v[j].get()); } } } } else { // check value for (size_t j = 0; j < v.size(); ++j) { - EXPECT_EQ(value, get(v[j])); + EXPECT_EQ(value, v[j].get()); } } } From b914b2491ea084d64f81f29771f34bbf1da7dace Mon Sep 17 00:00:00 2001 From: Gabriel Date: Wed, 14 Jan 2026 10:20:02 +0800 Subject: [PATCH 4/5] [fix](avg) Fix wrong average result (#59831) Introduced by #59669 --- be/src/vec/aggregate_functions/aggregate_function_avg.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/be/src/vec/aggregate_functions/aggregate_function_avg.cpp b/be/src/vec/aggregate_functions/aggregate_function_avg.cpp index d48128a7133bd7..ff8e6b9b58fba9 100644 --- a/be/src/vec/aggregate_functions/aggregate_function_avg.cpp +++ b/be/src/vec/aggregate_functions/aggregate_function_avg.cpp @@ -29,7 +29,7 @@ namespace doris::vectorized { #include "common/compile_check_begin.h" constexpr PrimitiveType result_type(PrimitiveType T) { - if (T == TYPE_LARGEINT) { + if (T == TYPE_LARGEINT || T == TYPE_BIGINT) { return TYPE_LARGEINT; } else if (is_int_or_bool(T)) { return TYPE_BIGINT; From c8abeb8db45aa12793f636abd30acfe0fe799d2d Mon Sep 17 00:00:00 2001 From: Gabriel Date: Thu, 15 Jan 2026 15:48:24 +0800 Subject: [PATCH 5/5] update --- .../aggregate_function_avg.h | 3 +- be/src/vec/core/field.cpp | 58 ++----------------- be/test/vec/columns/column_variant_test.cpp | 34 +++++------ 3 files changed, 22 insertions(+), 73 deletions(-) diff --git a/be/src/vec/aggregate_functions/aggregate_function_avg.h b/be/src/vec/aggregate_functions/aggregate_function_avg.h index ea0e63e40700ad..40aefdd2ea4b61 100644 --- a/be/src/vec/aggregate_functions/aggregate_function_avg.h +++ b/be/src/vec/aggregate_functions/aggregate_function_avg.h @@ -83,8 +83,7 @@ struct AggregateFunctionAvgData { DecimalV2Value decimal_val_count(count, 0); DecimalV2Value decimal_val_sum(sum); DecimalV2Value cal_ret = decimal_val_sum / decimal_val_count; - Decimal128V2 ret(cal_ret.value()); - return ret; + return cal_ret; } else { if constexpr (T == TYPE_DECIMAL256) { return static_cast(sum / diff --git a/be/src/vec/core/field.cpp b/be/src/vec/core/field.cpp index b6ce8c0cb52916..4bbfb70dfbc071 100644 --- a/be/src/vec/core/field.cpp +++ b/be/src/vec/core/field.cpp @@ -796,60 +796,6 @@ std::string_view Field::as_string_view() const { #undef MATCH_PRIMITIVE_TYPE -#define MATCH_NUMBER_TYPE(primite_type) \ - if (type == primite_type) { \ - const auto& v = get::CppType>(); \ - return CastToString::from_number(v); \ - } - -#define MATCH_DECIMAL_TYPE(primite_type) \ - if (type == primite_type) { \ - const auto& v = get::CppType>(); \ - return CastToString::from_decimal(v.get_value(), v.get_scale()); \ - } - -std::string Field::to_string() const { - if (type == PrimitiveType::TYPE_STRING || type == PrimitiveType::TYPE_VARCHAR || - type == PrimitiveType::TYPE_CHAR) { - const auto& s = get(); - return {s.data(), s.size()}; - } - MATCH_DECIMAL_TYPE(TYPE_DECIMAL32); - MATCH_DECIMAL_TYPE(TYPE_DECIMAL64); - MATCH_DECIMAL_TYPE(TYPE_DECIMALV2); - MATCH_DECIMAL_TYPE(TYPE_DECIMAL128I); - MATCH_DECIMAL_TYPE(TYPE_DECIMAL256); - - if (type == TYPE_DATE || type == TYPE_DATETIME) { - const auto& v = binary_cast( - get::CppType>()); - return CastToString::from_date_or_datetime(v); - } - if (type == TYPE_DATEV2) { - const auto& v = binary_cast>( - (uint32_t)get::CppType>()); - return CastToString::from_datev2(v); - } - if (type == TYPE_DATETIMEV2) { - const auto& v = binary_cast>( - (uint64_t)get::CppType>()); - return CastToString::from_datetimev2(v); - } - MATCH_NUMBER_TYPE(TYPE_BOOLEAN); - MATCH_NUMBER_TYPE(TYPE_TINYINT); - MATCH_NUMBER_TYPE(TYPE_SMALLINT); - MATCH_NUMBER_TYPE(TYPE_INT); - MATCH_NUMBER_TYPE(TYPE_BIGINT); - MATCH_NUMBER_TYPE(TYPE_LARGEINT); - MATCH_NUMBER_TYPE(TYPE_FLOAT); - MATCH_NUMBER_TYPE(TYPE_DOUBLE); - throw Exception( - Status::FatalError("type not supported for to_string, type={}", get_type_name())); -} - -#undef MATCH_NUMBER_TYPE -#undef MATCH_DECIMAL_TYPE - #define DECLARE_FUNCTION(FUNC_NAME) \ template void Field::FUNC_NAME(typename PrimitiveTypeTraits::CppType && \ rhs); \ @@ -897,6 +843,10 @@ std::string Field::to_string() const { typename PrimitiveTypeTraits::CppType && rhs); \ template void Field::FUNC_NAME( \ typename PrimitiveTypeTraits::CppType && rhs); \ + template void Field::FUNC_NAME(typename PrimitiveTypeTraits::CppType && \ + rhs); \ + template void Field::FUNC_NAME( \ + const typename PrimitiveTypeTraits::CppType& rhs); \ template void Field::FUNC_NAME( \ const typename PrimitiveTypeTraits::CppType& rhs); \ template void Field::FUNC_NAME( \ diff --git a/be/test/vec/columns/column_variant_test.cpp b/be/test/vec/columns/column_variant_test.cpp index 52ade2189729bc..701e076eb5fa43 100644 --- a/be/test/vec/columns/column_variant_test.cpp +++ b/be/test/vec/columns/column_variant_test.cpp @@ -3280,7 +3280,7 @@ static auto create_mixed_type_variant_column() { {"data.array_int_field", [] { auto array_field = doris::vectorized::Field::create_field(Array()); - auto& array = array_field.get(); + auto& array = array_field.get(); array.emplace_back(doris::vectorized::Field::create_field(1)); array.emplace_back(doris::vectorized::Field::create_field(2)); array.emplace_back(doris::vectorized::Field::create_field(3)); @@ -3289,7 +3289,7 @@ static auto create_mixed_type_variant_column() { // array of strings {"data.array_string_field", [] { auto array_field = doris::vectorized::Field::create_field(Array()); - auto& array = array_field.get(); + auto& array = array_field.get(); array.emplace_back( doris::vectorized::Field::create_field(String("apple"))); array.emplace_back( @@ -3398,7 +3398,7 @@ TEST_F(ColumnVariantTest, compatibility_deserialize_and_verify) { variant_column->get(row, result_field); EXPECT_EQ(result_field.get_type(), TYPE_VARIANT); - const auto& variant_map = result_field.get(); + const auto& variant_map = result_field.get(); if (row < 5) { // First 5 rows should have the structured data @@ -3412,34 +3412,34 @@ TEST_F(ColumnVariantTest, compatibility_deserialize_and_verify) { // Verify specific values auto int_iter = variant_map.find(PathInData("data.int_field")); if (int_iter != variant_map.end()) { - EXPECT_EQ(int_iter->second.field.get(), 42); + EXPECT_EQ(int_iter->second.field.get(), 42); } auto double_iter = variant_map.find(PathInData("data.double_field")); if (double_iter != variant_map.end()) { - EXPECT_DOUBLE_EQ(double_iter->second.field.get(), 3.14159); + EXPECT_DOUBLE_EQ(double_iter->second.field.get(), 3.14159); } auto string_iter = variant_map.find(PathInData("data.string_field")); if (string_iter != variant_map.end()) { - EXPECT_EQ(string_iter->second.field.get(), "hello_world"); + EXPECT_EQ(string_iter->second.field.get(), "hello_world"); } auto array_int_iter = variant_map.find(PathInData("data.array_int_field")); if (array_int_iter != variant_map.end()) { - const auto& array = array_int_iter->second.field.get(); + const auto& array = array_int_iter->second.field.get(); EXPECT_EQ(array.size(), 3); - EXPECT_EQ(array[0].get(), 1); - EXPECT_EQ(array[1].get(), 2); - EXPECT_EQ(array[2].get(), 3); + EXPECT_EQ(array[0].get(), 1); + EXPECT_EQ(array[1].get(), 2); + EXPECT_EQ(array[2].get(), 3); } auto array_string_iter = variant_map.find(PathInData("data.array_string_field")); if (array_string_iter != variant_map.end()) { - const auto& array = array_string_iter->second.field.get(); + const auto& array = array_string_iter->second.field.get(); EXPECT_EQ(array.size(), 2); - EXPECT_EQ(array[0].get(), "apple"); - EXPECT_EQ(array[1].get(), "banana"); + EXPECT_EQ(array[0].get(), "apple"); + EXPECT_EQ(array[1].get(), "banana"); } } else { // Last 3 rows should have sparse data @@ -3453,22 +3453,22 @@ TEST_F(ColumnVariantTest, compatibility_deserialize_and_verify) { // Verify sparse data values auto int_iter = variant_map.find(PathInData("data.int_field")); if (int_iter != variant_map.end()) { - EXPECT_EQ(int_iter->second.field.get(), 100); + EXPECT_EQ(int_iter->second.field.get(), 100); } auto double_iter = variant_map.find(PathInData("data.double_field")); if (double_iter != variant_map.end()) { - EXPECT_DOUBLE_EQ(double_iter->second.field.get(), 2.71828); + EXPECT_DOUBLE_EQ(double_iter->second.field.get(), 2.71828); } auto sparse_string_iter = variant_map.find(PathInData("data.nested.sparse_string")); if (sparse_string_iter != variant_map.end()) { - EXPECT_EQ(sparse_string_iter->second.field.get(), "sparse_data"); + EXPECT_EQ(sparse_string_iter->second.field.get(), "sparse_data"); } auto sparse_int_iter = variant_map.find(PathInData("data.nested.sparse_int")); if (sparse_int_iter != variant_map.end()) { - EXPECT_EQ(sparse_int_iter->second.field.get(), 999); + EXPECT_EQ(sparse_int_iter->second.field.get(), 999); } } }