diff options
author | unknown <gluh@mysql.com/eagle.(none)> | 2007-04-03 16:13:27 +0500 |
---|---|---|
committer | unknown <gluh@mysql.com/eagle.(none)> | 2007-04-03 16:13:27 +0500 |
commit | d05bbb4f46ee6399dd9ffd67d2fbc25ce1410d89 (patch) | |
tree | 43cf3af5e63ac68035fb4a0461b4e0e7da5d00bb /mysql-test | |
parent | 7a8e12656f8dbe5e0bf9f1467d73ec31753cfbe0 (diff) | |
download | mariadb-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.result | 99 | ||||
-rw-r--r-- | mysql-test/r/grant.result | 9 | ||||
-rw-r--r-- | mysql-test/r/mysql.result | 2 | ||||
-rw-r--r-- | mysql-test/r/sp.result | 2 | ||||
-rw-r--r-- | mysql-test/t/create.test | 88 | ||||
-rw-r--r-- | mysql-test/t/grant.test | 12 |
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; |