| Bug #30736 | Row Size Too Large Error Creating a Table and Inserting Data | ||
|---|---|---|---|
| Submitted: | 30 Aug 2007 21:29 | Modified: | 9 Nov 2007 0:01 |
| Reporter: | Charles Something | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server | Severity: | S2 (Serious) |
| Version: | 5.0bk, 5.1bk | OS: | Linux (Debian Sid, but also Fedora Core 5, and Windows 2003) |
| Assigned to: | Alexander Nozdrin | CPU Architecture: | Any |
| Tags: | 1118, CREATE TABLE, error, row size too large, SELECT | ||
[30 Aug 2007 21:29]
Charles Something
[30 Aug 2007 23:12]
Hartmut Holzgraefe
on
[31 Aug 2007 0:14]
Hartmut Holzgraefe
with linux debug builds the code above crashes
5.0bk/5.1bk with the following backtrace:
#0 0xffffe410 in __kernel_vsyscall ()
#1 0x4003b8b8 in pthread_kill () from /lib/tls/libpthread.so.0
#2 0x0840b322 in write_core (sig=6) at stacktrace.c:240
#3 0x0827ad05 in handle_segfault (sig=6) at mysqld.cc:2278
#4 <signal handler called>
#5 0xffffe410 in __kernel_vsyscall ()
#6 0x400f3541 in raise () from /lib/tls/libc.so.6
#7 0x400f4dbb in abort () from /lib/tls/libc.so.6
#8 0x400ec925 in __assert_fail () from /lib/tls/libc.so.6
#9 0x086ba257 in decimal_bin_size (precision=10, scale=31) at decimal.c:1462
#10 0x081dd48a in my_decimal_get_binary_size (precision=10, scale=31) at my_decimal.h:196
#11 0x08259fd9 in Create_field::create_length_to_internal_length (this=0x9081b30)
at field.cc:9166
#12 0x083ad738 in mysql_prepare_create_table (thd=0x9069810, create_info=0x42720670,
alter_info=0x42720b20, tmp_table=false, db_options=0x4271f694, file=0x9089ba0,
key_info_buffer=0x4271f68c, key_count=0x4271f690, select_field_count=4)
at sql_table.cc:2383
#13 0x083afde3 in mysql_create_table_no_lock (thd=0x9069810, db=0x907a2e0 "test",
table_name=0x907a0e8 "f", create_info=0x42720670, alter_info=0x42720b20,
internal_tmp_table=false, select_field_count=4) at sql_table.cc:3310
#14 0x083194de in create_table_from_items (thd=0x9069810, create_info=0x42720670,
create_table=0x907a110, alter_info=0x42720b20, items=0x906a968, lock=0x9069868,
hooks=0x427200ac) at sql_insert.cc:3345
#15 0x08319a56 in select_create::prepare (this=0x907ff80, values=@0x906a968, u=0x906a66c)
at sql_insert.cc:3489
#16 0x0830686c in JOIN::prepare (this=0x9080008, rref_pointer_array=0x906a9d8,
tables_init=0x907ae88, wild_num=0, conds_init=0x907bab0, og_num=1, order_init=0x0,
group_init=0x907bcd0, having_init=0x0, proc_param_init=0x0, select_lex_arg=0x906a8d4,
unit_arg=0x906a66c) at sql_select.cc:609
#17 0x0830e71e in mysql_select (thd=0x9069810, rref_pointer_array=0x906a9d8,
tables=0x907ae88, wild_num=0, fields=@0x906a968, conds=0x907bab0, og_num=1, order=0x0,
group=0x907bcd0, having=0x0, proc_param=0x0, select_options=2416200192,
result=0x907ff80, unit=0x906a66c, select_lex=0x906a8d4) at sql_select.cc:2253
#18 0x0830eaf7 in handle_select (thd=0x9069810, lex=0x906a610, result=0x907ff80,
setup_tables_done_option=0) at sql_select.cc:262
#19 0x0828ff19 in mysql_execute_command (thd=0x9069810) at sql_parse.cc:2291
#20 0x08297b3d in mysql_parse (thd=0x9069810,
inBuf=0x9079d50 "CREATE TEMPORARY TABLE IF NOT EXISTS `f` \n(`stocknum` INT(10), `totalsold` DECIMAL(10, 2), `quantity` FLOAT, `cost` DECIMAL(10, 2),\nKEY(`stocknum`)) \nSELECT `a`.`stocknum` AS `stocknum`, SUM(`b`.`pric"..., length=418, found_semicolon=0x42721310)
#21 0x08298661 in dispatch_command (command=COM_QUERY, thd=0x9069810,
packet=0x9071cf1 "CREATE TEMPORARY TABLE IF NOT EXISTS `f` \n(`stocknum` INT(10), `totalsold` DECIMAL(10, 2), `quantity` FLOAT, `cost` DECIMAL(10, 2),\nKEY(`stocknum`)) \nSELECT `a`.`stocknum` AS `stocknum`, SUM(`b`.`pric"..., packet_length=419) at sql_parse.cc:958
#22 0x082997ef in do_command (thd=0x9069810) at sql_parse.cc:717
#23 0x0828766f in handle_one_connection (arg=0x9069810) at sql_connect.cc:1094
#24 0x40038297 in start_thread () from /lib/tls/libpthread.so.0
#25 0x4018a37e in clone () from /lib/tls/libc.so.6
#26 0x42721bb0 in ?? ()
[12 Oct 2007 14:17]
Konstantin Osipov
Assertion failure, crash -> p1
[23 Oct 2007 14:02]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/36144 ChangeSet@1.2543, 2007-10-23 18:03:51+04:00, anozdrin@station. +3 -0 Patch for BUG#30736: Row Size Too Large Error Creating a Table and Inserting Data. The problem was that under some circumstances Field class was not properly initialized before calling create_length_to_internal_length() function, which led to assert failure. The fix is to do the proper initialization. The user-visible problem was that under some circumstances CREATE TABLE ... SELECT statement crashed the server or led to wrong error message (wrong results).
[24 Oct 2007 7:55]
Alexander Nozdrin
Pushed into 5.0-runtime.
[7 Nov 2007 21:59]
Bugs System
Pushed into 6.0.4-alpha
[7 Nov 2007 22:00]
Bugs System
Pushed into 5.1.23-rc
[7 Nov 2007 22:02]
Bugs System
Pushed into 5.0.52
[9 Nov 2007 0:01]
Paul DuBois
Noted in 5.0.52, 5.1.23, 6.0.4 changelogs. Under some circumstances, CREATE TABLE ... SELECT could crash thes erver or incorrectly report that the table row size was too large.
