Commit d7c88110 authored by unknown's avatar unknown
Browse files

Merge build.mysql.com:/users/tulin/mysql-5.0

into build.mysql.com:/users/tulin/mysql-5.0-ndb


sql/sql_analyse.cc:
  Auto merged
parents 112325c4 46f5c1f1
Loading
Loading
Loading
Loading
+1 −7
Original line number Diff line number Diff line
@@ -531,10 +531,7 @@ struct row_prebuilt_struct {
					format */
	ulint		hint_need_to_fetch_extra_cols;
					/* normally this is set to 0; if this
					is set to ROW_RETRIEVE_PRIMARY_KEY
					(that value is obsolete starting from
					5.0.2, because we always fetch the
					primary key cols),
					is set to ROW_RETRIEVE_PRIMARY_KEY,
					then we should at least retrieve all
					columns in the primary key; if this
					is set to ROW_RETRIEVE_ALL_COLS, then
@@ -607,9 +604,6 @@ struct row_prebuilt_struct {

/* Values for hint_need_to_fetch_extra_cols */
#define ROW_RETRIEVE_PRIMARY_KEY	1
					/* value 1 is obsolete starting from
					5.0.2, because we always fetch the
					primary key cols */
#define ROW_RETRIEVE_ALL_COLS		2


+10 −8
Original line number Diff line number Diff line
@@ -2331,11 +2331,6 @@ row_sel_store_mysql_rec(
		prebuilt->blob_heap = NULL;
	}

	/* MySQL assumes that all columns have the SQL NULL bit set unless it
	is a nullable column with a non-NULL value */

	memset(mysql_rec, 0xFF, prebuilt->null_bitmap_len);

	for (i = 0; i < prebuilt->n_template; i++) {

		templ = prebuilt->mysql_template + i;
@@ -2431,6 +2426,8 @@ row_sel_store_mysql_rec(
		        bug number 154 in the MySQL bug database: GROUP BY
		        and DISTINCT could treat NULL values inequal. */

			mysql_rec[templ->mysql_null_byte_offset] |=
					(byte) (templ->mysql_null_bit_mask);
			if (templ->type == DATA_VARCHAR
			    || templ->type == DATA_CHAR
			    || templ->type == DATA_BINARY
@@ -2749,10 +2746,15 @@ row_sel_pop_cached_row_for_mysql(
				buf + templ->mysql_col_offset, 
				cached_rec + templ->mysql_col_offset,
				templ->mysql_col_len);

			/* Copy NULL bit of the current field from cached_rec 
			to buf */
			if (templ->mysql_null_bit_mask)
				buf[templ->mysql_null_byte_offset] &= 
					cached_rec[templ->mysql_null_byte_offset];
			{
				buf[templ->mysql_null_byte_offset] ^=
				  (buf[templ->mysql_null_byte_offset] ^
				   cached_rec[templ->mysql_null_byte_offset]) &
				  (byte)templ->mysql_null_bit_mask;
			}
		}
	}
	else
+1 −0
Original line number Diff line number Diff line
@@ -146,3 +146,4 @@ EXPORTS
	mysql_rpl_query_type
	mysql_slave_query
	mysql_embedded
	get_defaults_files
+1 −0
Original line number Diff line number Diff line
@@ -157,3 +157,4 @@ EXPORTS
	mysql_stmt_attr_get
	mysql_stmt_attr_set
	mysql_stmt_field_count
	get_defaults_files
+68 −0
Original line number Diff line number Diff line
@@ -53,3 +53,71 @@ key1 key2 str1 zeroval str2 str3
1	199	aaa	0	bbb	199-0_A
0	200	aaa	0	bbb	200-0_a
drop table t1;
create table t1 (
pk    integer not null auto_increment primary key,
key1  integer,
key2  integer not null,
filler char  (200),
index (key1),
index (key2)
) engine=innodb;
show warnings;
Level	Code	Message
explain select pk from t1 where key1 = 1 and key2 = 1;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	index_merge	key1,key2	key1,key2	5,4	NULL	1	Using intersect(key1,key2); Using where; Using index
select pk from t1 where key2 = 1 and key1 = 1;
pk
26
select pk from t1 ignore index(key1,key2) where key2 = 1 and key1 = 1;
pk
26
drop table t1;
create table t1 (
pk int primary key auto_increment,
key1a  int,
key2a  int,
key1b  int,
key2b  int,
dummy1 int,
dummy2 int,
dummy3 int,
dummy4 int,
key3a  int,
key3b  int,
filler1 char (200),
index i1(key1a, key1b),
index i2(key2a, key2b),
index i3(key3a, key3b)
) engine=innodb;
create table t2 (a int);
insert into t2 values (0),(1),(2),(3),(4),(NULL);
insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b) 
select A.a, B.a, C.a, D.a, C.a, D.a from t2 A,t2 B,t2 C, t2 D;
insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b) 
select key1a, key1b, key2a, key2b, key3a, key3b from t1;
insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b) 
select key1a, key1b, key2a, key2b, key3a, key3b from t1;
analyze table t1;
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	OK
select count(*) from t1;
count(*)
5184
explain select count(*) from t1 where 
key1a = 2 and key1b is null and  key2a = 2 and key2b is null;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	index_merge	i1,i2	i1,i2	10,10	NULL	3	Using intersect(i1,i2); Using where; Using index
select count(*) from t1 where 
key1a = 2 and key1b is null and key2a = 2 and key2b is null;
count(*)
4
explain select count(*) from t1 where 
key1a = 2 and key1b is null and key3a = 2 and key3b is null;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	index_merge	i1,i3	i1,i3	10,10	NULL	3	Using intersect(i1,i3); Using where; Using index
select count(*) from t1 where 
key1a = 2 and key1b is null and key3a = 2 and key3b is null;
count(*)
4
drop table t1,t2;
Loading