List:Commits« Previous MessageNext Message »
From:Evgeny Potemkin Date:December 2 2009 1:47pm
Subject:bzr commit into mysql-5.0-bugteam branch (epotemkin:2858) Bug#48508
View as plain text  
#At file:///work/bzrroot/mysql-5.0-bugteam/ based on revid:gshchepa@stripped

 2858 Evgeny Potemkin	2009-12-02 [merge]
      Auto-merged fix for the bug#48508.

    modified:
      mysql-test/r/ps.result
      mysql-test/t/ps.test
      sql/item_cmpfunc.cc
      sql/sql_base.cc
      sql/sql_class.h
=== modified file 'mysql-test/r/ps.result'
--- a/mysql-test/r/ps.result	2009-02-27 16:07:58 +0000
+++ b/mysql-test/r/ps.result	2009-12-01 18:28:45 +0000
@@ -1891,4 +1891,27 @@ execute stmt using @arg;
 ?
 -12345.5432100000
 deallocate prepare stmt;
+#
+# Bug#48508: Crash on prepared statement re-execution.
+#
+create table t1(b int);
+insert into t1 values (0);
+create view v1 AS select 1 as a from t1 where b;
+prepare stmt from "select * from v1 where a";
+execute stmt;
+a
+execute stmt;
+a
+drop table t1;
+drop view v1;
+create table t1(a bigint);
+create table t2(b tinyint);
+insert into t2 values (null);
+prepare stmt from "select 1 from t1 join  t2 on a xor b where b > 1  and a =1";
+execute stmt;
+1
+execute stmt;
+1
+drop table t1,t2;
+#
 End of 5.0 tests.

=== modified file 'mysql-test/t/ps.test'
--- a/mysql-test/t/ps.test	2009-02-25 10:37:30 +0000
+++ b/mysql-test/t/ps.test	2009-12-01 18:28:45 +0000
@@ -1973,4 +1973,25 @@ select @arg;
 execute stmt using @arg;
 deallocate prepare stmt;
 
+--echo #
+--echo # Bug#48508: Crash on prepared statement re-execution.
+--echo #
+create table t1(b int);
+insert into t1 values (0);
+create view v1 AS select 1 as a from t1 where b;
+prepare stmt from "select * from v1 where a";
+execute stmt;
+execute stmt;
+drop table t1;
+drop view v1;
+
+create table t1(a bigint);
+create table t2(b tinyint);
+insert into t2 values (null);
+prepare stmt from "select 1 from t1 join  t2 on a xor b where b > 1  and a =1";
+execute stmt;
+execute stmt;
+drop table t1,t2;
+--echo #
+
 --echo End of 5.0 tests.

=== modified file 'sql/item_cmpfunc.cc'
--- a/sql/item_cmpfunc.cc	2009-08-28 15:51:31 +0000
+++ b/sql/item_cmpfunc.cc	2009-12-01 18:28:45 +0000
@@ -3907,7 +3907,7 @@ Item *Item_cond::compile(Item_analyzer a
     byte *arg_v= *arg_p;
     Item *new_item= item->compile(analyzer, &arg_v, transformer, arg_t);
     if (new_item && new_item != item)
-      li.replace(new_item);
+      current_thd->change_item_tree(li.ref(), new_item);
   }
   return Item_func::transform(transformer, arg_t);
 }

=== modified file 'sql/sql_base.cc'
--- a/sql/sql_base.cc	2009-11-03 09:00:41 +0000
+++ b/sql/sql_base.cc	2009-12-01 18:28:45 +0000
@@ -3481,7 +3481,8 @@ find_field_in_view(THD *thd, TABLE_LIST 
     if (!my_strcasecmp(system_charset_info, field_it.name(), name))
     {
       // in PS use own arena or data will be freed after prepare
-      if (register_tree_change && thd->stmt_arena->is_stmt_prepare_or_first_sp_execute())
+      if (register_tree_change &&
+          thd->stmt_arena->is_stmt_prepare_or_first_stmt_execute())
         arena= thd->activate_stmt_arena_if_needed(&backup);
       /*
         create_item() may, or may not create a new Item, depending on

=== modified file 'sql/sql_class.h'
--- a/sql/sql_class.h	2009-10-20 04:42:10 +0000
+++ b/sql/sql_class.h	2009-12-01 18:28:45 +0000
@@ -759,6 +759,8 @@ public:
   { return state == INITIALIZED_FOR_SP; }
   inline bool is_stmt_prepare_or_first_sp_execute() const
   { return (int)state < (int)PREPARED; }
+  inline bool is_stmt_prepare_or_first_stmt_execute() const
+  { return (int)state <= (int)PREPARED; }
   inline bool is_first_stmt_execute() const { return state == PREPARED; }
   inline bool is_stmt_execute() const
   { return state == PREPARED || state == EXECUTED; }


Attachment: [text/bzr-bundle] bzr/epotemkin@mysql.com-20091202134712-4muwnr152xqkcwm7.bundle
Thread
bzr commit into mysql-5.0-bugteam branch (epotemkin:2858) Bug#48508Evgeny Potemkin2 Dec