[CP] [GIS]fix gis look up memory issue
This commit is contained in:
@ -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));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user