This is an automated email from the ASF dual-hosted git repository.
yangzhg pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
The following commit(s) were added to refs/heads/master by this push:
new 4f9b46d Fix String type column using zonemap to filter data maybe
core dump (#6939)
4f9b46d is described below
commit 4f9b46d40383c2526bfd1fd604cb95063ae65c7c
Author: Zhengguo Yang <[email protected]>
AuthorDate: Wed Oct 27 09:25:38 2021 +0800
Fix String type column using zonemap to filter data maybe core dump (#6939)
Fix String type column using zonemap to filter data maybe core dump,
because of not allocating memory before parsing string type zonemap
---
be/src/olap/wrapper_field.cpp | 11 +++++++++--
be/src/olap/wrapper_field.h | 4 ++++
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/be/src/olap/wrapper_field.cpp b/be/src/olap/wrapper_field.cpp
index 61f5f88..be908a2 100644
--- a/be/src/olap/wrapper_field.cpp
+++ b/be/src/olap/wrapper_field.cpp
@@ -17,6 +17,8 @@
#include "olap/wrapper_field.h"
+#include "olap/row_cursor.h"
+
namespace doris {
const size_t DEFAULT_STRING_LENGTH = 50;
@@ -25,8 +27,9 @@ WrapperField* WrapperField::create(const TabletColumn&
column, uint32_t len) {
bool is_string_type =
(column.type() == OLAP_FIELD_TYPE_CHAR || column.type() ==
OLAP_FIELD_TYPE_VARCHAR ||
column.type() == OLAP_FIELD_TYPE_HLL || column.type() ==
OLAP_FIELD_TYPE_OBJECT ||
- column.type() == OLAP_FIELD_TYPE_STRING);
- size_t max_length = column.type() == OLAP_FIELD_TYPE_STRING ?
OLAP_STRING_MAX_LENGTH : OLAP_VARCHAR_MAX_LENGTH;
+ column.type() == OLAP_FIELD_TYPE_STRING);
+ size_t max_length = column.type() == OLAP_FIELD_TYPE_STRING ?
OLAP_STRING_MAX_LENGTH
+ :
OLAP_VARCHAR_MAX_LENGTH;
if (is_string_type && len > max_length) {
OLAP_LOG_WARNING("length of string parameter is too long[len=%lu,
max_len=%lu].", len,
max_length);
@@ -89,6 +92,10 @@ WrapperField::WrapperField(Field* rep, size_t variable_len,
bool is_string_type)
_string_content.reset(new char[slice->size]);
slice->data = _string_content.get();
}
+ if (_rep->type() == OLAP_FIELD_TYPE_STRING) {
+ _long_text_buf = (char*)malloc(RowCursor::DEFAULT_TEXT_LENGTH *
sizeof(char));
+ rep->set_long_text_buf(&_long_text_buf);
+ }
}
WrapperField::WrapperField(Field* rep, const RowCursorCell& row_cursor_cell)
diff --git a/be/src/olap/wrapper_field.h b/be/src/olap/wrapper_field.h
index c14c019..3d22a7b 100644
--- a/be/src/olap/wrapper_field.h
+++ b/be/src/olap/wrapper_field.h
@@ -41,6 +41,9 @@ public:
virtual ~WrapperField() {
delete _rep;
delete[] _owned_buf;
+ if (_long_text_buf) {
+ delete _long_text_buf;
+ }
}
// 将内部的value转成string输出
@@ -103,6 +106,7 @@ private:
bool _is_string_type;
char* _field_buf = nullptr;
char* _owned_buf = nullptr;
+ char* _long_text_buf = nullptr;
//include fixed and variable length and null bytes
size_t _length;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]