mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
Mark that strings may change on index only reads (for BDB tables).
This fixed problem with index reads on character fields with BDB tables. (Bug #2509)
This commit is contained in:
parent
911a876999
commit
151b558e21
8 changed files with 93 additions and 11 deletions
|
@ -541,3 +541,4 @@ libmysql_r/vio_priv.h
|
|||
hardcopy.0
|
||||
scripts/make_sharedlib_distribution
|
||||
sql/udf_example.so
|
||||
man/*.1
|
||||
|
|
|
@ -1165,3 +1165,28 @@ create table t2 (c char(8) not null, b char(8) not null, a char(8) not null, pri
|
|||
insert into t2 select * from t1;
|
||||
delete t1,t2 from t2,t1 where t1.a<'B' and t2.b=t1.b;
|
||||
drop table t1,t2;
|
||||
create table t1 (a char(10), key(a), b int not null, key(b)) engine=bdb;
|
||||
insert into t1 values ('a',1),('A',2);
|
||||
explain select a from t1;
|
||||
table type possible_keys key key_len ref rows Extra
|
||||
t1 ALL NULL NULL NULL NULL 2
|
||||
select a from t1;
|
||||
a
|
||||
a
|
||||
A
|
||||
explain select b from t1;
|
||||
table type possible_keys key key_len ref rows Extra
|
||||
t1 index NULL b 4 NULL 2 Using index
|
||||
select b from t1;
|
||||
b
|
||||
1
|
||||
2
|
||||
alter table t1 modify a char(10) binary;
|
||||
explain select a from t1;
|
||||
table type possible_keys key key_len ref rows Extra
|
||||
t1 index NULL a 11 NULL 2 Using index
|
||||
select a from t1;
|
||||
a
|
||||
A
|
||||
a
|
||||
drop table t1;
|
||||
|
|
|
@ -386,7 +386,10 @@ Table Op Msg_type Msg_text
|
|||
test.t1 check status OK
|
||||
drop table t1;
|
||||
create table t1 ( a text not null, key a (a(20)));
|
||||
insert into t1 values ('aaa '),('aaa');
|
||||
insert into t1 values ('aaa '),('aaa'),('aa');
|
||||
check table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
repair table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 repair status OK
|
||||
|
@ -394,6 +397,15 @@ select concat(a,'.') from t1 where a='aaa';
|
|||
concat(a,'.')
|
||||
aaa.
|
||||
aaa .
|
||||
select concat(a,'.') from t1 where binary a='aaa';
|
||||
concat(a,'.')
|
||||
aaa.
|
||||
update t1 set a='bbb' where a='aaa';
|
||||
select concat(a,'.') from t1;
|
||||
concat(a,'.')
|
||||
bbb.
|
||||
bbb.
|
||||
aa.
|
||||
drop table t1;
|
||||
create table t1(a text not null, b text not null, c text not null, index (a(10),b(10),c(10)));
|
||||
insert into t1 values('807780', '477', '165');
|
||||
|
@ -403,3 +415,19 @@ select * from t1 where a='807780' and b='477' and c='165';
|
|||
a b c
|
||||
807780 477 165
|
||||
drop table t1;
|
||||
create table t1 (a int not null auto_increment primary key, b text not null, unique b (b(20)));
|
||||
insert into t1 (b) values ('a'),('a '),('a ');
|
||||
select concat(b,'.') from t1;
|
||||
concat(b,'.')
|
||||
a.
|
||||
a .
|
||||
a .
|
||||
update t1 set b='b ' where a=2;
|
||||
update t1 set b='b ' where a > 1;
|
||||
Duplicate entry 'b ' for key 2
|
||||
delete from t1 where b='b';
|
||||
select a,concat(b,'.') from t1;
|
||||
a concat(b,'.')
|
||||
1 a.
|
||||
3 a .
|
||||
drop table t1;
|
||||
|
|
|
@ -815,3 +815,17 @@ insert into t2 select * from t1;
|
|||
|
||||
delete t1,t2 from t2,t1 where t1.a<'B' and t2.b=t1.b;
|
||||
drop table t1,t2;
|
||||
|
||||
#
|
||||
# Test index only read (Bug #2509)
|
||||
#
|
||||
create table t1 (a char(10), key(a), b int not null, key(b)) engine=bdb;
|
||||
insert into t1 values ('a',1),('A',2);
|
||||
explain select a from t1;
|
||||
select a from t1;
|
||||
explain select b from t1;
|
||||
select b from t1;
|
||||
alter table t1 modify a char(10) binary;
|
||||
explain select a from t1;
|
||||
select a from t1;
|
||||
drop table t1;
|
||||
|
|
|
@ -390,9 +390,13 @@ drop table t1;
|
|||
# two bugs in myisam-space-stripping feature
|
||||
#
|
||||
create table t1 ( a text not null, key a (a(20)));
|
||||
insert into t1 values ('aaa '),('aaa');
|
||||
insert into t1 values ('aaa '),('aaa'),('aa');
|
||||
check table t1;
|
||||
repair table t1;
|
||||
select concat(a,'.') from t1 where a='aaa';
|
||||
select concat(a,'.') from t1 where binary a='aaa';
|
||||
update t1 set a='bbb' where a='aaa';
|
||||
select concat(a,'.') from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
|
@ -406,3 +410,15 @@ insert into t1 values('807780', '472', '162');
|
|||
select * from t1 where a='807780' and b='477' and c='165';
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Test text and unique
|
||||
#
|
||||
create table t1 (a int not null auto_increment primary key, b text not null, unique b (b(20)));
|
||||
insert into t1 (b) values ('a'),('a '),('a ');
|
||||
select concat(b,'.') from t1;
|
||||
update t1 set b='b ' where a=2;
|
||||
--error 1062
|
||||
update t1 set b='b ' where a > 1;
|
||||
delete from t1 where b='b';
|
||||
select a,concat(b,'.') from t1;
|
||||
drop table t1;
|
||||
|
|
|
@ -92,7 +92,7 @@ class ha_berkeley: public handler
|
|||
HA_NULL_KEY | HA_BLOB_KEY | HA_NOT_EXACT_COUNT |
|
||||
HA_PRIMARY_KEY_IN_READ_INDEX | HA_DROP_BEFORE_CREATE |
|
||||
HA_AUTO_PART_KEY | HA_TABLE_SCAN_ON_INDEX |
|
||||
HA_FILE_BASED),
|
||||
HA_KEY_READ_WRONG_STR | HA_FILE_BASED),
|
||||
changed_rows(0),last_dup_key((uint) -1),version(0),using_ignore(0)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -1507,14 +1507,11 @@ void Item_func_elt::fix_length_and_dec()
|
|||
{
|
||||
max_length=0;
|
||||
decimals=0;
|
||||
/*
|
||||
first numeric argument isn't in args (3.23 and 4.0)
|
||||
but since 4.1 the cycle should start from 1
|
||||
so this change
|
||||
|
||||
should NOT be merged into 4.1!!!
|
||||
*/
|
||||
#if MYSQL_VERSION_ID < 40100
|
||||
for (uint i= 0; i < arg_count ; i++)
|
||||
#else
|
||||
for (uint i= 1; i < arg_count ; i++)
|
||||
#endif
|
||||
{
|
||||
set_if_bigger(max_length,args[i]->max_length);
|
||||
set_if_bigger(decimals,args[i]->decimals);
|
||||
|
|
|
@ -498,7 +498,8 @@ int openfrm(const char *name, const char *alias, uint db_stat, uint prgflag,
|
|||
field->type() != FIELD_TYPE_BLOB)
|
||||
{
|
||||
if (field->key_type() != HA_KEYTYPE_TEXT ||
|
||||
(!(ha_option & HA_KEY_READ_WRONG_STR) &&
|
||||
((!(ha_option & HA_KEY_READ_WRONG_STR) ||
|
||||
field->flags & BINARY_FLAG) &&
|
||||
!(keyinfo->flags & HA_FULLTEXT)))
|
||||
field->part_of_key|= ((key_map) 1 << key);
|
||||
if ((field->key_type() != HA_KEYTYPE_TEXT ||
|
||||
|
|
Loading…
Reference in a new issue