diff options
author | Georgi Kodinov <kgeorge@mysql.com> | 2008-07-04 17:02:17 +0300 |
---|---|---|
committer | Georgi Kodinov <kgeorge@mysql.com> | 2008-07-04 17:02:17 +0300 |
commit | 0e1709bde6df12b392426582764702e736bcbb03 (patch) | |
tree | 9a1c27910c495b0186cf676a7ad9292bea084f27 /mysql-test/r | |
parent | b6b6d98fff188128b35e69da4679d0f0bb48239f (diff) | |
download | mariadb-git-0e1709bde6df12b392426582764702e736bcbb03.tar.gz |
Bug#37627: Killing query with sum(exists()) or avg(exists()) reproducibly crashes server
When there is an error executing EXISTS predicates they return NULL as their string
or decimal value but don't set the NULL value flag.
Fixed by returning 0 (as a decimal or a string) on error exectuting the subquery.
Note that we can't return NULL as EXISTS is not supposed to return NULL.
mysql-test/r/subselect.result:
Bug#37627: test case
mysql-test/t/subselect.test:
Bug#37627: test case
sql/item_subselect.cc:
Bug#37627: return decimal (or string) 0 isntead of a NULL pointer on
error calculating an EXISTS predicate.
Diffstat (limited to 'mysql-test/r')
-rw-r--r-- | mysql-test/r/subselect.result | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result index 923bc2254bd..04983ef19ab 100644 --- a/mysql-test/r/subselect.result +++ b/mysql-test/r/subselect.result @@ -4398,3 +4398,16 @@ INSERT INTO t1 VALUES (1), (3); SELECT * FROM t2 WHERE b NOT IN (SELECT max(t.c) FROM t1, t1 t WHERE t.c>10); a b DROP TABLE t1,t2; +CREATE TABLE t1(id INT); +INSERT INTO t1 VALUES (1),(2),(3),(4); +INSERT INTO t1 SELECT a.id FROM t1 a,t1 b,t1 c,t1 d; +INSERT INTO t1 SELECT a.id FROM t1 a,t1 b,t1 c; +SET SESSION debug="d,subselect_exec_fail"; +SELECT SUM(EXISTS(SELECT RAND() FROM t1)) FROM t1; +SUM(EXISTS(SELECT RAND() FROM t1)) +0 +SELECT REVERSE(EXISTS(SELECT RAND() FROM t1)); +REVERSE(EXISTS(SELECT RAND() FROM t1)) +0 +SET SESSION debug=DEFAULT; +DROP TABLE t1; |