List:Commits« Previous MessageNext Message »
From:Kristofer Pettersson Date:March 12 2009 1:40pm
Subject:bzr commit into mysql-6.0-bugteam branch (kristofer.pettersson:3109)
Bug#39843
View as plain text  
#At file:///home/thek/Development/cpp/mysqlbzr/mysql-6.0-bugteam/ based on revid:kristofer.pettersson@stripped

 3109 Kristofer Pettersson	2009-03-12
      Bug#39843 DELETE requires write access to table in subquery in where clause
      
      Reverting patch for 6.0-bugteam as it breaks an assert in set_handler_table_locks

    modified:
      mysql-test/r/lock.result
      mysql-test/t/lock.test
      sql/sql_lex.cc
      sql/sql_lex.h
      sql/sql_parse.cc
      sql/sql_yacc.yy
=== modified file 'mysql-test/r/lock.result'
--- a/mysql-test/r/lock.result	2009-03-05 15:44:02 +0000
+++ b/mysql-test/r/lock.result	2009-03-12 13:40:44 +0000
@@ -173,33 +173,6 @@ ERROR HY000: View's SELECT refers to a t
 Cleanup.
 
 drop table t2, t3;
-#
-# Bug#39843 DELETE requires write access to table in subquery in where clause
-#
-DROP TABLE IF EXISTS t1,t2;
-CREATE TABLE t1 (
-table1_rowid SMALLINT NOT NULL
-);
-CREATE TABLE t2 (
-table2_rowid SMALLINT NOT NULL
-);
-INSERT INTO t1 VALUES (1);
-INSERT INTO t2 VALUES (1);
-LOCK TABLES t1 WRITE, t2 READ;
-# Sub-select should not try to aquire a write lock.
-DELETE FROM t1 
-WHERE EXISTS 
-( 
-SELECT 'x' 
-FROM t2
-WHERE t1.table1_rowid = t2.table2_rowid
-) ;
-# While implementing the patch we didn't break old behavior;
-# The following sub-select should still requires a write lock:
-SELECT * FROM t1 WHERE 1 IN (SELECT * FROM t2 FOR UPDATE);
-ERROR HY000: Table 't2' was locked with a READ lock and can't be updated
-UNLOCK TABLES;
-DROP TABLE t1,t2;
 End of 5.1 tests.
 #
 # Ensure that FLUSH TABLES doesn't substitute a base locked table

=== modified file 'mysql-test/t/lock.test'
--- a/mysql-test/t/lock.test	2009-03-05 15:44:02 +0000
+++ b/mysql-test/t/lock.test	2009-03-12 13:40:44 +0000
@@ -221,36 +221,6 @@ create view v_bug5719 as select * from t
 --echo
 drop table t2, t3;
 
---echo #
---echo # Bug#39843 DELETE requires write access to table in subquery in where clause
---echo #
---disable_warnings
-DROP TABLE IF EXISTS t1,t2;
---enable_warnings
-CREATE TABLE t1 (
-table1_rowid SMALLINT NOT NULL
-);
-CREATE TABLE t2 (
-table2_rowid SMALLINT NOT NULL
-);
-INSERT INTO t1 VALUES (1);
-INSERT INTO t2 VALUES (1);
-LOCK TABLES t1 WRITE, t2 READ;
---echo # Sub-select should not try to aquire a write lock.
-DELETE FROM t1 
-WHERE EXISTS 
-( 
-SELECT 'x' 
-FROM t2
-WHERE t1.table1_rowid = t2.table2_rowid
-) ;
---echo # While implementing the patch we didn't break old behavior;
---echo # The following sub-select should still requires a write lock:
---error ER_TABLE_NOT_LOCKED_FOR_WRITE
-SELECT * FROM t1 WHERE 1 IN (SELECT * FROM t2 FOR UPDATE);
-UNLOCK TABLES;
-DROP TABLE t1,t2;
-
 --echo End of 5.1 tests.
 
 --echo #

=== modified file 'sql/sql_lex.cc'
--- a/sql/sql_lex.cc	2009-03-05 15:44:02 +0000
+++ b/sql/sql_lex.cc	2009-03-12 13:40:44 +0000
@@ -1626,7 +1626,6 @@ void st_select_lex::init_query()
   exclude_from_table_unique_test= no_wrap_view_item= FALSE;
   nest_level= 0;
   link_next= 0;
-  lock_option= TL_READ_DEFAULT;
 }
 
 void st_select_lex::init_select()

=== modified file 'sql/sql_lex.h'
--- a/sql/sql_lex.h	2009-03-05 15:44:02 +0000
+++ b/sql/sql_lex.h	2009-03-12 13:40:44 +0000
@@ -699,14 +699,6 @@ public:
 
   List<udf_func>     udf_list;                  /* udf function calls stack */
 
-  /**
-    Per sub-query locking strategy.
-    Note: This variable might interfer with the corresponding statement-level
-    variable Lex::lock_option because on how different parser rules depend
-    on eachother.
-  */
-  thr_lock_type lock_option;
-
   /* 
     This is a copy of the original JOIN USING list that comes from
     the parser. The parser :

=== modified file 'sql/sql_parse.cc'
--- a/sql/sql_parse.cc	2009-03-06 10:25:21 +0000
+++ b/sql/sql_parse.cc	2009-03-12 13:40:44 +0000
@@ -5513,14 +5513,6 @@ void mysql_reset_thd_for_next_command(TH
 }
 
 
-/**
-  Resets the lex->current_select object.
-  @note It is assumed that lex->current_select != NULL
-
-  This function is a wrapper around select_lex->init_select() with an added
-  check for the special situation when using INTO OUTFILE and LOAD DATA.
-*/
-
 void
 mysql_init_select(LEX *lex)
 {
@@ -5535,18 +5527,6 @@ mysql_init_select(LEX *lex)
 }
 
 
-/**
-  Used to allocate a new SELECT_LEX object on the current thd mem_root and
-  link it into the relevant lists.
-
-  This function is always followed by mysql_init_select.
-
-  @see mysql_init_select
-
-  @retval TRUE An error occurred
-  @retval FALSE The new SELECT_LEX was successfully allocated.
-*/
-
 bool
 mysql_new_select(LEX *lex, bool move_down)
 {

=== modified file 'sql/sql_yacc.yy'
--- a/sql/sql_yacc.yy	2009-03-05 15:44:02 +0000
+++ b/sql/sql_yacc.yy	2009-03-12 13:40:44 +0000
@@ -6973,7 +6973,6 @@ select_lock_type:
           {
             LEX *lex=Lex;
             lex->current_select->set_lock_for_tables(TL_WRITE);
-            lex->current_select->lock_option= TL_WRITE;
             lex->safe_to_cache_query=0;
           }
         | LOCK_SYM IN_SYM SHARE_SYM MODE_SYM
@@ -6981,7 +6980,6 @@ select_lock_type:
             LEX *lex=Lex;
             lex->current_select->
               set_lock_for_tables(TL_READ_WITH_SHARED_LOCKS);
-            lex->current_select->lock_option= TL_READ_WITH_SHARED_LOCKS;
             lex->safe_to_cache_query=0;
           }
         ;
@@ -13527,17 +13525,6 @@ subselect_start:
 subselect_end:
           {
             LEX *lex=Lex;
-            /*
-              Set the required lock level for the tables associated with the
-              current sub-select. This will overwrite previous lock options set
-              using st_select_lex::add_table_to_list in any of the following
-              rules: single_multi, table_wild_one, load_data, table_alias_ref,
-              table_factor.
-              The default lock level is TL_READ_DEFAULT but it can be modified
-              with query options specific for a certain (sub-)SELECT.
-            */
-            lex->current_select->
-              set_lock_for_tables(lex->current_select->lock_option);
 
             lex->pop_context();
             SELECT_LEX *child= lex->current_select;
@@ -13570,7 +13557,6 @@ query_expression_option:
             if (check_simple_select())
               MYSQL_YYABORT;
             Lex->lock_option= TL_READ_HIGH_PRIORITY;
-            Lex->current_select->lock_option= TL_READ_HIGH_PRIORITY;
           }
         | DISTINCT         { Select->options|= SELECT_DISTINCT; }
         | SQL_SMALL_RESULT { Select->options|= SELECT_SMALL_RESULT; }


Attachment: [text/bzr-bundle] bzr/kristofer.pettersson@sun.com-20090312134044-6k8ia8oit69y1p2z.bundle
Thread
bzr commit into mysql-6.0-bugteam branch (kristofer.pettersson:3109)Bug#39843Kristofer Pettersson12 Mar