Bug #88273 Assertion `has_error == thd->get_stmt_da()->is_error()' failed.
Submitted: 28 Oct 2017 4:14 Modified: 1 Mar 2018 17:00
Reporter: Roel Van de Paar Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: DML Severity:S6 (Debug Builds)
Version:8.0.3 RC OS:Any
Assigned to: CPU Architecture:Any
Tags: debug

[28 Oct 2017 4:14] Roel Van de Paar
Description:
2017-10-28T03:45:07.663531Z 0 [Note] /sda/MS201017-mysql-8.0.3-rc-linux-x86_64-debug/bin/mysqld: ready for connections. Version: '8.0.3-rc-debug-log'  socket: '/sda/MS201017-mysql-8.0.3-rc-linux-x86_64-debug/socket.sock'  port: 16654  MySQL Community Server (GPL)
mysqld: /git/mysql-server_dbg/sql/sql_insert.cc:673: virtual bool Sql_cmd_insert_values::execute_inner(THD*): Assertion `has_error == thd->get_stmt_da()->is_error()' failed.
03:45:28 UTC - mysqld got signal 6 ;

Core was generated by `/sda/MS201017-mysql-8.0.3-rc-linux-x86_64-debug/bin/mysqld --no-defaults --core'.
Program terminated with signal 6, Aborted.
#0  0x00007fa443fd99b1 in __pthread_kill (threadid=<optimized out>, signo=6) at ../nptl/sysdeps/unix/sysv/linux/pthread_kill.c:61
61	  val = INTERNAL_SYSCALL (tgkill, err, 3, THREAD_GETMEM (THREAD_SELF, pid),
(gdb) bt
#0  0x00007fa443fd99b1 in __pthread_kill (threadid=<optimized out>, signo=6) at ../nptl/sysdeps/unix/sysv/linux/pthread_kill.c:61
#1  0x000000000369e428 in my_write_core (sig=6) at /git/mysql-server_dbg/mysys/stacktrace.cc:291
#2  0x000000000286b8f6 in handle_fatal_signal (sig=6) at /git/mysql-server_dbg/sql/signal_handler.cc:234
#3  <signal handler called>
#4  0x00007fa4422f11f7 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#5  0x00007fa4422f28e8 in __GI_abort () at abort.c:90
#6  0x00007fa4422ea266 in __assert_fail_base (fmt=0x7fa44243ce68 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", 
    assertion=assertion@entry=0x44a5350 "has_error == thd->get_stmt_da()->is_error()", 
    file=file@entry=0x44a5170 "/git/mysql-server_dbg/sql/sql_insert.cc", line=line@entry=673, 
    function=function@entry=0x44a6140 <Sql_cmd_insert_values::execute_inner(THD*)::__PRETTY_FUNCTION__> "virtual bool Sql_cmd_insert_values::execute_inner(THD*)") at assert.c:92
#7  0x00007fa4422ea312 in __GI___assert_fail (assertion=0x44a5350 "has_error == thd->get_stmt_da()->is_error()", 
    file=0x44a5170 "/git/mysql-server_dbg/sql/sql_insert.cc", line=673, 
    function=0x44a6140 <Sql_cmd_insert_values::execute_inner(THD*)::__PRETTY_FUNCTION__> "virtual bool Sql_cmd_insert_values::execute_inner(THD*)") at assert.c:101
#8  0x0000000002c10ca8 in Sql_cmd_insert_values::execute_inner (this=0x7fa3fbc30210, thd=0x7fa3fbc19000)
    at /git/mysql-server_dbg/sql/sql_insert.cc:673
#9  0x0000000002512627 in Sql_cmd_dml::execute (this=0x7fa3fbc30210, thd=0x7fa3fbc19000) at /git/mysql-server_dbg/sql/sql_select.cc:605
#10 0x00000000024bad4d in mysql_execute_command (thd=0x7fa3fbc19000, first_level=true) at /git/mysql-server_dbg/sql/sql_parse.cc:3441
#11 0x00000000024c042b in mysql_parse (thd=0x7fa3fbc19000, parser_state=0x7fa44457f2f0) at /git/mysql-server_dbg/sql/sql_parse.cc:5414
#12 0x00000000024b68e7 in dispatch_command (thd=0x7fa3fbc19000, com_data=0x7fa44457fb80, command=COM_QUERY)
    at /git/mysql-server_dbg/sql/sql_parse.cc:1708
#13 0x00000000024b53f5 in do_command (thd=0x7fa3fbc19000) at /git/mysql-server_dbg/sql/sql_parse.cc:1291
#14 0x000000000285b2d6 in handle_connection (arg=0x7fa4306eb3c0)
    at /git/mysql-server_dbg/sql/conn_handler/connection_handler_per_thread.cc:328
#15 0x00000000036ec54d in pfs_spawn_thread (arg=0x7fa430791620) at /git/mysql-server_dbg/storage/perfschema/pfs.cc:2985
#16 0x00007fa443fd4e25 in start_thread (arg=0x7fa444580700) at pthread_create.c:308
#17 0x00007fa4423b434d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113

How to repeat:
CREATE DATABASE test;
USE test;
SET sql_mode = 'traditional';
analyze table t9;
CREATE TABLE t1 (c1 DOUBLE NOT NULL AUTO_INCREMENT, c2 INT, PRIMARY KEY (c1)) ENGINE=InnoDB;
INSERT INTO t1 VALUES (0x7FFFFFFFFFFFFFFD, "2");
[28 Oct 2017 18:21] MySQL Verification Team
Thank you for the bug report. Verified as described.
[11 Jan 2018 12:46] Sivert Sørumgård
Posted by developer:
 
A warning is set in Field_double::val_int() and promoted to error in strict mode. On 5.7, a subsequent check for THD::is_error() in sql_insert.cc caught this correctly. On 8.0, this code is modified. Thus, a fix is to check for 'THD::is_error()' after calling 'table->next_number_field->val_int()'.
[1 Mar 2018 17:00] Paul DuBois
Posted by developer:
 
Fixed in 8.0.5.

In strict SQL mode, assignment of invalid values to AUTO_INCREMENT
columns could be handled incorrectly, resulting in an assertion being
raised.
[6 Mar 2019 14:20] Hrvoje Matijakovic
I'm still able to reproduce this on 8.0.15 with a bit different sql:

# mysqld options required for replay:  --sql_mode=
CREATE DATABASE test;
USE test;
create table t5(cint int,c1 date)engine=''partition by list(cint) subpartition by hash(year(c1)-1990) subpartitions 2 (partition p0 values in (1,2,3,4,5,6,7,8,9,10),partition p1 values in (11,12,13,14,15,16,17,18,19,20),partition p2 values in (21,22,23,24,25,26,27,28,29,30),partition p3 values in (31,32,33,34,35,36,37,38,39,40),partition p4 values in (41,42,43,44,45,46,47,48,49,50),partition p5 values in (51,52,53,54,55,56,57,58,59,60));
INSERT INTO t5 VALUES(2,'master only');

gdb:
(gdb) bt
+bt
#0  0x00007f97c08549d1 in __pthread_kill (threadid=<optimized out>, signo=6) at ../nptl/sysdeps/unix/sysv/linux/pthread_kill.c:59
#1  0x0000000004406705 in my_write_core (sig=6) at /sdc/MS-8.0.15_dbg/mysys/stacktrace.cc:278
#2  0x00000000031b298c in handle_fatal_signal (sig=6) at /sdc/MS-8.0.15_dbg/sql/signal_handler.cc:249
#3  <signal handler called>
#4  0x00007f97be958207 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:55
#5  0x00007f97be9598f8 in __GI_abort () at abort.c:90
#6  0x00007f97be951026 in __assert_fail_base (fmt=0x7f97beaabea0 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x5646e18 "has_error == thd->get_stmt_da()->is_error()", file=file@entry=0x5646c38 "/sdc/MS-8.0.15_dbg/sql/sql_insert.cc", line=line@entry=619, function=function@entry=0x5647aa0 <Sql_cmd_insert_values::execute_inner(THD*)::__PRETTY_FUNCTION__> "virtual bool Sql_cmd_insert_values::execute_inner(THD*)") at assert.c:92
#7  0x00007f97be9510d2 in __GI___assert_fail (assertion=0x5646e18 "has_error == thd->get_stmt_da()->is_error()", file=0x5646c38 "/sdc/MS-8.0.15_dbg/sql/sql_insert.cc", line=619, function=0x5647aa0 <Sql_cmd_insert_values::execute_inner(THD*)::__PRETTY_FUNCTION__> "virtual bool Sql_cmd_insert_values::execute_inner(THD*)") at assert.c:101
#8  0x000000000358845d in Sql_cmd_insert_values::execute_inner (this=0x7f976946a288, thd=0x7f9769419000) at /sdc/MS-8.0.15_dbg/sql/sql_insert.cc:619
#9  0x000000000306a73c in Sql_cmd_dml::execute (this=0x7f976946a288, thd=0x7f9769419000) at /sdc/MS-8.0.15_dbg/sql/sql_select.cc:593
#10 0x00000000030083bb in mysql_execute_command (thd=0x7f9769419000, first_level=true) at /sdc/MS-8.0.15_dbg/sql/sql_parse.cc:3375
#11 0x000000000300da08 in mysql_parse (thd=0x7f9769419000, parser_state=0x7f97bd1f9b20, force_primary_storage_engine=false) at /sdc/MS-8.0.15_dbg/sql/sql_parse.cc:5105
#12 0x0000000003003aec in dispatch_command (thd=0x7f9769419000, com_data=0x7f97bd1fab90, command=COM_QUERY) at /sdc/MS-8.0.15_dbg/sql/sql_parse.cc:1715
#13 0x00000000030020b0 in do_command (thd=0x7f9769419000) at /sdc/MS-8.0.15_dbg/sql/sql_parse.cc:1263
#14 0x000000000319ea92 in handle_connection (arg=0x7f97a96be240) at /sdc/MS-8.0.15_dbg/sql/conn_handler/connection_handler_per_thread.cc:305
#15 0x0000000004af9c8a in pfs_spawn_thread (arg=0x7f97bc81b420) at /sdc/MS-8.0.15_dbg/storage/perfschema/pfs.cc:2836
#16 0x00007f97c084fdd5 in start_thread (arg=0x7f97bd1fb700) at pthread_create.c:307
#17 0x00007f97bea1fead in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111

Can't repeat on 5.7.25