List:Commits« Previous MessageNext Message »
From:Sergey Glukhov Date:October 5 2011 10:29am
Subject:bzr push into mysql-5.5 branch (sergey.glukhov:3568 to 3569)
View as plain text  
 3569 Sergey Glukhov	2011-10-05 [merge]
      automerge

 3568 Sergey Glukhov	2011-10-05 [merge]
      automerge
     @ storage/innobase/include/sync0rw.ic
        automerge
     @ storage/innobase/sync/sync0rw.c
        automerge

    modified:
      storage/innobase/include/sync0rw.ic
      storage/innobase/sync/sync0rw.c
=== modified file 'mysql-test/r/error_simulation.result'
--- a/mysql-test/r/error_simulation.result	2010-06-24 13:21:23 +0000
+++ b/mysql-test/r/error_simulation.result	2011-10-05 09:28:20 +0000
@@ -83,5 +83,18 @@ a	a	b	filler
 SET SESSION debug = DEFAULT;
 DROP TABLE t1, t2;
 #
+# Bug#11747970 34660: CRASH WHEN FEDERATED TABLE LOSES CONNECTION DURING INSERT ... SELECT
+#
+CREATE TABLE t1(f1 INT, KEY(f1));
+CREATE TABLE t2(f1 INT);
+INSERT INTO t1 VALUES (1),(2);
+INSERT INTO t2 VALUES (1),(2);
+SET SESSION debug='d,bug11747970_simulate_error';
+INSERT IGNORE INTO t2 SELECT f1 FROM t1 a WHERE NOT EXISTS (SELECT 1 FROM t2 b WHERE a.f1 = b.f1);
+Warnings:
+Error	1105	Unknown error
+SET SESSION debug = DEFAULT;
+DROP TABLE t1,t2;
+#
 # End of 5.1 tests
 #

=== modified file 'mysql-test/t/error_simulation.test'
--- a/mysql-test/t/error_simulation.test	2010-06-30 09:17:27 +0000
+++ b/mysql-test/t/error_simulation.test	2011-10-05 09:55:51 +0000
@@ -89,6 +89,20 @@ SET SESSION debug = DEFAULT;
 
 DROP TABLE t1, t2;
 
+
+--echo #
+--echo # Bug#11747970 34660: CRASH WHEN FEDERATED TABLE LOSES CONNECTION DURING INSERT ... SELECT
+--echo #
+CREATE TABLE t1(f1 INT, KEY(f1));
+CREATE TABLE t2(f1 INT);
+INSERT INTO t1 VALUES (1),(2);
+INSERT INTO t2 VALUES (1),(2);
+SET SESSION debug='d,bug11747970_simulate_error';
+INSERT IGNORE INTO t2 SELECT f1 FROM t1 a WHERE NOT EXISTS (SELECT 1 FROM t2 b WHERE a.f1 = b.f1);
+SET SESSION debug = DEFAULT;
+DROP TABLE t1,t2;
+
+
 --echo #
 --echo # End of 5.1 tests
 --echo #

=== modified file 'sql/item_subselect.cc'
--- a/sql/item_subselect.cc	2011-07-07 09:42:14 +0000
+++ b/sql/item_subselect.cc	2011-10-05 09:55:51 +0000
@@ -1690,7 +1690,7 @@ subselect_single_select_engine(st_select
 			       select_subselect *result_arg,
 			       Item_subselect *item_arg)
   :subselect_engine(item_arg, result_arg),
-   prepared(0), optimized(0), executed(0),
+   prepared(0), optimized(0), executed(0), optimize_error(0),
    select_lex(select), join(0)
 {
   select_lex->master_unit()->item= item_arg;
@@ -1700,7 +1700,7 @@ subselect_single_select_engine(st_select
 void subselect_single_select_engine::cleanup()
 {
   DBUG_ENTER("subselect_single_select_engine::cleanup");
-  prepared= optimized= executed= 0;
+  prepared= optimized= executed= optimize_error= 0;
   join= 0;
   result->cleanup();
   DBUG_VOID_RETURN;
@@ -1892,6 +1892,10 @@ int join_read_next_same_or_null(READ_REC
 int subselect_single_select_engine::exec()
 {
   DBUG_ENTER("subselect_single_select_engine::exec");
+
+  if (optimize_error)
+    DBUG_RETURN(1);
+
   char const *save_where= thd->where;
   SELECT_LEX *save_select= thd->lex->current_select;
   thd->lex->current_select= select_lex;
@@ -1899,12 +1903,15 @@ int subselect_single_select_engine::exec
   {
     SELECT_LEX_UNIT *unit= select_lex->master_unit();
 
+    DBUG_EXECUTE_IF("bug11747970_simulate_error",
+                    DBUG_SET("+d,bug11747970_raise_error"););
+
     optimized= 1;
     unit->set_limit(unit->global_parameters);
     if (join->optimize())
     {
       thd->where= save_where;
-      executed= 1;
+      optimize_error= 1;
       thd->lex->current_select= save_select;
       DBUG_RETURN(join->error ? join->error : 1);
     }

=== modified file 'sql/item_subselect.h'
--- a/sql/item_subselect.h	2011-07-03 23:48:19 +0000
+++ b/sql/item_subselect.h	2011-10-05 09:55:51 +0000
@@ -429,6 +429,7 @@ class subselect_single_select_engine: pu
   my_bool prepared; /* simple subselect is prepared */
   my_bool optimized; /* simple subselect is optimized */
   my_bool executed; /* simple subselect is executed */
+  my_bool optimize_error; ///< simple subselect optimization failed
   st_select_lex *select_lex; /* corresponding select_lex */
   JOIN * join; /* corresponding JOIN structure */
 public:

=== modified file 'sql/sql_select.cc'
--- a/sql/sql_select.cc	2011-08-09 08:03:29 +0000
+++ b/sql/sql_select.cc	2011-10-05 09:55:51 +0000
@@ -2691,6 +2691,16 @@ make_join_statistics(JOIN *join, TABLE_L
     table_vector[i]=s->table=table=tables->table;
     table->pos_in_table_list= tables;
     error= table->file->info(HA_STATUS_VARIABLE | HA_STATUS_NO_LOCK);
+
+    DBUG_EXECUTE_IF("bug11747970_raise_error",
+                    {
+                      if (!error)
+                      {
+                        my_error(ER_UNKNOWN_ERROR, MYF(0));
+                        goto error;
+                      }
+                    });
+
     if (error)
     {
       table->file->print_error(error, MYF(0));

No bundle (reason: useless for push emails).
Thread
bzr push into mysql-5.5 branch (sergey.glukhov:3568 to 3569) Sergey Glukhov5 Oct