[to #48075831]set spi_cursor to null when error happend
This commit is contained in:
@ -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());
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user