#At file:///home/psergey/dev/mysql-5.1-bugteam-fixes/
2708 Sergey Petrunia 2008-08-19
BUG#36135: void Diagnostics_area::set_eof_status(THD*): Assertion `! is_set()' failed.
- Before sending EOF, check if we've already sent an error.
modified:
mysql-test/r/subselect3.result
mysql-test/t/subselect3.test
sql/sql_class.cc
per-file messages:
mysql-test/r/subselect3.result
BUG#36135: void Diagnostics_area::set_eof_status(THD*): Assertion `! is_set()' failed.
- Testcase
mysql-test/t/subselect3.test
BUG#36135: void Diagnostics_area::set_eof_status(THD*): Assertion `! is_set()' failed.
- Testcase
sql/sql_class.cc
BUG#36135: void Diagnostics_area::set_eof_status(THD*): Assertion `! is_set()' failed.
- Before sending EOF, check if we've already sent an error.
=== modified file 'mysql-test/r/subselect3.result'
--- a/mysql-test/r/subselect3.result 2008-04-23 06:06:26 +0000
+++ b/mysql-test/r/subselect3.result 2008-08-19 13:15:29 +0000
@@ -1,4 +1,4 @@
-drop table if exists t0, t1, t2, t3, t4;
+drop table if exists t0, t1, t2, t3, t4, t5;
create table t1 (oref int, grp int, ie int) ;
insert into t1 (oref, grp, ie) values
(1, 1, 1),
@@ -780,3 +780,29 @@ SELECT 1 FROM t1 WHERE t1.a NOT IN (SELE
1
DROP TABLE t1, t2;
End of 5.0 tests
+create table t0 (a int);
+insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
+create table t1 (
+a int(11) default null,
+b int(11) default null,
+key (a)
+);
+insert into t1 select A.a+10*(B.a+10*C.a),A.a+10*(B.a+10*C.a) from t0 A, t0 B, t0 C;
+create table t2 (a int(11) default null);
+insert into t2 values (0),(1);
+create table t3 (a int(11) default null);
+insert into t3 values (0),(1);
+create table t4 (a int(11) default null);
+insert into t4 values (0),(1);
+create table t5 (a int(11) default null);
+insert into t5 values (0),(1),(0),(1);
+select * from t2, t3
+where
+t2.a < 10 and
+t3.a+1 = 2 and
+t3.a in (select t1.b from t1
+where t1.a+1=t1.a+1 and
+t1.a < (select t4.a+10
+from t4, t5 limit 2));
+ERROR 21000: Subquery returns more than 1 row
+drop table t0, t1, t2, t3, t4, t5;
=== modified file 'mysql-test/t/subselect3.test'
--- a/mysql-test/t/subselect3.test 2008-04-23 06:06:26 +0000
+++ b/mysql-test/t/subselect3.test 2008-08-19 13:15:29 +0000
@@ -1,5 +1,5 @@
--disable_warnings
-drop table if exists t0, t1, t2, t3, t4;
+drop table if exists t0, t1, t2, t3, t4, t5;
--enable_warnings
#
@@ -619,3 +619,42 @@ SELECT 1 FROM t1 WHERE t1.a NOT IN (SELE
DROP TABLE t1, t2;
--echo End of 5.0 tests
+
+#
+# BUG#36135 "void Diagnostics_area::set_eof_status(THD*): Assertion `!is_set()' failed."
+#
+create table t0 (a int);
+insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
+
+create table t1 (
+ a int(11) default null,
+ b int(11) default null,
+ key (a)
+);
+# produce numbers 0..999
+insert into t1 select A.a+10*(B.a+10*C.a),A.a+10*(B.a+10*C.a) from t0 A, t0 B, t0 C;
+
+create table t2 (a int(11) default null);
+insert into t2 values (0),(1);
+
+create table t3 (a int(11) default null);
+insert into t3 values (0),(1);
+
+create table t4 (a int(11) default null);
+insert into t4 values (0),(1);
+
+create table t5 (a int(11) default null);
+insert into t5 values (0),(1),(0),(1);
+
+# this must not fail assertion
+--error 1242
+select * from t2, t3
+where
+ t2.a < 10 and
+ t3.a+1 = 2 and
+ t3.a in (select t1.b from t1
+ where t1.a+1=t1.a+1 and
+ t1.a < (select t4.a+10
+ from t4, t5 limit 2));
+
+drop table t0, t1, t2, t3, t4, t5;
=== modified file 'sql/sql_class.cc'
--- a/sql/sql_class.cc 2008-07-15 01:43:12 +0000
+++ b/sql/sql_class.cc 2008-08-19 13:15:29 +0000
@@ -1580,6 +1580,12 @@ bool select_send::send_eof()
mysql_unlock_tables(thd, thd->lock);
thd->lock=0;
}
+ /*
+ Don't send EOF if we're in error condition (which implies we've already
+ sent or are sending an error)
+ */
+ if (thd->is_error())
+ return TRUE;
::my_eof(thd);
is_result_set_started= 0;
return FALSE;
| Thread |
|---|
| • bzr commit into mysql-5.1 branch (sergefp:2708) Bug#36135 | Sergey Petrunia | 19 Aug |