delete triggers runtime error: invalid memory address or nil pointer dereference
- Dominant language
- Go
- Stars
- 40.5k
- Forks
- 6.2k
- PR merge metrics
- PR metrics pending
Description
## Bug Report
Please answer these questions before submitting your issue. Thanks!
### 1. Minimal reproduce step (Required)
```
SET SQL_MODE= CONCAT(@@sql_mode,',NO_ENGINE_SUBSTITUTION');
CREATE DATABASE IF NOT EXISTS test_minimal;
USE test_minimal;
SET SESSION tidb_allow_mpp = ON;
SET SESSION tidb_enable_cascades_planner = ON;
SET SESSION tidb_enforce_mpp = ON;
SET SESSION tidb_mem_quota_query = 2147483648;
SET SESSION tidb_hashagg_partial_concurrency = 15;
SET SESSION max_execution_time = 10000;
DROP TABLE IF EXISTS mysql_2;
CREATE TABLE `mysql_2` (
`col_int` int,
`col_varchar` varchar(2000),
`col_date` date,
`col_timestamp` timestamp,
`col_numeric` numeric,
KEY k2 (`col_int`,`col_date`),
KEY k1 (`col_numeric`)
);
INSERT INTO mysql_2 (col_int,col_varchar,col_date,col_timestamp,col_numeric) VALUES
(NULL, 'ukuz', '2027-11-24 19:10:40', '2014-07-04', 2),
(8, 'h', '2029-05-04', '2018-02-14 15:43:44', 3),
(NULL, 'kuzlp', '1992-02-24 23:00:24', '1979-10-04', NULL),
(NULL, 'f', '1975-09-19', '2008-07-06 16:08:10', 8),
(NULL, 'english', '1989-06-02', '1996-05-25 02:53:21', 8),
(9, 'j', '1993-10-28', '1997-10-17 02:34:43', 0),
(0, 'english', '1976-01-23 17:00:00', '2028-01-03 00:39:10', 0),
(NULL, 'j', '1987-02-26', '1984-07-08', NULL),
(5, 'z', '2014-07-27 10:07:37', '1972-03-25 07:26:12', NULL),
(5, 'english', '1993-08-27 03:38:19', '1996-05-08 16:29:32', NULL);
DROP TABLE IF EXISTS mysql_4;
CREATE TABLE `mysql_4` (
`col_int` int,
`col_varchar` varchar(2000),
`col_date` date,
`col_timestamp` timestamp,
`col_numeric` numeric,
KEY k2 (`col_int`,`col_date`),
KEY k1 (`col_numeric`)
);
INSERT INTO mysql_4 (col_int,col_varchar,col_date,col_timestamp,col_numeric) VALUES
(5, 'n', '1992-02-26 03:05:58', '2026-12-25 21:55:18', NULL),
(2, 'lpgpms', '2031-02-04', '1995-04-06 01:13:48', NULL),
(0, 'english', '2004-03-04 20:53:55', '2010-02-04', 7),
(7, NULL, '1992-07-19 13:27:44', '1984-02-08', 0),
(1, 'pgp', '1990-11-09 10:03:15', '1973-03-13', NULL),
(0, 'english', '2031-06-13 19:40:56', '1988-09-12', NULL),
(NULL, 'g', '2009-11-24 18:07:47', '1980-11-11', 4),
(7, 'pmss', '2019-01-26', '1994-01-11 20:46:51', 0),
(0, 'english', '2000-04-07 23:29:36', '1987-05-17 02:20:14', 0),
(7, 'mss', '2032-10-10 22:42:07', '2007-09-16', 6);
DROP TABLE IF EXISTS tidb_tmp1;
CREATE TABLE tidb_tmp1 (
COL_INT INT,
COL_VARCHAR VARCHAR(2000),
COL_DATE DATE,
COL_TIMESTAMP TIMESTAMP,
COL_NUMERIC NUMERIC
) ENGINE=InnoDB;
INSERT INTO tidb_tmp1 SELECT col_int, col_varchar, col_date, col_timestamp, col_numeric FROM mysql_4;
DROP TABLE IF EXISTS tidb_tmp6;
CREATE TABLE tidb_tmp6 (
COL_INT INT,
COL_VARCHAR VARCHAR(2000),
COL_DATE DATE,
COL_TIMESTAMP TIMESTAMP,
COL_NUMERIC NUMERIC
) SHARD_ROW_ID_BITS = 4 PRE_SPLIT_REGIONS = 2;
INSERT INTO tidb_tmp6 SELECT COL_INT, COL_VARCHAR, COL_DATE, COL_TIMESTAMP, COL_NUMERIC FROM tidb_tmp1;
DROP TABLE IF EXISTS tidb_tmp3;
CREATE TABLE tidb_tmp3 (
COL_INT INT,
COL_VARCHAR VARCHAR(2000),
COL_DATE DATE,
COL_TIMESTAMP TIMESTAMP,
COL_NUMERIC NUMERIC
) SHARD_ROW_ID_BITS = 5;
INSERT INTO tidb_tmp3 SELECT COL_INT, COL_VARCHAR, COL_DATE, COL_TIMESTAMP, COL_NUMERIC FROM tidb_tmp6;
DROP TABLE IF EXISTS tidb_tmp2;
CREATE TABLE tidb_tmp2 (
COL_INT INT,
COL_VARCHAR VARCHAR(2000),
COL_DATE DATE,
COL_TIMESTAMP TIMESTAMP,
COL_NUMERIC NUMERIC
) SHARD_ROW_ID_BITS = 4 PRE_SPLIT_REGIONS = 2;
INSERT INTO tidb_tmp2 SELECT col_int, col_varchar, col_date, col_timestamp, col_numeric FROM mysql_2;
DROP TEMPORARY TABLE IF EXISTS tidb_local_temp;
CREATE TEMPORARY TABLE tidb_local_temp (
COL_INT INT,
COL_VARCHAR VARCHAR(2000),
COL_DATE DATE,
COL_TIMESTAMP TIMESTAMP,
COL_NUMERIC NUMERIC
);
INSERT INTO tidb_local_temp SELECT COL_INT, COL_VARCHAR, COL_DATE, COL_TIMESTAMP, COL_NUMERIC FROM tidb_tmp2;
----: runtime error: invalid memory address or nil pointer dereference
DELETE FROM t11 USING mysql_2 t11
WHERE NOT EXISTS (
SELECT col_numeric
FROM (
SELECT DISTINCT a2.COL_INT, a1.COL_VARCHAR, a1.COL_DATE, a2.COL_TIMESTAMP, a2.COL_NUMERIC
FROM tidb_tmp6 a1
JOIN (
SELECT a2.COL_INT, a1.COL_VARCHAR, a2.COL_DATE, a2.COL_TIMESTAMP, a1.COL_NUMERIC
FROM (
mysql_4 a1
RIGHT OUTER JOIN tidb_tmp3 a2
ON ( t11.col_varchar != a2.col_varchar AND a2.col_date NOT IN ( '1988-07-03', '2027-07-07' ) )
)
LEFT OUTER JOIN tidb_tmp3 a3
ON ( a2.col_int = a3.col_int AND a1.col_int != 14719 )
WHERE a1.col_numeric IN ( '0.128173828125','0.224761962890625','0.525970458984375','0.417617797851562','0.290435791015625' )
GROUP BY a2.COL_INT, a1.COL_VARCHAR, a2.COL_DATE, a2.COL_TIMESTAMP, a1.COL_NUMERIC
HAVING ( t11.col_int <= 23493 ) AND ( t11.col_numeric = 0.00000000123456789123456789123456789123456789123456789 )
) a2
ON (NOT ( a1.col_int = 35404 ) AND t11.col_int <= 12212 )
WHERE ( t11.col_timestamp IS NOT NULL )
OR ( t11.col_int NOT BETWEEN 3 AND 3 + 10 )
AND a2.col_timestamp NOT BETWEEN '1977-03-11 15:46:48.008133' AND '1977-03-11 15:46:48.008133' + interval '1' day
UNION
SELECT a2.COL_INT, a1.COL_VARCHAR, a1.COL_DATE, a2.COL_TIMESTAMP, a1.COL_NUMERIC
FROM tidb_local_temp a1
JOIN tidb_tmp1 a2
ON (a1.col_int = a2.col_int +1 AND a1.col_varchar = t11.col_varchar )
WHERE t11.col_int IN ( 8, 7, 7 )
) mm
)
AND t11.col_timestamp NOT IN ( '2015-11-13 22:23:24.002835', '2023-12-18 10:51:00.020659','1981-08-12 01:24:24.030405' )
IS UNKNOWN;
```
### 3. What did you see instead (Required)
```
mysql> DELETE FROM t11 USING mysql_2 t11
-> WHERE NOT EXISTS (
-> SELECT col_numeric
-> FROM (
-> SELECT DISTINCT a2.COL_INT, a1.COL_VARCHAR, a1.COL_DATE, a2.COL_TIMESTAMP, a2.COL_NUMERIC
-> FROM tidb_tmp6 a1
-> JOIN (
-> SELECT a2.COL_INT, a1.COL_VARCHAR, a2.COL_DATE, a2.COL_TIMESTAMP, a1.COL_NUMERIC
-> FROM (
-> mysql_4 a1
-> RIGHT OUTER JOIN tidb_tmp3 a2
-> ON ( t11.col_varchar != a2.col_varchar AND a2.col_date NOT IN ( '1988-07-03', '2027-07-07' ) )
-> )
-> LEFT OUTER JOIN tidb_tmp3 a3
-> ON ( a2.col_int = a3.col_int AND a1.col_int != 14719 )
-> WHERE a1.col_numeric IN ( '0.128173828125','0.224761962890625','0.525970458984375','0.417617797851562','0.290435791015625' )
-> GROUP BY a2.COL_INT, a1.COL_VARCHAR, a2.COL_DATE, a2.COL_TIMESTAMP, a1.COL_NUMERIC
-> HAVING ( t11.col_int <= 23493 ) AND ( t11.col_numeric = 0.00000000123456789123456789123456789123456789123456789 )
-> ) a2
-> ON (NOT ( a1.col_int = 35404 ) AND t11.col_int <= 12212 )
-> WHERE ( t11.col_timestamp IS NOT NULL )
-> OR ( t11.col_int NOT BETWEEN 3 AND 3 + 10 )
-> AND a2.col_timestamp NOT BETWEEN '1977-03-11 15:46:48.008133' AND '1977-03-11 15:46:48.008133' + interval '1' day
-> UNION
-> SELECT a2.COL_INT, a1.COL_VARCHAR, a1.COL_DATE, a2.COL_TIMESTAMP, a1.COL_NUMERIC
-> FROM tidb_local_temp a1
-> JOIN tidb_tmp1 a2
-> ON (a1.col_int = a2.col_int +1 AND a1.col_varchar = t11.col_varchar )
-> WHERE t11.col_int IN ( 8, 7, 7 )
-> ) mm
-> )
-> AND t11.col_timestamp NOT IN ( '2015-11-13 22:23:24.002835', '2023-12-18 10:51:00.020659','1981-08-12 01:24:24.030405' )
-> IS UNKNOWN;
ERROR 1105 (HY000): runtime error: invalid memory address or nil pointer dereference
mysql>
mysql> select version();
+------------------------------------------+
| version() |
+------------------------------------------+
| 8.0.11-TiDB-v8.4.0-this-is-a-placeholder |
+------------------------------------------+
1 row in set (0.00 sec)
```
### 4. What is your TiDB version? (Required)
```
mysql> select tidb_version();
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tidb_version() |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Release Version: v8.4.0-this-is-a-placeholder
Edition: Community
Git Commit Hash: None
Git Branch: None
UTC Build Time: None
GoVersion: go1.25.6
Race Enabled: false
Check Table Before Drop: false
Store: unistore
Kernel Type: Classic |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
```
Contributor guide
Assessment
This issue has not been assessed yet.