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:
commit
023ae2a040
@ -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)
|
||||
{
|
||||
char table_buff[NAME_LEN*+3];
|
||||
char table_buff[NAME_LEN*2+3];
|
||||
DYNAMIC_STRING lock_tables_query;
|
||||
MEM_ROOT root;
|
||||
char **dump_tables, **pos, **end;
|
||||
|
@ -20,9 +20,13 @@
|
||||
#ifndef _mysql_com_h
|
||||
#define _mysql_com_h
|
||||
|
||||
#define NAME_LEN 64 /* Field/table name length */
|
||||
#define HOSTNAME_LENGTH 60
|
||||
#define USERNAME_LENGTH 16
|
||||
#define SYSTEM_CHARSET_MBMAXLEN 3
|
||||
#define NAME_CHAR_LEN 64 /* Field/table name length */
|
||||
#define USERNAME_CHAR_LENGTH 16
|
||||
#define NAME_LEN (NAME_CHAR_LEN*SYSTEM_CHARSET_MBMAXLEN)
|
||||
#define USERNAME_LENGTH (USERNAME_CHAR_LENGTH*SYSTEM_CHARSET_MBMAXLEN)
|
||||
|
||||
#define SERVER_VERSION_LENGTH 60
|
||||
#define SQLSTATE_LENGTH 5
|
||||
|
||||
|
@ -1,6 +1,9 @@
|
||||
SHOW STATUS LIKE 'Compression';
|
||||
Variable_name Value
|
||||
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;
|
||||
CREATE TABLE t1 (
|
||||
Period smallint(4) unsigned zerofill DEFAULT '0000' NOT NULL,
|
||||
|
@ -828,7 +828,7 @@ ERROR 42000: Incorrect database name 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
DROP DATABASE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
|
||||
ERROR 42000: Incorrect database name 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
|
||||
RENAME DATABASE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa TO a;
|
||||
ERROR 42000: Unknown database 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
|
||||
ERROR 42000: Unknown database 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
|
||||
RENAME DATABASE mysqltest TO aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
|
||||
ERROR 42000: Incorrect database name 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
|
||||
create database mysqltest;
|
||||
@ -839,4 +839,103 @@ USE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
ERROR 42000: Incorrect database name 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
|
||||
SHOW CREATE DATABASE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
|
||||
ERROR 42000: Incorrect database name 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
|
||||
set names utf8;
|
||||
create database имя_базы_в_кодировке_утф8_длиной_больше_чем_45;
|
||||
use имя_базы_в_кодировке_утф8_длиной_больше_чем_45;
|
||||
select database();
|
||||
database()
|
||||
имя_базы_в_кодировке_утф8_длиной_больше_чем_45
|
||||
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
|
||||
|
@ -28,3 +28,16 @@ ERROR 42000: Display width out of range for column 'a' (max = 255)
|
||||
set sql_mode='traditional';
|
||||
create table t1 (a varchar(66000));
|
||||
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;
|
||||
|
@ -1060,3 +1060,12 @@ DROP USER bug23556@localhost;
|
||||
GRANT PROCESS ON * TO user@localhost;
|
||||
ERROR 3D000: No database selected
|
||||
End of 5.0 tests
|
||||
set names utf8;
|
||||
grant select on test.* to юзер_юзер@localhost;
|
||||
user()
|
||||
юзер_юзер@localhost
|
||||
revoke all on test.* from юзер_юзер@localhost;
|
||||
drop user юзер_юзер@localhost;
|
||||
grant select on test.* to очень_длинный_юзер@localhost;
|
||||
ERROR HY000: String 'очень_длинный_юзер' is too long for user name (should be no longer than 16)
|
||||
set names default;
|
||||
|
@ -167,7 +167,7 @@ ERROR 2005 (HY000) at line 1: Unknown MySQL server host 'invalid_hostname' (errn
|
||||
The commands reported in the bug report
|
||||
ERROR 2005 (HY000) at line 1: Unknown MySQL server host 'cyril has found a bug :)XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' (errno)
|
||||
Too long dbname
|
||||
ERROR 1049 (42000) at line 1: Unknown database 'test_really_long_dbnamexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
|
||||
ERROR 1102 (42000) at line 1: Incorrect database name 'test_really_long_dbnamexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
|
||||
Too long hostname
|
||||
ERROR 2005 (HY000) at line 1: Unknown MySQL server host 'cyrils_superlonghostnameXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' (errno)
|
||||
1
|
||||
|
3
mysql-test/r/ndb_partition_error2.result
Normal file
3
mysql-test/r/ndb_partition_error2.result
Normal 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
|
@ -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;
|
||||
ERROR 23000: Column 'val' in order clause is ambiguous
|
||||
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);
|
||||
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);
|
||||
|
@ -1219,4 +1219,23 @@ SELECT t2.id FROM t2 WHERE t2.id IN (SELECT id FROM t1 WHERE status = 'Verified'
|
||||
id
|
||||
22589
|
||||
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
|
||||
|
@ -19,7 +19,16 @@ revoke alter on mysqltest_1.* from mysqltest_1@localhost;
|
||||
alter table t1 drop partition p3;
|
||||
ERROR 42000: ALTER command denied to user 'mysqltest_1'@'localhost' for table 't1'
|
||||
revoke select,alter,drop on mysqltest_1.* from mysqltest_1@localhost;
|
||||
drop user mysqltest_1@localhost;
|
||||
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;
|
||||
End of 5.1 tests
|
||||
|
@ -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 */;
|
||||
count(*)
|
||||
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_____________________;
|
||||
SET @@global.max_allowed_packet=4096;
|
||||
SET @@global.net_buffer_length=4096;
|
||||
|
@ -5398,7 +5398,7 @@ drop database if exists това_е_дълго_име_за_база_данни_
|
||||
create database това_е_дълго_име_за_база_данни_нали|
|
||||
INSERT INTO mysql.proc VALUES ('това_е_дълго_име_за_база_данни_нали','това_е_процедура_с_доста_дълго_име_нали_и_още_по_дълго','PROCEDURE','това_е_процедура_с_доста_дълго_име_нали_и_още_по_дълго','SQL','CONTAINS_SQL','NO','DEFINER','','','bad_body','root@localhost',now(), now(),'','')|
|
||||
call това_е_дълго_име_за_база_данни_нали.това_е_процедура_с_доста_дълго_име_нали_и_още_по_дълго()|
|
||||
ERROR HY000: Failed to load routine това_е_дълго_име_за_база_данни_нали.. The table mysql.proc is missing, corrupt, or contains bad data (internal code -6)
|
||||
ERROR HY000: Failed to load routine това_е_дълго_име_за_база_данни_нали.това_е_процедура_с_доста_дълго_име_нали_и_още_по_дълго. The table mysql.proc is missing, corrupt, or contains bad data (internal code -6)
|
||||
drop database това_е_дълго_име_за_база_данни_нали|
|
||||
CREATE TABLE t3 (
|
||||
Member_ID varchar(15) NOT NULL,
|
||||
|
@ -66,3 +66,22 @@ ss
|
||||
ue
|
||||
ue
|
||||
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;
|
||||
|
@ -10,6 +10,7 @@ connect (comp_con,localhost,root,,,,,COMPRESS);
|
||||
|
||||
# Check compression turned on
|
||||
SHOW STATUS LIKE 'Compression';
|
||||
select * from information_schema.session_status where variable_name= 'COMPRESSION';
|
||||
|
||||
# Source select test case
|
||||
-- source include/common-tests.inc
|
||||
|
@ -736,4 +736,94 @@ USE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
--error 1102
|
||||
SHOW CREATE DATABASE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;
|
||||
|
||||
#
|
||||
# Bug#21432 Database/Table name limited to 64 bytes, not chars, problems with multi-byte
|
||||
#
|
||||
set names utf8;
|
||||
|
||||
create database имя_базы_в_кодировке_утф8_длиной_больше_чем_45;
|
||||
use имя_базы_в_кодировке_утф8_длиной_больше_чем_45;
|
||||
select database();
|
||||
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
|
||||
|
@ -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_stm_innodb : Bug#26783
|
||||
ndb_partition_error2 : HF is not sure if the test can work as internded on all the platforms
|
||||
|
@ -40,5 +40,17 @@ create table t1 (a int(256));
|
||||
set sql_mode='traditional';
|
||||
--error 1074
|
||||
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
|
||||
|
@ -986,3 +986,15 @@ disconnect con1;
|
||||
connection default;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
#
|
||||
# Bug#21432: Database/Table name limited to 64 bytes, not chars, problems with multi-byte
|
||||
#
|
||||
set names utf8;
|
||||
grant select on test.* to юзер_юзер@localhost;
|
||||
--exec $MYSQL --default-character-set=utf8 --user=юзер_юзер -e "select user()"
|
||||
revoke all on test.* from юзер_юзер@localhost;
|
||||
drop user юзер_юзер@localhost;
|
||||
--error 1573
|
||||
grant select on test.* to очень_длинный_юзер@localhost;
|
||||
set names default;
|
||||
|
1
mysql-test/t/ndb_partition_error2-master.opt
Normal file
1
mysql-test/t/ndb_partition_error2-master.opt
Normal file
@ -0,0 +1 @@
|
||||
--ndbcluster
|
14
mysql-test/t/ndb_partition_error2.test
Normal file
14
mysql-test/t/ndb_partition_error2.test
Normal 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;
|
||||
|
@ -617,7 +617,6 @@ UPDATE bug25126 SET MissingCol = val ORDER BY MissingCol;
|
||||
UPDATE bug25126 SET MissingCol = MissingCol ORDER BY MissingCol;
|
||||
DROP TABLE bug25126;
|
||||
|
||||
|
||||
#
|
||||
# Bug #25427: crash when order by expression contains a name
|
||||
# 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;
|
||||
|
||||
#
|
||||
# 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);
|
||||
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);
|
||||
|
@ -1463,4 +1463,33 @@ SELECT t2.id FROM t2 WHERE t2.id IN (SELECT id FROM t1 WHERE status = 'Verified'
|
||||
|
||||
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
|
||||
|
@ -52,8 +52,30 @@ disconnect conn3;
|
||||
connection default;
|
||||
|
||||
revoke select,alter,drop on mysqltest_1.* from mysqltest_1@localhost;
|
||||
drop user mysqltest_1@localhost;
|
||||
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;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
@ -29,6 +29,8 @@ connection slave;
|
||||
sync_with_master;
|
||||
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;
|
||||
eval drop database $db;
|
||||
save_master_pos;
|
||||
|
@ -39,3 +39,20 @@ SELECT c FROM t1 ORDER BY concat(c);
|
||||
DROP TABLE t1;
|
||||
|
||||
# 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;
|
||||
|
@ -694,7 +694,7 @@ send_show_create_event(THD *thd, Event_timed *et, Protocol *protocol)
|
||||
if (et->get_create_event(thd, &show_str))
|
||||
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,
|
||||
&sql_mode))
|
||||
|
@ -8900,11 +8900,6 @@ bool create_field::init(THD *thd, char *fld_name, enum_field_types fld_type,
|
||||
break;
|
||||
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);
|
||||
|
||||
List_iterator<String> it(*fld_interval_list);
|
||||
|
@ -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()
|
||||
{
|
||||
use_decimal_comparison= ((row->element_index(0)->result_type() ==
|
||||
|
@ -563,6 +563,7 @@ public:
|
||||
negated= !negated;
|
||||
return this;
|
||||
}
|
||||
bool eq(const Item *item, bool binary_cmp) const;
|
||||
bool subst_argument_checker(byte **arg) { return TRUE; }
|
||||
};
|
||||
|
||||
|
@ -426,8 +426,8 @@ public:
|
||||
bool fix_fields(THD *thd, Item **ref);
|
||||
void fix_length_and_dec()
|
||||
{
|
||||
max_length= ((USERNAME_LENGTH + HOSTNAME_LENGTH + 1) *
|
||||
system_charset_info->mbmaxlen);
|
||||
max_length= (USERNAME_LENGTH +
|
||||
(HOSTNAME_LENGTH + 1) * SYSTEM_CHARSET_MBMAXLEN);
|
||||
}
|
||||
const char *func_name() const { return "user"; }
|
||||
const char *fully_qualified_func_name() const { return "user()"; }
|
||||
|
@ -366,7 +366,7 @@ MY_LOCALE *my_locale_by_number(uint number);
|
||||
Maximum length of time zone name that we support
|
||||
(Time zone name is char(64) in db). mysqlbinlog needs it.
|
||||
*/
|
||||
#define MAX_TIME_ZONE_NAME_LENGTH 72
|
||||
#define MAX_TIME_ZONE_NAME_LENGTH (NAME_LEN + 1)
|
||||
|
||||
/* The rest of the file is included in the server only */
|
||||
#ifndef MYSQL_CLIENT
|
||||
@ -599,7 +599,7 @@ class THD;
|
||||
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_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 is_proc, bool no_errors);
|
||||
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_definer(THD *thd, LEX_STRING *user_name, LEX_STRING *host_name);
|
||||
LEX_USER *get_current_user(THD *thd, LEX_USER *user);
|
||||
bool check_string_length(LEX_STRING *str,
|
||||
const char *err_msg, uint max_length);
|
||||
bool check_string_byte_length(LEX_STRING *str, const char *err_msg,
|
||||
uint max_byte_length);
|
||||
bool check_string_char_length(LEX_STRING *str, const char *err_msg,
|
||||
uint max_char_length, CHARSET_INFO *cs,
|
||||
bool no_error);
|
||||
|
||||
enum enum_mysql_completiontype {
|
||||
ROLLBACK_RELEASE=-2, ROLLBACK=1, ROLLBACK_AND_CHAIN=7,
|
||||
@ -1165,7 +1168,7 @@ void mysql_ha_mark_tables_for_reopen(THD *thd, TABLE *table);
|
||||
/* sql_base.cc */
|
||||
#define TMP_TABLE_KEY_EXTRA 8
|
||||
void set_item_name(Item *item,char *pos,uint length);
|
||||
bool add_field_to_list(THD *thd, char *field_name, enum enum_field_types type,
|
||||
bool add_field_to_list(THD *thd, LEX_STRING *field_name, enum enum_field_types type,
|
||||
char *length, char *decimal,
|
||||
uint type_modifier,
|
||||
Item *default_value, Item *on_update_value,
|
||||
|
@ -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)
|
||||
{
|
||||
var->type= SHOW_CHAR;
|
||||
var->type= SHOW_MY_BOOL;
|
||||
pthread_mutex_lock(&LOCK_active_mi);
|
||||
var->value= const_cast<char*>((active_mi && active_mi->slave_running &&
|
||||
active_mi->rli.slave_running) ? "ON" : "OFF");
|
||||
var->value= buff;
|
||||
*((my_bool *)buff)= (my_bool) (active_mi && active_mi->slave_running &&
|
||||
active_mi->rli.slave_running);
|
||||
pthread_mutex_unlock(&LOCK_active_mi);
|
||||
return 0;
|
||||
}
|
||||
|
@ -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);
|
||||
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))
|
||||
{
|
||||
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)))
|
||||
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))
|
||||
{
|
||||
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++;
|
||||
if (part_elem->engine_type == NULL)
|
||||
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 (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_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)
|
||||
buf_ptr= (char*)"NULL";
|
||||
bzero(&table_list, sizeof(table_list));
|
||||
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
|
||||
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);
|
||||
{
|
||||
my_bitmap_map *old_map= dbug_tmp_use_all_columns(table, table->read_set);
|
||||
if (part_expr->null_value)
|
||||
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
|
||||
|
3586
sql/share/errmsg.txt
3586
sql/share/errmsg.txt
File diff suppressed because it is too large
Load Diff
22
sql/sp.cc
22
sql/sp.cc
@ -682,15 +682,15 @@ struct st_used_field
|
||||
|
||||
static struct st_used_field init_fields[]=
|
||||
{
|
||||
{ "Db", NAME_LEN, MYSQL_TYPE_STRING, 0},
|
||||
{ "Name", NAME_LEN, MYSQL_TYPE_STRING, 0},
|
||||
{ "Type", 9, MYSQL_TYPE_STRING, 0},
|
||||
{ "Definer", 77, MYSQL_TYPE_STRING, 0},
|
||||
{ "Modified", 0, MYSQL_TYPE_TIMESTAMP, 0},
|
||||
{ "Created", 0, MYSQL_TYPE_TIMESTAMP, 0},
|
||||
{ "Security_type", 1, MYSQL_TYPE_STRING, 0},
|
||||
{ "Comment", NAME_LEN, MYSQL_TYPE_STRING, 0},
|
||||
{ 0, 0, MYSQL_TYPE_STRING, 0}
|
||||
{ "Db", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0},
|
||||
{ "Name", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0},
|
||||
{ "Type", 9, MYSQL_TYPE_STRING, 0},
|
||||
{ "Definer", 77, MYSQL_TYPE_STRING, 0},
|
||||
{ "Modified", 0, MYSQL_TYPE_TIMESTAMP, 0},
|
||||
{ "Created", 0, MYSQL_TYPE_TIMESTAMP, 0},
|
||||
{ "Security_type", 1, MYSQL_TYPE_STRING, 0},
|
||||
{ "Comment", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0},
|
||||
{ 0, 0, MYSQL_TYPE_STRING, 0}
|
||||
};
|
||||
|
||||
|
||||
@ -1598,10 +1598,8 @@ sp_cache_routines_and_add_tables_aux(THD *thd, LEX *lex,
|
||||
rest of the server checks agains NAME_LEN bytes and not chars.
|
||||
Hence, the overrun happens only if the name is in length > 32 and
|
||||
uses multibyte (cyrillic, greek, etc.)
|
||||
|
||||
!! Change 3 with SYSTEM_CHARSET_MBMAXLEN when it's defined.
|
||||
*/
|
||||
char n[NAME_LEN*3*2+2];
|
||||
char n[NAME_LEN*2+2];
|
||||
|
||||
/* m_qname.str is not always \0 terminated */
|
||||
memcpy(n, name.m_qname.str, name.m_qname.length);
|
||||
|
@ -408,9 +408,22 @@ sp_name::init_qname(THD *thd)
|
||||
*/
|
||||
|
||||
bool
|
||||
check_routine_name(LEX_STRING ident)
|
||||
check_routine_name(LEX_STRING *ident)
|
||||
{
|
||||
return (!ident.str || !ident.str[0] || ident.str[ident.length-1] == ' ');
|
||||
if (!ident || !ident->str || !ident->str[0] ||
|
||||
ident->str[ident->length-1] == ' ')
|
||||
{
|
||||
my_error(ER_SP_WRONG_NAME, MYF(0), ident->str);
|
||||
return TRUE;
|
||||
}
|
||||
if (check_string_char_length(ident, "", NAME_CHAR_LEN,
|
||||
system_charset_info, 1))
|
||||
{
|
||||
my_error(ER_TOO_LONG_IDENT, MYF(0), ident->str);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
@ -2120,7 +2133,7 @@ sp_head::show_create_procedure(THD *thd)
|
||||
|
||||
sys_var_thd_sql_mode::symbolic_mode_representation(thd, m_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));
|
||||
// 1024 is for not to confuse old clients
|
||||
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,
|
||||
&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));
|
||||
Item_empty_string *definition=
|
||||
new Item_empty_string("Create Function", max(buffer.length(),1024));
|
||||
|
@ -97,7 +97,7 @@ public:
|
||||
|
||||
|
||||
bool
|
||||
check_routine_name(LEX_STRING name);
|
||||
check_routine_name(LEX_STRING *ident);
|
||||
|
||||
class sp_head :private Query_arena
|
||||
{
|
||||
|
@ -5852,7 +5852,7 @@ bool setup_tables_and_check_access(THD *thd,
|
||||
{
|
||||
if (leaves_tmp->belong_to_view &&
|
||||
check_single_table_access(thd, first_table ? want_access_first :
|
||||
want_access, leaves_tmp))
|
||||
want_access, leaves_tmp, FALSE))
|
||||
{
|
||||
tables->hide_view_error(thd);
|
||||
return TRUE;
|
||||
|
@ -898,7 +898,7 @@ int THD::send_explain_fields(select_result *result)
|
||||
CHARSET_INFO *cs= system_charset_info;
|
||||
field_list.push_back(new Item_return_int("id",3, MYSQL_TYPE_LONGLONG));
|
||||
field_list.push_back(new Item_empty_string("select_type", 19, cs));
|
||||
field_list.push_back(item= new Item_empty_string("table", NAME_LEN, cs));
|
||||
field_list.push_back(item= new Item_empty_string("table", NAME_CHAR_LEN, cs));
|
||||
item->maybe_null= 1;
|
||||
if (lex->describe & DESCRIBE_PARTITIONS)
|
||||
{
|
||||
@ -911,15 +911,16 @@ int THD::send_explain_fields(select_result *result)
|
||||
field_list.push_back(item= new Item_empty_string("type", 10, cs));
|
||||
item->maybe_null= 1;
|
||||
field_list.push_back(item=new Item_empty_string("possible_keys",
|
||||
NAME_LEN*MAX_KEY, cs));
|
||||
NAME_CHAR_LEN*MAX_KEY, cs));
|
||||
item->maybe_null=1;
|
||||
field_list.push_back(item=new Item_empty_string("key", NAME_LEN, cs));
|
||||
field_list.push_back(item=new Item_empty_string("key", NAME_CHAR_LEN, cs));
|
||||
item->maybe_null=1;
|
||||
field_list.push_back(item=new Item_empty_string("key_len",
|
||||
NAME_LEN*MAX_KEY));
|
||||
NAME_CHAR_LEN*MAX_KEY));
|
||||
item->maybe_null=1;
|
||||
field_list.push_back(item=new Item_empty_string("ref",
|
||||
NAME_LEN*MAX_REF_PARTS, cs));
|
||||
NAME_CHAR_LEN*MAX_REF_PARTS,
|
||||
cs));
|
||||
item->maybe_null=1;
|
||||
field_list.push_back(item= new Item_return_int("rows", 10,
|
||||
MYSQL_TYPE_LONGLONG));
|
||||
|
102
sql/sql_parse.cc
102
sql/sql_parse.cc
@ -3975,11 +3975,6 @@ create_sp_error:
|
||||
}
|
||||
case SQLCOM_SHOW_CREATE_PROC:
|
||||
{
|
||||
if (lex->spname->m_name.length > NAME_LEN)
|
||||
{
|
||||
my_error(ER_TOO_LONG_IDENT, MYF(0), lex->spname->m_name.str);
|
||||
goto error;
|
||||
}
|
||||
if (sp_show_create_procedure(thd, lex->spname) != SP_OK)
|
||||
{ /* We don't distinguish between errors for now */
|
||||
my_error(ER_SP_DOES_NOT_EXIST, MYF(0),
|
||||
@ -3990,11 +3985,6 @@ create_sp_error:
|
||||
}
|
||||
case SQLCOM_SHOW_CREATE_FUNC:
|
||||
{
|
||||
if (lex->spname->m_name.length > NAME_LEN)
|
||||
{
|
||||
my_error(ER_TOO_LONG_IDENT, MYF(0), lex->spname->m_name.str);
|
||||
goto error;
|
||||
}
|
||||
if (sp_show_create_function(thd, lex->spname) != SP_OK)
|
||||
{ /* We don't distinguish between errors for now */
|
||||
my_error(ER_SP_DOES_NOT_EXIST, MYF(0),
|
||||
@ -4023,11 +4013,6 @@ create_sp_error:
|
||||
{
|
||||
sp_head *sp;
|
||||
|
||||
if (lex->spname->m_name.length > NAME_LEN)
|
||||
{
|
||||
my_error(ER_TOO_LONG_IDENT, MYF(0), lex->spname->m_name.str);
|
||||
goto error;
|
||||
}
|
||||
if (lex->sql_command == SQLCOM_SHOW_PROC_CODE)
|
||||
sp= sp_find_routine(thd, TYPE_ENUM_PROCEDURE, lex->spname,
|
||||
&thd->sp_proc_cache, FALSE);
|
||||
@ -4452,6 +4437,8 @@ static bool execute_sqlcom_select(THD *thd, TABLE_LIST *all_tables)
|
||||
thd Thread handler
|
||||
privilege requested privilege
|
||||
all_tables global table list of query
|
||||
no_errors FALSE/TRUE - report/don't report error to
|
||||
the client (using my_error() call).
|
||||
|
||||
RETURN
|
||||
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,
|
||||
TABLE_LIST *all_tables)
|
||||
TABLE_LIST *all_tables, bool no_errors)
|
||||
{
|
||||
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;
|
||||
|
||||
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)))
|
||||
goto deny;
|
||||
|
||||
/* 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;
|
||||
|
||||
thd->security_ctx= backup_ctx;
|
||||
@ -4508,7 +4495,7 @@ deny:
|
||||
|
||||
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;
|
||||
|
||||
/* 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 (check_single_table_access (thd, privilege, subselects_tables))
|
||||
if (check_single_table_access (thd, privilege, subselects_tables, FALSE))
|
||||
return 1;
|
||||
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
|
||||
******************************************************************************/
|
||||
|
||||
bool add_field_to_list(THD *thd, char *field_name, enum_field_types type,
|
||||
bool add_field_to_list(THD *thd, LEX_STRING *field_name, enum_field_types type,
|
||||
char *length, char *decimals,
|
||||
uint type_modifier,
|
||||
Item *default_value, Item *on_update_value,
|
||||
@ -5324,14 +5311,15 @@ bool add_field_to_list(THD *thd, char *field_name, enum_field_types type,
|
||||
LEX *lex= thd->lex;
|
||||
DBUG_ENTER("add_field_to_list");
|
||||
|
||||
if (strlen(field_name) > NAME_LEN)
|
||||
if (check_string_char_length(field_name, "", NAME_CHAR_LEN,
|
||||
system_charset_info, 1))
|
||||
{
|
||||
my_error(ER_TOO_LONG_IDENT, MYF(0), field_name); /* purecov: inspected */
|
||||
my_error(ER_TOO_LONG_IDENT, MYF(0), field_name->str); /* purecov: inspected */
|
||||
DBUG_RETURN(1); /* purecov: inspected */
|
||||
}
|
||||
if (type_modifier & PRI_KEY_FLAG)
|
||||
{
|
||||
lex->col_list.push_back(new key_part_spec(field_name,0));
|
||||
lex->col_list.push_back(new key_part_spec(field_name->str, 0));
|
||||
lex->key_list.push_back(new Key(Key::PRIMARY, NullS,
|
||||
&default_key_create_info,
|
||||
0, lex->col_list));
|
||||
@ -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))
|
||||
{
|
||||
lex->col_list.push_back(new key_part_spec(field_name,0));
|
||||
lex->col_list.push_back(new key_part_spec(field_name->str, 0));
|
||||
lex->key_list.push_back(new Key(Key::UNIQUE, NullS,
|
||||
&default_key_create_info, 0,
|
||||
lex->col_list));
|
||||
@ -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 &&
|
||||
type == MYSQL_TYPE_TIMESTAMP))
|
||||
{
|
||||
my_error(ER_INVALID_DEFAULT, MYF(0), field_name);
|
||||
my_error(ER_INVALID_DEFAULT, MYF(0), field_name->str);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
else if (default_value->type() == Item::NULL_ITEM)
|
||||
@ -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)) ==
|
||||
NOT_NULL_FLAG)
|
||||
{
|
||||
my_error(ER_INVALID_DEFAULT, MYF(0), field_name);
|
||||
my_error(ER_INVALID_DEFAULT, MYF(0), field_name->str);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
}
|
||||
else if (type_modifier & AUTO_INCREMENT_FLAG)
|
||||
{
|
||||
my_error(ER_INVALID_DEFAULT, MYF(0), field_name);
|
||||
my_error(ER_INVALID_DEFAULT, MYF(0), field_name->str);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
}
|
||||
|
||||
if (on_update_value && type != MYSQL_TYPE_TIMESTAMP)
|
||||
{
|
||||
my_error(ER_INVALID_ON_UPDATE, MYF(0), field_name);
|
||||
my_error(ER_INVALID_ON_UPDATE, MYF(0), field_name->str);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
|
||||
@ -5397,7 +5385,7 @@ bool add_field_to_list(THD *thd, char *field_name, enum_field_types type,
|
||||
}
|
||||
|
||||
if (!(new_field= new create_field()) ||
|
||||
new_field->init(thd, field_name, type, length, decimals, type_modifier,
|
||||
new_field->init(thd, field_name->str, type, length, decimals, type_modifier,
|
||||
default_value, on_update_value, comment, change,
|
||||
interval_list, cs, uint_geom_type))
|
||||
DBUG_RETURN(1);
|
||||
@ -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
|
||||
check_string_length()
|
||||
str string to be checked
|
||||
err_msg error message to be displayed if the string is too long
|
||||
max_length max length
|
||||
check_string_byte_length()
|
||||
str string to be checked
|
||||
err_msg error message to be displayed if the string is too long
|
||||
max_byte_length max length in bytes
|
||||
|
||||
RETURN
|
||||
FALSE the passed string is not longer than max_length
|
||||
TRUE the passed string is longer than max_length
|
||||
|
||||
NOTE
|
||||
The function is not used in existing code but can be useful later?
|
||||
*/
|
||||
|
||||
bool check_string_length(LEX_STRING *str, const char *err_msg,
|
||||
uint max_length)
|
||||
bool check_string_byte_length(LEX_STRING *str, const char *err_msg,
|
||||
uint max_byte_length)
|
||||
{
|
||||
if (str->length <= max_length)
|
||||
if (str->length <= max_byte_length)
|
||||
return FALSE;
|
||||
|
||||
my_error(ER_WRONG_STRING_LENGTH, MYF(0), str->str, err_msg, max_length);
|
||||
my_error(ER_WRONG_STRING_LENGTH, MYF(0), str->str, err_msg, max_byte_length);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Check that char length of a string does not exceed some limit.
|
||||
|
||||
SYNOPSIS
|
||||
check_string_char_length()
|
||||
str string to be checked
|
||||
err_msg error message to be displayed if the string is too long
|
||||
max_char_length max length in symbols
|
||||
cs string charset
|
||||
|
||||
RETURN
|
||||
FALSE the passed string is not longer than max_char_length
|
||||
TRUE the passed string is longer than max_char_length
|
||||
*/
|
||||
|
||||
|
||||
bool check_string_char_length(LEX_STRING *str, const char *err_msg,
|
||||
uint max_char_length, CHARSET_INFO *cs,
|
||||
bool no_error)
|
||||
{
|
||||
int well_formed_error;
|
||||
uint res= cs->cset->well_formed_len(cs, str->str, str->str + str->length,
|
||||
max_char_length, &well_formed_error);
|
||||
|
||||
if (!well_formed_error && str->length == res)
|
||||
return FALSE;
|
||||
|
||||
if (!no_error)
|
||||
my_error(ER_WRONG_STRING_LENGTH, MYF(0), str->str, err_msg, max_char_length);
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -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);
|
||||
if (p_elem->part_min_rows)
|
||||
err+= add_keyword_int(fptr,"MIN_ROWS",(longlong)p_elem->part_min_rows);
|
||||
if (p_elem->data_file_name)
|
||||
err+= add_keyword_string(fptr, "DATA DIRECTORY", TRUE,
|
||||
p_elem->data_file_name);
|
||||
if (p_elem->index_file_name)
|
||||
err+= add_keyword_string(fptr, "INDEX DIRECTORY", TRUE,
|
||||
p_elem->index_file_name);
|
||||
if (!(current_thd->variables.sql_mode & MODE_NO_DIR_IN_CREATE))
|
||||
{
|
||||
if (p_elem->data_file_name)
|
||||
err+= add_keyword_string(fptr, "DATA DIRECTORY", TRUE,
|
||||
p_elem->data_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)
|
||||
err+= add_keyword_string(fptr, "COMMENT", TRUE, p_elem->part_comment);
|
||||
return err + add_engine(fptr,p_elem->engine_type);
|
||||
|
@ -162,7 +162,8 @@ static st_plugin_dl *plugin_dl_add(const LEX_STRING *dl, int report)
|
||||
plugin directory are used (to make this even remotely secure).
|
||||
*/
|
||||
if (my_strchr(files_charset_info, dl->str, dl->str + dl->length, FN_LIBCHAR) ||
|
||||
dl->length > NAME_LEN ||
|
||||
check_string_char_length((LEX_STRING *) dl, "", NAME_CHAR_LEN,
|
||||
system_charset_info, 1) ||
|
||||
plugin_dir_len + dl->length + 1 >= FN_REFLEN)
|
||||
{
|
||||
if (report & REPORT_TO_USER)
|
||||
|
194
sql/sql_show.cc
194
sql/sql_show.cc
@ -362,7 +362,7 @@ bool mysqld_show_privileges(THD *thd)
|
||||
|
||||
field_list.push_back(new Item_empty_string("Privilege",10));
|
||||
field_list.push_back(new Item_empty_string("Context",15));
|
||||
field_list.push_back(new Item_empty_string("Comment",NAME_LEN));
|
||||
field_list.push_back(new Item_empty_string("Comment",NAME_CHAR_LEN));
|
||||
|
||||
if (protocol->send_fields(&field_list,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
@ -438,8 +438,8 @@ bool mysqld_show_column_types(THD *thd)
|
||||
field_list.push_back(new Item_empty_string("Zerofill",4));
|
||||
field_list.push_back(new Item_empty_string("Searchable",4));
|
||||
field_list.push_back(new Item_empty_string("Case_Sensitive",4));
|
||||
field_list.push_back(new Item_empty_string("Default",NAME_LEN));
|
||||
field_list.push_back(new Item_empty_string("Comment",NAME_LEN));
|
||||
field_list.push_back(new Item_empty_string("Default",NAME_CHAR_LEN));
|
||||
field_list.push_back(new Item_empty_string("Comment",NAME_CHAR_LEN));
|
||||
|
||||
if (protocol->send_fields(&field_list,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
@ -521,7 +521,7 @@ find_files(THD *thd, List<char> *files, const char *db,
|
||||
|
||||
for (i=0 ; i < (uint) dirp->number_off_files ; i++)
|
||||
{
|
||||
char uname[NAME_LEN*3+1]; /* Unencoded name */
|
||||
char uname[NAME_LEN + 1]; /* Unencoded name */
|
||||
file=dirp->dir_entry+i;
|
||||
if (dir)
|
||||
{ /* Return databases */
|
||||
@ -651,13 +651,13 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list)
|
||||
List<Item> field_list;
|
||||
if (table_list->view)
|
||||
{
|
||||
field_list.push_back(new Item_empty_string("View",NAME_LEN));
|
||||
field_list.push_back(new Item_empty_string("View",NAME_CHAR_LEN));
|
||||
field_list.push_back(new Item_empty_string("Create View",
|
||||
max(buffer.length(),1024)));
|
||||
}
|
||||
else
|
||||
{
|
||||
field_list.push_back(new Item_empty_string("Table",NAME_LEN));
|
||||
field_list.push_back(new Item_empty_string("Table",NAME_CHAR_LEN));
|
||||
// 1024 is for not to confuse old clients
|
||||
field_list.push_back(new Item_empty_string("Create Table",
|
||||
max(buffer.length(),1024)));
|
||||
@ -731,7 +731,7 @@ bool mysqld_show_create_db(THD *thd, char *dbname,
|
||||
load_db_opt_by_name(thd, dbname, &create);
|
||||
}
|
||||
List<Item> field_list;
|
||||
field_list.push_back(new Item_empty_string("Database",NAME_LEN));
|
||||
field_list.push_back(new Item_empty_string("Database",NAME_CHAR_LEN));
|
||||
field_list.push_back(new Item_empty_string("Create Database",1024));
|
||||
|
||||
if (protocol->send_fields(&field_list,
|
||||
@ -1626,7 +1626,7 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose)
|
||||
field_list.push_back(new Item_int("Id", 0, MY_INT32_NUM_DECIMAL_DIGITS));
|
||||
field_list.push_back(new Item_empty_string("User",16));
|
||||
field_list.push_back(new Item_empty_string("Host",LIST_PROCESS_HOST_LEN));
|
||||
field_list.push_back(field=new Item_empty_string("db",NAME_LEN));
|
||||
field_list.push_back(field=new Item_empty_string("db",NAME_CHAR_LEN));
|
||||
field->maybe_null=1;
|
||||
field_list.push_back(new Item_empty_string("Command",16));
|
||||
field_list.push_back(new Item_return_int("Time",7, MYSQL_TYPE_LONG));
|
||||
@ -5345,7 +5345,7 @@ int fill_schema_session_variables(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||
ST_FIELD_INFO schema_fields_info[]=
|
||||
{
|
||||
{"CATALOG_NAME", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"SCHEMA_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Database"},
|
||||
{"SCHEMA_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Database"},
|
||||
{"DEFAULT_CHARACTER_SET_NAME", 64, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"DEFAULT_COLLATION_NAME", 64, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"SQL_PATH", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
@ -5356,10 +5356,10 @@ ST_FIELD_INFO schema_fields_info[]=
|
||||
ST_FIELD_INFO tables_fields_info[]=
|
||||
{
|
||||
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA",NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Name"},
|
||||
{"TABLE_TYPE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"ENGINE", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, "Engine"},
|
||||
{"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Name"},
|
||||
{"TABLE_TYPE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"ENGINE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, "Engine"},
|
||||
{"VERSION", MY_INT64_NUM_DECIMAL_DIGITS , MYSQL_TYPE_LONG, 0, 1, "Version"},
|
||||
{"ROW_FORMAT", 10, MYSQL_TYPE_STRING, 0, 1, "Row_format"},
|
||||
{"TABLE_ROWS", MY_INT64_NUM_DECIMAL_DIGITS , MYSQL_TYPE_LONG, 0, 1, "Rows"},
|
||||
@ -5388,13 +5388,13 @@ ST_FIELD_INFO tables_fields_info[]=
|
||||
ST_FIELD_INFO columns_fields_info[]=
|
||||
{
|
||||
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"COLUMN_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Field"},
|
||||
{"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"COLUMN_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Field"},
|
||||
{"ORDINAL_POSITION", MY_INT64_NUM_DECIMAL_DIGITS , MYSQL_TYPE_LONG, 0, 0, 0},
|
||||
{"COLUMN_DEFAULT", MAX_FIELD_VARCHARLENGTH, MYSQL_TYPE_STRING, 0, 1, "Default"},
|
||||
{"IS_NULLABLE", 3, MYSQL_TYPE_STRING, 0, 0, "Null"},
|
||||
{"DATA_TYPE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"DATA_TYPE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CHARACTER_MAXIMUM_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS , MYSQL_TYPE_LONG, 0, 1,
|
||||
0},
|
||||
{"CHARACTER_OCTET_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS , MYSQL_TYPE_LONG, 0, 1, 0},
|
||||
@ -5447,9 +5447,9 @@ ST_FIELD_INFO engines_fields_info[]=
|
||||
|
||||
ST_FIELD_INFO events_fields_info[]=
|
||||
{
|
||||
{"EVENT_CATALOG", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"EVENT_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Db"},
|
||||
{"EVENT_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Name"},
|
||||
{"EVENT_CATALOG", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"EVENT_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Db"},
|
||||
{"EVENT_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Name"},
|
||||
{"DEFINER", 77, MYSQL_TYPE_STRING, 0, 0, "Definer"},
|
||||
{"TIME_ZONE", 64, MYSQL_TYPE_STRING, 0, 0, "Time zone"},
|
||||
{"EVENT_BODY", 8, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
@ -5466,7 +5466,7 @@ ST_FIELD_INFO events_fields_info[]=
|
||||
{"CREATED", 0, MYSQL_TYPE_TIMESTAMP, 0, 0, 0},
|
||||
{"LAST_ALTERED", 0, MYSQL_TYPE_TIMESTAMP, 0, 0, 0},
|
||||
{"LAST_EXECUTED", 0, MYSQL_TYPE_TIMESTAMP, 0, 1, 0},
|
||||
{"EVENT_COMMENT", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"EVENT_COMMENT", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"ORIGINATOR", 10, MYSQL_TYPE_LONG, 0, 0, "Originator"},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
};
|
||||
@ -5483,25 +5483,25 @@ ST_FIELD_INFO coll_charset_app_fields_info[]=
|
||||
|
||||
ST_FIELD_INFO proc_fields_info[]=
|
||||
{
|
||||
{"SPECIFIC_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"SPECIFIC_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"ROUTINE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"ROUTINE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Db"},
|
||||
{"ROUTINE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Name"},
|
||||
{"ROUTINE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Db"},
|
||||
{"ROUTINE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Name"},
|
||||
{"ROUTINE_TYPE", 9, MYSQL_TYPE_STRING, 0, 0, "Type"},
|
||||
{"DTD_IDENTIFIER", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"DTD_IDENTIFIER", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"ROUTINE_BODY", 8, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"ROUTINE_DEFINITION", 65535, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"EXTERNAL_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"EXTERNAL_LANGUAGE", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"EXTERNAL_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"EXTERNAL_LANGUAGE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"PARAMETER_STYLE", 8, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"IS_DETERMINISTIC", 3, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"SQL_DATA_ACCESS", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"SQL_PATH", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"SQL_DATA_ACCESS", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"SQL_PATH", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"SECURITY_TYPE", 7, MYSQL_TYPE_STRING, 0, 0, "Security_type"},
|
||||
{"CREATED", 0, MYSQL_TYPE_TIMESTAMP, 0, 0, "Created"},
|
||||
{"LAST_ALTERED", 0, MYSQL_TYPE_TIMESTAMP, 0, 0, "Modified"},
|
||||
{"SQL_MODE", 65535, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"ROUTINE_COMMENT", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Comment"},
|
||||
{"ROUTINE_COMMENT", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Comment"},
|
||||
{"DEFINER", 77, MYSQL_TYPE_STRING, 0, 0, "Definer"},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
};
|
||||
@ -5510,13 +5510,13 @@ ST_FIELD_INFO proc_fields_info[]=
|
||||
ST_FIELD_INFO stat_fields_info[]=
|
||||
{
|
||||
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Table"},
|
||||
{"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Table"},
|
||||
{"NON_UNIQUE", 1, MYSQL_TYPE_LONG, 0, 0, "Non_unique"},
|
||||
{"INDEX_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"INDEX_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Key_name"},
|
||||
{"INDEX_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"INDEX_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Key_name"},
|
||||
{"SEQ_IN_INDEX", 2, MYSQL_TYPE_LONG, 0, 0, "Seq_in_index"},
|
||||
{"COLUMN_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Column_name"},
|
||||
{"COLUMN_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Column_name"},
|
||||
{"COLLATION", 1, MYSQL_TYPE_STRING, 0, 1, "Collation"},
|
||||
{"CARDINALITY", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONG, 0, 1, "Cardinality"},
|
||||
{"SUB_PART", 3, MYSQL_TYPE_LONG, 0, 1, "Sub_part"},
|
||||
@ -5531,8 +5531,8 @@ ST_FIELD_INFO stat_fields_info[]=
|
||||
ST_FIELD_INFO view_fields_info[]=
|
||||
{
|
||||
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"VIEW_DEFINITION", 65535, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CHECK_OPTION", 8, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"IS_UPDATABLE", 3, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
@ -5546,7 +5546,7 @@ ST_FIELD_INFO user_privileges_fields_info[]=
|
||||
{
|
||||
{"GRANTEE", 81, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"PRIVILEGE_TYPE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"PRIVILEGE_TYPE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"IS_GRANTABLE", 3, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
};
|
||||
@ -5556,8 +5556,8 @@ ST_FIELD_INFO schema_privileges_fields_info[]=
|
||||
{
|
||||
{"GRANTEE", 81, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"PRIVILEGE_TYPE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"PRIVILEGE_TYPE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"IS_GRANTABLE", 3, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
};
|
||||
@ -5567,9 +5567,9 @@ ST_FIELD_INFO table_privileges_fields_info[]=
|
||||
{
|
||||
{"GRANTEE", 81, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"PRIVILEGE_TYPE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"PRIVILEGE_TYPE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"IS_GRANTABLE", 3, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
};
|
||||
@ -5579,10 +5579,10 @@ ST_FIELD_INFO column_privileges_fields_info[]=
|
||||
{
|
||||
{"GRANTEE", 81, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"COLUMN_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"PRIVILEGE_TYPE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"COLUMN_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"PRIVILEGE_TYPE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"IS_GRANTABLE", 3, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
};
|
||||
@ -5591,11 +5591,11 @@ ST_FIELD_INFO column_privileges_fields_info[]=
|
||||
ST_FIELD_INFO table_constraints_fields_info[]=
|
||||
{
|
||||
{"CONSTRAINT_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"CONSTRAINT_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CONSTRAINT_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CONSTRAINT_TYPE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CONSTRAINT_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CONSTRAINT_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CONSTRAINT_TYPE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
};
|
||||
|
||||
@ -5603,17 +5603,17 @@ ST_FIELD_INFO table_constraints_fields_info[]=
|
||||
ST_FIELD_INFO key_column_usage_fields_info[]=
|
||||
{
|
||||
{"CONSTRAINT_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"CONSTRAINT_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CONSTRAINT_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CONSTRAINT_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CONSTRAINT_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"COLUMN_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"COLUMN_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"ORDINAL_POSITION", 10 ,MYSQL_TYPE_LONG, 0, 0, 0},
|
||||
{"POSITION_IN_UNIQUE_CONSTRAINT", 10 ,MYSQL_TYPE_LONG, 0, 1, 0},
|
||||
{"REFERENCED_TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"REFERENCED_TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"REFERENCED_COLUMN_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"REFERENCED_TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"REFERENCED_TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"REFERENCED_COLUMN_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
};
|
||||
|
||||
@ -5621,17 +5621,17 @@ ST_FIELD_INFO key_column_usage_fields_info[]=
|
||||
ST_FIELD_INFO table_names_fields_info[]=
|
||||
{
|
||||
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA",NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Tables_in_"},
|
||||
{"TABLE_TYPE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Table_type"},
|
||||
{"TABLE_SCHEMA",NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Tables_in_"},
|
||||
{"TABLE_TYPE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Table_type"},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
};
|
||||
|
||||
|
||||
ST_FIELD_INFO open_tables_fields_info[]=
|
||||
{
|
||||
{"Database", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Database"},
|
||||
{"Table",NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Table"},
|
||||
{"Database", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Database"},
|
||||
{"Table",NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Table"},
|
||||
{"In_use", 1, MYSQL_TYPE_LONG, 0, 0, "In_use"},
|
||||
{"Name_locked", 4, MYSQL_TYPE_LONG, 0, 0, "Name_locked"},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
@ -5641,19 +5641,19 @@ ST_FIELD_INFO open_tables_fields_info[]=
|
||||
ST_FIELD_INFO triggers_fields_info[]=
|
||||
{
|
||||
{"TRIGGER_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TRIGGER_SCHEMA",NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TRIGGER_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Trigger"},
|
||||
{"TRIGGER_SCHEMA",NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TRIGGER_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Trigger"},
|
||||
{"EVENT_MANIPULATION", 6, MYSQL_TYPE_STRING, 0, 0, "Event"},
|
||||
{"EVENT_OBJECT_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"EVENT_OBJECT_SCHEMA",NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"EVENT_OBJECT_TABLE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Table"},
|
||||
{"EVENT_OBJECT_SCHEMA",NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"EVENT_OBJECT_TABLE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Table"},
|
||||
{"ACTION_ORDER", 4, MYSQL_TYPE_LONG, 0, 0, 0},
|
||||
{"ACTION_CONDITION", 65535, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"ACTION_STATEMENT", 65535, MYSQL_TYPE_STRING, 0, 0, "Statement"},
|
||||
{"ACTION_ORIENTATION", 9, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"ACTION_TIMING", 6, MYSQL_TYPE_STRING, 0, 0, "Timing"},
|
||||
{"ACTION_REFERENCE_OLD_TABLE", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"ACTION_REFERENCE_NEW_TABLE", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"ACTION_REFERENCE_OLD_TABLE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"ACTION_REFERENCE_NEW_TABLE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"ACTION_REFERENCE_OLD_ROW", 3, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"ACTION_REFERENCE_NEW_ROW", 3, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CREATED", 0, MYSQL_TYPE_TIMESTAMP, 0, 1, "Created"},
|
||||
@ -5666,10 +5666,10 @@ ST_FIELD_INFO triggers_fields_info[]=
|
||||
ST_FIELD_INFO partitions_fields_info[]=
|
||||
{
|
||||
{"TABLE_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA",NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"PARTITION_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"SUBPARTITION_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA",NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"PARTITION_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"SUBPARTITION_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"PARTITION_ORDINAL_POSITION", 21 , MYSQL_TYPE_LONG, 0, 1, 0},
|
||||
{"SUBPARTITION_ORDINAL_POSITION", 21 , MYSQL_TYPE_LONG, 0, 1, 0},
|
||||
{"PARTITION_METHOD", 12, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
@ -5689,7 +5689,7 @@ ST_FIELD_INFO partitions_fields_info[]=
|
||||
{"CHECKSUM", 21 , MYSQL_TYPE_LONG, 0, 1, 0},
|
||||
{"PARTITION_COMMENT", 80, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"NODEGROUP", 12 , MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLESPACE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLESPACE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
};
|
||||
|
||||
@ -5723,7 +5723,7 @@ ST_FIELD_INFO processlist_fields_info[]=
|
||||
{"ID", 4, MYSQL_TYPE_LONG, 0, 0, "Id"},
|
||||
{"USER", 16, MYSQL_TYPE_STRING, 0, 0, "User"},
|
||||
{"HOST", LIST_PROCESS_HOST_LEN, MYSQL_TYPE_STRING, 0, 0, "Host"},
|
||||
{"DB", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, "Db"},
|
||||
{"DB", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, "Db"},
|
||||
{"COMMAND", 16, MYSQL_TYPE_STRING, 0, 0, "Command"},
|
||||
{"TIME", 7, MYSQL_TYPE_LONG, 0, 0, "Time"},
|
||||
{"STATE", 64, MYSQL_TYPE_STRING, 0, 1, "State"},
|
||||
@ -5734,14 +5734,14 @@ ST_FIELD_INFO processlist_fields_info[]=
|
||||
|
||||
ST_FIELD_INFO plugin_fields_info[]=
|
||||
{
|
||||
{"PLUGIN_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, "Name"},
|
||||
{"PLUGIN_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, "Name"},
|
||||
{"PLUGIN_VERSION", 20, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"PLUGIN_STATUS", 10, MYSQL_TYPE_STRING, 0, 0, "Status"},
|
||||
{"PLUGIN_TYPE", 80, MYSQL_TYPE_STRING, 0, 0, "Type"},
|
||||
{"PLUGIN_TYPE_VERSION", 20, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"PLUGIN_LIBRARY", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, "Library"},
|
||||
{"PLUGIN_LIBRARY", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, "Library"},
|
||||
{"PLUGIN_LIBRARY_VERSION", 20, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"PLUGIN_AUTHOR", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"PLUGIN_AUTHOR", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"PLUGIN_DESCRIPTION", 65535, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"PLUGIN_LICENSE", 80, MYSQL_TYPE_STRING, 0, 1, "License"},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
@ -5750,16 +5750,16 @@ ST_FIELD_INFO plugin_fields_info[]=
|
||||
ST_FIELD_INFO files_fields_info[]=
|
||||
{
|
||||
{"FILE_ID", 4, MYSQL_TYPE_LONG, 0, 0, 0},
|
||||
{"FILE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"FILE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"FILE_TYPE", 20, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLESPACE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_CATALOG", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"LOGFILE_GROUP_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLESPACE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_CATALOG", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"LOGFILE_GROUP_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"LOGFILE_GROUP_NUMBER", 4, MYSQL_TYPE_LONG, 0, 1, 0},
|
||||
{"ENGINE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"FULLTEXT_KEYS", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"ENGINE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"FULLTEXT_KEYS", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"DELETED_ROWS", 4, MYSQL_TYPE_LONG, 0, 1, 0},
|
||||
{"UPDATE_COUNT", 4, MYSQL_TYPE_LONG, 0, 1, 0},
|
||||
{"FREE_EXTENTS", 4, MYSQL_TYPE_LONG, 0, 1, 0},
|
||||
@ -5803,16 +5803,16 @@ void init_fill_schema_files_row(TABLE* table)
|
||||
ST_FIELD_INFO referential_constraints_fields_info[]=
|
||||
{
|
||||
{"CONSTRAINT_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"CONSTRAINT_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CONSTRAINT_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CONSTRAINT_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"CONSTRAINT_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"UNIQUE_CONSTRAINT_CATALOG", FN_REFLEN, MYSQL_TYPE_STRING, 0, 1, 0},
|
||||
{"UNIQUE_CONSTRAINT_SCHEMA", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"UNIQUE_CONSTRAINT_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"MATCH_OPTION", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"UPDATE_RULE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"DELETE_RULE", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"REFERENCED_TABLE_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"UNIQUE_CONSTRAINT_SCHEMA", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"UNIQUE_CONSTRAINT_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"MATCH_OPTION", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"UPDATE_RULE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"DELETE_RULE", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{"REFERENCED_TABLE_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0}
|
||||
};
|
||||
|
||||
|
@ -1922,6 +1922,7 @@ static int sort_keys(KEY *a, KEY *b)
|
||||
set_or_name "SET" or "ENUM" string for warning message
|
||||
name name of the checked column
|
||||
typelib list of values for the column
|
||||
dup_val_count returns count of duplicate elements
|
||||
|
||||
DESCRIPTION
|
||||
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,
|
||||
const char *name, TYPELIB *typelib,
|
||||
CHARSET_INFO *cs)
|
||||
CHARSET_INFO *cs, unsigned int *dup_val_count)
|
||||
{
|
||||
TYPELIB tmp= *typelib;
|
||||
const char **cur_value= typelib->type_names;
|
||||
unsigned int *cur_length= typelib->type_lengths;
|
||||
*dup_val_count= 0;
|
||||
|
||||
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(ER_DUPLICATED_VALUE_IN_TYPE),
|
||||
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,
|
||||
longlong table_flags)
|
||||
{
|
||||
unsigned int dup_val_count;
|
||||
DBUG_ENTER("prepare_field");
|
||||
|
||||
/*
|
||||
@ -2088,7 +2092,7 @@ int prepare_create_field(create_field *sql_field,
|
||||
sql_field->unireg_check=Field::INTERVAL_FIELD;
|
||||
check_duplicates_in_interval("ENUM",sql_field->field_name,
|
||||
sql_field->interval,
|
||||
sql_field->charset);
|
||||
sql_field->charset, &dup_val_count);
|
||||
break;
|
||||
case MYSQL_TYPE_SET:
|
||||
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;
|
||||
check_duplicates_in_interval("SET",sql_field->field_name,
|
||||
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;
|
||||
case MYSQL_TYPE_DATE: // Rest of string types
|
||||
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 :
|
||||
"(none)" , key->type));
|
||||
LEX_STRING key_name_str;
|
||||
if (key->type == Key::FOREIGN_KEY)
|
||||
{
|
||||
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);
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
if (key->name && strlen(key->name) > NAME_LEN)
|
||||
key_name_str.str= (char*) key->name;
|
||||
key_name_str.length= key->name ? strlen(key->name) : 0;
|
||||
if (check_string_char_length(&key_name_str, "", NAME_CHAR_LEN,
|
||||
system_charset_info, 1))
|
||||
{
|
||||
my_error(ER_TOO_LONG_IDENT, MYF(0), key->name);
|
||||
DBUG_RETURN(-1);
|
||||
@ -4050,7 +4064,7 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
|
||||
|
||||
if (end_active_trans(thd))
|
||||
DBUG_RETURN(1);
|
||||
field_list.push_back(item = new Item_empty_string("Table", NAME_LEN*2));
|
||||
field_list.push_back(item = new Item_empty_string("Table", NAME_CHAR_LEN*2));
|
||||
item->maybe_null = 1;
|
||||
field_list.push_back(item = new Item_empty_string("Op", 10));
|
||||
item->maybe_null = 1;
|
||||
@ -4633,7 +4647,8 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table,
|
||||
/*
|
||||
Validate the source table
|
||||
*/
|
||||
if (table_ident->table.length > NAME_LEN ||
|
||||
if (check_string_char_length(&table_ident->table, "", NAME_CHAR_LEN,
|
||||
system_charset_info, 1) ||
|
||||
(table_ident->table.length &&
|
||||
check_table_name(src_table,table_ident->table.length)))
|
||||
{
|
||||
|
@ -169,8 +169,10 @@ void udf_init()
|
||||
This is done to ensure that only approved dll from the system
|
||||
directories are used (to make this even remotely secure).
|
||||
*/
|
||||
if (my_strchr(files_charset_info, dl_name, dl_name + strlen(dl_name), FN_LIBCHAR) ||
|
||||
strlen(name.str) > NAME_LEN)
|
||||
if (my_strchr(files_charset_info, dl_name,
|
||||
dl_name + strlen(dl_name), FN_LIBCHAR) ||
|
||||
check_string_char_length(&name, "", NAME_CHAR_LEN,
|
||||
system_charset_info, 1))
|
||||
{
|
||||
sql_print_error("Invalid row in mysql.func table for function '%.64s'",
|
||||
name.str);
|
||||
@ -397,7 +399,8 @@ int mysql_create_function(THD *thd,udf_func *udf)
|
||||
my_message(ER_UDF_NO_PATHS, ER(ER_UDF_NO_PATHS), MYF(0));
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
if (udf->name.length > NAME_LEN)
|
||||
if (check_string_char_length(&udf->name, "", NAME_CHAR_LEN,
|
||||
system_charset_info, 1))
|
||||
{
|
||||
my_error(ER_TOO_LONG_IDENT, MYF(0), udf->name);
|
||||
DBUG_RETURN(1);
|
||||
|
@ -1931,9 +1931,8 @@ sp_name:
|
||||
my_error(ER_WRONG_DB_NAME, MYF(0), $1.str);
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
if (check_routine_name($3))
|
||||
if (check_routine_name(&$3))
|
||||
{
|
||||
my_error(ER_SP_WRONG_NAME, MYF(0), $3.str);
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
$$= new sp_name($1, $3, true);
|
||||
@ -1943,9 +1942,8 @@ sp_name:
|
||||
{
|
||||
THD *thd= YYTHD;
|
||||
LEX_STRING db;
|
||||
if (check_routine_name($1))
|
||||
if (check_routine_name(&$1))
|
||||
{
|
||||
my_error(ER_SP_WRONG_NAME, MYF(0), $1.str);
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
if (thd->copy_db_to(&db.str, &db.length))
|
||||
@ -4540,8 +4538,7 @@ field_spec:
|
||||
type opt_attribute
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
if (add_field_to_list(lex->thd, $1.str,
|
||||
(enum enum_field_types) $3,
|
||||
if (add_field_to_list(lex->thd, &$1, (enum enum_field_types) $3,
|
||||
lex->length,lex->dec,lex->type,
|
||||
lex->default_value, lex->on_update_value,
|
||||
&lex->comment,
|
||||
@ -5497,7 +5494,7 @@ alter_list_item:
|
||||
type opt_attribute
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
if (add_field_to_list(lex->thd,$3.str,
|
||||
if (add_field_to_list(lex->thd,&$3,
|
||||
(enum enum_field_types) $5,
|
||||
lex->length,lex->dec,lex->type,
|
||||
lex->default_value, lex->on_update_value,
|
||||
@ -9722,8 +9719,9 @@ user:
|
||||
$$->host.str= (char *) "%";
|
||||
$$->host.length= 1;
|
||||
|
||||
if (check_string_length(&$$->user,
|
||||
ER(ER_USERNAME), USERNAME_LENGTH))
|
||||
if (check_string_char_length(&$$->user, ER(ER_USERNAME),
|
||||
USERNAME_CHAR_LENGTH,
|
||||
system_charset_info, 0))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
| ident_or_text '@' ident_or_text
|
||||
@ -9733,10 +9731,11 @@ user:
|
||||
MYSQL_YYABORT;
|
||||
$$->user = $1; $$->host=$3;
|
||||
|
||||
if (check_string_length(&$$->user,
|
||||
ER(ER_USERNAME), USERNAME_LENGTH) ||
|
||||
check_string_length(&$$->host,
|
||||
ER(ER_HOSTNAME), HOSTNAME_LENGTH))
|
||||
if (check_string_char_length(&$$->user, ER(ER_USERNAME),
|
||||
USERNAME_CHAR_LENGTH,
|
||||
system_charset_info, 0) ||
|
||||
check_string_byte_length(&$$->host, ER(ER_HOSTNAME),
|
||||
HOSTNAME_LENGTH))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
| CURRENT_USER optional_braces
|
||||
|
21
sql/table.cc
21
sql/table.cc
@ -2336,8 +2336,9 @@ uint calculate_key_len(TABLE *table, uint key, const byte *buf,
|
||||
bool check_db_name(LEX_STRING *org_name)
|
||||
{
|
||||
char *name= org_name->str;
|
||||
uint name_length= org_name->length;
|
||||
|
||||
if (!org_name->length || org_name->length > NAME_LEN)
|
||||
if (!name_length || name_length > NAME_LEN)
|
||||
return 1;
|
||||
|
||||
if (lower_case_table_names && name != any_db)
|
||||
@ -2346,6 +2347,7 @@ bool check_db_name(LEX_STRING *org_name)
|
||||
#if defined(USE_MB) && defined(USE_MB_IDENT)
|
||||
if (use_mb(system_charset_info))
|
||||
{
|
||||
name_length= 0;
|
||||
bool last_char_is_space= TRUE;
|
||||
char *end= name + org_name->length;
|
||||
while (name < end)
|
||||
@ -2356,12 +2358,14 @@ bool check_db_name(LEX_STRING *org_name)
|
||||
if (!len)
|
||||
len= 1;
|
||||
name+= len;
|
||||
name_length++;
|
||||
}
|
||||
return last_char_is_space;
|
||||
return (last_char_is_space || name_length > NAME_CHAR_LEN);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
return org_name->str[org_name->length - 1] != ' '; /* purecov: inspected */
|
||||
return ((org_name->str[org_name->length - 1] != ' ') ||
|
||||
(name_length > NAME_CHAR_LEN)); /* purecov: inspected */
|
||||
}
|
||||
|
||||
|
||||
@ -2374,6 +2378,7 @@ bool check_db_name(LEX_STRING *org_name)
|
||||
|
||||
bool check_table_name(const char *name, uint length)
|
||||
{
|
||||
uint name_length= 0; // name length in symbols
|
||||
const char *end= name+length;
|
||||
if (!length || length > NAME_LEN)
|
||||
return 1;
|
||||
@ -2394,14 +2399,16 @@ bool check_table_name(const char *name, uint length)
|
||||
if (len)
|
||||
{
|
||||
name += len;
|
||||
name_length++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
name++;
|
||||
name_length++;
|
||||
}
|
||||
#if defined(USE_MB) && defined(USE_MB_IDENT)
|
||||
return last_char_is_space;
|
||||
return (last_char_is_space || name_length > NAME_CHAR_LEN) ;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
@ -2410,7 +2417,7 @@ bool check_table_name(const char *name, uint length)
|
||||
|
||||
bool check_column_name(const char *name)
|
||||
{
|
||||
const char *start= name;
|
||||
uint name_length= 0; // name length in symbols
|
||||
bool last_char_is_space= TRUE;
|
||||
|
||||
while (*name)
|
||||
@ -2424,6 +2431,7 @@ bool check_column_name(const char *name)
|
||||
if (len)
|
||||
{
|
||||
name += len;
|
||||
name_length++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@ -2433,9 +2441,10 @@ bool check_column_name(const char *name)
|
||||
if (*name == NAMES_SEP_CHAR)
|
||||
return 1;
|
||||
name++;
|
||||
name_length++;
|
||||
}
|
||||
/* Error if empty or too long column name */
|
||||
return last_char_is_space || (uint) (name - start) > NAME_LEN;
|
||||
return last_char_is_space || (uint) name_length > NAME_CHAR_LEN;
|
||||
}
|
||||
|
||||
|
||||
|
@ -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;
|
||||
LEX_STRING *name= 0;
|
||||
uint ulen;
|
||||
char uname[NAME_LEN*3+1]; /* Unencoded name */
|
||||
char db_name[NAME_LEN*3+1];
|
||||
char uname[NAME_LEN+1]; /* Unencoded name */
|
||||
char db_name[NAME_LEN+1];
|
||||
const char *tmp_buff;
|
||||
|
||||
tmp_buff= foreign->id;
|
||||
|
@ -7811,16 +7811,16 @@ static void test_explain_bug()
|
||||
"", "", "", 19, 0);
|
||||
|
||||
verify_prepare_field(result, 2, "table", "", MYSQL_TYPE_VAR_STRING,
|
||||
"", "", "", NAME_LEN, 0);
|
||||
"", "", "", NAME_CHAR_LEN, 0);
|
||||
|
||||
verify_prepare_field(result, 3, "type", "", MYSQL_TYPE_VAR_STRING,
|
||||
"", "", "", 10, 0);
|
||||
|
||||
verify_prepare_field(result, 4, "possible_keys", "", MYSQL_TYPE_VAR_STRING,
|
||||
"", "", "", NAME_LEN*MAX_KEY, 0);
|
||||
"", "", "", NAME_CHAR_LEN*MAX_KEY, 0);
|
||||
|
||||
verify_prepare_field(result, 5, "key", "", MYSQL_TYPE_VAR_STRING,
|
||||
"", "", "", NAME_LEN, 0);
|
||||
"", "", "", NAME_CHAR_LEN, 0);
|
||||
|
||||
if (mysql_get_server_version(mysql) <= 50000)
|
||||
{
|
||||
@ -7830,11 +7830,11 @@ static void test_explain_bug()
|
||||
else
|
||||
{
|
||||
verify_prepare_field(result, 6, "key_len", "", MYSQL_TYPE_VAR_STRING, "",
|
||||
"", "", NAME_LEN*MAX_KEY, 0);
|
||||
"", "", NAME_CHAR_LEN*MAX_KEY, 0);
|
||||
}
|
||||
|
||||
verify_prepare_field(result, 7, "ref", "", MYSQL_TYPE_VAR_STRING,
|
||||
"", "", "", NAME_LEN*16, 0);
|
||||
"", "", "", NAME_CHAR_LEN*16, 0);
|
||||
|
||||
verify_prepare_field(result, 8, "rows", "", MYSQL_TYPE_LONGLONG,
|
||||
"", "", "", 10, 0);
|
||||
|
Loading…
x
Reference in New Issue
Block a user