[to #48075831]set spi_cursor to null when error happend

This commit is contained in:
LiuYoung00
2023-03-02 16:02:18 +00:00
committed by ob-robot
parent 91ca72111d
commit 3a1e99265f
2 changed files with 4 additions and 0 deletions

View File

@ -279,6 +279,7 @@ int ObDbmsCursorInfo::parse(const ObString &sql_stmt, ObSQLSessionInfo &session)
OZ (prepare_entity(session), sql_stmt);
OV (OB_NOT_NULL(get_dbms_entity()), OB_ALLOCATE_MEMORY_FAILED, sql_stmt);
OV (OB_NOT_NULL(get_cursor_entity()), OB_ALLOCATE_MEMORY_FAILED, sql_stmt);
OX (set_spi_cursor(NULL));
if (OB_SUCC(ret)) {
ObIAllocator &alloc = get_dbms_entity()->get_arena_allocator();
ObParser parser(alloc, session.get_sql_mode(), session.get_local_collation_connection());

View File

@ -3195,6 +3195,7 @@ int ObSPIService::spi_cursor_open(ObPLExecCtx *ctx,
|| (package_id != OB_INVALID_ID && OB_INVALID_ID == routine_id);
if (is_server_cursor) {
OZ (ObPLCursorInfo::prepare_entity(*session_info, cursor->get_cursor_entity()));
OX (cursor->set_spi_cursor(NULL));
}
}
OZ (session_info->ps_use_stream_result_set(use_stream));
@ -3449,6 +3450,8 @@ int ObSPIService::dbms_cursor_open(ObPLExecCtx *ctx,
// 此处只能处理cursor.get_cursor_entity(), 不能处理cursor.get_dbms_entity(),否则exec_params等的值的allocator被reset
// 会导致core
LOG_WARN("failed to alloc ref cursor entity", K(ret));
} else {
cursor.set_spi_cursor(NULL);
}
}
}