1
0
mirror of https://github.com/MariaDB/server.git synced 2026-10-23 18:49:29 +03:00
Files
mariadb/sql
bsrikanth-mariadb 999b11bd02 MDEV-41243, MDEV-41273 Don't freeze mem_root after engine pushdown
When a statement is pushed down to an engine, the once-per-statement
part of the optimization (e.g. the first_cond_optimization part of
JOIN::optimize(), or the whole of JOIN::optimize() for a pushed down
UNION) is skipped. Re-executing the same prepared statement or stored
routine without pushdown then allocated from a mem_root already marked
ROOT_FLAG_READ_ONLY, hitting an assertion in alloc_root().

Add LEX::dont_freeze_mem_root, set by the pushdown_handler and
derived_handler constructors so it covers every engine implementing
them. Prepared_statement::execute_loop(), sp_head::execute() (through
sp_head::dont_freeze_mem_root) and the SP instruction reparse path no
longer freeze the mem_root of such statements. The flag is only
declared and used in PROTECT_STATEMENT_MEMROOT builds.

The flag is per execution for prepared statements:
Prepared_statement::execute_loop() clears it after each execution, so
the mem_root is frozen again after the first later execution that is
not pushed down. For a stored routine the instruction's LEX keeps the
flag, so once one instruction has been pushed down the routine's
mem_root stays unfrozen, even if later executions are not pushed down,
unless the routine is re-parsed into a new LEX.

Add tests for prepared SELECT, UNION, UPDATE and DELETE, prepared
EXPLAIN of a pushed UNION, derived tables, stored procedures,
functions, triggers, cursors and metadata-invalidation reparse, with
pushdown switched on and off. Most prepared statement and routine
tests check the statements received by the remote server, or EXPLAIN,
to verify that pushdown actually happened.
2026-10-21 10:15:30 +05:30
..
2026-06-15 16:53:03 +02:00
…
2026-08-12 14:31:53 +03:00
2025-07-28 21:29:29 +02:00
2024-11-05 14:00:48 -08:00
2026-08-03 13:42:39 +02:00
2025-09-29 18:25:09 +03:00
…
2025-03-14 12:08:56 +04:00
2026-02-16 21:55:18 +01:00
2025-03-14 12:08:56 +04:00
…
2024-12-02 11:35:34 +02:00
2024-12-02 17:51:17 +02:00
2026-01-31 14:08:54 +01:00
2026-07-20 13:23:00 +03:00
2026-07-20 13:23:00 +03:00
…
2026-01-31 14:08:54 +01:00
2026-07-30 16:15:40 +02:00
2026-07-30 16:15:40 +02:00
2024-12-02 11:35:34 +02:00
2026-03-24 09:49:17 +02:00
2026-03-24 09:49:17 +02:00
…
…
2026-05-26 21:15:58 +02:00
2026-06-15 16:53:03 +02:00
2026-05-26 21:15:58 +02:00
2026-07-29 12:27:46 +02:00
2024-11-29 13:43:17 +02:00
…
…
2026-05-26 21:15:58 +02:00
2024-12-05 10:11:58 +01:00
2026-08-03 13:42:39 +02:00
2026-07-30 16:15:40 +02:00
2026-02-03 14:53:15 +01:00
2026-05-26 21:15:58 +02:00
2026-02-03 14:53:15 +01:00
2026-02-03 14:53:15 +01:00
2026-08-03 13:42:39 +02:00
2026-02-03 14:53:15 +01:00
2026-07-30 11:41:55 +02:00
2026-06-29 07:41:06 +03:00
2026-03-24 09:49:17 +02:00
2026-01-31 14:08:54 +01:00
2026-04-01 15:03:59 +03:00
2026-08-03 13:42:39 +02:00
2026-01-08 12:02:45 +01:00
2026-08-03 13:42:39 +02:00
2024-07-08 22:40:16 +02:00
2026-05-26 21:15:58 +02:00
…
2026-07-30 11:41:55 +02:00
2026-06-16 15:03:05 +02:00
2026-05-26 21:15:58 +02:00
…
2025-03-14 12:08:56 +04:00
…
2024-10-03 15:59:20 +10:00
…
2025-03-14 12:08:56 +04:00
2026-05-26 21:15:58 +02:00
2026-08-03 13:42:39 +02:00
2026-05-26 21:15:58 +02:00
2026-07-29 12:27:46 +02:00
2026-07-30 11:41:55 +02:00
2026-05-08 08:00:01 +02:00
2026-07-20 13:23:00 +03:00
2026-01-31 14:08:54 +01:00
2026-05-26 21:15:58 +02:00
2026-02-03 14:53:15 +01:00
2025-09-29 18:25:09 +03:00
2024-07-22 15:14:50 +02:00
2026-05-26 21:15:58 +02:00
2026-05-26 21:15:58 +02:00
2026-05-26 21:15:58 +02:00
2026-06-16 12:24:32 +02:00
2026-07-30 11:41:55 +02:00
2026-06-16 12:24:32 +02:00
2026-06-15 16:53:03 +02:00
2026-06-15 16:53:03 +02:00
2025-03-14 12:08:56 +04:00
2026-04-02 09:15:17 +03:00
2026-05-26 21:15:58 +02:00
2026-07-20 13:23:00 +03:00
2026-02-06 17:46:50 +01:00
2025-11-04 12:39:27 +01:00
2026-07-30 16:15:40 +02:00
2026-07-30 11:41:55 +02:00
2025-09-04 18:08:39 +03:00
2026-05-26 21:15:58 +02:00
2024-06-24 13:09:47 +03:00
2026-08-03 13:42:39 +02:00
2026-07-30 11:41:55 +02:00
2026-06-15 15:15:10 +02:00
2026-06-15 15:15:10 +02:00
2026-01-08 21:41:40 +01:00
2026-04-02 09:15:17 +03:00
2026-01-31 14:08:54 +01:00
2026-01-05 20:34:44 +01:00
2026-07-30 11:41:55 +02:00
2026-03-24 09:49:17 +02:00
2026-06-29 07:40:04 +03:00
2026-01-08 12:02:45 +01:00
2026-07-30 16:15:40 +02:00
2026-07-30 16:15:40 +02:00
2026-08-03 13:42:39 +02:00
2026-02-06 17:46:51 +01:00
2026-03-17 18:57:42 +01:00
2026-07-20 13:23:00 +03:00
2026-07-30 16:15:40 +02:00
…
2026-02-06 17:46:51 +01:00
2026-02-06 17:46:51 +01:00
2025-09-29 18:25:09 +03:00
2024-06-27 10:26:09 +03:00
2025-08-04 12:05:53 +02:00
2024-12-02 17:51:17 +02:00
2026-08-03 13:42:39 +02:00
2025-09-19 12:31:14 +03:00
2026-05-26 21:15:58 +02:00
2025-03-14 12:08:56 +04:00
2026-07-20 13:23:00 +03:00
2024-07-03 12:45:30 +02:00
2025-01-09 09:41:38 +02:00
2024-12-02 17:51:17 +02:00
2026-07-30 11:41:55 +02:00
2026-08-03 13:42:39 +02:00
2026-05-27 12:49:36 +02:00
2026-05-26 21:15:58 +02:00
2026-09-01 17:53:48 +02:00
2026-09-01 17:53:48 +02:00
2026-08-03 13:42:39 +02:00
2026-07-30 16:15:40 +02:00
2026-04-01 10:49:05 +03:00
2026-07-28 13:14:38 +02:00
2026-02-07 22:12:32 +01:00
2025-04-29 11:18:00 +10:00
2026-05-26 21:15:58 +02:00
…
2026-05-22 09:52:05 +02:00
2026-05-22 09:52:05 +02:00
2026-08-03 13:42:39 +02:00
2026-08-03 13:42:39 +02:00
2025-03-14 12:08:56 +04:00
2024-12-02 17:51:17 +02:00
2026-07-30 16:15:40 +02:00
2026-06-15 16:53:03 +02:00
2026-05-26 21:15:58 +02:00
2026-06-24 12:27:13 +02:00
2026-08-03 13:42:39 +02:00
2026-07-20 13:23:00 +03:00
2025-04-29 11:18:00 +10:00
2026-03-24 09:49:17 +02:00
2025-09-04 18:08:39 +03:00
2024-06-24 13:09:47 +03:00
2025-03-14 12:08:56 +04:00
2026-05-22 09:52:05 +02:00
2024-12-02 17:51:17 +02:00
2024-12-02 11:35:34 +02:00
2026-09-01 17:53:48 +02:00
2025-03-14 12:08:56 +04:00
2026-06-16 12:24:32 +02:00
2025-11-28 12:56:27 +02:00
2024-06-27 10:26:09 +03:00
2026-07-20 13:23:00 +03:00
2026-06-21 15:32:20 +02:00
2026-06-15 16:53:03 +02:00
2026-04-02 09:15:17 +03:00
2024-10-03 13:24:43 +03:00
2024-09-09 13:50:38 +03:00
2026-08-03 13:42:39 +02:00
2026-02-07 22:12:32 +01:00
2026-08-03 13:42:39 +02:00
2026-07-29 12:27:46 +02:00
2026-06-25 14:49:32 +02:00