Bug #84338 Assertion `thd->lex->current_select() == unit->first_select()' with delete
Submitted: 26 Dec 2016 9:21 Modified: 11 Jan 2017 14:43
Reporter: Vinay Fisrekar Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Optimizer Severity:S3 (Non-critical)
Version:8.0 OS:Any
Assigned to: CPU Architecture:Any

[26 Dec 2016 9:21] Vinay Fisrekar
Description:
 Assertion `thd->lex->current_select() == unit->first_select()' during DELETE which has join and subquery in where condition.

2016-12-26T09:12:14.921998Z 0 [Note] /log/RQG/vfisreka/test/mysql-trunk/bin/mysqld-debug: ready for connections.
Version: '8.0.1-dmr-enterprise-commercial-advanced-debug-log'  socket: '/log/RQG/vfisreka/test/mysql-trunk/mysql-test/var/tmp/mysqld.1.sock'  port: 13000  MySQL Enterprise Server - Advanced Edition Debug (Commercial)
mysqld-debug: /export/home/pb2/build/sb_0-21672038-1482510134.23/mysqlcom-pro-8.0.1-dmr/sql/sql_delete.cc:1051: virtual bool Query_result_delete::send_data(List<Item>&): Assertion `thd->lex->current_select() == unit->first_select()' failed.
09:12:15 UTC - mysqld got signal 6 ;

#8  0x00000000018dffe3 in Query_result_delete::send_data (this=0x7f6890209948, values=...) at /export/home/pb2/build/sb_0-21672038-1482510134.23/mysqlcom-pro-8.0.1-dmr/sql/sql_delete.cc:1051
#9  0x00000000018ed54f in end_send (join=0x7f6890242008, qep_tab=0x7f6890243258, end_of_records=false) at /export/home/pb2/build/sb_0-21672038-1482510134.23/mysqlcom-pro-8.0.1-dmr/sql/sql_executor.cc:3162
#10 0x00000000018ea27c in evaluate_join_record (join=0x7f6890242008, qep_tab=0x7f68902430d8) at /export/home/pb2/build/sb_0-21672038-1482510134.23/mysqlcom-pro-8.0.1-dmr/sql/sql_executor.cc:1869
#11 0x00000000018e96a4 in sub_select (join=0x7f6890242008, qep_tab=0x7f68902430d8, end_of_records=false) at /export/home/pb2/build/sb_0-21672038-1482510134.23/mysqlcom-pro-8.0.1-dmr/sql/sql_executor.cc:1523
#12 0x00000000018ea27c in evaluate_join_record (join=0x7f6890242008, qep_tab=0x7f6890242f58) at /export/home/pb2/build/sb_0-21672038-1482510134.23/mysqlcom-pro-8.0.1-dmr/sql/sql_executor.cc:1869
#13 0x00000000018e96a4 in sub_select (join=0x7f6890242008, qep_tab=0x7f6890242f58, end_of_records=false) at /export/home/pb2/build/sb_0-21672038-1482510134.23/mysqlcom-pro-8.0.1-dmr/sql/sql_executor.cc:1523
#14 0x00000000018e8e01 in do_select (join=0x7f6890242008) at /export/home/pb2/build/sb_0-21672038-1482510134.23/mysqlcom-pro-8.0.1-dmr/sql/sql_executor.cc:1155
#15 0x00000000018e66c7 in JOIN::exec (this=0x7f6890242008) at /export/home/pb2/build/sb_0-21672038-1482510134.23/mysqlcom-pro-8.0.1-dmr/sql/sql_executor.cc:258
#16 0x0000000001984e00 in Sql_cmd_dml::execute_inner (this=0x7f6890209918, thd=0x7f6890252a20) at /export/home/pb2/build/sb_0-21672038-1482510134.23/mysqlcom-pro-8.0.1-dmr/sql/sql_select.cc:735
#17 0x00000000018df665 in Sql_cmd_delete::execute_inner (this=0x7f6890209918, thd=0x7f6890252a20) at /export/home/pb2/build/sb_0-21672038-1482510134.23/mysqlcom-pro-8.0.1-dmr/sql/sql_delete.cc:873
#18 0x0000000001984915 in Sql_cmd_dml::execute (this=0x7f6890209918, thd=0x7f6890252a20) at /export/home/pb2/build/sb_0-21672038-1482510134.23/mysqlcom-pro-8.0.1-dmr/sql/sql_select.cc:626
#19 0x000000000193422a in mysql_execute_command (thd=0x7f6890252a20, first_level=true) at /export/home/pb2/build/sb_0-21672038-1482510134.23/mysqlcom-pro-8.0.1-dmr/sql/sql_parse.cc:3271
#20 0x00000000019396c7 in mysql_parse (thd=0x7f6890252a20, parser_state=0x7f69103325d0) at /export/home/pb2/build/sb_0-21672038-1482510134.23/mysqlcom-pro-8.0.1-dmr/sql/sql_parse.cc:5226

How to repeat:
- Create bug.test for following text
- Run , ./mtr --debug-server bug

#--------Test---------
--disable_warnings
DROP TABLE IF EXISTS t1,t2;
--enable_warnings

CREATE TABLE t1 (a INT, b CHAR(8), pk INT AUTO_INCREMENT PRIMARY KEY) ENGINE=innodb;

INSERT INTO t1 (a,b) VALUES (10000,'foobar'),(1,'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e');
INSERT INTO t1 (a,b) SELECT a, b FROM t1;

CREATE TABLE t2 (pk INT AUTO_INCREMENT PRIMARY KEY, c CHAR(8), d INT) ENGINE=innodb;

INSERT INTO t2 (c,d) SELECT b, a FROM t1;
--sorted_result
SELECT a,b FROM t1;
--sorted_result
SELECT c,d FROM t2;

DELETE IGNORE FROM t1 WHERE b IS NOT NULL ORDER BY a LIMIT 1;
--sorted_result
SELECT a,b FROM t1;

DELETE IGNORE t1.*, t2.* FROM t1, t2 WHERE c < b OR a != ( SELECT 1 UNION SELECT 2 );
--sorted_result
SELECT a,b FROM t1;
--sorted_result
SELECT c,d FROM t2;

# Cleanup
DROP TABLE t1, t2;
[11 Jan 2017 14:43] Paul DuBois
Posted by developer:
 
Fixed in 8.0.1.

Bug affects no released version. No changelog entry needed.