summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.bzrignore1
-rw-r--r--mysql-test/r/bdb.result25
-rw-r--r--mysql-test/r/myisam.result30
-rw-r--r--mysql-test/t/bdb.test14
-rw-r--r--mysql-test/t/myisam.test18
-rw-r--r--sql/ha_berkeley.h2
-rw-r--r--sql/item_strfunc.cc11
-rw-r--r--sql/table.cc3
8 files changed, 93 insertions, 11 deletions
diff --git a/.bzrignore b/.bzrignore
index 12cdf99cbc9..572f877a49f 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -541,3 +541,4 @@ libmysql_r/vio_priv.h
hardcopy.0
scripts/make_sharedlib_distribution
sql/udf_example.so
+man/*.1
diff --git a/mysql-test/r/bdb.result b/mysql-test/r/bdb.result
index 05845df9dd3..2ccb5148d58 100644
--- a/mysql-test/r/bdb.result
+++ b/mysql-test/r/bdb.result
@@ -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;
diff --git a/mysql-test/r/myisam.result b/mysql-test/r/myisam.result
index 68a667f6d95..cc541388a5c 100644
--- a/mysql-test/r/myisam.result
+++ b/mysql-test/r/myisam.result
@@ -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;
diff --git a/mysql-test/t/bdb.test b/mysql-test/t/bdb.test
index 2dfaecba9b1..4b490052535 100644
--- a/mysql-test/t/bdb.test
+++ b/mysql-test/t/bdb.test
@@ -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;
diff --git a/mysql-test/t/myisam.test b/mysql-test/t/myisam.test
index 394261aae40..7302e5dfdda 100644
--- a/mysql-test/t/myisam.test
+++ b/mysql-test/t/myisam.test
@@ -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;
diff --git a/sql/ha_berkeley.h b/sql/ha_berkeley.h
index 285bb575699..1925d1c410f 100644
--- a/sql/ha_berkeley.h
+++ b/sql/ha_berkeley.h
@@ -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)
{
}
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index 74a7c97113e..31c2dc943e5 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -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);
diff --git a/sql/table.cc b/sql/table.cc
index c8def7441fd..a90220fa55b 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -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 ||