1
0
mirror of https://github.com/MariaDB/server.git synced 2026-10-23 18:49:29 +03:00
Files
GoldenEmperor1177 151631b8cf MDEV-31225 Crash converting IN with a nested ROW into IN subquery
What was wrong:
With in_predicate_conversion_threshold set low enough, an IN predicate
with a nested ROW, e.g.

  ROW(a,(a,a)) IN ((1,(1,1)),(2,(2,NULL)))

crashed the server. Before an IN list is converted into an IN subquery
over a table value constructor, cmp_row_types() checks every column
with subquery_type_allows_materialization(). With a nested ROW the
column is a ROW itself, and for a ROW that function must not be called.

How it is fixed:
A table value constructor cannot have a ROW as a column, so such a
predicate cannot be converted anyway. cmp_row_types() now reports the
columns as not comparable when either of them is a ROW, and the IN
predicate is evaluated without the conversion.

How it is tested:
Added a test to main.opt_tvc with IN and NOT IN over nested ROWs. It
crashes the server without the fix.
2026-10-09 14:13:59 +03:00
..
2026-05-08 08:00:01 +02:00
2025-10-25 00:19:11 +07:00
…
2026-07-23 11:12:27 +02:00
2026-07-28 13:14:38 +02:00
…
2025-09-04 18:08:39 +03:00
2024-01-19 09:07:48 +02:00
…
2023-12-21 02:14:59 +01:00
…
…
2024-12-02 11:35:34 +02:00
2024-11-29 12:37:46 +02:00
2024-10-30 15:11:17 +01:00
…
2026-01-28 21:52:18 +01:00
2026-07-28 13:14:38 +02:00
2026-08-19 08:40:05 +02:00
2024-12-02 11:35:34 +02:00
2023-12-21 02:14:59 +01:00
…
…
…
2024-01-27 12:09:54 +01:00
2024-01-27 12:09:54 +01:00
2026-06-15 12:50:45 +02:00
2025-09-04 18:08:39 +03:00
2026-08-30 17:39:50 +02:00
2024-11-29 13:43:17 +02:00
…
…
2026-08-19 08:40:05 +02:00
2026-08-19 08:40:05 +02:00
2024-12-02 11:35:34 +02:00
2024-12-05 10:11:58 +01:00
2026-08-19 08:40:05 +02:00
2026-07-28 13:14:38 +02:00
2026-08-19 08:13:54 +02:00
2026-01-28 14:22:20 +01:00
2026-06-26 13:45:38 +03:00
2026-01-28 21:52:18 +01:00
2026-01-28 14:22:20 +01:00
2026-01-28 14:22:20 +01:00
2026-08-30 17:39:50 +02:00
2024-12-02 11:35:34 +02:00
2026-07-14 12:49:36 +10:00
2024-11-29 13:43:17 +02:00
2024-07-08 22:40:16 +02:00
2024-06-17 12:02:03 +03:00
2025-04-26 10:53:02 +02:00
2024-05-21 19:38:51 +02:00
…
…
2025-04-26 10:53:02 +02:00
2026-08-19 08:40:05 +02:00
2026-08-19 08:40:05 +02:00
2026-08-19 08:40:05 +02:00
2026-05-08 08:00:01 +02:00
…
…
2025-09-04 18:08:39 +03:00
2026-04-01 10:49:05 +03:00
…
2024-09-18 07:38:49 +03:00
2024-12-02 11:35:34 +02:00
…
…
2026-07-28 13:14:38 +02:00
2024-05-21 19:38:51 +02:00
2026-08-19 08:40:05 +02:00
2026-01-28 21:52:18 +01:00
2026-08-19 08:40:05 +02:00
2026-07-28 13:14:38 +02:00
2024-12-02 11:35:34 +02:00
2026-07-28 13:14:38 +02:00
2026-05-08 08:00:01 +02:00
2026-08-19 08:40:05 +02:00
2026-05-08 08:00:01 +02:00
2024-12-02 11:35:34 +02:00
…
2025-09-04 18:08:39 +03:00
2024-07-22 15:14:50 +02:00
2026-05-08 08:00:01 +02:00
2026-05-08 08:00:01 +02:00
2026-05-08 08:00:01 +02:00
2026-06-15 12:50:45 +02:00
2026-07-28 13:14:38 +02:00
2026-06-15 12:50:45 +02:00
2026-08-19 08:40:05 +02:00
2026-08-19 08:40:05 +02:00
2026-06-15 12:50:45 +02:00
2026-06-15 10:43:23 +02:00
2024-12-02 11:35:34 +02:00
2026-08-19 08:40:05 +02:00
2026-08-19 08:40:05 +02:00
2026-08-19 08:40:05 +02:00
2025-10-28 17:49:51 +01:00
2025-10-28 17:49:51 +01:00
2026-07-28 13:14:38 +02:00
2024-12-02 11:35:34 +02:00
2026-08-19 08:13:54 +02:00
2025-09-04 18:08:39 +03:00
2026-08-19 08:40:05 +02:00
2025-01-14 23:45:41 +01:00
2024-06-24 13:09:47 +03:00
2025-01-30 12:01:11 +01:00
2024-11-29 13:43:17 +02:00
2026-05-08 08:00:01 +02:00
2025-09-04 18:08:39 +03:00
2024-01-18 19:22:23 +02:00
2026-04-01 10:49:05 +03:00
2024-12-02 11:35:34 +02:00
2026-08-19 08:40:05 +02:00
2026-08-19 08:40:05 +02:00
2026-01-28 21:52:18 +01:00
2026-01-02 11:06:05 +02:00
2024-10-03 13:24:43 +03:00
2026-03-23 08:44:54 +02:00
2026-07-23 11:12:27 +02:00
2026-07-23 11:12:27 +02:00
2026-07-28 13:14:38 +02:00
2025-03-03 11:07:56 +02:00
2026-03-17 18:57:42 +01:00
2026-01-28 21:52:18 +01:00
2026-08-19 08:40:05 +02:00
…
2024-08-21 09:30:54 +02:00
2026-04-01 10:49:05 +03:00
2025-09-24 13:40:09 +03:00
2025-09-04 18:08:39 +03:00
2024-06-27 10:26:09 +03:00
2025-01-09 07:58:08 +02:00
2024-10-30 15:11:17 +01:00
2024-11-29 12:37:46 +02:00
…
2026-07-28 13:14:38 +02:00
2025-09-19 12:31:14 +03:00
2025-09-04 18:08:39 +03:00
2026-07-28 13:14:38 +02:00
2026-07-28 13:14:38 +02:00
2026-05-08 08:00:01 +02:00
2024-04-15 18:54:30 +02:00
2026-08-19 08:40:05 +02:00
2026-01-28 21:52:18 +01:00
2024-07-03 12:45:30 +02:00
2026-08-19 08:40:05 +02:00
2023-12-17 11:20:43 +01:00
2026-08-19 08:40:05 +02:00
2026-07-23 11:12:27 +02:00
2026-08-19 08:40:05 +02:00
2025-09-04 18:08:39 +03:00
2026-05-08 08:00:01 +02:00
2026-08-19 08:40:05 +02:00
2026-03-17 11:30:41 +02:00
2024-03-28 10:51:36 +02:00
2025-09-16 17:01:39 +03:00
2026-07-23 11:12:27 +02:00
2026-07-28 13:14:38 +02:00
2025-01-30 12:01:11 +01:00
2025-03-27 08:01:47 +02:00
…
2024-01-18 19:22:23 +02:00
2026-08-19 08:40:05 +02:00
2026-07-28 13:14:38 +02:00
2024-12-02 11:35:34 +02:00
2024-11-23 08:14:23 -07:00
2026-08-19 08:40:05 +02:00
2026-07-28 13:14:38 +02:00
2026-07-28 13:14:38 +02:00
2026-06-15 12:50:45 +02:00
2026-08-19 08:40:05 +02:00
2026-08-19 08:40:05 +02:00
2026-08-19 08:40:05 +02:00
2026-07-28 13:14:38 +02:00
2025-09-04 18:08:39 +03:00
2024-06-24 13:09:47 +03:00
2025-07-28 19:40:10 +02:00
…
2024-02-15 13:53:21 +01:00
2024-12-02 11:35:34 +02:00
2024-12-02 11:35:34 +02:00
2026-08-19 08:40:05 +02:00
2025-04-26 10:53:02 +02:00
2024-02-21 13:08:23 +02:00
2025-11-28 12:56:27 +02:00
2025-11-28 12:56:27 +02:00
2024-01-02 17:37:58 +02:00
2024-06-27 10:26:09 +03:00
2026-08-19 08:40:05 +02:00
2026-06-21 15:32:20 +02:00
2026-08-19 08:40:05 +02:00
2024-10-03 13:24:43 +03:00
2024-09-09 13:50:38 +03:00
2026-08-19 08:40:05 +02:00
2026-07-23 11:12:27 +02:00
2026-07-23 11:12:27 +02:00
2026-08-19 08:40:05 +02:00
2026-04-01 10:49:05 +03:00
2025-07-28 19:40:10 +02:00