This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-4.0 by this push:
new 91a7b0ae145 branch-4.0: [fix] remove useless const_cast and explain
const_cast for vec (3) #56600 (#56783)
91a7b0ae145 is described below
commit 91a7b0ae1451bb964614db008ef6a1295f365ffe
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Sat Oct 11 18:18:12 2025 +0800
branch-4.0: [fix] remove useless const_cast and explain const_cast for vec
(3) #56600 (#56783)
Cherry-picked from #56600
Co-authored-by: admiring_xm <[email protected]>
---
be/src/exprs/math_functions.cpp | 2 +
be/src/olap/like_column_predicate.cpp | 12 ++---
be/src/olap/like_column_predicate.h | 3 +-
be/src/util/bitmap_value.h | 36 +++++++++------
be/src/util/simd/vstring_function.h | 8 ++--
be/src/vec/data_types/data_type_bitmap.cpp | 17 ++++---
.../data_types/serde/data_type_bitmap_serde.cpp | 16 +++----
be/src/vec/functions/ai/ai_functions.h | 7 ++-
be/src/vec/functions/function_bitmap.cpp | 32 ++++++-------
be/src/vec/functions/function_hll.cpp | 4 +-
be/src/vec/functions/function_jsonb.cpp | 5 +-
be/src/vec/functions/function_string.h | 6 ++-
be/src/vec/functions/like.cpp | 54 ++++++++++++----------
be/src/vec/functions/like.h | 42 ++++++++---------
be/src/vec/olap/olap_data_convertor.cpp | 25 +++++-----
be/src/vec/olap/olap_data_convertor.h | 2 +-
16 files changed, 139 insertions(+), 132 deletions(-)
diff --git a/be/src/exprs/math_functions.cpp b/be/src/exprs/math_functions.cpp
index 93e28efb733..6b1d060e06b 100644
--- a/be/src/exprs/math_functions.cpp
+++ b/be/src/exprs/math_functions.cpp
@@ -125,6 +125,8 @@ StringRef MathFunctions::decimal_to_base(FunctionContext*
ctx, int64_t src_num,
buf[buf_index] = '-';
++result_len;
}
+
+ // Modify a string passed via stringref
StringRef result = ctx->create_temp_string_val(result_len);
memcpy(const_cast<char*>(result.data), buf + max_digits - result_len,
result_len);
return result;
diff --git a/be/src/olap/like_column_predicate.cpp
b/be/src/olap/like_column_predicate.cpp
index e8fedc1f87f..a2bc50735ef 100644
--- a/be/src/olap/like_column_predicate.cpp
+++ b/be/src/olap/like_column_predicate.cpp
@@ -91,8 +91,7 @@ uint16_t LikeColumnPredicate<T>::_evaluate_inner(const
vectorized::IColumn& colu
sel[new_size] = idx;
unsigned char flag = 0;
THROW_IF_ERROR((_state->scalar_function)(
-
const_cast<vectorized::LikeSearchState*>(&_like_state),
- str_col->get_data_at(idx), pattern, &flag));
+ &_like_state, str_col->get_data_at(idx), pattern,
&flag));
new_size += _opposite ^ flag;
}
} else {
@@ -107,8 +106,8 @@ uint16_t LikeColumnPredicate<T>::_evaluate_inner(const
vectorized::IColumn& colu
StringRef cell_value = str_col->get_data_at(idx);
unsigned char flag = 0;
THROW_IF_ERROR((_state->scalar_function)(
-
const_cast<vectorized::LikeSearchState*>(&_like_state),
- StringRef(cell_value.data, cell_value.size),
pattern, &flag));
+ &_like_state, StringRef(cell_value.data,
cell_value.size), pattern,
+ &flag));
new_size += _opposite ^ flag;
}
}
@@ -134,9 +133,8 @@ uint16_t LikeColumnPredicate<T>::_evaluate_inner(const
vectorized::IColumn& colu
uint16_t idx = sel[i];
sel[new_size] = idx;
unsigned char flag = 0;
- THROW_IF_ERROR((_state->scalar_function)(
- const_cast<vectorized::LikeSearchState*>(&_like_state),
- str_col->get_data_at(idx), pattern, &flag));
+ THROW_IF_ERROR((_state->scalar_function)(&_like_state,
str_col->get_data_at(idx),
+ pattern, &flag));
new_size += _opposite ^ flag;
}
}
diff --git a/be/src/olap/like_column_predicate.h
b/be/src/olap/like_column_predicate.h
index 37af7a14298..0cf717cac6d 100644
--- a/be/src/olap/like_column_predicate.h
+++ b/be/src/olap/like_column_predicate.h
@@ -154,8 +154,7 @@ private:
StringRef cell_value = column.get_shrink_value(i);
unsigned char flag = 0;
THROW_IF_ERROR((_state->scalar_function)(
- const_cast<vectorized::LikeSearchState*>(&_like_state),
- StringRef(cell_value.data, cell_value.size), pattern,
&flag));
+ &_like_state, StringRef(cell_value.data, cell_value.size),
pattern, &flag));
tmp_res[i] = flag;
}
// Sometimes the dict is not initialized when run comparison predicate
here, for example,
diff --git a/be/src/util/bitmap_value.h b/be/src/util/bitmap_value.h
index a2a6323f287..06a18f8bb4f 100644
--- a/be/src/util/bitmap_value.h
+++ b/be/src/util/bitmap_value.h
@@ -889,6 +889,7 @@ public:
DCHECK(res);
}
+ // !FIXME: We should rethink the logic here
BitmapValue(const BitmapValue& other) {
_type = other._type;
switch (other._type) {
@@ -909,10 +910,11 @@ public:
_is_shared = true;
// should also set other's state to shared, so that other bitmap
value will
// create a new bitmap when it wants to modify it.
- const_cast<BitmapValue&>(other)._is_shared = true;
+ other._is_shared = true;
}
}
+ // !FIXME: We should rethink the logic here
BitmapValue(BitmapValue&& other) noexcept {
_type = other._type;
switch (other._type) {
@@ -934,6 +936,7 @@ public:
other._is_shared = false;
}
+ // !FIXME: We should rethink the logic here
BitmapValue& operator=(const BitmapValue& other) {
if (this == &other) {
return *this;
@@ -958,7 +961,7 @@ public:
_is_shared = true;
// should also set other's state to shared, so that other bitmap
value will
// create a new bitmap when it wants to modify it.
- const_cast<BitmapValue&>(other)._is_shared = true;
+ other._is_shared = true;
}
return *this;
}
@@ -1219,6 +1222,7 @@ public:
// EMPTY -> SINGLE
// EMPTY -> BITMAP
// SINGLE -> BITMAP
+ // !FIXME: We should rethink the logic here
BitmapValue& operator|=(const BitmapValue& rhs) {
switch (rhs._type) {
case EMPTY:
@@ -1230,13 +1234,13 @@ public:
switch (_type) {
case EMPTY:
_bitmap = rhs._bitmap;
- const_cast<BitmapValue&>(rhs)._is_shared = true;
+ rhs._is_shared = true;
_is_shared = true;
_type = BITMAP;
break;
case SINGLE:
_bitmap = rhs._bitmap;
- const_cast<BitmapValue&>(rhs)._is_shared = true;
+ rhs._is_shared = true;
_is_shared = true;
_prepare_bitmap_for_write();
_bitmap->add(_sv);
@@ -1529,6 +1533,7 @@ public:
// SINGLE -> EMPTY
// BITMAP -> EMPTY
// BITMAP -> SINGLE
+ // !FIXME: We should rethink the logic here
BitmapValue& operator^=(const BitmapValue& rhs) {
switch (rhs._type) {
case EMPTY:
@@ -1566,13 +1571,13 @@ public:
switch (_type) {
case EMPTY:
_bitmap = rhs._bitmap;
- const_cast<BitmapValue&>(rhs)._is_shared = true;
+ rhs._is_shared = true;
_is_shared = true;
_type = BITMAP;
break;
case SINGLE:
_bitmap = rhs._bitmap;
- const_cast<BitmapValue&>(rhs)._is_shared = true;
+ rhs._is_shared = true;
_is_shared = true;
_type = BITMAP;
_prepare_bitmap_for_write();
@@ -1870,7 +1875,8 @@ public:
// Return how many bytes are required to serialize this bitmap.
// See BitmapTypeCode for the serialized format.
- size_t getSizeInBytes() {
+ // !FIXME: We should rethink the logic here
+ size_t getSizeInBytes() const {
size_t res = 0;
switch (_type) {
case EMPTY:
@@ -2129,7 +2135,7 @@ public:
* Return new set with specified range (not include the range_end)
*/
int64_t sub_range(const int64_t& range_start, const int64_t& range_end,
- BitmapValue* ret_bitmap) {
+ BitmapValue* ret_bitmap) const {
switch (_type) {
case EMPTY:
return 0;
@@ -2181,7 +2187,7 @@ public:
* @return the real count for subset, maybe less than cardinality_limit
*/
int64_t sub_limit(const int64_t& range_start, const int64_t&
cardinality_limit,
- BitmapValue* ret_bitmap) {
+ BitmapValue* ret_bitmap) const {
switch (_type) {
case EMPTY:
return 0;
@@ -2236,7 +2242,8 @@ public:
* The number of returned elements is limited by the cardinality_limit
parameter.
* Analog of the substring string function, but for bitmap.
*/
- int64_t offset_limit(const int64_t& offset, const int64_t& limit,
BitmapValue* ret_bitmap) {
+ int64_t offset_limit(const int64_t& offset, const int64_t& limit,
+ BitmapValue* ret_bitmap) const {
switch (_type) {
case EMPTY:
return 0;
@@ -2393,7 +2400,7 @@ private:
return result;
}
- void _prepare_bitmap_for_write() {
+ void _prepare_bitmap_for_write() const {
if (!_bitmap) {
_bitmap = std::make_shared<detail::Roaring64Map>();
_is_shared = false;
@@ -2431,12 +2438,13 @@ private:
BITMAP = 2, // more than one elements
SET = 3 // elements count less or equal than 32
};
- uint64_t _sv = 0; // store the single value
when _type == SINGLE
- std::shared_ptr<detail::Roaring64Map> _bitmap; // used when _type == BITMAP
+ uint64_t _sv = 0; // store the single value when _type == SINGLE
+ // !FIXME: We should rethink the logic about _bitmap and _is_shared
+ mutable std::shared_ptr<detail::Roaring64Map> _bitmap; // used when _type
== BITMAP
SetContainer<uint64_t> _set;
BitmapDataType _type {EMPTY};
// Indicate whether the state is shared among multi BitmapValue object
- bool _is_shared = true;
+ mutable bool _is_shared = true;
static constexpr uint64_t SET_TYPE_THRESHOLD = 32;
};
diff --git a/be/src/util/simd/vstring_function.h
b/be/src/util/simd/vstring_function.h
index 4f9808ccf8e..09cf7835dbb 100644
--- a/be/src/util/simd/vstring_function.h
+++ b/be/src/util/simd/vstring_function.h
@@ -211,20 +211,20 @@ public:
return validate_ascii_fast(str.data, str.size);
}
- static void reverse(const StringRef& str, StringRef dst) {
+ static void reverse(const StringRef& str, std::string* dst) {
if (is_ascii(str)) {
int64_t begin = 0;
int64_t end = str.size;
- int64_t result_end = dst.size - 1;
+ int64_t result_end = dst->size() - 1;
// auto SIMD here
- auto* __restrict l = const_cast<char*>(dst.data);
+ auto* __restrict l = dst->data();
auto* __restrict r = str.data;
for (; begin < end; ++begin, --result_end) {
l[result_end] = r[begin];
}
} else {
- char* dst_data = const_cast<char*>(dst.data);
+ char* dst_data = dst->data();
for (size_t i = 0, char_size = 0; i < str.size; i += char_size) {
char_size = UTF8_BYTE_LENGTH[(unsigned char)(str.data)[i]];
// there exists occasion where the last character is an
illegal UTF-8 one which returns
diff --git a/be/src/vec/data_types/data_type_bitmap.cpp
b/be/src/vec/data_types/data_type_bitmap.cpp
index 1e493756bf0..496f8bedd99 100644
--- a/be/src/vec/data_types/data_type_bitmap.cpp
+++ b/be/src/vec/data_types/data_type_bitmap.cpp
@@ -50,7 +50,7 @@ int64_t
DataTypeBitMap::get_uncompressed_serialized_bytes(const IColumn& column,
auto allocate_len_size = sizeof(size_t) * real_need_copy_num;
size_t allocate_content_size = 0;
for (size_t i = 0; i < real_need_copy_num; ++i) {
- auto& bitmap =
const_cast<BitmapValue&>(data_column.get_element(i));
+ auto& bitmap = data_column.get_element(i);
allocate_content_size += bitmap.getSizeInBytes();
}
return size + allocate_len_size + allocate_content_size;
@@ -61,7 +61,7 @@ int64_t
DataTypeBitMap::get_uncompressed_serialized_bytes(const IColumn& column,
auto allocate_len_size = sizeof(size_t) * (column.size() + 1);
size_t allocate_content_size = 0;
for (size_t i = 0; i < column.size(); ++i) {
- auto& bitmap =
const_cast<BitmapValue&>(data_column.get_element(i));
+ auto& bitmap = data_column.get_element(i);
allocate_content_size += bitmap.getSizeInBytes();
}
@@ -79,14 +79,14 @@ char* DataTypeBitMap::serialize(const IColumn& column,
char* buf, int be_exec_ve
// serialize the bitmap size array
auto* meta_ptr = reinterpret_cast<size_t*>(buf);
for (size_t i = 0; i < real_need_copy_num; ++i) {
- auto& bitmap =
const_cast<BitmapValue&>(data_column.get_element(i));
+ auto& bitmap = data_column.get_element(i);
unaligned_store<size_t>(&meta_ptr[i], bitmap.getSizeInBytes());
}
// serialize each bitmap
char* data_ptr = buf + sizeof(size_t) * real_need_copy_num;
for (size_t i = 0; i < real_need_copy_num; ++i) {
- auto& bitmap =
const_cast<BitmapValue&>(data_column.get_element(i));
+ auto& bitmap = data_column.get_element(i);
bitmap.write_to(data_ptr);
data_ptr += unaligned_load<size_t>(&meta_ptr[i]);
}
@@ -99,14 +99,14 @@ char* DataTypeBitMap::serialize(const IColumn& column,
char* buf, int be_exec_ve
auto* meta_ptr = reinterpret_cast<size_t*>(buf);
meta_ptr[0] = column.size();
for (size_t i = 0; i < meta_ptr[0]; ++i) {
- auto& bitmap =
const_cast<BitmapValue&>(data_column.get_element(i));
+ auto& bitmap = data_column.get_element(i);
unaligned_store<size_t>(&meta_ptr[i + 1], bitmap.getSizeInBytes());
}
// serialize each bitmap
char* data_ptr = buf + sizeof(size_t) * (meta_ptr[0] + 1);
for (size_t i = 0; i < meta_ptr[0]; ++i) {
- auto& bitmap =
const_cast<BitmapValue&>(data_column.get_element(i));
+ auto& bitmap = data_column.get_element(i);
bitmap.write_to(data_ptr);
data_ptr += unaligned_load<size_t>(&meta_ptr[i + 1]);
}
@@ -161,11 +161,10 @@ Status DataTypeBitMap::check_column(const IColumn&
column) const {
}
void DataTypeBitMap::serialize_as_stream(const BitmapValue& cvalue,
BufferWritable& buf) {
- auto& value = const_cast<BitmapValue&>(cvalue);
std::string memory_buffer;
- size_t bytesize = value.getSizeInBytes();
+ size_t bytesize = cvalue.getSizeInBytes();
memory_buffer.resize(bytesize);
- value.write_to(const_cast<char*>(memory_buffer.data()));
+ cvalue.write_to(memory_buffer.data());
buf.write_binary(memory_buffer);
}
diff --git a/be/src/vec/data_types/serde/data_type_bitmap_serde.cpp
b/be/src/vec/data_types/serde/data_type_bitmap_serde.cpp
index 86317699271..4f0166615f2 100644
--- a/be/src/vec/data_types/serde/data_type_bitmap_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_bitmap_serde.cpp
@@ -87,11 +87,11 @@ Status DataTypeBitMapSerDe::write_column_to_pb(const
IColumn& column, PValues& r
auto row_count = cast_set<int>(end - start);
result.mutable_bytes_value()->Reserve(row_count);
for (auto row = start; row < end; ++row) {
- auto& value = const_cast<BitmapValue&>(data_column.get_element(row));
+ auto& value = data_column.get_element(row);
std::string memory_buffer;
auto bytesize = value.getSizeInBytes();
memory_buffer.resize(bytesize);
- value.write_to(const_cast<char*>(memory_buffer.data()));
+ value.write_to(memory_buffer.data());
result.add_bytes_value(memory_buffer);
}
return Status::OK();
@@ -111,12 +111,12 @@ void DataTypeBitMapSerDe::write_one_cell_to_jsonb(const
IColumn& column, JsonbWr
int64_t row_num) const {
const auto& data_column = assert_cast<const ColumnBitmap&>(column);
result.writeKey(cast_set<JsonbKeyValue::keyid_type>(col_id));
- auto bitmap_value =
const_cast<BitmapValue&>(data_column.get_element(row_num));
+ auto bitmap_value = data_column.get_element(row_num);
// serialize the content of string
auto size = bitmap_value.getSizeInBytes();
// serialize the content of string
- auto* ptr = arena.alloc(size);
- bitmap_value.write_to(const_cast<char*>(ptr));
+ char* ptr = arena.alloc(size);
+ bitmap_value.write_to(ptr);
result.writeStartBinary();
result.writeBinary(reinterpret_cast<const char*>(ptr), size);
result.writeEndBinary();
@@ -132,7 +132,7 @@ Status DataTypeBitMapSerDe::write_column_to_arrow(const
IColumn& column, const N
RETURN_IF_ERROR(checkArrowStatus(builder.AppendNull(),
column.get_name(),
array_builder->type()->name()));
} else {
- auto& bitmap_value =
const_cast<BitmapValue&>(col.get_element(string_i));
+ auto& bitmap_value = col.get_element(string_i);
std::string memory_buffer(bitmap_value.getSizeInBytes(), '0');
bitmap_value.write_to(memory_buffer.data());
RETURN_IF_ERROR(checkArrowStatus(
@@ -198,7 +198,7 @@ Status DataTypeBitMapSerDe::write_column_to_orc(const
std::string& timezone, con
size_t total_size = 0;
for (size_t row_id = start; row_id < end; row_id++) {
if (cur_batch->notNull[row_id] == 1) {
- auto bitmap_value =
const_cast<BitmapValue&>(col_data.get_element(row_id));
+ auto bitmap_value = col_data.get_element(row_id);
size_t len = bitmap_value.getSizeInBytes();
total_size += len;
}
@@ -213,7 +213,7 @@ Status DataTypeBitMapSerDe::write_column_to_orc(const
std::string& timezone, con
size_t offset = 0;
for (size_t row_id = start; row_id < end; row_id++) {
if (cur_batch->notNull[row_id] == 1) {
- auto bitmap_value =
const_cast<BitmapValue&>(col_data.get_element(row_id));
+ auto bitmap_value = col_data.get_element(row_id);
size_t len = bitmap_value.getSizeInBytes();
if (offset + len > total_size) {
return Status::InternalError(
diff --git a/be/src/vec/functions/ai/ai_functions.h
b/be/src/vec/functions/ai/ai_functions.h
index 0443829efef..7075ed4b420 100644
--- a/be/src/vec/functions/ai/ai_functions.h
+++ b/be/src/vec/functions/ai/ai_functions.h
@@ -77,9 +77,8 @@ public:
TAIResource config;
std::shared_ptr<AIAdapter> adapter;
- if (Status status =
- const_cast<Derived*>(assert_cast<const Derived*>(this))
- ->_init_from_resource(context, block, arguments,
config, adapter);
+ if (Status status = assert_cast<const
Derived*>(this)->_init_from_resource(
+ context, block, arguments, config, adapter);
!status.ok()) {
return status;
}
@@ -151,7 +150,7 @@ private:
// The ai resource must be literal
Status _init_from_resource(FunctionContext* context, const Block& block,
const ColumnNumbers& arguments, TAIResource&
config,
- std::shared_ptr<AIAdapter>& adapter) {
+ std::shared_ptr<AIAdapter>& adapter) const {
// 1. Initialize config
const ColumnWithTypeAndName& resource_column =
block.get_by_position(arguments[0]);
StringRef resource_name_ref = resource_column.column->get_data_at(0);
diff --git a/be/src/vec/functions/function_bitmap.cpp
b/be/src/vec/functions/function_bitmap.cpp
index eb5ba2d128c..d91abe10087 100644
--- a/be/src/vec/functions/function_bitmap.cpp
+++ b/be/src/vec/functions/function_bitmap.cpp
@@ -905,7 +905,7 @@ struct BitmapHasAny {
static void vector_vector(const TData& lvec, const TData& rvec, ResTData&
res) {
size_t size = lvec.size();
for (size_t i = 0; i < size; ++i) {
- auto bitmap = const_cast<BitmapValue&>(lvec[i]);
+ auto bitmap = lvec[i];
bitmap &= rvec[i];
res[i] = bitmap.cardinality() != 0;
}
@@ -913,7 +913,7 @@ struct BitmapHasAny {
static void vector_scalar(const TData& lvec, const BitmapValue& rval,
ResTData& res) {
size_t size = lvec.size();
for (size_t i = 0; i < size; ++i) {
- auto bitmap = const_cast<BitmapValue&>(lvec[i]);
+ auto bitmap = lvec[i];
bitmap &= rval;
res[i] = bitmap.cardinality() != 0;
}
@@ -921,7 +921,7 @@ struct BitmapHasAny {
static void scalar_vector(const BitmapValue& lval, const TData& rvec,
ResTData& res) {
size_t size = rvec.size();
for (size_t i = 0; i < size; ++i) {
- auto bitmap = const_cast<BitmapValue&>(lval);
+ auto bitmap = lval;
bitmap &= rvec[i];
res[i] = bitmap.cardinality() != 0;
}
@@ -944,7 +944,7 @@ struct BitmapHasAll {
size_t size = lvec.size();
for (size_t i = 0; i < size; ++i) {
uint64_t lhs_cardinality = lvec[i].cardinality();
- auto bitmap = const_cast<BitmapValue&>(lvec[i]);
+ auto bitmap = lvec[i];
bitmap |= rvec[i];
res[i] = bitmap.cardinality() == lhs_cardinality;
}
@@ -953,16 +953,16 @@ struct BitmapHasAll {
size_t size = lvec.size();
for (size_t i = 0; i < size; ++i) {
uint64_t lhs_cardinality = lvec[i].cardinality();
- auto bitmap = const_cast<BitmapValue&>(lvec[i]);
+ auto bitmap = lvec[i];
bitmap |= rval;
res[i] = bitmap.cardinality() == lhs_cardinality;
}
}
static void scalar_vector(const BitmapValue& lval, const TData& rvec,
ResTData& res) {
size_t size = rvec.size();
+ uint64_t lhs_cardinality = lval.cardinality();
for (size_t i = 0; i < size; ++i) {
- uint64_t lhs_cardinality = lval.cardinality();
- auto bitmap = const_cast<BitmapValue&>(lval);
+ auto bitmap = lval;
bitmap |= rvec[i];
res[i] = bitmap.cardinality() == lhs_cardinality;
}
@@ -1010,7 +1010,7 @@ struct BitmapToBase64 {
offsets.resize(size);
size_t output_char_size = 0;
for (size_t i = 0; i < size; ++i) {
- BitmapValue& bitmap_val = const_cast<BitmapValue&>(data[i]);
+ const BitmapValue& bitmap_val = data[i];
auto ser_size = bitmap_val.getSizeInBytes();
output_char_size += (int)(4.0 * ceil((double)ser_size / 3.0));
}
@@ -1023,7 +1023,7 @@ struct BitmapToBase64 {
std::string ser_buff;
size_t encoded_offset = 0;
for (size_t i = 0; i < size; ++i) {
- BitmapValue& bitmap_val = const_cast<BitmapValue&>(data[i]);
+ const BitmapValue& bitmap_val = data[i];
cur_ser_size = bitmap_val.getSizeInBytes();
if (cur_ser_size > last_ser_size) {
last_ser_size = cur_ser_size;
@@ -1058,8 +1058,7 @@ struct SubBitmap {
null_map[i] = 1;
continue;
}
- if
(const_cast<TData1&>(bitmap_data)[i].offset_limit(offset_data[i], limit_data[i],
- &res[i]) ==
0) {
+ if (bitmap_data[i].offset_limit(offset_data[i], limit_data[i],
&res[i]) == 0) {
null_map[i] = 1;
}
}
@@ -1075,8 +1074,7 @@ struct SubBitmap {
null_map[i] = 1;
continue;
}
- if (const_cast<TData1&>(bitmap_data)[i].offset_limit(offset_data,
limit_data,
- &res[i]) ==
0) {
+ if (bitmap_data[i].offset_limit(offset_data, limit_data, &res[i])
== 0) {
null_map[i] = 1;
}
}
@@ -1099,7 +1097,7 @@ struct BitmapSubsetLimit {
null_map[i] = 1;
continue;
}
- const_cast<TData1&>(bitmap_data)[i].sub_limit(offset_data[i],
limit_data[i], &res[i]);
+ bitmap_data[i].sub_limit(offset_data[i], limit_data[i], &res[i]);
}
}
static void vector_scalars(const TData1& bitmap_data, const Int64&
offset_data,
@@ -1113,7 +1111,7 @@ struct BitmapSubsetLimit {
null_map[i] = 1;
continue;
}
- const_cast<TData1&>(bitmap_data)[i].sub_limit(offset_data,
limit_data, &res[i]);
+ bitmap_data[i].sub_limit(offset_data, limit_data, &res[i]);
}
}
};
@@ -1134,7 +1132,7 @@ struct BitmapSubsetInRange {
null_map[i] = 1;
continue;
}
- const_cast<TData1&>(bitmap_data)[i].sub_range(range_start[i],
range_end[i], &res[i]);
+ bitmap_data[i].sub_range(range_start[i], range_end[i], &res[i]);
}
}
static void vector_scalars(const TData1& bitmap_data, const Int64&
range_start,
@@ -1148,7 +1146,7 @@ struct BitmapSubsetInRange {
null_map[i] = 1;
continue;
}
- const_cast<TData1&>(bitmap_data)[i].sub_range(range_start,
range_end, &res[i]);
+ bitmap_data[i].sub_range(range_start, range_end, &res[i]);
}
}
};
diff --git a/be/src/vec/functions/function_hll.cpp
b/be/src/vec/functions/function_hll.cpp
index ea0124c132c..a8b827c7475 100644
--- a/be/src/vec/functions/function_hll.cpp
+++ b/be/src/vec/functions/function_hll.cpp
@@ -275,7 +275,7 @@ struct HllToBase64 {
offsets.resize(size);
size_t output_char_size = 0;
for (size_t i = 0; i < size; ++i) {
- auto& hll_val = const_cast<HyperLogLog&>(data[i]);
+ auto& hll_val = data[i];
auto ser_size = hll_val.max_serialized_size();
output_char_size += (int)(4.0 * ceil((double)ser_size / 3.0));
}
@@ -288,7 +288,7 @@ struct HllToBase64 {
std::string ser_buff;
size_t encoded_offset = 0;
for (size_t i = 0; i < size; ++i) {
- auto& hll_val = const_cast<HyperLogLog&>(data[i]);
+ auto& hll_val = data[i];
cur_ser_size = hll_val.max_serialized_size();
if (cur_ser_size > last_ser_size) {
diff --git a/be/src/vec/functions/function_jsonb.cpp
b/be/src/vec/functions/function_jsonb.cpp
index de2b52480a9..aaf6a2f2295 100644
--- a/be/src/vec/functions/function_jsonb.cpp
+++ b/be/src/vec/functions/function_jsonb.cpp
@@ -2396,11 +2396,10 @@ private:
const auto* object = element->unpack<ObjectVal>();
bool find = false;
for (const auto& item : *object) {
- const std::string_view key(item.getKeyStr(), item.klen());
+ Slice key(item.getKeyStr(), item.klen());
const auto* child_element = item.value();
// construct an object member path leg.
- auto leg =
std::make_unique<leg_info>(const_cast<char*>(key.data()), key.size(), 0,
- MEMBER_CODE);
+ auto leg = std::make_unique<leg_info>(key.data, key.size, 0,
MEMBER_CODE);
cur_path->add_leg_to_leg_vector(std::move(leg));
find |= find_matches(child_element, one_match, state,
cur_path, matches);
cur_path->pop_leg_from_leg_vector();
diff --git a/be/src/vec/functions/function_string.h
b/be/src/vec/functions/function_string.h
index 16e788843be..06e806a75a4 100644
--- a/be/src/vec/functions/function_string.h
+++ b/be/src/vec/functions/function_string.h
@@ -2952,6 +2952,7 @@ StringRef do_money_format(FunctionContext* context,
UInt32 scale, T int_value, T
(append_sign_manually ? 1 : 0) + integer_str_len + 1 +
frac_str_len;
StringRef result = context->create_temp_string_val(whole_decimal_str_len);
+ // Modify a string passed via stringref
char* result_data = const_cast<char*>(result.data);
if (append_sign_manually) {
@@ -2970,6 +2971,7 @@ static StringRef do_money_format(FunctionContext*
context, const std::string& va
bool is_positive = (value[0] != '-');
int32_t result_len = value.size() + (value.size() - (is_positive ? 4 : 5))
/ 3;
StringRef result = context->create_temp_string_val(result_len);
+ // Modify a string passed via stringref
char* result_data = const_cast<char*>(result.data);
if (!is_positive) {
*result_data = '-';
@@ -3079,6 +3081,7 @@ StringRef do_format_round(FunctionContext* context,
UInt32 scale, T int_value, T
(decimal_places > 0 ? 1 : 0) +
frac_str_len;
StringRef result = context->create_temp_string_val(whole_decimal_str_len);
+ // Modify a string passed via stringref
char* result_data = const_cast<char*>(result.data);
if (append_sign_manually) {
@@ -3749,8 +3752,7 @@ struct ReverseImpl {
int64_t src_len = offsets[i] - offsets[i - 1];
std::string dst;
dst.resize(src_len);
- simd::VStringFunctions::reverse(StringRef((uint8_t*)src_str,
src_len),
- StringRef((uint8_t*)dst.data(),
src_len));
+ simd::VStringFunctions::reverse(StringRef((uint8_t*)src_str,
src_len), &dst);
StringOP::push_value_string(std::string_view(dst.data(), src_len),
i, res_data,
res_offsets);
}
diff --git a/be/src/vec/functions/like.cpp b/be/src/vec/functions/like.cpp
index 6eaaee311da..95703197990 100644
--- a/be/src/vec/functions/like.cpp
+++ b/be/src/vec/functions/like.cpp
@@ -212,15 +212,15 @@ Status LikeSearchState::clone(LikeSearchState& cloned) {
return Status::OK();
}
-Status FunctionLikeBase::constant_allpass_fn(LikeSearchState* state, const
ColumnString& vals,
+Status FunctionLikeBase::constant_allpass_fn(const LikeSearchState* state,
const ColumnString& vals,
const StringRef& pattern,
ColumnUInt8::Container& result) {
memset(result.data(), 1, vals.size());
return Status::OK();
}
-Status FunctionLikeBase::constant_allpass_fn_scalar(LikeSearchState* state,
const StringRef& val,
- const StringRef& pattern,
+Status FunctionLikeBase::constant_allpass_fn_scalar(const LikeSearchState*
state,
+ const StringRef& val,
const StringRef& pattern,
unsigned char* result) {
*result = 1;
return Status::OK();
@@ -235,8 +235,8 @@ Status FunctionLikeBase::vector_allpass_fn(const
ColumnString& vals,
return Status::OK();
}
-Status FunctionLikeBase::constant_starts_with_fn(LikeSearchState* state, const
ColumnString& val,
- const StringRef& pattern,
+Status FunctionLikeBase::constant_starts_with_fn(const LikeSearchState* state,
+ const ColumnString& val,
const StringRef& pattern,
ColumnUInt8::Container&
result) {
auto sz = val.size();
for (size_t i = 0; i < sz; i++) {
@@ -247,7 +247,7 @@ Status
FunctionLikeBase::constant_starts_with_fn(LikeSearchState* state, const C
return Status::OK();
}
-Status FunctionLikeBase::constant_starts_with_fn_scalar(LikeSearchState* state,
+Status FunctionLikeBase::constant_starts_with_fn_scalar(const LikeSearchState*
state,
const StringRef& val,
const StringRef&
pattern,
unsigned char* result)
{
@@ -270,8 +270,8 @@ Status FunctionLikeBase::vector_starts_with_fn(const
ColumnString& vals,
return Status::OK();
}
-Status FunctionLikeBase::constant_ends_with_fn(LikeSearchState* state, const
ColumnString& val,
- const StringRef& pattern,
+Status FunctionLikeBase::constant_ends_with_fn(const LikeSearchState* state,
+ const ColumnString& val, const
StringRef& pattern,
ColumnUInt8::Container& result)
{
auto sz = val.size();
for (size_t i = 0; i < sz; i++) {
@@ -282,7 +282,8 @@ Status
FunctionLikeBase::constant_ends_with_fn(LikeSearchState* state, const Col
return Status::OK();
}
-Status FunctionLikeBase::constant_ends_with_fn_scalar(LikeSearchState* state,
const StringRef& val,
+Status FunctionLikeBase::constant_ends_with_fn_scalar(const LikeSearchState*
state,
+ const StringRef& val,
const StringRef& pattern,
unsigned char* result) {
*result = (val.size >= state->search_string_sv.size) &&
@@ -305,7 +306,7 @@ Status FunctionLikeBase::vector_ends_with_fn(const
ColumnString& vals,
return Status::OK();
}
-Status FunctionLikeBase::constant_equals_fn(LikeSearchState* state, const
ColumnString& val,
+Status FunctionLikeBase::constant_equals_fn(const LikeSearchState* state,
const ColumnString& val,
const StringRef& pattern,
ColumnUInt8::Container& result) {
auto sz = val.size();
@@ -315,8 +316,8 @@ Status
FunctionLikeBase::constant_equals_fn(LikeSearchState* state, const Column
return Status::OK();
}
-Status FunctionLikeBase::constant_equals_fn_scalar(LikeSearchState* state,
const StringRef& val,
- const StringRef& pattern,
+Status FunctionLikeBase::constant_equals_fn_scalar(const LikeSearchState*
state,
+ const StringRef& val, const
StringRef& pattern,
unsigned char* result) {
*result = (val == state->search_string_sv);
return Status::OK();
@@ -336,8 +337,8 @@ Status FunctionLikeBase::vector_equals_fn(const
ColumnString& vals,
return Status::OK();
}
-Status FunctionLikeBase::constant_substring_fn(LikeSearchState* state, const
ColumnString& val,
- const StringRef& pattern,
+Status FunctionLikeBase::constant_substring_fn(const LikeSearchState* state,
+ const ColumnString& val, const
StringRef& pattern,
ColumnUInt8::Container& result)
{
auto sz = val.size();
for (size_t i = 0; i < sz; i++) {
@@ -350,7 +351,8 @@ Status
FunctionLikeBase::constant_substring_fn(LikeSearchState* state, const Col
return Status::OK();
}
-Status FunctionLikeBase::constant_substring_fn_scalar(LikeSearchState* state,
const StringRef& val,
+Status FunctionLikeBase::constant_substring_fn_scalar(const LikeSearchState*
state,
+ const StringRef& val,
const StringRef& pattern,
unsigned char* result) {
if (state->search_string_sv.size == 0) {
@@ -380,8 +382,9 @@ Status FunctionLikeBase::vector_substring_fn(const
ColumnString& vals,
return Status::OK();
}
-Status FunctionLikeBase::constant_regex_fn_scalar(LikeSearchState* state,
const StringRef& val,
- const StringRef& pattern,
unsigned char* result) {
+Status FunctionLikeBase::constant_regex_fn_scalar(const LikeSearchState* state,
+ const StringRef& val, const
StringRef& pattern,
+ unsigned char* result) {
if (state->hs_database) { // use hyperscan
auto ret = hs_scan(state->hs_database.get(), val.data, (int)val.size,
0,
state->hs_scratch.get(),
@@ -396,7 +399,7 @@ Status
FunctionLikeBase::constant_regex_fn_scalar(LikeSearchState* state, const
return Status::OK();
}
-Status FunctionLikeBase::regexp_fn_scalar(LikeSearchState* state, const
StringRef& val,
+Status FunctionLikeBase::regexp_fn_scalar(const LikeSearchState* state, const
StringRef& val,
const StringRef& pattern, unsigned
char* result) {
RE2::Options opts;
opts.set_never_nl(false);
@@ -411,7 +414,7 @@ Status FunctionLikeBase::regexp_fn_scalar(LikeSearchState*
state, const StringRe
return Status::OK();
}
-Status FunctionLikeBase::constant_regex_fn(LikeSearchState* state, const
ColumnString& val,
+Status FunctionLikeBase::constant_regex_fn(const LikeSearchState* state, const
ColumnString& val,
const StringRef& pattern,
ColumnUInt8::Container& result) {
auto sz = val.size();
@@ -437,7 +440,7 @@ Status FunctionLikeBase::constant_regex_fn(LikeSearchState*
state, const ColumnS
return Status::OK();
}
-Status FunctionLikeBase::regexp_fn(LikeSearchState* state, const ColumnString&
val,
+Status FunctionLikeBase::regexp_fn(const LikeSearchState* state, const
ColumnString& val,
const StringRef& pattern,
ColumnUInt8::Container& result) {
std::string re_pattern(pattern.data, pattern.size);
@@ -523,8 +526,9 @@ Status FunctionLikeBase::execute_impl(FunctionContext*
context, Block& block,
context->get_function_state(FunctionContext::THREAD_LOCAL));
// for constant_substring_fn, use long run length search for performance
if (constant_substring_fn ==
- *(state->function.target<doris::Status (*)(LikeSearchState* state,
const ColumnString&,
- const StringRef&,
ColumnUInt8::Container&)>())) {
+ *(state->function
+ .target<doris::Status (*)(const LikeSearchState* state,
const ColumnString&,
+ const StringRef&,
ColumnUInt8::Container&)>())) {
RETURN_IF_ERROR(execute_substring(values->get_chars(),
values->get_offsets(), vec_res,
&state->search_state));
} else {
@@ -699,14 +703,14 @@ Status FunctionLikeBase::vector_non_const(const
ColumnString& values, const Colu
return (vector_search_state->_vector_function)(values, *search_strings,
result);
}
-Status FunctionLike::like_fn(LikeSearchState* state, const ColumnString& val,
+Status FunctionLike::like_fn(const LikeSearchState* state, const ColumnString&
val,
const StringRef& pattern, ColumnUInt8::Container&
result) {
std::string re_pattern;
convert_like_pattern(state, std::string(pattern.data, pattern.size),
&re_pattern);
return regexp_fn(state, val, {re_pattern.c_str(), re_pattern.size()},
result);
}
-Status FunctionLike::like_fn_scalar(LikeSearchState* state, const StringRef&
val,
+Status FunctionLike::like_fn_scalar(const LikeSearchState* state, const
StringRef& val,
const StringRef& pattern, unsigned char*
result) {
std::string re_pattern;
convert_like_pattern(state, std::string(pattern.data, pattern.size),
&re_pattern);
@@ -715,7 +719,7 @@ Status FunctionLike::like_fn_scalar(LikeSearchState* state,
const StringRef& val
{re_pattern.c_str(), re_pattern.size()}, result);
}
-void FunctionLike::convert_like_pattern(LikeSearchState* state, const
std::string& pattern,
+void FunctionLike::convert_like_pattern(const LikeSearchState* state, const
std::string& pattern,
std::string* re_pattern) {
re_pattern->clear();
diff --git a/be/src/vec/functions/like.h b/be/src/vec/functions/like.h
index 30665ade359..1128e4f3f69 100644
--- a/be/src/vec/functions/like.h
+++ b/be/src/vec/functions/like.h
@@ -136,10 +136,10 @@ struct LikeSearchState {
}
};
-using LikeFn = std::function<doris::Status(LikeSearchState*, const
ColumnString&, const StringRef&,
- ColumnUInt8::Container&)>;
+using LikeFn = std::function<doris::Status(const LikeSearchState*, const
ColumnString&,
+ const StringRef&,
ColumnUInt8::Container&)>;
-using ScalarLikeFn = std::function<doris::Status(LikeSearchState*, const
StringRef&,
+using ScalarLikeFn = std::function<doris::Status(const LikeSearchState*, const
StringRef&,
const StringRef&, unsigned
char*)>;
using VectorLikeFn = std::function<doris::Status(const ColumnString&, const
ColumnString&,
@@ -208,62 +208,62 @@ protected:
template <bool LIKE_PATTERN>
static VPatternSearchStateSPtr pattern_type_recognition(const
ColumnString& patterns);
- static Status constant_allpass_fn(LikeSearchState* state, const
ColumnString& val,
+ static Status constant_allpass_fn(const LikeSearchState* state, const
ColumnString& val,
const StringRef& pattern,
ColumnUInt8::Container& result);
- static Status constant_allpass_fn_scalar(LikeSearchState* state, const
StringRef& val,
+ static Status constant_allpass_fn_scalar(const LikeSearchState* state,
const StringRef& val,
const StringRef& pattern,
unsigned char* result);
static Status vector_allpass_fn(const ColumnString& vals, const
ColumnString& search_strings,
ColumnUInt8::Container& result);
- static Status constant_starts_with_fn(LikeSearchState* state, const
ColumnString& val,
+ static Status constant_starts_with_fn(const LikeSearchState* state, const
ColumnString& val,
const StringRef& pattern,
ColumnUInt8::Container& result);
- static Status constant_starts_with_fn_scalar(LikeSearchState* state, const
StringRef& val,
+ static Status constant_starts_with_fn_scalar(const LikeSearchState* state,
const StringRef& val,
const StringRef& pattern,
unsigned char* result);
static Status vector_starts_with_fn(const ColumnString& vals,
const ColumnString& search_strings,
ColumnUInt8::Container& result);
- static Status constant_ends_with_fn(LikeSearchState* state, const
ColumnString& val,
+ static Status constant_ends_with_fn(const LikeSearchState* state, const
ColumnString& val,
const StringRef& pattern,
ColumnUInt8::Container& result);
- static Status constant_ends_with_fn_scalar(LikeSearchState* state, const
StringRef& val,
+ static Status constant_ends_with_fn_scalar(const LikeSearchState* state,
const StringRef& val,
const StringRef& pattern,
unsigned char* result);
static Status vector_ends_with_fn(const ColumnString& vals, const
ColumnString& search_strings,
ColumnUInt8::Container& result);
- static Status constant_equals_fn(LikeSearchState* state, const
ColumnString& val,
+ static Status constant_equals_fn(const LikeSearchState* state, const
ColumnString& val,
const StringRef& pattern,
ColumnUInt8::Container& result);
- static Status constant_equals_fn_scalar(LikeSearchState* state, const
StringRef& val,
+ static Status constant_equals_fn_scalar(const LikeSearchState* state,
const StringRef& val,
const StringRef& pattern, unsigned
char* result);
static Status vector_equals_fn(const ColumnString& vals, const
ColumnString& search_strings,
ColumnUInt8::Container& result);
- static Status constant_substring_fn(LikeSearchState* state, const
ColumnString& val,
+ static Status constant_substring_fn(const LikeSearchState* state, const
ColumnString& val,
const StringRef& pattern,
ColumnUInt8::Container& result);
- static Status constant_substring_fn_scalar(LikeSearchState* state, const
StringRef& val,
+ static Status constant_substring_fn_scalar(const LikeSearchState* state,
const StringRef& val,
const StringRef& pattern,
unsigned char* result);
static Status vector_substring_fn(const ColumnString& vals, const
ColumnString& search_strings,
ColumnUInt8::Container& result);
- static Status constant_regex_fn(LikeSearchState* state, const
ColumnString& val,
+ static Status constant_regex_fn(const LikeSearchState* state, const
ColumnString& val,
const StringRef& pattern,
ColumnUInt8::Container& result);
- static Status constant_regex_fn_scalar(LikeSearchState* state, const
StringRef& val,
+ static Status constant_regex_fn_scalar(const LikeSearchState* state, const
StringRef& val,
const StringRef& pattern, unsigned
char* result);
- static Status regexp_fn(LikeSearchState* state, const ColumnString& val,
+ static Status regexp_fn(const LikeSearchState* state, const ColumnString&
val,
const StringRef& pattern, ColumnUInt8::Container&
result);
- static Status regexp_fn_scalar(LikeSearchState* state, const StringRef&
val,
+ static Status regexp_fn_scalar(const LikeSearchState* state, const
StringRef& val,
const StringRef& pattern, unsigned char*
result);
// hyperscan compile expression to database and allocate scratch space
@@ -293,13 +293,13 @@ public:
friend struct VectorEndsWithSearchState;
private:
- static Status like_fn(LikeSearchState* state, const ColumnString& val,
const StringRef& pattern,
- ColumnUInt8::Container& result);
+ static Status like_fn(const LikeSearchState* state, const ColumnString&
val,
+ const StringRef& pattern, ColumnUInt8::Container&
result);
- static Status like_fn_scalar(LikeSearchState* state, const StringRef& val,
+ static Status like_fn_scalar(const LikeSearchState* state, const
StringRef& val,
const StringRef& pattern, unsigned char*
result);
- static void convert_like_pattern(LikeSearchState* state, const
std::string& pattern,
+ static void convert_like_pattern(const LikeSearchState* state, const
std::string& pattern,
std::string* re_pattern);
static void remove_escape_character(std::string* search_string);
diff --git a/be/src/vec/olap/olap_data_convertor.cpp
b/be/src/vec/olap/olap_data_convertor.cpp
index 5ccae6f0a0f..5bcfae7ea43 100644
--- a/be/src/vec/olap/olap_data_convertor.cpp
+++ b/be/src/vec/olap/olap_data_convertor.cpp
@@ -354,9 +354,9 @@ Status
OlapBlockDataConvertor::OlapColumnDataConvertorBitMap::convert_to_olap()
}
assert(column_bitmap);
- auto* bitmap_value =
const_cast<BitmapValue*>(column_bitmap->get_data().data() + _row_pos);
- BitmapValue* bitmap_value_cur = bitmap_value;
- BitmapValue* bitmap_value_end = bitmap_value_cur + _num_rows;
+ const BitmapValue* bitmap_value = column_bitmap->get_data().data() +
_row_pos;
+ const BitmapValue* bitmap_value_cur = bitmap_value;
+ const BitmapValue* bitmap_value_end = bitmap_value_cur + _num_rows;
size_t total_size = 0;
if (_nullmap) {
@@ -428,10 +428,9 @@ Status
OlapBlockDataConvertor::OlapColumnDataConvertorQuantileState::convert_to_
assert_cast<const
vectorized::ColumnQuantileState*>(_typed_column.column.get());
assert(column_quantile_state);
- auto* quantile_state =
-
const_cast<QuantileState*>(column_quantile_state->get_data().data() + _row_pos);
- QuantileState* quantile_state_cur = quantile_state;
- QuantileState* quantile_state_end = quantile_state_cur + _num_rows;
+ const QuantileState* quantile_state =
column_quantile_state->get_data().data() + _row_pos;
+ const QuantileState* quantile_state_cur = quantile_state;
+ const QuantileState* quantile_state_end = quantile_state_cur + _num_rows;
size_t total_size = 0;
while (quantile_state_cur != quantile_state_end) {
@@ -470,9 +469,9 @@ Status
OlapBlockDataConvertor::OlapColumnDataConvertorHLL::convert_to_olap() {
column_hll = assert_cast<const
vectorized::ColumnHLL*>(_typed_column.column.get());
assert(column_hll);
- auto* hll_value = const_cast<HyperLogLog*>(column_hll->get_data().data() +
_row_pos);
- HyperLogLog* hll_value_cur = hll_value;
- HyperLogLog* hll_value_end = hll_value_cur + _num_rows;
+ const HyperLogLog* hll_value = column_hll->get_data().data() + _row_pos;
+ const HyperLogLog* hll_value_cur = hll_value;
+ const HyperLogLog* hll_value_end = hll_value_cur + _num_rows;
size_t total_size = 0;
while (hll_value_cur != hll_value_end) {
@@ -588,13 +587,13 @@ Status
OlapBlockDataConvertor::OlapColumnDataConvertorVarChar::convert_to_olap(
const ColumnString::Offset* offset_cur =
column_string->get_offsets().data() + _row_pos;
const ColumnString::Offset* offset_end = offset_cur + _num_rows;
- Slice* slice = _slice.data();
+ StringRef* slice = _slice.data();
size_t string_offset = *(offset_cur - 1);
if (null_map) {
const UInt8* nullmap_cur = null_map + _row_pos;
while (offset_cur != offset_end) {
if (!*nullmap_cur) {
- slice->data = const_cast<char*>(char_data + string_offset);
+ slice->data = char_data + string_offset;
slice->size = *offset_cur - string_offset;
if (UNLIKELY(slice->size >
config::string_type_length_soft_limit_bytes &&
_check_length)) {
@@ -621,7 +620,7 @@ Status
OlapBlockDataConvertor::OlapColumnDataConvertorVarChar::convert_to_olap(
assert(nullmap_cur == null_map + _row_pos + _num_rows && slice ==
_slice.get_end_ptr());
} else {
while (offset_cur != offset_end) {
- slice->data = const_cast<char*>(char_data + string_offset);
+ slice->data = char_data + string_offset;
slice->size = *offset_cur - string_offset;
if (UNLIKELY(slice->size >
config::string_type_length_soft_limit_bytes &&
_check_length)) {
diff --git a/be/src/vec/olap/olap_data_convertor.h
b/be/src/vec/olap/olap_data_convertor.h
index 5b46554d269..7768dbcf0bd 100644
--- a/be/src/vec/olap/olap_data_convertor.h
+++ b/be/src/vec/olap/olap_data_convertor.h
@@ -228,7 +228,7 @@ private:
bool _check_length;
bool _is_jsonb =
false; // Make sure that the json binary data written in is
the correct jsonb value.
- PaddedPODArray<Slice> _slice;
+ PaddedPODArray<StringRef> _slice;
};
class OlapColumnDataConvertorAggState : public OlapColumnDataConvertorBase
{
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]