[CP] [GIS]fix gis look up memory issue

This commit is contained in:
obdev
2023-11-03 10:10:21 +00:00
committed by ob-robot
parent 8c9bd898fd
commit f5c60c15c6

View File

@ -265,23 +265,21 @@ int ObSpatialIndexLookupOp::process_data_table_rowkey()
ObObj *obj_ptr = nullptr; ObObj *obj_ptr = nullptr;
void *buf = nullptr; void *buf = nullptr;
ObNewRange lookup_range; ObNewRange lookup_range;
if (OB_ISNULL(buf = lookup_rtdef_->scan_allocator_.alloc(sizeof(ObObj) * rowkey_cnt))) { ObArenaAllocator tmp_allocator("GisLookup");
if (OB_ISNULL(buf = tmp_allocator.alloc(sizeof(ObObj) * rowkey_cnt))) {
ret = OB_ALLOCATE_MEMORY_FAILED; ret = OB_ALLOCATE_MEMORY_FAILED;
LOG_WARN("allocate buffer failed", K(ret), K(rowkey_cnt)); LOG_WARN("allocate buffer failed", K(ret), K(rowkey_cnt));
} else { } else {
obj_ptr = new(buf) ObObj[rowkey_cnt]; obj_ptr = new(buf) ObObj[rowkey_cnt];
} }
for (int64_t i = 0; OB_SUCC(ret) && i < rowkey_cnt; ++i) { for (int64_t i = 0; OB_SUCC(ret) && i < rowkey_cnt; ++i) {
ObObj tmp_obj;
ObExpr *expr = index_ctdef_->result_output_.at(i); ObExpr *expr = index_ctdef_->result_output_.at(i);
if (T_PSEUDO_GROUP_ID == expr->type_) { if (T_PSEUDO_GROUP_ID == expr->type_) {
// do nothing // do nothing
} else { } else {
ObDatum &col_datum = expr->locate_expr_datum(*lookup_rtdef_->eval_ctx_); ObDatum &col_datum = expr->locate_expr_datum(*lookup_rtdef_->eval_ctx_);
if (OB_FAIL(col_datum.to_obj(tmp_obj, expr->obj_meta_, expr->obj_datum_map_))) { if (OB_FAIL(col_datum.to_obj(obj_ptr[i], expr->obj_meta_, expr->obj_datum_map_))) {
LOG_WARN("convert datum to obj failed", K(ret)); LOG_WARN("convert datum to obj failed", K(ret));
} else if (OB_FAIL(ob_write_obj(lookup_rtdef_->scan_allocator_, tmp_obj, obj_ptr[i]))) {
LOG_WARN("deep copy rowkey value failed", K(ret), K(tmp_obj));
} }
} }
} }