mariadb/libmysqld
Alexander Barkov 5bf9c4f6ec MDEV-20034 Add support for the pre-defined weak SYS_REFCURSOR
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
2025-02-20 17:30:41 +04:00
..
examples MDEV-33091 pcre2 headers aren't found on Solaris 2024-01-19 20:23:45 +01:00
client_settings.h Merge 10.1 into 10.2 2019-05-13 17:54:04 +03:00
CMakeLists.txt MDEV-20034 Add support for the pre-defined weak SYS_REFCURSOR 2025-02-20 17:30:41 +04:00
emb_qcache.cc MDEV-27595 Backport SQL service, introduced by MDEV-19275. 2023-11-05 23:35:32 +04:00
emb_qcache.h MDEV-19275 Provide SQL service to plugins. 2020-08-14 21:04:25 +04:00
embedded_priv.h Fixed crash in connect.misc with embedded server 2024-02-27 14:55:47 +02:00
lib_sql.cc Fixed memory leaks in embedded server and mysqltest 2024-04-05 12:40:49 +02:00
libmysql.c Merge branch '11.0' into 11.1 2024-02-02 11:30:47 +01:00
libmysqld.c Fixed crash in connect.misc with embedded server 2024-02-27 14:55:47 +02:00
libmysqld.def merge with 5.3 2011-10-19 21:45:18 +02:00
libmysqld.rc
resource.h