Commit 43f98d24 authored by paul@kite-hub.kitebird.com's avatar paul@kite-hub.kitebird.com

Merge paul@bk-internal.mysql.com:/home/bk/mysql-4.1

into kite-hub.kitebird.com:/src/extern/MySQL/bk/mysql-4.1
parents 3b9c5f3a 50e04743
...@@ -463,7 +463,7 @@ collation(hex(130)) coercibility(hex(130)) ...@@ -463,7 +463,7 @@ collation(hex(130)) coercibility(hex(130))
latin1_swedish_ci 3 latin1_swedish_ci 3
select collation(char(130)), coercibility(hex(130)); select collation(char(130)), coercibility(hex(130));
collation(char(130)) coercibility(hex(130)) collation(char(130)) coercibility(hex(130))
binary 3 latin1_swedish_ci 3
select collation(format(130,10)), coercibility(format(130,10)); select collation(format(130,10)), coercibility(format(130,10));
collation(format(130,10)) coercibility(format(130,10)) collation(format(130,10)) coercibility(format(130,10))
latin1_swedish_ci 3 latin1_swedish_ci 3
......
...@@ -733,3 +733,41 @@ xxxxxxxxxxxxxxxxxxxaa ...@@ -733,3 +733,41 @@ xxxxxxxxxxxxxxxxxxxaa
xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxz xxxxxxxxxxxxxxxxxxxz
drop table t1; drop table t1;
create table t1 (
`sid` decimal(8,0) default null,
`wnid` varchar(11) not null default '',
key `wnid14` (`wnid`(4)),
key `wnid` (`wnid`)
) engine=myisam default charset=latin1;
insert into t1 (`sid`, `wnid`) values
('10100','01019000000'),('37986','01019000000'),('37987','01019010000'),
('39560','01019090000'),('37989','01019000000'),('37990','01019011000'),
('37991','01019011000'),('37992','01019019000'),('37993','01019030000'),
('37994','01019090000'),('475','02070000000'),('25253','02071100000'),
('25255','02071100000'),('25256','02071110000'),('25258','02071130000'),
('25259','02071190000'),('25260','02071200000'),('25261','02071210000'),
('25262','02071290000'),('25263','02071300000'),('25264','02071310000'),
('25265','02071310000'),('25266','02071320000'),('25267','02071320000'),
('25269','02071330000'),('25270','02071340000'),('25271','02071350000'),
('25272','02071360000'),('25273','02071370000'),('25281','02071391000'),
('25282','02071391000'),('25283','02071399000'),('25284','02071400000'),
('25285','02071410000'),('25286','02071410000'),('25287','02071420000'),
('25288','02071420000'),('25291','02071430000'),('25290','02071440000'),
('25292','02071450000'),('25293','02071460000'),('25294','02071470000'),
('25295','02071491000'),('25296','02071491000'),('25297','02071499000');
explain select * from t1 where wnid like '0101%' order by wnid;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 range wnid14,wnid wnid 11 NULL 10 Using where
select * from t1 where wnid like '0101%' order by wnid;
sid wnid
10100 01019000000
37986 01019000000
37989 01019000000
37987 01019010000
37990 01019011000
37991 01019011000
37992 01019019000
37993 01019030000
39560 01019090000
37994 01019090000
drop table t1;
...@@ -175,7 +175,7 @@ Log_name Pos Event_type Server_id Orig_log_pos Info ...@@ -175,7 +175,7 @@ Log_name Pos Event_type Server_id Orig_log_pos Info
master-bin.000001 79 User var 1 79 @`a b`=_latin1 0x68656C6C6F COLLATE latin1_swedish_ci master-bin.000001 79 User var 1 79 @`a b`=_latin1 0x68656C6C6F COLLATE latin1_swedish_ci
master-bin.000001 120 Query 1 120 use `test`; INSERT INTO t1 VALUES(@`a b`) master-bin.000001 120 Query 1 120 use `test`; INSERT INTO t1 VALUES(@`a b`)
master-bin.000001 184 User var 1 184 @`var1`=_latin1 0x273B616161 COLLATE latin1_swedish_ci master-bin.000001 184 User var 1 184 @`var1`=_latin1 0x273B616161 COLLATE latin1_swedish_ci
master-bin.000001 226 User var 1 226 @`var2`=_binary 0x61 COLLATE binary master-bin.000001 226 User var 1 226 @`var2`=_latin1 0x61 COLLATE latin1_swedish_ci
master-bin.000001 264 Query 1 264 use `test`; insert into t1 values (@var1),(@var2) master-bin.000001 264 Query 1 264 use `test`; insert into t1 values (@var1),(@var2)
/*!40019 SET @@session.max_insert_delayed_threads=0*/; /*!40019 SET @@session.max_insert_delayed_threads=0*/;
SET @`a b`:=_latin1 0x68656C6C6F COLLATE `latin1_swedish_ci`; SET @`a b`:=_latin1 0x68656C6C6F COLLATE `latin1_swedish_ci`;
...@@ -183,7 +183,7 @@ use test; ...@@ -183,7 +183,7 @@ use test;
SET TIMESTAMP=10000; SET TIMESTAMP=10000;
INSERT INTO t1 VALUES(@`a b`); INSERT INTO t1 VALUES(@`a b`);
SET @`var1`:=_latin1 0x273B616161 COLLATE `latin1_swedish_ci`; SET @`var1`:=_latin1 0x273B616161 COLLATE `latin1_swedish_ci`;
SET @`var2`:=_binary 0x61 COLLATE `binary`; SET @`var2`:=_latin1 0x61 COLLATE `latin1_swedish_ci`;
SET TIMESTAMP=10000; SET TIMESTAMP=10000;
insert into t1 values (@var1),(@var2); insert into t1 values (@var1),(@var2);
drop table t1; drop table t1;
......
...@@ -500,3 +500,37 @@ insert into t1 set a = concat(repeat('x', 19), 'aa'); ...@@ -500,3 +500,37 @@ insert into t1 set a = concat(repeat('x', 19), 'aa');
set max_sort_length=20; set max_sort_length=20;
select a from t1 order by a; select a from t1 order by a;
drop table t1; drop table t1;
#
# Bug #7331
#
create table t1 (
`sid` decimal(8,0) default null,
`wnid` varchar(11) not null default '',
key `wnid14` (`wnid`(4)),
key `wnid` (`wnid`)
) engine=myisam default charset=latin1;
insert into t1 (`sid`, `wnid`) values
('10100','01019000000'),('37986','01019000000'),('37987','01019010000'),
('39560','01019090000'),('37989','01019000000'),('37990','01019011000'),
('37991','01019011000'),('37992','01019019000'),('37993','01019030000'),
('37994','01019090000'),('475','02070000000'),('25253','02071100000'),
('25255','02071100000'),('25256','02071110000'),('25258','02071130000'),
('25259','02071190000'),('25260','02071200000'),('25261','02071210000'),
('25262','02071290000'),('25263','02071300000'),('25264','02071310000'),
('25265','02071310000'),('25266','02071320000'),('25267','02071320000'),
('25269','02071330000'),('25270','02071340000'),('25271','02071350000'),
('25272','02071360000'),('25273','02071370000'),('25281','02071391000'),
('25282','02071391000'),('25283','02071399000'),('25284','02071400000'),
('25285','02071410000'),('25286','02071410000'),('25287','02071420000'),
('25288','02071420000'),('25291','02071430000'),('25290','02071440000'),
('25292','02071450000'),('25293','02071460000'),('25294','02071470000'),
('25295','02071491000'),('25296','02071491000'),('25297','02071499000');
explain select * from t1 where wnid like '0101%' order by wnid;
select * from t1 where wnid like '0101%' order by wnid;
drop table t1;
...@@ -187,28 +187,33 @@ public: ...@@ -187,28 +187,33 @@ public:
}; };
void update_max_auto_val(const char *data, int size) { void update_max_auto_val(const char *data, int size) {
Uint64 val= 0; union {
Uint8 u8;
Uint16 u16;
Uint32 u32;
} val;
Uint64 v;
switch(size){ switch(size){
case 8: case 64:
val= *(Uint8*)data; memcpy(&v,data,8);
break;
case 16:
val= *(Uint16*)data;
break;
case 24:
val= (0xffffff)&*(Uint32*)data;
break; break;
case 32: case 32:
val= *(Uint32*)data; memcpy(&val.u32,data,4);
v= val.u32;
break; break;
case 64: case 16:
val= *(Uint64*)data; memcpy(&val.u16,data,2);
v= val.u16;
break;
case 8:
memcpy(&val.u8,data,1);
v= val.u8;
break; break;
default: default:
return; return;
}; };
if(val > m_max_auto_val) if(v > m_max_auto_val)
m_max_auto_val= val; m_max_auto_val= v;
}; };
/** /**
* Get attribute descriptor * Get attribute descriptor
......
...@@ -1888,6 +1888,7 @@ b1: str->append((char)(num>>8)); ...@@ -1888,6 +1888,7 @@ b1: str->append((char)(num>>8));
#endif #endif
str->append((char)num); str->append((char)num);
} }
str->set_charset(collation.collation);
str->realloc(str->length()); // Add end 0 (for Purify) str->realloc(str->length()); // Add end 0 (for Purify)
return str; return str;
} }
......
...@@ -7153,9 +7153,22 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit, ...@@ -7153,9 +7153,22 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit,
} }
else else
{ {
select->quick->file->ha_index_end(); /*
select->quick->index= new_ref_key; The range optimizer constructed QUICK_RANGE for ref_key, and
select->quick->init(); we want to use instead new_ref_key as the index. We can't
just change the index of the quick select, because this may
result in an incosistent QUICK_SELECT object. Below we
create a new QUICK_SELECT from scratch so that all its
parameres are set correctly by the range optimizer.
*/
key_map new_ref_key_map;
new_ref_key_map.clear_all(); /* Force the creation of quick select */
new_ref_key_map.set_bit(new_ref_key); /* only for new_ref_key. */
if (select->test_quick_select(tab->join->thd, new_ref_key_map, 0,
(tab->join->select_options & OPTION_FOUND_ROWS) ?
HA_POS_ERROR : tab->join->unit->select_limit_cnt) <= 0)
DBUG_RETURN(0);
} }
ref_key= new_ref_key; ref_key= new_ref_key;
} }
......
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