From 823451516140f32261971e1829097d2b8b1e8288 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Tue, 30 Dec 2025 10:59:29 +0800 Subject: [PATCH 1/7] [refactor](field) Remove nearest type in field --- be/src/exec/es/es_scroll_parser.cpp | 27 +- be/src/exprs/create_predicate_function.h | 5 +- be/src/olap/comparison_predicate.h | 18 +- be/src/olap/delete_handler.cpp | 3 +- be/src/olap/in_list_predicate.h | 15 +- .../rowset/segment_v2/inverted_index_reader.h | 4 +- .../olap/rowset/segment_v2/zone_map_index.cpp | 3 +- be/src/runtime/primitive_type.h | 65 +- 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_variant.cpp | 2 +- be/src/vec/columns/column_vector.cpp | 2 +- be/src/vec/columns/column_vector.h | 3 +- be/src/vec/columns/predicate_column.h | 3 +- be/src/vec/common/field_visitors.h | 49 +- be/src/vec/common/schema_util.cpp | 6 +- be/src/vec/core/decimal_comparison.h | 75 +- be/src/vec/core/field.cpp | 780 ++++++++---------- be/src/vec/core/field.h | 157 +--- .../vec/data_types/convert_field_to_type.cpp | 2 +- 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 | 39 +- be/src/vec/functions/divide.cpp | 75 +- 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 | 64 +- be/src/vec/functions/multiply.cpp | 61 +- be/src/vec/json/parse2column.cpp | 2 +- .../inverted_index_query_param_test.cpp | 6 +- .../runtime_filter_wrapper_test.cpp | 12 +- .../agg_group_array_intersect_test.cpp | 15 +- .../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/core/block_test.cpp | 6 +- be/test/vec/core/field_test.cpp | 2 +- .../data_types/data_type_datetime_v2_test.cpp | 21 +- .../serde/data_type_serde_arrow_test.cpp | 3 +- .../native/native_reader_writer_test.cpp | 29 +- be/test/vec/jsonb/serialize_test.cpp | 3 +- 60 files changed, 788 insertions(+), 1022 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/exprs/create_predicate_function.h b/be/src/exprs/create_predicate_function.h index 422792b2c209f7..aae441daf02836 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 f4cf674ab8299c..d7c8b9727ac98b 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, const T& value, bool opposite = false) : ColumnPredicate(column_id, Type, opposite), _value(value) {} ComparisonPredicateBase(const ComparisonPredicateBase& other, uint32_t col_id) @@ -166,19 +167,8 @@ 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>(); - } else { - min_value = min_field.template get::CppType>(); - max_value = max_field.template get::CppType>(); - } + T min_value = min_field.template get(); + T max_value = max_field.template get(); if constexpr (PT == PredicateType::EQ) { return Compare::less_equal(min_value, _value) && diff --git a/be/src/olap/delete_handler.cpp b/be/src/olap/delete_handler.cpp index b65bc89c64eacf..abc347526652e2 100644 --- a/be/src/olap/delete_handler.cpp +++ b/be/src/olap/delete_handler.cpp @@ -315,7 +315,8 @@ Status parse_to_predicate(const uint32_t index, const vectorized::DataTypePtr& t case TYPE_CHAR: case TYPE_VARCHAR: case TYPE_STRING: { - RETURN_IF_ERROR(convert(type, res.value_str.front(), arena, v)); + auto tmp = vectorized::String(v.data, v.size); + RETURN_IF_ERROR(convert(type, res.value_str.front(), arena, tmp)); switch (res.condition_op) { case PredicateType::EQ: predicate = diff --git a/be/src/olap/in_list_predicate.h b/be/src/olap/in_list_predicate.h index 7e8baa1122792a..d503befb44f03f 100644 --- a/be/src/olap/in_list_predicate.h +++ b/be/src/olap/in_list_predicate.h @@ -276,19 +276,8 @@ 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>(); - } else { - min_value = min_field.template get::CppType>(); - max_value = max_field.template get::CppType>(); - } + T min_value = min_field.template get::CppType>(); + T max_value = max_field.template get::CppType>(); if constexpr (PT == PredicateType::IN_LIST) { return (Compare::less_equal(min_value, _max_value) && 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 2d0911b0adc5df..28184cd03b8e88 100644 --- a/be/src/olap/rowset/segment_v2/inverted_index_reader.h +++ b/be/src/olap/rowset/segment_v2/inverted_index_reader.h @@ -405,9 +405,7 @@ class InvertedIndexQueryParamFactory { } else { 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 533b2356653b4e..b9e9850f9e7dc7 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/runtime/primitive_type.h b/be/src/runtime/primitive_type.h index 4686bdbab7d209..aa68ceedeef4cc 100644 --- a/be/src/runtime/primitive_type.h +++ b/be/src/runtime/primitive_type.h @@ -127,7 +127,6 @@ class ColumnArray; } // namespace vectorized class DecimalV2Value; -struct StringRef; constexpr bool is_enumeration_type(PrimitiveType type) { switch (type) { @@ -273,7 +272,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 +282,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 +293,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 +304,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 +315,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 +326,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 +337,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 +348,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 +359,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 +370,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 +381,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 +392,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 +404,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 +415,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 +426,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 +437,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 +449,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 +463,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 +474,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 +485,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 +496,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 +507,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 +518,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 +529,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 +569,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 +582,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 +596,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 +607,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 +618,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 +629,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 +640,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 +651,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 +662,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 +673,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 +684,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 8f21b8f8f63193..6ca5d98593eca7 100644 --- a/be/src/vec/columns/column_const.h +++ b/be/src/vec/columns/column_const.h @@ -274,10 +274,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 782514fcc6f185..4bc126faaabd8a 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 @@ -282,7 +292,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 46d5663b6aeae9..b1b4986b20f5f2 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_variant.cpp b/be/src/vec/columns/column_variant.cpp index 1eb789b1c8216c..ecad7bb6b71d63 100644 --- a/be/src/vec/columns/column_variant.cpp +++ b/be/src/vec/columns/column_variant.cpp @@ -2213,7 +2213,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 a5367ab8634545..76f31cf7c7b200 100644 --- a/be/src/vec/columns/column_vector.cpp +++ b/be/src/vec/columns/column_vector.cpp @@ -191,7 +191,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 diff --git a/be/src/vec/columns/column_vector.h b/be/src/vec/columns/column_vector.h index da959353caf467..67613c31c71a25 100644 --- a/be/src/vec/columns/column_vector.h +++ b/be/src/vec/columns/column_vector.h @@ -306,8 +306,7 @@ class ColumnVector final : public COWHelper> { // 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)); + data.push_back(doris::vectorized::get::ColumnItemType>(x)); } 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..2720833d037b2b 100644 --- a/be/src/vec/common/field_visitors.h +++ b/be/src/vec/common/field_visitors.h @@ -44,73 +44,64 @@ 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_BIGINT: return visitor.template apply( - field.template get::NearestFieldType>()); + 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 3a3fa01490168d..e4481511a9cb77 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 4567fa20905097..dc56770d504bbc 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,22 +119,20 @@ 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: case PrimitiveType::TYPE_DATE: @@ -145,103 +142,93 @@ void Field::create(Field&& field) { case PrimitiveType::TYPE_INT: 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: case PrimitiveType::TYPE_TIMEV2: 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())); @@ -252,21 +239,19 @@ 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: case PrimitiveType::TYPE_DATE: @@ -276,109 +261,101 @@ void Field::create(const Field& field) { case PrimitiveType::TYPE_INT: 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: case PrimitiveType::TYPE_TIMEV2: 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 +365,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,31 +411,28 @@ 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: case PrimitiveType::TYPE_TINYINT: @@ -466,101 +440,91 @@ void Field::assign(Field&& field) { case PrimitiveType::TYPE_INT: 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_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,30 +535,27 @@ 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: case PrimitiveType::TYPE_TINYINT: @@ -602,107 +563,99 @@ void Field::assign(const Field& field) { case PrimitiveType::TYPE_INT: 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_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 +664,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,214 +743,155 @@ 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_DECIMAL_TYPE(primite_type) \ - if (type == primite_type) { \ - const auto& v = get::NearestFieldType>(); \ - 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()}; - } - if (type == PrimitiveType::TYPE_VARBINARY) { - const auto& svf = get(); - return {svf.data(), svf.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::NearestFieldType>()); - return CastToString::from_date_or_datetime(v); - } - if (type == TYPE_DATEV2) { - const auto& v = binary_cast>( - (uint32_t)get::NearestFieldType>()); - return CastToString::from_datev2(v); - } - if (type == TYPE_DATETIMEV2) { - const auto& v = binary_cast>( - (uint64_t)get::NearestFieldType>()); - return CastToString::from_datetimev2(v); - } - if (type == TYPE_TIMESTAMPTZ) { - const auto& v = binary_cast( - (uint64_t)get::NearestFieldType>()); - return CastToString::from_timestamptz(v, 6); - } - 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::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(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( \ + 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..012c96d6d96c62 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; @@ -343,16 +335,15 @@ 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; } @@ -451,6 +442,12 @@ class Field { case PrimitiveType::TYPE_DATETIME: case PrimitiveType::TYPE_BIGINT: 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: @@ -564,7 +561,6 @@ class Field { } std::string_view as_string_view() const; - std::string to_string() const; private: std::aligned_union_t - 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 +617,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..f196893bf1512d 100644 --- a/be/src/vec/data_types/convert_field_to_type.cpp +++ b/be/src/vec/data_types/convert_field_to_type.cpp @@ -62,7 +62,7 @@ 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) { 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 4f756f239c8dac..e5d31ca74d5f73 100644 --- a/be/src/vec/data_types/data_type_decimal.cpp +++ b/be/src/vec/data_types/data_type_decimal.cpp @@ -211,7 +211,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 8163198eb2dbb2..332125ec7ee6fe 100644 --- a/be/src/vec/data_types/data_type_decimal.h +++ b/be/src/vec/data_types/data_type_decimal.h @@ -258,22 +258,22 @@ class DataTypeDecimal final : public IDataType, public DecimalScaleInfo { 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 8972c50e37c574..3ea02da0e6eb9a 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 580d647d71af9c..a28b963cd049eb 100644 --- a/be/src/vec/exprs/vexpr.cpp +++ b/be/src/vec/exprs/vexpr.cpp @@ -191,171 +191,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 1f4e3a2391389b..bec1273c1ebd64 100644 --- a/be/src/vec/functions/binary_arithmetic.h +++ b/be/src/vec/functions/binary_arithmetic.h @@ -109,8 +109,8 @@ struct PlusMinusDecimalImpl { static constexpr auto name = Impl::name; static constexpr PrimitiveType TypeA = Impl::PTypeA; static constexpr PrimitiveType TypeB = Impl::PTypeB; - using ArgA = typename PrimitiveTypeTraits::ColumnItemType; - using ArgB = typename PrimitiveTypeTraits::ColumnItemType; + using ArgA = typename PrimitiveTypeTraits::CppType; + using ArgB = typename PrimitiveTypeTraits::CppType; using ArgNativeTypeA = typename Impl::ArgNativeTypeA; using ArgNativeTypeB = typename Impl::ArgNativeTypeA; using DataTypeA = typename PrimitiveTypeTraits::DataType; @@ -430,8 +430,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); @@ -449,8 +451,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); @@ -463,8 +467,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()); @@ -486,7 +490,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); @@ -504,7 +509,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); @@ -518,7 +524,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; } @@ -538,7 +544,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); @@ -555,7 +562,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); @@ -567,8 +575,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 b50b12674e245c..208aee55e0c674 100644 --- a/be/src/vec/functions/divide.cpp +++ b/be/src/vec/functions/divide.cpp @@ -108,9 +108,15 @@ class FunctionDiv : public IFunction { auto max_and_multiplier = Impl::get_max_and_multiplier( type_left, type_right, type_result); + const auto v0 = + column_left_ptr->template get_value(); + const auto v1 = + column_right_ptr->template get_value(); column_result = Impl::constant_constant( - column_left_ptr->template get_value(), - column_right_ptr->template get_value(), + *(typename PrimitiveTypeTraits< + Impl::ArgAPType>::ColumnItemType*)&v0, + *(typename PrimitiveTypeTraits< + Impl::ArgBPType>::ColumnItemType*)&v1, max_and_multiplier.first, max_and_multiplier.second, type_result, check_overflow_for_decimal); return true; @@ -125,10 +131,15 @@ 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); - + const auto v0 = + column_left_ptr->template get_value(); + const auto v1 = + column_right_ptr->template get_value(); column_result = Impl::constant_constant( - column_left_ptr->template get_value(), - column_right_ptr->template get_value(), + *(typename PrimitiveTypeTraits< + Impl::ArgAPType>::ColumnItemType*)&v0, + *(typename PrimitiveTypeTraits< + Impl::ArgBPType>::ColumnItemType*)&v1, max_and_multiplier.first, max_and_multiplier.second, type_result, check_overflow_for_decimal); return true; @@ -139,9 +150,11 @@ class FunctionDiv : public IFunction { } } } else { + const auto v0 = column_left_ptr->template get_value(); + const auto v1 = column_right_ptr->template get_value(); column_result = Impl::constant_constant( - column_left_ptr->template get_value(), - column_right_ptr->template get_value()); + *(typename PrimitiveTypeTraits::ColumnItemType*)&v0, + *(typename PrimitiveTypeTraits::ColumnItemType*)&v1); } return ColumnConst::create(std::move(column_result), column_left->size()); @@ -161,9 +174,12 @@ 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); + const auto v = + column_right_ptr->template get_value(); res = Impl::vector_constant( column_left->get_ptr(), - column_right_ptr->template get_value(), + *(typename PrimitiveTypeTraits< + Impl::ArgBPType>::ColumnItemType*)&v, max_and_multiplier.first, max_and_multiplier.second, type_result, check_overflow_for_decimal); return true; @@ -180,7 +196,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; @@ -191,9 +207,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; } @@ -212,8 +227,11 @@ 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); + const auto v = + column_left_ptr->template get_value(); res = Impl::constant_vector( - column_left_ptr->template get_value(), + *(typename PrimitiveTypeTraits< + Impl::ArgAPType>::ColumnItemType*)&v, column_right->get_ptr(), max_and_multiplier.first, max_and_multiplier.second, type_result, check_overflow_for_decimal); @@ -229,8 +247,11 @@ 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); + const auto v = + column_left_ptr->template get_value(); res = Impl::constant_vector( - column_left_ptr->template get_value(), + *(typename PrimitiveTypeTraits< + Impl::ArgAPType>::ColumnItemType*)&v, column_right->get_ptr(), max_and_multiplier.first, max_and_multiplier.second, type_result, check_overflow_for_decimal); @@ -242,7 +263,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; @@ -298,6 +319,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 +410,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; @@ -461,12 +486,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)); } } @@ -493,12 +518,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)); } } @@ -529,8 +554,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) { @@ -541,13 +566,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 63460255fdcfcf..d5c828a5affa41 100644 --- a/be/src/vec/functions/function_quantile_state.cpp +++ b/be/src/vec/functions/function_quantile_state.cpp @@ -129,7 +129,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; @@ -187,7 +187,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 fafff0f73ff013..bf9bc118fbdbd6 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 c9f247183dc4ca..892cae8b3a4646 100644 --- a/be/src/vec/functions/if.cpp +++ b/be/src/vec/functions/if.cpp @@ -262,7 +262,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); @@ -303,7 +303,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) @@ -522,7 +522,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 aac3f31de1e5d5..8712ab869dea34 100644 --- a/be/src/vec/functions/modulo.cpp +++ b/be/src/vec/functions/modulo.cpp @@ -126,9 +126,17 @@ class FunctionMod : public IFunction { auto max_and_multiplier = Impl::get_max_and_multiplier( type_left, type_right, type_result); + const auto v0 = + column_left_ptr + ->template get_value(); + const auto v1 = + column_right_ptr + ->template get_value(); column_result = Impl::constant_constant( - column_left_ptr->template get_value(), - column_right_ptr->template get_value(), + *(typename PrimitiveTypeTraits< + Impl::DataTypeA::PType>::ColumnItemType*)&v0, + *(typename PrimitiveTypeTraits< + Impl::DataTypeB::PType>::ColumnItemType*)&v1, max_and_multiplier.first, max_and_multiplier.second, type_result, check_overflow_for_decimal); return true; @@ -143,10 +151,17 @@ 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); - + const auto v0 = + column_left_ptr + ->template get_value(); + const auto v1 = + column_right_ptr + ->template get_value(); column_result = Impl::constant_constant( - column_left_ptr->template get_value(), - column_right_ptr->template get_value(), + *(typename PrimitiveTypeTraits< + Impl::DataTypeA::PType>::ColumnItemType*)&v0, + *(typename PrimitiveTypeTraits< + Impl::DataTypeB::PType>::ColumnItemType*)&v1, max_and_multiplier.first, max_and_multiplier.second, type_result, check_overflow_for_decimal); return true; @@ -157,9 +172,11 @@ class FunctionMod : public IFunction { } } } else { + const auto v0 = column_left_ptr->template get_value(); + const auto v1 = column_right_ptr->template get_value(); column_result = Impl::constant_constant( - column_left_ptr->template get_value(), - column_right_ptr->template get_value()); + *(typename PrimitiveTypeTraits::ColumnItemType*)&v0, + *(typename PrimitiveTypeTraits::ColumnItemType*)&v1); } return ColumnConst::create(std::move(column_result), column_left->size()); @@ -179,9 +196,13 @@ 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); + const auto v = + column_right_ptr + ->template get_value(); res = Impl::vector_constant( column_left->get_ptr(), - column_right_ptr->template get_value(), + *(typename PrimitiveTypeTraits< + Impl::DataTypeB::PType>::ColumnItemType*)&v, max_and_multiplier.first, max_and_multiplier.second, type_result, check_overflow_for_decimal); return true; @@ -196,9 +217,13 @@ 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); + const auto v = + column_right_ptr + ->template get_value(); res = Impl::vector_constant( column_left->get_ptr(), - column_right_ptr->template get_value(), + *(typename PrimitiveTypeTraits< + Impl::DataTypeB::PType>::ColumnItemType*)&v, max_and_multiplier.first, max_and_multiplier.second, type_result, check_overflow_for_decimal); return true; @@ -209,9 +234,10 @@ class FunctionMod : public IFunction { } } } else { + const auto v = column_right_ptr->template get_value(); res = Impl::vector_constant( column_left->get_ptr(), - column_right_ptr->template get_value()); + *(typename PrimitiveTypeTraits::ColumnItemType*)&v); } return res; } @@ -230,8 +256,12 @@ 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); + const auto v = + column_left_ptr + ->template get_value(); res = Impl::constant_vector( - column_left_ptr->template get_value(), + *(typename PrimitiveTypeTraits< + Impl::DataTypeA::PType>::ColumnItemType*)&v, column_right->get_ptr(), max_and_multiplier.first, max_and_multiplier.second, type_result, check_overflow_for_decimal); @@ -247,8 +277,12 @@ 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); + const auto v = + column_left_ptr + ->template get_value(); res = Impl::constant_vector( - column_left_ptr->template get_value(), + *(typename PrimitiveTypeTraits< + Impl::DataTypeA::PType>::ColumnItemType*)&v, column_right->get_ptr(), max_and_multiplier.first, max_and_multiplier.second, type_result, check_overflow_for_decimal); @@ -260,8 +294,10 @@ class FunctionMod : public IFunction { } } } else { - res = Impl::constant_vector(column_left_ptr->template get_value(), - column_right->get_ptr()); + const auto v = column_left_ptr->template get_value(); + res = Impl::constant_vector( + *(typename PrimitiveTypeTraits::ColumnItemType*)&v, + column_right->get_ptr()); } return res; } diff --git a/be/src/vec/functions/multiply.cpp b/be/src/vec/functions/multiply.cpp index ef9b8132f07e40..201789c489e75d 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; @@ -115,6 +117,8 @@ struct MultiplyDecimalImpl { constexpr static bool need_replace_null_data_to_default = true; 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; @@ -538,10 +542,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); - + const auto v0 = + column_left_ptr->template get_value(); + const auto v1 = + column_right_ptr->template get_value(); column_result = Impl::constant_constant( - column_left_ptr->template get_value(), - column_right_ptr->template get_value(), + *(typename PrimitiveTypeTraits< + Impl::ArgAPType>::ColumnItemType*)&v0, + *(typename PrimitiveTypeTraits< + Impl::ArgBPType>::ColumnItemType*)&v1, type_left, type_right, max_and_multiplier.first, max_and_multiplier.second, type_result, check_overflow_for_decimal); @@ -557,10 +566,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); - + const auto v0 = + column_left_ptr->template get_value(); + const auto v1 = + column_right_ptr->template get_value(); column_result = Impl::constant_constant( - column_left_ptr->template get_value(), - column_right_ptr->template get_value(), + *(typename PrimitiveTypeTraits< + Impl::ArgAPType>::ColumnItemType*)&v0, + *(typename PrimitiveTypeTraits< + Impl::ArgBPType>::ColumnItemType*)&v1, type_left, type_right, max_and_multiplier.first, max_and_multiplier.second, type_result, check_overflow_for_decimal); @@ -572,9 +586,11 @@ class FunctionMultiply : public IFunction { } } } else { + const auto v0 = column_left_ptr->template get_value(); + const auto v1 = column_right_ptr->template get_value(); column_result = Impl::constant_constant( - column_left_ptr->template get_value(), - column_right_ptr->template get_value()); + *(typename PrimitiveTypeTraits::ColumnItemType*)&v0, + *(typename PrimitiveTypeTraits::ColumnItemType*)&v1); } return ColumnConst::create(std::move(column_result), column_left->size()); @@ -594,9 +610,12 @@ 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); + const auto v = + column_right_ptr->template get_value(); res = Impl::vector_constant( column_left->get_ptr(), - column_right_ptr->template get_value(), + *(typename PrimitiveTypeTraits< + Impl::ArgBPType>::ColumnItemType*)&v, type_left, type_right, max_and_multiplier.first, max_and_multiplier.second, type_result, check_overflow_for_decimal); @@ -612,9 +631,12 @@ 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); + const auto v = + column_right_ptr->template get_value(); res = Impl::vector_constant( column_left->get_ptr(), - column_right_ptr->template get_value(), + *(typename PrimitiveTypeTraits< + Impl::ArgBPType>::ColumnItemType*)&v, type_left, type_right, max_and_multiplier.first, max_and_multiplier.second, type_result, check_overflow_for_decimal); @@ -626,9 +648,10 @@ class FunctionMultiply : public IFunction { } } } else { + const auto v = column_right_ptr->template get_value(); res = Impl::vector_constant( column_left->get_ptr(), - column_right_ptr->template get_value()); + *(typename PrimitiveTypeTraits::ColumnItemType*)&v); } return res; } @@ -647,8 +670,11 @@ 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); + const auto v = + column_left_ptr->template get_value(); res = Impl::constant_vector( - column_left_ptr->template get_value(), + *(typename PrimitiveTypeTraits< + Impl::ArgAPType>::ColumnItemType*)&v, column_right->get_ptr(), type_left, type_right, max_and_multiplier.first, max_and_multiplier.second, type_result, check_overflow_for_decimal); @@ -664,8 +690,11 @@ 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); + const auto v = + column_left_ptr->template get_value(); res = Impl::constant_vector( - column_left_ptr->template get_value(), + *(typename PrimitiveTypeTraits< + Impl::ArgAPType>::ColumnItemType*)&v, column_right->get_ptr(), type_left, type_right, max_and_multiplier.first, max_and_multiplier.second, type_result, check_overflow_for_decimal); @@ -677,8 +706,10 @@ class FunctionMultiply : public IFunction { } } } else { - res = Impl::constant_vector(column_left_ptr->template get_value(), - column_right->get_ptr()); + const auto v = column_left_ptr->template get_value(); + res = Impl::constant_vector( + *(typename PrimitiveTypeTraits::ColumnItemType*)&v, + 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/olap/rowset/segment_v2/inverted_index_query_param_test.cpp b/be/test/olap/rowset/segment_v2/inverted_index_query_param_test.cpp index 8fa1e0b3552553..531fec8d1cc8a0 100644 --- a/be/test/olap/rowset/segment_v2/inverted_index_query_param_test.cpp +++ b/be/test/olap/rowset/segment_v2/inverted_index_query_param_test.cpp @@ -380,8 +380,9 @@ TEST_F(InvertedIndexQueryParamTest, TestDateTimeWithField) { } TEST_F(InvertedIndexQueryParamTest, TestDateV2WithField) { + vectorized::UInt64 v = 20231205; auto field = vectorized::Field::create_field( - static_cast(20231205)); + *(typename PrimitiveTypeTraits::CppType*)&v); std::unique_ptr param; auto status = InvertedIndexQueryParamFactory::create_query_value(PrimitiveType::TYPE_DATEV2, &field, param); @@ -390,8 +391,9 @@ TEST_F(InvertedIndexQueryParamTest, TestDateV2WithField) { } TEST_F(InvertedIndexQueryParamTest, TestDateTimeV2WithField) { + vectorized::UInt64 v = 20231205120000LL; auto field = vectorized::Field::create_field( - static_cast(20231205120000LL)); + *(typename PrimitiveTypeTraits::CppType*)&v); std::unique_ptr param; auto status = InvertedIndexQueryParamFactory::create_query_value(PrimitiveType::TYPE_DATETIMEV2, &field, param); 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..0521dee1169859 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)); 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 1f16517c5c1c51..9150738d26fd41 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 @@ -59,9 +59,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; @@ -71,8 +70,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/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/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_datetime_v2_test.cpp b/be/test/vec/data_types/data_type_datetime_v2_test.cpp index 19be034c9569ac..3c2af1cc9e9285 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)); } @@ -895,7 +904,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/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/exec/format/native/native_reader_writer_test.cpp b/be/test/vec/exec/format/native/native_reader_writer_test.cpp index f26fbb0f4d22ef..95142e1b004395 100644 --- a/be/test/vec/exec/format/native/native_reader_writer_test.cpp +++ b/be/test/vec/exec/format/native/native_reader_writer_test.cpp @@ -883,8 +883,7 @@ static Block create_all_types_test_block() { // DateV1 stores as int64 representing binary date VecDateTimeValue dt; dt.from_date_int64(20231215); // 2023-12-15 - col->insert(Field::create_field( - binary_cast(dt))); + col->insert(Field::create_field(dt)); block.insert(ColumnWithTypeAndName(std::move(col), type, "col_date")); } @@ -895,8 +894,7 @@ static Block create_all_types_test_block() { MutableColumnPtr col = type->create_column(); VecDateTimeValue dt; dt.from_date_int64(20231215103045LL); // 2023-12-15 10:30:45 - col->insert(Field::create_field( - binary_cast(dt))); + col->insert(Field::create_field(dt)); block.insert(ColumnWithTypeAndName(std::move(col), type, "col_datetime")); } @@ -907,8 +905,7 @@ static Block create_all_types_test_block() { MutableColumnPtr col = type->create_column(); DateV2Value dv2; dv2.from_date_int64(20231215); - col->insert(Field::create_field( - static_cast(binary_cast, UInt32>(dv2)))); + col->insert(Field::create_field(dv2)); block.insert(ColumnWithTypeAndName(std::move(col), type, "col_datev2")); } @@ -919,8 +916,7 @@ static Block create_all_types_test_block() { MutableColumnPtr col = type->create_column(); DateV2Value dtv2; dtv2.from_date_int64(20231215103045LL); - col->insert(Field::create_field( - binary_cast, UInt64>(dtv2))); + col->insert(Field::create_field(dtv2)); block.insert(ColumnWithTypeAndName(std::move(col), type, "col_datetimev2")); } @@ -969,9 +965,8 @@ static Block create_all_types_test_block() { DataTypePtr type = make_nullable( DataTypeFactory::instance().create_data_type(TYPE_DECIMALV2, false, 27, 9)); MutableColumnPtr col = type->create_column(); - Decimal128V2 dec_val(static_cast(123456789123456789LL)); - col->insert(Field::create_field( - DecimalField(dec_val, 9))); + DecimalV2Value dec_val(static_cast(123456789123456789LL)); + col->insert(Field::create_field(dec_val)); block.insert(ColumnWithTypeAndName(std::move(col), type, "col_decimalv2")); } @@ -981,8 +976,7 @@ static Block create_all_types_test_block() { DataTypeFactory::instance().create_data_type(TYPE_DECIMAL32, false, 9, 2)); MutableColumnPtr col = type->create_column(); Decimal32 dec_val(static_cast(12345678)); - col->insert(Field::create_field( - DecimalField(dec_val, 2))); + col->insert(Field::create_field(dec_val)); block.insert(ColumnWithTypeAndName(std::move(col), type, "col_decimal32")); } @@ -992,8 +986,7 @@ static Block create_all_types_test_block() { DataTypeFactory::instance().create_data_type(TYPE_DECIMAL64, false, 18, 4)); MutableColumnPtr col = type->create_column(); Decimal64 dec_val(static_cast(123456789012345678LL)); - col->insert(Field::create_field( - DecimalField(dec_val, 4))); + col->insert(Field::create_field(dec_val)); block.insert(ColumnWithTypeAndName(std::move(col), type, "col_decimal64")); } @@ -1003,8 +996,7 @@ static Block create_all_types_test_block() { DataTypeFactory::instance().create_data_type(TYPE_DECIMAL128I, false, 38, 6)); MutableColumnPtr col = type->create_column(); Decimal128V3 dec_val(static_cast(123456789012345678LL) * 100); - col->insert(Field::create_field( - DecimalField(dec_val, 6))); + col->insert(Field::create_field(dec_val)); block.insert(ColumnWithTypeAndName(std::move(col), type, "col_decimal128")); } @@ -1015,8 +1007,7 @@ static Block create_all_types_test_block() { MutableColumnPtr col = type->create_column(); wide::Int256 wide_val = wide::Int256(123456789012345678LL) * 10000000000LL; Decimal256 dec_val(wide_val); - col->insert(Field::create_field( - DecimalField(dec_val, 10))); + col->insert(Field::create_field(dec_val)); block.insert(ColumnWithTypeAndName(std::move(col), type, "col_decimal256")); } 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 993897e726474c40630bfcd1562ae6b4e6798d6a Mon Sep 17 00:00:00 2001 From: Gabriel Date: Tue, 30 Dec 2025 17:15:22 +0800 Subject: [PATCH 2/7] update --- be/src/vec/core/field.h | 2 ++ .../olap/rowset/segment_v2/inverted_index_query_param_test.cpp | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/be/src/vec/core/field.h b/be/src/vec/core/field.h index 012c96d6d96c62..6e4061b89952cf 100644 --- a/be/src/vec/core/field.h +++ b/be/src/vec/core/field.h @@ -442,6 +442,8 @@ 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: diff --git a/be/test/olap/rowset/segment_v2/inverted_index_query_param_test.cpp b/be/test/olap/rowset/segment_v2/inverted_index_query_param_test.cpp index 531fec8d1cc8a0..7334b2e761e7ea 100644 --- a/be/test/olap/rowset/segment_v2/inverted_index_query_param_test.cpp +++ b/be/test/olap/rowset/segment_v2/inverted_index_query_param_test.cpp @@ -170,7 +170,7 @@ TEST_F(InvertedIndexQueryParamTest, TestLargeIntTemplateWithNativeValue) { TEST_F(InvertedIndexQueryParamTest, TestFloatWithField) { auto field = - vectorized::Field::create_field(static_cast(3.14f)); + vectorized::Field::create_field(static_cast(3.14f)); std::unique_ptr param; auto status = InvertedIndexQueryParamFactory::create_query_value(PrimitiveType::TYPE_FLOAT, &field, param); From e269fdbd7ef301467f571e53edb3abba0af99ed1 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Wed, 31 Dec 2025 16:56:55 +0800 Subject: [PATCH 3/7] update --- be/src/exec/olap_common.h | 10 ++++++---- be/src/pipeline/exec/scan_operator.cpp | 15 ++++++++++----- be/src/vec/columns/column_varbinary.h | 3 ++- be/test/vec/columns/column_varbinary_test.cpp | 6 ++++-- 4 files changed, 22 insertions(+), 12 deletions(-) diff --git a/be/src/exec/olap_common.h b/be/src/exec/olap_common.h index ac6ed60848b8d2..a0c672d707abf5 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; @@ -814,8 +815,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/pipeline/exec/scan_operator.cpp b/be/src/pipeline/exec/scan_operator.cpp index 9c61e75d114719..f429a64871d834 100644 --- a/be/src/pipeline/exec/scan_operator.cpp +++ b/be/src/pipeline/exec/scan_operator.cpp @@ -938,17 +938,15 @@ Status ScanLocalState::_change_value_range(ColumnValueRange(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)) { if constexpr (IsFixed) { func(temp_range, reinterpret_cast::CppType*>( @@ -958,6 +956,13 @@ Status ScanLocalState::_change_value_range(ColumnValueRange::CppType*>( value)); } + } else if constexpr (is_string_type(PrimitiveType)) { + if constexpr (IsFixed) { + func(temp_range, reinterpret_cast(value)); + } else { + func(temp_range, to_olap_filter_type(fn_name, slot_ref_child), + reinterpret_cast(value)); + } } else { static_assert(always_false_v); } diff --git a/be/src/vec/columns/column_varbinary.h b/be/src/vec/columns/column_varbinary.h index 56e994b916e6cd..9614465da733f7 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/test/vec/columns/column_varbinary_test.cpp b/be/test/vec/columns/column_varbinary_test.cpp index d903d3abeff2fd..611df01a9e5ecd 100644 --- a/be/test/vec/columns/column_varbinary_test.cpp +++ b/be/test/vec/columns/column_varbinary_test.cpp @@ -348,13 +348,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); } From a96cd3cec2f6777662bb4b9cb08bb766089206b2 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Wed, 31 Dec 2025 17:50:31 +0800 Subject: [PATCH 4/7] update --- be/src/olap/in_list_predicate.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/be/src/olap/in_list_predicate.h b/be/src/olap/in_list_predicate.h index d503befb44f03f..e6256429b33625 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< @@ -276,8 +277,8 @@ class InListPredicateBase final : public ColumnPredicate { } bool camp_field(const vectorized::Field& min_field, const vectorized::Field& max_field) const { - T min_value = min_field.template get::CppType>(); - T max_value = max_field.template get::CppType>(); + T min_value = min_field.template get(); + T max_value = max_field.template get(); if constexpr (PT == PredicateType::IN_LIST) { return (Compare::less_equal(min_value, _max_value) && From 22c6128d1d343841e1ac1d377ae255867769370b Mon Sep 17 00:00:00 2001 From: Gabriel Date: Sun, 4 Jan 2026 19:37:27 +0800 Subject: [PATCH 5/7] update --- be/src/olap/delete_handler.cpp | 3 +- be/src/vec/core/field.cpp | 88 ++++++++++++ be/src/vec/core/field.h | 79 ----------- .../vec/data_types/convert_field_to_type.cpp | 130 ++++++++++++++++-- .../column_variant_allocated_bytes.out | 4 +- .../vec/columns/column_variant_byte_size.out | 4 +- ...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 +- be/test/vec/columns/column_variant_test.cpp | 44 ++++-- .../vec/jsonb/convert_field_to_type_test.cpp | 54 ++++---- 12 files changed, 270 insertions(+), 144 deletions(-) diff --git a/be/src/olap/delete_handler.cpp b/be/src/olap/delete_handler.cpp index abc347526652e2..053674364fcf16 100644 --- a/be/src/olap/delete_handler.cpp +++ b/be/src/olap/delete_handler.cpp @@ -315,8 +315,7 @@ Status parse_to_predicate(const uint32_t index, const vectorized::DataTypePtr& t case TYPE_CHAR: case TYPE_VARCHAR: case TYPE_STRING: { - auto tmp = vectorized::String(v.data, v.size); - RETURN_IF_ERROR(convert(type, res.value_str.front(), arena, tmp)); + v = {res.value_str.front().data(), res.value_str.front().size()}; switch (res.condition_op) { case PredicateType::EQ: predicate = diff --git a/be/src/vec/core/field.cpp b/be/src/vec/core/field.cpp index dc56770d504bbc..97b587179feb1f 100644 --- a/be/src/vec/core/field.cpp +++ b/be/src/vec/core/field.cpp @@ -135,11 +135,29 @@ void Field::create(Field&& field) { 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::CppType>())); @@ -157,7 +175,13 @@ void Field::create(Field&& field) { 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::CppType>())); @@ -254,11 +278,29 @@ void Field::create(const Field& field) { 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::CppType>()); @@ -276,7 +318,13 @@ void Field::create(const Field& field) { 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::CppType>()); @@ -435,9 +483,21 @@ void Field::assign(Field&& field) { 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::CppType>())); @@ -454,6 +514,14 @@ void Field::assign(Field&& field) { 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::CppType>())); @@ -558,9 +626,21 @@ void Field::assign(const Field& field) { 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::CppType>()); @@ -577,6 +657,14 @@ void Field::assign(const Field& field) { assign_concrete( 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::CppType>()); diff --git a/be/src/vec/core/field.h b/be/src/vec/core/field.h index 6e4061b89952cf..1c93a5ea768c00 100644 --- a/be/src/vec/core/field.h +++ b/be/src/vec/core/field.h @@ -483,85 +483,6 @@ class Field { } } - 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())); - } - } - std::string_view as_string_view() const; private: 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 f196893bf1512d..6fefdb1b9e7962 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, @@ -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(); } @@ -361,8 +470,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/test/expected_result/vec/columns/column_variant_allocated_bytes.out b/be/test/expected_result/vec/columns/column_variant_allocated_bytes.out index c92d1d0e76e9e4..3017f945e997a7 100644 --- a/be/test/expected_result/vec/columns/column_variant_allocated_bytes.out +++ b/be/test/expected_result/vec/columns/column_variant_allocated_bytes.out @@ -1,2 +1,2 @@ -column: variant with allocate size: 19295936 -19295936 \ No newline at end of file +column: variant with allocate size: 19381952 +19381952 \ No newline at end of file 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..50b99e5adb5417 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: 11392157 +11392157 \ 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..dbc5d1b0a14e60 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,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,15768162373861499516,7225357645947361509,17432059392688763612,3769118726675317215,14405266818605471701,1925201385917300938,8063625939728402089,3815998028434298813,6979208951624431293,9199434165347712341,10969246000779150374,15913928736182451651,1420074487803791636,3396350920621792264,10226733588431959438,2061905068208533165,3173312581913078194,15333893640702856783,6996317734102200815,1950086453039278227,4050146670921763689,6676050004705678461,17761328392960004411,17050041739912832401,4784796073699347100,15744214346824844721,13546806644589978702,12828345096931480804,5092820628272371792,7327977852645649695,10602433987208736618,17394544006654809624,2867300395619592955,8489318576164157575,13840981329683177286,12977248042709188475,14188030363193280858,5433689568976041132,1934808709567636327,4073658190215197847,5415109524180399730,2849907624439992348,14380333827806329233,15240205013926292761,5752367615268795819,5127258499718568753,17010732234858126677,14703566510920687537,16813444854000685556,5185939693798710130,4971791540085243677,10570541847167161500,6008592764559804816,1917411618067623777,14831265224814696922,17791533807329327254,16366559929965270505,7246244413306650750,4529887499622334941,9122358649975914223,6145061098101239651,11879010717824554903,2017378355896801213,16471702208420565035,9984576767488296364,6509877242747399205,14177331016867003610,111450380918725095,5475486564072131343,573110342125606738,11892485346374534200,1996668469494753207,9780225921141519843,17870651751453117426,2998235071597124503,6822195467452995804,17851338770792313206,4389520907420599746,8127964366078443055,14921610986432916425,11176915577281374279,17625580841532873173,14786132066306737028,11676204143772058235,15056033403331444786,1177008594255760403,12197975568585840797,5107791682174952523,7747186992801858268,17198613561093558874,5753460429532648455,11004214034966784573,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,6327423596025056105,4244338613455473297,18438019286479835991,5681257375620390388,2472567154349267542,13643474310638964723,15412378412473625843,10293643728944242296,5709890512077047168,5415357513993992116,17776611126331257495,7368561081566417051,15288219065335657733,17395958212806504369,5435367679895773653,17224706814550159003,8595862587159198340,4091162967041814355,6820469339856609663,6836700276690979877,8180999775687796590,9850535218431053105,12696618764921166059,3432347660578356015,12851176488183897333,6644865018003732864,17620752181919203518,15835938068232779450,50539409706381864,757158584192029447,10699373265972828713,16487966844138495812,13923109915869729256,1189956559391083636,17813310479469736188,4553563740604898277,5597950345140126230,7148425184582345465,1459355205717304255,14957313583898565521,1027601072819322154,12263775898038264099,13327011790626514933,2200506112611560062,15604303434634039472,3102838113447176142,10694677674693311023,17353051235795197799,4602017311452446078,13739583015842681624,12969053409625901843,14533232979444038784,2570364413753236660,13754206870766679993,2803371512420473254,14076910610315882050,412789031822610750,965360983608296478,640856146871899623,13782096807224460510,11218864863810529578,10733572097234265214,6811270563226575864,16377976372980554435,8576394114847577874,3076187404349397061,13589831145133467721,17627665587223348064,15866055472133904741,8577998581010804779,14065651938840280379,3700664113724656427,16162318915184717622,13920985398171841628,2417028256519185931,10064391391054435237,18023193255897387548,778912354360335937,3882287537253804711,2130834767531014721,15500564702578731623,8564365548950058481,3194927869006203783,6966772252316616876,1950647250193946258,15584506018851122186,11569468523735462132,13404682956993054673,7910846322535790397,206752545400245530,51743077138685233,953687744537365420,2383403963259607151,10919857631144401443,1026067607435859784,3603578133209278086,17590234168248527612,13589390120864869276,14411747855444346395,13673111317515866505,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,4247352781676343299,2211222786847038316,7486348198967977459,1475216949911688952,14686675753903526360,17567779356973769632,1988689206378901131,12616641345482859100,11932060646766527983,6111481965008603333,6851913794467891720,1316354231263197498,4093254908539117596,1872993347066194242,4754440382078528129,10549012226137960839,16800672045267779389,16873767943273499256,18333555804771242475,16184992284447220251,14751559022725722112,5080663969862266712,206366672905410969,2388912506738424315,7140147496959714332,2325339960517665303,4939792261647261925,9137442795961921301,11531240494188219026,5023023834594523336,8931250198004556617,8815264439828684162,14087888719916468915,7774700676566137907,11295601643873606894,16381473369215827504,884395831047973251,12656074507619888312,11275936974796052967,3645343137737878897,5179642918551335806,3806792027171283363,10072084938545446649,3882322371274185594,10889995888208475523,8723836924058938725,10365059182104030291,1019664260553351692,6238167855411770442,12267181071608781885,14881041719137460135,7642535488597870185,6587090968394152937,14125911545651974613,14840235144341776538,3748200799995513731,17129610709116739374,13710944374683031934,3347383732159588715,11330996893351757443,16538119486033524304,2331138159503859599,12668523465144549380,2591516480904968532,4442226899118534116,5714047271319756220,3531990735177779273,15214313886933047076,17415819608016234623,1366149051795646990,12418643667097500047,12152608965079530048,13009978116834529219,4062118270833273836,14704596679827577710,16213011651838467728,17386729227596679941,961410916452340485,7778115997980231649,2522223793636542380,10757969330561290949,12405521880686604396,12008218753883778286,10224624634255586087,17171751294015185725,16338362600925359454,7634801163346997731,5180806784613612186,393887453360382478,4367476390430288696,16434686301184035194,13876662907086058182,6101082257037545039,17815881925649561027,13875814279731620322,12662618127977119762,6237003403212020713,6165994016068197492,2272124548513562156,7152820871876045287,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,10485584357825409942,6677489628738721504,341775343465270801,6600650507329984243,7277115010012064988,17121698674827186019,3280020720069368446,6351607436551098552,5156971792496209909,2555535705572604664,3542882925917389491,4605954273290714177,6350377584341737790,8362640847987937867,12597644107074751032,18058356256083802281,15572236862165809990,3623406106118487717,16879071724345406123,12342127064772974912,1334267748975185745,8206655207818312958,11915413325379146267,10326189339880665825,3736159429254178429,4751389830399385951,64356891266583164,10505642822552329507,5801918344787773498,1285339989175269496,5184426359828585220,1005482799058894416,3421018551809690515,2455344633245049121,11791468142390527599,13423067977840671291,13330885476457496892,13102737857631390020,3770502088801184629,13831533424704777924,9081449763117404779,1723362206729072857,7323820686912015995,914818500584876856,2934069549201953948,8615983778002073437,14924065272692608362,11432116819311513903,9752912907238521296,14379814176553716199,15340213140971159285,13262528626887035606,1433661263284487590,12101015411363077930,9772761142680331954,1416204854193921304,11342706278816996174,13792446115994770147,15447853584824505488,1019005205144016541,2847749988211430835,8989987908446419602,14918044191732003291,12715140746821688049,3462713695533055333,18129682980008295374,560326520790100564,15569718615854507996,11657439006333346049,2547901658046580765,1063954953396449189,10701388247271542983,11119314247073012349,10719945982105023874,9021285492267435712,5565540712364821144,650917236357246206,5523879403131852973,16292785885626334424,10717444225185301239,9253427510074483285,11118158796692002001,11541936628244355074,296411713358149470,5102466945335969842,1942039587589461340,9467331166824099905,11120107421857316850,7009168321657948549,5242435492549019091,10738415506469871178,3222480648115989207,17619663415122761219,8339108496620781386,9844971443370911190,4426826991919136648,2637406138716333699,14694976587597207377,7598422517526073712,7118948901104326875,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,17320999364385509601,8389884739042335419,10681567007315049665,13850931412078522037,2629458102430399893,14921780400137459080,13941161494227738430,3610925526592499849,10634716751055955928,1395460787949115159,503427878074936323,12475879360916906694,12175099612243662372,8908381691972418220,12915960876620413683,1807529333873025669,15414290744617828076,3490912248875075983,10511080277494644297,14547368062995101697,13601547940131665976,2692789683574200915,8724045410384058508,4167896208396440628,15295393493207429071,2982435113468969088,16963245112199844933,147000590335713500,5794204145019158092,5719657328699958409,1967614049362757785,488968351618637265,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,5078939247040274080,6671859122717448110,2817857740954170170,14053265279651645011,3022677085705007601,2650033388370156597,7503758639846881608,5324629953184810166,3458436762512184457,1577895472049365994,6346920869462583589,12392238758996181370,1704538485242833086,17152099210315068784,16180298156806132622,14018723029693390588,2884179524142278313,11124163375537191282,18320772732460611898,16820343451080465911,17819459477958525685,5813970103203806564,16633755104059066579,17488033902177687201,2473608697134418559,17709003374781246393,95460204587832587,10602573589229546844,6918896777264340200,1196633835267704076,433249600599133112,8007241031025770700,9961433277013134100,17513373899142762175,5496173628826520494,8251532161209005934,16822713586793458169,18038578351767047046,3251458916879764809,7785037491929802569,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..dbc5d1b0a14e60 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,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,15768162373861499516,7225357645947361509,17432059392688763612,3769118726675317215,14405266818605471701,1925201385917300938,8063625939728402089,3815998028434298813,6979208951624431293,9199434165347712341,10969246000779150374,15913928736182451651,1420074487803791636,3396350920621792264,10226733588431959438,2061905068208533165,3173312581913078194,15333893640702856783,6996317734102200815,1950086453039278227,4050146670921763689,6676050004705678461,17761328392960004411,17050041739912832401,4784796073699347100,15744214346824844721,13546806644589978702,12828345096931480804,5092820628272371792,7327977852645649695,10602433987208736618,17394544006654809624,2867300395619592955,8489318576164157575,13840981329683177286,12977248042709188475,14188030363193280858,5433689568976041132,1934808709567636327,4073658190215197847,5415109524180399730,2849907624439992348,14380333827806329233,15240205013926292761,5752367615268795819,5127258499718568753,17010732234858126677,14703566510920687537,16813444854000685556,5185939693798710130,4971791540085243677,10570541847167161500,6008592764559804816,1917411618067623777,14831265224814696922,17791533807329327254,16366559929965270505,7246244413306650750,4529887499622334941,9122358649975914223,6145061098101239651,11879010717824554903,2017378355896801213,16471702208420565035,9984576767488296364,6509877242747399205,14177331016867003610,111450380918725095,5475486564072131343,573110342125606738,11892485346374534200,1996668469494753207,9780225921141519843,17870651751453117426,2998235071597124503,6822195467452995804,17851338770792313206,4389520907420599746,8127964366078443055,14921610986432916425,11176915577281374279,17625580841532873173,14786132066306737028,11676204143772058235,15056033403331444786,1177008594255760403,12197975568585840797,5107791682174952523,7747186992801858268,17198613561093558874,5753460429532648455,11004214034966784573,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,6327423596025056105,4244338613455473297,18438019286479835991,5681257375620390388,2472567154349267542,13643474310638964723,15412378412473625843,10293643728944242296,5709890512077047168,5415357513993992116,17776611126331257495,7368561081566417051,15288219065335657733,17395958212806504369,5435367679895773653,17224706814550159003,8595862587159198340,4091162967041814355,6820469339856609663,6836700276690979877,8180999775687796590,9850535218431053105,12696618764921166059,3432347660578356015,12851176488183897333,6644865018003732864,17620752181919203518,15835938068232779450,50539409706381864,757158584192029447,10699373265972828713,16487966844138495812,13923109915869729256,1189956559391083636,17813310479469736188,4553563740604898277,5597950345140126230,7148425184582345465,1459355205717304255,14957313583898565521,1027601072819322154,12263775898038264099,13327011790626514933,2200506112611560062,15604303434634039472,3102838113447176142,10694677674693311023,17353051235795197799,4602017311452446078,13739583015842681624,12969053409625901843,14533232979444038784,2570364413753236660,13754206870766679993,2803371512420473254,14076910610315882050,412789031822610750,965360983608296478,640856146871899623,13782096807224460510,11218864863810529578,10733572097234265214,6811270563226575864,16377976372980554435,8576394114847577874,3076187404349397061,13589831145133467721,17627665587223348064,15866055472133904741,8577998581010804779,14065651938840280379,3700664113724656427,16162318915184717622,13920985398171841628,2417028256519185931,10064391391054435237,18023193255897387548,778912354360335937,3882287537253804711,2130834767531014721,15500564702578731623,8564365548950058481,3194927869006203783,6966772252316616876,1950647250193946258,15584506018851122186,11569468523735462132,13404682956993054673,7910846322535790397,206752545400245530,51743077138685233,953687744537365420,2383403963259607151,10919857631144401443,1026067607435859784,3603578133209278086,17590234168248527612,13589390120864869276,14411747855444346395,13673111317515866505,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,4247352781676343299,2211222786847038316,7486348198967977459,1475216949911688952,14686675753903526360,17567779356973769632,1988689206378901131,12616641345482859100,11932060646766527983,6111481965008603333,6851913794467891720,1316354231263197498,4093254908539117596,1872993347066194242,4754440382078528129,10549012226137960839,16800672045267779389,16873767943273499256,18333555804771242475,16184992284447220251,14751559022725722112,5080663969862266712,206366672905410969,2388912506738424315,7140147496959714332,2325339960517665303,4939792261647261925,9137442795961921301,11531240494188219026,5023023834594523336,8931250198004556617,8815264439828684162,14087888719916468915,7774700676566137907,11295601643873606894,16381473369215827504,884395831047973251,12656074507619888312,11275936974796052967,3645343137737878897,5179642918551335806,3806792027171283363,10072084938545446649,3882322371274185594,10889995888208475523,8723836924058938725,10365059182104030291,1019664260553351692,6238167855411770442,12267181071608781885,14881041719137460135,7642535488597870185,6587090968394152937,14125911545651974613,14840235144341776538,3748200799995513731,17129610709116739374,13710944374683031934,3347383732159588715,11330996893351757443,16538119486033524304,2331138159503859599,12668523465144549380,2591516480904968532,4442226899118534116,5714047271319756220,3531990735177779273,15214313886933047076,17415819608016234623,1366149051795646990,12418643667097500047,12152608965079530048,13009978116834529219,4062118270833273836,14704596679827577710,16213011651838467728,17386729227596679941,961410916452340485,7778115997980231649,2522223793636542380,10757969330561290949,12405521880686604396,12008218753883778286,10224624634255586087,17171751294015185725,16338362600925359454,7634801163346997731,5180806784613612186,393887453360382478,4367476390430288696,16434686301184035194,13876662907086058182,6101082257037545039,17815881925649561027,13875814279731620322,12662618127977119762,6237003403212020713,6165994016068197492,2272124548513562156,7152820871876045287,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,10485584357825409942,6677489628738721504,341775343465270801,6600650507329984243,7277115010012064988,17121698674827186019,3280020720069368446,6351607436551098552,5156971792496209909,2555535705572604664,3542882925917389491,4605954273290714177,6350377584341737790,8362640847987937867,12597644107074751032,18058356256083802281,15572236862165809990,3623406106118487717,16879071724345406123,12342127064772974912,1334267748975185745,8206655207818312958,11915413325379146267,10326189339880665825,3736159429254178429,4751389830399385951,64356891266583164,10505642822552329507,5801918344787773498,1285339989175269496,5184426359828585220,1005482799058894416,3421018551809690515,2455344633245049121,11791468142390527599,13423067977840671291,13330885476457496892,13102737857631390020,3770502088801184629,13831533424704777924,9081449763117404779,1723362206729072857,7323820686912015995,914818500584876856,2934069549201953948,8615983778002073437,14924065272692608362,11432116819311513903,9752912907238521296,14379814176553716199,15340213140971159285,13262528626887035606,1433661263284487590,12101015411363077930,9772761142680331954,1416204854193921304,11342706278816996174,13792446115994770147,15447853584824505488,1019005205144016541,2847749988211430835,8989987908446419602,14918044191732003291,12715140746821688049,3462713695533055333,18129682980008295374,560326520790100564,15569718615854507996,11657439006333346049,2547901658046580765,1063954953396449189,10701388247271542983,11119314247073012349,10719945982105023874,9021285492267435712,5565540712364821144,650917236357246206,5523879403131852973,16292785885626334424,10717444225185301239,9253427510074483285,11118158796692002001,11541936628244355074,296411713358149470,5102466945335969842,1942039587589461340,9467331166824099905,11120107421857316850,7009168321657948549,5242435492549019091,10738415506469871178,3222480648115989207,17619663415122761219,8339108496620781386,9844971443370911190,4426826991919136648,2637406138716333699,14694976587597207377,7598422517526073712,7118948901104326875,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,17320999364385509601,8389884739042335419,10681567007315049665,13850931412078522037,2629458102430399893,14921780400137459080,13941161494227738430,3610925526592499849,10634716751055955928,1395460787949115159,503427878074936323,12475879360916906694,12175099612243662372,8908381691972418220,12915960876620413683,1807529333873025669,15414290744617828076,3490912248875075983,10511080277494644297,14547368062995101697,13601547940131665976,2692789683574200915,8724045410384058508,4167896208396440628,15295393493207429071,2982435113468969088,16963245112199844933,147000590335713500,5794204145019158092,5719657328699958409,1967614049362757785,488968351618637265,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,5078939247040274080,6671859122717448110,2817857740954170170,14053265279651645011,3022677085705007601,2650033388370156597,7503758639846881608,5324629953184810166,3458436762512184457,1577895472049365994,6346920869462583589,12392238758996181370,1704538485242833086,17152099210315068784,16180298156806132622,14018723029693390588,2884179524142278313,11124163375537191282,18320772732460611898,16820343451080465911,17819459477958525685,5813970103203806564,16633755104059066579,17488033902177687201,2473608697134418559,17709003374781246393,95460204587832587,10602573589229546844,6918896777264340200,1196633835267704076,433249600599133112,8007241031025770700,9961433277013134100,17513373899142762175,5496173628826520494,8251532161209005934,16822713586793458169,18038578351767047046,3251458916879764809,7785037491929802569,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..a6be633c921266 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: 5689302059794999667 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..a6be633c921266 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: 5689302059794999667 with ptr: 1756 \ No newline at end of file diff --git a/be/test/vec/columns/column_variant_test.cpp b/be/test/vec/columns/column_variant_test.cpp index 2c312a5c3ab202..2538e793e26583 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,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) << 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 +375,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 +913,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 +984,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 +1022,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 +1076,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); } } 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); From fd3585905cbae7cb32414e2102dde6321db7e956 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Sun, 4 Jan 2026 19:39:28 +0800 Subject: [PATCH 6/7] update --- be/src/vec/core/field.cpp | 4 ++-- be/test/vec/columns/column_variant_test.cpp | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/be/src/vec/core/field.cpp b/be/src/vec/core/field.cpp index 97b587179feb1f..67f11374bc1327 100644 --- a/be/src/vec/core/field.cpp +++ b/be/src/vec/core/field.cpp @@ -519,8 +519,8 @@ void Field::assign(Field&& field) { std::move(field.template get::CppType>())); return; case PrimitiveType::TYPE_TIMEV2: - assign_concrete( - std::move(field.template get::CppType>())); + assign_concrete(std::move( + field.template get::CppType>())); return; case PrimitiveType::TYPE_DOUBLE: assign_concrete(std::move( diff --git a/be/test/vec/columns/column_variant_test.cpp b/be/test/vec/columns/column_variant_test.cpp index 2538e793e26583..da485f5ec76682 100644 --- a/be/test/vec/columns/column_variant_test.cpp +++ b/be/test/vec/columns/column_variant_test.cpp @@ -359,7 +359,8 @@ TEST_F(ColumnVariantTest, basic_inset_range_from) { 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); } From 51c8ee708e685c0acec73d940f3369ab59c542e2 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Sun, 4 Jan 2026 23:00:39 +0800 Subject: [PATCH 7/7] update --- be/src/vec/core/field.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/be/src/vec/core/field.h b/be/src/vec/core/field.h index 1c93a5ea768c00..0d6f66a3c4f928 100644 --- a/be/src/vec/core/field.h +++ b/be/src/vec/core/field.h @@ -456,6 +456,10 @@ class Field { 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 @@ -478,8 +482,7 @@ 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())); + throw Exception(Status::FatalError("Unsupported type: {}", get_type_name())); } }