Merge kaamos.(none):/data/src/mysql-5.0
into kaamos.(none):/data/src/opt/mysql-5.0-opt
This commit is contained in:
commit
3daeb40f1f
@ -1325,6 +1325,7 @@ set @a=repeat(' ',20);
|
|||||||
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1265 Data truncated for column 'v' at row 1
|
Note 1265 Data truncated for column 'v' at row 1
|
||||||
|
Note 1265 Data truncated for column 'c' at row 1
|
||||||
select concat('*',v,'*',c,'*',t,'*') from t1;
|
select concat('*',v,'*',c,'*',t,'*') from t1;
|
||||||
concat('*',v,'*',c,'*',t,'*')
|
concat('*',v,'*',c,'*',t,'*')
|
||||||
*+ *+*+ *
|
*+ *+*+ *
|
||||||
|
@ -1532,4 +1532,18 @@ Handler_read_prev 0
|
|||||||
Handler_read_rnd 0
|
Handler_read_rnd 0
|
||||||
Handler_read_rnd_next 7
|
Handler_read_rnd_next 7
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
CREATE TABLE t1(c1 VARCHAR(33), KEY USING BTREE (c1));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1(c1 VARCHAR(33), KEY (c1) USING BTREE);
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1(c1 VARCHAR(33), KEY USING BTREE (c1) USING HASH) ENGINE=MEMORY;
|
||||||
|
SHOW INDEX FROM t1;
|
||||||
|
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
|
||||||
|
t1 1 c1 1 c1 NULL 0 NULL NULL YES HASH
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1(c1 VARCHAR(33), KEY USING HASH (c1) USING BTREE) ENGINE=MEMORY;
|
||||||
|
SHOW INDEX FROM t1;
|
||||||
|
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
|
||||||
|
t1 1 c1 1 c1 A NULL NULL NULL YES BTREE
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
@ -138,3 +138,20 @@ SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser2' order by
|
|||||||
user host db select_priv
|
user host db select_priv
|
||||||
DROP USER CUser2@localhost;
|
DROP USER CUser2@localhost;
|
||||||
DROP USER CUser2@LOCALHOST;
|
DROP USER CUser2@LOCALHOST;
|
||||||
|
CREATE DATABASE mysqltest_1;
|
||||||
|
CREATE TABLE mysqltest_1.t1 (a INT);
|
||||||
|
CREATE USER 'mysqltest1'@'%';
|
||||||
|
GRANT SELECT, UPDATE ON `mysqltest_1`.* TO 'mysqltest1'@'%';
|
||||||
|
REVOKE SELECT ON `mysqltest_1`.* FROM 'mysqltest1'@'%';
|
||||||
|
GRANT SELECT, UPDATE ON `mysqltest\_1`.* TO 'mysqltest1'@'%';
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
SHOW GRANTS;
|
||||||
|
Grants for mysqltest1@%
|
||||||
|
GRANT USAGE ON *.* TO 'mysqltest1'@'%'
|
||||||
|
GRANT SELECT, UPDATE ON `mysqltest\_1`.* TO 'mysqltest1'@'%'
|
||||||
|
GRANT UPDATE ON `mysqltest_1`.* TO 'mysqltest1'@'%'
|
||||||
|
SELECT * FROM mysqltest_1.t1;
|
||||||
|
a
|
||||||
|
DROP USER 'mysqltest1'@'%';
|
||||||
|
DROP DATABASE mysqltest_1;
|
||||||
|
End of 5.0 tests
|
||||||
|
@ -256,6 +256,7 @@ set @a=repeat(' ',20);
|
|||||||
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1265 Data truncated for column 'v' at row 1
|
Note 1265 Data truncated for column 'v' at row 1
|
||||||
|
Note 1265 Data truncated for column 'c' at row 1
|
||||||
select concat('*',v,'*',c,'*',t,'*') from t1;
|
select concat('*',v,'*',c,'*',t,'*') from t1;
|
||||||
concat('*',v,'*',c,'*',t,'*')
|
concat('*',v,'*',c,'*',t,'*')
|
||||||
*+ *+*+ *
|
*+ *+*+ *
|
||||||
|
@ -1901,6 +1901,7 @@ set @a=repeat(' ',20);
|
|||||||
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1265 Data truncated for column 'v' at row 1
|
Note 1265 Data truncated for column 'v' at row 1
|
||||||
|
Note 1265 Data truncated for column 'c' at row 1
|
||||||
select concat('*',v,'*',c,'*',t,'*') from t1;
|
select concat('*',v,'*',c,'*',t,'*') from t1;
|
||||||
concat('*',v,'*',c,'*',t,'*')
|
concat('*',v,'*',c,'*',t,'*')
|
||||||
*+ *+*+ *
|
*+ *+*+ *
|
||||||
|
@ -1240,4 +1240,10 @@ t1 CREATE TABLE `t1` (
|
|||||||
UNIQUE KEY `aa` (`a`(1))
|
UNIQUE KEY `aa` (`a`(1))
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
set @my_innodb_autoextend_increment=@@global.innodb_autoextend_increment;
|
||||||
|
set global innodb_autoextend_increment=8;
|
||||||
|
set global innodb_autoextend_increment=@my_innodb_autoextend_increment;
|
||||||
|
set @my_innodb_commit_concurrency=@@global.innodb_commit_concurrency;
|
||||||
|
set global innodb_commit_concurrency=0;
|
||||||
|
set global innodb_commit_concurrency=@my_innodb_commit_concurrency;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
@ -1104,6 +1104,7 @@ set @a=repeat(' ',20);
|
|||||||
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
insert into t1 values (concat('+',@a),concat('+',@a),concat('+',@a));
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1265 Data truncated for column 'v' at row 1
|
Note 1265 Data truncated for column 'v' at row 1
|
||||||
|
Note 1265 Data truncated for column 'c' at row 1
|
||||||
select concat('*',v,'*',c,'*',t,'*') from t1;
|
select concat('*',v,'*',c,'*',t,'*') from t1;
|
||||||
concat('*',v,'*',c,'*',t,'*')
|
concat('*',v,'*',c,'*',t,'*')
|
||||||
*+ *+*+ *
|
*+ *+*+ *
|
||||||
|
@ -1064,3 +1064,15 @@ a b
|
|||||||
10 00:00:10
|
10 00:00:10
|
||||||
0 00:00:00
|
0 00:00:00
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Bug#31590: Wrong error message on sort buffer being too small.
|
||||||
|
#
|
||||||
|
create table t1(a int, b tinytext);
|
||||||
|
insert into t1 values (1,2),(3,2);
|
||||||
|
set session sort_buffer_size= 30000;
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect sort_buffer_size value: '30000'
|
||||||
|
set session max_sort_length= 2180;
|
||||||
|
select * from t1 order by b;
|
||||||
|
ERROR HY001: Out of sort memory; increase server sort buffer size
|
||||||
|
drop table t1;
|
||||||
|
@ -1153,3 +1153,16 @@ explain select * from t1 where dateval >= '2007-01-01 00:00:00' and dateval <= '
|
|||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 range dateval dateval 4 NULL 2 Using where
|
1 SIMPLE t1 range dateval dateval 4 NULL 2 Using where
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a varchar(32), index (a)
|
||||||
|
) DEFAULT CHARSET=latin1 COLLATE=latin1_bin;
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
('B'), ('A'), ('A'), ('C'), ('B'), ('A'), ('A');
|
||||||
|
SELECT a FROM t1 WHERE a='b' OR a='B';
|
||||||
|
a
|
||||||
|
B
|
||||||
|
B
|
||||||
|
EXPLAIN SELECT a FROM t1 WHERE a='b' OR a='B';
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 range a a 35 NULL 3 Using where; Using index
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -4328,4 +4328,10 @@ SELECT * FROM t1 WHERE c1 > NULL + 1;
|
|||||||
c1
|
c1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10) NOT NULL PRIMARY KEY);
|
||||||
|
INSERT INTO t1 (a) VALUES ('foo0'), ('bar0'), ('baz0');
|
||||||
|
SELECT * FROM t1 WHERE a IN (CONCAT('foo', 0), 'bar');
|
||||||
|
a
|
||||||
|
foo0
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
@ -6629,6 +6629,23 @@ end//
|
|||||||
call proc_33618(20);
|
call proc_33618(20);
|
||||||
drop table t_33618;
|
drop table t_33618;
|
||||||
drop procedure proc_33618;
|
drop procedure proc_33618;
|
||||||
|
#
|
||||||
|
# Bug#30787: Stored function ignores user defined alias.
|
||||||
|
#
|
||||||
|
use test;
|
||||||
|
drop function if exists func30787;
|
||||||
|
create table t1(f1 int);
|
||||||
|
insert into t1 values(1),(2);
|
||||||
|
create function func30787(p1 int) returns int
|
||||||
|
begin
|
||||||
|
return p1;
|
||||||
|
end |
|
||||||
|
select (select func30787(f1)) as ttt from t1;
|
||||||
|
ttt
|
||||||
|
1
|
||||||
|
2
|
||||||
|
drop function func30787;
|
||||||
|
drop table t1;
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
# -- End of 5.0 tests
|
# -- End of 5.0 tests
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
|
@ -934,6 +934,8 @@ NULL NULL
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
CREATE TABLE t1 (col1 CHAR(5), col2 VARCHAR(6));
|
CREATE TABLE t1 (col1 CHAR(5), col2 VARCHAR(6));
|
||||||
INSERT INTO t1 VALUES ('hello', 'hello'),('he', 'he'),('hello ', 'hello ');
|
INSERT INTO t1 VALUES ('hello', 'hello'),('he', 'he'),('hello ', 'hello ');
|
||||||
|
Warnings:
|
||||||
|
Note 1265 Data truncated for column 'col1' at row 3
|
||||||
INSERT INTO t1 (col1) VALUES ('hellobob');
|
INSERT INTO t1 (col1) VALUES ('hellobob');
|
||||||
ERROR 22001: Data too long for column 'col1' at row 1
|
ERROR 22001: Data too long for column 'col1' at row 1
|
||||||
INSERT INTO t1 (col2) VALUES ('hellobob');
|
INSERT INTO t1 (col2) VALUES ('hellobob');
|
||||||
|
@ -125,6 +125,7 @@ create table t1 (c char(2), vc varchar(2));
|
|||||||
insert into t1 values(0x4120, 0x4120);
|
insert into t1 values(0x4120, 0x4120);
|
||||||
insert into t1 values(0x412020, 0x412020);
|
insert into t1 values(0x412020, 0x412020);
|
||||||
Warnings:
|
Warnings:
|
||||||
|
Note 1265 Data truncated for column 'c' at row 1
|
||||||
Note 1265 Data truncated for column 'vc' at row 1
|
Note 1265 Data truncated for column 'vc' at row 1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
set @old_sql_mode= @@sql_mode, sql_mode= 'traditional';
|
set @old_sql_mode= @@sql_mode, sql_mode= 'traditional';
|
||||||
|
@ -85,3 +85,11 @@ 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
|
`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
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1(c 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'));
|
||||||
|
INSERT INTO t1 VALUES(7);
|
||||||
|
INSERT INTO t1 VALUES(9223372036854775808);
|
||||||
|
SELECT * FROM t1;
|
||||||
|
c
|
||||||
|
1,2,3
|
||||||
|
64
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -3618,4 +3618,20 @@ ERROR HY000: Field of view 'test.v1' underlying table doesn't have a default val
|
|||||||
set @@sql_mode=@old_mode;
|
set @@sql_mode=@old_mode;
|
||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
create table t1 (a int, key(a));
|
||||||
|
create table t2 (c int);
|
||||||
|
create view v1 as select a b from t1;
|
||||||
|
create view v2 as select 1 a from t2, v1 where c in
|
||||||
|
(select 1 from t1 where b = a);
|
||||||
|
insert into t1 values (1), (1);
|
||||||
|
insert into t2 values (1), (1);
|
||||||
|
prepare stmt from "select * from v2 where a = 1";
|
||||||
|
execute stmt;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
drop view v1, v2;
|
||||||
|
drop table t1, t2;
|
||||||
End of 5.0 tests.
|
End of 5.0 tests.
|
||||||
|
@ -298,4 +298,42 @@ DROP TABLE t3;
|
|||||||
DROP PROCEDURE sp1;
|
DROP PROCEDURE sp1;
|
||||||
DROP PROCEDURE sp2;
|
DROP PROCEDURE sp2;
|
||||||
DROP PROCEDURE sp3;
|
DROP PROCEDURE sp3;
|
||||||
|
create table t1 (c_char char(255), c_varchar varchar(255), c_tinytext tinytext);
|
||||||
|
create table t2 (c_tinyblob tinyblob);
|
||||||
|
set @c = repeat(' ', 256);
|
||||||
|
set @q = repeat('q', 256);
|
||||||
|
set sql_mode = '';
|
||||||
|
insert into t1 values(@c, @c, @c);
|
||||||
|
Warnings:
|
||||||
|
Note 1265 Data truncated for column 'c_char' at row 1
|
||||||
|
Note 1265 Data truncated for column 'c_varchar' at row 1
|
||||||
|
Note 1265 Data truncated for column 'c_tinytext' at row 1
|
||||||
|
insert into t2 values(@c);
|
||||||
|
Warnings:
|
||||||
|
Warning 1265 Data truncated for column 'c_tinyblob' at row 1
|
||||||
|
insert into t1 values(@q, @q, @q);
|
||||||
|
Warnings:
|
||||||
|
Warning 1265 Data truncated for column 'c_char' at row 1
|
||||||
|
Warning 1265 Data truncated for column 'c_varchar' at row 1
|
||||||
|
Warning 1265 Data truncated for column 'c_tinytext' at row 1
|
||||||
|
insert into t2 values(@q);
|
||||||
|
Warnings:
|
||||||
|
Warning 1265 Data truncated for column 'c_tinyblob' at row 1
|
||||||
|
set sql_mode = 'traditional';
|
||||||
|
insert into t1 values(@c, @c, @c);
|
||||||
|
Warnings:
|
||||||
|
Note 1265 Data truncated for column 'c_char' at row 1
|
||||||
|
Note 1265 Data truncated for column 'c_varchar' at row 1
|
||||||
|
Note 1265 Data truncated for column 'c_tinytext' at row 1
|
||||||
|
insert into t2 values(@c);
|
||||||
|
ERROR 22001: Data too long for column 'c_tinyblob' at row 1
|
||||||
|
insert into t1 values(@q, NULL, NULL);
|
||||||
|
ERROR 22001: Data too long for column 'c_char' at row 1
|
||||||
|
insert into t1 values(NULL, @q, NULL);
|
||||||
|
ERROR 22001: Data too long for column 'c_varchar' at row 1
|
||||||
|
insert into t1 values(NULL, NULL, @q);
|
||||||
|
ERROR 22001: Data too long for column 'c_tinytext' at row 1
|
||||||
|
insert into t2 values(@q);
|
||||||
|
ERROR 22001: Data too long for column 'c_tinyblob' at row 1
|
||||||
|
drop table t1, t2;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
@ -1148,4 +1148,28 @@ create table t2 select sql_big_result f1,count(f2) from t1 group by f1;
|
|||||||
show status like 'handler_read%';
|
show status like 'handler_read%';
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #25162: Backing up DB from 5.1 adds 'USING BTREE' to KEYs on table creates
|
||||||
|
#
|
||||||
|
|
||||||
|
# Show that the old syntax for index type is supported
|
||||||
|
CREATE TABLE t1(c1 VARCHAR(33), KEY USING BTREE (c1));
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# Show that the new syntax for index type is supported
|
||||||
|
CREATE TABLE t1(c1 VARCHAR(33), KEY (c1) USING BTREE);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# Show that in case of multiple index type definitions, the last one takes
|
||||||
|
# precedence
|
||||||
|
|
||||||
|
CREATE TABLE t1(c1 VARCHAR(33), KEY USING BTREE (c1) USING HASH) ENGINE=MEMORY;
|
||||||
|
SHOW INDEX FROM t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
CREATE TABLE t1(c1 VARCHAR(33), KEY USING HASH (c1) USING BTREE) ENGINE=MEMORY;
|
||||||
|
SHOW INDEX FROM t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
@ -134,3 +134,29 @@ SELECT user, host, db, select_priv FROM mysql.db where user = 'CUser2' order by
|
|||||||
|
|
||||||
DROP USER CUser2@localhost;
|
DROP USER CUser2@localhost;
|
||||||
DROP USER CUser2@LOCALHOST;
|
DROP USER CUser2@LOCALHOST;
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#31194: Privilege ordering does not order properly for wildcard values
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE DATABASE mysqltest_1;
|
||||||
|
CREATE TABLE mysqltest_1.t1 (a INT);
|
||||||
|
CREATE USER 'mysqltest1'@'%';
|
||||||
|
GRANT SELECT, UPDATE ON `mysqltest_1`.* TO 'mysqltest1'@'%';
|
||||||
|
REVOKE SELECT ON `mysqltest_1`.* FROM 'mysqltest1'@'%';
|
||||||
|
GRANT SELECT, UPDATE ON `mysqltest\_1`.* TO 'mysqltest1'@'%';
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
|
||||||
|
connect (conn1,localhost,mysqltest1,,);
|
||||||
|
connection conn1;
|
||||||
|
SHOW GRANTS;
|
||||||
|
SELECT * FROM mysqltest_1.t1;
|
||||||
|
disconnect conn1;
|
||||||
|
|
||||||
|
connection default;
|
||||||
|
DROP USER 'mysqltest1'@'%';
|
||||||
|
DROP DATABASE mysqltest_1;
|
||||||
|
|
||||||
|
|
||||||
|
--echo End of 5.0 tests
|
||||||
|
@ -982,4 +982,18 @@ desc t1;
|
|||||||
show create table t1;
|
show create table t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #34223: Assertion failed: (optp->var_type & 127) == 8,
|
||||||
|
# file .\my_getopt.c, line 830
|
||||||
|
#
|
||||||
|
|
||||||
|
set @my_innodb_autoextend_increment=@@global.innodb_autoextend_increment;
|
||||||
|
set global innodb_autoextend_increment=8;
|
||||||
|
set global innodb_autoextend_increment=@my_innodb_autoextend_increment;
|
||||||
|
|
||||||
|
set @my_innodb_commit_concurrency=@@global.innodb_commit_concurrency;
|
||||||
|
set global innodb_commit_concurrency=0;
|
||||||
|
set global innodb_commit_concurrency=@my_innodb_commit_concurrency;
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
@ -726,3 +726,15 @@ SELECT a, b FROM t1 ORDER BY b DESC;
|
|||||||
SELECT a, b FROM t1 ORDER BY SEC_TO_TIME(a) DESC;
|
SELECT a, b FROM t1 ORDER BY SEC_TO_TIME(a) DESC;
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#31590: Wrong error message on sort buffer being too small.
|
||||||
|
--echo #
|
||||||
|
create table t1(a int, b tinytext);
|
||||||
|
insert into t1 values (1,2),(3,2);
|
||||||
|
set session sort_buffer_size= 30000;
|
||||||
|
set session max_sort_length= 2180;
|
||||||
|
--error 1038
|
||||||
|
select * from t1 order by b;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
@ -955,4 +955,21 @@ explain select * from t1 where dateval >= '2007-01-01 00:00:00' and dateval <= '
|
|||||||
|
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #33833: different or-ed predicates were erroneously merged into one that
|
||||||
|
# resulted in ref access instead of range access and a wrong result set
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
a varchar(32), index (a)
|
||||||
|
) DEFAULT CHARSET=latin1 COLLATE=latin1_bin;
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
('B'), ('A'), ('A'), ('C'), ('B'), ('A'), ('A');
|
||||||
|
|
||||||
|
SELECT a FROM t1 WHERE a='b' OR a='B';
|
||||||
|
EXPLAIN SELECT a FROM t1 WHERE a='b' OR a='B';
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
# End of 5.0 tests
|
# End of 5.0 tests
|
||||||
|
@ -3672,4 +3672,15 @@ DROP TABLE t1;
|
|||||||
|
|
||||||
--echo
|
--echo
|
||||||
|
|
||||||
|
###########################################################################
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #33764: Wrong result with IN(), CONCAT() and implicit type conversion
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a VARCHAR(10) NOT NULL PRIMARY KEY);
|
||||||
|
INSERT INTO t1 (a) VALUES ('foo0'), ('bar0'), ('baz0');
|
||||||
|
SELECT * FROM t1 WHERE a IN (CONCAT('foo', 0), 'bar');
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
@ -7774,6 +7774,25 @@ call proc_33618(20);
|
|||||||
|
|
||||||
drop table t_33618;
|
drop table t_33618;
|
||||||
drop procedure proc_33618;
|
drop procedure proc_33618;
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#30787: Stored function ignores user defined alias.
|
||||||
|
--echo #
|
||||||
|
use test;
|
||||||
|
--disable_warnings
|
||||||
|
drop function if exists func30787;
|
||||||
|
--enable_warnings
|
||||||
|
create table t1(f1 int);
|
||||||
|
insert into t1 values(1),(2);
|
||||||
|
delimiter |;
|
||||||
|
create function func30787(p1 int) returns int
|
||||||
|
begin
|
||||||
|
return p1;
|
||||||
|
end |
|
||||||
|
delimiter ;|
|
||||||
|
select (select func30787(f1)) as ttt from t1;
|
||||||
|
drop function func30787;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
|
||||||
--echo # ------------------------------------------------------------------
|
--echo # ------------------------------------------------------------------
|
||||||
--echo # -- End of 5.0 tests
|
--echo # -- End of 5.0 tests
|
||||||
|
@ -56,3 +56,23 @@ set('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17',
|
|||||||
'50','51','52','53','54','55','56','57','58','59','60','61','62','63','64','1'));
|
'50','51','52','53','54','55','56','57','58','59','60','61','62','63','64','1'));
|
||||||
show create table t1;
|
show create table t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#15409: Columns with SET datatype with 64-element sets
|
||||||
|
# may not be updated with integers
|
||||||
|
#
|
||||||
|
|
||||||
|
let $i=64;
|
||||||
|
let $s='$i';
|
||||||
|
dec $i;
|
||||||
|
while ($i) {
|
||||||
|
let $s='$i',$s;
|
||||||
|
dec $i;
|
||||||
|
}
|
||||||
|
--eval CREATE TABLE t1(c set($s))
|
||||||
|
INSERT INTO t1 VALUES(7);
|
||||||
|
INSERT INTO t1 VALUES(9223372036854775808);
|
||||||
|
SELECT * FROM t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--# echo End of 5.0 tests
|
||||||
|
@ -3470,5 +3470,27 @@ insert into v1 values(1);
|
|||||||
set @@sql_mode=@old_mode;
|
set @@sql_mode=@old_mode;
|
||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #33389: Selecting from a view into a table from within SP or trigger
|
||||||
|
# crashes server
|
||||||
|
#
|
||||||
|
|
||||||
|
create table t1 (a int, key(a));
|
||||||
|
create table t2 (c int);
|
||||||
|
|
||||||
|
create view v1 as select a b from t1;
|
||||||
|
create view v2 as select 1 a from t2, v1 where c in
|
||||||
|
(select 1 from t1 where b = a);
|
||||||
|
|
||||||
|
insert into t1 values (1), (1);
|
||||||
|
insert into t2 values (1), (1);
|
||||||
|
|
||||||
|
prepare stmt from "select * from v2 where a = 1";
|
||||||
|
execute stmt;
|
||||||
|
|
||||||
|
drop view v1, v2;
|
||||||
|
drop table t1, t2;
|
||||||
|
|
||||||
--echo End of 5.0 tests.
|
--echo End of 5.0 tests.
|
||||||
|
|
||||||
|
@ -212,4 +212,37 @@ DROP PROCEDURE sp1;
|
|||||||
DROP PROCEDURE sp2;
|
DROP PROCEDURE sp2;
|
||||||
DROP PROCEDURE sp3;
|
DROP PROCEDURE sp3;
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#30059: End-space truncation warnings are inconsistent or incorrect
|
||||||
|
#
|
||||||
|
|
||||||
|
create table t1 (c_char char(255), c_varchar varchar(255), c_tinytext tinytext);
|
||||||
|
create table t2 (c_tinyblob tinyblob); # not affected by bug, for regression testing
|
||||||
|
set @c = repeat(' ', 256);
|
||||||
|
set @q = repeat('q', 256);
|
||||||
|
|
||||||
|
set sql_mode = '';
|
||||||
|
|
||||||
|
insert into t1 values(@c, @c, @c);
|
||||||
|
insert into t2 values(@c);
|
||||||
|
insert into t1 values(@q, @q, @q);
|
||||||
|
insert into t2 values(@q);
|
||||||
|
|
||||||
|
set sql_mode = 'traditional';
|
||||||
|
|
||||||
|
insert into t1 values(@c, @c, @c);
|
||||||
|
--error 1406
|
||||||
|
insert into t2 values(@c);
|
||||||
|
--error 1406
|
||||||
|
insert into t1 values(@q, NULL, NULL);
|
||||||
|
--error 1406
|
||||||
|
insert into t1 values(NULL, @q, NULL);
|
||||||
|
--error 1406
|
||||||
|
insert into t1 values(NULL, NULL, @q);
|
||||||
|
--error 1406
|
||||||
|
insert into t2 values(@q);
|
||||||
|
|
||||||
|
drop table t1, t2;
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
78
sql/field.cc
78
sql/field.cc
@ -5861,26 +5861,41 @@ check_string_copy_error(Field_str *field,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Send a truncation warning or a truncation error
|
Check if we lost any important data and send a truncation error/warning
|
||||||
after storing a too long character string info a field.
|
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
report_data_too_long()
|
Field_longstr::report_if_important_data()
|
||||||
field - Field
|
ptr - Truncated rest of string
|
||||||
|
end - End of truncated string
|
||||||
|
|
||||||
RETURN
|
RETURN VALUES
|
||||||
N/A
|
0 - None was truncated (or we don't count cut fields)
|
||||||
|
2 - Some bytes was truncated
|
||||||
|
|
||||||
|
NOTE
|
||||||
|
Check if we lost any important data (anything in a binary string,
|
||||||
|
or any non-space in others). If only trailing spaces was lost,
|
||||||
|
send a truncation note, otherwise send a truncation error.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
inline void
|
int
|
||||||
report_data_too_long(Field_str *field)
|
Field_longstr::report_if_important_data(const char *ptr, const char *end)
|
||||||
{
|
{
|
||||||
if (field->table->in_use->abort_on_warning)
|
if ((ptr < end) && table->in_use->count_cuted_fields)
|
||||||
field->set_warning(MYSQL_ERROR::WARN_LEVEL_ERROR, ER_DATA_TOO_LONG, 1);
|
{
|
||||||
|
if (test_if_important_data(field_charset, ptr, end))
|
||||||
|
{
|
||||||
|
if (table->in_use->abort_on_warning)
|
||||||
|
set_warning(MYSQL_ERROR::WARN_LEVEL_ERROR, ER_DATA_TOO_LONG, 1);
|
||||||
else
|
else
|
||||||
field->set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, 1);
|
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, 1);
|
||||||
|
}
|
||||||
|
else /* If we lost only spaces then produce a NOTE, not a WARNING */
|
||||||
|
set_warning(MYSQL_ERROR::WARN_LEVEL_NOTE, WARN_DATA_TRUNCATED, 1);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -5914,19 +5929,7 @@ int Field_string::store(const char *from,uint length,CHARSET_INFO *cs)
|
|||||||
cannot_convert_error_pos, from + length))
|
cannot_convert_error_pos, from + length))
|
||||||
return 2;
|
return 2;
|
||||||
|
|
||||||
/*
|
return report_if_important_data(from_end_pos, from + length);
|
||||||
Check if we lost any important data (anything in a binary string,
|
|
||||||
or any non-space in others).
|
|
||||||
*/
|
|
||||||
if ((from_end_pos < from + length) && table->in_use->count_cuted_fields)
|
|
||||||
{
|
|
||||||
if (test_if_important_data(field_charset, from_end_pos, from + length))
|
|
||||||
{
|
|
||||||
report_data_too_long(this);
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -6385,16 +6388,7 @@ int Field_varstring::store(const char *from,uint length,CHARSET_INFO *cs)
|
|||||||
cannot_convert_error_pos, from + length))
|
cannot_convert_error_pos, from + length))
|
||||||
return 2;
|
return 2;
|
||||||
|
|
||||||
// Check if we lost something other than just trailing spaces
|
return report_if_important_data(from_end_pos, from + length);
|
||||||
if ((from_end_pos < from + length) && table->in_use->count_cuted_fields)
|
|
||||||
{
|
|
||||||
if (test_if_important_data(field_charset, from_end_pos, from + length))
|
|
||||||
report_data_too_long(this);
|
|
||||||
else /* If we lost only spaces then produce a NOTE, not a WARNING */
|
|
||||||
set_warning(MYSQL_ERROR::WARN_LEVEL_NOTE, WARN_DATA_TRUNCATED, 1);
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -7030,13 +7024,7 @@ int Field_blob::store(const char *from,uint length,CHARSET_INFO *cs)
|
|||||||
cannot_convert_error_pos, from + length))
|
cannot_convert_error_pos, from + length))
|
||||||
return 2;
|
return 2;
|
||||||
|
|
||||||
if (from_end_pos < from + length)
|
return report_if_important_data(from_end_pos, from + length);
|
||||||
{
|
|
||||||
report_data_too_long(this);
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
oom_error:
|
oom_error:
|
||||||
/* Fatal OOM error */
|
/* Fatal OOM error */
|
||||||
@ -7883,10 +7871,10 @@ int Field_set::store(const char *from,uint length,CHARSET_INFO *cs)
|
|||||||
int Field_set::store(longlong nr, bool unsigned_val)
|
int Field_set::store(longlong nr, bool unsigned_val)
|
||||||
{
|
{
|
||||||
int error= 0;
|
int error= 0;
|
||||||
if ((ulonglong) nr > (ulonglong) (((longlong) 1 << typelib->count) -
|
ulonglong max_nr= set_bits(ulonglong, typelib->count);
|
||||||
(longlong) 1))
|
if ((ulonglong) nr > max_nr)
|
||||||
{
|
{
|
||||||
nr&= (longlong) (((longlong) 1 << typelib->count) - (longlong) 1);
|
nr&= max_nr;
|
||||||
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, 1);
|
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, 1);
|
||||||
error=1;
|
error=1;
|
||||||
}
|
}
|
||||||
|
@ -454,6 +454,8 @@ public:
|
|||||||
|
|
||||||
class Field_longstr :public Field_str
|
class Field_longstr :public Field_str
|
||||||
{
|
{
|
||||||
|
protected:
|
||||||
|
int report_if_important_data(const char *ptr, const char *end);
|
||||||
public:
|
public:
|
||||||
Field_longstr(char *ptr_arg, uint32 len_arg, uchar *null_ptr_arg,
|
Field_longstr(char *ptr_arg, uint32 len_arg, uchar *null_ptr_arg,
|
||||||
uchar null_bit_arg, utype unireg_check_arg,
|
uchar null_bit_arg, utype unireg_check_arg,
|
||||||
|
@ -215,8 +215,7 @@ ha_rows filesort(THD *thd, TABLE *table, SORT_FIELD *sortorder, uint s_length,
|
|||||||
sort_keys= table_sort.sort_keys;
|
sort_keys= table_sort.sort_keys;
|
||||||
if (memavl < min_sort_memory)
|
if (memavl < min_sort_memory)
|
||||||
{
|
{
|
||||||
my_error(ER_OUTOFMEMORY,MYF(ME_ERROR+ME_WAITTANG),
|
my_error(ER_OUT_OF_SORTMEMORY,MYF(ME_ERROR+ME_WAITTANG));
|
||||||
thd->variables.sortbuff_size);
|
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
if (open_cached_file(&buffpek_pointers,mysql_tmpdir,TEMP_PREFIX,
|
if (open_cached_file(&buffpek_pointers,mysql_tmpdir,TEMP_PREFIX,
|
||||||
|
@ -1381,6 +1381,13 @@ int ha_delete_table(THD *thd, enum db_type table_type, const char *path,
|
|||||||
handler *handler::clone(MEM_ROOT *mem_root)
|
handler *handler::clone(MEM_ROOT *mem_root)
|
||||||
{
|
{
|
||||||
handler *new_handler= get_new_handler(table, mem_root, table->s->db_type);
|
handler *new_handler= get_new_handler(table, mem_root, table->s->db_type);
|
||||||
|
/*
|
||||||
|
Allocate handler->ref here because otherwise ha_open will allocate it
|
||||||
|
on this->table->mem_root and we will not be able to reclaim that memory
|
||||||
|
when the clone handler object is destroyed.
|
||||||
|
*/
|
||||||
|
if (!(new_handler->ref= (byte*) alloc_root(mem_root, ALIGN_SIZE(ref_length)*2)))
|
||||||
|
return NULL;
|
||||||
if (new_handler && !new_handler->ha_open(table->s->path, table->db_stat,
|
if (new_handler && !new_handler->ha_open(table->s->path, table->db_stat,
|
||||||
HA_OPEN_IGNORE_IF_LOCKED))
|
HA_OPEN_IGNORE_IF_LOCKED))
|
||||||
return new_handler;
|
return new_handler;
|
||||||
@ -1420,8 +1427,9 @@ int handler::ha_open(const char *name, int mode, int test_if_locked)
|
|||||||
(void) extra(HA_EXTRA_NO_READCHECK); // Not needed in SQL
|
(void) extra(HA_EXTRA_NO_READCHECK); // Not needed in SQL
|
||||||
|
|
||||||
DBUG_ASSERT(alloc_root_inited(&table->mem_root));
|
DBUG_ASSERT(alloc_root_inited(&table->mem_root));
|
||||||
|
/* ref is already allocated for us if we're called from handler::clone() */
|
||||||
if (!(ref= (byte*) alloc_root(&table->mem_root, ALIGN_SIZE(ref_length)*2)))
|
if (!ref && !(ref= (byte*) alloc_root(&table->mem_root,
|
||||||
|
ALIGN_SIZE(ref_length)*2)))
|
||||||
{
|
{
|
||||||
close();
|
close();
|
||||||
error=HA_ERR_OUT_OF_MEM;
|
error=HA_ERR_OUT_OF_MEM;
|
||||||
|
67
sql/item.cc
67
sql/item.cc
@ -3907,6 +3907,18 @@ bool Item_field::fix_fields(THD *thd, Item **reference)
|
|||||||
else if (!from_field)
|
else if (!from_field)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
|
if (!outer_fixed && cached_table && cached_table->select_lex &&
|
||||||
|
context->select_lex &&
|
||||||
|
cached_table->select_lex != context->select_lex)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
if ((ret= fix_outer_field(thd, &from_field, reference)) < 0)
|
||||||
|
goto error;
|
||||||
|
else if (!ret)
|
||||||
|
return FALSE;
|
||||||
|
outer_fixed= 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if it is not expression from merged VIEW we will set this field.
|
if it is not expression from merged VIEW we will set this field.
|
||||||
|
|
||||||
@ -3922,18 +3934,6 @@ bool Item_field::fix_fields(THD *thd, Item **reference)
|
|||||||
if (from_field == view_ref_found)
|
if (from_field == view_ref_found)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (!outer_fixed && cached_table && cached_table->select_lex &&
|
|
||||||
context->select_lex &&
|
|
||||||
cached_table->select_lex != context->select_lex)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
if ((ret= fix_outer_field(thd, &from_field, reference)) < 0)
|
|
||||||
goto error;
|
|
||||||
else if (!ret)
|
|
||||||
return FALSE;
|
|
||||||
outer_fixed= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
set_field(from_field);
|
set_field(from_field);
|
||||||
if (thd->lex->in_sum_func &&
|
if (thd->lex->in_sum_func &&
|
||||||
thd->lex->in_sum_func->nest_level ==
|
thd->lex->in_sum_func->nest_level ==
|
||||||
@ -4306,6 +4306,49 @@ String *Item::check_well_formed_result(String *str, bool send_error)
|
|||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Compare two items using a given collation
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
eq_by_collation()
|
||||||
|
item item to compare with
|
||||||
|
binary_cmp TRUE <-> compare as binaries
|
||||||
|
cs collation to use when comparing strings
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
This method works exactly as Item::eq if the collation cs coincides with
|
||||||
|
the collation of the compared objects. Otherwise, first the collations that
|
||||||
|
differ from cs are replaced for cs and then the items are compared by
|
||||||
|
Item::eq. After the comparison the original collations of items are
|
||||||
|
restored.
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
1 compared items has been detected as equal
|
||||||
|
0 otherwise
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool Item::eq_by_collation(Item *item, bool binary_cmp, CHARSET_INFO *cs)
|
||||||
|
{
|
||||||
|
CHARSET_INFO *save_cs= 0;
|
||||||
|
CHARSET_INFO *save_item_cs= 0;
|
||||||
|
if (collation.collation != cs)
|
||||||
|
{
|
||||||
|
save_cs= collation.collation;
|
||||||
|
collation.collation= cs;
|
||||||
|
}
|
||||||
|
if (item->collation.collation != cs)
|
||||||
|
{
|
||||||
|
save_item_cs= item->collation.collation;
|
||||||
|
item->collation.collation= cs;
|
||||||
|
}
|
||||||
|
bool res= eq(item, binary_cmp);
|
||||||
|
if (save_cs)
|
||||||
|
collation.collation= save_cs;
|
||||||
|
if (save_item_cs)
|
||||||
|
item->collation.collation= save_item_cs;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Create a field to hold a string value from an item
|
Create a field to hold a string value from an item
|
||||||
|
@ -873,6 +873,7 @@ public:
|
|||||||
virtual Field::geometry_type get_geometry_type() const
|
virtual Field::geometry_type get_geometry_type() const
|
||||||
{ return Field::GEOM_GEOMETRY; };
|
{ return Field::GEOM_GEOMETRY; };
|
||||||
String *check_well_formed_result(String *str, bool send_error= 0);
|
String *check_well_formed_result(String *str, bool send_error= 0);
|
||||||
|
bool eq_by_collation(Item *item, bool binary_cmp, CHARSET_INFO *cs);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -2995,6 +2995,9 @@ void in_string::set(uint pos,Item *item)
|
|||||||
{
|
{
|
||||||
if (res->uses_buffer_owned_by(str))
|
if (res->uses_buffer_owned_by(str))
|
||||||
res->copy();
|
res->copy();
|
||||||
|
if (item->type() == Item::FUNC_ITEM)
|
||||||
|
str->copy(*res);
|
||||||
|
else
|
||||||
*str= *res;
|
*str= *res;
|
||||||
}
|
}
|
||||||
if (!str->charset())
|
if (!str->charset())
|
||||||
|
@ -5515,6 +5515,8 @@ Item_func_sp::make_field(Send_field *tmp_field)
|
|||||||
DBUG_ENTER("Item_func_sp::make_field");
|
DBUG_ENTER("Item_func_sp::make_field");
|
||||||
DBUG_ASSERT(sp_result_field);
|
DBUG_ASSERT(sp_result_field);
|
||||||
sp_result_field->make_field(tmp_field);
|
sp_result_field->make_field(tmp_field);
|
||||||
|
if (name)
|
||||||
|
tmp_field->col_name= name;
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2238,10 +2238,6 @@ static void init_signals(void)
|
|||||||
struct sigaction sa;
|
struct sigaction sa;
|
||||||
DBUG_ENTER("init_signals");
|
DBUG_ENTER("init_signals");
|
||||||
|
|
||||||
if (test_flags & TEST_SIGINT)
|
|
||||||
{
|
|
||||||
my_sigset(thr_kill_signal, end_thread_signal);
|
|
||||||
}
|
|
||||||
my_sigset(THR_SERVER_ALARM,print_signal_warning); // Should never be called!
|
my_sigset(THR_SERVER_ALARM,print_signal_warning); // Should never be called!
|
||||||
|
|
||||||
if (!(test_flags & TEST_NO_STACKTRACE) || (test_flags & TEST_CORE_ON_SIGNAL))
|
if (!(test_flags & TEST_NO_STACKTRACE) || (test_flags & TEST_CORE_ON_SIGNAL))
|
||||||
@ -2278,7 +2274,6 @@ static void init_signals(void)
|
|||||||
(void) sigemptyset(&set);
|
(void) sigemptyset(&set);
|
||||||
my_sigset(SIGPIPE,SIG_IGN);
|
my_sigset(SIGPIPE,SIG_IGN);
|
||||||
sigaddset(&set,SIGPIPE);
|
sigaddset(&set,SIGPIPE);
|
||||||
sigaddset(&set,SIGINT);
|
|
||||||
#ifndef IGNORE_SIGHUP_SIGQUIT
|
#ifndef IGNORE_SIGHUP_SIGQUIT
|
||||||
sigaddset(&set,SIGQUIT);
|
sigaddset(&set,SIGQUIT);
|
||||||
sigaddset(&set,SIGHUP);
|
sigaddset(&set,SIGHUP);
|
||||||
@ -2300,9 +2295,12 @@ static void init_signals(void)
|
|||||||
sigaddset(&set,THR_SERVER_ALARM);
|
sigaddset(&set,THR_SERVER_ALARM);
|
||||||
if (test_flags & TEST_SIGINT)
|
if (test_flags & TEST_SIGINT)
|
||||||
{
|
{
|
||||||
|
my_sigset(thr_kill_signal, end_thread_signal);
|
||||||
// May be SIGINT
|
// May be SIGINT
|
||||||
sigdelset(&set, thr_kill_signal);
|
sigdelset(&set, thr_kill_signal);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
sigaddset(&set,SIGINT);
|
||||||
sigprocmask(SIG_SETMASK,&set,NULL);
|
sigprocmask(SIG_SETMASK,&set,NULL);
|
||||||
pthread_sigmask(SIG_SETMASK,&set,NULL);
|
pthread_sigmask(SIG_SETMASK,&set,NULL);
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
@ -5798,7 +5796,7 @@ log and this option does nothing anymore.",
|
|||||||
"Data file autoextend increment in megabytes",
|
"Data file autoextend increment in megabytes",
|
||||||
(gptr*) &srv_auto_extend_increment,
|
(gptr*) &srv_auto_extend_increment,
|
||||||
(gptr*) &srv_auto_extend_increment,
|
(gptr*) &srv_auto_extend_increment,
|
||||||
0, GET_LONG, REQUIRED_ARG, 8L, 1L, 1000L, 0, 1L, 0},
|
0, GET_ULONG, REQUIRED_ARG, 8L, 1L, 1000L, 0, 1L, 0},
|
||||||
{"innodb_buffer_pool_awe_mem_mb", OPT_INNODB_BUFFER_POOL_AWE_MEM_MB,
|
{"innodb_buffer_pool_awe_mem_mb", OPT_INNODB_BUFFER_POOL_AWE_MEM_MB,
|
||||||
"If Windows AWE is used, the size of InnoDB buffer pool allocated from the AWE memory.",
|
"If Windows AWE is used, the size of InnoDB buffer pool allocated from the AWE memory.",
|
||||||
(gptr*) &innobase_buffer_pool_awe_mem_mb, (gptr*) &innobase_buffer_pool_awe_mem_mb, 0,
|
(gptr*) &innobase_buffer_pool_awe_mem_mb, (gptr*) &innobase_buffer_pool_awe_mem_mb, 0,
|
||||||
@ -5811,7 +5809,7 @@ log and this option does nothing anymore.",
|
|||||||
{"innodb_commit_concurrency", OPT_INNODB_COMMIT_CONCURRENCY,
|
{"innodb_commit_concurrency", OPT_INNODB_COMMIT_CONCURRENCY,
|
||||||
"Helps in performance tuning in heavily concurrent environments.",
|
"Helps in performance tuning in heavily concurrent environments.",
|
||||||
(gptr*) &srv_commit_concurrency, (gptr*) &srv_commit_concurrency,
|
(gptr*) &srv_commit_concurrency, (gptr*) &srv_commit_concurrency,
|
||||||
0, GET_LONG, REQUIRED_ARG, 0, 0, 1000, 0, 1, 0},
|
0, GET_ULONG, REQUIRED_ARG, 0, 0, 1000, 0, 1, 0},
|
||||||
{"innodb_concurrency_tickets", OPT_INNODB_CONCURRENCY_TICKETS,
|
{"innodb_concurrency_tickets", OPT_INNODB_CONCURRENCY_TICKETS,
|
||||||
"Number of times a thread is allowed to enter InnoDB within the same \
|
"Number of times a thread is allowed to enter InnoDB within the same \
|
||||||
SQL query after it has once got the ticket",
|
SQL query after it has once got the ticket",
|
||||||
|
@ -668,7 +668,9 @@ static ulong get_sort(uint count,...)
|
|||||||
{
|
{
|
||||||
for (; *str ; str++)
|
for (; *str ; str++)
|
||||||
{
|
{
|
||||||
if (*str == wild_many || *str == wild_one || *str == wild_prefix)
|
if (*str == wild_prefix && str[1])
|
||||||
|
str++;
|
||||||
|
else if (*str == wild_many || *str == wild_one)
|
||||||
{
|
{
|
||||||
wild_pos= (uint) (str - start) + 1;
|
wild_pos= (uint) (str - start) + 1;
|
||||||
break;
|
break;
|
||||||
|
@ -2887,7 +2887,9 @@ merge_key_fields(KEY_FIELD *start,KEY_FIELD *new_fields,KEY_FIELD *end,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (old->eq_func && new_fields->eq_func &&
|
else if (old->eq_func && new_fields->eq_func &&
|
||||||
old->val->eq(new_fields->val, old->field->binary()))
|
old->val->eq_by_collation(new_fields->val,
|
||||||
|
old->field->binary(),
|
||||||
|
old->field->charset()))
|
||||||
|
|
||||||
{
|
{
|
||||||
old->level= and_level;
|
old->level= and_level;
|
||||||
|
@ -3045,15 +3045,15 @@ column_def:
|
|||||||
;
|
;
|
||||||
|
|
||||||
key_def:
|
key_def:
|
||||||
key_type opt_ident key_alg '(' key_list ')'
|
key_type opt_ident key_alg '(' key_list ')' key_alg
|
||||||
{
|
{
|
||||||
LEX *lex=Lex;
|
LEX *lex=Lex;
|
||||||
Key *key= new Key($1, $2, $3, 0, lex->col_list);
|
Key *key= new Key($1, $2, $7 ? $7 : $3, 0, lex->col_list);
|
||||||
lex->alter_info.key_list.push_back(key);
|
lex->alter_info.key_list.push_back(key);
|
||||||
|
|
||||||
lex->col_list.empty(); /* Alloced by sql_alloc */
|
lex->col_list.empty(); /* Alloced by sql_alloc */
|
||||||
}
|
}
|
||||||
| opt_constraint constraint_key_type opt_ident key_alg '(' key_list ')'
|
| opt_constraint constraint_key_type opt_ident key_alg '(' key_list ')' key_alg
|
||||||
{
|
{
|
||||||
LEX *lex=Lex;
|
LEX *lex=Lex;
|
||||||
const char *key_name= $3 ? $3:$1;
|
const char *key_name= $3 ? $3:$1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user