Commit 7ff24eb0 authored by serg@serg.mylan's avatar serg@serg.mylan

longer myisam keys

parent 5c741829
...@@ -38,7 +38,7 @@ extern "C" { ...@@ -38,7 +38,7 @@ extern "C" {
/* The following defines can be increased if necessary */ /* The following defines can be increased if necessary */
#define MI_MAX_KEY 32 /* Max allowed keys */ #define MI_MAX_KEY 32 /* Max allowed keys */
#define MI_MAX_KEY_SEG 16 /* Max segments for key */ #define MI_MAX_KEY_SEG 16 /* Max segments for key */
#define MI_MAX_KEY_LENGTH 500 #define MI_MAX_KEY_LENGTH 1000
#define MI_MAX_KEY_BUFF (MI_MAX_KEY_LENGTH+MI_MAX_KEY_SEG*6+8+8) #define MI_MAX_KEY_BUFF (MI_MAX_KEY_LENGTH+MI_MAX_KEY_SEG*6+8+8)
#define MI_MAX_POSSIBLE_KEY_BUFF (1024+6+6) /* For myisam_chk */ #define MI_MAX_POSSIBLE_KEY_BUFF (1024+6+6) /* For myisam_chk */
......
...@@ -167,5 +167,5 @@ select hex(s1) from t1; ...@@ -167,5 +167,5 @@ select hex(s1) from t1;
hex(s1) hex(s1)
41 41
drop table t1; drop table t1;
create table t1 (a char(160) character set utf8, primary key(a)); create table t1 (a text character set utf8, primary key(a(360)));
ERROR 42000: Specified key was too long; max key length is 255 bytes ERROR 42000: Specified key was too long; max key length is 1000 bytes
...@@ -185,3 +185,24 @@ NULL 2 ...@@ -185,3 +185,24 @@ NULL 2
a 1 a 1
a 2 a 2
drop table t1; drop table t1;
create table t1 (i int, a char(200), b text, unique (a), unique (b(300))) charset utf8;
insert t1 values (1, repeat('a',210), repeat('b', 310));
Warnings:
Warning 1265 Data truncated for column 'a' at row 1
insert t1 values (2, repeat(0xD0B1,215), repeat(0xD0B1, 310));
Warnings:
Warning 1265 Data truncated for column 'a' at row 1
select i, length(a), length(b), char_length(a), char_length(b) from t1;
i length(a) length(b) char_length(a) char_length(b)
1 200 310 200 310
2 400 620 200 310
select i from t1 where a=repeat(_utf8 'a',200);
i
1
select i from t1 where a=repeat(_utf8 0xD0B1,200);
i
2
select i from t1 where b=repeat(_utf8 'b',310);
i
1
drop table t1;
...@@ -322,11 +322,11 @@ CHECK TABLE t1; ...@@ -322,11 +322,11 @@ CHECK TABLE t1;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
test.t1 check status OK test.t1 check status OK
drop table t1; drop table t1;
CREATE TABLE t1 (a varchar(255), b varchar(255), c varchar(255), KEY t1 (a, b, c)); CREATE TABLE t1 (a varchar(255), b varchar(255), c varchar(255), d varchar(255), e varchar(255), KEY t1 (a, b, c, d, e));
ERROR 42000: Specified key was too long; max key length is 500 bytes ERROR 42000: Specified key was too long; max key length is 1000 bytes
CREATE TABLE t1 (a varchar(255), b varchar(255), c varchar(255)); CREATE TABLE t1 (a varchar(255), b varchar(255), c varchar(255), d varchar(255), e varchar(255));
ALTER TABLE t1 ADD INDEX t1 (a, b, c); ALTER TABLE t1 ADD INDEX t1 (a, b, c, d, e);
ERROR 42000: Specified key was too long; max key length is 500 bytes ERROR 42000: Specified key was too long; max key length is 1000 bytes
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 (a int not null, b int, c int, key(b), key(c), key(a,b), key(c,a)); CREATE TABLE t1 (a int not null, b int, c int, key(b), key(c), key(a,b), key(c,a));
INSERT into t1 values (0, null, 0), (0, null, 1), (0, null, 2), (0, null,3), (1,1,4); INSERT into t1 values (0, null, 0), (0, null, 1), (0, null, 2), (0, null,3), (1,1,4);
......
...@@ -346,16 +346,16 @@ HELLO MY 1 ...@@ -346,16 +346,16 @@ HELLO MY 1
a 1 a 1
hello 1 hello 1
drop table t1; drop table t1;
create table t1 (a text, unique (a(300))); create table t1 (a text, unique (a(2100)));
ERROR 42000: Specified key was too long; max key length is 255 bytes ERROR 42000: Specified key was too long; max key length is 1000 bytes
create table t1 (a text, key (a(300))); create table t1 (a text, key (a(2100)));
Warnings: Warnings:
Warning 1071 Specified key was too long; max key length is 255 bytes Warning 1071 Specified key was too long; max key length is 1000 bytes
show create table t1; show create table t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
`a` text, `a` text,
KEY `a` (`a`(255)) KEY `a` (`a`(1000))
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1; drop table t1;
CREATE TABLE t1 ( CREATE TABLE t1 (
......
...@@ -104,4 +104,4 @@ drop table t1; ...@@ -104,4 +104,4 @@ drop table t1;
# UTF8 breaks primary keys for cols > 85 characters # UTF8 breaks primary keys for cols > 85 characters
# #
--error 1071 --error 1071
create table t1 (a char(160) character set utf8, primary key(a)); create table t1 (a text character set utf8, primary key(a(360)));
...@@ -191,3 +191,16 @@ SELECT * FROM t1; ...@@ -191,3 +191,16 @@ SELECT * FROM t1;
INSERT INTO t1 (c) VALUES ('a'),('a'); INSERT INTO t1 (c) VALUES ('a'),('a');
SELECT * FROM t1; SELECT * FROM t1;
drop table t1; drop table t1;
#
# longer keys
#
create table t1 (i int, a char(200), b text, unique (a), unique (b(300))) charset utf8;
insert t1 values (1, repeat('a',210), repeat('b', 310));
insert t1 values (2, repeat(0xD0B1,215), repeat(0xD0B1, 310));
select i, length(a), length(b), char_length(a), char_length(b) from t1;
select i from t1 where a=repeat(_utf8 'a',200);
select i from t1 where a=repeat(_utf8 0xD0B1,200);
select i from t1 where b=repeat(_utf8 'b',310);
drop table t1;
...@@ -337,10 +337,10 @@ drop table t1; ...@@ -337,10 +337,10 @@ drop table t1;
# #
--error 1071 --error 1071
CREATE TABLE t1 (a varchar(255), b varchar(255), c varchar(255), KEY t1 (a, b, c)); CREATE TABLE t1 (a varchar(255), b varchar(255), c varchar(255), d varchar(255), e varchar(255), KEY t1 (a, b, c, d, e));
CREATE TABLE t1 (a varchar(255), b varchar(255), c varchar(255)); CREATE TABLE t1 (a varchar(255), b varchar(255), c varchar(255), d varchar(255), e varchar(255));
--error 1071 --error 1071
ALTER TABLE t1 ADD INDEX t1 (a, b, c); ALTER TABLE t1 ADD INDEX t1 (a, b, c, d, e);
DROP TABLE t1; DROP TABLE t1;
# #
......
...@@ -122,8 +122,8 @@ select d,count(*) from t1 group by d; ...@@ -122,8 +122,8 @@ select d,count(*) from t1 group by d;
drop table t1; drop table t1;
-- error 1071 -- error 1071
create table t1 (a text, unique (a(300))); # should give an error create table t1 (a text, unique (a(2100))); # should give an error
create table t1 (a text, key (a(300))); # key is auto-truncated create table t1 (a text, key (a(2100))); # key is auto-truncated
show create table t1; show create table t1;
drop table t1; drop table t1;
......
...@@ -65,6 +65,7 @@ class ha_myisam: public handler ...@@ -65,6 +65,7 @@ class ha_myisam: public handler
uint max_keys() const { return MI_MAX_KEY; } uint max_keys() const { return MI_MAX_KEY; }
uint max_key_parts() const { return MAX_REF_PARTS; } uint max_key_parts() const { return MAX_REF_PARTS; }
uint max_key_length() const { return MI_MAX_KEY_LENGTH; } uint max_key_length() const { return MI_MAX_KEY_LENGTH; }
uint max_key_part_length() { return MI_MAX_KEY_LENGTH; }
uint checksum() const; uint checksum() const;
int open(const char *name, int mode, uint test_if_locked); int open(const char *name, int mode, uint test_if_locked);
......
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