diff --git a/client/mysqldump.c b/client/mysqldump.c index efe899c1faa..e9ca0d975a9 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -181,7 +181,7 @@ static struct my_option my_long_options[] = "Fields in the i.file are opt. enclosed by ...", (gptr*) &opt_enclosed, (gptr*) &opt_enclosed, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0 ,0, 0}, {"fields-escaped-by", OPT_ESC, "Fields in the i.file are escaped by ...", - (gptr*) &escaped, (gptr*) &escaped, 0, GET_STR, NO_ARG, 0, 0, 0, 0, 0, 0}, + (gptr*) &escaped, (gptr*) &escaped, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"first-slave", 'x', "Locks all tables across all databases.", (gptr*) &opt_first_slave, (gptr*) &opt_first_slave, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, diff --git a/heap/hp_delete.c b/heap/hp_delete.c index 73e431e6e66..89d685b7d0b 100644 --- a/heap/hp_delete.c +++ b/heap/hp_delete.c @@ -67,6 +67,8 @@ int hp_rb_delete_key(HP_INFO *info, register HP_KEYDEF *keyinfo, const byte *record, byte *recpos, int flag) { heap_rb_param custom_arg; + uint old_allocated; + int res; if (flag) info->last_pos= NULL; /* For heap_rnext/heap_rprev */ @@ -74,7 +76,10 @@ int hp_rb_delete_key(HP_INFO *info, register HP_KEYDEF *keyinfo, custom_arg.keyseg= keyinfo->seg; custom_arg.key_length= hp_rb_make_key(keyinfo, info->recbuf, record, recpos); custom_arg.search_flag= SEARCH_SAME; - return tree_delete(&keyinfo->rb_tree, info->recbuf, &custom_arg); + old_allocated= keyinfo->rb_tree.allocated; + res= tree_delete(&keyinfo->rb_tree, info->recbuf, &custom_arg); + info->s->index_length+= (keyinfo->rb_tree.allocated-old_allocated); + return res; } /* Remove one key from hash-table */ diff --git a/heap/hp_write.c b/heap/hp_write.c index f92d8caa633..3b0ec76d616 100644 --- a/heap/hp_write.c +++ b/heap/hp_write.c @@ -99,6 +99,7 @@ int hp_rb_write_key(HP_INFO *info, HP_KEYDEF *keyinfo, const byte *record, byte *recpos) { heap_rb_param custom_arg; + uint old_allocated; info->last_pos= NULL; /* For heap_rnext/heap_rprev */ custom_arg.keyseg= keyinfo->seg; @@ -113,12 +114,14 @@ int hp_rb_write_key(HP_INFO *info, HP_KEYDEF *keyinfo, const byte *record, custom_arg.search_flag= SEARCH_SAME; keyinfo->rb_tree.flag= 0; } + old_allocated= keyinfo->rb_tree.allocated; if (!tree_insert(&keyinfo->rb_tree, (void*)info->recbuf, custom_arg.key_length, &custom_arg)) { my_errno= HA_ERR_FOUND_DUPP_KEY; return 1; } + info->s->index_length+= (keyinfo->rb_tree.allocated-old_allocated); return 0; } diff --git a/mysql-test/r/bigint.result b/mysql-test/r/bigint.result index 4c6e1645451..4c70e72bdfb 100644 --- a/mysql-test/r/bigint.result +++ b/mysql-test/r/bigint.result @@ -84,3 +84,6 @@ quantity 10000000000000000000 10000000000000000000 drop table t1; +SELECT '0x8000000000000001'+0; +'0x8000000000000001'+0 +0 diff --git a/mysql-test/r/func_misc.result b/mysql-test/r/func_misc.result index ec5f76409e7..581bc54db18 100644 --- a/mysql-test/r/func_misc.result +++ b/mysql-test/r/func_misc.result @@ -1,6 +1,6 @@ select format(1.5555,0),format(123.5555,1),format(1234.5555,2),format(12345.5555,3),format(123456.5555,4),format(1234567.5555,5),format("12345.2399",2); format(1.5555,0) format(123.5555,1) format(1234.5555,2) format(12345.5555,3) format(123456.5555,4) format(1234567.5555,5) format("12345.2399",2) -2 123.6 1,234.56 12,345.556 123,456.5555 1,234,567.55550 12,345.24 +2 123.6 1,234.56 12,345.555 123,456.5555 1,234,567.55550 12,345.24 select inet_ntoa(inet_aton("255.255.255.255.255.255.255.255")); inet_ntoa(inet_aton("255.255.255.255.255.255.255.255")) NULL diff --git a/mysql-test/r/show_check.result b/mysql-test/r/show_check.result index 235c6cd0ecf..2dc715f238f 100644 --- a/mysql-test/r/show_check.result +++ b/mysql-test/r/show_check.result @@ -313,3 +313,77 @@ table CREATE TABLE `table` ( ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE `table`; SET sql_quote_show_create=ON; +select @@max_heap_table_size; +@@max_heap_table_size +1047552 +CREATE TABLE t1 ( +a int(11) default NULL, +KEY a TYPE BTREE (a) +) ENGINE=HEAP; +CREATE TABLE t2 ( +b int(11) default NULL, +index(b) +) ENGINE=HEAP; +CREATE TABLE t3 ( +a int(11) default NULL, +b int(11) default NULL, +KEY a TYPE BTREE (a), +index(b) +) ENGINE=HEAP; +insert into t1 values (1),(2); +insert into t2 values (1),(2); +insert into t3 values (1,1),(2,2); +show table status; +Name Type Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment +t1 HEAP Fixed 2 5 39904 249415 42 0 NULL NULL NULL NULL latin1_swedish_ci NULL +t2 HEAP Fixed 2 5 39904 249415 39904 0 NULL NULL NULL NULL latin1_swedish_ci NULL +t3 HEAP Fixed 2 9 33072 248103 22090 0 NULL NULL NULL NULL latin1_swedish_ci NULL +insert into t1 values (3),(4); +insert into t2 values (3),(4); +insert into t3 values (3,3),(4,4); +show table status; +Name Type Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment +t1 HEAP Fixed 4 5 39904 249415 84 0 NULL NULL NULL NULL latin1_swedish_ci NULL +t2 HEAP Fixed 4 5 39904 249415 39904 0 NULL NULL NULL NULL latin1_swedish_ci NULL +t3 HEAP Fixed 4 9 33072 248103 22132 0 NULL NULL NULL NULL latin1_swedish_ci NULL +insert into t1 values (5); +insert into t2 values (5); +insert into t3 values (5,5); +show table status; +Name Type Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment +t1 HEAP Fixed 5 5 39904 249415 105 0 NULL NULL NULL NULL latin1_swedish_ci NULL +t2 HEAP Fixed 5 5 39904 249415 39904 0 NULL NULL NULL NULL latin1_swedish_ci NULL +t3 HEAP Fixed 5 9 33072 248103 22153 0 NULL NULL NULL NULL latin1_swedish_ci NULL +delete from t1 where a=3; +delete from t2 where b=3; +delete from t3 where a=3; +show table status; +Name Type Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment +t1 HEAP Fixed 4 5 39904 249415 105 5 NULL NULL NULL NULL latin1_swedish_ci NULL +t2 HEAP Fixed 4 5 39904 249415 39904 5 NULL NULL NULL NULL latin1_swedish_ci NULL +t3 HEAP Fixed 4 9 33072 248103 22153 9 NULL NULL NULL NULL latin1_swedish_ci NULL +delete from t1; +delete from t2; +delete from t3; +show table status; +Name Type Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment +t1 HEAP Fixed 0 5 0 249415 0 0 NULL NULL NULL NULL latin1_swedish_ci NULL +t2 HEAP Fixed 0 5 0 249415 0 0 NULL NULL NULL NULL latin1_swedish_ci NULL +t3 HEAP Fixed 0 9 0 248103 0 0 NULL NULL NULL NULL latin1_swedish_ci NULL +insert into t1 values (5); +insert into t2 values (5); +insert into t3 values (5,5); +show table status; +Name Type Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment +t1 HEAP Fixed 1 5 39904 249415 21 0 NULL NULL NULL NULL latin1_swedish_ci NULL +t2 HEAP Fixed 1 5 39904 249415 39904 0 NULL NULL NULL NULL latin1_swedish_ci NULL +t3 HEAP Fixed 1 9 33072 248103 22069 0 NULL NULL NULL NULL latin1_swedish_ci NULL +delete from t1 where a=5; +delete from t2 where b=5; +delete from t3 where a=5; +show table status; +Name Type Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment +t1 HEAP Fixed 0 5 39904 249415 21 5 NULL NULL NULL NULL latin1_swedish_ci NULL +t2 HEAP Fixed 0 5 39904 249415 39904 5 NULL NULL NULL NULL latin1_swedish_ci NULL +t3 HEAP Fixed 0 9 33072 248103 22069 9 NULL NULL NULL NULL latin1_swedish_ci NULL +drop table t1, t2, t3; diff --git a/mysql-test/t/bigint.test b/mysql-test/t/bigint.test index 9bbe10eae8c..c509a4113f4 100644 --- a/mysql-test/t/bigint.test +++ b/mysql-test/t/bigint.test @@ -69,5 +69,5 @@ select * from t1; drop table t1; # atof() behaviour is different of different systems. to be fixed in 4.1 -#SELECT '0x8000000000000001'+0; +SELECT '0x8000000000000001'+0; diff --git a/mysql-test/t/show_check.test b/mysql-test/t/show_check.test index 1d64cfd2105..935e472c4a1 100644 --- a/mysql-test/t/show_check.test +++ b/mysql-test/t/show_check.test @@ -182,3 +182,57 @@ SHOW CREATE TABLE `table`; DROP TABLE `table`; SET sql_quote_show_create=ON; + +# +# Test for bug #2719 "Heap tables status shows wrong or missing data." +# + +select @@max_heap_table_size; + +CREATE TABLE t1 ( + a int(11) default NULL, + KEY a TYPE BTREE (a) +) ENGINE=HEAP; + +CREATE TABLE t2 ( + b int(11) default NULL, + index(b) +) ENGINE=HEAP; + +CREATE TABLE t3 ( + a int(11) default NULL, + b int(11) default NULL, + KEY a TYPE BTREE (a), + index(b) +) ENGINE=HEAP; + +insert into t1 values (1),(2); +insert into t2 values (1),(2); +insert into t3 values (1,1),(2,2); +show table status; +insert into t1 values (3),(4); +insert into t2 values (3),(4); +insert into t3 values (3,3),(4,4); +show table status; +insert into t1 values (5); +insert into t2 values (5); +insert into t3 values (5,5); +show table status; +delete from t1 where a=3; +delete from t2 where b=3; +delete from t3 where a=3; +show table status; +delete from t1; +delete from t2; +delete from t3; +show table status; +insert into t1 values (5); +insert into t2 values (5); +insert into t3 values (5,5); +show table status; +delete from t1 where a=5; +delete from t2 where b=5; +delete from t3 where a=5; +show table status; + +drop table t1, t2, t3; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index ee7e2dfadf5..1cc2456979a 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -5614,6 +5614,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)), } global_system_variables.sql_mode= fix_sql_mode(global_system_variables. sql_mode); + break; } case OPT_FT_BOOLEAN_SYNTAX: if (ft_boolean_check_syntax_string(argument)) diff --git a/strings/strtod.c b/strings/strtod.c index 63633b6808f..5b3be40cbf8 100644 --- a/strings/strtod.c +++ b/strings/strtod.c @@ -135,6 +135,6 @@ done: double my_atof(const char *nptr) { - return (strtod(nptr, 0)); + return (my_strtod(nptr, 0)); }