Merge bk@192.168.21.1:mysql-5.1-opt

into  mysql.com:/d2/hf/mrg/mysql-5.1-opt


client/mysqldump.c:
  Auto merged
mysql-test/r/rpl_packet.result:
  Auto merged
mysql-test/r/sp.result:
  Auto merged
mysql-test/t/rpl_packet.test:
  Auto merged
sql/field.cc:
  Auto merged
sql/mysql_priv.h:
  Auto merged
sql/mysqld.cc:
  Auto merged
sql/sp.cc:
  Auto merged
sql/sp_head.cc:
  Auto merged
sql/sp_head.h:
  Auto merged
sql/sql_partition.cc:
  Auto merged
sql/sql_select.cc:
  Auto merged
sql/sql_show.cc:
  Auto merged
sql/sql_table.cc:
  Auto merged
sql/share/errmsg.txt:
  Auto merged
sql/sql_yacc.yy:
  Auto merged
sql/table.cc:
  Auto merged
storage/innobase/handler/ha_innodb.cc:
  Auto merged
mysql-test/r/create.result:
  SCCS merged
mysql-test/t/create.test:
  merging
mysql-test/t/disabled.def:
  merging
sql/events.cc:
  merging
sql/sql_parse.cc:
  SCCS merged
This commit is contained in:
unknown 2007-04-07 14:59:53 +05:00
commit 023ae2a040
50 changed files with 2643 additions and 2028 deletions

View file

@ -3514,7 +3514,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) 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; DYNAMIC_STRING lock_tables_query;
MEM_ROOT root; MEM_ROOT root;
char **dump_tables, **pos, **end; char **dump_tables, **pos, **end;

View file

@ -20,9 +20,13 @@
#ifndef _mysql_com_h #ifndef _mysql_com_h
#define _mysql_com_h #define _mysql_com_h
#define NAME_LEN 64 /* Field/table name length */
#define HOSTNAME_LENGTH 60 #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 SERVER_VERSION_LENGTH 60
#define SQLSTATE_LENGTH 5 #define SQLSTATE_LENGTH 5

View file

@ -1,6 +1,9 @@
SHOW STATUS LIKE 'Compression'; SHOW STATUS LIKE 'Compression';
Variable_name Value Variable_name Value
Compression ON Compression ON
select * from information_schema.session_status where variable_name= 'COMPRESSION';
VARIABLE_NAME VARIABLE_VALUE
COMPRESSION 1.0000000
drop table if exists t1,t2,t3,t4; drop table if exists t1,t2,t3,t4;
CREATE TABLE t1 ( CREATE TABLE t1 (
Period smallint(4) unsigned zerofill DEFAULT '0000' NOT NULL, Period smallint(4) unsigned zerofill DEFAULT '0000' NOT NULL,

View file

@ -828,7 +828,7 @@ ERROR 42000: Incorrect database name 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
DROP DATABASE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa; DROP DATABASE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
ERROR 42000: Incorrect database name 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' ERROR 42000: Incorrect database name 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
RENAME DATABASE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa TO a; RENAME DATABASE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa TO a;
ERROR 42000: Unknown database 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' ERROR 42000: Unknown database 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
RENAME DATABASE mysqltest TO aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa; RENAME DATABASE mysqltest TO aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
ERROR 42000: Incorrect database name 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' ERROR 42000: Incorrect database name 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
create database mysqltest; create database mysqltest;
@ -839,4 +839,103 @@ USE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ERROR 42000: Incorrect database name 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' ERROR 42000: Incorrect database name 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
SHOW CREATE DATABASE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa; SHOW CREATE DATABASE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
ERROR 42000: Incorrect database name 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' ERROR 42000: Incorrect database name 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
set names utf8;
create database имя_базы_в_кодировке_утф8_длиной_большеем_45;
use имя_базы_в_кодировке_утф8_длиной_большеем_45;
select database();
database()
имя_базы_в_кодировке_утф8_длиной_большеем_45
use test;
select SCHEMA_NAME from information_schema.schemata
where schema_name='имя_базы_в_кодировке_утф8_длиной_большеем_45';
SCHEMA_NAME
имя_базы_в_кодировке_утф8_длиной_большеем_45
drop 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 TABLE_NAME from information_schema.tables where
table_schema='test';
TABLE_NAME
имя_вью_кодировке_утф8_длиной_большеем_42
имя_таблицы_в_кодировке_утф8_длиной_большеем_48
select COLUMN_NAME from information_schema.columns where
table_schema='test';
COLUMN_NAME
имя_поля_в_кодировке_утф8_длиной_большеем_45
имя_поля_в_кодировке_утф8_длиной_большеем_45
select INDEX_NAME from information_schema.statistics where
table_schema='test';
INDEX_NAME
имя_индекса_в_кодировке_утф8_длиной_большеем_48
select TABLE_NAME from information_schema.views where
table_schema='test';
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='test';
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='test';
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='test';
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='test';
ROUTINE_NAME
имя_функции_в_кодировке_утф8_длиной_большеем_49
drop function имя_функции_в_кодировке_утф8_длиной_большеем_49;
create function очень_очень_очень_очень_очень_очень_очень_очень_длинная_строка_66()
returns int
return 0;
ERROR 42000: Identifier name 'очень_очень_очень_очень_очень_очень_очень_очень_длинна' is too long
drop view имя_вью_кодировке_утф8_длиной_большеем_42;
drop table имя_таблицы_в_кодировке_утф8_длиной_большеем_48;
set names default;
End of 5.1 tests End of 5.1 tests

View file

@ -28,3 +28,16 @@ ERROR 42000: Display width out of range for column 'a' (max = 255)
set sql_mode='traditional'; set sql_mode='traditional';
create table t1 (a varchar(66000)); create table t1 (a varchar(66000));
ERROR 42000: Column length too big for column 'a' (max = 65535); use BLOB or TEXT instead ERROR 42000: Column length too big for column 'a' (max = 65535); use BLOB or TEXT instead
set sql_mode=default;
CREATE TABLE t1 (a INT);
SELECT a FROM t1 WHERE a IN(1, (SELECT IF(1=0,1,2/0)));
a
INSERT INTO t1 VALUES(1);
SELECT a FROM t1 WHERE a IN(1, (SELECT IF(1=0,1,2/0)));
a
1
INSERT INTO t1 VALUES(2),(3);
SELECT a FROM t1 WHERE a IN(1, (SELECT IF(1=0,1,2/0)));
a
1
DROP TABLE t1;

View file

@ -1060,3 +1060,12 @@ DROP USER bug23556@localhost;
GRANT PROCESS ON * TO user@localhost; GRANT PROCESS ON * TO user@localhost;
ERROR 3D000: No database selected ERROR 3D000: No database selected
End of 5.0 tests 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;

View file

@ -167,7 +167,7 @@ ERROR 2005 (HY000) at line 1: Unknown MySQL server host 'invalid_hostname' (errn
The commands reported in the bug report The commands reported in the bug report
ERROR 2005 (HY000) at line 1: Unknown MySQL server host 'cyril has found a bug :)XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' (errno) ERROR 2005 (HY000) at line 1: Unknown MySQL server host 'cyril has found a bug :)XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' (errno)
Too long dbname 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 Too long hostname
ERROR 2005 (HY000) at line 1: Unknown MySQL server host 'cyrils_superlonghostnameXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' (errno) ERROR 2005 (HY000) at line 1: Unknown MySQL server host 'cyrils_superlonghostnameXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' (errno)
1 1

View file

@ -0,0 +1,3 @@
drop table if exists t1;
create table t1 (s1 int) engine=ndbcluster;
ERROR HY000: For the partitioned engine it is necessary to define all partitions

View file

@ -906,6 +906,90 @@ ERROR 23000: Column 'val' in order clause is ambiguous
SELECT p.a AS val, q.a AS val FROM t1 p, t1 q ORDER BY val > 1; SELECT p.a AS val, q.a AS val FROM t1 p, t1 q ORDER BY val > 1;
ERROR 23000: Column 'val' in order clause is ambiguous ERROR 23000: Column 'val' in order clause is ambiguous
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 (a int);
INSERT INTO t1 VALUES (3), (2), (4), (1);
SELECT a, IF(a IN (2,3), a, a+10) FROM t1
ORDER BY IF(a IN (2,3), a, a+10);
a IF(a IN (2,3), a, a+10)
2 2
3 3
1 11
4 14
SELECT a, IF(a NOT IN (2,3), a, a+10) FROM t1
ORDER BY IF(a NOT IN (2,3), a, a+10);
a IF(a NOT IN (2,3), a, a+10)
1 1
4 4
2 12
3 13
SELECT a, IF(a IN (2,3), a, a+10) FROM t1
ORDER BY IF(a NOT IN (2,3), a, a+10);
a IF(a IN (2,3), a, a+10)
1 11
4 14
2 2
3 3
SELECT a, IF(a BETWEEN 2 AND 3, a, a+10) FROM t1
ORDER BY IF(a BETWEEN 2 AND 3, a, a+10);
a IF(a BETWEEN 2 AND 3, a, a+10)
2 2
3 3
1 11
4 14
SELECT a, IF(a NOT BETWEEN 2 AND 3, a, a+10) FROM t1
ORDER BY IF(a NOT BETWEEN 2 AND 3, a, a+10);
a IF(a NOT BETWEEN 2 AND 3, a, a+10)
1 1
4 4
2 12
3 13
SELECT a, IF(a BETWEEN 2 AND 3, a, a+10) FROM t1
ORDER BY IF(a NOT BETWEEN 2 AND 3, a, a+10);
a IF(a BETWEEN 2 AND 3, a, a+10)
1 11
4 14
2 2
3 3
SELECT IF(a IN (1,2), a, '') as x1, IF(a NOT IN (1,2), a, '') as x2
FROM t1 GROUP BY x1, x2;
x1 x2
3
4
1
2
SELECT IF(a IN (1,2), a, '') as x1, IF(a NOT IN (1,2), a, '') as x2
FROM t1 GROUP BY x1, IF(a NOT IN (1,2), a, '');
x1 x2
3
4
1
2
SELECT a, a IN (1,2) FROM t1 ORDER BY a IN (1,2);
a a IN (1,2)
3 0
4 0
2 1
1 1
SELECT a FROM t1 ORDER BY a IN (1,2);
a
3
4
2
1
SELECT a+10 FROM t1 ORDER BY a IN (1,2);
a+10
13
14
12
11
SELECT a, IF(a IN (1,2), a, a+10) FROM t1
ORDER BY IF(a IN (3,4), a, a+10);
a IF(a IN (1,2), a, a+10)
3 13
4 14
1 1
2 2
DROP TABLE t1;
create table t1 (a int not null, b int not null, c int not null); create table t1 (a int not null, b int not null, c int not null);
insert t1 values (1,1,1),(1,1,2),(1,2,1); insert t1 values (1,1,1),(1,1,2),(1,2,1);
select a, b from t1 group by a, b order by sum(c); select a, b from t1 group by a, b order by sum(c);

View file

@ -1219,4 +1219,23 @@ SELECT t2.id FROM t2 WHERE t2.id IN (SELECT id FROM t1 WHERE status = 'Verified'
id id
22589 22589
drop table t1, t2; drop table t1, t2;
set @org_mode=@@sql_mode;
set @@sql_mode='NO_DIR_IN_CREATE';
select @@sql_mode;
@@sql_mode
NO_DIR_IN_CREATE
create table t1 (i int )
partition by range (i)
(
partition p01 values less than (1000)
data directory='/not/existing'
index directory='/not/existing'
);
show create table t2;
Table Create Table
t2 CREATE TABLE `t2` (
`i` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (i) (PARTITION p01 VALUES LESS THAN (1000) ENGINE = MyISAM) */
DROP TABLE t1, t2;
set @@sql_mode=@org_mode;
End of 5.1 tests End of 5.1 tests

View file

@ -19,7 +19,16 @@ revoke alter on mysqltest_1.* from mysqltest_1@localhost;
alter table t1 drop partition p3; alter table t1 drop partition p3;
ERROR 42000: ALTER command denied to user 'mysqltest_1'@'localhost' for table 't1' ERROR 42000: ALTER command denied to user 'mysqltest_1'@'localhost' for table 't1'
revoke select,alter,drop on mysqltest_1.* from mysqltest_1@localhost; revoke select,alter,drop on mysqltest_1.* from mysqltest_1@localhost;
drop user mysqltest_1@localhost;
drop table t1; drop table t1;
create table t1 (s1 int);
insert into t1 values (1);
grant alter on mysqltest_1.* to mysqltest_1@localhost;
alter table t1 partition by list (s1) (partition p1 values in (2));
ERROR HY000: Table has no partition for some existing values
grant select, alter on mysqltest_1.* to mysqltest_1@localhost;
alter table t1 partition by list (s1) (partition p1 values in (2));
ERROR HY000: Table has no partition for value 1
drop table t1;
drop user mysqltest_1@localhost;
drop schema mysqltest_1; drop schema mysqltest_1;
End of 5.1 tests End of 5.1 tests

View file

@ -14,6 +14,12 @@ INSERT INTO `t1`(`f1`) VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
select count(*) from `DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________`.`t1` /* must be 1 */; select count(*) from `DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________`.`t1` /* must be 1 */;
count(*) count(*)
1 1
SHOW STATUS LIKE 'Slave_running';
Variable_name Value
Slave_running ON
select * from information_schema.session_status where variable_name= 'SLAVE_RUNNING';
VARIABLE_NAME VARIABLE_VALUE
SLAVE_RUNNING 1.0000000
drop database DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________; drop database DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________;
SET @@global.max_allowed_packet=4096; SET @@global.max_allowed_packet=4096;
SET @@global.net_buffer_length=4096; SET @@global.net_buffer_length=4096;

View file

@ -5398,7 +5398,7 @@ drop database if exists това_е_дълго_имеа_базаанни_
create database това_е_дълго_имеа_базаанни_нали| create database това_е_дълго_имеа_базаанни_нали|
INSERT INTO mysql.proc VALUES ('това_е_дълго_имеа_базаанни_нали','това_е_процедура_соста_дълго_имеали_и_още_по_дълго','PROCEDURE','това_е_процедура_соста_дълго_имеали_и_още_по_дълго','SQL','CONTAINS_SQL','NO','DEFINER','','','bad_body','root@localhost',now(), now(),'','')| INSERT INTO mysql.proc VALUES ('това_е_дълго_имеа_базаанни_нали','това_е_процедура_соста_дълго_имеали_и_още_по_дълго','PROCEDURE','това_е_процедура_соста_дълго_имеали_и_още_по_дълго','SQL','CONTAINS_SQL','NO','DEFINER','','','bad_body','root@localhost',now(), now(),'','')|
call това_е_дълго_имеа_базаанни_нали.това_е_процедура_соста_дълго_имеали_и_още_по_дълго()| 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 това_е_дълго_имеа_базаанни_нали| drop database това_е_дълго_имеа_базаанни_нали|
CREATE TABLE t3 ( CREATE TABLE t3 (
Member_ID varchar(15) NOT NULL, Member_ID varchar(15) NOT NULL,

View file

@ -66,3 +66,22 @@ ss
ue ue
ue ue
DROP TABLE t1; DROP TABLE t1;
create table t1(f1
set('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17',
'18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33',
'34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49',
'50','51','52','53','54','55','56','57','58','59','60','61','62','63','64','128'));
ERROR HY000: Too many strings for column f1 and SET
create table t1(f1
set('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17',
'18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33',
'34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49',
'50','51','52','53','54','55','56','57','58','59','60','61','62','63','64','1'));
Warnings:
Note 1291 Column 'f1' has duplicated value '1' in SET
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`f1` set('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49','50','51','52','53','54','55','56','57','58','59','60','61','62','63','64','1') DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;

View file

@ -10,6 +10,7 @@ connect (comp_con,localhost,root,,,,,COMPRESS);
# Check compression turned on # Check compression turned on
SHOW STATUS LIKE 'Compression'; SHOW STATUS LIKE 'Compression';
select * from information_schema.session_status where variable_name= 'COMPRESSION';
# Source select test case # Source select test case
-- source include/common-tests.inc -- source include/common-tests.inc

View file

@ -736,4 +736,94 @@ USE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
--error 1102 --error 1102
SHOW CREATE DATABASE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa; 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();
use test;
select SCHEMA_NAME from information_schema.schemata
where schema_name='имя_базы_в_кодировке_утф8_длиной_большеем_45';
drop 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;
# database, table, field, key, view
select * from имя_таблицы_в_кодировке_утф8_длиной_большеем_48;
select TABLE_NAME from information_schema.tables where
table_schema='test';
select COLUMN_NAME from information_schema.columns where
table_schema='test';
select INDEX_NAME from information_schema.statistics where
table_schema='test';
select TABLE_NAME from information_schema.views where
table_schema='test';
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='test';
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='test';
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='test';
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='test';
drop function имя_функции_в_кодировке_утф8_длиной_большеем_49;
--error 1059
create function очень_очень_очень_очень_очень_очень_очень_очень_длинная_строка_66()
returns int
return 0;
drop view имя_вью_кодировке_утф8_длиной_большеем_42;
drop table имя_таблицы_в_кодировке_утф8_длиной_большеем_48;
set names default;
--echo End of 5.1 tests --echo End of 5.1 tests

View file

@ -38,3 +38,4 @@ plugin : Bug#25659 memory leak via "plugins" test
rpl_ndb_dd_advance : Bug#25913 rpl_ndb_dd_advance fails randomly rpl_ndb_dd_advance : Bug#25913 rpl_ndb_dd_advance fails randomly
rpl_ndb_stm_innodb : Bug#26783 rpl_ndb_stm_innodb : Bug#26783
ndb_partition_error2 : HF is not sure if the test can work as internded on all the platforms

View file

@ -40,5 +40,17 @@ create table t1 (a int(256));
set sql_mode='traditional'; set sql_mode='traditional';
--error 1074 --error 1074
create table t1 (a varchar(66000)); create table t1 (a varchar(66000));
set sql_mode=default;
#
# Bug #27513: mysql 5.0.x + NULL pointer DoS
#
CREATE TABLE t1 (a INT);
SELECT a FROM t1 WHERE a IN(1, (SELECT IF(1=0,1,2/0)));
INSERT INTO t1 VALUES(1);
SELECT a FROM t1 WHERE a IN(1, (SELECT IF(1=0,1,2/0)));
INSERT INTO t1 VALUES(2),(3);
SELECT a FROM t1 WHERE a IN(1, (SELECT IF(1=0,1,2/0)));
DROP TABLE t1;
# End of 5.0 tests # End of 5.0 tests

View file

@ -986,3 +986,15 @@ disconnect con1;
connection default; connection default;
--echo End of 5.0 tests --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;

View file

@ -0,0 +1 @@
--ndbcluster

View file

@ -0,0 +1,14 @@
disable_query_log;
--require r/true.require
select support = 'Enabled' as `TRUE` from information_schema.engines where engine = 'ndbcluster';
enable_query_log;
--disable_warnings
drop table if exists t1;
--enable_warnings
#
# Bug #27359 Partitions: memory allocation error message
#
--error ER_PARTITION_NOT_DEFINED_ERROR
create table t1 (s1 int) engine=ndbcluster;

View file

@ -617,7 +617,6 @@ UPDATE bug25126 SET MissingCol = val ORDER BY MissingCol;
UPDATE bug25126 SET MissingCol = MissingCol ORDER BY MissingCol; UPDATE bug25126 SET MissingCol = MissingCol ORDER BY MissingCol;
DROP TABLE bug25126; DROP TABLE bug25126;
# #
# Bug #25427: crash when order by expression contains a name # Bug #25427: crash when order by expression contains a name
# that cannot be resolved unambiguously # that cannot be resolved unambiguously
@ -633,6 +632,41 @@ SELECT p.a AS val, q.a AS val FROM t1 p, t1 q ORDER BY val > 1;
DROP TABLE t1; DROP TABLE t1;
#
# Bug #27532: ORDER/GROUP BY expressions with IN/BETWEEN and NOT IN/BETWEEN
#
CREATE TABLE t1 (a int);
INSERT INTO t1 VALUES (3), (2), (4), (1);
SELECT a, IF(a IN (2,3), a, a+10) FROM t1
ORDER BY IF(a IN (2,3), a, a+10);
SELECT a, IF(a NOT IN (2,3), a, a+10) FROM t1
ORDER BY IF(a NOT IN (2,3), a, a+10);
SELECT a, IF(a IN (2,3), a, a+10) FROM t1
ORDER BY IF(a NOT IN (2,3), a, a+10);
SELECT a, IF(a BETWEEN 2 AND 3, a, a+10) FROM t1
ORDER BY IF(a BETWEEN 2 AND 3, a, a+10);
SELECT a, IF(a NOT BETWEEN 2 AND 3, a, a+10) FROM t1
ORDER BY IF(a NOT BETWEEN 2 AND 3, a, a+10);
SELECT a, IF(a BETWEEN 2 AND 3, a, a+10) FROM t1
ORDER BY IF(a NOT BETWEEN 2 AND 3, a, a+10);
SELECT IF(a IN (1,2), a, '') as x1, IF(a NOT IN (1,2), a, '') as x2
FROM t1 GROUP BY x1, x2;
SELECT IF(a IN (1,2), a, '') as x1, IF(a NOT IN (1,2), a, '') as x2
FROM t1 GROUP BY x1, IF(a NOT IN (1,2), a, '');
# The remaining queries are for better coverage
SELECT a, a IN (1,2) FROM t1 ORDER BY a IN (1,2);
SELECT a FROM t1 ORDER BY a IN (1,2);
SELECT a+10 FROM t1 ORDER BY a IN (1,2);
SELECT a, IF(a IN (1,2), a, a+10) FROM t1
ORDER BY IF(a IN (3,4), a, a+10);
DROP TABLE t1;
# End of 4.1
create table t1 (a int not null, b int not null, c int not null); create table t1 (a int not null, b int not null, c int not null);
insert t1 values (1,1,1),(1,1,2),(1,2,1); insert t1 values (1,1,1),(1,1,2),(1,2,1);
select a, b from t1 group by a, b order by sum(c); select a, b from t1 group by a, b order by sum(c);

View file

@ -1463,4 +1463,33 @@ SELECT t2.id FROM t2 WHERE t2.id IN (SELECT id FROM t1 WHERE status = 'Verified'
drop table t1, t2; drop table t1, t2;
#
# Bug #24633 SQL MODE "NO_DIR_IN_CREATE" does not work with partitioned tables
#
disable_query_log;
eval create table t2 (i int )
partition by range (i)
(
partition p01 values less than (1000)
data directory="$MYSQLTEST_VARDIR/master-data/test/"
index directory="$MYSQLTEST_VARDIR/master-data/test/"
);
enable_query_log;
set @org_mode=@@sql_mode;
set @@sql_mode='NO_DIR_IN_CREATE';
select @@sql_mode;
create table t1 (i int )
partition by range (i)
(
partition p01 values less than (1000)
data directory='/not/existing'
index directory='/not/existing'
);
show create table t2;
DROP TABLE t1, t2;
set @@sql_mode=@org_mode;
--echo End of 5.1 tests --echo End of 5.1 tests

View file

@ -52,8 +52,30 @@ disconnect conn3;
connection default; connection default;
revoke select,alter,drop on mysqltest_1.* from mysqltest_1@localhost; revoke select,alter,drop on mysqltest_1.* from mysqltest_1@localhost;
drop user mysqltest_1@localhost;
drop table t1; drop table t1;
#
# Bug #23675 Partitions: possible security breach via alter
#
create table t1 (s1 int);
insert into t1 values (1);
grant alter on mysqltest_1.* to mysqltest_1@localhost;
connect (conn4,localhost,mysqltest_1,,mysqltest_1);
connection conn4;
--error 1514
alter table t1 partition by list (s1) (partition p1 values in (2));
connection default;
grant select, alter on mysqltest_1.* to mysqltest_1@localhost;
disconnect conn4;
connect (conn5,localhost,mysqltest_1,,mysqltest_1);
--error 1514
alter table t1 partition by list (s1) (partition p1 values in (2));
disconnect conn5;
connection default;
drop table t1;
drop user mysqltest_1@localhost;
drop schema mysqltest_1; drop schema mysqltest_1;
--echo End of 5.1 tests --echo End of 5.1 tests

View file

@ -29,6 +29,8 @@ connection slave;
sync_with_master; sync_with_master;
eval select count(*) from `$db`.`t1` /* must be 1 */; eval select count(*) from `$db`.`t1` /* must be 1 */;
SHOW STATUS LIKE 'Slave_running';
select * from information_schema.session_status where variable_name= 'SLAVE_RUNNING';
connection master; connection master;
eval drop database $db; eval drop database $db;
save_master_pos; save_master_pos;

View file

@ -39,3 +39,20 @@ SELECT c FROM t1 ORDER BY concat(c);
DROP TABLE t1; DROP TABLE t1;
# End of 4.1 tests # End of 4.1 tests
#
# Bug#27069 set with identical elements are created
#
--error 1097
create table t1(f1
set('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17',
'18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33',
'34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49',
'50','51','52','53','54','55','56','57','58','59','60','61','62','63','64','128'));
create table t1(f1
set('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17',
'18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33',
'34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49',
'50','51','52','53','54','55','56','57','58','59','60','61','62','63','64','1'));
show create table t1;
drop table t1;

View file

@ -694,7 +694,7 @@ send_show_create_event(THD *thd, Event_timed *et, Protocol *protocol)
if (et->get_create_event(thd, &show_str)) if (et->get_create_event(thd, &show_str))
DBUG_RETURN(TRUE); DBUG_RETURN(TRUE);
field_list.push_back(new Item_empty_string("Event", NAME_LEN)); field_list.push_back(new Item_empty_string("Event", NAME_CHAR_LEN));
if (sys_var_thd_sql_mode::symbolic_mode_representation(thd, et->sql_mode, if (sys_var_thd_sql_mode::symbolic_mode_representation(thd, et->sql_mode,
&sql_mode)) &sql_mode))

View file

@ -8900,11 +8900,6 @@ bool create_field::init(THD *thd, char *fld_name, enum_field_types fld_type,
break; break;
case MYSQL_TYPE_SET: case MYSQL_TYPE_SET:
{ {
if (fld_interval_list->elements > sizeof(longlong)*8)
{
my_error(ER_TOO_BIG_SET, MYF(0), fld_name); /* purecov: inspected */
DBUG_RETURN(TRUE);
}
pack_length= get_set_pack_length(fld_interval_list->elements); pack_length= get_set_pack_length(fld_interval_list->elements);
List_iterator<String> it(*fld_interval_list); List_iterator<String> it(*fld_interval_list);

View file

@ -1127,6 +1127,26 @@ longlong Item_func_strcmp::val_int()
} }
bool Item_func_opt_neg::eq(const Item *item, bool binary_cmp) const
{
/* Assume we don't have rtti */
if (this == item)
return 1;
if (item->type() != FUNC_ITEM)
return 0;
Item_func *item_func=(Item_func*) item;
if (arg_count != item_func->arg_count ||
functype() != item_func->functype())
return 0;
if (negated != ((Item_func_opt_neg *) item_func)->negated)
return 0;
for (uint i=0; i < arg_count ; i++)
if (!args[i]->eq(item_func->arguments()[i], binary_cmp))
return 0;
return 1;
}
void Item_func_interval::fix_length_and_dec() void Item_func_interval::fix_length_and_dec()
{ {
use_decimal_comparison= ((row->element_index(0)->result_type() == use_decimal_comparison= ((row->element_index(0)->result_type() ==

View file

@ -563,6 +563,7 @@ public:
negated= !negated; negated= !negated;
return this; return this;
} }
bool eq(const Item *item, bool binary_cmp) const;
bool subst_argument_checker(byte **arg) { return TRUE; } bool subst_argument_checker(byte **arg) { return TRUE; }
}; };

View file

@ -426,8 +426,8 @@ public:
bool fix_fields(THD *thd, Item **ref); bool fix_fields(THD *thd, Item **ref);
void fix_length_and_dec() void fix_length_and_dec()
{ {
max_length= ((USERNAME_LENGTH + HOSTNAME_LENGTH + 1) * max_length= (USERNAME_LENGTH +
system_charset_info->mbmaxlen); (HOSTNAME_LENGTH + 1) * SYSTEM_CHARSET_MBMAXLEN);
} }
const char *func_name() const { return "user"; } const char *func_name() const { return "user"; }
const char *fully_qualified_func_name() const { return "user()"; } const char *fully_qualified_func_name() const { return "user()"; }

View file

@ -366,7 +366,7 @@ MY_LOCALE *my_locale_by_number(uint number);
Maximum length of time zone name that we support Maximum length of time zone name that we support
(Time zone name is char(64) in db). mysqlbinlog needs it. (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 + 1)
/* The rest of the file is included in the server only */ /* The rest of the file is included in the server only */
#ifndef MYSQL_CLIENT #ifndef MYSQL_CLIENT
@ -599,7 +599,7 @@ class THD;
void close_thread_tables(THD *thd, bool locked=0, bool skip_derived=0); void close_thread_tables(THD *thd, bool locked=0, bool skip_derived=0);
bool check_one_table_access(THD *thd, ulong privilege, TABLE_LIST *tables); bool check_one_table_access(THD *thd, ulong privilege, TABLE_LIST *tables);
bool check_single_table_access(THD *thd, ulong privilege, bool check_single_table_access(THD *thd, ulong privilege,
TABLE_LIST *tables); TABLE_LIST *tables, bool no_errors);
bool check_routine_access(THD *thd,ulong want_access,char *db,char *name, bool check_routine_access(THD *thd,ulong want_access,char *db,char *name,
bool is_proc, bool no_errors); bool is_proc, bool no_errors);
bool check_some_access(THD *thd, ulong want_access, TABLE_LIST *table); bool check_some_access(THD *thd, ulong want_access, TABLE_LIST *table);
@ -622,8 +622,11 @@ void get_default_definer(THD *thd, LEX_USER *definer);
LEX_USER *create_default_definer(THD *thd); LEX_USER *create_default_definer(THD *thd);
LEX_USER *create_definer(THD *thd, LEX_STRING *user_name, LEX_STRING *host_name); LEX_USER *create_definer(THD *thd, LEX_STRING *user_name, LEX_STRING *host_name);
LEX_USER *get_current_user(THD *thd, LEX_USER *user); LEX_USER *get_current_user(THD *thd, LEX_USER *user);
bool check_string_length(LEX_STRING *str, bool check_string_byte_length(LEX_STRING *str, const char *err_msg,
const char *err_msg, uint max_length); 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 { enum enum_mysql_completiontype {
ROLLBACK_RELEASE=-2, ROLLBACK=1, ROLLBACK_AND_CHAIN=7, ROLLBACK_RELEASE=-2, ROLLBACK=1, ROLLBACK_AND_CHAIN=7,
@ -1165,7 +1168,7 @@ void mysql_ha_mark_tables_for_reopen(THD *thd, TABLE *table);
/* sql_base.cc */ /* sql_base.cc */
#define TMP_TABLE_KEY_EXTRA 8 #define TMP_TABLE_KEY_EXTRA 8
void set_item_name(Item *item,char *pos,uint length); 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, char *length, char *decimal,
uint type_modifier, uint type_modifier,
Item *default_value, Item *on_update_value, Item *default_value, Item *on_update_value,

View file

@ -6507,10 +6507,11 @@ static int show_rpl_status(THD *thd, SHOW_VAR *var, char *buff)
static int show_slave_running(THD *thd, SHOW_VAR *var, char *buff) static int show_slave_running(THD *thd, SHOW_VAR *var, char *buff)
{ {
var->type= SHOW_CHAR; var->type= SHOW_MY_BOOL;
pthread_mutex_lock(&LOCK_active_mi); pthread_mutex_lock(&LOCK_active_mi);
var->value= const_cast<char*>((active_mi && active_mi->slave_running && var->value= buff;
active_mi->rli.slave_running) ? "ON" : "OFF"); *((my_bool *)buff)= (my_bool) (active_mi && active_mi->slave_running &&
active_mi->rli.slave_running);
pthread_mutex_unlock(&LOCK_active_mi); pthread_mutex_unlock(&LOCK_active_mi);
return 0; return 0;
} }

View file

@ -187,8 +187,14 @@ bool partition_info::set_up_default_partitions(handler *file,
my_error(ER_PARTITIONS_MUST_BE_DEFINED_ERROR, MYF(0), error_string); my_error(ER_PARTITIONS_MUST_BE_DEFINED_ERROR, MYF(0), error_string);
goto end; goto end;
} }
if (no_parts == 0)
no_parts= file->get_default_no_partitions(info); if ((no_parts == 0) &&
((no_parts= file->get_default_no_partitions(info)) == 0))
{
my_error(ER_PARTITION_NOT_DEFINED_ERROR, MYF(0), "partitions");
goto end;
}
if (unlikely(no_parts > MAX_PARTITIONS)) if (unlikely(no_parts > MAX_PARTITIONS))
{ {
my_error(ER_TOO_MANY_PARTITIONS_ERROR, MYF(0)); my_error(ER_TOO_MANY_PARTITIONS_ERROR, MYF(0));
@ -753,7 +759,11 @@ bool partition_info::check_partition_info(THD *thd, handlerton **eng_type,
} }
if (unlikely(set_up_defaults_for_partitioning(file, info, (uint)0))) if (unlikely(set_up_defaults_for_partitioning(file, info, (uint)0)))
goto end; goto end;
tot_partitions= get_tot_partitions(); if (!(tot_partitions= get_tot_partitions()))
{
my_error(ER_PARTITION_NOT_DEFINED_ERROR, MYF(0), "partitions");
goto end;
}
if (unlikely(tot_partitions > MAX_PARTITIONS)) if (unlikely(tot_partitions > MAX_PARTITIONS))
{ {
my_error(ER_TOO_MANY_PARTITIONS_ERROR, MYF(0)); my_error(ER_TOO_MANY_PARTITIONS_ERROR, MYF(0));
@ -776,6 +786,8 @@ bool partition_info::check_partition_info(THD *thd, handlerton **eng_type,
partition_element *part_elem= part_it++; partition_element *part_elem= part_it++;
if (part_elem->engine_type == NULL) if (part_elem->engine_type == NULL)
part_elem->engine_type= default_engine_type; part_elem->engine_type= default_engine_type;
if (thd->variables.sql_mode & MODE_NO_DIR_IN_CREATE)
part_elem->data_file_name= part_elem->index_file_name= 0;
if (!is_sub_partitioned()) if (!is_sub_partitioned())
{ {
if (check_table_name(part_elem->partition_name, if (check_table_name(part_elem->partition_name,
@ -849,15 +861,27 @@ void partition_info::print_no_partition_found(TABLE *table)
{ {
char buf[100]; char buf[100];
char *buf_ptr= (char*)&buf; char *buf_ptr= (char*)&buf;
my_bitmap_map *old_map= dbug_tmp_use_all_columns(table, table->read_set); TABLE_LIST table_list;
if (part_expr->null_value) bzero(&table_list, sizeof(table_list));
buf_ptr= (char*)"NULL"; table_list.db= table->s->db.str;
table_list.table_name= table->s->table_name.str;
if (check_single_table_access(current_thd,
SELECT_ACL, &table_list, TRUE))
my_message(ER_NO_PARTITION_FOR_GIVEN_VALUE,
ER(ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT), MYF(0));
else else
longlong2str(err_value, buf, {
part_expr->unsigned_flag ? 10 : -10); my_bitmap_map *old_map= dbug_tmp_use_all_columns(table, table->read_set);
my_error(ER_NO_PARTITION_FOR_GIVEN_VALUE, MYF(0), buf_ptr); if (part_expr->null_value)
dbug_tmp_restore_column_map(table->read_set, old_map); buf_ptr= (char*)"NULL";
else
longlong2str(err_value, buf,
part_expr->unsigned_flag ? 10 : -10);
my_error(ER_NO_PARTITION_FOR_GIVEN_VALUE, MYF(0), buf_ptr);
dbug_tmp_restore_column_map(table->read_set, old_map);
}
} }
/* /*
Set up buffers and arrays for fields requiring preparation Set up buffers and arrays for fields requiring preparation

File diff suppressed because it is too large Load diff

View file

@ -682,15 +682,15 @@ struct st_used_field
static struct st_used_field init_fields[]= static struct st_used_field init_fields[]=
{ {
{ "Db", NAME_LEN, MYSQL_TYPE_STRING, 0}, { "Db", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0},
{ "Name", NAME_LEN, MYSQL_TYPE_STRING, 0}, { "Name", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0},
{ "Type", 9, MYSQL_TYPE_STRING, 0}, { "Type", 9, MYSQL_TYPE_STRING, 0},
{ "Definer", 77, MYSQL_TYPE_STRING, 0}, { "Definer", 77, MYSQL_TYPE_STRING, 0},
{ "Modified", 0, MYSQL_TYPE_TIMESTAMP, 0}, { "Modified", 0, MYSQL_TYPE_TIMESTAMP, 0},
{ "Created", 0, MYSQL_TYPE_TIMESTAMP, 0}, { "Created", 0, MYSQL_TYPE_TIMESTAMP, 0},
{ "Security_type", 1, MYSQL_TYPE_STRING, 0}, { "Security_type", 1, MYSQL_TYPE_STRING, 0},
{ "Comment", NAME_LEN, MYSQL_TYPE_STRING, 0}, { "Comment", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0},
{ 0, 0, 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. 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 Hence, the overrun happens only if the name is in length > 32 and
uses multibyte (cyrillic, greek, etc.) 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 */ /* m_qname.str is not always \0 terminated */
memcpy(n, name.m_qname.str, name.m_qname.length); memcpy(n, name.m_qname.str, name.m_qname.length);

View file

@ -408,9 +408,22 @@ sp_name::init_qname(THD *thd)
*/ */
bool 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;
} }
/* ------------------------------------------------------------------ */ /* ------------------------------------------------------------------ */
@ -2120,7 +2133,7 @@ sp_head::show_create_procedure(THD *thd)
sys_var_thd_sql_mode::symbolic_mode_representation(thd, m_sql_mode, sys_var_thd_sql_mode::symbolic_mode_representation(thd, m_sql_mode,
&sql_mode); &sql_mode);
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.length)); field_list.push_back(new Item_empty_string("sql_mode", sql_mode.length));
// 1024 is for not to confuse old clients // 1024 is for not to confuse old clients
Item_empty_string *definition= Item_empty_string *definition=
@ -2186,7 +2199,7 @@ sp_head::show_create_function(THD *thd)
sys_var_thd_sql_mode::symbolic_mode_representation(thd, m_sql_mode, sys_var_thd_sql_mode::symbolic_mode_representation(thd, m_sql_mode,
&sql_mode); &sql_mode);
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.length)); field_list.push_back(new Item_empty_string("sql_mode", sql_mode.length));
Item_empty_string *definition= Item_empty_string *definition=
new Item_empty_string("Create Function", max(buffer.length(),1024)); new Item_empty_string("Create Function", max(buffer.length(),1024));

View file

@ -97,7 +97,7 @@ public:
bool bool
check_routine_name(LEX_STRING name); check_routine_name(LEX_STRING *ident);
class sp_head :private Query_arena class sp_head :private Query_arena
{ {

View file

@ -5852,7 +5852,7 @@ bool setup_tables_and_check_access(THD *thd,
{ {
if (leaves_tmp->belong_to_view && if (leaves_tmp->belong_to_view &&
check_single_table_access(thd, first_table ? want_access_first : check_single_table_access(thd, first_table ? want_access_first :
want_access, leaves_tmp)) want_access, leaves_tmp, FALSE))
{ {
tables->hide_view_error(thd); tables->hide_view_error(thd);
return TRUE; return TRUE;

View file

@ -898,7 +898,7 @@ int THD::send_explain_fields(select_result *result)
CHARSET_INFO *cs= system_charset_info; 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_return_int("id",3, MYSQL_TYPE_LONGLONG));
field_list.push_back(new Item_empty_string("select_type", 19, cs)); 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; item->maybe_null= 1;
if (lex->describe & DESCRIBE_PARTITIONS) 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)); field_list.push_back(item= new Item_empty_string("type", 10, cs));
item->maybe_null= 1; item->maybe_null= 1;
field_list.push_back(item=new Item_empty_string("possible_keys", 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; 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; item->maybe_null=1;
field_list.push_back(item=new Item_empty_string("key_len", field_list.push_back(item=new Item_empty_string("key_len",
NAME_LEN*MAX_KEY)); NAME_CHAR_LEN*MAX_KEY));
item->maybe_null=1; item->maybe_null=1;
field_list.push_back(item=new Item_empty_string("ref", 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; item->maybe_null=1;
field_list.push_back(item= new Item_return_int("rows", 10, field_list.push_back(item= new Item_return_int("rows", 10,
MYSQL_TYPE_LONGLONG)); MYSQL_TYPE_LONGLONG));

View file

@ -3975,11 +3975,6 @@ create_sp_error:
} }
case SQLCOM_SHOW_CREATE_PROC: 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) if (sp_show_create_procedure(thd, lex->spname) != SP_OK)
{ /* We don't distinguish between errors for now */ { /* We don't distinguish between errors for now */
my_error(ER_SP_DOES_NOT_EXIST, MYF(0), my_error(ER_SP_DOES_NOT_EXIST, MYF(0),
@ -3990,11 +3985,6 @@ create_sp_error:
} }
case SQLCOM_SHOW_CREATE_FUNC: 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) if (sp_show_create_function(thd, lex->spname) != SP_OK)
{ /* We don't distinguish between errors for now */ { /* We don't distinguish between errors for now */
my_error(ER_SP_DOES_NOT_EXIST, MYF(0), my_error(ER_SP_DOES_NOT_EXIST, MYF(0),
@ -4023,11 +4013,6 @@ create_sp_error:
{ {
sp_head *sp; 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) if (lex->sql_command == SQLCOM_SHOW_PROC_CODE)
sp= sp_find_routine(thd, TYPE_ENUM_PROCEDURE, lex->spname, sp= sp_find_routine(thd, TYPE_ENUM_PROCEDURE, lex->spname,
&thd->sp_proc_cache, FALSE); &thd->sp_proc_cache, FALSE);
@ -4452,6 +4437,8 @@ static bool execute_sqlcom_select(THD *thd, TABLE_LIST *all_tables)
thd Thread handler thd Thread handler
privilege requested privilege privilege requested privilege
all_tables global table list of query all_tables global table list of query
no_errors FALSE/TRUE - report/don't report error to
the client (using my_error() call).
RETURN RETURN
0 - OK 0 - OK
@ -4459,7 +4446,7 @@ static bool execute_sqlcom_select(THD *thd, TABLE_LIST *all_tables)
*/ */
bool check_single_table_access(THD *thd, ulong privilege, bool check_single_table_access(THD *thd, ulong privilege,
TABLE_LIST *all_tables) TABLE_LIST *all_tables, bool no_errors)
{ {
Security_context * backup_ctx= thd->security_ctx; Security_context * backup_ctx= thd->security_ctx;
@ -4475,12 +4462,12 @@ bool check_single_table_access(THD *thd, ulong privilege,
db_name= all_tables->db; db_name= all_tables->db;
if (check_access(thd, privilege, db_name, if (check_access(thd, privilege, db_name,
&all_tables->grant.privilege, 0, 0, &all_tables->grant.privilege, 0, no_errors,
test(all_tables->schema_table))) test(all_tables->schema_table)))
goto deny; goto deny;
/* Show only 1 table for check_grant */ /* Show only 1 table for check_grant */
if (grant_option && check_grant(thd, privilege, all_tables, 0, 1, 0)) if (grant_option && check_grant(thd, privilege, all_tables, 0, 1, no_errors))
goto deny; goto deny;
thd->security_ctx= backup_ctx; thd->security_ctx= backup_ctx;
@ -4508,7 +4495,7 @@ deny:
bool check_one_table_access(THD *thd, ulong privilege, TABLE_LIST *all_tables) bool check_one_table_access(THD *thd, ulong privilege, TABLE_LIST *all_tables)
{ {
if (check_single_table_access (thd,privilege,all_tables)) if (check_single_table_access (thd,privilege,all_tables, FALSE))
return 1; return 1;
/* Check rights on tables of subselects and implictly opened tables */ /* Check rights on tables of subselects and implictly opened tables */
@ -4521,7 +4508,7 @@ bool check_one_table_access(THD *thd, ulong privilege, TABLE_LIST *all_tables)
*/ */
if (view && subselects_tables->belong_to_view == view) if (view && subselects_tables->belong_to_view == view)
{ {
if (check_single_table_access (thd, privilege, subselects_tables)) if (check_single_table_access (thd, privilege, subselects_tables, FALSE))
return 1; return 1;
subselects_tables= subselects_tables->next_global; subselects_tables= subselects_tables->next_global;
} }
@ -5311,7 +5298,7 @@ bool mysql_test_parse_for_slave(THD *thd, char *inBuf, uint length)
** Return 0 if ok ** 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, char *length, char *decimals,
uint type_modifier, uint type_modifier,
Item *default_value, Item *on_update_value, Item *default_value, Item *on_update_value,
@ -5324,14 +5311,15 @@ bool add_field_to_list(THD *thd, char *field_name, enum_field_types type,
LEX *lex= thd->lex; LEX *lex= thd->lex;
DBUG_ENTER("add_field_to_list"); 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 */ DBUG_RETURN(1); /* purecov: inspected */
} }
if (type_modifier & PRI_KEY_FLAG) 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, lex->key_list.push_back(new Key(Key::PRIMARY, NullS,
&default_key_create_info, &default_key_create_info,
0, lex->col_list)); 0, lex->col_list));
@ -5339,7 +5327,7 @@ bool add_field_to_list(THD *thd, char *field_name, enum_field_types type,
} }
if (type_modifier & (UNIQUE_FLAG | UNIQUE_KEY_FLAG)) 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, lex->key_list.push_back(new Key(Key::UNIQUE, NullS,
&default_key_create_info, 0, &default_key_create_info, 0,
lex->col_list)); lex->col_list));
@ -5359,7 +5347,7 @@ bool add_field_to_list(THD *thd, char *field_name, enum_field_types type,
!(((Item_func*)default_value)->functype() == Item_func::NOW_FUNC && !(((Item_func*)default_value)->functype() == Item_func::NOW_FUNC &&
type == MYSQL_TYPE_TIMESTAMP)) 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); DBUG_RETURN(1);
} }
else if (default_value->type() == Item::NULL_ITEM) else if (default_value->type() == Item::NULL_ITEM)
@ -5368,20 +5356,20 @@ bool add_field_to_list(THD *thd, char *field_name, enum_field_types type,
if ((type_modifier & (NOT_NULL_FLAG | AUTO_INCREMENT_FLAG)) == if ((type_modifier & (NOT_NULL_FLAG | AUTO_INCREMENT_FLAG)) ==
NOT_NULL_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); DBUG_RETURN(1);
} }
} }
else if (type_modifier & AUTO_INCREMENT_FLAG) 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); DBUG_RETURN(1);
} }
} }
if (on_update_value && type != MYSQL_TYPE_TIMESTAMP) 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); DBUG_RETURN(1);
} }
@ -5397,7 +5385,7 @@ bool add_field_to_list(THD *thd, char *field_name, enum_field_types type,
} }
if (!(new_field= new create_field()) || 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, default_value, on_update_value, comment, change,
interval_list, cs, uint_geom_type)) interval_list, cs, uint_geom_type))
DBUG_RETURN(1); DBUG_RETURN(1);
@ -6949,26 +6937,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 SYNOPSIS
check_string_length() check_string_byte_length()
str string to be checked str string to be checked
err_msg error message to be displayed if the string is too long err_msg error message to be displayed if the string is too long
max_length max length max_byte_length max length in bytes
RETURN RETURN
FALSE the passed string is not longer than max_length FALSE the passed string is not longer than max_length
TRUE the passed string is 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, bool check_string_byte_length(LEX_STRING *str, const char *err_msg,
uint max_length) uint max_byte_length)
{ {
if (str->length <= max_length) if (str->length <= max_byte_length)
return FALSE; 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; 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;
}

View file

@ -1892,12 +1892,15 @@ static int add_partition_options(File fptr, partition_element *p_elem)
err+= add_keyword_int(fptr,"MAX_ROWS",(longlong)p_elem->part_max_rows); err+= add_keyword_int(fptr,"MAX_ROWS",(longlong)p_elem->part_max_rows);
if (p_elem->part_min_rows) if (p_elem->part_min_rows)
err+= add_keyword_int(fptr,"MIN_ROWS",(longlong)p_elem->part_min_rows); err+= add_keyword_int(fptr,"MIN_ROWS",(longlong)p_elem->part_min_rows);
if (p_elem->data_file_name) if (!(current_thd->variables.sql_mode & MODE_NO_DIR_IN_CREATE))
err+= add_keyword_string(fptr, "DATA DIRECTORY", TRUE, {
p_elem->data_file_name); if (p_elem->data_file_name)
if (p_elem->index_file_name) err+= add_keyword_string(fptr, "DATA DIRECTORY", TRUE,
err+= add_keyword_string(fptr, "INDEX DIRECTORY", TRUE, p_elem->data_file_name);
p_elem->index_file_name); if (p_elem->index_file_name)
err+= add_keyword_string(fptr, "INDEX DIRECTORY", TRUE,
p_elem->index_file_name);
}
if (p_elem->part_comment) if (p_elem->part_comment)
err+= add_keyword_string(fptr, "COMMENT", TRUE, p_elem->part_comment); err+= add_keyword_string(fptr, "COMMENT", TRUE, p_elem->part_comment);
return err + add_engine(fptr,p_elem->engine_type); return err + add_engine(fptr,p_elem->engine_type);

View file

@ -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). plugin directory are used (to make this even remotely secure).
*/ */
if (my_strchr(files_charset_info, dl->str, dl->str + dl->length, FN_LIBCHAR) || 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) plugin_dir_len + dl->length + 1 >= FN_REFLEN)
{ {
if (report & REPORT_TO_USER) if (report & REPORT_TO_USER)

View file

@ -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("Privilege",10));
field_list.push_back(new Item_empty_string("Context",15)); 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, if (protocol->send_fields(&field_list,
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF)) 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("Zerofill",4));
field_list.push_back(new Item_empty_string("Searchable",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("Case_Sensitive",4));
field_list.push_back(new Item_empty_string("Default",NAME_LEN)); field_list.push_back(new Item_empty_string("Default",NAME_CHAR_LEN));
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, if (protocol->send_fields(&field_list,
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF)) 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++) 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; file=dirp->dir_entry+i;
if (dir) if (dir)
{ /* Return databases */ { /* Return databases */
@ -651,13 +651,13 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list)
List<Item> field_list; List<Item> field_list;
if (table_list->view) 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", field_list.push_back(new Item_empty_string("Create View",
max(buffer.length(),1024))); max(buffer.length(),1024)));
} }
else 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 // 1024 is for not to confuse old clients
field_list.push_back(new Item_empty_string("Create Table", field_list.push_back(new Item_empty_string("Create Table",
max(buffer.length(),1024))); 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); load_db_opt_by_name(thd, dbname, &create);
} }
List<Item> field_list; 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)); field_list.push_back(new Item_empty_string("Create Database",1024));
if (protocol->send_fields(&field_list, 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_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("User",16));
field_list.push_back(new Item_empty_string("Host",LIST_PROCESS_HOST_LEN)); 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->maybe_null=1;
field_list.push_back(new Item_empty_string("Command",16)); field_list.push_back(new Item_empty_string("Command",16));
field_list.push_back(new Item_return_int("Time",7, MYSQL_TYPE_LONG)); field_list.push_back(new Item_return_int("Time",7, MYSQL_TYPE_LONG));
@ -5345,7 +5345,7 @@ int fill_schema_session_variables(THD *thd, TABLE_LIST *tables, COND *cond)
ST_FIELD_INFO schema_fields_info[]= ST_FIELD_INFO schema_fields_info[]=
{ {
{"CATALOG_NAME", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0}, {"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_CHARACTER_SET_NAME", 64, MYSQL_TYPE_STRING, 0, 0, 0},
{"DEFAULT_COLLATION_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}, {"SQL_PATH", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
@ -5356,10 +5356,10 @@ ST_FIELD_INFO schema_fields_info[]=
ST_FIELD_INFO tables_fields_info[]= ST_FIELD_INFO tables_fields_info[]=
{ {
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0}, {"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"TABLE_SCHEMA",NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Name"}, {"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Name"},
{"TABLE_TYPE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"TABLE_TYPE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"ENGINE", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, "Engine"}, {"ENGINE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, "Engine"},
{"VERSION", MY_INT64_NUM_DECIMAL_DIGITS , MYSQL_TYPE_LONG, 0, 1, "Version"}, {"VERSION", MY_INT64_NUM_DECIMAL_DIGITS , MYSQL_TYPE_LONG, 0, 1, "Version"},
{"ROW_FORMAT", 10, MYSQL_TYPE_STRING, 0, 1, "Row_format"}, {"ROW_FORMAT", 10, MYSQL_TYPE_STRING, 0, 1, "Row_format"},
{"TABLE_ROWS", MY_INT64_NUM_DECIMAL_DIGITS , MYSQL_TYPE_LONG, 0, 1, "Rows"}, {"TABLE_ROWS", MY_INT64_NUM_DECIMAL_DIGITS , MYSQL_TYPE_LONG, 0, 1, "Rows"},
@ -5388,13 +5388,13 @@ ST_FIELD_INFO tables_fields_info[]=
ST_FIELD_INFO columns_fields_info[]= ST_FIELD_INFO columns_fields_info[]=
{ {
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0}, {"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"COLUMN_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Field"}, {"COLUMN_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Field"},
{"ORDINAL_POSITION", MY_INT64_NUM_DECIMAL_DIGITS , MYSQL_TYPE_LONG, 0, 0, 0}, {"ORDINAL_POSITION", MY_INT64_NUM_DECIMAL_DIGITS , MYSQL_TYPE_LONG, 0, 0, 0},
{"COLUMN_DEFAULT", MAX_FIELD_VARCHARLENGTH, MYSQL_TYPE_STRING, 0, 1, "Default"}, {"COLUMN_DEFAULT", MAX_FIELD_VARCHARLENGTH, MYSQL_TYPE_STRING, 0, 1, "Default"},
{"IS_NULLABLE", 3, MYSQL_TYPE_STRING, 0, 0, "Null"}, {"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, {"CHARACTER_MAXIMUM_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS , MYSQL_TYPE_LONG, 0, 1,
0}, 0},
{"CHARACTER_OCTET_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},
@ -5447,9 +5447,9 @@ ST_FIELD_INFO engines_fields_info[]=
ST_FIELD_INFO events_fields_info[]= ST_FIELD_INFO events_fields_info[]=
{ {
{"EVENT_CATALOG", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0}, {"EVENT_CATALOG", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"EVENT_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Db"}, {"EVENT_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Db"},
{"EVENT_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Name"}, {"EVENT_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Name"},
{"DEFINER", 77, MYSQL_TYPE_STRING, 0, 0, "Definer"}, {"DEFINER", 77, MYSQL_TYPE_STRING, 0, 0, "Definer"},
{"TIME_ZONE", 64, MYSQL_TYPE_STRING, 0, 0, "Time zone"}, {"TIME_ZONE", 64, MYSQL_TYPE_STRING, 0, 0, "Time zone"},
{"EVENT_BODY", 8, MYSQL_TYPE_STRING, 0, 0, 0}, {"EVENT_BODY", 8, MYSQL_TYPE_STRING, 0, 0, 0},
@ -5466,7 +5466,7 @@ ST_FIELD_INFO events_fields_info[]=
{"CREATED", 0, MYSQL_TYPE_TIMESTAMP, 0, 0, 0}, {"CREATED", 0, MYSQL_TYPE_TIMESTAMP, 0, 0, 0},
{"LAST_ALTERED", 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}, {"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"}, {"ORIGINATOR", 10, MYSQL_TYPE_LONG, 0, 0, "Originator"},
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0} {0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
}; };
@ -5483,25 +5483,25 @@ ST_FIELD_INFO coll_charset_app_fields_info[]=
ST_FIELD_INFO proc_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_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"ROUTINE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Db"}, {"ROUTINE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Db"},
{"ROUTINE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Name"}, {"ROUTINE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Name"},
{"ROUTINE_TYPE", 9, MYSQL_TYPE_STRING, 0, 0, "Type"}, {"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_BODY", 8, MYSQL_TYPE_STRING, 0, 0, 0},
{"ROUTINE_DEFINITION", 65535, MYSQL_TYPE_STRING, 0, 1, 0}, {"ROUTINE_DEFINITION", 65535, MYSQL_TYPE_STRING, 0, 1, 0},
{"EXTERNAL_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0}, {"EXTERNAL_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"EXTERNAL_LANGUAGE", NAME_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}, {"PARAMETER_STYLE", 8, MYSQL_TYPE_STRING, 0, 0, 0},
{"IS_DETERMINISTIC", 3, 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_DATA_ACCESS", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"SQL_PATH", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0}, {"SQL_PATH", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"SECURITY_TYPE", 7, MYSQL_TYPE_STRING, 0, 0, "Security_type"}, {"SECURITY_TYPE", 7, MYSQL_TYPE_STRING, 0, 0, "Security_type"},
{"CREATED", 0, MYSQL_TYPE_TIMESTAMP, 0, 0, "Created"}, {"CREATED", 0, MYSQL_TYPE_TIMESTAMP, 0, 0, "Created"},
{"LAST_ALTERED", 0, MYSQL_TYPE_TIMESTAMP, 0, 0, "Modified"}, {"LAST_ALTERED", 0, MYSQL_TYPE_TIMESTAMP, 0, 0, "Modified"},
{"SQL_MODE", 65535, MYSQL_TYPE_STRING, 0, 0, 0}, {"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"}, {"DEFINER", 77, MYSQL_TYPE_STRING, 0, 0, "Definer"},
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0} {0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
}; };
@ -5510,13 +5510,13 @@ ST_FIELD_INFO proc_fields_info[]=
ST_FIELD_INFO stat_fields_info[]= ST_FIELD_INFO stat_fields_info[]=
{ {
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0}, {"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Table"}, {"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Table"},
{"NON_UNIQUE", 1, MYSQL_TYPE_LONG, 0, 0, "Non_unique"}, {"NON_UNIQUE", 1, MYSQL_TYPE_LONG, 0, 0, "Non_unique"},
{"INDEX_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"INDEX_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"INDEX_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Key_name"}, {"INDEX_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Key_name"},
{"SEQ_IN_INDEX", 2, MYSQL_TYPE_LONG, 0, 0, "Seq_in_index"}, {"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"}, {"COLLATION", 1, MYSQL_TYPE_STRING, 0, 1, "Collation"},
{"CARDINALITY", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONG, 0, 1, "Cardinality"}, {"CARDINALITY", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONG, 0, 1, "Cardinality"},
{"SUB_PART", 3, MYSQL_TYPE_LONG, 0, 1, "Sub_part"}, {"SUB_PART", 3, MYSQL_TYPE_LONG, 0, 1, "Sub_part"},
@ -5531,8 +5531,8 @@ ST_FIELD_INFO stat_fields_info[]=
ST_FIELD_INFO view_fields_info[]= ST_FIELD_INFO view_fields_info[]=
{ {
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0}, {"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"TABLE_NAME", NAME_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}, {"VIEW_DEFINITION", 65535, MYSQL_TYPE_STRING, 0, 0, 0},
{"CHECK_OPTION", 8, MYSQL_TYPE_STRING, 0, 0, 0}, {"CHECK_OPTION", 8, MYSQL_TYPE_STRING, 0, 0, 0},
{"IS_UPDATABLE", 3, MYSQL_TYPE_STRING, 0, 0, 0}, {"IS_UPDATABLE", 3, MYSQL_TYPE_STRING, 0, 0, 0},
@ -5546,7 +5546,7 @@ ST_FIELD_INFO user_privileges_fields_info[]=
{ {
{"GRANTEE", 81, MYSQL_TYPE_STRING, 0, 0, 0}, {"GRANTEE", 81, MYSQL_TYPE_STRING, 0, 0, 0},
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 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}, {"IS_GRANTABLE", 3, MYSQL_TYPE_STRING, 0, 0, 0},
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0} {0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
}; };
@ -5556,8 +5556,8 @@ ST_FIELD_INFO schema_privileges_fields_info[]=
{ {
{"GRANTEE", 81, MYSQL_TYPE_STRING, 0, 0, 0}, {"GRANTEE", 81, MYSQL_TYPE_STRING, 0, 0, 0},
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0}, {"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 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}, {"IS_GRANTABLE", 3, MYSQL_TYPE_STRING, 0, 0, 0},
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0} {0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
}; };
@ -5567,9 +5567,9 @@ ST_FIELD_INFO table_privileges_fields_info[]=
{ {
{"GRANTEE", 81, MYSQL_TYPE_STRING, 0, 0, 0}, {"GRANTEE", 81, MYSQL_TYPE_STRING, 0, 0, 0},
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0}, {"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 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}, {"IS_GRANTABLE", 3, MYSQL_TYPE_STRING, 0, 0, 0},
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0} {0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
}; };
@ -5579,10 +5579,10 @@ ST_FIELD_INFO column_privileges_fields_info[]=
{ {
{"GRANTEE", 81, MYSQL_TYPE_STRING, 0, 0, 0}, {"GRANTEE", 81, MYSQL_TYPE_STRING, 0, 0, 0},
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0}, {"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"COLUMN_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"COLUMN_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 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}, {"IS_GRANTABLE", 3, MYSQL_TYPE_STRING, 0, 0, 0},
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0} {0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
}; };
@ -5591,11 +5591,11 @@ ST_FIELD_INFO column_privileges_fields_info[]=
ST_FIELD_INFO table_constraints_fields_info[]= ST_FIELD_INFO table_constraints_fields_info[]=
{ {
{"CONSTRAINT_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0}, {"CONSTRAINT_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"CONSTRAINT_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"CONSTRAINT_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"CONSTRAINT_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"CONSTRAINT_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"CONSTRAINT_TYPE", NAME_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} {0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
}; };
@ -5603,17 +5603,17 @@ ST_FIELD_INFO table_constraints_fields_info[]=
ST_FIELD_INFO key_column_usage_fields_info[]= ST_FIELD_INFO key_column_usage_fields_info[]=
{ {
{"CONSTRAINT_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0}, {"CONSTRAINT_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"CONSTRAINT_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"CONSTRAINT_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"CONSTRAINT_NAME", NAME_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_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"COLUMN_NAME", NAME_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}, {"ORDINAL_POSITION", 10 ,MYSQL_TYPE_LONG, 0, 0, 0},
{"POSITION_IN_UNIQUE_CONSTRAINT", 10 ,MYSQL_TYPE_LONG, 0, 1, 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_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"REFERENCED_TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0}, {"REFERENCED_TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"REFERENCED_COLUMN_NAME", NAME_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} {0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
}; };
@ -5621,17 +5621,17 @@ ST_FIELD_INFO key_column_usage_fields_info[]=
ST_FIELD_INFO table_names_fields_info[]= ST_FIELD_INFO table_names_fields_info[]=
{ {
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0}, {"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"TABLE_SCHEMA",NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"TABLE_SCHEMA",NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Tables_in_"}, {"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Tables_in_"},
{"TABLE_TYPE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Table_type"}, {"TABLE_TYPE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Table_type"},
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0} {0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
}; };
ST_FIELD_INFO open_tables_fields_info[]= ST_FIELD_INFO open_tables_fields_info[]=
{ {
{"Database", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Database"}, {"Database", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Database"},
{"Table",NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Table"}, {"Table",NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Table"},
{"In_use", 1, MYSQL_TYPE_LONG, 0, 0, "In_use"}, {"In_use", 1, MYSQL_TYPE_LONG, 0, 0, "In_use"},
{"Name_locked", 4, MYSQL_TYPE_LONG, 0, 0, "Name_locked"}, {"Name_locked", 4, MYSQL_TYPE_LONG, 0, 0, "Name_locked"},
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0} {0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
@ -5641,19 +5641,19 @@ ST_FIELD_INFO open_tables_fields_info[]=
ST_FIELD_INFO triggers_fields_info[]= ST_FIELD_INFO triggers_fields_info[]=
{ {
{"TRIGGER_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0}, {"TRIGGER_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"TRIGGER_SCHEMA",NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"TRIGGER_SCHEMA",NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"TRIGGER_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Trigger"}, {"TRIGGER_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Trigger"},
{"EVENT_MANIPULATION", 6, MYSQL_TYPE_STRING, 0, 0, "Event"}, {"EVENT_MANIPULATION", 6, MYSQL_TYPE_STRING, 0, 0, "Event"},
{"EVENT_OBJECT_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0}, {"EVENT_OBJECT_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"EVENT_OBJECT_SCHEMA",NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"EVENT_OBJECT_SCHEMA",NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"EVENT_OBJECT_TABLE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Table"}, {"EVENT_OBJECT_TABLE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Table"},
{"ACTION_ORDER", 4, MYSQL_TYPE_LONG, 0, 0, 0}, {"ACTION_ORDER", 4, MYSQL_TYPE_LONG, 0, 0, 0},
{"ACTION_CONDITION", 65535, MYSQL_TYPE_STRING, 0, 1, 0}, {"ACTION_CONDITION", 65535, MYSQL_TYPE_STRING, 0, 1, 0},
{"ACTION_STATEMENT", 65535, MYSQL_TYPE_STRING, 0, 0, "Statement"}, {"ACTION_STATEMENT", 65535, MYSQL_TYPE_STRING, 0, 0, "Statement"},
{"ACTION_ORIENTATION", 9, MYSQL_TYPE_STRING, 0, 0, 0}, {"ACTION_ORIENTATION", 9, MYSQL_TYPE_STRING, 0, 0, 0},
{"ACTION_TIMING", 6, MYSQL_TYPE_STRING, 0, 0, "Timing"}, {"ACTION_TIMING", 6, MYSQL_TYPE_STRING, 0, 0, "Timing"},
{"ACTION_REFERENCE_OLD_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_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_OLD_ROW", 3, MYSQL_TYPE_STRING, 0, 0, 0},
{"ACTION_REFERENCE_NEW_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"}, {"CREATED", 0, MYSQL_TYPE_TIMESTAMP, 0, 1, "Created"},
@ -5666,10 +5666,10 @@ ST_FIELD_INFO triggers_fields_info[]=
ST_FIELD_INFO partitions_fields_info[]= ST_FIELD_INFO partitions_fields_info[]=
{ {
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0}, {"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"TABLE_SCHEMA",NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"TABLE_SCHEMA",NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"PARTITION_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0}, {"PARTITION_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"SUBPARTITION_NAME", NAME_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}, {"PARTITION_ORDINAL_POSITION", 21 , MYSQL_TYPE_LONG, 0, 1, 0},
{"SUBPARTITION_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}, {"PARTITION_METHOD", 12, MYSQL_TYPE_STRING, 0, 1, 0},
@ -5689,7 +5689,7 @@ ST_FIELD_INFO partitions_fields_info[]=
{"CHECKSUM", 21 , MYSQL_TYPE_LONG, 0, 1, 0}, {"CHECKSUM", 21 , MYSQL_TYPE_LONG, 0, 1, 0},
{"PARTITION_COMMENT", 80, MYSQL_TYPE_STRING, 0, 0, 0}, {"PARTITION_COMMENT", 80, MYSQL_TYPE_STRING, 0, 0, 0},
{"NODEGROUP", 12 , 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} {0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
}; };
@ -5723,7 +5723,7 @@ ST_FIELD_INFO processlist_fields_info[]=
{"ID", 4, MYSQL_TYPE_LONG, 0, 0, "Id"}, {"ID", 4, MYSQL_TYPE_LONG, 0, 0, "Id"},
{"USER", 16, MYSQL_TYPE_STRING, 0, 0, "User"}, {"USER", 16, MYSQL_TYPE_STRING, 0, 0, "User"},
{"HOST", LIST_PROCESS_HOST_LEN, MYSQL_TYPE_STRING, 0, 0, "Host"}, {"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"}, {"COMMAND", 16, MYSQL_TYPE_STRING, 0, 0, "Command"},
{"TIME", 7, MYSQL_TYPE_LONG, 0, 0, "Time"}, {"TIME", 7, MYSQL_TYPE_LONG, 0, 0, "Time"},
{"STATE", 64, MYSQL_TYPE_STRING, 0, 1, "State"}, {"STATE", 64, MYSQL_TYPE_STRING, 0, 1, "State"},
@ -5734,14 +5734,14 @@ ST_FIELD_INFO processlist_fields_info[]=
ST_FIELD_INFO plugin_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_VERSION", 20, MYSQL_TYPE_STRING, 0, 0, 0},
{"PLUGIN_STATUS", 10, MYSQL_TYPE_STRING, 0, 0, "Status"}, {"PLUGIN_STATUS", 10, MYSQL_TYPE_STRING, 0, 0, "Status"},
{"PLUGIN_TYPE", 80, MYSQL_TYPE_STRING, 0, 0, "Type"}, {"PLUGIN_TYPE", 80, MYSQL_TYPE_STRING, 0, 0, "Type"},
{"PLUGIN_TYPE_VERSION", 20, MYSQL_TYPE_STRING, 0, 0, 0}, {"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_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_DESCRIPTION", 65535, MYSQL_TYPE_STRING, 0, 1, 0},
{"PLUGIN_LICENSE", 80, MYSQL_TYPE_STRING, 0, 1, "License"}, {"PLUGIN_LICENSE", 80, MYSQL_TYPE_STRING, 0, 1, "License"},
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0} {0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
@ -5750,16 +5750,16 @@ ST_FIELD_INFO plugin_fields_info[]=
ST_FIELD_INFO files_fields_info[]= ST_FIELD_INFO files_fields_info[]=
{ {
{"FILE_ID", 4, MYSQL_TYPE_LONG, 0, 0, 0}, {"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}, {"FILE_TYPE", 20, 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},
{"TABLE_CATALOG", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0}, {"TABLE_CATALOG", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0}, {"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0}, {"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"LOGFILE_GROUP_NAME", NAME_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}, {"LOGFILE_GROUP_NUMBER", 4, MYSQL_TYPE_LONG, 0, 1, 0},
{"ENGINE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"ENGINE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"FULLTEXT_KEYS", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0}, {"FULLTEXT_KEYS", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"DELETED_ROWS", 4, MYSQL_TYPE_LONG, 0, 1, 0}, {"DELETED_ROWS", 4, MYSQL_TYPE_LONG, 0, 1, 0},
{"UPDATE_COUNT", 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}, {"FREE_EXTENTS", 4, MYSQL_TYPE_LONG, 0, 1, 0},
@ -5803,16 +5803,16 @@ void init_fill_schema_files_row(TABLE* table)
ST_FIELD_INFO referential_constraints_fields_info[]= ST_FIELD_INFO referential_constraints_fields_info[]=
{ {
{"CONSTRAINT_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0}, {"CONSTRAINT_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"CONSTRAINT_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"CONSTRAINT_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"CONSTRAINT_NAME", NAME_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_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
{"UNIQUE_CONSTRAINT_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"UNIQUE_CONSTRAINT_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"UNIQUE_CONSTRAINT_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"UNIQUE_CONSTRAINT_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"MATCH_OPTION", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"MATCH_OPTION", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"UPDATE_RULE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"UPDATE_RULE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"DELETE_RULE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"DELETE_RULE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0}, {"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
{"REFERENCED_TABLE_NAME", NAME_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} {0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
}; };

View file

@ -1922,6 +1922,7 @@ static int sort_keys(KEY *a, KEY *b)
set_or_name "SET" or "ENUM" string for warning message set_or_name "SET" or "ENUM" string for warning message
name name of the checked column name name of the checked column
typelib list of values for the column typelib list of values for the column
dup_val_count returns count of duplicate elements
DESCRIPTION DESCRIPTION
This function prints an warning for each value in list This function prints an warning for each value in list
@ -1933,11 +1934,12 @@ static int sort_keys(KEY *a, KEY *b)
void check_duplicates_in_interval(const char *set_or_name, void check_duplicates_in_interval(const char *set_or_name,
const char *name, TYPELIB *typelib, const char *name, TYPELIB *typelib,
CHARSET_INFO *cs) CHARSET_INFO *cs, unsigned int *dup_val_count)
{ {
TYPELIB tmp= *typelib; TYPELIB tmp= *typelib;
const char **cur_value= typelib->type_names; const char **cur_value= typelib->type_names;
unsigned int *cur_length= typelib->type_lengths; unsigned int *cur_length= typelib->type_lengths;
*dup_val_count= 0;
for ( ; tmp.count > 1; cur_value++, cur_length++) for ( ; tmp.count > 1; cur_value++, cur_length++)
{ {
@ -1950,6 +1952,7 @@ void check_duplicates_in_interval(const char *set_or_name,
ER_DUPLICATED_VALUE_IN_TYPE, ER_DUPLICATED_VALUE_IN_TYPE,
ER(ER_DUPLICATED_VALUE_IN_TYPE), ER(ER_DUPLICATED_VALUE_IN_TYPE),
name,*cur_value,set_or_name); name,*cur_value,set_or_name);
(*dup_val_count)++;
} }
} }
} }
@ -2013,6 +2016,7 @@ int prepare_create_field(create_field *sql_field,
int *timestamps, int *timestamps_with_niladic, int *timestamps, int *timestamps_with_niladic,
longlong table_flags) longlong table_flags)
{ {
unsigned int dup_val_count;
DBUG_ENTER("prepare_field"); DBUG_ENTER("prepare_field");
/* /*
@ -2088,7 +2092,7 @@ int prepare_create_field(create_field *sql_field,
sql_field->unireg_check=Field::INTERVAL_FIELD; sql_field->unireg_check=Field::INTERVAL_FIELD;
check_duplicates_in_interval("ENUM",sql_field->field_name, check_duplicates_in_interval("ENUM",sql_field->field_name,
sql_field->interval, sql_field->interval,
sql_field->charset); sql_field->charset, &dup_val_count);
break; break;
case MYSQL_TYPE_SET: case MYSQL_TYPE_SET:
sql_field->pack_flag=pack_length_to_packflag(sql_field->pack_length) | sql_field->pack_flag=pack_length_to_packflag(sql_field->pack_length) |
@ -2098,7 +2102,13 @@ int prepare_create_field(create_field *sql_field,
sql_field->unireg_check=Field::BIT_FIELD; sql_field->unireg_check=Field::BIT_FIELD;
check_duplicates_in_interval("SET",sql_field->field_name, check_duplicates_in_interval("SET",sql_field->field_name,
sql_field->interval, sql_field->interval,
sql_field->charset); sql_field->charset, &dup_val_count);
/* Check that count of unique members is not more then 64 */
if (sql_field->interval->count - dup_val_count > sizeof(longlong)*8)
{
my_error(ER_TOO_BIG_SET, MYF(0), sql_field->field_name);
DBUG_RETURN(1);
}
break; break;
case MYSQL_TYPE_DATE: // Rest of string types case MYSQL_TYPE_DATE: // Rest of string types
case MYSQL_TYPE_NEWDATE: case MYSQL_TYPE_NEWDATE:
@ -2541,6 +2551,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 : DBUG_PRINT("info", ("key name: '%s' type: %d", key->name ? key->name :
"(none)" , key->type)); "(none)" , key->type));
LEX_STRING key_name_str;
if (key->type == Key::FOREIGN_KEY) if (key->type == Key::FOREIGN_KEY)
{ {
fk_key_count++; fk_key_count++;
@ -2562,7 +2573,10 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
my_error(ER_TOO_MANY_KEY_PARTS,MYF(0),tmp); my_error(ER_TOO_MANY_KEY_PARTS,MYF(0),tmp);
DBUG_RETURN(-1); 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); my_error(ER_TOO_LONG_IDENT, MYF(0), key->name);
DBUG_RETURN(-1); DBUG_RETURN(-1);
@ -4050,7 +4064,7 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
if (end_active_trans(thd)) if (end_active_trans(thd))
DBUG_RETURN(1); 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; item->maybe_null = 1;
field_list.push_back(item = new Item_empty_string("Op", 10)); field_list.push_back(item = new Item_empty_string("Op", 10));
item->maybe_null = 1; item->maybe_null = 1;
@ -4633,7 +4647,8 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table,
/* /*
Validate the source 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 && (table_ident->table.length &&
check_table_name(src_table,table_ident->table.length))) check_table_name(src_table,table_ident->table.length)))
{ {

View file

@ -169,8 +169,10 @@ void udf_init()
This is done to ensure that only approved dll from the system This is done to ensure that only approved dll from the system
directories are used (to make this even remotely secure). directories are used (to make this even remotely secure).
*/ */
if (my_strchr(files_charset_info, dl_name, dl_name + strlen(dl_name), FN_LIBCHAR) || if (my_strchr(files_charset_info, dl_name,
strlen(name.str) > NAME_LEN) 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'", sql_print_error("Invalid row in mysql.func table for function '%.64s'",
name.str); 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)); my_message(ER_UDF_NO_PATHS, ER(ER_UDF_NO_PATHS), MYF(0));
DBUG_RETURN(1); 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); my_error(ER_TOO_LONG_IDENT, MYF(0), udf->name);
DBUG_RETURN(1); DBUG_RETURN(1);

View file

@ -1931,9 +1931,8 @@ sp_name:
my_error(ER_WRONG_DB_NAME, MYF(0), $1.str); my_error(ER_WRONG_DB_NAME, MYF(0), $1.str);
MYSQL_YYABORT; MYSQL_YYABORT;
} }
if (check_routine_name($3)) if (check_routine_name(&$3))
{ {
my_error(ER_SP_WRONG_NAME, MYF(0), $3.str);
MYSQL_YYABORT; MYSQL_YYABORT;
} }
$$= new sp_name($1, $3, true); $$= new sp_name($1, $3, true);
@ -1943,9 +1942,8 @@ sp_name:
{ {
THD *thd= YYTHD; THD *thd= YYTHD;
LEX_STRING db; 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; MYSQL_YYABORT;
} }
if (thd->copy_db_to(&db.str, &db.length)) if (thd->copy_db_to(&db.str, &db.length))
@ -4540,8 +4538,7 @@ field_spec:
type opt_attribute type opt_attribute
{ {
LEX *lex=Lex; LEX *lex=Lex;
if (add_field_to_list(lex->thd, $1.str, if (add_field_to_list(lex->thd, &$1, (enum enum_field_types) $3,
(enum enum_field_types) $3,
lex->length,lex->dec,lex->type, lex->length,lex->dec,lex->type,
lex->default_value, lex->on_update_value, lex->default_value, lex->on_update_value,
&lex->comment, &lex->comment,
@ -5497,7 +5494,7 @@ alter_list_item:
type opt_attribute type opt_attribute
{ {
LEX *lex=Lex; 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, (enum enum_field_types) $5,
lex->length,lex->dec,lex->type, lex->length,lex->dec,lex->type,
lex->default_value, lex->on_update_value, lex->default_value, lex->on_update_value,
@ -9722,8 +9719,9 @@ user:
$$->host.str= (char *) "%"; $$->host.str= (char *) "%";
$$->host.length= 1; $$->host.length= 1;
if (check_string_length(&$$->user, if (check_string_char_length(&$$->user, ER(ER_USERNAME),
ER(ER_USERNAME), USERNAME_LENGTH)) USERNAME_CHAR_LENGTH,
system_charset_info, 0))
MYSQL_YYABORT; MYSQL_YYABORT;
} }
| ident_or_text '@' ident_or_text | ident_or_text '@' ident_or_text
@ -9733,10 +9731,11 @@ user:
MYSQL_YYABORT; MYSQL_YYABORT;
$$->user = $1; $$->host=$3; $$->user = $1; $$->host=$3;
if (check_string_length(&$$->user, if (check_string_char_length(&$$->user, ER(ER_USERNAME),
ER(ER_USERNAME), USERNAME_LENGTH) || USERNAME_CHAR_LENGTH,
check_string_length(&$$->host, system_charset_info, 0) ||
ER(ER_HOSTNAME), HOSTNAME_LENGTH)) check_string_byte_length(&$$->host, ER(ER_HOSTNAME),
HOSTNAME_LENGTH))
MYSQL_YYABORT; MYSQL_YYABORT;
} }
| CURRENT_USER optional_braces | CURRENT_USER optional_braces

View file

@ -2336,8 +2336,9 @@ uint calculate_key_len(TABLE *table, uint key, const byte *buf,
bool check_db_name(LEX_STRING *org_name) bool check_db_name(LEX_STRING *org_name)
{ {
char *name= org_name->str; 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; return 1;
if (lower_case_table_names && name != any_db) if (lower_case_table_names && name != any_db)
@ -2346,6 +2347,7 @@ bool check_db_name(LEX_STRING *org_name)
#if defined(USE_MB) && defined(USE_MB_IDENT) #if defined(USE_MB) && defined(USE_MB_IDENT)
if (use_mb(system_charset_info)) if (use_mb(system_charset_info))
{ {
name_length= 0;
bool last_char_is_space= TRUE; bool last_char_is_space= TRUE;
char *end= name + org_name->length; char *end= name + org_name->length;
while (name < end) while (name < end)
@ -2356,12 +2358,14 @@ bool check_db_name(LEX_STRING *org_name)
if (!len) if (!len)
len= 1; len= 1;
name+= len; name+= len;
name_length++;
} }
return last_char_is_space; return (last_char_is_space || name_length > NAME_CHAR_LEN);
} }
else else
#endif #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 */
} }
@ -2374,6 +2378,7 @@ bool check_db_name(LEX_STRING *org_name)
bool check_table_name(const char *name, uint length) bool check_table_name(const char *name, uint length)
{ {
uint name_length= 0; // name length in symbols
const char *end= name+length; const char *end= name+length;
if (!length || length > NAME_LEN) if (!length || length > NAME_LEN)
return 1; return 1;
@ -2394,14 +2399,16 @@ bool check_table_name(const char *name, uint length)
if (len) if (len)
{ {
name += len; name += len;
name_length++;
continue; continue;
} }
} }
#endif #endif
name++; name++;
name_length++;
} }
#if defined(USE_MB) && defined(USE_MB_IDENT) #if defined(USE_MB) && defined(USE_MB_IDENT)
return last_char_is_space; return (last_char_is_space || name_length > NAME_CHAR_LEN) ;
#else #else
return 0; return 0;
#endif #endif
@ -2410,7 +2417,7 @@ bool check_table_name(const char *name, uint length)
bool check_column_name(const char *name) 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; bool last_char_is_space= TRUE;
while (*name) while (*name)
@ -2424,6 +2431,7 @@ bool check_column_name(const char *name)
if (len) if (len)
{ {
name += len; name += len;
name_length++;
continue; continue;
} }
} }
@ -2433,9 +2441,10 @@ bool check_column_name(const char *name)
if (*name == NAMES_SEP_CHAR) if (*name == NAMES_SEP_CHAR)
return 1; return 1;
name++; name++;
name_length++;
} }
/* Error if empty or too long column name */ /* 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;
} }

View file

@ -5912,8 +5912,8 @@ ha_innobase::get_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list)
FOREIGN_KEY_INFO f_key_info; FOREIGN_KEY_INFO f_key_info;
LEX_STRING *name= 0; LEX_STRING *name= 0;
uint ulen; uint ulen;
char uname[NAME_LEN*3+1]; /* Unencoded name */ char uname[NAME_LEN+1]; /* Unencoded name */
char db_name[NAME_LEN*3+1]; char db_name[NAME_LEN+1];
const char *tmp_buff; const char *tmp_buff;
tmp_buff= foreign->id; tmp_buff= foreign->id;

View file

@ -7811,16 +7811,16 @@ static void test_explain_bug()
"", "", "", 19, 0); "", "", "", 19, 0);
verify_prepare_field(result, 2, "table", "", MYSQL_TYPE_VAR_STRING, 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, verify_prepare_field(result, 3, "type", "", MYSQL_TYPE_VAR_STRING,
"", "", "", 10, 0); "", "", "", 10, 0);
verify_prepare_field(result, 4, "possible_keys", "", MYSQL_TYPE_VAR_STRING, 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, verify_prepare_field(result, 5, "key", "", MYSQL_TYPE_VAR_STRING,
"", "", "", NAME_LEN, 0); "", "", "", NAME_CHAR_LEN, 0);
if (mysql_get_server_version(mysql) <= 50000) if (mysql_get_server_version(mysql) <= 50000)
{ {
@ -7830,11 +7830,11 @@ static void test_explain_bug()
else else
{ {
verify_prepare_field(result, 6, "key_len", "", MYSQL_TYPE_VAR_STRING, "", 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, 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, verify_prepare_field(result, 8, "rows", "", MYSQL_TYPE_LONGLONG,
"", "", "", 10, 0); "", "", "", 10, 0);