From ae7730e4e049baa5a747ac86eeacce97bc1efe9a Mon Sep 17 00:00:00 2001 From: Pxl Date: Wed, 18 Jun 2025 10:15:03 +0800 Subject: [PATCH] [Bug](function) fix wrong result of hll_to_base64 (#51831) W20250617 18:57:43.532994 1586470 status.h:435] meet error status: [RUNTIME_ERROR]hll_from_base64 decode failed: base64: AuQDAAAMAAMtAAFGAAN0AAOYAAG8AAXKAALaAAHiAALqAALyAAQoAQMrAQFVAQJuAQF3AQR6AQR/ --- be/src/vec/functions/function_hll.cpp | 4 ++-- .../data/load_p0/http_stream/test_http_stream_compress.out | 3 +++ .../load_p0/http_stream/test_http_stream_compress.groovy | 1 + 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/be/src/vec/functions/function_hll.cpp b/be/src/vec/functions/function_hll.cpp index a6b91e27c2dd1f..e2f4c15064a983 100644 --- a/be/src/vec/functions/function_hll.cpp +++ b/be/src/vec/functions/function_hll.cpp @@ -296,8 +296,8 @@ struct HllToBase64 { last_ser_size = cur_ser_size; ser_buff.resize(cur_ser_size); } - hll_val.serialize(reinterpret_cast(ser_buff.data())); - auto outlen = base64_encode((const unsigned char*)ser_buff.data(), cur_ser_size, + size_t real_size = hll_val.serialize(reinterpret_cast(ser_buff.data())); + auto outlen = base64_encode((const unsigned char*)ser_buff.data(), real_size, chars_data + encoded_offset); DCHECK(outlen > 0); diff --git a/regression-test/data/load_p0/http_stream/test_http_stream_compress.out b/regression-test/data/load_p0/http_stream/test_http_stream_compress.out index 80a422c7e72de7..2d3ba016dbf21c 100644 --- a/regression-test/data/load_p0/http_stream/test_http_stream_compress.out +++ b/regression-test/data/load_p0/http_stream/test_http_stream_compress.out @@ -2504,3 +2504,6 @@ -- !sql2 -- 1 2 1025 1028 +-- !test -- +1028 + diff --git a/regression-test/suites/load_p0/http_stream/test_http_stream_compress.groovy b/regression-test/suites/load_p0/http_stream/test_http_stream_compress.groovy index 5ce35278928681..41e001c8a2bcec 100644 --- a/regression-test/suites/load_p0/http_stream/test_http_stream_compress.groovy +++ b/regression-test/suites/load_p0/http_stream/test_http_stream_compress.groovy @@ -103,6 +103,7 @@ suite("test_http_stream_compress", "p0") { } sql "sync" qt_sql2 "select k1, k2, bitmap_union_count(v1), HLL_UNION_AGG(v2) from ${tableName2} group by k1, k2 order by k1" + qt_test "select HLL_CARDINALITY(hll_from_base64(hll_to_base64(v2))) from test_http_stream_bz4;" } finally { try_sq2 "DROP TABLE IF EXISTS ${tableName2}" }