Bug #6365 | Server crash with NOT IN('', NULL) in where clause | ||
---|---|---|---|
Submitted: | 1 Nov 2004 15:21 | Modified: | 6 Nov 2004 6:38 |
Reporter: | Sebastien C | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server | Severity: | S1 (Critical) |
Version: | 4.1.7/4.1.8 BK source | OS: | Windows (Windows/Linux) |
Assigned to: | Igor Babaev | CPU Architecture: | Any |
[1 Nov 2004 15:21]
Sebastien C
[1 Nov 2004 15:23]
Sebastien C
Added Version and OS to bug header for information.
[1 Nov 2004 15:37]
MySQL Verification Team
Could you please provide dump of tables for to test the offended query ? You can upload it at: ftp://ftp.mysql.com/pub/mysql/upload Thanks in advance
[1 Nov 2004 16:24]
Sebastien C
Thank you for your prompt answer. I cannot send you the original data as it is large (12 GB) and confidential. The good news is that I have been able to reproduce the crash with the following 3 SQL lines: mysql> create temporary table test ( `JOBNAME` char(64) NOT NULL default '', `STARTRUN` datetime default NULL ); Query OK, 0 rows affected (0.01 sec) mysql> insert into test values ( 'j1', "2004-09-10 12:23:34" ); Query OK, 1 row affected (0.00 sec) mysql> select jobname,startrun from test where 1; +---------+---------------------+ | jobname | startrun | +---------+---------------------+ | j1 | 2004-09-10 12:23:34 | +---------+---------------------+ 1 row in set (0.00 sec) And now the crash: mysql> select jobname,startrun from test where startrun NOT IN('', NULL) ORDER BY startrun; ERROR 2013: Lost connection to MySQL server during query Thank you!
[1 Nov 2004 16:43]
MySQL Verification Team
Thank you the test case I was able to repeat. I will test on Linux with latest Bk source. Call Stack: > mysqld.exe!String::charset() Line 81 + 0xa C++ mysqld.exe!Item_func_in::fix_length_and_dec() Line 1808 + 0x12 C++ mysqld.exe!Item_func::fix_fields(THD * thd=0x00e6a078, st_table_list * tables=0x00e5f7d0, Item * * ref=0x00e5f9b4) Line 240 C++ mysqld.exe!Item_func::fix_fields(THD * thd=0x00e6a078, st_table_list * tables=0x00e5f7d0, Item * * ref=0x00e60504) Line 227 + 0x2a C++ mysqld.exe!setup_conds(THD * thd=0x00e6a078, st_table_list * tables=0x00e5f7d0, Item * * conds=0x00e60504) Line 2596 + 0x2a C++ mysqld.exe!setup_without_group(THD * thd=0x00e6a078, Item * * ref_pointer_array=0x00e60540, st_table_list * tables=0x00e5f7d0, List<Item> & fields={...}, List<Item> & all_fields={...}, Item * * conds=0x00e60504, st_order * order=0x00e5faf8, st_order * group=0x00000000, int * hidden_group_fields=0x00e6047c) Line 229 + 0x11 C++ mysqld.exe!JOIN::prepare(Item * * * rref_pointer_array=0x00e6a2ac, st_table_list * tables_init=0x00e5f7d0, unsigned int wild_num=0, Item * conds_init=0x00e5f970, unsigned int og_num=1, st_order * order_init=0x00e5faf8, st_order * group_init=0x00000000, Item * having_init=0x00000000, st_order * proc_param_init=0x00000000, st_select_lex * select_lex_arg=0x00e6a1c0, st_select_lex_unit * unit_arg=0x00e6a0c4) Line 278 + 0x112 C++ mysqld.exe!mysql_select(THD * thd=0x00e6a078, Item * * * rref_pointer_array=0x00e6a2ac, st_table_list * tables=0x00e5f7d0, unsigned int wild_num=0, List<Item> & fields={...}, Item * conds=0x00e5f970, unsigned int og_num=1, st_order * order=0x00e5faf8, st_order * group=0x00000000, Item * having=0x00000000, st_order * proc_param=0x00000000, unsigned long select_options=8669696, select_result * result=0x00e5fb30, st_select_lex_unit * unit=0x00e6a0c4, st_select_lex * select_lex=0x00e6a1c0) Line 1564 + 0x34 C++ mysqld.exe!handle_select(THD * thd=0x00e6a078, st_lex * lex=0x00e6a0b8, select_result * result=0x00e5fb30) Line 193 + 0x87 C++ mysqld.exe!mysql_execute_command(THD * thd=0x00e6a078) Line 2003 + 0x11 C++ mysqld.exe!mysql_parse(THD * thd=0x00e6a078, char * inBuf=0x00e5f630, unsigned int length=83) Line 4050 + 0x9 C++ mysqld.exe!dispatch_command(enum_server_command command=COM_QUERY, THD * thd=0x00e6a078, char * packet=0x02ebd439, unsigned int packet_length=84) Line 1463 + 0x1d C++ mysqld.exe!do_command(THD * thd=0x00e6a078) Line 1278 + 0x31 C++ mysqld.exe!handle_one_connection(void * arg=0x00e6a078) Line 1022 + 0x9 C++ mysqld.exe!pthread_start(void * param=0x02eb5ff0) Line 63 + 0x7 C mysqld.exe!_threadstart(void * ptd=0x02ebd878) Line 173 + 0xd C kernel32.dll!7c80b50b() kernel32.dll!7c8399f3()
[1 Nov 2004 18:45]
MySQL Verification Team
Tested also with latest BK 4.1 source tree on Linux Slackware: miguel@hegel:~/dbs/4.1$ bin/mysql -uroot test Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 to server version: 4.1.8-debug-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> create temporary table test ( `JOBNAME` char(64) NOT NULL default '', -> `STARTRUN` datetime default NULL ); Query OK, 0 rows affected (0.04 sec) mysql> insert into test values ( 'j1', "2004-09-10 12:23:34" ); Query OK, 1 row affected (0.01 sec) mysql> select jobname,startrun from test where 1; +---------+---------------------+ | jobname | startrun | +---------+---------------------+ | j1 | 2004-09-10 12:23:34 | +---------+---------------------+ 1 row in set (0.00 sec) mysql> select jobname,startrun from test where startrun NOT IN('', NULL) ORDER -> BY startrun; ERROR 2013 (HY000): Lost connection to MySQL server during query mysql>
[2 Nov 2004 13:42]
Marko Mäkelä
This bug is also occurs with MyISAM tables: create temporary table test(jobname char(64) not null default '', startrun datetime default null) engine=myisam; select jobname,startrun from test where startrun not in('',null) order by startrun;
[3 Nov 2004 18:47]
Sebastien C
Edited bug header again to make more explicit and useful in searches
[6 Nov 2004 6:38]
Igor Babaev
Actually we had a crash for any IN predicate of the form 'f IN (...,NULL,...)' if column f had been declared to be of the character set different from the default character set (e.g. f was declared to be of 'binary' character set, while the default character set was latin1). I built a simpler case than that was reported and added it to the tests in fun_in.test. ChangeSet 1.2090 04/11/04 20:39:52 igor@rurik.mysql.com +3 -0 func_in.result, func_in.test: Added a case for bug #6365. item_cmpfunc.cc: Fixed bug #6365 : Server crashed when list of values in IN predicate contains NULL while the tested field is of the character type and not of the default set; e.g. when f in 'f IN (NULL,'aa') belongs to binary character set, while the default character set is latin1.