From 026196c4ef3217491d22959bafde1cea40f9667b Mon Sep 17 00:00:00 2001 From: "igor@olga.mysql.com" <> Date: Wed, 13 Dec 2006 00:39:13 -0800 Subject: [PATCH] Fixed bug #25027. Removed an assertion that was not valid for the cases where the query in a prepared statement contained a single-row non-correlated subquery that was used as an argument of the IS NULL predicate. --- mysql-test/r/ps.result | 15 +++++++++++++++ mysql-test/t/ps.test | 18 ++++++++++++++++++ sql/sql_lex.cc | 1 - 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/ps.result b/mysql-test/r/ps.result index 234c12955d9..b5a9367c985 100644 --- a/mysql-test/r/ps.result +++ b/mysql-test/r/ps.result @@ -1514,4 +1514,19 @@ Variable_name Value Slow_queries 1 deallocate prepare no_index; deallocate prepare sq; +CREATE TABLE t1 (a int); +INSERT INTO t1 VALUES (1), (2); +CREATE TABLE t2 (b int); +INSERT INTO t2 VALUES (NULL); +SELECT a FROM t1 WHERE (SELECT b FROM t2) IS NULL; +a +1 +2 +PREPARE stmt FROM 'SELECT a FROM t1 WHERE (SELECT b FROM t2) IS NULL'; +EXECUTE stmt; +a +1 +2 +DEALLOCATE PREPARE stmt; +DROP TABLE t1,t2; End of 5.0 tests. diff --git a/mysql-test/t/ps.test b/mysql-test/t/ps.test index 547f9a766d1..9386436a1fd 100644 --- a/mysql-test/t/ps.test +++ b/mysql-test/t/ps.test @@ -1563,4 +1563,22 @@ execute sq; deallocate prepare no_index; deallocate prepare sq; +# +# Bug 25027: query with a single-row non-correlated subquery +# and IS NULL predicate +# + +CREATE TABLE t1 (a int); +INSERT INTO t1 VALUES (1), (2); +CREATE TABLE t2 (b int); +INSERT INTO t2 VALUES (NULL); + +SELECT a FROM t1 WHERE (SELECT b FROM t2) IS NULL; +PREPARE stmt FROM 'SELECT a FROM t1 WHERE (SELECT b FROM t2) IS NULL'; + +EXECUTE stmt; + +DEALLOCATE PREPARE stmt; +DROP TABLE t1,t2; + --echo End of 5.0 tests. diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 3de842c8551..f5ec0c1161d 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -1903,7 +1903,6 @@ void st_select_lex_unit::set_limit(SELECT_LEX *sl) { ha_rows select_limit_val; - DBUG_ASSERT(! thd->stmt_arena->is_stmt_prepare()); select_limit_val= (ha_rows)(sl->select_limit ? sl->select_limit->val_uint() : HA_POS_ERROR); offset_limit_cnt= (ha_rows)(sl->offset_limit ? sl->offset_limit->val_uint() :