MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:konstantin Date:July 11 2006 7:40pm
Subject:bk commit into 5.0 tree (kostja:1.2233) BUG#19399
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of kostja. When kostja does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2006-07-11 23:39:51+04:00, kostja@stripped +6 -0
  Post-merge fixes for Bug#19399 "Stored Procedures 'Lost Connection' 
  when dropping/creating tables"

  mysql-test/r/ps.result@stripped, 2006-07-11 23:39:48+04:00, kostja@stripped +141 -126
    A post-merge fix.

  mysql-test/t/ps.test@stripped, 2006-07-11 23:39:48+04:00, kostja@stripped +13 -15
    A post-merge fix: all 5.0 tests should go after 4.1 tests.

  sql/sql_lex.cc@stripped, 2006-07-11 23:39:48+04:00, kostja@stripped +1 -1
    auxilliary -> auxiliary

  sql/sql_prepare.cc@stripped, 2006-07-11 23:39:48+04:00, kostja@stripped +2 -2
    auxilliary -> auxiliary

  sql/table.cc@stripped, 2006-07-11 23:39:48+04:00, kostja@stripped +15 -2
    Update st_table_list::reinit_before_use in 5.0 to include 5.0-specific
    cleanups.

  sql/table.h@stripped, 2006-07-11 23:39:48+04:00, kostja@stripped +1 -1
    st_table_list::reinit_before_use is public.

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	kostja
# Host:	bodhi.local
# Root:	/opt/local/work/mysql-5.0-runtime-merge-41

--- 1.191/sql/sql_lex.cc	2006-07-11 23:40:00 +04:00
+++ 1.192/sql/sql_lex.cc	2006-07-11 23:40:00 +04:00
@@ -126,7 +126,7 @@ void lex_start(THD *thd, uchar *buf,uint
   lex->param_list.empty();
   lex->view_list.empty();
   lex->prepared_stmt_params.empty();
-  lex->auxilliary_table_list.empty();
+  lex->auxiliary_table_list.empty();
   lex->unit.next= lex->unit.master=
     lex->unit.link_next= lex->unit.return_to= 0;
   lex->unit.prev= lex->unit.link_prev= 0;

--- 1.228/sql/table.cc	2006-07-11 23:40:00 +04:00
+++ 1.229/sql/table.cc	2006-07-11 23:40:00 +04:00
@@ -2992,14 +2992,27 @@ Field_iterator_table_ref::get_natural_co
     st_table_list::reinit_before_use()
 */
 
-void st_table_list::reinit_before_use(THD * /* thd */)
+void st_table_list::reinit_before_use(THD *thd)
 {
   /*
     Reset old pointers to TABLEs: they are not valid since the tables
     were closed in the end of previous prepare or execute call.
   */
   table= 0;
-  table_list= 0;
+  /* Reset is_schema_table_processed value(needed for I_S tables */
+  is_schema_table_processed= FALSE;
+
+  TABLE_LIST *embedded; /* The table at the current level of nesting. */
+  TABLE_LIST *embedding= this; /* The parent nested table reference. */
+  do
+  {
+    embedded= embedding;
+    if (embedded->prep_on_expr)
+      embedded->on_expr= embedded->prep_on_expr->copy_andor_structure(thd);
+    embedding= embedded->embedding;
+  }
+  while (embedding &&
+         embedding->nested_join->join_list.head() == embedded);
 }
 
 

--- 1.130/sql/table.h	2006-07-11 23:40:00 +04:00
+++ 1.131/sql/table.h	2006-07-11 23:40:00 +04:00
@@ -668,6 +668,7 @@ typedef struct st_table_list
   Security_context *find_view_security_context(THD *thd);
   bool prepare_view_securety_context(THD *thd);
 #endif
+  void reinit_before_use(THD *thd);
 
 private:
   bool prep_check_option(THD *thd, uint8 check_opt_type);
@@ -676,7 +677,6 @@ private:
     Cleanup for re-execution in a prepared statement or a stored
     procedure.
   */
-  void reinit_before_use(THD *thd);
 } TABLE_LIST;
 
 class Item;

--- 1.68/mysql-test/r/ps.result	2006-07-11 23:40:00 +04:00
+++ 1.69/mysql-test/r/ps.result	2006-07-11 23:40:00 +04:00
@@ -485,11 +485,6 @@ execute stmt;
 pnum
 deallocate prepare stmt;
 drop table t1, t2;
-create table t1 (a varchar(20));
-insert into t1 values ('foo');
-prepare stmt FROM 'SELECT char_length (a) FROM t1';
-ERROR 42000: FUNCTION test.char_length does not exist
-drop table t1;
 prepare stmt from "SELECT SQL_CALC_FOUND_ROWS 'foo' UNION SELECT 'bar' LIMIT 0";
 execute stmt;
 foo
@@ -502,77 +497,6 @@ SELECT FOUND_ROWS();
 FOUND_ROWS()
 2
 deallocate prepare stmt;
-create table t1 (a char(3) not null, b char(3) not null,
-c char(3) not null, primary key  (a, b, c));
-create table t2 like t1;
-prepare stmt from
-"select t1.a from (t1 left outer join t2 on t2.a=1 and t1.b=t2.b)
-  where t1.a=1";
-execute stmt;
-a
-execute stmt;
-a
-execute stmt;
-a
-prepare stmt from
-"select t1.a, t1.b, t1.c, t2.a, t2.b, t2.c from
-(t1 left outer join t2 on t2.a=? and t1.b=t2.b)
-left outer join t2 t3 on t3.a=? where t1.a=?";
-set @a:=1, @b:=1, @c:=1;
-execute stmt using @a, @b, @c;
-a	b	c	a	b	c
-execute stmt using @a, @b, @c;
-a	b	c	a	b	c
-execute stmt using @a, @b, @c;
-a	b	c	a	b	c
-deallocate prepare stmt;
-drop table t1,t2;
-SET @aux= "SELECT COUNT(*)
-                FROM INFORMATION_SCHEMA.COLUMNS A,
-                INFORMATION_SCHEMA.COLUMNS B
-                WHERE A.TABLE_SCHEMA = B.TABLE_SCHEMA
-                AND A.TABLE_NAME = B.TABLE_NAME
-                AND A.COLUMN_NAME = B.COLUMN_NAME AND
-                A.TABLE_NAME = 'user'";
-prepare my_stmt from @aux;
-execute my_stmt;
-COUNT(*)
-37
-execute my_stmt;
-COUNT(*)
-37
-execute my_stmt;
-COUNT(*)
-37
-deallocate prepare my_stmt;
-drop procedure if exists p1|
-drop table if exists t1|
-create table t1 (id int)|
-insert into t1 values(1)|
-create procedure p1(a int, b int)
-begin
-declare c int;
-select max(id)+1 into c from t1;
-insert into t1 select a+b;
-insert into t1 select a-b;
-insert into t1 select a-c;
-end|
-set @a= 3, @b= 4|
-prepare stmt from "call p1(?, ?)"|
-execute stmt using @a, @b|
-execute stmt using @a, @b|
-select * from t1|
-id
-1
-7
--1
-1
-7
--1
--5
-deallocate prepare stmt|
-drop procedure p1|
-drop table t1|
 drop table if exists t1;
 Warnings:
 Note	1051	Unknown table 't1'
@@ -636,47 +560,6 @@ id
 3
 deallocate prepare stmt;
 drop table t1, t2;
-create table t1 (a int);
-insert into t1 (a) values (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
-prepare stmt from "select * from t1 limit ?, ?";
-set @offset=0, @limit=1;
-execute stmt using @offset, @limit;
-a
-1
-select * from t1 limit 0, 1;
-a
-1
-set @offset=3, @limit=2;
-execute stmt using @offset, @limit;
-a
-4
-5
-select * from t1 limit 3, 2;
-a
-4
-5
-prepare stmt from "select * from t1 limit ?";
-execute stmt using @limit;
-a
-1
-2
-prepare stmt from "select * from t1 where a in (select a from t1 limit ?)";
-ERROR 42000: This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
-prepare stmt from "select * from t1 union all select * from t1 limit ?, ?";
-set @offset=9;
-set @limit=2;
-execute stmt using @offset, @limit;
-a
-10
-1
-prepare stmt from "(select * from t1 limit ?, ?) union all
-                   (select * from t1 limit ?, ?) order by a limit ?";
-execute stmt using @offset, @limit, @offset, @limit, @limit;
-a
-10
-10
-drop table t1;
-deallocate prepare stmt;
 create table t1 (id int);
 prepare stmt from "insert into t1 (id) select id from t1 union select id from t1";
 execute stmt;
@@ -777,15 +660,6 @@ ERROR 42000: You have an error in your S
 select ? from t1;
 ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? from t1' at line 1
 drop table t1;
-CREATE TABLE b12651_T1(a int) ENGINE=MYISAM;
-CREATE TABLE b12651_T2(b int) ENGINE=MYISAM;
-CREATE VIEW  b12651_V1 as SELECT b FROM b12651_T2;
-PREPARE b12651 FROM 'SELECT 1 FROM b12651_T1 WHERE a IN (SELECT b FROM b12651_V1)';
-EXECUTE b12651;
-1
-DROP VIEW b12651_V1;
-DROP TABLE b12651_T1, b12651_T2;
-DEALLOCATE PREPARE b12651;
 prepare stmt from "select @@time_zone";
 execute stmt;
 @@time_zone
@@ -1002,6 +876,147 @@ select @@max_prepared_stmt_count, @@prep
 @@max_prepared_stmt_count	@@prepared_stmt_count
 3	0
 set global max_prepared_stmt_count= @old_max_prepared_stmt_count;
+drop table if exists t1;
+create temporary table if not exists t1 (a1 int);
+prepare stmt from "delete t1 from t1 where (cast(a1/3 as unsigned) * 3) = a1";
+drop temporary table t1;
+create temporary table if not exists t1 (a1 int);
+execute stmt;
+drop temporary table t1;
+create temporary table if not exists t1 (a1 int);
+execute stmt;
+drop temporary table t1;
+create temporary table if not exists t1 (a1 int);
+execute stmt;
+drop temporary table t1;
+deallocate prepare stmt;
+End of 4.1 tests
+create table t1 (a varchar(20));
+insert into t1 values ('foo');
+prepare stmt FROM 'SELECT char_length (a) FROM t1';
+ERROR 42000: FUNCTION test.char_length does not exist
+drop table t1;
+create table t1 (a char(3) not null, b char(3) not null,
+c char(3) not null, primary key  (a, b, c));
+create table t2 like t1;
+prepare stmt from
+"select t1.a from (t1 left outer join t2 on t2.a=1 and t1.b=t2.b)
+  where t1.a=1";
+execute stmt;
+a
+execute stmt;
+a
+execute stmt;
+a
+prepare stmt from
+"select t1.a, t1.b, t1.c, t2.a, t2.b, t2.c from
+(t1 left outer join t2 on t2.a=? and t1.b=t2.b)
+left outer join t2 t3 on t3.a=? where t1.a=?";
+set @a:=1, @b:=1, @c:=1;
+execute stmt using @a, @b, @c;
+a	b	c	a	b	c
+execute stmt using @a, @b, @c;
+a	b	c	a	b	c
+execute stmt using @a, @b, @c;
+a	b	c	a	b	c
+deallocate prepare stmt;
+drop table t1,t2;
+SET @aux= "SELECT COUNT(*)
+                FROM INFORMATION_SCHEMA.COLUMNS A,
+                INFORMATION_SCHEMA.COLUMNS B
+                WHERE A.TABLE_SCHEMA = B.TABLE_SCHEMA
+                AND A.TABLE_NAME = B.TABLE_NAME
+                AND A.COLUMN_NAME = B.COLUMN_NAME AND
+                A.TABLE_NAME = 'user'";
+prepare my_stmt from @aux;
+execute my_stmt;
+COUNT(*)
+37
+execute my_stmt;
+COUNT(*)
+37
+execute my_stmt;
+COUNT(*)
+37
+deallocate prepare my_stmt;
+drop procedure if exists p1|
+drop table if exists t1|
+create table t1 (id int)|
+insert into t1 values(1)|
+create procedure p1(a int, b int)
+begin
+declare c int;
+select max(id)+1 into c from t1;
+insert into t1 select a+b;
+insert into t1 select a-b;
+insert into t1 select a-c;
+end|
+set @a= 3, @b= 4|
+prepare stmt from "call p1(?, ?)"|
+execute stmt using @a, @b|
+execute stmt using @a, @b|
+select * from t1|
+id
+1
+7
+-1
+1
+7
+-1
+-5
+deallocate prepare stmt|
+drop procedure p1|
+drop table t1|
+create table t1 (a int);
+insert into t1 (a) values (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
+prepare stmt from "select * from t1 limit ?, ?";
+set @offset=0, @limit=1;
+execute stmt using @offset, @limit;
+a
+1
+select * from t1 limit 0, 1;
+a
+1
+set @offset=3, @limit=2;
+execute stmt using @offset, @limit;
+a
+4
+5
+select * from t1 limit 3, 2;
+a
+4
+5
+prepare stmt from "select * from t1 limit ?";
+execute stmt using @limit;
+a
+1
+2
+prepare stmt from "select * from t1 where a in (select a from t1 limit ?)";
+ERROR 42000: This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
+prepare stmt from "select * from t1 union all select * from t1 limit ?, ?";
+set @offset=9;
+set @limit=2;
+execute stmt using @offset, @limit;
+a
+10
+1
+prepare stmt from "(select * from t1 limit ?, ?) union all
+                   (select * from t1 limit ?, ?) order by a limit ?";
+execute stmt using @offset, @limit, @offset, @limit, @limit;
+a
+10
+10
+drop table t1;
+deallocate prepare stmt;
+CREATE TABLE b12651_T1(a int) ENGINE=MYISAM;
+CREATE TABLE b12651_T2(b int) ENGINE=MYISAM;
+CREATE VIEW  b12651_V1 as SELECT b FROM b12651_T2;
+PREPARE b12651 FROM 'SELECT 1 FROM b12651_T1 WHERE a IN (SELECT b FROM b12651_V1)';
+EXECUTE b12651;
+1
+DROP VIEW b12651_V1;
+DROP TABLE b12651_T1, b12651_T2;
+DEALLOCATE PREPARE b12651;
 create table t1 (id int);
 prepare ins_call from "insert into t1 (id) values (1)";
 execute ins_call;

--- 1.66/mysql-test/t/ps.test	2006-07-11 23:40:00 +04:00
+++ 1.67/mysql-test/t/ps.test	2006-07-11 23:40:00 +04:00
@@ -527,6 +527,7 @@ set @a=200887, @b=860;
 # this query did not return all matching rows
 execute stmt using @a, @b;
 deallocate prepare stmt;
+
 drop table t1;
 
 #
@@ -586,7 +587,6 @@ execute stmt;
 execute stmt;
 deallocate prepare stmt;
 drop table t1;
-
 #
 # Bug#11458 "Prepared statement with subselects return random data":
 # drop PARAM_TABLE_BIT from the list of tables used by a subquery
@@ -655,7 +655,6 @@ execute stmt using @user_id, @id;
 execute stmt using @user_id, @id;
 deallocate prepare stmt;
 drop table t1, t2, t3, t4;
-
 #
 # Bug#9379: make sure that Item::collation is reset when one sets
 # a parameter marker from a string variable.
@@ -770,7 +769,6 @@ execute stmt using @like;
 deallocate prepare stmt;
 drop table t1;
 
-
 #
 # Bug#13134 "Length of VARCHAR() utf8 column is increasing when table is
 # recreated with PS/SP"
@@ -841,17 +839,17 @@ set global max_prepared_stmt_count=10000
 select @@max_prepared_stmt_count;
 set global max_prepared_stmt_count=default;
 select @@max_prepared_stmt_count;
---error 1229 # ER_GLOBAL_VARIABLE
+--error ER_GLOBAL_VARIABLE
 set @@max_prepared_stmt_count=1;
---error 1229 # ER_GLOBAL_VARIABLE
+--error ER_GLOBAL_VARIABLE
 set max_prepared_stmt_count=1;
---error 1229 # ER_GLOBAL_VARIABLE
+--error ER_GLOBAL_VARIABLE
 set local max_prepared_stmt_count=1;
---error 1229 # ER_GLOBAL_VARIABLE
+--error ER_INCORRECT_GLOBAL_LOCAL_VAR
 set local prepared_stmt_count=0;
---error 1229 # ER_GLOBAL_VARIABLE
+--error ER_INCORRECT_GLOBAL_LOCAL_VAR
 set @@prepared_stmt_count=0;
---error 1232 # ER_WRONG_TYPE_FOR_VAR
+--error ER_INCORRECT_GLOBAL_LOCAL_VAR 
 set global prepared_stmt_count=1;
 # set to a reasonable limit works
 set global max_prepared_stmt_count=1;
@@ -861,13 +859,13 @@ select @@max_prepared_stmt_count;
 #
 set global max_prepared_stmt_count=0;
 select @@max_prepared_stmt_count, @@prepared_stmt_count;
---error 1105 # ER_UNKNOWN_ERROR
+--error ER_MAX_PREPARED_STMT_COUNT_REACHED
 prepare stmt from "select 1";
 select @@prepared_stmt_count;
 set global max_prepared_stmt_count=1;
 prepare stmt from "select 1";
 select @@prepared_stmt_count;
---error 1105 # ER_UNKNOWN_ERROR
+--error ER_MAX_PREPARED_STMT_COUNT_REACHED
 prepare stmt1 from "select 1";
 select @@prepared_stmt_count;
 deallocate prepare stmt;
@@ -886,13 +884,13 @@ select @@prepared_stmt_count;
 #
 select @@prepared_stmt_count, @@max_prepared_stmt_count;
 set global max_prepared_stmt_count=0;
---error 1105 # ER_UNKNOWN_ERROR
+--error ER_MAX_PREPARED_STMT_COUNT_REACHED
 prepare stmt from "select 1";
 # Result: the old statement is deallocated, the new is not created.
 --error 1243 # ER_UNKNOWN_STMT_HANDLER
 execute stmt;
 select @@prepared_stmt_count;
---error 1105 # ER_UNKNOWN_ERROR
+--error ER_MAX_PREPARED_STMT_COUNT_REACHED
 prepare stmt from "select 1";
 select @@prepared_stmt_count;
 #
@@ -906,10 +904,10 @@ connect (con1,localhost,root,,);
 connection con1;
 prepare stmt from "select 2";
 prepare stmt1 from "select 3";
---error 1105 # ER_UNKNOWN_ERROR
+--error ER_MAX_PREPARED_STMT_COUNT_REACHED
 prepare stmt2 from "select 4";
 connection default;
---error 1105 # ER_UNKNOWN_ERROR 
+--error ER_MAX_PREPARED_STMT_COUNT_REACHED
 prepare stmt2 from "select 4";
 select @@max_prepared_stmt_count, @@prepared_stmt_count;
 disconnect con1;

--- 1.179/sql/sql_prepare.cc	2006-07-11 23:40:00 +04:00
+++ 1.180/sql/sql_prepare.cc	2006-07-11 23:40:00 +04:00
@@ -2138,9 +2138,9 @@ void reinit_stmt_before_use(THD *thd, LE
     (multi-delete).  We do a full clean up, although at the moment all we
     need to clean in the tables of MULTI-DELETE list is 'table' member.
   */
-  for (TABLE_LIST *tables= (TABLE_LIST*) lex->auxilliary_table_list.first;
+  for (TABLE_LIST *tables= (TABLE_LIST*) lex->auxiliary_table_list.first;
        tables;
-       tables= tables->next)
+       tables= tables->next_global)
   {
     tables->reinit_before_use(thd);
   }
Thread
bk commit into 5.0 tree (kostja:1.2233) BUG#19399konstantin11 Jul