[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