From ece34fb838e27808e9439add75a02fd180fb8383 Mon Sep 17 00:00:00 2001 From: kangkaisen Date: Wed, 5 Jun 2019 11:12:36 +0800 Subject: [PATCH] Make hll function backward compatibility (#1251) --- be/src/exprs/aggregate_functions.cpp | 20 +++++++++++++++++++- be/src/exprs/aggregate_functions.h | 9 +++++++++ be/src/exprs/hll_hash_function.cpp | 6 ++++++ be/src/exprs/hll_hash_function.h | 3 +++ 4 files changed, 37 insertions(+), 1 deletion(-) diff --git a/be/src/exprs/aggregate_functions.cpp b/be/src/exprs/aggregate_functions.cpp index f64bf6384d..dd9dd2ed88 100644 --- a/be/src/exprs/aggregate_functions.cpp +++ b/be/src/exprs/aggregate_functions.cpp @@ -1108,7 +1108,6 @@ StringVal AggregateFunctions::hll_finalize(FunctionContext* ctx, const StringVal memcpy(result_str.ptr, out_str.c_str(), result_str.len); return result_str; } - void AggregateFunctions::hll_union_agg_init(FunctionContext* ctx, HllVal* dst) { dst->init(ctx); @@ -1141,6 +1140,25 @@ doris_udf::BigIntVal AggregateFunctions::hll_union_agg_finalize(doris_udf::Funct return result; } +void AggregateFunctions::hll_union_agg_init(doris_udf::FunctionContext* ctx, doris_udf::StringVal* slot) { + hll_union_agg_init(ctx, static_cast (slot)); +} + +void AggregateFunctions::hll_union_agg_update(doris_udf::FunctionContext* ctx, const doris_udf::StringVal& src, + doris_udf::StringVal* dst) { + hll_union_agg_update(ctx, static_cast (src), static_cast (dst)); +} + +void AggregateFunctions::hll_union_agg_merge(doris_udf::FunctionContext* ctx, const doris_udf::StringVal& src, + doris_udf::StringVal* dst) { + hll_union_agg_merge(ctx, static_cast (src), static_cast (dst)); +} + +doris_udf::StringVal AggregateFunctions::hll_union_agg_finalize(doris_udf::FunctionContext* ctx, const StringVal& src) { + BigIntVal intVal = hll_union_agg_finalize(ctx, static_cast (src)); + return AnyValUtil::from_string_temp(ctx, std::to_string(intVal.val));; +} + int64_t AggregateFunctions::hll_algorithm(uint8_t *pdata, int data_len) { DCHECK_EQ(data_len, HLL_REGISTERS_COUNT); diff --git a/be/src/exprs/aggregate_functions.h b/be/src/exprs/aggregate_functions.h index b5b6310be7..df3e8ce740 100644 --- a/be/src/exprs/aggregate_functions.h +++ b/be/src/exprs/aggregate_functions.h @@ -337,6 +337,15 @@ dst); static doris_udf::BigIntVal hll_union_agg_finalize( doris_udf::FunctionContext*, const doris_udf::HllVal& src); + + //for backward compatibility, we could remove the following four HLL methods after doris 0.11 version + static void hll_union_agg_init(doris_udf::FunctionContext* ctx, doris_udf::StringVal* slot); + static void hll_union_agg_update(doris_udf::FunctionContext* ctx, const doris_udf::StringVal& src, + doris_udf::StringVal* dst); + static void hll_union_agg_merge(doris_udf::FunctionContext* ctx,const doris_udf::StringVal& src, + doris_udf::StringVal* dst); + static doris_udf::StringVal hll_union_agg_finalize(doris_udf::FunctionContext* ctx, const StringVal& src); + // calculate result static int64_t hll_algorithm(uint8_t *pdata, int data_len); static int64_t hll_algorithm(const StringVal &dst) { diff --git a/be/src/exprs/hll_hash_function.cpp b/be/src/exprs/hll_hash_function.cpp index 3e5c514185..3502036c33 100644 --- a/be/src/exprs/hll_hash_function.cpp +++ b/be/src/exprs/hll_hash_function.cpp @@ -62,6 +62,12 @@ StringVal HllHashFunctions::hll_hash(doris_udf::FunctionContext* ctx, const StringVal& input) { return create_string_result(ctx, input, input.is_null); } + +StringVal HllHashFunctions::hll_cardinality(doris_udf::FunctionContext* ctx, + const doris_udf::StringVal& dest_base) { + BigIntVal intVal = hll_cardinality(ctx, static_cast (dest_base)); + return AnyValUtil::from_string_temp(ctx, std::to_string(intVal.val)); +} BigIntVal HllHashFunctions::hll_cardinality(doris_udf::FunctionContext* ctx, const HllVal& input) { diff --git a/be/src/exprs/hll_hash_function.h b/be/src/exprs/hll_hash_function.h index 081dcdb6cd..a6d8798518 100644 --- a/be/src/exprs/hll_hash_function.h +++ b/be/src/exprs/hll_hash_function.h @@ -37,6 +37,9 @@ public: const doris_udf::StringVal& dest_base); static BigIntVal hll_cardinality(doris_udf::FunctionContext* ctx, const doris_udf::HllVal& dest_base); + //for backward compatibility, we could remove this method after doris 0.11 version + static StringVal hll_cardinality(doris_udf::FunctionContext* ctx, + const doris_udf::StringVal& dest_base); static StringVal create_string_result(doris_udf::FunctionContext* ctx, const StringVal& str, const bool is_null);