[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);
|
OZ (prepare_entity(session), sql_stmt);
|
||||||
OV (OB_NOT_NULL(get_dbms_entity()), OB_ALLOCATE_MEMORY_FAILED, 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);
|
OV (OB_NOT_NULL(get_cursor_entity()), OB_ALLOCATE_MEMORY_FAILED, sql_stmt);
|
||||||
|
OX (set_spi_cursor(NULL));
|
||||||
if (OB_SUCC(ret)) {
|
if (OB_SUCC(ret)) {
|
||||||
ObIAllocator &alloc = get_dbms_entity()->get_arena_allocator();
|
ObIAllocator &alloc = get_dbms_entity()->get_arena_allocator();
|
||||||
ObParser parser(alloc, session.get_sql_mode(), session.get_local_collation_connection());
|
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);
|
|| (package_id != OB_INVALID_ID && OB_INVALID_ID == routine_id);
|
||||||
if (is_server_cursor) {
|
if (is_server_cursor) {
|
||||||
OZ (ObPLCursorInfo::prepare_entity(*session_info, cursor->get_cursor_entity()));
|
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));
|
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
|
// 此处只能处理cursor.get_cursor_entity(), 不能处理cursor.get_dbms_entity(),否则exec_params等的值的allocator被reset
|
||||||
// 会导致core
|
// 会导致core
|
||||||
LOG_WARN("failed to alloc ref cursor entity", K(ret));
|
LOG_WARN("failed to alloc ref cursor entity", K(ret));
|
||||||
|
} else {
|
||||||
|
cursor.set_spi_cursor(NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user