Commit 9a05a887 authored by sergefp@mysql.com's avatar sergefp@mysql.com

Manually merged

parents d69589c1 d0a97917
...@@ -3994,7 +3994,7 @@ void update_auto_increment_key(MI_CHECK *param, MI_INFO *info, ...@@ -3994,7 +3994,7 @@ void update_auto_increment_key(MI_CHECK *param, MI_INFO *info,
... ...
The 'unique' array is collected in one sequential scan through the entire The 'unique' array is collected in one sequential scan through the entire
index. This is done in two places: in chk_index() and in sort_key_write(). index. This is done in two places: in chk_index() and in sort_key_write().
Statistics collection may consider NULLs as either equal or inequal (see Statistics collection may consider NULLs as either equal or unequal (see
SEARCH_NULL_ARE_NOT_EQUAL, MI_STATS_METHOD_*). SEARCH_NULL_ARE_NOT_EQUAL, MI_STATS_METHOD_*).
Output is an array: Output is an array:
......
...@@ -67,7 +67,7 @@ static const char *field_pack[]= ...@@ -67,7 +67,7 @@ static const char *field_pack[]=
"no zeros", "blob", "constant", "table-lockup", "no zeros", "blob", "constant", "table-lockup",
"always zero","varchar","unique-hash","?","?"}; "always zero","varchar","unique-hash","?","?"};
static const char *myisam_stats_method_str="nulls_inequal"; static const char *myisam_stats_method_str="nulls_unequal";
static void get_options(int *argc,char * * *argv); static void get_options(int *argc,char * * *argv);
static void print_version(void); static void print_version(void);
...@@ -339,7 +339,7 @@ static struct my_option my_long_options[] = ...@@ -339,7 +339,7 @@ static struct my_option my_long_options[] =
REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"stats_method", OPT_STATS_METHOD, {"stats_method", OPT_STATS_METHOD,
"Specifies how index statistics collection code should threat NULLs. " "Specifies how index statistics collection code should threat NULLs. "
"Possible values of name are \"nulls_inequal\" (default behavior for 4.1/5.0), and \"nulls_equal\" (emulate 4.0 behavior).", "Possible values of name are \"nulls_unequal\" (default behavior for 4.1/5.0), and \"nulls_equal\" (emulate 4.0 behavior).",
(gptr*) &myisam_stats_method_str, (gptr*) &myisam_stats_method_str, 0, (gptr*) &myisam_stats_method_str, (gptr*) &myisam_stats_method_str, 0,
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} { 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
...@@ -471,7 +471,7 @@ static void usage(void) ...@@ -471,7 +471,7 @@ static void usage(void)
#include <help_end.h> #include <help_end.h>
const char *myisam_stats_method_names[] = {"nulls_inequal", "nulls_equal", const char *myisam_stats_method_names[] = {"nulls_unequal", "nulls_equal",
NullS}; NullS};
TYPELIB myisam_stats_method_typelib= { TYPELIB myisam_stats_method_typelib= {
array_elements(myisam_stats_method_names) - 1, "", array_elements(myisam_stats_method_names) - 1, "",
......
...@@ -193,6 +193,15 @@ select * from t1 where a in (NULL, 'aa'); ...@@ -193,6 +193,15 @@ select * from t1 where a in (NULL, 'aa');
a a
aa aa
drop table t1; drop table t1;
create table t1 (id int, key(id));
insert into t1 values (1),(2),(3);
select count(*) from t1 where id not in (1);
count(*)
2
select count(*) from t1 where id not in (1,2);
count(*)
1
drop table t1;
CREATE TABLE t1 (a int PRIMARY KEY); CREATE TABLE t1 (a int PRIMARY KEY);
INSERT INTO t1 VALUES (44), (45), (46); INSERT INTO t1 VALUES (44), (45), (46);
SELECT * FROM t1 WHERE a IN (45); SELECT * FROM t1 WHERE a IN (45);
......
...@@ -610,7 +610,7 @@ test.t2 984116287 ...@@ -610,7 +610,7 @@ test.t2 984116287
drop table t1, t2; drop table t1, t2;
show variables like 'myisam_stats_method'; show variables like 'myisam_stats_method';
Variable_name Value Variable_name Value
myisam_stats_method nulls_inequal myisam_stats_method nulls_unequal
create table t1 (a int, key(a)); create table t1 (a int, key(a));
insert into t1 values (0),(1),(2),(3),(4); insert into t1 values (0),(1),(2),(3),(4);
insert into t1 select NULL from t1; insert into t1 select NULL from t1;
...@@ -651,7 +651,7 @@ t1 1 a 1 a A 5 NULL NULL YES BTREE ...@@ -651,7 +651,7 @@ t1 1 a 1 a A 5 NULL NULL YES BTREE
set myisam_stats_method=DEFAULT; set myisam_stats_method=DEFAULT;
show variables like 'myisam_stats_method'; show variables like 'myisam_stats_method';
Variable_name Value Variable_name Value
myisam_stats_method nulls_inequal myisam_stats_method nulls_unequal
insert into t1 values (11); insert into t1 values (11);
delete from t1 where a=11; delete from t1 where a=11;
analyze table t1; analyze table t1;
......
...@@ -102,6 +102,13 @@ insert into t1 values ('aa'), ('bb'); ...@@ -102,6 +102,13 @@ insert into t1 values ('aa'), ('bb');
select * from t1 where a in (NULL, 'aa'); select * from t1 where a in (NULL, 'aa');
drop table t1; drop table t1;
# BUG#13419
create table t1 (id int, key(id));
insert into t1 values (1),(2),(3);
select count(*) from t1 where id not in (1);
select count(*) from t1 where id not in (1,2);
drop table t1;
# End of 4.1 tests # End of 4.1 tests
# #
......
...@@ -39,7 +39,7 @@ const char *myisam_recover_names[] = ...@@ -39,7 +39,7 @@ const char *myisam_recover_names[] =
TYPELIB myisam_recover_typelib= {array_elements(myisam_recover_names)-1,"", TYPELIB myisam_recover_typelib= {array_elements(myisam_recover_names)-1,"",
myisam_recover_names, NULL}; myisam_recover_names, NULL};
const char *myisam_stats_method_names[] = {"nulls_inequal", "nulls_equal", const char *myisam_stats_method_names[] = {"nulls_unequal", "nulls_equal",
NullS}; NullS};
TYPELIB myisam_stats_method_typelib= { TYPELIB myisam_stats_method_typelib= {
array_elements(myisam_stats_method_names) - 1, "", array_elements(myisam_stats_method_names) - 1, "",
......
...@@ -432,7 +432,7 @@ char server_version[SERVER_VERSION_LENGTH]; ...@@ -432,7 +432,7 @@ char server_version[SERVER_VERSION_LENGTH];
char *mysqld_unix_port, *opt_mysql_tmpdir; char *mysqld_unix_port, *opt_mysql_tmpdir;
const char **errmesg; /* Error messages */ const char **errmesg; /* Error messages */
const char *myisam_recover_options_str="OFF"; const char *myisam_recover_options_str="OFF";
const char *myisam_stats_method_str="nulls_inequal"; const char *myisam_stats_method_str="nulls_unequal";
/* name of reference on left espression in rewritten IN subquery */ /* name of reference on left espression in rewritten IN subquery */
const char *in_left_expr_name= "<left expr>"; const char *in_left_expr_name= "<left expr>";
/* name of additional condition */ /* name of additional condition */
...@@ -5519,7 +5519,7 @@ The minimum value for this variable is 4096.", ...@@ -5519,7 +5519,7 @@ The minimum value for this variable is 4096.",
GET_ULONG, REQUIRED_ARG, 8192*1024, 4, ~0L, 0, 1, 0}, GET_ULONG, REQUIRED_ARG, 8192*1024, 4, ~0L, 0, 1, 0},
{"myisam_stats_method", OPT_MYISAM_STATS_METHOD, {"myisam_stats_method", OPT_MYISAM_STATS_METHOD,
"Specifies how MyISAM index statistics collection code should threat NULLs. " "Specifies how MyISAM index statistics collection code should threat NULLs. "
"Possible values of name are \"nulls_inequal\" (default behavior for 4.1/5.0), and \"nulls_equal\" (emulate 4.0 behavior).", "Possible values of name are \"nulls_unequal\" (default behavior for 4.1/5.0), and \"nulls_equal\" (emulate 4.0 behavior).",
(gptr*) &myisam_stats_method_str, (gptr*) &myisam_stats_method_str, 0, (gptr*) &myisam_stats_method_str, (gptr*) &myisam_stats_method_str, 0,
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"net_buffer_length", OPT_NET_BUFFER_LENGTH, {"net_buffer_length", OPT_NET_BUFFER_LENGTH,
...@@ -6106,7 +6106,7 @@ static void mysql_init_variables(void) ...@@ -6106,7 +6106,7 @@ static void mysql_init_variables(void)
query_id= thread_id= 1L; query_id= thread_id= 1L;
strmov(server_version, MYSQL_SERVER_VERSION); strmov(server_version, MYSQL_SERVER_VERSION);
myisam_recover_options_str= sql_mode_str= "OFF"; myisam_recover_options_str= sql_mode_str= "OFF";
myisam_stats_method_str= "nulls_inequal"; myisam_stats_method_str= "nulls_unequal";
my_bind_addr = htonl(INADDR_ANY); my_bind_addr = htonl(INADDR_ANY);
threads.empty(); threads.empty();
thread_cache.empty(); thread_cache.empty();
...@@ -6157,7 +6157,7 @@ static void mysql_init_variables(void) ...@@ -6157,7 +6157,7 @@ static void mysql_init_variables(void)
global_system_variables.old_passwords= 0; global_system_variables.old_passwords= 0;
/* /*
Default behavior for 4.1 and 5.0 is to treat NULL values as inequal Default behavior for 4.1 and 5.0 is to treat NULL values as unequal
when collecting index statistics for MyISAM tables. when collecting index statistics for MyISAM tables.
*/ */
global_system_variables.myisam_stats_method= MI_STATS_METHOD_NULLS_NOT_EQUAL; global_system_variables.myisam_stats_method= MI_STATS_METHOD_NULLS_NOT_EQUAL;
......
...@@ -2386,7 +2386,6 @@ merge_key_fields(KEY_FIELD *start,KEY_FIELD *new_fields,KEY_FIELD *end, ...@@ -2386,7 +2386,6 @@ merge_key_fields(KEY_FIELD *start,KEY_FIELD *new_fields,KEY_FIELD *end,
field Field used in comparision field Field used in comparision
eq_func True if we used =, <=> or IS NULL eq_func True if we used =, <=> or IS NULL
value Value used for comparison with field value Value used for comparison with field
Is NULL for BETWEEN and IN
usable_tables Tables which can be used for key optimization usable_tables Tables which can be used for key optimization
NOTES NOTES
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment