merge
This commit is contained in:
commit
96d45ed2f6
@ -1898,6 +1898,37 @@ 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'яэюя'))
|
||||||
|
122587
|
||||||
|
SELECT LENGTH(RPAD(0.0115E88, 61297, _utf8'йцуя'));
|
||||||
|
LENGTH(RPAD(0.0115E88, 61297, _utf8'йцуя'))
|
||||||
|
122587
|
||||||
|
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
|
||||||
Start of 5.4 tests
|
Start of 5.4 tests
|
||||||
SET NAMES utf8mb3;
|
SET NAMES utf8mb3;
|
||||||
SHOW VARIABLES LIKE 'character_set_results%';
|
SHOW VARIABLES LIKE 'character_set_results%';
|
||||||
|
@ -271,4 +271,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.
|
||||||
|
@ -652,4 +652,49 @@ 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
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect INTEGER value: 'test'
|
||||||
|
Warning 1292 Truncated incorrect INTEGER value: 'test'
|
||||||
|
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
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect INTEGER value: 'test'
|
||||||
|
Warning 1292 Truncated incorrect INTEGER value: 'test'
|
||||||
|
EXECUTE stmt;
|
||||||
|
1
|
||||||
|
1
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect INTEGER value: 'test'
|
||||||
|
Warning 1292 Truncated incorrect INTEGER value: 'test'
|
||||||
|
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
|
||||||
|
@ -1038,6 +1038,14 @@ 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
|
||||||
DROP TABLE IF EXISTS t1, t2;
|
DROP TABLE IF EXISTS t1, t2;
|
||||||
CREATE TABLE t1 (a VARCHAR(6), b INT);
|
CREATE TABLE t1 (a VARCHAR(6), b INT);
|
||||||
|
@ -481,6 +481,18 @@ RAND(i)
|
|||||||
0.15522042769493574
|
0.15522042769493574
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
#
|
#
|
||||||
|
# Bug#57477 SIGFPE when dividing a huge number a negative number
|
||||||
|
#
|
||||||
|
SELECT -9999999999999999991 DIV -1;
|
||||||
|
ERROR 22003: BIGINT value is out of range in '(-(9999999999999999991) DIV -(1))'
|
||||||
|
SELECT -9223372036854775808 DIV -1;
|
||||||
|
ERROR 22003: BIGINT value is out of range in '(-(9223372036854775808) DIV -(1))'
|
||||||
|
SELECT -9223372036854775808 MOD -1;
|
||||||
|
-9223372036854775808 MOD -1
|
||||||
|
0
|
||||||
|
SELECT -9223372036854775808999 MOD -1;
|
||||||
|
-9223372036854775808999 MOD -1
|
||||||
|
0
|
||||||
select 123456789012345678901234567890.123456789012345678901234567890 div 1 as x;
|
select 123456789012345678901234567890.123456789012345678901234567890 div 1 as x;
|
||||||
ERROR 22003: BIGINT value is out of range in '(123456789012345678901234567890.123456789012345678901234567890 DIV 1)'
|
ERROR 22003: BIGINT value is out of range in '(123456789012345678901234567890.123456789012345678901234567890 DIV 1)'
|
||||||
select "123456789012345678901234567890.123456789012345678901234567890" div 1 as x;
|
select "123456789012345678901234567890.123456789012345678901234567890" div 1 as x;
|
||||||
|
@ -351,6 +351,12 @@ 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
|
||||||
#
|
#
|
||||||
# Bug #52165: Assertion failed: file .\dtoa.c, line 465
|
# Bug #52165: Assertion failed: file .\dtoa.c, line 465
|
||||||
#
|
#
|
||||||
@ -382,3 +388,4 @@ CREATE TABLE t1 (a INT);
|
|||||||
SELECT 1 from t1 HAVING NAME_CONST('', a);
|
SELECT 1 from t1 HAVING NAME_CONST('', a);
|
||||||
ERROR HY000: Incorrect arguments to NAME_CONST
|
ERROR HY000: Incorrect arguments to NAME_CONST
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
End of tests
|
||||||
|
@ -1846,6 +1846,16 @@ 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
|
||||||
#
|
#
|
||||||
# Bug#49771: Incorrect MIN (date) when minimum value is 0000-00-00
|
# Bug#49771: Incorrect MIN (date) when minimum value is 0000-00-00
|
||||||
|
@ -1402,4 +1402,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#54747: Deadlock between REORGANIZE PARTITION and
|
# Bug#54747: Deadlock between REORGANIZE PARTITION and
|
||||||
# SELECT is not detected
|
# SELECT is not detected
|
||||||
#
|
#
|
||||||
|
@ -1439,6 +1439,25 @@ 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
|
||||||
|
|
||||||
--echo Start of 5.4 tests
|
--echo Start of 5.4 tests
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -238,4 +238,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.
|
||||||
|
@ -594,4 +594,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
|
||||||
|
@ -738,6 +738,17 @@ 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
|
||||||
|
|
||||||
|
@ -316,6 +316,14 @@ 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 #
|
||||||
|
--error ER_DATA_OUT_OF_RANGE
|
||||||
|
SELECT -9999999999999999991 DIV -1;
|
||||||
|
--error ER_DATA_OUT_OF_RANGE
|
||||||
|
SELECT -9223372036854775808 DIV -1;
|
||||||
|
SELECT -9223372036854775808 MOD -1;
|
||||||
|
SELECT -9223372036854775808999 MOD -1;
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug #8457: Precision math:
|
# Bug #8457: Precision math:
|
||||||
|
@ -480,6 +480,13 @@ 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 #
|
--echo #
|
||||||
--echo # Bug #52165: Assertion failed: file .\dtoa.c, line 465
|
--echo # Bug #52165: Assertion failed: file .\dtoa.c, line 465
|
||||||
--echo #
|
--echo #
|
||||||
@ -516,3 +523,4 @@ SELECT 1 from t1 HAVING NAME_CONST('', a);
|
|||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo End of tests
|
||||||
|
@ -1236,6 +1236,17 @@ 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
|
||||||
|
@ -8,6 +8,31 @@ 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#54747: Deadlock between REORGANIZE PARTITION and
|
--echo # Bug#54747: Deadlock between REORGANIZE PARTITION and
|
||||||
--echo # SELECT is not detected
|
--echo # SELECT is not detected
|
||||||
@ -109,6 +134,7 @@ SELECT * FROM t1;
|
|||||||
COMMIT;
|
COMMIT;
|
||||||
DROP TABLE t1;
|
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 #
|
||||||
@ -551,6 +577,19 @@ connection default;
|
|||||||
--echo # Connection default
|
--echo # Connection default
|
||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
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;
|
DROP TABLE t1;
|
||||||
--enable_parsing
|
--enable_parsing
|
||||||
|
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -4425,8 +4425,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++)
|
||||||
{
|
{
|
||||||
@ -4661,6 +4665,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)
|
||||||
@ -4685,6 +4690,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)
|
||||||
|
@ -5734,7 +5734,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)
|
||||||
{
|
{
|
||||||
|
@ -1595,7 +1595,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);
|
||||||
|
@ -1184,6 +1184,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);
|
||||||
@ -2725,6 +2739,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
|
||||||
@ -2814,6 +2842,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)
|
||||||
|
@ -1910,21 +1910,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 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3395,8 +3395,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 "));
|
||||||
@ -3404,7 +3402,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)
|
||||||
{
|
{
|
||||||
@ -3413,7 +3411,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
|
||||||
|
@ -1756,6 +1756,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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2513,6 +2516,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
|
||||||
{
|
{
|
||||||
@ -13435,6 +13445,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 ||
|
||||||
@ -13448,7 +13460,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;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user