[Pkg-mysql-commits] r1231 - in branches/etch-5.0/debian: . patches
Norbert Tretkowski
nobse at alioth.debian.org
Thu May 15 17:46:09 UTC 2008
tags 464218 pending
thanks
Author: nobse
Date: 2008-05-15 17:46:08 +0000 (Thu, 15 May 2008)
New Revision: 1231
Added:
branches/etch-5.0/debian/patches/50_explain_crash.dpatch
Modified:
branches/etch-5.0/debian/changelog
branches/etch-5.0/debian/patches/00list
Log:
Fix crash in EXPLAIN caused by certain queries that used uncorrelated scalar subqueries.
Modified: branches/etch-5.0/debian/changelog
===================================================================
--- branches/etch-5.0/debian/changelog 2008-05-15 16:21:31 UTC (rev 1230)
+++ branches/etch-5.0/debian/changelog 2008-05-15 17:46:08 UTC (rev 1231)
@@ -1,3 +1,10 @@
+mysql-dfsg-5.0 (5.0.32-7etch6) stable-proposed-updates; urgency=low
+
+ * Fix crash in EXPLAIN caused by certain queries that used uncorrelated
+ scalar subqueries. (closes: #464218)
+
+ -- Norbert Tretkowski <nobse at debian.org> Thu, 15 May 2008 19:41:40 +0200
+
mysql-dfsg-5.0 (5.0.32-7etch5) stable-security; urgency=high
* SECURITY:
Modified: branches/etch-5.0/debian/patches/00list
===================================================================
--- branches/etch-5.0/debian/patches/00list 2008-05-15 16:21:31 UTC (rev 1230)
+++ branches/etch-5.0/debian/patches/00list 2008-05-15 17:46:08 UTC (rev 1231)
@@ -28,3 +28,4 @@
95_SECURITY_CVE-2007-5969.dpatch
95_SECURITY_CVE-2007-6304.dpatch
96_SECURITY_CVE-2008-0226+0227.dpatch
+50_explain_crash.dpatch
Added: branches/etch-5.0/debian/patches/50_explain_crash.dpatch
===================================================================
--- branches/etch-5.0/debian/patches/50_explain_crash.dpatch (rev 0)
+++ branches/etch-5.0/debian/patches/50_explain_crash.dpatch 2008-05-15 17:46:08 UTC (rev 1231)
@@ -0,0 +1,128 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 50_explain_crash.dpatch by Norbert Tretkowski <nobse at debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Certain queries that used uncorrelated scalar subqueries caused
+## DP: EXPLAIN to crash. (Bug#27807)
+
+ at DPATCH@
+--- 1.511/sql/sql_select.cc 2007-04-21 19:27:34 +03:00
++++ 1.512/sql/sql_select.cc 2007-05-04 10:48:50 +03:00
+@@ -1426,14 +1426,13 @@ JOIN::optimize()
+ }
+ }
+
+- if (select_lex->uncacheable && !is_top_level_join())
+- {
+- /* If this join belongs to an uncacheable subquery */
+- if (!(tmp_join= (JOIN*)thd->alloc(sizeof(JOIN))))
+- DBUG_RETURN(-1);
+- error= 0; // Ensure that tmp_join.error= 0
+- restore_tmp();
+- }
++ /*
++ If this join belongs to an uncacheable subquery save
++ the original join
++ */
++ if (select_lex->uncacheable && !is_top_level_join() &&
++ init_save_join_tab())
++ DBUG_RETURN(-1);
+ }
+
+ error= 0;
+@@ -1493,6 +1492,27 @@ JOIN::reinit()
+ }
+
+ DBUG_RETURN(0);
++}
++
++/**
++ @brief Save the original join layout
++
++ @details Saves the original join layout so it can be reused in
++ re-execution and for EXPLAIN.
++
++ @return Operation status
++ @retval 0 success.
++ @retval 1 error occurred.
++*/
++
++bool
++JOIN::init_save_join_tab()
++{
++ if (!(tmp_join= (JOIN*)thd->alloc(sizeof(JOIN))))
++ return 1;
++ error= 0; // Ensure that tmp_join.error= 0
++ restore_tmp();
++ return 0;
+ }
+
+
+
+--- 1.117/sql/sql_select.h 2007-03-22 18:49:45 +02:00
++++ 1.118/sql/sql_select.h 2007-05-04 10:48:50 +03:00
+@@ -434,6 +434,7 @@ public:
+ void cleanup(bool full);
+ void clear();
+ bool save_join_tab();
++ bool init_save_join_tab();
+ bool send_row_on_empty_set()
+ {
+ return (do_send_rows && tmp_table_param.sum_func_count != 0 &&
+
+--- 1.185/mysql-test/r/subselect.result 2007-04-20 13:26:57 +03:00
++++ 1.186/mysql-test/r/subselect.result 2007-05-04 10:48:50 +03:00
+@@ -4012,3 +4012,11 @@ WHERE (SELECT COUNT(t0.b) FROM t1 t WHER
+ ERROR HY000: Invalid use of group function
+ SET @@sql_mode=default;
+ DROP TABLE t1;
++CREATE TABLE t1 (a int, b int, KEY (a));
++INSERT INTO t1 VALUES (1,1),(2,1);
++EXPLAIN SELECT 1 FROM t1 WHERE a = (SELECT COUNT(*) FROM t1 GROUP BY b);
++id select_type table type possible_keys key key_len ref rows Extra
++1 PRIMARY t1 ref a a 5 const 1 Using where; Using index
++2 SUBQUERY t1 ALL NULL NULL NULL NULL 2 Using temporary; Using filesort
++DROP TABLE t1;
++End of 5.0 tests.
+
+--- 1.149/mysql-test/t/subselect.test 2007-04-15 08:22:35 +03:00
++++ 1.150/mysql-test/t/subselect.test 2007-05-04 10:48:50 +03:00
+@@ -2845,3 +2845,13 @@ SELECT a FROM t1 t0
+ SET @@sql_mode=default;
+
+ DROP TABLE t1;
++
++#
++# Bug #27807: Server crash when executing subquery with EXPLAIN
++#
++CREATE TABLE t1 (a int, b int, KEY (a));
++INSERT INTO t1 VALUES (1,1),(2,1);
++EXPLAIN SELECT 1 FROM t1 WHERE a = (SELECT COUNT(*) FROM t1 GROUP BY b);
++DROP TABLE t1;
++
++--echo End of 5.0 tests.
+
+--- 1.155/sql/item_subselect.cc 2007-03-28 20:46:37 +03:00
++++ 1.156/sql/item_subselect.cc 2007-05-04 10:48:50 +03:00
+@@ -1774,6 +1774,21 @@ int subselect_single_select_engine::exec
+ thd->lex->current_select= save_select;
+ DBUG_RETURN(join->error ? join->error : 1);
+ }
++ if (!select_lex->uncacheable && thd->lex->describe &&
++ !(join->select_options & SELECT_DESCRIBE) &&
++ join->need_tmp && item->const_item())
++ {
++ /*
++ Force join->join_tmp creation, because this subquery will be replaced
++ by a simple select from the materialization temp table by optimize()
++ called by EXPLAIN and we need to preserve the initial query structure
++ so we can display it.
++ */
++ select_lex->uncacheable|= UNCACHEABLE_EXPLAIN;
++ select_lex->master_unit()->uncacheable|= UNCACHEABLE_EXPLAIN;
++ if (join->init_save_join_tab())
++ DBUG_RETURN(1);
++ }
+ if (item->engine_changed)
+ {
+ DBUG_RETURN(1);
More information about the Pkg-mysql-commits
mailing list