summaryrefslogtreecommitdiff
path: root/mysql-test
diff options
context:
space:
mode:
authorunknown <gluh@mysql.com/eagle.(none)>2007-04-03 16:13:27 +0500
committerunknown <gluh@mysql.com/eagle.(none)>2007-04-03 16:13:27 +0500
commitd05bbb4f46ee6399dd9ffd67d2fbc25ce1410d89 (patch)
tree43cf3af5e63ac68035fb4a0461b4e0e7da5d00bb /mysql-test
parent7a8e12656f8dbe5e0bf9f1467d73ec31753cfbe0 (diff)
downloadmariadb-git-d05bbb4f46ee6399dd9ffd67d2fbc25ce1410d89.tar.gz
Bug#21432 Database/Table name limited to 64 bytes, not chars, problems with multi-byte
client/mysqldump.c: fixed typo include/mysql_com.h: added new constants SYSTEM_CHARSET_MBMAXLEN, NAME_CHAR_LEN, USERNAME_CHAR_LENGTH increased NAME_LEN, USERNAME_LENGTH mysql-test/r/create.result: result fix mysql-test/r/grant.result: result fix mysql-test/r/mysql.result: result fix mysql-test/r/sp.result: result fix mysql-test/t/create.test: test case mysql-test/t/grant.test: test case sql/events.cc: NAME_LEN is replaced with NAME_CHAR_LEN sql/item_strfunc.h: fixed calculation of max_length sql/mysql_priv.h: check_string_length function is replaced with check_string_byte_length added new function check_string_char_length sql/sp.cc: NAME_LEN is replaced with NAME_CHAR_LEN sql/sp_head.cc: NAME_LEN is replaced with NAME_CHAR_LEN sql/sp_head.h: changed parameter of 'check_routine_name' function sql/sql_class.cc: NAME_LEN is replaced with NAME_CHAR_LEN sql/share/errmsg.txt: increased argument lengths according to new constants sql/sql_parse.cc: removed unnecessary checks added function 'check_string_char_length' sql/sql_plugin.cc: check that name is not longer than NAME_CHAR_LEN symbols sql/sql_show.cc: NAME_LEN is replaced with NAME_CHAR_LEN sql/sql_table.cc: check that key name is not longer than NAME_LEN symbols sql/sql_udf.cc: check that udf name is not longer than NAME_CHAR_LEN symbols sql/sql_yacc.yy: check that user name is not longer than USERNAME_CHAR_LENGTH symbols sql/table.cc: check that db or table or column name is not longer than NAME_LEN symbols storage/innobase/handler/ha_innodb.cc: removed unnecessary multiplication tests/mysql_client_test.c: NAME_LEN is replaced with NAME_CHAR_LEN
Diffstat (limited to 'mysql-test')
-rw-r--r--mysql-test/r/create.result99
-rw-r--r--mysql-test/r/grant.result9
-rw-r--r--mysql-test/r/mysql.result2
-rw-r--r--mysql-test/r/sp.result2
-rw-r--r--mysql-test/t/create.test88
-rw-r--r--mysql-test/t/grant.test12
6 files changed, 209 insertions, 3 deletions
diff --git a/mysql-test/r/create.result b/mysql-test/r/create.result
index 53892b219eb..717201f384a 100644
--- a/mysql-test/r/create.result
+++ b/mysql-test/r/create.result
@@ -827,7 +827,7 @@ ERROR 42000: Incorrect database name 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
DROP DATABASE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
ERROR 42000: Incorrect database name 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
RENAME DATABASE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa TO a;
-ERROR 42000: Unknown database 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
+ERROR 42000: Unknown database 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
RENAME DATABASE mysqltest TO aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
ERROR 42000: Incorrect database name 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
create database mysqltest;
@@ -838,3 +838,100 @@ USE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ERROR 42000: Incorrect database name 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
SHOW CREATE DATABASE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
ERROR 42000: Incorrect database name 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
+set names utf8;
+create database имя_базы_в_кодировке_утф8_длиной_больше_чем_45;
+use имя_базы_в_кодировке_утф8_длиной_больше_чем_45;
+select database();
+database()
+имя_базы_в_кодировке_утф8_длиной_больше_чем_45
+create table имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48
+(
+имя_поля_в_кодировке_утф8_длиной_больше_чем_45 int,
+index имя_индекса_в_кодировке_утф8_длиной_больше_чем_48 (имя_поля_в_кодировке_утф8_длиной_больше_чем_45)
+);
+create view имя_вью_кодировке_утф8_длиной_больше_чем_42 as
+select имя_поля_в_кодировке_утф8_длиной_больше_чем_45
+from имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48;
+select * from имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48;
+имя_поля_в_кодировке_утф8_длиной_больше_чем_45
+select SCHEMA_NAME from information_schema.schemata
+where schema_name='имя_базы_в_кодировке_утф8_длиной_больше_чем_45';
+SCHEMA_NAME
+имя_базы_в_кодировке_утф8_длиной_больше_чем_45
+select TABLE_NAME from information_schema.tables where
+table_schema='имя_базы_в_кодировке_утф8_длиной_больше_чем_45';
+TABLE_NAME
+имя_вью_кодировке_утф8_длиной_больше_чем_42
+имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48
+select COLUMN_NAME from information_schema.columns where
+table_schema='имя_базы_в_кодировке_утф8_длиной_больше_чем_45';
+COLUMN_NAME
+имя_поля_в_кодировке_утф8_длиной_больше_чем_45
+имя_поля_в_кодировке_утф8_длиной_больше_чем_45
+select INDEX_NAME from information_schema.statistics where
+table_schema='имя_базы_в_кодировке_утф8_длиной_больше_чем_45';
+INDEX_NAME
+имя_индекса_в_кодировке_утф8_длиной_больше_чем_48
+select TABLE_NAME from information_schema.views where
+table_schema='имя_базы_в_кодировке_утф8_длиной_больше_чем_45';
+TABLE_NAME
+имя_вью_кодировке_утф8_длиной_больше_чем_42
+show create table имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48;
+Table Create Table
+имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48 CREATE TABLE `имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48` (
+ `имя_поля_в_кодировке_утф8_длиной_больше_чем_45` int(11) DEFAULT NULL,
+ KEY `имя_индекса_в_кодировке_утф8_длиной_больше_чем_48` (`имя_поля_в_кодировке_утф8_длиной_больше_чем_45`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+show create view имя_вью_кодировке_утф8_длиной_больше_чем_42;
+View Create View
+имя_вью_кодировке_утф8_длиной_больше_чем_42 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `имя_вью_кодировке_утф8_длиной_больше_чем_42` AS select `имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48`.`имя_поля_в_кодировке_утф8_длиной_больше_чем_45` AS `имя_поля_в_кодировке_утф8_длиной_больше_чем_45` from `имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48`
+create event имя_события_в_кодировке_утф8_длиной_больше_чем_48 on schedule every 2 year do select 1;
+select EVENT_NAME from information_schema.events
+where event_schema='имя_базы_в_кодировке_утф8_длиной_больше_чем_45';
+EVENT_NAME
+имя_события_в_кодировке_утф8_длиной_больше_чем_48
+drop event имя_события_в_кодировке_утф8_длиной_больше_чем_48;
+create event
+очень_очень_очень_очень_очень_очень_очень_очень_длинная_строка_66
+on schedule every 2 year do select 1;
+ERROR 42000: Identifier name 'очень_очень_очень_очень_очень_очень_очень_очень_длинна' is too long
+create trigger имя_триггера_в_кодировке_утф8_длиной_больше_чем_49
+before insert on имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48 for each row set @a:=1;
+select TRIGGER_NAME from information_schema.triggers where
+trigger_schema='имя_базы_в_кодировке_утф8_длиной_больше_чем_45';
+TRIGGER_NAME
+имя_триггера_в_кодировке_утф8_длиной_больше_чем_49
+drop trigger имя_триггера_в_кодировке_утф8_длиной_больше_чем_49;
+create trigger
+очень_очень_очень_очень_очень_очень_очень_очень_длинная_строка_66
+before insert on имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48 for each row set @a:=1;
+ERROR 42000: Identifier name 'очень_очень_очень_очень_очень_очень_очень_очень_длинна' is too long
+drop trigger очень_очень_очень_очень_очень_очень_очень_очень_длинная_строка_66;
+ERROR 42000: Identifier name 'очень_очень_очень_очень_очень_очень_очень_очень_длинна' is too long
+create procedure имя_процедуры_в_кодировке_утф8_длиной_больше_чем_50()
+begin
+end;
+select ROUTINE_NAME from information_schema.routines where
+routine_schema='имя_базы_в_кодировке_утф8_длиной_больше_чем_45';
+ROUTINE_NAME
+имя_процедуры_в_кодировке_утф8_длиной_больше_чем_50
+drop procedure имя_процедуры_в_кодировке_утф8_длиной_больше_чем_50;
+create procedure очень_очень_очень_очень_очень_очень_очень_очень_длинная_строка_66()
+begin
+end;
+ERROR 42000: Identifier name 'очень_очень_очень_очень_очень_очень_очень_очень_длинна' is too long
+create function имя_функции_в_кодировке_утф8_длиной_больше_чем_49()
+returns int
+return 0;
+select ROUTINE_NAME from information_schema.routines where
+routine_schema='имя_базы_в_кодировке_утф8_длиной_больше_чем_45';
+ROUTINE_NAME
+имя_функции_в_кодировке_утф8_длиной_больше_чем_49
+drop function имя_функции_в_кодировке_утф8_длиной_больше_чем_49;
+create function очень_очень_очень_очень_очень_очень_очень_очень_длинная_строка_66()
+returns int
+return 0;
+ERROR 42000: Identifier name 'очень_очень_очень_очень_очень_очень_очень_очень_длинна' is too long
+drop database имя_базы_в_кодировке_утф8_длиной_больше_чем_45;
+set names default;
+use test;
diff --git a/mysql-test/r/grant.result b/mysql-test/r/grant.result
index 5d97e540976..2ac5953c456 100644
--- a/mysql-test/r/grant.result
+++ b/mysql-test/r/grant.result
@@ -1060,3 +1060,12 @@ DROP USER bug23556@localhost;
GRANT PROCESS ON * TO user@localhost;
ERROR 3D000: No database selected
End of 5.0 tests
+set names utf8;
+grant select on test.* to юзер_юзер@localhost;
+user()
+юзер_юзер@localhost
+revoke all on test.* from юзер_юзер@localhost;
+drop user юзер_юзер@localhost;
+grant select on test.* to очень_длинный_юзер@localhost;
+ERROR HY000: String 'очень_длинный_юзер' is too long for user name (should be no longer than 16)
+set names default;
diff --git a/mysql-test/r/mysql.result b/mysql-test/r/mysql.result
index e83bbe97eaa..61d04deef51 100644
--- a/mysql-test/r/mysql.result
+++ b/mysql-test/r/mysql.result
@@ -167,7 +167,7 @@ ERROR 2005 (HY000) at line 1: Unknown MySQL server host 'invalid_hostname' (errn
The commands reported in the bug report
ERROR 2005 (HY000) at line 1: Unknown MySQL server host 'cyril has found a bug :)XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' (errno)
Too long dbname
-ERROR 1049 (42000) at line 1: Unknown database 'test_really_long_dbnamexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
+ERROR 1102 (42000) at line 1: Incorrect database name 'test_really_long_dbnamexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
Too long hostname
ERROR 2005 (HY000) at line 1: Unknown MySQL server host 'cyrils_superlonghostnameXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' (errno)
1
diff --git a/mysql-test/r/sp.result b/mysql-test/r/sp.result
index 4abbb35bd6a..733cc40b296 100644
--- a/mysql-test/r/sp.result
+++ b/mysql-test/r/sp.result
@@ -5398,7 +5398,7 @@ drop database if exists това_е_дълго_име_за_база_данни_
create database това_е_дълго_име_за_база_данни_нали|
INSERT INTO mysql.proc VALUES ('това_е_дълго_име_за_база_данни_нали','това_е_процедура_с_доста_дълго_име_нали_и_още_по_дълго','PROCEDURE','това_е_процедура_с_доста_дълго_име_нали_и_още_по_дълго','SQL','CONTAINS_SQL','NO','DEFINER','','','bad_body','root@localhost',now(), now(),'','')|
call това_е_дълго_име_за_база_данни_нали.това_е_процедура_с_доста_дълго_име_нали_и_още_по_дълго()|
-ERROR HY000: Failed to load routine това_е_дълго_име_за_база_данни_нали.. The table mysql.proc is missing, corrupt, or contains bad data (internal code -6)
+ERROR HY000: Failed to load routine това_е_дълго_име_за_база_данни_нали.това_е_процедура_с_доста_дълго_име_нали_и_още_по_дълго. The table mysql.proc is missing, corrupt, or contains bad data (internal code -6)
drop database това_е_дълго_име_за_база_данни_нали|
CREATE TABLE t3 (
Member_ID varchar(15) NOT NULL,
diff --git a/mysql-test/t/create.test b/mysql-test/t/create.test
index ffdcee06488..83553e314a7 100644
--- a/mysql-test/t/create.test
+++ b/mysql-test/t/create.test
@@ -734,3 +734,91 @@ drop database mysqltest;
USE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
--error 1102
SHOW CREATE DATABASE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
+
+#
+# Bug#21432 Database/Table name limited to 64 bytes, not chars, problems with multi-byte
+#
+set names utf8;
+
+create database имя_базы_в_кодировке_утф8_длиной_больше_чем_45;
+use имя_базы_в_кодировке_утф8_длиной_больше_чем_45;
+select database();
+create table имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48
+(
+ имя_поля_в_кодировке_утф8_длиной_больше_чем_45 int,
+ index имя_индекса_в_кодировке_утф8_длиной_больше_чем_48 (имя_поля_в_кодировке_утф8_длиной_больше_чем_45)
+);
+
+create view имя_вью_кодировке_утф8_длиной_больше_чем_42 as
+select имя_поля_в_кодировке_утф8_длиной_больше_чем_45
+from имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48;
+
+# database, table, field, key, view
+select * from имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48;
+
+select SCHEMA_NAME from information_schema.schemata
+where schema_name='имя_базы_в_кодировке_утф8_длиной_больше_чем_45';
+
+select TABLE_NAME from information_schema.tables where
+table_schema='имя_базы_в_кодировке_утф8_длиной_больше_чем_45';
+
+select COLUMN_NAME from information_schema.columns where
+table_schema='имя_базы_в_кодировке_утф8_длиной_больше_чем_45';
+
+select INDEX_NAME from information_schema.statistics where
+table_schema='имя_базы_в_кодировке_утф8_длиной_больше_чем_45';
+
+select TABLE_NAME from information_schema.views where
+table_schema='имя_базы_в_кодировке_утф8_длиной_больше_чем_45';
+
+show create table имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48;
+show create view имя_вью_кодировке_утф8_длиной_больше_чем_42;
+
+# procedure, function, event, trigger
+
+create event имя_события_в_кодировке_утф8_длиной_больше_чем_48 on schedule every 2 year do select 1;
+select EVENT_NAME from information_schema.events
+where event_schema='имя_базы_в_кодировке_утф8_длиной_больше_чем_45';
+drop event имя_события_в_кодировке_утф8_длиной_больше_чем_48;
+--error 1059
+create event
+очень_очень_очень_очень_очень_очень_очень_очень_длинная_строка_66
+on schedule every 2 year do select 1;
+
+create trigger имя_триггера_в_кодировке_утф8_длиной_больше_чем_49
+before insert on имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48 for each row set @a:=1;
+select TRIGGER_NAME from information_schema.triggers where
+trigger_schema='имя_базы_в_кодировке_утф8_длиной_больше_чем_45';
+drop trigger имя_триггера_в_кодировке_утф8_длиной_больше_чем_49;
+--error 1059
+create trigger
+очень_очень_очень_очень_очень_очень_очень_очень_длинная_строка_66
+before insert on имя_таблицы_в_кодировке_утф8_длиной_больше_чем_48 for each row set @a:=1;
+--error 1059
+drop trigger очень_очень_очень_очень_очень_очень_очень_очень_длинная_строка_66;
+
+create procedure имя_процедуры_в_кодировке_утф8_длиной_больше_чем_50()
+begin
+end;
+select ROUTINE_NAME from information_schema.routines where
+routine_schema='имя_базы_в_кодировке_утф8_длиной_больше_чем_45';
+drop procedure имя_процедуры_в_кодировке_утф8_длиной_больше_чем_50;
+--error 1059
+create procedure очень_очень_очень_очень_очень_очень_очень_очень_длинная_строка_66()
+begin
+end;
+
+create function имя_функции_в_кодировке_утф8_длиной_больше_чем_49()
+ returns int
+return 0;
+select ROUTINE_NAME from information_schema.routines where
+routine_schema='имя_базы_в_кодировке_утф8_длиной_больше_чем_45';
+drop function имя_функции_в_кодировке_утф8_длиной_больше_чем_49;
+--error 1059
+create function очень_очень_очень_очень_очень_очень_очень_очень_длинная_строка_66()
+ returns int
+return 0;
+
+drop database имя_базы_в_кодировке_утф8_длиной_больше_чем_45;
+set names default;
+use test;
diff --git a/mysql-test/t/grant.test b/mysql-test/t/grant.test
index 9417ac687d4..0008c37646c 100644
--- a/mysql-test/t/grant.test
+++ b/mysql-test/t/grant.test
@@ -986,3 +986,15 @@ disconnect con1;
connection default;
--echo End of 5.0 tests
+
+#
+# Bug#21432: Database/Table name limited to 64 bytes, not chars, problems with multi-byte
+#
+set names utf8;
+grant select on test.* to юзер_юзер@localhost;
+--exec $MYSQL --default-character-set=utf8 --user=юзер_юзер -e "select user()"
+revoke all on test.* from юзер_юзер@localhost;
+drop user юзер_юзер@localhost;
+--error 1573
+grant select on test.* to очень_длинный_юзер@localhost;
+set names default;