[BUGFIX] read full vector in expr vector
This commit is contained in:
parent
824a5a85d4
commit
4999023461
@ -90,8 +90,57 @@ int ObExprVecVector::cg_expr(
|
||||
} else if (OB_ISNULL(datum)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("get null datum", K(ret), KPC(raw_ctx.args_[0]));
|
||||
} else {
|
||||
} else if (datum->is_null()) {
|
||||
expr_datum.set_null();
|
||||
} else if (datum->get_string().length() == 0) {
|
||||
expr_datum.set_string(datum->get_string());
|
||||
} else {
|
||||
// transform outrow vector into inrow vector
|
||||
ObString vector = datum->get_string();
|
||||
ObLobLocatorV2 lob(vector, raw_ctx.args_[0]->obj_meta_.has_lob_header());
|
||||
if (lob.has_inrow_data()) {
|
||||
// inrow lob do not need to build new result
|
||||
expr_datum.set_string(datum->get_string());
|
||||
} else {
|
||||
ObEvalCtx::TempAllocGuard tmp_alloc_g(eval_ctx);
|
||||
common::ObArenaAllocator &ctx_allocator = tmp_alloc_g.get_allocator();
|
||||
ObLobAccessParam param;
|
||||
ObLobManager* lob_mngr = MTL(ObLobManager*);
|
||||
int64_t timeout = 0;
|
||||
int64_t query_st = eval_ctx.exec_ctx_.get_my_session()->get_query_start_time();
|
||||
if (OB_ISNULL(lob_mngr)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("get lob manager handle null.", K(ret));
|
||||
} else if (OB_FAIL(eval_ctx.exec_ctx_.get_my_session()->get_query_timeout(timeout))) {
|
||||
LOG_WARN("failed to get session query timeout", K(ret));
|
||||
} else {
|
||||
timeout += query_st;
|
||||
param.tx_desc_ = eval_ctx.exec_ctx_.get_my_session()->get_tx_desc();
|
||||
int64_t lob_len = 0;
|
||||
ObString vector_buff;
|
||||
char *vec_buff_ptr = nullptr;
|
||||
int64_t buff_len = 0;
|
||||
ObTextStringDatumResult text_result(ObLongTextType, &raw_ctx, &eval_ctx, &expr_datum);
|
||||
if (OB_FAIL(lob.get_lob_data_byte_len(lob_len))) {
|
||||
LOG_WARN("fail to get vector byte len", K(ret), K(lob));
|
||||
} else if (OB_FAIL(text_result.init(lob_len, nullptr))) {
|
||||
LOG_WARN("init lob result failed");
|
||||
} else if (OB_FAIL(text_result.get_reserved_buffer(vec_buff_ptr, buff_len))) {
|
||||
LOG_WARN("fail to get reserved buffer", K(ret));
|
||||
} else if (FALSE_IT(vector_buff.assign_buffer(vec_buff_ptr, buff_len))) {
|
||||
} else if (OB_FAIL(lob_mngr->build_lob_param(param, ctx_allocator, CS_TYPE_BINARY, 0, UINT64_MAX, timeout, lob))) {
|
||||
LOG_WARN("fail to build lob param", K(ret));
|
||||
} else if (OB_FAIL(lob_mngr->query(param, vector_buff))) {
|
||||
LOG_WARN("fail to do query vector", K(ret));
|
||||
} else if (OB_FAIL(text_result.lseek(vector_buff.length(), 0))) {
|
||||
LOG_WARN("result lseek failed", K(ret));
|
||||
} else {
|
||||
ObString res_str;
|
||||
text_result.get_result_buffer(res_str);
|
||||
expr_datum.set_string(res_str);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user