merge
This commit is contained in:
commit
c5987223db
@ -12,7 +12,7 @@ dnl
|
|||||||
dnl When changing the major version number please also check the switch
|
dnl When changing the major version number please also check the switch
|
||||||
dnl statement in mysqlbinlog::check_master_version(). You may also need
|
dnl statement in mysqlbinlog::check_master_version(). You may also need
|
||||||
dnl to update version.c in ndb.
|
dnl to update version.c in ndb.
|
||||||
AC_INIT([MySQL Server], [5.1.54], [], [mysql])
|
AC_INIT([MySQL Server], [5.1.55], [], [mysql])
|
||||||
|
|
||||||
AC_CONFIG_SRCDIR([sql/mysqld.cc])
|
AC_CONFIG_SRCDIR([sql/mysqld.cc])
|
||||||
AC_CANONICAL_SYSTEM
|
AC_CANONICAL_SYSTEM
|
||||||
|
@ -1898,3 +1898,34 @@ CONVERT(a, CHAR) CONVERT(b, CHAR)
|
|||||||
70000 1092
|
70000 1092
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
SELECT LENGTH(RPAD(0.0115E88, 61297, _utf8'яэюя'));
|
||||||
|
LENGTH(RPAD(0.0115E88, 61297, _utf8'яэюя'))
|
||||||
|
61297
|
||||||
|
SELECT LENGTH(RPAD(0.0115E88, 61297, _utf8'йцуя'));
|
||||||
|
LENGTH(RPAD(0.0115E88, 61297, _utf8'йцуя'))
|
||||||
|
61297
|
||||||
|
SELECT HEX(RPAD(0x20, 2, _utf8 0xD18F));
|
||||||
|
HEX(RPAD(0x20, 2, _utf8 0xD18F))
|
||||||
|
20D1
|
||||||
|
SELECT HEX(RPAD(0x20, 4, _utf8 0xD18F));
|
||||||
|
HEX(RPAD(0x20, 4, _utf8 0xD18F))
|
||||||
|
20D18FD1
|
||||||
|
SELECT HEX(LPAD(0x20, 2, _utf8 0xD18F));
|
||||||
|
HEX(LPAD(0x20, 2, _utf8 0xD18F))
|
||||||
|
D120
|
||||||
|
SELECT HEX(LPAD(0x20, 4, _utf8 0xD18F));
|
||||||
|
HEX(LPAD(0x20, 4, _utf8 0xD18F))
|
||||||
|
D18FD120
|
||||||
|
SELECT HEX(RPAD(_utf8 0xD18F, 3, 0x20));
|
||||||
|
HEX(RPAD(_utf8 0xD18F, 3, 0x20))
|
||||||
|
D18F20
|
||||||
|
SELECT HEX(LPAD(_utf8 0xD18F, 3, 0x20));
|
||||||
|
HEX(LPAD(_utf8 0xD18F, 3, 0x20))
|
||||||
|
20D18F
|
||||||
|
SELECT HEX(INSERT(_utf8 0xD18F, 2, 1, 0x20));
|
||||||
|
HEX(INSERT(_utf8 0xD18F, 2, 1, 0x20))
|
||||||
|
D120
|
||||||
|
SELECT HEX(INSERT(_utf8 0xD18FD18E, 2, 1, 0x20));
|
||||||
|
HEX(INSERT(_utf8 0xD18FD18E, 2, 1, 0x20))
|
||||||
|
D120D18E
|
||||||
|
End of 5.1 tests
|
||||||
|
@ -251,4 +251,50 @@ EXPLAIN SELECT c1 FROM t1 WHERE c2 = 1 AND c4 = 1 AND c5 = 1;
|
|||||||
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 ref c2,c2_2 c2 10 const,const 3 Using where
|
1 SIMPLE t1 ref c2,c2_2 c2 10 const,const 3 Using where
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Bug#56814 Explain + subselect + fulltext crashes server
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(f1 VARCHAR(6) NOT NULL,
|
||||||
|
FULLTEXT KEY(f1),UNIQUE(f1));
|
||||||
|
INSERT INTO t1 VALUES ('test');
|
||||||
|
EXPLAIN SELECT 1 FROM t1
|
||||||
|
WHERE 1 > ALL((SELECT 1 FROM t1 JOIN t1 a ON (MATCH(t1.f1) AGAINST (""))
|
||||||
|
WHERE t1.f1 GROUP BY t1.f1));
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY t1 system NULL NULL NULL NULL 1
|
||||||
|
2 SUBQUERY a system NULL NULL NULL NULL 1 Using filesort
|
||||||
|
2 SUBQUERY t1 fulltext f1 f1 0 1 Using where
|
||||||
|
PREPARE stmt FROM
|
||||||
|
'EXPLAIN SELECT 1 FROM t1
|
||||||
|
WHERE 1 > ALL((SELECT 1 FROM t1 RIGHT OUTER JOIN t1 a
|
||||||
|
ON (MATCH(t1.f1) AGAINST (""))
|
||||||
|
WHERE t1.f1 GROUP BY t1.f1))';
|
||||||
|
EXECUTE stmt;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY t1 system NULL NULL NULL NULL 1
|
||||||
|
2 SUBQUERY a system NULL NULL NULL NULL 1 Using filesort
|
||||||
|
2 SUBQUERY t1 fulltext f1 f1 0 1 Using where
|
||||||
|
EXECUTE stmt;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY t1 system NULL NULL NULL NULL 1
|
||||||
|
2 SUBQUERY a system NULL NULL NULL NULL 1 Using filesort
|
||||||
|
2 SUBQUERY t1 fulltext f1 f1 0 1 Using where
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
PREPARE stmt FROM
|
||||||
|
'EXPLAIN SELECT 1 FROM t1
|
||||||
|
WHERE 1 > ALL((SELECT 1 FROM t1 JOIN t1 a
|
||||||
|
ON (MATCH(t1.f1) AGAINST (""))
|
||||||
|
WHERE t1.f1 GROUP BY t1.f1))';
|
||||||
|
EXECUTE stmt;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY t1 system NULL NULL NULL NULL 1
|
||||||
|
2 SUBQUERY a system NULL NULL NULL NULL 1 Using filesort
|
||||||
|
2 SUBQUERY t1 fulltext f1 f1 0 1 Using where
|
||||||
|
EXECUTE stmt;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY t1 system NULL NULL NULL NULL 1
|
||||||
|
2 SUBQUERY a system NULL NULL NULL NULL 1 Using filesort
|
||||||
|
2 SUBQUERY t1 fulltext f1 f1 0 1 Using where
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.1 tests.
|
End of 5.1 tests.
|
||||||
|
@ -644,4 +644,40 @@ Table Op Msg_type Msg_text
|
|||||||
test.t1 repair status OK
|
test.t1 repair status OK
|
||||||
SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size;
|
SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Bug#54484 explain + prepared statement: crash and Got error -1 from storage engine
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(f1 VARCHAR(6) NOT NULL, FULLTEXT KEY(f1), UNIQUE(f1));
|
||||||
|
INSERT INTO t1 VALUES ('test');
|
||||||
|
SELECT 1 FROM t1 WHERE 1 >
|
||||||
|
ALL((SELECT 1 FROM t1 JOIN t1 a
|
||||||
|
ON (MATCH(t1.f1) against (""))
|
||||||
|
WHERE t1.f1 GROUP BY t1.f1)) xor f1;
|
||||||
|
1
|
||||||
|
1
|
||||||
|
PREPARE stmt FROM
|
||||||
|
'SELECT 1 FROM t1 WHERE 1 >
|
||||||
|
ALL((SELECT 1 FROM t1 RIGHT OUTER JOIN t1 a
|
||||||
|
ON (MATCH(t1.f1) against (""))
|
||||||
|
WHERE t1.f1 GROUP BY t1.f1)) xor f1';
|
||||||
|
EXECUTE stmt;
|
||||||
|
1
|
||||||
|
1
|
||||||
|
EXECUTE stmt;
|
||||||
|
1
|
||||||
|
1
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
PREPARE stmt FROM
|
||||||
|
'SELECT 1 FROM t1 WHERE 1 >
|
||||||
|
ALL((SELECT 1 FROM t1 JOIN t1 a
|
||||||
|
ON (MATCH(t1.f1) against (""))
|
||||||
|
WHERE t1.f1 GROUP BY t1.f1))';
|
||||||
|
EXECUTE stmt;
|
||||||
|
1
|
||||||
|
1
|
||||||
|
EXECUTE stmt;
|
||||||
|
1
|
||||||
|
1
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
@ -1029,4 +1029,12 @@ GROUP_CONCAT(t1.a ORDER BY t1.a)
|
|||||||
1,1,2,2
|
1,1,2,2
|
||||||
DEALLOCATE PREPARE stmt;
|
DEALLOCATE PREPARE stmt;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Bug#57194 group_concat cause crash and/or invalid memory reads with type errors
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(f1 int);
|
||||||
|
INSERT INTO t1 values (0),(0);
|
||||||
|
SELECT POLYGON((SELECT 1 FROM (SELECT 1 IN (GROUP_CONCAT(t1.f1)) FROM t1, t1 t GROUP BY t.f1 ) d));
|
||||||
|
ERROR 22007: Illegal non geometric '(select 1 from (select (1 = group_concat(`test`.`t1`.`f1` separator ',')) AS `1 IN (GROUP_CONCAT(t1.f1))` from `test`.`t1` join `test`.`t1` `t` group by `t`.`f1`) `d`)' value found during parsing
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
@ -482,4 +482,20 @@ RAND(i)
|
|||||||
0.155220427694936
|
0.155220427694936
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
#
|
#
|
||||||
|
# Bug#57477 SIGFPE when dividing a huge number a negative number
|
||||||
|
#
|
||||||
|
SELECT -9999999999999999991 DIV -1;
|
||||||
|
-9999999999999999991 DIV -1
|
||||||
|
-9223372036854775808
|
||||||
|
Warnings:
|
||||||
|
Error 1292 Truncated incorrect DECIMAL value: ''
|
||||||
|
SELECT -9223372036854775808 DIV -1;
|
||||||
|
-9223372036854775808 DIV -1
|
||||||
|
-9223372036854775808
|
||||||
|
SELECT -9223372036854775808 MOD -1;
|
||||||
|
-9223372036854775808 MOD -1
|
||||||
|
0
|
||||||
|
SELECT -9223372036854775808999 MOD -1;
|
||||||
|
-9223372036854775808999 MOD -1
|
||||||
|
0
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
@ -351,4 +351,10 @@ GREATEST(a, (SELECT b FROM t1 LIMIT 1))
|
|||||||
3
|
3
|
||||||
1
|
1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
SELECT INET_NTOA(0);
|
||||||
|
INET_NTOA(0)
|
||||||
|
0.0.0.0
|
||||||
|
SELECT '1' IN ('1', INET_NTOA(0));
|
||||||
|
'1' IN ('1', INET_NTOA(0))
|
||||||
|
1
|
||||||
End of tests
|
End of tests
|
||||||
|
@ -1845,4 +1845,14 @@ SELECT SUBSTRING(a,1,10), LENGTH(a) FROM t1 GROUP BY a;
|
|||||||
SUBSTRING(a,1,10) LENGTH(a)
|
SUBSTRING(a,1,10) LENGTH(a)
|
||||||
1111111111 1300
|
1111111111 1300
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Bug#57688 Assertion `!table || (!table->write_set || bitmap_is_set(table->write_set, field
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(f1 INT NOT NULL);
|
||||||
|
INSERT INTO t1 VALUES (16777214),(0);
|
||||||
|
SELECT COUNT(*) FROM t1 LEFT JOIN t1 t2
|
||||||
|
ON 1 WHERE t2.f1 > 1 GROUP BY t2.f1;
|
||||||
|
COUNT(*)
|
||||||
|
2
|
||||||
|
DROP TABLE t1;
|
||||||
# End of 5.1 tests
|
# End of 5.1 tests
|
||||||
|
@ -1397,4 +1397,34 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
|||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select straight_join `test`.`jt1`.`f1` AS `f1` from `test`.`t1` `jt6` left join (`test`.`t1` `jt3` join `test`.`t1` `jt4` left join `test`.`t1` `jt5` on(1) left join `test`.`t1` `jt2` on(1)) on((`test`.`jt6`.`f1` and 1)) left join `test`.`t1` `jt1` on(1) where 1
|
Note 1003 select straight_join `test`.`jt1`.`f1` AS `f1` from `test`.`t1` `jt6` left join (`test`.`t1` `jt3` join `test`.`t1` `jt4` left join `test`.`t1` `jt5` on(1) left join `test`.`t1` `jt2` on(1)) on((`test`.`jt6`.`f1` and 1)) left join `test`.`t1` `jt1` on(1) where 1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# Bug#57688 Assertion `!table || (!table->write_set || bitmap_is_set(table->write_set, field
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (f1 INT NOT NULL, PRIMARY KEY (f1));
|
||||||
|
CREATE TABLE t2 (f1 INT NOT NULL, f2 INT NOT NULL, PRIMARY KEY (f1, f2));
|
||||||
|
INSERT INTO t1 VALUES (4);
|
||||||
|
INSERT INTO t2 VALUES (3, 3);
|
||||||
|
INSERT INTO t2 VALUES (7, 7);
|
||||||
|
EXPLAIN SELECT * FROM t1 LEFT JOIN t2 ON t2.f1 = t1.f1
|
||||||
|
WHERE t1.f1 = 4
|
||||||
|
GROUP BY t2.f1, t2.f2;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 system PRIMARY NULL NULL NULL 1 Using temporary; Using filesort
|
||||||
|
1 SIMPLE t2 ref PRIMARY PRIMARY 4 const 1 Using index
|
||||||
|
SELECT * FROM t1 LEFT JOIN t2 ON t2.f1 = t1.f1
|
||||||
|
WHERE t1.f1 = 4
|
||||||
|
GROUP BY t2.f1, t2.f2;
|
||||||
|
f1 f1 f2
|
||||||
|
4 NULL NULL
|
||||||
|
EXPLAIN SELECT * FROM t1 LEFT JOIN t2 ON t2.f1 = t1.f1
|
||||||
|
WHERE t1.f1 = 4 AND t2.f1 IS NOT NULL AND t2.f2 IS NOT NULL
|
||||||
|
GROUP BY t2.f1, t2.f2;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 system PRIMARY NULL NULL NULL 1 Using filesort
|
||||||
|
1 SIMPLE t2 ref PRIMARY PRIMARY 4 const 1 Using where; Using index
|
||||||
|
SELECT * FROM t1 LEFT JOIN t2 ON t2.f1 = t1.f1
|
||||||
|
WHERE t1.f1 = 4 AND t2.f1 IS NOT NULL AND t2.f2 IS NOT NULL
|
||||||
|
GROUP BY t2.f1, t2.f2;
|
||||||
|
f1 f1 f2
|
||||||
|
DROP TABLE t1,t2;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
@ -1,5 +1,31 @@
|
|||||||
drop table if exists t1, t2;
|
drop table if exists t1, t2;
|
||||||
#
|
#
|
||||||
|
# Bug#56287: crash when using Partition datetime in sub in query
|
||||||
|
#
|
||||||
|
CREATE TABLE t1
|
||||||
|
(c1 bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
c2 varchar(40) not null default '',
|
||||||
|
c3 datetime not NULL,
|
||||||
|
PRIMARY KEY (c1,c3),
|
||||||
|
KEY partidx(c3))
|
||||||
|
ENGINE=InnoDB
|
||||||
|
PARTITION BY RANGE (TO_DAYS(c3))
|
||||||
|
(PARTITION p200912 VALUES LESS THAN (to_days('2010-01-01')),
|
||||||
|
PARTITION p201103 VALUES LESS THAN (to_days('2011-04-01')),
|
||||||
|
PARTITION p201912 VALUES LESS THAN MAXVALUE);
|
||||||
|
insert into t1(c2,c3) values ("Test row",'2010-01-01 00:00:00');
|
||||||
|
SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 't1' AND TABLE_SCHEMA = 'test';
|
||||||
|
PARTITION_NAME TABLE_ROWS
|
||||||
|
p200912 0
|
||||||
|
p201103 1
|
||||||
|
p201912 0
|
||||||
|
SELECT count(*) FROM t1 p where c3 in
|
||||||
|
(select c3 from t1 t where t.c3 < date '2011-04-26 19:19:44'
|
||||||
|
and t.c3 > date '2011-04-26 19:18:44') ;
|
||||||
|
count(*)
|
||||||
|
0
|
||||||
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
# Bug#51830: Incorrect partition pruning on range partition (regression)
|
# Bug#51830: Incorrect partition pruning on range partition (regression)
|
||||||
#
|
#
|
||||||
CREATE TABLE t1 (a INT NOT NULL)
|
CREATE TABLE t1 (a INT NOT NULL)
|
||||||
@ -387,3 +413,9 @@ a b
|
|||||||
3 2003-03-03
|
3 2003-03-03
|
||||||
COMMIT;
|
COMMIT;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (i1 int NOT NULL primary key, f1 int) ENGINE = InnoDB
|
||||||
|
PARTITION BY HASH(i1) PARTITIONS 2;
|
||||||
|
INSERT INTO t1 VALUES (1,1), (2,2);
|
||||||
|
SELECT * FROM t1 WHERE i1 = ( SELECT i1 FROM t1 WHERE f1=0 LIMIT 1 );
|
||||||
|
i1 f1
|
||||||
|
DROP TABLE t1;
|
||||||
|
6
mysql-test/suite/innodb_plugin/r/innodb_bug56947.result
Normal file
6
mysql-test/suite/innodb_plugin/r/innodb_bug56947.result
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
create table bug56947(a int not null) engine = innodb;
|
||||||
|
CREATE TABLE `bug56947#1`(a int) ENGINE=InnoDB;
|
||||||
|
alter table bug56947 add unique index (a);
|
||||||
|
ERROR HY000: Table 'test.bug56947#1' already exists
|
||||||
|
drop table `bug56947#1`;
|
||||||
|
drop table bug56947;
|
11
mysql-test/suite/innodb_plugin/t/innodb_bug56947.test
Normal file
11
mysql-test/suite/innodb_plugin/t/innodb_bug56947.test
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#
|
||||||
|
# Bug #56947 valgrind reports a memory leak in innodb-plugin.innodb-index
|
||||||
|
#
|
||||||
|
-- source include/have_innodb_plugin.inc
|
||||||
|
|
||||||
|
create table bug56947(a int not null) engine = innodb;
|
||||||
|
CREATE TABLE `bug56947#1`(a int) ENGINE=InnoDB;
|
||||||
|
--error 156
|
||||||
|
alter table bug56947 add unique index (a);
|
||||||
|
drop table `bug56947#1`;
|
||||||
|
drop table bug56947;
|
@ -1466,3 +1466,23 @@ SELECT CONVERT(a, CHAR), CONVERT(b, CHAR) from t1 GROUP BY b;
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #57272: crash in rpad() when using utf8
|
||||||
|
#
|
||||||
|
SELECT LENGTH(RPAD(0.0115E88, 61297, _utf8'яэюя'));
|
||||||
|
SELECT LENGTH(RPAD(0.0115E88, 61297, _utf8'йцуя'));
|
||||||
|
SELECT HEX(RPAD(0x20, 2, _utf8 0xD18F));
|
||||||
|
SELECT HEX(RPAD(0x20, 4, _utf8 0xD18F));
|
||||||
|
SELECT HEX(LPAD(0x20, 2, _utf8 0xD18F));
|
||||||
|
SELECT HEX(LPAD(0x20, 4, _utf8 0xD18F));
|
||||||
|
|
||||||
|
SELECT HEX(RPAD(_utf8 0xD18F, 3, 0x20));
|
||||||
|
SELECT HEX(LPAD(_utf8 0xD18F, 3, 0x20));
|
||||||
|
|
||||||
|
SELECT HEX(INSERT(_utf8 0xD18F, 2, 1, 0x20));
|
||||||
|
SELECT HEX(INSERT(_utf8 0xD18FD18E, 2, 1, 0x20));
|
||||||
|
|
||||||
|
|
||||||
|
--echo End of 5.1 tests
|
||||||
|
@ -228,4 +228,40 @@ EXPLAIN SELECT c1 FROM t1 WHERE c2 = 1 AND c4 = 1 AND c5 = 1;
|
|||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#56814 Explain + subselect + fulltext crashes server
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1(f1 VARCHAR(6) NOT NULL,
|
||||||
|
FULLTEXT KEY(f1),UNIQUE(f1));
|
||||||
|
INSERT INTO t1 VALUES ('test');
|
||||||
|
|
||||||
|
EXPLAIN SELECT 1 FROM t1
|
||||||
|
WHERE 1 > ALL((SELECT 1 FROM t1 JOIN t1 a ON (MATCH(t1.f1) AGAINST (""))
|
||||||
|
WHERE t1.f1 GROUP BY t1.f1));
|
||||||
|
|
||||||
|
PREPARE stmt FROM
|
||||||
|
'EXPLAIN SELECT 1 FROM t1
|
||||||
|
WHERE 1 > ALL((SELECT 1 FROM t1 RIGHT OUTER JOIN t1 a
|
||||||
|
ON (MATCH(t1.f1) AGAINST (""))
|
||||||
|
WHERE t1.f1 GROUP BY t1.f1))';
|
||||||
|
|
||||||
|
EXECUTE stmt;
|
||||||
|
EXECUTE stmt;
|
||||||
|
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
|
||||||
|
PREPARE stmt FROM
|
||||||
|
'EXPLAIN SELECT 1 FROM t1
|
||||||
|
WHERE 1 > ALL((SELECT 1 FROM t1 JOIN t1 a
|
||||||
|
ON (MATCH(t1.f1) AGAINST (""))
|
||||||
|
WHERE t1.f1 GROUP BY t1.f1))';
|
||||||
|
|
||||||
|
EXECUTE stmt;
|
||||||
|
EXECUTE stmt;
|
||||||
|
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo End of 5.1 tests.
|
--echo End of 5.1 tests.
|
||||||
|
@ -585,4 +585,40 @@ REPAIR TABLE t1;
|
|||||||
SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size;
|
SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#54484 explain + prepared statement: crash and Got error -1 from storage engine
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1(f1 VARCHAR(6) NOT NULL, FULLTEXT KEY(f1), UNIQUE(f1));
|
||||||
|
INSERT INTO t1 VALUES ('test');
|
||||||
|
|
||||||
|
SELECT 1 FROM t1 WHERE 1 >
|
||||||
|
ALL((SELECT 1 FROM t1 JOIN t1 a
|
||||||
|
ON (MATCH(t1.f1) against (""))
|
||||||
|
WHERE t1.f1 GROUP BY t1.f1)) xor f1;
|
||||||
|
|
||||||
|
PREPARE stmt FROM
|
||||||
|
'SELECT 1 FROM t1 WHERE 1 >
|
||||||
|
ALL((SELECT 1 FROM t1 RIGHT OUTER JOIN t1 a
|
||||||
|
ON (MATCH(t1.f1) against (""))
|
||||||
|
WHERE t1.f1 GROUP BY t1.f1)) xor f1';
|
||||||
|
|
||||||
|
EXECUTE stmt;
|
||||||
|
EXECUTE stmt;
|
||||||
|
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
|
||||||
|
PREPARE stmt FROM
|
||||||
|
'SELECT 1 FROM t1 WHERE 1 >
|
||||||
|
ALL((SELECT 1 FROM t1 JOIN t1 a
|
||||||
|
ON (MATCH(t1.f1) against (""))
|
||||||
|
WHERE t1.f1 GROUP BY t1.f1))';
|
||||||
|
|
||||||
|
EXECUTE stmt;
|
||||||
|
EXECUTE stmt;
|
||||||
|
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
@ -734,4 +734,16 @@ EXECUTE stmt;
|
|||||||
DEALLOCATE PREPARE stmt;
|
DEALLOCATE PREPARE stmt;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#57194 group_concat cause crash and/or invalid memory reads with type errors
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1(f1 int);
|
||||||
|
INSERT INTO t1 values (0),(0);
|
||||||
|
--disable_ps_protocol
|
||||||
|
--error ER_ILLEGAL_VALUE_FOR_TYPE
|
||||||
|
SELECT POLYGON((SELECT 1 FROM (SELECT 1 IN (GROUP_CONCAT(t1.f1)) FROM t1, t1 t GROUP BY t.f1 ) d));
|
||||||
|
--enable_ps_protocol
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
@ -308,5 +308,11 @@ SELECT RAND(i) FROM t1;
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
|
--echo # Bug#57477 SIGFPE when dividing a huge number a negative number
|
||||||
|
--echo #
|
||||||
|
SELECT -9999999999999999991 DIV -1;
|
||||||
|
SELECT -9223372036854775808 DIV -1;
|
||||||
|
SELECT -9223372036854775808 MOD -1;
|
||||||
|
SELECT -9223372036854775808999 MOD -1;
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
@ -479,4 +479,12 @@ SELECT DISTINCT GREATEST(a, (SELECT b FROM t1 LIMIT 1)) FROM t1 UNION SELECT 1;
|
|||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #57283: inet_ntoa() crashes
|
||||||
|
#
|
||||||
|
SELECT INET_NTOA(0);
|
||||||
|
SELECT '1' IN ('1', INET_NTOA(0));
|
||||||
|
|
||||||
|
|
||||||
--echo End of tests
|
--echo End of tests
|
||||||
|
@ -1235,5 +1235,16 @@ SELECT SUBSTRING(a,1,10), LENGTH(a) FROM t1 GROUP BY a;
|
|||||||
SELECT SUBSTRING(a,1,10), LENGTH(a) FROM t1 GROUP BY a;
|
SELECT SUBSTRING(a,1,10), LENGTH(a) FROM t1 GROUP BY a;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#57688 Assertion `!table || (!table->write_set || bitmap_is_set(table->write_set, field
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1(f1 INT NOT NULL);
|
||||||
|
INSERT INTO t1 VALUES (16777214),(0);
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1 LEFT JOIN t1 t2
|
||||||
|
ON 1 WHERE t2.f1 > 1 GROUP BY t2.f1;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo # End of 5.1 tests
|
--echo # End of 5.1 tests
|
||||||
|
@ -981,4 +981,33 @@ EXPLAIN EXTENDED SELECT STRAIGHT_JOIN jt1.f1 FROM t1 AS jt1
|
|||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#57688 Assertion `!table || (!table->write_set || bitmap_is_set(table->write_set, field
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (f1 INT NOT NULL, PRIMARY KEY (f1));
|
||||||
|
CREATE TABLE t2 (f1 INT NOT NULL, f2 INT NOT NULL, PRIMARY KEY (f1, f2));
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (4);
|
||||||
|
INSERT INTO t2 VALUES (3, 3);
|
||||||
|
INSERT INTO t2 VALUES (7, 7);
|
||||||
|
|
||||||
|
EXPLAIN SELECT * FROM t1 LEFT JOIN t2 ON t2.f1 = t1.f1
|
||||||
|
WHERE t1.f1 = 4
|
||||||
|
GROUP BY t2.f1, t2.f2;
|
||||||
|
|
||||||
|
SELECT * FROM t1 LEFT JOIN t2 ON t2.f1 = t1.f1
|
||||||
|
WHERE t1.f1 = 4
|
||||||
|
GROUP BY t2.f1, t2.f2;
|
||||||
|
|
||||||
|
EXPLAIN SELECT * FROM t1 LEFT JOIN t2 ON t2.f1 = t1.f1
|
||||||
|
WHERE t1.f1 = 4 AND t2.f1 IS NOT NULL AND t2.f2 IS NOT NULL
|
||||||
|
GROUP BY t2.f1, t2.f2;
|
||||||
|
|
||||||
|
SELECT * FROM t1 LEFT JOIN t2 ON t2.f1 = t1.f1
|
||||||
|
WHERE t1.f1 = 4 AND t2.f1 IS NOT NULL AND t2.f2 IS NOT NULL
|
||||||
|
GROUP BY t2.f1, t2.f2;
|
||||||
|
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
@ -7,6 +7,30 @@ drop table if exists t1, t2;
|
|||||||
|
|
||||||
let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#56287: crash when using Partition datetime in sub in query
|
||||||
|
--echo #
|
||||||
|
CREATE TABLE t1
|
||||||
|
(c1 bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
|
c2 varchar(40) not null default '',
|
||||||
|
c3 datetime not NULL,
|
||||||
|
PRIMARY KEY (c1,c3),
|
||||||
|
KEY partidx(c3))
|
||||||
|
ENGINE=InnoDB
|
||||||
|
PARTITION BY RANGE (TO_DAYS(c3))
|
||||||
|
(PARTITION p200912 VALUES LESS THAN (to_days('2010-01-01')),
|
||||||
|
PARTITION p201103 VALUES LESS THAN (to_days('2011-04-01')),
|
||||||
|
PARTITION p201912 VALUES LESS THAN MAXVALUE);
|
||||||
|
|
||||||
|
insert into t1(c2,c3) values ("Test row",'2010-01-01 00:00:00');
|
||||||
|
|
||||||
|
SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 't1' AND TABLE_SCHEMA = 'test';
|
||||||
|
SELECT count(*) FROM t1 p where c3 in
|
||||||
|
(select c3 from t1 t where t.c3 < date '2011-04-26 19:19:44'
|
||||||
|
and t.c3 > date '2011-04-26 19:18:44') ;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # Bug#51830: Incorrect partition pruning on range partition (regression)
|
--echo # Bug#51830: Incorrect partition pruning on range partition (regression)
|
||||||
--echo #
|
--echo #
|
||||||
@ -401,3 +425,16 @@ connection default;
|
|||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
COMMIT;
|
COMMIT;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #55146 Assertion `m_part_spec.start_part == m_part_spec.end_part' in index_read_idx_map
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (i1 int NOT NULL primary key, f1 int) ENGINE = InnoDB
|
||||||
|
PARTITION BY HASH(i1) PARTITIONS 2;
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES (1,1), (2,2);
|
||||||
|
|
||||||
|
SELECT * FROM t1 WHERE i1 = ( SELECT i1 FROM t1 WHERE f1=0 LIMIT 1 );
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -113,7 +113,6 @@ int my_is_symlink(const char *filename __attribute__((unused)))
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Resolve all symbolic links in path
|
Resolve all symbolic links in path
|
||||||
'to' may be equal to 'filename'
|
'to' may be equal to 'filename'
|
||||||
@ -146,8 +145,24 @@ int my_realpath(char *to, const char *filename,
|
|||||||
result= -1;
|
result= -1;
|
||||||
}
|
}
|
||||||
DBUG_RETURN(result);
|
DBUG_RETURN(result);
|
||||||
|
#else
|
||||||
|
#ifdef _WIN32
|
||||||
|
int ret= GetFullPathName(filename,FN_REFLEN,
|
||||||
|
to,
|
||||||
|
NULL);
|
||||||
|
if (ret == 0 || ret > FN_REFLEN)
|
||||||
|
{
|
||||||
|
if (ret > FN_REFLEN)
|
||||||
|
my_errno= ENAMETOOLONG;
|
||||||
|
else
|
||||||
|
my_errno= EACCES;
|
||||||
|
if (MyFlags & MY_WME)
|
||||||
|
my_error(EE_REALPATH, MYF(0), filename, my_errno);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
my_load_path(to, filename, NullS);
|
my_load_path(to, filename, NullS);
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -4299,8 +4299,12 @@ int ha_partition::index_read_idx_map(uchar *buf, uint index,
|
|||||||
|
|
||||||
get_partition_set(table, buf, index, &m_start_key, &m_part_spec);
|
get_partition_set(table, buf, index, &m_start_key, &m_part_spec);
|
||||||
|
|
||||||
/* How can it be more than one partition with the current use? */
|
/*
|
||||||
DBUG_ASSERT(m_part_spec.start_part == m_part_spec.end_part);
|
We have either found exactly 1 partition
|
||||||
|
(in which case start_part == end_part)
|
||||||
|
or no matching partitions (start_part > end_part)
|
||||||
|
*/
|
||||||
|
DBUG_ASSERT(m_part_spec.start_part >= m_part_spec.end_part);
|
||||||
|
|
||||||
for (part= m_part_spec.start_part; part <= m_part_spec.end_part; part++)
|
for (part= m_part_spec.start_part; part <= m_part_spec.end_part; part++)
|
||||||
{
|
{
|
||||||
@ -4535,6 +4539,7 @@ int ha_partition::partition_scan_set_up(uchar * buf, bool idx_read_flag)
|
|||||||
key not found.
|
key not found.
|
||||||
*/
|
*/
|
||||||
DBUG_PRINT("info", ("scan with no partition to scan"));
|
DBUG_PRINT("info", ("scan with no partition to scan"));
|
||||||
|
table->status= STATUS_NOT_FOUND;
|
||||||
DBUG_RETURN(HA_ERR_END_OF_FILE);
|
DBUG_RETURN(HA_ERR_END_OF_FILE);
|
||||||
}
|
}
|
||||||
if (m_part_spec.start_part == m_part_spec.end_part)
|
if (m_part_spec.start_part == m_part_spec.end_part)
|
||||||
@ -4559,6 +4564,7 @@ int ha_partition::partition_scan_set_up(uchar * buf, bool idx_read_flag)
|
|||||||
if (start_part == MY_BIT_NONE)
|
if (start_part == MY_BIT_NONE)
|
||||||
{
|
{
|
||||||
DBUG_PRINT("info", ("scan with no partition to scan"));
|
DBUG_PRINT("info", ("scan with no partition to scan"));
|
||||||
|
table->status= STATUS_NOT_FOUND;
|
||||||
DBUG_RETURN(HA_ERR_END_OF_FILE);
|
DBUG_RETURN(HA_ERR_END_OF_FILE);
|
||||||
}
|
}
|
||||||
if (start_part > m_part_spec.start_part)
|
if (start_part > m_part_spec.start_part)
|
||||||
|
@ -1363,9 +1363,13 @@ longlong Item_func_int_div::val_int()
|
|||||||
signal_divide_by_null();
|
signal_divide_by_null();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return (unsigned_flag ?
|
|
||||||
(ulonglong) value / (ulonglong) val2 :
|
if (unsigned_flag)
|
||||||
value / val2);
|
return ((ulonglong) value / (ulonglong) val2);
|
||||||
|
else if (value == LONGLONG_MIN && val2 == -1)
|
||||||
|
return LONGLONG_MIN;
|
||||||
|
else
|
||||||
|
return value / val2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1399,9 +1403,9 @@ longlong Item_func_mod::int_op()
|
|||||||
if (args[0]->unsigned_flag)
|
if (args[0]->unsigned_flag)
|
||||||
result= args[1]->unsigned_flag ?
|
result= args[1]->unsigned_flag ?
|
||||||
((ulonglong) value) % ((ulonglong) val2) : ((ulonglong) value) % val2;
|
((ulonglong) value) % ((ulonglong) val2) : ((ulonglong) value) % val2;
|
||||||
else
|
else result= args[1]->unsigned_flag ?
|
||||||
result= args[1]->unsigned_flag ?
|
value % ((ulonglong) val2) :
|
||||||
value % ((ulonglong) val2) : value % val2;
|
(val2 == -1) ? 0 : value % val2;
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -5304,7 +5308,17 @@ void Item_func_match::init_search(bool no_order)
|
|||||||
|
|
||||||
/* Check if init_search() has been called before */
|
/* Check if init_search() has been called before */
|
||||||
if (ft_handler)
|
if (ft_handler)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
We should reset ft_handler as it is cleaned up
|
||||||
|
on destruction of FT_SELECT object
|
||||||
|
(necessary in case of re-execution of subquery).
|
||||||
|
TODO: FT_SELECT should not clean up ft_handler.
|
||||||
|
*/
|
||||||
|
if (join_key)
|
||||||
|
table->file->ft_handler= ft_handler;
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
|
}
|
||||||
|
|
||||||
if (key == NO_SUCH_KEY)
|
if (key == NO_SUCH_KEY)
|
||||||
{
|
{
|
||||||
|
@ -1531,7 +1531,7 @@ public:
|
|||||||
join_key(0), ft_handler(0), table(0), master(0), concat_ws(0) { }
|
join_key(0), ft_handler(0), table(0), master(0), concat_ws(0) { }
|
||||||
void cleanup()
|
void cleanup()
|
||||||
{
|
{
|
||||||
DBUG_ENTER("Item_func_match");
|
DBUG_ENTER("Item_func_match::cleanup");
|
||||||
Item_real_func::cleanup();
|
Item_real_func::cleanup();
|
||||||
if (!master && ft_handler)
|
if (!master && ft_handler)
|
||||||
ft_handler->please->close_search(ft_handler);
|
ft_handler->please->close_search(ft_handler);
|
||||||
|
@ -1013,6 +1013,20 @@ String *Item_func_insert::val_str(String *str)
|
|||||||
if ((length < 0) || (length > res->length()))
|
if ((length < 0) || (length > res->length()))
|
||||||
length= res->length();
|
length= res->length();
|
||||||
|
|
||||||
|
/*
|
||||||
|
There is one exception not handled (intentionaly) by the character set
|
||||||
|
aggregation code. If one string is strong side and is binary, and
|
||||||
|
another one is weak side and is a multi-byte character string,
|
||||||
|
then we need to operate on the second string in terms on bytes when
|
||||||
|
calling ::numchars() and ::charpos(), rather than in terms of characters.
|
||||||
|
Lets substitute its character set to binary.
|
||||||
|
*/
|
||||||
|
if (collation.collation == &my_charset_bin)
|
||||||
|
{
|
||||||
|
res->set_charset(&my_charset_bin);
|
||||||
|
res2->set_charset(&my_charset_bin);
|
||||||
|
}
|
||||||
|
|
||||||
/* start and length are now sufficiently valid to pass to charpos function */
|
/* start and length are now sufficiently valid to pass to charpos function */
|
||||||
start= res->charpos((int) start);
|
start= res->charpos((int) start);
|
||||||
length= res->charpos((int) length, (uint32) start);
|
length= res->charpos((int) length, (uint32) start);
|
||||||
@ -2514,6 +2528,20 @@ String *Item_func_rpad::val_str(String *str)
|
|||||||
/* Set here so that rest of code sees out-of-bound value as such. */
|
/* Set here so that rest of code sees out-of-bound value as such. */
|
||||||
if ((ulonglong) count > INT_MAX32)
|
if ((ulonglong) count > INT_MAX32)
|
||||||
count= INT_MAX32;
|
count= INT_MAX32;
|
||||||
|
/*
|
||||||
|
There is one exception not handled (intentionaly) by the character set
|
||||||
|
aggregation code. If one string is strong side and is binary, and
|
||||||
|
another one is weak side and is a multi-byte character string,
|
||||||
|
then we need to operate on the second string in terms on bytes when
|
||||||
|
calling ::numchars() and ::charpos(), rather than in terms of characters.
|
||||||
|
Lets substitute its character set to binary.
|
||||||
|
*/
|
||||||
|
if (collation.collation == &my_charset_bin)
|
||||||
|
{
|
||||||
|
res->set_charset(&my_charset_bin);
|
||||||
|
rpad->set_charset(&my_charset_bin);
|
||||||
|
}
|
||||||
|
|
||||||
if (count <= (res_char_length= res->numchars()))
|
if (count <= (res_char_length= res->numchars()))
|
||||||
{ // String to pad is big enough
|
{ // String to pad is big enough
|
||||||
res->length(res->charpos((int) count)); // Shorten result if longer
|
res->length(res->charpos((int) count)); // Shorten result if longer
|
||||||
@ -2616,6 +2644,20 @@ String *Item_func_lpad::val_str(String *str)
|
|||||||
if ((ulonglong) count > INT_MAX32)
|
if ((ulonglong) count > INT_MAX32)
|
||||||
count= INT_MAX32;
|
count= INT_MAX32;
|
||||||
|
|
||||||
|
/*
|
||||||
|
There is one exception not handled (intentionaly) by the character set
|
||||||
|
aggregation code. If one string is strong side and is binary, and
|
||||||
|
another one is weak side and is a multi-byte character string,
|
||||||
|
then we need to operate on the second string in terms on bytes when
|
||||||
|
calling ::numchars() and ::charpos(), rather than in terms of characters.
|
||||||
|
Lets substitute its character set to binary.
|
||||||
|
*/
|
||||||
|
if (collation.collation == &my_charset_bin)
|
||||||
|
{
|
||||||
|
res->set_charset(&my_charset_bin);
|
||||||
|
pad->set_charset(&my_charset_bin);
|
||||||
|
}
|
||||||
|
|
||||||
res_char_length= res->numchars();
|
res_char_length= res->numchars();
|
||||||
|
|
||||||
if (count <= res_char_length)
|
if (count <= res_char_length)
|
||||||
@ -3093,6 +3135,7 @@ String* Item_func_inet_ntoa::val_str(String* str)
|
|||||||
if ((null_value= (args[0]->null_value || n > (ulonglong) LL(4294967295))))
|
if ((null_value= (args[0]->null_value || n > (ulonglong) LL(4294967295))))
|
||||||
return 0; // Null value
|
return 0; // Null value
|
||||||
|
|
||||||
|
str->set_charset(collation.collation);
|
||||||
str->length(0);
|
str->length(0);
|
||||||
int4store(buf,n);
|
int4store(buf,n);
|
||||||
|
|
||||||
|
@ -1906,21 +1906,26 @@ int subselect_single_select_engine::exec()
|
|||||||
DBUG_RETURN(join->error ? join->error : 1);
|
DBUG_RETURN(join->error ? join->error : 1);
|
||||||
}
|
}
|
||||||
if (!select_lex->uncacheable && thd->lex->describe &&
|
if (!select_lex->uncacheable && thd->lex->describe &&
|
||||||
!(join->select_options & SELECT_DESCRIBE) &&
|
!(join->select_options & SELECT_DESCRIBE))
|
||||||
join->need_tmp)
|
|
||||||
{
|
{
|
||||||
item->update_used_tables();
|
item->update_used_tables();
|
||||||
if (item->const_item())
|
if (item->const_item())
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
It's necessary to keep original JOIN table because
|
||||||
|
create_sort_index() function may overwrite original
|
||||||
|
JOIN_TAB::type and wrong optimization method can be
|
||||||
|
selected on re-execution.
|
||||||
|
*/
|
||||||
|
select_lex->uncacheable|= UNCACHEABLE_EXPLAIN;
|
||||||
|
select_lex->master_unit()->uncacheable|= UNCACHEABLE_EXPLAIN;
|
||||||
/*
|
/*
|
||||||
Force join->join_tmp creation, because this subquery will be replaced
|
Force join->join_tmp creation, because this subquery will be replaced
|
||||||
by a simple select from the materialization temp table by optimize()
|
by a simple select from the materialization temp table by optimize()
|
||||||
called by EXPLAIN and we need to preserve the initial query structure
|
called by EXPLAIN and we need to preserve the initial query structure
|
||||||
so we can display it.
|
so we can display it.
|
||||||
*/
|
*/
|
||||||
select_lex->uncacheable|= UNCACHEABLE_EXPLAIN;
|
if (join->need_tmp && join->init_save_join_tab())
|
||||||
select_lex->master_unit()->uncacheable|= UNCACHEABLE_EXPLAIN;
|
|
||||||
if (join->init_save_join_tab())
|
|
||||||
DBUG_RETURN(1); /* purecov: inspected */
|
DBUG_RETURN(1); /* purecov: inspected */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3401,8 +3401,6 @@ String* Item_func_group_concat::val_str(String* str)
|
|||||||
|
|
||||||
void Item_func_group_concat::print(String *str, enum_query_type query_type)
|
void Item_func_group_concat::print(String *str, enum_query_type query_type)
|
||||||
{
|
{
|
||||||
/* orig_args is not filled with valid values until fix_fields() */
|
|
||||||
Item **pargs= fixed ? orig_args : args;
|
|
||||||
str->append(STRING_WITH_LEN("group_concat("));
|
str->append(STRING_WITH_LEN("group_concat("));
|
||||||
if (distinct)
|
if (distinct)
|
||||||
str->append(STRING_WITH_LEN("distinct "));
|
str->append(STRING_WITH_LEN("distinct "));
|
||||||
@ -3410,7 +3408,7 @@ void Item_func_group_concat::print(String *str, enum_query_type query_type)
|
|||||||
{
|
{
|
||||||
if (i)
|
if (i)
|
||||||
str->append(',');
|
str->append(',');
|
||||||
pargs[i]->print(str, query_type);
|
orig_args[i]->print(str, query_type);
|
||||||
}
|
}
|
||||||
if (arg_count_order)
|
if (arg_count_order)
|
||||||
{
|
{
|
||||||
@ -3419,7 +3417,7 @@ void Item_func_group_concat::print(String *str, enum_query_type query_type)
|
|||||||
{
|
{
|
||||||
if (i)
|
if (i)
|
||||||
str->append(',');
|
str->append(',');
|
||||||
pargs[i + arg_count_field]->print(str, query_type);
|
orig_args[i + arg_count_field]->print(str, query_type);
|
||||||
if (order[i]->asc)
|
if (order[i]->asc)
|
||||||
str->append(STRING_WITH_LEN(" ASC"));
|
str->append(STRING_WITH_LEN(" ASC"));
|
||||||
else
|
else
|
||||||
|
@ -1713,6 +1713,9 @@ JOIN::reinit()
|
|||||||
func->clear();
|
func->clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!(select_options & SELECT_DESCRIBE))
|
||||||
|
init_ftfuncs(thd, select_lex, test(order));
|
||||||
|
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2487,6 +2490,13 @@ mysql_select(THD *thd, Item ***rref_pointer_array,
|
|||||||
{
|
{
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
Original join tabs might be overwritten at first
|
||||||
|
subselect execution. So we need to restore them.
|
||||||
|
*/
|
||||||
|
Item_subselect *subselect= select_lex->master_unit()->item;
|
||||||
|
if (subselect && subselect->is_uncacheable() && join->reinit())
|
||||||
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -13206,6 +13216,8 @@ static bool
|
|||||||
list_contains_unique_index(TABLE *table,
|
list_contains_unique_index(TABLE *table,
|
||||||
bool (*find_func) (Field *, void *), void *data)
|
bool (*find_func) (Field *, void *), void *data)
|
||||||
{
|
{
|
||||||
|
if (table->pos_in_table_list->outer_join)
|
||||||
|
return 0;
|
||||||
for (uint keynr= 0; keynr < table->s->keys; keynr++)
|
for (uint keynr= 0; keynr < table->s->keys; keynr++)
|
||||||
{
|
{
|
||||||
if (keynr == table->s->primary_key ||
|
if (keynr == table->s->primary_key ||
|
||||||
@ -13219,7 +13231,7 @@ list_contains_unique_index(TABLE *table,
|
|||||||
key_part < key_part_end;
|
key_part < key_part_end;
|
||||||
key_part++)
|
key_part++)
|
||||||
{
|
{
|
||||||
if (key_part->field->maybe_null() ||
|
if (key_part->field->real_maybe_null() ||
|
||||||
!find_func(key_part->field, data))
|
!find_func(key_part->field, data))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1981,6 +1981,7 @@ row_create_table_for_mysql(
|
|||||||
table already exists */
|
table already exists */
|
||||||
|
|
||||||
trx->error_state = DB_SUCCESS;
|
trx->error_state = DB_SUCCESS;
|
||||||
|
dict_mem_table_free(table);
|
||||||
}
|
}
|
||||||
|
|
||||||
que_graph_free((que_t*) que_node_get_parent(thr));
|
que_graph_free((que_t*) que_node_get_parent(thr));
|
||||||
|
@ -86,9 +86,16 @@
|
|||||||
Fix Bug #57345 btr_pcur_store_position abort for load with
|
Fix Bug #57345 btr_pcur_store_position abort for load with
|
||||||
concurrent lock/unlock tables
|
concurrent lock/unlock tables
|
||||||
|
|
||||||
|
2010-10-11 The InnoDB Team
|
||||||
|
|
||||||
|
* row/row0mysql.c, innodb_bug56947.result, innodb_bug56947.test:
|
||||||
|
Fix Bug #56947 InnoDB leaks memory when failing to create a table
|
||||||
|
|
||||||
2010-10-06 The InnoDB Team
|
2010-10-06 The InnoDB Team
|
||||||
|
|
||||||
* row/row0mysql.c, innodb_bug57255.result, innodb_bug57255.test
|
* row/row0mysql.c, innodb_bug57255.result, innodb_bug57255.test
|
||||||
Fix Bug #Cascade Delete results in "Got error -1 from storage engine"
|
Fix Bug #57255 Cascade Delete results in "Got error -1 from
|
||||||
|
storage engine"
|
||||||
|
|
||||||
2010-09-27 The InnoDB Team
|
2010-09-27 The InnoDB Team
|
||||||
|
|
||||||
|
@ -1880,15 +1880,13 @@ err_exit:
|
|||||||
|
|
||||||
err = trx->error_state;
|
err = trx->error_state;
|
||||||
|
|
||||||
if (UNIV_UNLIKELY(err != DB_SUCCESS)) {
|
switch (err) {
|
||||||
|
case DB_SUCCESS:
|
||||||
|
break;
|
||||||
|
case DB_OUT_OF_FILE_SPACE:
|
||||||
trx->error_state = DB_SUCCESS;
|
trx->error_state = DB_SUCCESS;
|
||||||
trx_general_rollback_for_mysql(trx, NULL);
|
trx_general_rollback_for_mysql(trx, NULL);
|
||||||
/* TO DO: free table? The code below will dereference
|
|
||||||
table->name, though. */
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (err) {
|
|
||||||
case DB_OUT_OF_FILE_SPACE:
|
|
||||||
ut_print_timestamp(stderr);
|
ut_print_timestamp(stderr);
|
||||||
fputs(" InnoDB: Warning: cannot create table ",
|
fputs(" InnoDB: Warning: cannot create table ",
|
||||||
stderr);
|
stderr);
|
||||||
@ -1903,9 +1901,13 @@ err_exit:
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case DB_DUPLICATE_KEY:
|
case DB_DUPLICATE_KEY:
|
||||||
|
default:
|
||||||
/* We may also get err == DB_ERROR if the .ibd file for the
|
/* We may also get err == DB_ERROR if the .ibd file for the
|
||||||
table already exists */
|
table already exists */
|
||||||
|
|
||||||
|
trx->error_state = DB_SUCCESS;
|
||||||
|
trx_general_rollback_for_mysql(trx, NULL);
|
||||||
|
dict_mem_table_free(table);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user