Bug #119833 Inconsistent behaviour between normal and prepared SELECT on subquery
Submitted: 2 Feb 12:57 Modified: 3 Feb 13:17
Reporter: chi zhang Email Updates:
Status: Not a Bug Impact on me:
None 
Category:MySQL Server Severity:S1 (Critical)
Version:9.5.0 OS:Any
Assigned to: CPU Architecture:Any

[2 Feb 12:57] chi zhang
Description:
Hi,

In the following test case, there are two equivalent queries, one is a normal SELECT, the other is a prepared SELECT. However, the normal SELECT returns results, but the prepared SELECT triggers an error.

```
CREATE TABLE t0(c0 FLOAT );
CREATE TABLE t2(c0 MEDIUMTEXT) ;
REPLACE INTO t2(c0) VALUES(0.8754431017962703), (NULL);
REPLACE INTO t0(c0) VALUES(NULL), (2.078465997E9);
SELECT ALL (SELECT ALL COUNT(IF((SELECT ALL LEAST("2", t0.c0) AS ref0 FROM t0), (CAST(2 AS DECIMAL)) >= (CAST(1 AS DECIMAL)), 1)) AS ref1 FROM t2) AS ref2 FROM t0; -- 2, 2
SET @b = 1965920423;
SET @c = 2;
SET @d = 1;
PREPARE prepare_query FROM 'SELECT ALL (SELECT COUNT(IF((SELECT LEAST("2", t0.c0) AS ref0 FROM t0), (CAST(? AS DECIMAL)) >= (CAST(? AS DECIMAL)), 1)) AS ref1 FROM t2) AS ref2 FROM t0';
EXECUTE prepare_query USING @b,@c; -- Subquery returns more than 1 row
```

How to repeat:
```
CREATE TABLE t0(c0 FLOAT );
CREATE TABLE t2(c0 MEDIUMTEXT) ;
REPLACE INTO t2(c0) VALUES(0.8754431017962703), (NULL);
REPLACE INTO t0(c0) VALUES(NULL), (2.078465997E9);
SELECT ALL (SELECT ALL COUNT(IF((SELECT ALL LEAST("2", t0.c0) AS ref0 FROM t0), (CAST(2 AS DECIMAL)) >= (CAST(1 AS DECIMAL)), 1)) AS ref1 FROM t2) AS ref2 FROM t0; -- 2, 2
SET @b = 1965920423;
SET @c = 2;
SET @d = 1;
PREPARE prepare_query FROM 'SELECT ALL (SELECT COUNT(IF((SELECT LEAST("2", t0.c0) AS ref0 FROM t0), (CAST(? AS DECIMAL)) >= (CAST(? AS DECIMAL)), 1)) AS ref1 FROM t2) AS ref2 FROM t0';
EXECUTE prepare_query USING @b,@c; -- Subquery returns more than 1 row
```
[3 Feb 13:15] Roy Lyseng
Thank you for the bug report.
However this is not a bug.
There is no guarantee that a regular and a prepared statement
will evaluate the exact same query plan.
[3 Feb 13:17] chi zhang
Hi Roy Lyseng,

Thanks for your reply! I have a small question that why the error is triggered in the prepared statement but not in the normal SELECT