mirror of
https://github.com/MariaDB/server.git
synced 2025-02-21 04:43:29 +01:00
![]() This patch adds support for SYS_REFCURSOR (a weakly typed cursor) for both sql_mode=ORACLE and sql_mode=DEFAULT. Works as a regular stored routine variable, parameter and return value: - can be passed as an IN parameter to stored functions and procedures - can be passed as an OUT parameter to stored procedures - can be returned from a stored function Note, strongly typed REF CURSOR will be added separately. The implementation consists of the following parts: - A new class sp_cursor_array deriving from Dynamic_array - A new member THD::m_session_cursors of the sp_cursor_array data type. - A new data type handler Type_handler_sys_refcursor. It is designed to store an uint16 index - the position of the cursor in THD::m_session_cursors. - Type_handler_sys_refcursor suppresses some derived numeric features. When a SYS_REFCURSOR variable is used as an integer an error is raised. - A new abstract class sp_instr_fetch_cursor. It's needed to share the common code between "OPEN cur" (for static cursors) and "OPER cur FOR stmt" (for SYS_REFCURSORs). - New sp_instr classes: * sp_instr_copen_by_ref - OPEN sys_ref_curor FOR stmt; * sp_instr_cfetch_by_ref - FETCH sys_ref_cursor INTO targets; * sp_instr_cclose_by_ref - CLOSE sys_ref_cursor; - New methods in LEX: * sp_open_cursor_for_stmt - handles "OPER sys_ref_cursor FOR stmt". * sp_add_instr_fetch_cursor - "FETCH cur INTO targets" for both static cursors and SYS_REFCURSORs. * sp_close - handles "CLOSE cur" both for static cursors and SYS_REFCURSORs. - Changes in cursor functions to handle both static cursors and SYS_REFCURSORs: * Item_func_cursor_isopen * Item_func_cursor_found * Item_func_cursor_notfound * Item_func_cursor_rowcount - A new system variable @@max_open_cursors - to limit the number of cursors (static and SYS_REFCURSORs) opened at the same time. Its allowed range is [0-65536], with 50 by default. - A new virtual method Type_handler::can_return_bool() telling if Item::val_bool() can be used. - New methods in Sp_rcontext_handlers: * get_cursor() * get_cursor_by_ref() - A new class Sp_rcontext_handler_session to handle session-wide cursors |
||
---|---|---|
.. | ||
examples | ||
client_settings.h | ||
CMakeLists.txt | ||
emb_qcache.cc | ||
emb_qcache.h | ||
embedded_priv.h | ||
lib_sql.cc | ||
libmysql.c | ||
libmysqld.c | ||
libmysqld.def | ||
libmysqld.rc | ||
resource.h |