提交 85ed8b05 编写于 作者: O obdev 提交者: wangzelin.wzl

[CP][BUGFIX]fix json aggr with bit and year type

上级 45079030
......@@ -3453,6 +3453,7 @@ int ObAggregateProcessor::get_json_objectagg_result(const ObAggrInfo &aggr_info,
ObCollationType cs_type0 = tmp_obj[0].get_collation_type();
ObObjType val_type1 = tmp_obj[1].get_type();
ObScale scale1 = tmp_obj[1].get_scale();
scale1 = (val_type1 == ObBitType) ? aggr_info.param_exprs_.at(1)->datum_meta_.length_semantics_ : scale1;
ObCollationType cs_type1 = tmp_obj[1].get_collation_type();
ObString key_string = tmp_obj[0].get_string();
if (OB_SUCC(ret) && ObCharset::charset_type_by_coll(cs_type0) != CHARSET_UTF8MB4) {
......
......@@ -213,7 +213,20 @@ public:
}
break;
}
case ObYearType: {
uint8_t in_val = datum.get_year();
int64_t full_year = 0;
if (OB_FAIL(ObTimeConverter::year_to_int(in_val, full_year))) {
} else {
buf = allocator->alloc(sizeof(ObJsonInt));
if (OB_ISNULL(buf)) {
ret = OB_ALLOCATE_MEMORY_FAILED;
} else {
json_node = (ObJsonInt*)new(buf)ObJsonInt(full_year);
}
}
break;
}
case ObFloatType:
case ObDoubleType:
case ObUFloatType:
......@@ -251,6 +264,27 @@ public:
}
break;
}
case ObBitType: {
const int32_t BUF_LEN = (OB_MAX_BIT_LENGTH + 7) / 8;
int64_t pos = 0;
char *bbuf = static_cast<char*>(allocator->alloc(BUF_LEN));
if (OB_ISNULL(bbuf)) {
ret = OB_ALLOCATE_MEMORY_FAILED;
} else {
uint64_t in_val = datum.get_uint64();
if (OB_FAIL(bit_to_char_array(in_val, scale, bbuf, BUF_LEN, pos))) {
} else {
common::ObString j_value(pos, bbuf);
buf = allocator->alloc(sizeof(ObJsonOpaque));
if (OB_ISNULL(buf)) {
ret = OB_ALLOCATE_MEMORY_FAILED;
} else {
json_node = (ObJsonOpaque *)new(buf)ObJsonOpaque(j_value, type);
}
}
}
break;
}
default: {
ret = OB_INVALID_ARGUMENT;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册