[CP] fix select outrow lob into user var

This commit is contained in:
shadowao
2024-03-25 13:50:55 +00:00
committed by ob-robot
parent 4b424e4750
commit ce7584d0fe
2 changed files with 16 additions and 0 deletions

View File

@ -15,6 +15,7 @@
#include "sql/engine/ob_physical_plan.h"
#include "sql/engine/ob_exec_context.h"
#include "sql/engine/cmd/ob_variable_set_executor.h"
#include "sql/engine/expr/ob_expr_lob_utils.h"
#include "share/backup/ob_backup_io_adapter.h"
#include "share/ob_device_manager.h"
#include "sql/resolver/ob_resolver_utils.h"
@ -566,6 +567,7 @@ int ObSelectIntoOp::into_varlist()
const ObIArray<ObExpr*> &select_exprs = (MY_SPEC.select_exprs_.empty()) ?
MY_SPEC.output_ : MY_SPEC.select_exprs_;
const ObIArray<ObString> &user_vars = MY_SPEC.user_vars_;
ObArenaAllocator lob_tmp_allocator("LobTmp", OB_MALLOC_NORMAL_BLOCK_SIZE, MTL_ID());
if (select_exprs.count() != user_vars.count()) {
ret = OB_ERR_COLUMN_SIZE;
LOG_WARN("user vars count should be equal to select exprs count" , K(ret),
@ -579,6 +581,11 @@ int ObSelectIntoOp::into_varlist()
LOG_WARN("eval expr failed", K(ret));
} else if (OB_FAIL(datum->to_obj(obj, select_exprs.at(i)->obj_meta_))) {
LOG_WARN("convert datum to obj failed", K(ret), KPC(select_exprs.at(i)));
} else if (obj.is_lob_storage()
// outrow lob can not be assigned to user var, so convert outrow to inrow lob
// user var has independent memory, so using temporary memory here is fine
&& OB_FAIL(ObTextStringIter::convert_outrow_lob_to_inrow_templob(obj, obj, nullptr, &lob_tmp_allocator, true/*allow_persist_inrow*/))) {
LOG_WARN("convert outrow to inrow lob failed", K(ret), K(obj));
} else if (OB_FAIL(ObVariableSetExecutor::set_user_variable(obj, var_name,
ctx_.get_my_session()))) {
LOG_WARN("set user variable failed", K(ret));