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
This commit is contained in:
parent
6e5ca12b6a
commit
fe074a726f
@ -3454,7 +3454,7 @@ static char *get_actual_table_name(const char *old_table_name, MEM_ROOT *root)
|
||||
|
||||
static int dump_selected_tables(char *db, char **table_names, int tables)
|
||||
{
|
||||
char table_buff[NAME_LEN*+3];
|
||||
char table_buff[NAME_LEN*2+3];
|
||||
DYNAMIC_STRING lock_tables_query;
|
||||
MEM_ROOT root;
|
||||
char **dump_tables, **pos, **end;
|
||||
|
@ -20,9 +20,13 @@
|
||||
#ifndef _mysql_com_h
|
||||
#define _mysql_com_h
|
||||
|
||||
#define NAME_LEN 64 /* Field/table name length */
|
||||
#define HOSTNAME_LENGTH 60
|
||||
#define USERNAME_LENGTH 16
|
||||
#define SYSTEM_CHARSET_MBMAXLEN 3
|
||||
#define NAME_CHAR_LEN 64 /* Field/table name length */
|
||||
#define USERNAME_CHAR_LENGTH 16
|
||||
#define NAME_LEN (NAME_CHAR_LEN*SYSTEM_CHARSET_MBMAXLEN)
|
||||
#define USERNAME_LENGTH (USERNAME_CHAR_LENGTH*SYSTEM_CHARSET_MBMAXLEN)
|
||||
|
||||
#define SERVER_VERSION_LENGTH 60
|
||||
#define SQLSTATE_LENGTH 5
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -568,7 +568,7 @@ Events::show_create_event(THD *thd, LEX_STRING dbname, LEX_STRING name)
|
||||
if (et->get_create_event(thd, &show_str))
|
||||
goto err;
|
||||
|
||||
field_list.push_back(new Item_empty_string("Event", NAME_LEN));
|
||||
field_list.push_back(new Item_empty_string("Event", NAME_CHAR_LEN));
|
||||
|
||||
sql_mode_str=
|
||||
sys_var_thd_sql_mode::symbolic_mode_representation(thd, et->sql_mode,
|
||||
|
@ -426,8 +426,8 @@ public:
|
||||
bool fix_fields(THD *thd, Item **ref);
|
||||
void fix_length_and_dec()
|
||||
{
|
||||
max_length= ((USERNAME_LENGTH + HOSTNAME_LENGTH + 1) *
|
||||
system_charset_info->mbmaxlen);
|
||||
max_length= (USERNAME_LENGTH +
|
||||
(HOSTNAME_LENGTH + 1) * SYSTEM_CHARSET_MBMAXLEN);
|
||||
}
|
||||
const char *func_name() const { return "user"; }
|
||||
const char *fully_qualified_func_name() const { return "user()"; }
|
||||
|
@ -366,7 +366,7 @@ MY_LOCALE *my_locale_by_number(uint number);
|
||||
Maximum length of time zone name that we support
|
||||
(Time zone name is char(64) in db). mysqlbinlog needs it.
|
||||
*/
|
||||
#define MAX_TIME_ZONE_NAME_LENGTH 72
|
||||
#define MAX_TIME_ZONE_NAME_LENGTH (NAME_LEN + 8)
|
||||
|
||||
/* The rest of the file is included in the server only */
|
||||
#ifndef MYSQL_CLIENT
|
||||
@ -622,8 +622,11 @@ void get_default_definer(THD *thd, LEX_USER *definer);
|
||||
LEX_USER *create_default_definer(THD *thd);
|
||||
LEX_USER *create_definer(THD *thd, LEX_STRING *user_name, LEX_STRING *host_name);
|
||||
LEX_USER *get_current_user(THD *thd, LEX_USER *user);
|
||||
bool check_string_length(LEX_STRING *str,
|
||||
const char *err_msg, uint max_length);
|
||||
bool check_string_byte_length(LEX_STRING *str, const char *err_msg,
|
||||
uint max_byte_length);
|
||||
bool check_string_char_length(LEX_STRING *str, const char *err_msg,
|
||||
uint max_char_length, CHARSET_INFO *cs,
|
||||
bool no_error);
|
||||
|
||||
enum enum_mysql_completiontype {
|
||||
ROLLBACK_RELEASE=-2, ROLLBACK=1, ROLLBACK_AND_CHAIN=7,
|
||||
@ -1164,7 +1167,7 @@ void mysql_ha_mark_tables_for_reopen(THD *thd, TABLE *table);
|
||||
/* sql_base.cc */
|
||||
#define TMP_TABLE_KEY_EXTRA 8
|
||||
void set_item_name(Item *item,char *pos,uint length);
|
||||
bool add_field_to_list(THD *thd, char *field_name, enum enum_field_types type,
|
||||
bool add_field_to_list(THD *thd, LEX_STRING *field_name, enum enum_field_types type,
|
||||
char *length, char *decimal,
|
||||
uint type_modifier,
|
||||
Item *default_value, Item *on_update_value,
|
||||
|
3584
sql/share/errmsg.txt
3584
sql/share/errmsg.txt
File diff suppressed because it is too large
Load Diff
22
sql/sp.cc
22
sql/sp.cc
@ -682,15 +682,15 @@ struct st_used_field
|
||||
|
||||
static struct st_used_field init_fields[]=
|
||||
{
|
||||
{ "Db", NAME_LEN, MYSQL_TYPE_STRING, 0},
|
||||
{ "Name", NAME_LEN, MYSQL_TYPE_STRING, 0},
|
||||
{ "Type", 9, MYSQL_TYPE_STRING, 0},
|
||||
{ "Definer", 77, MYSQL_TYPE_STRING, 0},
|
||||
{ "Modified", 0, MYSQL_TYPE_TIMESTAMP, 0},
|
||||
{ "Created", 0, MYSQL_TYPE_TIMESTAMP, 0},
|
||||
{ "Security_type", 1, MYSQL_TYPE_STRING, 0},
|
||||
{ "Comment", NAME_LEN, MYSQL_TYPE_STRING, 0},
|
||||
{ 0, 0, MYSQL_TYPE_STRING, 0}
|
||||
{ "Db", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0},
|
||||
{ "Name", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0},
|
||||
{ "Type", 9, MYSQL_TYPE_STRING, 0},
|
||||
{ "Definer", 77, MYSQL_TYPE_STRING, 0},
|
||||
{ "Modified", 0, MYSQL_TYPE_TIMESTAMP, 0},
|
||||
{ "Created", 0, MYSQL_TYPE_TIMESTAMP, 0},
|
||||
{ "Security_type", 1, MYSQL_TYPE_STRING, 0},
|
||||
{ "Comment", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0},
|
||||
{ 0, 0, MYSQL_TYPE_STRING, 0}
|
||||
};
|
||||
|
||||
|
||||
@ -1598,10 +1598,8 @@ sp_cache_routines_and_add_tables_aux(THD *thd, LEX *lex,
|
||||
rest of the server checks agains NAME_LEN bytes and not chars.
|
||||
Hence, the overrun happens only if the name is in length > 32 and
|
||||
uses multibyte (cyrillic, greek, etc.)
|
||||
|
||||
!! Change 3 with SYSTEM_CHARSET_MBMAXLEN when it's defined.
|
||||
*/
|
||||
char n[NAME_LEN*3*2+2];
|
||||
char n[NAME_LEN*2+2];
|
||||
|
||||
/* m_qname.str is not always \0 terminated */
|
||||
memcpy(n, name.m_qname.str, name.m_qname.length);
|
||||
|
@ -408,9 +408,22 @@ sp_name::init_qname(THD *thd)
|
||||
*/
|
||||
|
||||
bool
|
||||
check_routine_name(LEX_STRING ident)
|
||||
check_routine_name(LEX_STRING *ident)
|
||||
{
|
||||
return (!ident.str || !ident.str[0] || ident.str[ident.length-1] == ' ');
|
||||
if (!ident || !ident->str || !ident->str[0] ||
|
||||
ident->str[ident->length-1] == ' ')
|
||||
{
|
||||
my_error(ER_SP_WRONG_NAME, MYF(0), ident->str);
|
||||
return TRUE;
|
||||
}
|
||||
if (check_string_char_length(ident, "", NAME_CHAR_LEN,
|
||||
system_charset_info, 1))
|
||||
{
|
||||
my_error(ER_TOO_LONG_IDENT, MYF(0), ident->str);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
@ -2121,7 +2134,7 @@ sp_head::show_create_procedure(THD *thd)
|
||||
sys_var_thd_sql_mode::symbolic_mode_representation(thd,
|
||||
m_sql_mode,
|
||||
&sql_mode_len);
|
||||
field_list.push_back(new Item_empty_string("Procedure", NAME_LEN));
|
||||
field_list.push_back(new Item_empty_string("Procedure", NAME_CHAR_LEN));
|
||||
field_list.push_back(new Item_empty_string("sql_mode", sql_mode_len));
|
||||
// 1024 is for not to confuse old clients
|
||||
Item_empty_string *definition=
|
||||
@ -2192,7 +2205,7 @@ sp_head::show_create_function(THD *thd)
|
||||
sys_var_thd_sql_mode::symbolic_mode_representation(thd,
|
||||
m_sql_mode,
|
||||
&sql_mode_len);
|
||||
field_list.push_back(new Item_empty_string("Function",NAME_LEN));
|
||||
field_list.push_back(new Item_empty_string("Function",NAME_CHAR_LEN));
|
||||
field_list.push_back(new Item_empty_string("sql_mode", sql_mode_len));
|
||||
Item_empty_string *definition=
|
||||
new Item_empty_string("Create Function", max(buffer.length(),1024));
|
||||
|
@ -95,7 +95,7 @@ public:
|
||||
|
||||
|
||||
bool
|
||||
check_routine_name(LEX_STRING name);
|
||||
check_routine_name(LEX_STRING *ident);
|
||||
|
||||
class sp_head :private Query_arena
|
||||
{
|
||||
|
@ -898,7 +898,7 @@ int THD::send_explain_fields(select_result *result)
|
||||
CHARSET_INFO *cs= system_charset_info;
|
||||
field_list.push_back(new Item_return_int("id",3, MYSQL_TYPE_LONGLONG));
|
||||
field_list.push_back(new Item_empty_string("select_type", 19, cs));
|
||||
field_list.push_back(item= new Item_empty_string("table", NAME_LEN, cs));
|
||||
field_list.push_back(item= new Item_empty_string("table", NAME_CHAR_LEN, cs));
|
||||
item->maybe_null= 1;
|
||||
if (lex->describe & DESCRIBE_PARTITIONS)
|
||||
{
|
||||
@ -911,15 +911,16 @@ int THD::send_explain_fields(select_result *result)
|
||||
field_list.push_back(item= new Item_empty_string("type", 10, cs));
|
||||
item->maybe_null= 1;
|
||||
field_list.push_back(item=new Item_empty_string("possible_keys",
|
||||
NAME_LEN*MAX_KEY, cs));
|
||||
NAME_CHAR_LEN*MAX_KEY, cs));
|
||||
item->maybe_null=1;
|
||||
field_list.push_back(item=new Item_empty_string("key", NAME_LEN, cs));
|
||||
field_list.push_back(item=new Item_empty_string("key", NAME_CHAR_LEN, cs));
|
||||
item->maybe_null=1;
|
||||
field_list.push_back(item=new Item_empty_string("key_len",
|
||||
NAME_LEN*MAX_KEY));
|
||||
NAME_CHAR_LEN*MAX_KEY));
|
||||
item->maybe_null=1;
|
||||
field_list.push_back(item=new Item_empty_string("ref",
|
||||
NAME_LEN*MAX_REF_PARTS, cs));
|
||||
NAME_CHAR_LEN*MAX_REF_PARTS,
|
||||
cs));
|
||||
item->maybe_null=1;
|
||||
field_list.push_back(item= new Item_return_int("rows", 10,
|
||||
MYSQL_TYPE_LONGLONG));
|
||||
|
@ -3218,12 +3218,6 @@ end_with_restore_list:
|
||||
is_schema_db(lex->spname->m_db.str)))
|
||||
break;
|
||||
|
||||
if (lex->spname->m_name.length > NAME_LEN)
|
||||
{
|
||||
my_error(ER_TOO_LONG_IDENT, MYF(0), lex->spname->m_name.str);
|
||||
/* this jumps to the end of the function and skips own messaging */
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (lex->sql_command == SQLCOM_SHOW_CREATE_EVENT)
|
||||
res= Events::get_instance()->show_create_event(thd, lex->spname->m_db,
|
||||
@ -3996,11 +3990,6 @@ create_sp_error:
|
||||
}
|
||||
case SQLCOM_SHOW_CREATE_PROC:
|
||||
{
|
||||
if (lex->spname->m_name.length > NAME_LEN)
|
||||
{
|
||||
my_error(ER_TOO_LONG_IDENT, MYF(0), lex->spname->m_name.str);
|
||||
goto error;
|
||||
}
|
||||
if (sp_show_create_procedure(thd, lex->spname) != SP_OK)
|
||||
{ /* We don't distinguish between errors for now */
|
||||
my_error(ER_SP_DOES_NOT_EXIST, MYF(0),
|
||||
@ -4011,11 +4000,6 @@ create_sp_error:
|
||||
}
|
||||
case SQLCOM_SHOW_CREATE_FUNC:
|
||||
{
|
||||
if (lex->spname->m_name.length > NAME_LEN)
|
||||
{
|
||||
my_error(ER_TOO_LONG_IDENT, MYF(0), lex->spname->m_name.str);
|
||||
goto error;
|
||||
}
|
||||
if (sp_show_create_function(thd, lex->spname) != SP_OK)
|
||||
{ /* We don't distinguish between errors for now */
|
||||
my_error(ER_SP_DOES_NOT_EXIST, MYF(0),
|
||||
@ -4044,11 +4028,6 @@ create_sp_error:
|
||||
{
|
||||
sp_head *sp;
|
||||
|
||||
if (lex->spname->m_name.length > NAME_LEN)
|
||||
{
|
||||
my_error(ER_TOO_LONG_IDENT, MYF(0), lex->spname->m_name.str);
|
||||
goto error;
|
||||
}
|
||||
if (lex->sql_command == SQLCOM_SHOW_PROC_CODE)
|
||||
sp= sp_find_routine(thd, TYPE_ENUM_PROCEDURE, lex->spname,
|
||||
&thd->sp_proc_cache, FALSE);
|
||||
@ -5332,7 +5311,7 @@ bool mysql_test_parse_for_slave(THD *thd, char *inBuf, uint length)
|
||||
** Return 0 if ok
|
||||
******************************************************************************/
|
||||
|
||||
bool add_field_to_list(THD *thd, char *field_name, enum_field_types type,
|
||||
bool add_field_to_list(THD *thd, LEX_STRING *field_name, enum_field_types type,
|
||||
char *length, char *decimals,
|
||||
uint type_modifier,
|
||||
Item *default_value, Item *on_update_value,
|
||||
@ -5345,14 +5324,15 @@ bool add_field_to_list(THD *thd, char *field_name, enum_field_types type,
|
||||
LEX *lex= thd->lex;
|
||||
DBUG_ENTER("add_field_to_list");
|
||||
|
||||
if (strlen(field_name) > NAME_LEN)
|
||||
if (check_string_char_length(field_name, "", NAME_CHAR_LEN,
|
||||
system_charset_info, 1))
|
||||
{
|
||||
my_error(ER_TOO_LONG_IDENT, MYF(0), field_name); /* purecov: inspected */
|
||||
my_error(ER_TOO_LONG_IDENT, MYF(0), field_name->str); /* purecov: inspected */
|
||||
DBUG_RETURN(1); /* purecov: inspected */
|
||||
}
|
||||
if (type_modifier & PRI_KEY_FLAG)
|
||||
{
|
||||
lex->col_list.push_back(new key_part_spec(field_name,0));
|
||||
lex->col_list.push_back(new key_part_spec(field_name->str, 0));
|
||||
lex->key_list.push_back(new Key(Key::PRIMARY, NullS,
|
||||
&default_key_create_info,
|
||||
0, lex->col_list));
|
||||
@ -5360,7 +5340,7 @@ bool add_field_to_list(THD *thd, char *field_name, enum_field_types type,
|
||||
}
|
||||
if (type_modifier & (UNIQUE_FLAG | UNIQUE_KEY_FLAG))
|
||||
{
|
||||
lex->col_list.push_back(new key_part_spec(field_name,0));
|
||||
lex->col_list.push_back(new key_part_spec(field_name->str, 0));
|
||||
lex->key_list.push_back(new Key(Key::UNIQUE, NullS,
|
||||
&default_key_create_info, 0,
|
||||
lex->col_list));
|
||||
@ -5380,7 +5360,7 @@ bool add_field_to_list(THD *thd, char *field_name, enum_field_types type,
|
||||
!(((Item_func*)default_value)->functype() == Item_func::NOW_FUNC &&
|
||||
type == MYSQL_TYPE_TIMESTAMP))
|
||||
{
|
||||
my_error(ER_INVALID_DEFAULT, MYF(0), field_name);
|
||||
my_error(ER_INVALID_DEFAULT, MYF(0), field_name->str);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
else if (default_value->type() == Item::NULL_ITEM)
|
||||
@ -5389,20 +5369,20 @@ bool add_field_to_list(THD *thd, char *field_name, enum_field_types type,
|
||||
if ((type_modifier & (NOT_NULL_FLAG | AUTO_INCREMENT_FLAG)) ==
|
||||
NOT_NULL_FLAG)
|
||||
{
|
||||
my_error(ER_INVALID_DEFAULT, MYF(0), field_name);
|
||||
my_error(ER_INVALID_DEFAULT, MYF(0), field_name->str);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
}
|
||||
else if (type_modifier & AUTO_INCREMENT_FLAG)
|
||||
{
|
||||
my_error(ER_INVALID_DEFAULT, MYF(0), field_name);
|
||||
my_error(ER_INVALID_DEFAULT, MYF(0), field_name->str);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
}
|
||||
|
||||
if (on_update_value && type != MYSQL_TYPE_TIMESTAMP)
|
||||
{
|
||||
my_error(ER_INVALID_ON_UPDATE, MYF(0), field_name);
|
||||
my_error(ER_INVALID_ON_UPDATE, MYF(0), field_name->str);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
|
||||
@ -5418,7 +5398,7 @@ bool add_field_to_list(THD *thd, char *field_name, enum_field_types type,
|
||||
}
|
||||
|
||||
if (!(new_field= new create_field()) ||
|
||||
new_field->init(thd, field_name, type, length, decimals, type_modifier,
|
||||
new_field->init(thd, field_name->str, type, length, decimals, type_modifier,
|
||||
default_value, on_update_value, comment, change,
|
||||
interval_list, cs, uint_geom_type))
|
||||
DBUG_RETURN(1);
|
||||
@ -6970,26 +6950,62 @@ LEX_USER *get_current_user(THD *thd, LEX_USER *user)
|
||||
|
||||
|
||||
/*
|
||||
Check that length of a string does not exceed some limit.
|
||||
Check that byte length of a string does not exceed some limit.
|
||||
|
||||
SYNOPSIS
|
||||
check_string_length()
|
||||
str string to be checked
|
||||
err_msg error message to be displayed if the string is too long
|
||||
max_length max length
|
||||
check_string_byte_length()
|
||||
str string to be checked
|
||||
err_msg error message to be displayed if the string is too long
|
||||
max_byte_length max length in bytes
|
||||
|
||||
RETURN
|
||||
FALSE the passed string is not longer than max_length
|
||||
TRUE the passed string is longer than max_length
|
||||
|
||||
NOTE
|
||||
The function is not used in existing code but can be useful later?
|
||||
*/
|
||||
|
||||
bool check_string_length(LEX_STRING *str, const char *err_msg,
|
||||
uint max_length)
|
||||
bool check_string_byte_length(LEX_STRING *str, const char *err_msg,
|
||||
uint max_byte_length)
|
||||
{
|
||||
if (str->length <= max_length)
|
||||
if (str->length <= max_byte_length)
|
||||
return FALSE;
|
||||
|
||||
my_error(ER_WRONG_STRING_LENGTH, MYF(0), str->str, err_msg, max_length);
|
||||
my_error(ER_WRONG_STRING_LENGTH, MYF(0), str->str, err_msg, max_byte_length);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Check that char length of a string does not exceed some limit.
|
||||
|
||||
SYNOPSIS
|
||||
check_string_char_length()
|
||||
str string to be checked
|
||||
err_msg error message to be displayed if the string is too long
|
||||
max_char_length max length in symbols
|
||||
cs string charset
|
||||
|
||||
RETURN
|
||||
FALSE the passed string is not longer than max_char_length
|
||||
TRUE the passed string is longer than max_char_length
|
||||
*/
|
||||
|
||||
|
||||
bool check_string_char_length(LEX_STRING *str, const char *err_msg,
|
||||
uint max_char_length, CHARSET_INFO *cs,
|
||||
bool no_error)
|
||||
{
|
||||
int well_formed_error;
|
||||
uint res= cs->cset->well_formed_len(cs, str->str, str->str + str->length,
|
||||
max_char_length, &well_formed_error);
|
||||
|
||||
if (!well_formed_error && str->length == res)
|
||||
return FALSE;
|
||||
|
||||
if (!no_error)
|
||||
my_error(ER_WRONG_STRING_LENGTH, MYF(0), str->str, err_msg, max_char_length);
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -162,7 +162,8 @@ static st_plugin_dl *plugin_dl_add(const LEX_STRING *dl, int report)
|
||||
plugin directory are used (to make this even remotely secure).
|
||||
*/
|
||||
if (my_strchr(files_charset_info, dl->str, dl->str + dl->length, FN_LIBCHAR) ||
|
||||
dl->length > NAME_LEN ||
|
||||
check_string_char_length((LEX_STRING *) dl, "", NAME_CHAR_LEN,
|
||||
system_charset_info, 1) ||
|
||||
plugin_dir_len + dl->length + 1 >= FN_REFLEN)
|
||||
{
|
||||
if (report & REPORT_TO_USER)
|
||||
|
194
sql/sql_show.cc
194
sql/sql_show.cc
@ -362,7 +362,7 @@ bool mysqld_show_privileges(THD *thd)
|
||||
|
||||
field_list.push_back(new Item_empty_string("Privilege",10));
|
||||
field_list.push_back(new Item_empty_string("Context",15));
|
||||
field_list.push_back(new Item_empty_string("Comment",NAME_LEN));
|
||||
field_list.push_back(new Item_empty_string("Comment",NAME_CHAR_LEN));
|
||||
|
||||
if (protocol->send_fields(&field_list,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
@ -438,8 +438,8 @@ bool mysqld_show_column_types(THD *thd)
|
||||
field_list.push_back(new Item_empty_string("Zerofill",4));
|
||||
field_list.push_back(new Item_empty_string("Searchable",4));
|
||||
field_list.push_back(new Item_empty_string("Case_Sensitive",4));
|
||||
field_list.push_back(new Item_empty_string("Default",NAME_LEN));
|
||||
field_list.push_back(new Item_empty_string("Comment",NAME_LEN));
|
||||
field_list.push_back(new Item_empty_string("Default",NAME_CHAR_LEN));
|
||||
field_list.push_back(new Item_empty_string("Comment",NAME_CHAR_LEN));
|
||||
|
||||
if (protocol->send_fields(&field_list,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
@ -521,7 +521,7 @@ find_files(THD *thd, List<char> *files, const char *db,
|
||||
|
||||
for (i=0 ; i < (uint) dirp->number_off_files ; i++)
|
||||
{
|
||||
char uname[NAME_LEN*3+1]; /* Unencoded name */
|
||||
char uname[NAME_LEN + 1]; /* Unencoded name */
|
||||
file=dirp->dir_entry+i;
|
||||
if (dir)
|
||||
{ /* Return databases */
|
||||
@ -651,13 +651,13 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list)
|
||||
List<Item> field_list;
|
||||
if (table_list->view)
|
||||
{
|
||||
field_list.push_back(new Item_empty_string("View",NAME_LEN));
|
||||
field_list.push_back(new Item_empty_string("View",NAME_CHAR_LEN));
|
||||
field_list.push_back(new Item_empty_string("Create View",
|
||||
max(buffer.length(),1024)));
|
||||
}
|
||||
else
|
||||
{
|
||||
field_list.push_back(new Item_empty_string("Table",NAME_LEN));
|
||||
field_list.push_back(new Item_empty_string("Table",NAME_CHAR_LEN));
|
||||
// 1024 is for not to confuse old clients
|
||||
field_list.push_back(new Item_empty_string("Create Table",
|
||||
max(buffer.length(),1024)));
|
||||
@ -731,7 +731,7 @@ bool mysqld_show_create_db(THD *thd, char *dbname,
|
||||
load_db_opt_by_name(thd, dbname, &create);
|
||||
}
|
||||
List<Item> field_list;
|
||||
field_list.push_back(new Item_empty_string("Database",NAME_LEN));
|
||||
field_list.push_back(new Item_empty_string("Database",NAME_CHAR_LEN));
|
||||
field_list.push_back(new Item_empty_string("Create Database",1024));
|
||||
|
||||
if (protocol->send_fields(&field_list,
|
||||
@ -1626,7 +1626,7 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose)
|
||||
field_list.push_back(new Item_int("Id", 0, MY_INT32_NUM_DECIMAL_DIGITS));
|
||||
field_list.push_back(new Item_empty_string("User",16));
|
||||
field_list.push_back(new Item_empty_string("Host",LIST_PROCESS_HOST_LEN));
|
||||
field_list.push_back(field=new Item_empty_string("db",NAME_LEN));
|
||||
field_list.push_back(field=new Item_empty_string("db",NAME_CHAR_LEN));
|
||||
field->maybe_null=1;
|
||||
field_list.push_back(new Item_empty_string("Command",16));
|
||||
field_list.push_back(new Item_return_int("Time",7, MYSQL_TYPE_LONG));
|
||||
@ -5341,7 +5341,7 @@ int fill_schema_session_variables(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||
ST_FIELD_INFO schema_fields_info[]=
|
||||
{
|
||||
{"CATALOG_NAME", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"SCHEMA_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Database"},
|
||||
{"SCHEMA_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Database"},
|
||||
{"DEFAULT_CHARACTER_SET_NAME", 64, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"DEFAULT_COLLATION_NAME", 64, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"SQL_PATH", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
@ -5352,10 +5352,10 @@ ST_FIELD_INFO schema_fields_info[]=
|
||||
ST_FIELD_INFO tables_fields_info[]=
|
||||
{
|
||||
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA",NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Name"},
|
||||
{"TABLE_TYPE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"ENGINE", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, "Engine"},
|
||||
{"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Name"},
|
||||
{"TABLE_TYPE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"ENGINE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, "Engine"},
|
||||
{"VERSION", MY_INT64_NUM_DECIMAL_DIGITS , MYSQL_TYPE_LONG, 0, 1, "Version"},
|
||||
{"ROW_FORMAT", 10, MYSQL_TYPE_STRING, 0, 1, "Row_format"},
|
||||
{"TABLE_ROWS", MY_INT64_NUM_DECIMAL_DIGITS , MYSQL_TYPE_LONG, 0, 1, "Rows"},
|
||||
@ -5384,13 +5384,13 @@ ST_FIELD_INFO tables_fields_info[]=
|
||||
ST_FIELD_INFO columns_fields_info[]=
|
||||
{
|
||||
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"COLUMN_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Field"},
|
||||
{"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"COLUMN_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Field"},
|
||||
{"ORDINAL_POSITION", MY_INT64_NUM_DECIMAL_DIGITS , MYSQL_TYPE_LONG, 0, 0, 0},
|
||||
{"COLUMN_DEFAULT", MAX_FIELD_VARCHARLENGTH, MYSQL_TYPE_STRING, 0, 1, "Default"},
|
||||
{"IS_NULLABLE", 3, MYSQL_TYPE_STRING, 0, 0, "Null"},
|
||||
{"DATA_TYPE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"DATA_TYPE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CHARACTER_MAXIMUM_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS , MYSQL_TYPE_LONG, 0, 1,
|
||||
0},
|
||||
{"CHARACTER_OCTET_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS , MYSQL_TYPE_LONG, 0, 1, 0},
|
||||
@ -5443,9 +5443,9 @@ ST_FIELD_INFO engines_fields_info[]=
|
||||
|
||||
ST_FIELD_INFO events_fields_info[]=
|
||||
{
|
||||
{"EVENT_CATALOG", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"EVENT_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Db"},
|
||||
{"EVENT_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Name"},
|
||||
{"EVENT_CATALOG", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"EVENT_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Db"},
|
||||
{"EVENT_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Name"},
|
||||
{"DEFINER", 77, MYSQL_TYPE_STRING, 0, 0, "Definer"},
|
||||
{"TIME_ZONE", 64, MYSQL_TYPE_STRING, 0, 0, "Time zone"},
|
||||
{"EVENT_BODY", 8, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
@ -5462,7 +5462,7 @@ ST_FIELD_INFO events_fields_info[]=
|
||||
{"CREATED", 0, MYSQL_TYPE_TIMESTAMP, 0, 0, 0},
|
||||
{"LAST_ALTERED", 0, MYSQL_TYPE_TIMESTAMP, 0, 0, 0},
|
||||
{"LAST_EXECUTED", 0, MYSQL_TYPE_TIMESTAMP, 0, 1, 0},
|
||||
{"EVENT_COMMENT", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"EVENT_COMMENT", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"ORIGINATOR", 10, MYSQL_TYPE_LONG, 0, 0, "Originator"},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
};
|
||||
@ -5479,25 +5479,25 @@ ST_FIELD_INFO coll_charset_app_fields_info[]=
|
||||
|
||||
ST_FIELD_INFO proc_fields_info[]=
|
||||
{
|
||||
{"SPECIFIC_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"SPECIFIC_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"ROUTINE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"ROUTINE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Db"},
|
||||
{"ROUTINE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Name"},
|
||||
{"ROUTINE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Db"},
|
||||
{"ROUTINE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Name"},
|
||||
{"ROUTINE_TYPE", 9, MYSQL_TYPE_STRING, 0, 0, "Type"},
|
||||
{"DTD_IDENTIFIER", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"DTD_IDENTIFIER", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"ROUTINE_BODY", 8, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"ROUTINE_DEFINITION", 65535, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"EXTERNAL_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"EXTERNAL_LANGUAGE", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"EXTERNAL_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"EXTERNAL_LANGUAGE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"PARAMETER_STYLE", 8, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"IS_DETERMINISTIC", 3, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"SQL_DATA_ACCESS", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"SQL_PATH", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"SQL_DATA_ACCESS", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"SQL_PATH", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"SECURITY_TYPE", 7, MYSQL_TYPE_STRING, 0, 0, "Security_type"},
|
||||
{"CREATED", 0, MYSQL_TYPE_TIMESTAMP, 0, 0, "Created"},
|
||||
{"LAST_ALTERED", 0, MYSQL_TYPE_TIMESTAMP, 0, 0, "Modified"},
|
||||
{"SQL_MODE", 65535, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"ROUTINE_COMMENT", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Comment"},
|
||||
{"ROUTINE_COMMENT", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Comment"},
|
||||
{"DEFINER", 77, MYSQL_TYPE_STRING, 0, 0, "Definer"},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
};
|
||||
@ -5506,13 +5506,13 @@ ST_FIELD_INFO proc_fields_info[]=
|
||||
ST_FIELD_INFO stat_fields_info[]=
|
||||
{
|
||||
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Table"},
|
||||
{"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Table"},
|
||||
{"NON_UNIQUE", 1, MYSQL_TYPE_LONG, 0, 0, "Non_unique"},
|
||||
{"INDEX_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"INDEX_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Key_name"},
|
||||
{"INDEX_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"INDEX_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Key_name"},
|
||||
{"SEQ_IN_INDEX", 2, MYSQL_TYPE_LONG, 0, 0, "Seq_in_index"},
|
||||
{"COLUMN_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Column_name"},
|
||||
{"COLUMN_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Column_name"},
|
||||
{"COLLATION", 1, MYSQL_TYPE_STRING, 0, 1, "Collation"},
|
||||
{"CARDINALITY", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONG, 0, 1, "Cardinality"},
|
||||
{"SUB_PART", 3, MYSQL_TYPE_LONG, 0, 1, "Sub_part"},
|
||||
@ -5527,8 +5527,8 @@ ST_FIELD_INFO stat_fields_info[]=
|
||||
ST_FIELD_INFO view_fields_info[]=
|
||||
{
|
||||
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"VIEW_DEFINITION", 65535, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CHECK_OPTION", 8, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"IS_UPDATABLE", 3, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
@ -5542,7 +5542,7 @@ ST_FIELD_INFO user_privileges_fields_info[]=
|
||||
{
|
||||
{"GRANTEE", 81, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"PRIVILEGE_TYPE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"PRIVILEGE_TYPE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"IS_GRANTABLE", 3, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
};
|
||||
@ -5552,8 +5552,8 @@ ST_FIELD_INFO schema_privileges_fields_info[]=
|
||||
{
|
||||
{"GRANTEE", 81, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"PRIVILEGE_TYPE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"PRIVILEGE_TYPE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"IS_GRANTABLE", 3, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
};
|
||||
@ -5563,9 +5563,9 @@ ST_FIELD_INFO table_privileges_fields_info[]=
|
||||
{
|
||||
{"GRANTEE", 81, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"PRIVILEGE_TYPE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"PRIVILEGE_TYPE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"IS_GRANTABLE", 3, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
};
|
||||
@ -5575,10 +5575,10 @@ ST_FIELD_INFO column_privileges_fields_info[]=
|
||||
{
|
||||
{"GRANTEE", 81, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"COLUMN_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"PRIVILEGE_TYPE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"COLUMN_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"PRIVILEGE_TYPE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"IS_GRANTABLE", 3, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
};
|
||||
@ -5587,11 +5587,11 @@ ST_FIELD_INFO column_privileges_fields_info[]=
|
||||
ST_FIELD_INFO table_constraints_fields_info[]=
|
||||
{
|
||||
{"CONSTRAINT_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"CONSTRAINT_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CONSTRAINT_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CONSTRAINT_TYPE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CONSTRAINT_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CONSTRAINT_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CONSTRAINT_TYPE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
};
|
||||
|
||||
@ -5599,17 +5599,17 @@ ST_FIELD_INFO table_constraints_fields_info[]=
|
||||
ST_FIELD_INFO key_column_usage_fields_info[]=
|
||||
{
|
||||
{"CONSTRAINT_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"CONSTRAINT_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CONSTRAINT_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CONSTRAINT_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CONSTRAINT_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"COLUMN_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"COLUMN_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"ORDINAL_POSITION", 10 ,MYSQL_TYPE_LONG, 0, 0, 0},
|
||||
{"POSITION_IN_UNIQUE_CONSTRAINT", 10 ,MYSQL_TYPE_LONG, 0, 1, 0},
|
||||
{"REFERENCED_TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"REFERENCED_TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"REFERENCED_COLUMN_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"REFERENCED_TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"REFERENCED_TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"REFERENCED_COLUMN_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
};
|
||||
|
||||
@ -5617,17 +5617,17 @@ ST_FIELD_INFO key_column_usage_fields_info[]=
|
||||
ST_FIELD_INFO table_names_fields_info[]=
|
||||
{
|
||||
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA",NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Tables_in_"},
|
||||
{"TABLE_TYPE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Table_type"},
|
||||
{"TABLE_SCHEMA",NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Tables_in_"},
|
||||
{"TABLE_TYPE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Table_type"},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
};
|
||||
|
||||
|
||||
ST_FIELD_INFO open_tables_fields_info[]=
|
||||
{
|
||||
{"Database", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Database"},
|
||||
{"Table",NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Table"},
|
||||
{"Database", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Database"},
|
||||
{"Table",NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Table"},
|
||||
{"In_use", 1, MYSQL_TYPE_LONG, 0, 0, "In_use"},
|
||||
{"Name_locked", 4, MYSQL_TYPE_LONG, 0, 0, "Name_locked"},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
@ -5637,19 +5637,19 @@ ST_FIELD_INFO open_tables_fields_info[]=
|
||||
ST_FIELD_INFO triggers_fields_info[]=
|
||||
{
|
||||
{"TRIGGER_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TRIGGER_SCHEMA",NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TRIGGER_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Trigger"},
|
||||
{"TRIGGER_SCHEMA",NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TRIGGER_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Trigger"},
|
||||
{"EVENT_MANIPULATION", 6, MYSQL_TYPE_STRING, 0, 0, "Event"},
|
||||
{"EVENT_OBJECT_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"EVENT_OBJECT_SCHEMA",NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"EVENT_OBJECT_TABLE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Table"},
|
||||
{"EVENT_OBJECT_SCHEMA",NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"EVENT_OBJECT_TABLE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Table"},
|
||||
{"ACTION_ORDER", 4, MYSQL_TYPE_LONG, 0, 0, 0},
|
||||
{"ACTION_CONDITION", 65535, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"ACTION_STATEMENT", 65535, MYSQL_TYPE_STRING, 0, 0, "Statement"},
|
||||
{"ACTION_ORIENTATION", 9, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"ACTION_TIMING", 6, MYSQL_TYPE_STRING, 0, 0, "Timing"},
|
||||
{"ACTION_REFERENCE_OLD_TABLE", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"ACTION_REFERENCE_NEW_TABLE", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"ACTION_REFERENCE_OLD_TABLE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"ACTION_REFERENCE_NEW_TABLE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"ACTION_REFERENCE_OLD_ROW", 3, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"ACTION_REFERENCE_NEW_ROW", 3, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CREATED", 0, MYSQL_TYPE_TIMESTAMP, 0, 1, "Created"},
|
||||
@ -5662,10 +5662,10 @@ ST_FIELD_INFO triggers_fields_info[]=
|
||||
ST_FIELD_INFO partitions_fields_info[]=
|
||||
{
|
||||
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA",NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"PARTITION_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"SUBPARTITION_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA",NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"PARTITION_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"SUBPARTITION_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"PARTITION_ORDINAL_POSITION", 21 , MYSQL_TYPE_LONG, 0, 1, 0},
|
||||
{"SUBPARTITION_ORDINAL_POSITION", 21 , MYSQL_TYPE_LONG, 0, 1, 0},
|
||||
{"PARTITION_METHOD", 12, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
@ -5685,7 +5685,7 @@ ST_FIELD_INFO partitions_fields_info[]=
|
||||
{"CHECKSUM", 21 , MYSQL_TYPE_LONG, 0, 1, 0},
|
||||
{"PARTITION_COMMENT", 80, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"NODEGROUP", 12 , MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLESPACE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLESPACE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
};
|
||||
|
||||
@ -5719,7 +5719,7 @@ ST_FIELD_INFO processlist_fields_info[]=
|
||||
{"ID", 4, MYSQL_TYPE_LONG, 0, 0, "Id"},
|
||||
{"USER", 16, MYSQL_TYPE_STRING, 0, 0, "User"},
|
||||
{"HOST", LIST_PROCESS_HOST_LEN, MYSQL_TYPE_STRING, 0, 0, "Host"},
|
||||
{"DB", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, "Db"},
|
||||
{"DB", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, "Db"},
|
||||
{"COMMAND", 16, MYSQL_TYPE_STRING, 0, 0, "Command"},
|
||||
{"TIME", 7, MYSQL_TYPE_LONG, 0, 0, "Time"},
|
||||
{"STATE", 64, MYSQL_TYPE_STRING, 0, 1, "State"},
|
||||
@ -5730,14 +5730,14 @@ ST_FIELD_INFO processlist_fields_info[]=
|
||||
|
||||
ST_FIELD_INFO plugin_fields_info[]=
|
||||
{
|
||||
{"PLUGIN_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Name"},
|
||||
{"PLUGIN_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Name"},
|
||||
{"PLUGIN_VERSION", 20, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"PLUGIN_STATUS", 10, MYSQL_TYPE_STRING, 0, 0, "Status"},
|
||||
{"PLUGIN_TYPE", 80, MYSQL_TYPE_STRING, 0, 0, "Type"},
|
||||
{"PLUGIN_TYPE_VERSION", 20, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"PLUGIN_LIBRARY", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, "Library"},
|
||||
{"PLUGIN_LIBRARY", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, "Library"},
|
||||
{"PLUGIN_LIBRARY_VERSION", 20, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"PLUGIN_AUTHOR", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"PLUGIN_AUTHOR", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"PLUGIN_DESCRIPTION", 65535, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"PLUGIN_LICENSE", 80, MYSQL_TYPE_STRING, 0, 1, "License"},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
@ -5746,16 +5746,16 @@ ST_FIELD_INFO plugin_fields_info[]=
|
||||
ST_FIELD_INFO files_fields_info[]=
|
||||
{
|
||||
{"FILE_ID", 4, MYSQL_TYPE_LONG, 0, 0, 0},
|
||||
{"FILE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"FILE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"FILE_TYPE", 20, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLESPACE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_CATALOG", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"LOGFILE_GROUP_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLESPACE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_CATALOG", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"LOGFILE_GROUP_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"LOGFILE_GROUP_NUMBER", 4, MYSQL_TYPE_LONG, 0, 1, 0},
|
||||
{"ENGINE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"FULLTEXT_KEYS", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"ENGINE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"FULLTEXT_KEYS", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"DELETED_ROWS", 4, MYSQL_TYPE_LONG, 0, 1, 0},
|
||||
{"UPDATE_COUNT", 4, MYSQL_TYPE_LONG, 0, 1, 0},
|
||||
{"FREE_EXTENTS", 4, MYSQL_TYPE_LONG, 0, 1, 0},
|
||||
@ -5799,16 +5799,16 @@ void init_fill_schema_files_row(TABLE* table)
|
||||
ST_FIELD_INFO referential_constraints_fields_info[]=
|
||||
{
|
||||
{"CONSTRAINT_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"CONSTRAINT_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CONSTRAINT_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CONSTRAINT_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CONSTRAINT_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"UNIQUE_CONSTRAINT_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"UNIQUE_CONSTRAINT_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"UNIQUE_CONSTRAINT_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"MATCH_OPTION", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"UPDATE_RULE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"DELETE_RULE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"REFERENCED_TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"UNIQUE_CONSTRAINT_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"UNIQUE_CONSTRAINT_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"MATCH_OPTION", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"UPDATE_RULE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"DELETE_RULE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"REFERENCED_TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
};
|
||||
|
||||
|
@ -2541,6 +2541,7 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
|
||||
{
|
||||
DBUG_PRINT("info", ("key name: '%s' type: %d", key->name ? key->name :
|
||||
"(none)" , key->type));
|
||||
LEX_STRING key_name_str;
|
||||
if (key->type == Key::FOREIGN_KEY)
|
||||
{
|
||||
fk_key_count++;
|
||||
@ -2562,7 +2563,10 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
|
||||
my_error(ER_TOO_MANY_KEY_PARTS,MYF(0),tmp);
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
if (key->name && strlen(key->name) > NAME_LEN)
|
||||
key_name_str.str= (char*) key->name;
|
||||
key_name_str.length= key->name ? strlen(key->name) : 0;
|
||||
if (check_string_char_length(&key_name_str, "", NAME_CHAR_LEN,
|
||||
system_charset_info, 1))
|
||||
{
|
||||
my_error(ER_TOO_LONG_IDENT, MYF(0), key->name);
|
||||
DBUG_RETURN(-1);
|
||||
@ -4049,7 +4053,7 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
|
||||
|
||||
if (end_active_trans(thd))
|
||||
DBUG_RETURN(1);
|
||||
field_list.push_back(item = new Item_empty_string("Table", NAME_LEN*2));
|
||||
field_list.push_back(item = new Item_empty_string("Table", NAME_CHAR_LEN*2));
|
||||
item->maybe_null = 1;
|
||||
field_list.push_back(item = new Item_empty_string("Op", 10));
|
||||
item->maybe_null = 1;
|
||||
@ -4631,7 +4635,8 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table,
|
||||
/*
|
||||
Validate the source table
|
||||
*/
|
||||
if (table_ident->table.length > NAME_LEN ||
|
||||
if (check_string_char_length(&table_ident->table, "", NAME_CHAR_LEN,
|
||||
system_charset_info, 1) ||
|
||||
(table_ident->table.length &&
|
||||
check_table_name(src_table,table_ident->table.length)))
|
||||
{
|
||||
|
@ -169,8 +169,10 @@ void udf_init()
|
||||
This is done to ensure that only approved dll from the system
|
||||
directories are used (to make this even remotely secure).
|
||||
*/
|
||||
if (my_strchr(files_charset_info, dl_name, dl_name + strlen(dl_name), FN_LIBCHAR) ||
|
||||
strlen(name.str) > NAME_LEN)
|
||||
if (my_strchr(files_charset_info, dl_name,
|
||||
dl_name + strlen(dl_name), FN_LIBCHAR) ||
|
||||
check_string_char_length(&name, "", NAME_CHAR_LEN,
|
||||
system_charset_info, 1))
|
||||
{
|
||||
sql_print_error("Invalid row in mysql.func table for function '%.64s'",
|
||||
name.str);
|
||||
@ -397,7 +399,8 @@ int mysql_create_function(THD *thd,udf_func *udf)
|
||||
my_message(ER_UDF_NO_PATHS, ER(ER_UDF_NO_PATHS), MYF(0));
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
if (udf->name.length > NAME_LEN)
|
||||
if (check_string_char_length(&udf->name, "", NAME_CHAR_LEN,
|
||||
system_charset_info, 1))
|
||||
{
|
||||
my_error(ER_TOO_LONG_IDENT, MYF(0), udf->name);
|
||||
DBUG_RETURN(1);
|
||||
|
@ -1926,9 +1926,8 @@ sp_name:
|
||||
my_error(ER_WRONG_DB_NAME, MYF(0), $1.str);
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
if (check_routine_name($3))
|
||||
if (check_routine_name(&$3))
|
||||
{
|
||||
my_error(ER_SP_WRONG_NAME, MYF(0), $3.str);
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
$$= new sp_name($1, $3);
|
||||
@ -1938,9 +1937,8 @@ sp_name:
|
||||
{
|
||||
THD *thd= YYTHD;
|
||||
LEX_STRING db;
|
||||
if (check_routine_name($1))
|
||||
if (check_routine_name(&$1))
|
||||
{
|
||||
my_error(ER_SP_WRONG_NAME, MYF(0), $1.str);
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
if (thd->copy_db_to(&db.str, &db.length))
|
||||
@ -4535,8 +4533,7 @@ field_spec:
|
||||
type opt_attribute
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
if (add_field_to_list(lex->thd, $1.str,
|
||||
(enum enum_field_types) $3,
|
||||
if (add_field_to_list(lex->thd, &$1, (enum enum_field_types) $3,
|
||||
lex->length,lex->dec,lex->type,
|
||||
lex->default_value, lex->on_update_value,
|
||||
&lex->comment,
|
||||
@ -5492,7 +5489,7 @@ alter_list_item:
|
||||
type opt_attribute
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
if (add_field_to_list(lex->thd,$3.str,
|
||||
if (add_field_to_list(lex->thd,&$3,
|
||||
(enum enum_field_types) $5,
|
||||
lex->length,lex->dec,lex->type,
|
||||
lex->default_value, lex->on_update_value,
|
||||
@ -9717,8 +9714,9 @@ user:
|
||||
$$->host.str= (char *) "%";
|
||||
$$->host.length= 1;
|
||||
|
||||
if (check_string_length(&$$->user,
|
||||
ER(ER_USERNAME), USERNAME_LENGTH))
|
||||
if (check_string_char_length(&$$->user, ER(ER_USERNAME),
|
||||
USERNAME_CHAR_LENGTH,
|
||||
system_charset_info, 0))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
| ident_or_text '@' ident_or_text
|
||||
@ -9728,10 +9726,11 @@ user:
|
||||
MYSQL_YYABORT;
|
||||
$$->user = $1; $$->host=$3;
|
||||
|
||||
if (check_string_length(&$$->user,
|
||||
ER(ER_USERNAME), USERNAME_LENGTH) ||
|
||||
check_string_length(&$$->host,
|
||||
ER(ER_HOSTNAME), HOSTNAME_LENGTH))
|
||||
if (check_string_char_length(&$$->user, ER(ER_USERNAME),
|
||||
USERNAME_CHAR_LENGTH,
|
||||
system_charset_info, 0) ||
|
||||
check_string_byte_length(&$$->host, ER(ER_HOSTNAME),
|
||||
HOSTNAME_LENGTH))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
| CURRENT_USER optional_braces
|
||||
|
21
sql/table.cc
21
sql/table.cc
@ -2329,8 +2329,9 @@ uint calculate_key_len(TABLE *table, uint key, const byte *buf,
|
||||
bool check_db_name(LEX_STRING *org_name)
|
||||
{
|
||||
char *name= org_name->str;
|
||||
uint name_length= org_name->length;
|
||||
|
||||
if (!org_name->length || org_name->length > NAME_LEN)
|
||||
if (!name_length || name_length > NAME_LEN)
|
||||
return 1;
|
||||
|
||||
if (lower_case_table_names && name != any_db)
|
||||
@ -2339,6 +2340,7 @@ bool check_db_name(LEX_STRING *org_name)
|
||||
#if defined(USE_MB) && defined(USE_MB_IDENT)
|
||||
if (use_mb(system_charset_info))
|
||||
{
|
||||
name_length= 0;
|
||||
bool last_char_is_space= TRUE;
|
||||
char *end= name + org_name->length;
|
||||
while (name < end)
|
||||
@ -2349,12 +2351,14 @@ bool check_db_name(LEX_STRING *org_name)
|
||||
if (!len)
|
||||
len= 1;
|
||||
name+= len;
|
||||
name_length++;
|
||||
}
|
||||
return last_char_is_space;
|
||||
return (last_char_is_space || name_length > NAME_CHAR_LEN);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
return org_name->str[org_name->length - 1] != ' '; /* purecov: inspected */
|
||||
return ((org_name->str[org_name->length - 1] != ' ') ||
|
||||
(name_length > NAME_CHAR_LEN)); /* purecov: inspected */
|
||||
}
|
||||
|
||||
|
||||
@ -2367,6 +2371,7 @@ bool check_db_name(LEX_STRING *org_name)
|
||||
|
||||
bool check_table_name(const char *name, uint length)
|
||||
{
|
||||
uint name_length= 0; // name length in symbols
|
||||
const char *end= name+length;
|
||||
if (!length || length > NAME_LEN)
|
||||
return 1;
|
||||
@ -2387,14 +2392,16 @@ bool check_table_name(const char *name, uint length)
|
||||
if (len)
|
||||
{
|
||||
name += len;
|
||||
name_length++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
name++;
|
||||
name_length++;
|
||||
}
|
||||
#if defined(USE_MB) && defined(USE_MB_IDENT)
|
||||
return last_char_is_space;
|
||||
return (last_char_is_space || name_length > NAME_CHAR_LEN) ;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
@ -2403,7 +2410,7 @@ bool check_table_name(const char *name, uint length)
|
||||
|
||||
bool check_column_name(const char *name)
|
||||
{
|
||||
const char *start= name;
|
||||
uint name_length= 0; // name length in symbols
|
||||
bool last_char_is_space= TRUE;
|
||||
|
||||
while (*name)
|
||||
@ -2417,6 +2424,7 @@ bool check_column_name(const char *name)
|
||||
if (len)
|
||||
{
|
||||
name += len;
|
||||
name_length++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@ -2426,9 +2434,10 @@ bool check_column_name(const char *name)
|
||||
if (*name == NAMES_SEP_CHAR)
|
||||
return 1;
|
||||
name++;
|
||||
name_length++;
|
||||
}
|
||||
/* Error if empty or too long column name */
|
||||
return last_char_is_space || (uint) (name - start) > NAME_LEN;
|
||||
return last_char_is_space || (uint) name_length > NAME_CHAR_LEN;
|
||||
}
|
||||
|
||||
|
||||
|
@ -5922,8 +5922,8 @@ ha_innobase::get_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list)
|
||||
FOREIGN_KEY_INFO f_key_info;
|
||||
LEX_STRING *name= 0;
|
||||
uint ulen;
|
||||
char uname[NAME_LEN*3+1]; /* Unencoded name */
|
||||
char db_name[NAME_LEN*3+1];
|
||||
char uname[NAME_LEN+1]; /* Unencoded name */
|
||||
char db_name[NAME_LEN+1];
|
||||
const char *tmp_buff;
|
||||
|
||||
tmp_buff= foreign->id;
|
||||
|
@ -7811,16 +7811,16 @@ static void test_explain_bug()
|
||||
"", "", "", 19, 0);
|
||||
|
||||
verify_prepare_field(result, 2, "table", "", MYSQL_TYPE_VAR_STRING,
|
||||
"", "", "", NAME_LEN, 0);
|
||||
"", "", "", NAME_CHAR_LEN, 0);
|
||||
|
||||
verify_prepare_field(result, 3, "type", "", MYSQL_TYPE_VAR_STRING,
|
||||
"", "", "", 10, 0);
|
||||
|
||||
verify_prepare_field(result, 4, "possible_keys", "", MYSQL_TYPE_VAR_STRING,
|
||||
"", "", "", NAME_LEN*MAX_KEY, 0);
|
||||
"", "", "", NAME_CHAR_LEN*MAX_KEY, 0);
|
||||
|
||||
verify_prepare_field(result, 5, "key", "", MYSQL_TYPE_VAR_STRING,
|
||||
"", "", "", NAME_LEN, 0);
|
||||
"", "", "", NAME_CHAR_LEN, 0);
|
||||
|
||||
if (mysql_get_server_version(mysql) <= 50000)
|
||||
{
|
||||
@ -7830,11 +7830,11 @@ static void test_explain_bug()
|
||||
else
|
||||
{
|
||||
verify_prepare_field(result, 6, "key_len", "", MYSQL_TYPE_VAR_STRING, "",
|
||||
"", "", NAME_LEN*MAX_KEY, 0);
|
||||
"", "", NAME_CHAR_LEN*MAX_KEY, 0);
|
||||
}
|
||||
|
||||
verify_prepare_field(result, 7, "ref", "", MYSQL_TYPE_VAR_STRING,
|
||||
"", "", "", NAME_LEN*16, 0);
|
||||
"", "", "", NAME_CHAR_LEN*16, 0);
|
||||
|
||||
verify_prepare_field(result, 8, "rows", "", MYSQL_TYPE_LONGLONG,
|
||||
"", "", "", 10, 0);
|
||||
|
Loading…
x
Reference in New Issue
Block a user