List:Commits« Previous MessageNext Message »
From:konstantin Date:December 11 2006 11:50pm
Subject:bk commit into 5.0 tree (kostja:1.2317) BUG#4968
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-12-12 01:50:12+03:00, kostja@stripped +9 -0
  Post-merge fixes for Bug#4968 "Stored procedure crash if cursor opened 
  on altered table" and Bug#19733 "Repeated alter, or repeated 
  create/drop, fails"

  mysql-test/r/ps.result@stripped, 2006-12-12 01:50:10+03:00, kostja@stripped +54 -228
    Post-merge fixes: update results with new tests.

  mysql-test/r/sp.result@stripped, 2006-12-12 01:50:10+03:00, kostja@stripped +17 -0
    Post-merge fixes: update results.

  mysql-test/t/ps.test@stripped, 2006-12-12 01:50:10+03:00, kostja@stripped +72 -0
    Add more test cases for Bug#4968 and related.

  mysql-test/t/sp.test@stripped, 2006-12-12 01:50:10+03:00, kostja@stripped +28 -0
    A post-merge fix: add more testcases for Bug#4968 and related.

  sql/sql_insert.cc@stripped, 2006-12-12 01:50:10+03:00, kostja@stripped +7 -8
    Post-merge fixes: update comments, fix errors of the manual merge.

  sql/sql_lex.cc@stripped, 2006-12-12 01:50:10+03:00, kostja@stripped +1 -2
    Fix a manual merge error.

  sql/sql_parse.cc@stripped, 2006-12-12 01:50:10+03:00, kostja@stripped +13 -11
    Fix a few errors of the manual merge, style.

  sql/sql_table.cc@stripped, 2006-12-12 01:50:10+03:00, kostja@stripped +10 -10
    Post-merge fixes, fix a few errors of the manual merge, fix style.

  sql/sql_yacc.yy@stripped, 2006-12-12 01:50:10+03:00, kostja@stripped +1 -3
    A post-merge fix.

# 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-4968-pull-from-4.1

--- 1.207/sql/sql_insert.cc	2006-12-12 01:50:17 +03:00
+++ 1.208/sql/sql_insert.cc	2006-12-12 01:50:17 +03:00
@@ -2620,11 +2620,11 @@ bool select_insert::send_eof()
                           temporary table flag)
       create_table in     Pointer to TABLE_LIST object providing database
                           and name for table to be created or to be open
-      extra_fields in/out Initial list of fields for table to be created
-      keys         in     List of keys for table to be created
+      alter_info   in/out Initial list of columns and indexes for the table
+                          to be created
       items        in     List of items which should be used to produce rest
                           of fields for the table (corresponding fields will
-                          be added to the end of 'extra_fields' list)
+                          be added to the end of alter_info->create_list)
       lock         out    Pointer to the MYSQL_LOCK object for table created
                           (open) will be returned in this parameter. Since
                           this table is not included in THD::lock caller is
@@ -2646,8 +2646,8 @@ bool select_insert::send_eof()
 
 static TABLE *create_table_from_items(THD *thd, HA_CREATE_INFO *create_info,
                                       TABLE_LIST *create_table,
-                                      List<create_field> *extra_fields,
-                                      List<Key> *keys, List<Item> *items,
+                                      Alter_info *alter_info,
+                                      List<Item> *items,
                                       MYSQL_LOCK **lock)
 {
   TABLE tmp_table;		// Used during 'create_field()'
@@ -2686,7 +2686,7 @@ static TABLE *create_table_from_items(TH
       DBUG_RETURN(0);
     if (item->maybe_null)
       cr_field->flags &= ~NOT_NULL_FLAG;
-    extra_fields->push_back(cr_field);
+    alter_info->create_list.push_back(cr_field);
   }
   /*
     create and lock table
@@ -2707,8 +2707,7 @@ static TABLE *create_table_from_items(TH
   {
     tmp_disable_binlog(thd);
     if (!mysql_create_table(thd, create_table->db, create_table->table_name,
-                            create_info, *extra_fields, *keys, 0,
-                            select_field_count))
+                            create_info, alter_info, 0, select_field_count))
     {
       /*
         If we are here in prelocked mode we either create temporary table

--- 1.207/sql/sql_lex.cc	2006-12-12 01:50:17 +03:00
+++ 1.208/sql/sql_lex.cc	2006-12-12 01:50:17 +03:00
@@ -1062,8 +1062,7 @@ Alter_info::Alter_info(const Alter_info 
   create_list(rhs.create_list, mem_root),
   flags(rhs.flags),
   keys_onoff(rhs.keys_onoff),
-  tablespace_op(rhs.tablespace_op),
-  is_simple(rhs.is_simple)
+  tablespace_op(rhs.tablespace_op)
 {}
 
 

--- 1.592/sql/sql_parse.cc	2006-12-12 01:50:17 +03:00
+++ 1.593/sql/sql_parse.cc	2006-12-12 01:50:17 +03:00
@@ -2908,12 +2908,13 @@ mysql_execute_command(THD *thd)
     {
       /* out of memory when creating a copy of alter_info */
       res= 1;
-      goto unsent_create_error;
+      goto end_with_restore_list;
     }
 
     if ((res= create_table_precheck(thd, select_tables, create_table)))
       goto end_with_restore_list;
 
+
 #ifndef HAVE_READLINK
     create_info.data_file_name= create_info.index_file_name= NULL;
 #else
@@ -2969,7 +2970,7 @@ mysql_execute_command(THD *thd)
           Is table which we are changing used somewhere in other parts
           of query
         */
-        if (!(lex->create_info.options & HA_LEX_CREATE_TMP_TABLE))
+        if (!(create_info.options & HA_LEX_CREATE_TMP_TABLE))
         {
           TABLE_LIST *duplicate;
           if ((duplicate= unique_table(thd, create_table, select_tables)))
@@ -2980,10 +2981,10 @@ mysql_execute_command(THD *thd)
           }
         }
         /* If we create merge table, we have to test tables in merge, too */
-        if (lex->create_info.used_fields & HA_CREATE_USED_UNION)
+        if (create_info.used_fields & HA_CREATE_USED_UNION)
         {
           TABLE_LIST *tab;
-          for (tab= (TABLE_LIST*) lex->create_info.merge_list.first;
+          for (tab= (TABLE_LIST*) create_info.merge_list.first;
                tab;
                tab= tab->next_local)
           {
@@ -3021,7 +3022,7 @@ mysql_execute_command(THD *thd)
       /* regular create */
       if (lex->name)
         res= mysql_create_like_table(thd, create_table, &create_info,
-                                     (Table_ident *)lex->name); 
+                                     (Table_ident *)lex->name);
       else
       {
         res= mysql_create_table(thd, create_table->db,
@@ -3075,9 +3076,9 @@ end_with_restore_list:
     create_info.db_type= DB_TYPE_DEFAULT;
     create_info.default_table_charset= thd->variables.collation_database;
 
-    res= mysql_alter_table(thd, first_table->db, first_table->real_name,
+    res= mysql_alter_table(thd, first_table->db, first_table->table_name,
                            &create_info, first_table, &alter_info,
-                           0, (ORDER*)0, DUP_ERROR, 0);
+                           0, (ORDER*) 0, 0);
     break;
   }
 #ifdef HAVE_REPLICATION
@@ -3820,6 +3821,7 @@ end_with_restore_list:
       break;
     }
 #endif
+
     if (check_access(thd,CREATE_ACL,lex->name,0,1,0,is_schema_db(lex->name)))
       break;
     res= mysql_create_db(thd,(lower_case_table_names == 2 ? alias : lex->name),
@@ -4507,7 +4509,7 @@ end_with_restore_list:
             goto error;
         }
 
-	my_bool nsok= thd->net.no_send_ok;
+	my_bool save_no_send_ok= thd->net.no_send_ok;
 	thd->net.no_send_ok= TRUE;
 	if (sp->m_flags & sp_head::MULTI_RESULTS)
 	{
@@ -4518,7 +4520,7 @@ end_with_restore_list:
               back
             */
 	    my_error(ER_SP_BADSELECT, MYF(0), sp->m_qname.str);
-	    thd->net.no_send_ok= nsok;
+	    thd->net.no_send_ok= save_no_send_ok;
 	    goto error;
 	  }
           /*
@@ -4534,7 +4536,7 @@ end_with_restore_list:
 	if (check_routine_access(thd, EXECUTE_ACL,
 				 sp->m_db.str, sp->m_name.str, TRUE, FALSE))
 	{
-	  thd->net.no_send_ok= nsok;
+	  thd->net.no_send_ok= save_no_send_ok;
 	  goto error;
 	}
 #endif
@@ -4561,7 +4563,7 @@ end_with_restore_list:
 
 	thd->variables.select_limit= select_limit;
 
-	thd->net.no_send_ok= nsok;
+	thd->net.no_send_ok= save_no_send_ok;
         thd->server_status&= ~bits_to_be_cleared;
 
 	if (!res)

--- 1.327/sql/sql_table.cc	2006-12-12 01:50:17 +03:00
+++ 1.328/sql/sql_table.cc	2006-12-12 01:50:17 +03:00
@@ -1569,7 +1569,7 @@ void sp_prepare_create_field(THD *thd, c
     create_info [in/out] Create information (like MAX_ROWS)
     alter_info  [in/out] List of columns and indexes to create
     internal_tmp_table   Set to 1 if this is an internal temporary table
-			 (From ALTER TABLE)
+                         (From ALTER TABLE)
 
   DESCRIPTION
     If one creates a temporary table, this is automatically opened
@@ -1592,7 +1592,7 @@ void sp_prepare_create_field(THD *thd, c
 bool mysql_create_table(THD *thd,const char *db, const char *table_name,
                         HA_CREATE_INFO *create_info,
                         Alter_info *alter_info,
-                        List<Key> &keys,bool internal_tmp_table,
+                        bool internal_tmp_table,
                         uint select_field_count)
 {
   char		path[FN_REFLEN];
@@ -2327,9 +2327,12 @@ static bool mysql_admin_table(THD* thd, 
           (table->table->file->ha_check_for_upgrade(check_opt) ==
            HA_ADMIN_NEEDS_ALTER))
       {
+        my_bool save_no_send_ok= thd->net.no_send_ok;
         close_thread_tables(thd);
         tmp_disable_binlog(thd); // binlogging is done by caller if wanted
-        result_code= mysql_recreate_table(thd, table, 0);
+        thd->net.no_send_ok= TRUE;
+        result_code= mysql_recreate_table(thd, table);
+        thd->net.no_send_ok= save_no_send_ok;
         reenable_binlog(thd);
         goto send_result;
       }
@@ -2956,8 +2959,7 @@ bool mysql_alter_table(THD *thd,char *ne
                        HA_CREATE_INFO *create_info,
                        TABLE_LIST *table_list,
                        Alter_info *alter_info,
-                       uint order_num, ORDER *order,
-                       bool ignore)
+                       uint order_num, ORDER *order, bool ignore)
 {
   TABLE *table,*new_table=0;
   int error;
@@ -3565,7 +3567,7 @@ view_err:
   {
     tmp_disable_binlog(thd);
     error= mysql_create_table(thd, new_db, tmp_name,
-                              create_info,alter_info, 1, 0);
+                              create_info, &new_info, 1, 0);
     reenable_binlog(thd);
     if (error)
       DBUG_RETURN(error);
@@ -4021,20 +4023,18 @@ copy_data_between_tables(TABLE *from,TAB
     Like mysql_alter_table().
 */
 bool mysql_recreate_table(THD *thd, TABLE_LIST *table_list)
-int mysql_recreate_table(THD *thd, TABLE_LIST *table_list)
 {
-  LEX *lex= thd->lex;
   HA_CREATE_INFO create_info;
   Alter_info alter_info;
 
   DBUG_ENTER("mysql_recreate_table");
 
-  bzero((char*) &create_info,sizeof(create_info));
+  bzero((char*) &create_info, sizeof(create_info));
   create_info.db_type=DB_TYPE_DEFAULT;
   create_info.row_type=ROW_TYPE_NOT_USED;
   create_info.default_table_charset=default_charset_info;
   /* Force alter table to recreate table */
-  lex->alter_info.flags= ALTER_CHANGE_COLUMN;
+  alter_info.flags= ALTER_CHANGE_COLUMN;
   DBUG_RETURN(mysql_alter_table(thd, NullS, NullS, &create_info,
                                 table_list, &alter_info,
                                 0, (ORDER *) 0, 0));

--- 1.498/sql/sql_yacc.yy	2006-12-12 01:50:17 +03:00
+++ 1.499/sql/sql_yacc.yy	2006-12-12 01:50:17 +03:00
@@ -1190,7 +1190,6 @@ create:
 							TL_OPTION_UPDATING))
 	      YYABORT;
             lex->alter_info.reset();
-            lex->alter_info.is_simple= 0;
             lex->alter_info.flags= ALTER_ADD_INDEX;
 	    lex->col_list.empty();
 	    lex->change=NullS;
@@ -3313,7 +3312,7 @@ alter:
 	  lex->create_info.db_type= DB_TYPE_DEFAULT;
 	  lex->create_info.default_table_charset= NULL;
 	  lex->create_info.row_type= ROW_TYPE_NOT_USED;
-	  lex->alter_info.reset();
+          lex->alter_info.reset();
 	}
 	alter_list
 	{}
@@ -6076,7 +6075,6 @@ drop:
 	     LEX *lex=Lex;
 	     lex->sql_command= SQLCOM_DROP_INDEX;
              lex->alter_info.reset();
-             lex->alter_info.is_simple= 0;
              lex->alter_info.flags= ALTER_DROP_INDEX;
 	     lex->alter_info.drop_list.push_back(new Alter_drop(Alter_drop::KEY,
                                                                 $3.str));

--- 1.215/mysql-test/r/sp.result	2006-12-12 01:50:17 +03:00
+++ 1.216/mysql-test/r/sp.result	2006-12-12 01:50:17 +03:00
@@ -5626,5 +5626,22 @@ Called B
 Called B
 drop procedure proc_21462_a|
 drop procedure proc_21462_b|
+drop table if exists t3|
+drop procedure if exists proc_bug19733|
+create table t3 (s1 int)|
+create procedure proc_bug19733()
+begin
+declare v int default 0;
+while v < 100 do
+create index i on t3 (s1);
+drop index i on t3;
+set v = v + 1;
+end while;
+end|
+call proc_bug19733()|
+call proc_bug19733()|
+call proc_bug19733()|
+drop procedure proc_bug19733|
+drop table t3|
 End of 5.0 tests
 drop table t1,t2;

--- 1.205/mysql-test/t/sp.test	2006-12-12 01:50:17 +03:00
+++ 1.206/mysql-test/t/sp.test	2006-12-12 01:50:17 +03:00
@@ -6587,6 +6587,34 @@ call proc_21462_b(1)|
 drop procedure proc_21462_a|
 drop procedure proc_21462_b|
 
+
+#
+# Bug#19733 "Repeated alter, or repeated create/drop, fails"
+# Check that CREATE/DROP INDEX is re-execution friendly.
+# 
+--disable_warnings
+drop table if exists t3|
+drop procedure if exists proc_bug19733|
+--enable_warnings
+create table t3 (s1 int)|
+
+create procedure proc_bug19733()
+begin
+  declare v int default 0;
+  while v < 100 do
+    create index i on t3 (s1);
+    drop index i on t3;
+    set v = v + 1;
+  end while;
+end|
+
+call proc_bug19733()|
+call proc_bug19733()|
+call proc_bug19733()|
+
+drop procedure proc_bug19733|
+drop table t3|
+
 --echo End of 5.0 tests
 
 

--- 1.83/mysql-test/r/ps.result	2006-12-12 01:50:17 +03:00
+++ 1.84/mysql-test/r/ps.result	2006-12-12 01:50:17 +03:00
@@ -1055,230 +1055,6 @@ EXECUTE stmt USING @a;
 0	0
 DEALLOCATE PREPARE stmt;
 DROP TABLE t1;
-ERROR HY000: Unknown error
-show status like 'prepared_stmt_count';
-Variable_name	Value
-Prepared_stmt_count	0
-set global max_prepared_stmt_count=1;
-prepare stmt from "select 1";
-show status like 'prepared_stmt_count';
-Variable_name	Value
-Prepared_stmt_count	1
-prepare stmt1 from "select 1";
-ERROR HY000: Unknown error
-show status like 'prepared_stmt_count';
-Variable_name	Value
-Prepared_stmt_count	1
-deallocate prepare stmt;
-show status like 'prepared_stmt_count';
-Variable_name	Value
-Prepared_stmt_count	0
-prepare stmt from "select 1";
-show status like 'prepared_stmt_count';
-Variable_name	Value
-Prepared_stmt_count	1
-prepare stmt from "select 2";
-show status like 'prepared_stmt_count';
-Variable_name	Value
-Prepared_stmt_count	1
-show status like 'prepared_stmt_count';
-Variable_name	Value
-Prepared_stmt_count	1
-select @@max_prepared_stmt_count;
-@@max_prepared_stmt_count
-1
-set global max_prepared_stmt_count=0;
-prepare stmt from "select 1";
-ERROR HY000: Unknown error
-execute stmt;
-ERROR HY000: Unknown prepared statement handler (stmt) given to EXECUTE
-show status like 'prepared_stmt_count';
-Variable_name	Value
-Prepared_stmt_count	0
-prepare stmt from "select 1";
-ERROR HY000: Unknown error
-show status like 'prepared_stmt_count';
-Variable_name	Value
-Prepared_stmt_count	0
-set global max_prepared_stmt_count=3;
-select @@max_prepared_stmt_count;
-@@max_prepared_stmt_count
-3
-show status like 'prepared_stmt_count';
-Variable_name	Value
-Prepared_stmt_count	0
-prepare stmt from "select 1";
-prepare stmt from "select 2";
-prepare stmt1 from "select 3";
-prepare stmt2 from "select 4";
-ERROR HY000: Unknown error
-prepare stmt2 from "select 4";
-ERROR HY000: Unknown error
-select @@max_prepared_stmt_count;
-@@max_prepared_stmt_count
-3
-show status like 'prepared_stmt_count';
-Variable_name	Value
-Prepared_stmt_count	3
-deallocate prepare stmt;
-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;
-CREATE TABLE t1(
-ID int(10) unsigned NOT NULL auto_increment,
-Member_ID varchar(15) NOT NULL default '',
-Action varchar(12) NOT NULL,
-Action_Date datetime NOT NULL,
-Track varchar(15) default NULL,
-User varchar(12) default NULL,
-Date_Updated timestamp NOT NULL default CURRENT_TIMESTAMP on update
-CURRENT_TIMESTAMP,
-PRIMARY KEY (ID),
-KEY Action (Action),
-KEY Action_Date (Action_Date)
-);
-INSERT INTO t1(Member_ID, Action, Action_Date, Track) VALUES
-('111111', 'Disenrolled', '2006-03-01', 'CAD' ),
-('111111', 'Enrolled', '2006-03-01', 'CAD' ),
-('111111', 'Disenrolled', '2006-07-03', 'CAD' ),
-('222222', 'Enrolled', '2006-03-07', 'CAD' ),
-('222222', 'Enrolled', '2006-03-07', 'CHF' ),
-('222222', 'Disenrolled', '2006-08-02', 'CHF' ),
-('333333', 'Enrolled', '2006-03-01', 'CAD' ),
-('333333', 'Disenrolled', '2006-03-01', 'CAD' ),
-('444444', 'Enrolled', '2006-03-01', 'CAD' ),
-('555555', 'Disenrolled', '2006-03-01', 'CAD' ),
-('555555', 'Enrolled', '2006-07-21', 'CAD' ),
-('555555', 'Disenrolled', '2006-03-01', 'CHF' ),
-('666666', 'Enrolled', '2006-02-09', 'CAD' ),
-('666666', 'Enrolled', '2006-05-12', 'CHF' ),
-('666666', 'Disenrolled', '2006-06-01', 'CAD' );
-PREPARE STMT FROM
-"SELECT GROUP_CONCAT(Track SEPARATOR ', ') FROM t1
-  WHERE Member_ID=? AND Action='Enrolled' AND
-        (Track,Action_Date) IN (SELECT Track, MAX(Action_Date) FROM t1
-                                  WHERE Member_ID=?
-                                    GROUP BY Track 
-                                      HAVING Track>='CAD' AND
-                                             MAX(Action_Date)>'2006-03-01')";
-SET @id='111111';
-EXECUTE STMT USING @id,@id;
-GROUP_CONCAT(Track SEPARATOR ', ')
-NULL
-SET @id='222222';
-EXECUTE STMT USING @id,@id;
-GROUP_CONCAT(Track SEPARATOR ', ')
-CAD
-DEALLOCATE PREPARE STMT;
-DROP TABLE t1;
-DROP TABLE IF EXISTS t1;
-CREATE TABLE t1 (i INT, INDEX(i));
-INSERT INTO t1 VALUES (1);
-PREPARE stmt FROM "SELECT (COUNT(i) = 1), COUNT(i) FROM t1 WHERE i = ?";
-SET @a = 0;
-EXECUTE stmt USING @a;
-(COUNT(i) = 1)	COUNT(i)
-0	0
-SET @a = 1;
-EXECUTE stmt USING @a;
-(COUNT(i) = 1)	COUNT(i)
-1	1
-SET @a = 0;
-EXECUTE stmt USING @a;
-(COUNT(i) = 1)	COUNT(i)
-0	0
-PREPARE stmt FROM "SELECT (AVG(i) = 1), AVG(i) FROM t1 WHERE i = ?";
-SET @a = 0;
-EXECUTE stmt USING @a;
-(AVG(i) = 1)	AVG(i)
-NULL	NULL
-SET @a = 1;
-EXECUTE stmt USING @a;
-(AVG(i) = 1)	AVG(i)
-1	1.0000
-SET @a = 0;
-EXECUTE stmt USING @a;
-(AVG(i) = 1)	AVG(i)
-NULL	NULL
-PREPARE stmt FROM "SELECT (VARIANCE(i) = 1), VARIANCE(i) FROM t1 WHERE i = ?";
-SET @a = 0;
-EXECUTE stmt USING @a;
-(VARIANCE(i) = 1)	VARIANCE(i)
-NULL	NULL
-SET @a = 1;
-EXECUTE stmt USING @a;
-(VARIANCE(i) = 1)	VARIANCE(i)
-0	0.0000
-SET @a = 0;
-EXECUTE stmt USING @a;
-(VARIANCE(i) = 1)	VARIANCE(i)
-NULL	NULL
-PREPARE stmt FROM "SELECT (STDDEV(i) = 1), STDDEV(i) FROM t1 WHERE i = ?";
-SET @a = 0;
-EXECUTE stmt USING @a;
-(STDDEV(i) = 1)	STDDEV(i)
-NULL	NULL
-SET @a = 1;
-EXECUTE stmt USING @a;
-(STDDEV(i) = 1)	STDDEV(i)
-0	0.0000
-SET @a = 0;
-EXECUTE stmt USING @a;
-(STDDEV(i) = 1)	STDDEV(i)
-NULL	NULL
-PREPARE stmt FROM "SELECT (BIT_OR(i) = 1), BIT_OR(i) FROM t1 WHERE i = ?";
-SET @a = 0;
-EXECUTE stmt USING @a;
-(BIT_OR(i) = 1)	BIT_OR(i)
-0	0
-SET @a = 1;
-EXECUTE stmt USING @a;
-(BIT_OR(i) = 1)	BIT_OR(i)
-1	1
-SET @a = 0;
-EXECUTE stmt USING @a;
-(BIT_OR(i) = 1)	BIT_OR(i)
-0	0
-PREPARE stmt FROM "SELECT (BIT_AND(i) = 1), BIT_AND(i) FROM t1 WHERE i = ?";
-SET @a = 0;
-EXECUTE stmt USING @a;
-(BIT_AND(i) = 1)	BIT_AND(i)
-0	18446744073709551615
-SET @a = 1;
-EXECUTE stmt USING @a;
-(BIT_AND(i) = 1)	BIT_AND(i)
-1	1
-SET @a = 0;
-EXECUTE stmt USING @a;
-(BIT_AND(i) = 1)	BIT_AND(i)
-0	18446744073709551615
-PREPARE stmt FROM "SELECT (BIT_XOR(i) = 1), BIT_XOR(i) FROM t1 WHERE i = ?";
-SET @a = 0;
-EXECUTE stmt USING @a;
-(BIT_XOR(i) = 1)	BIT_XOR(i)
-0	0
-SET @a = 1;
-EXECUTE stmt USING @a;
-(BIT_XOR(i) = 1)	BIT_XOR(i)
-1	1
-SET @a = 0;
-EXECUTE stmt USING @a;
-(BIT_XOR(i) = 1)	BIT_XOR(i)
-0	0
-DEALLOCATE PREPARE stmt;
-DROP TABLE t1;
 DROP TABLE IF EXISTS t1, t2;
 CREATE TABLE t1 (i INT);
 PREPARE st_19182
@@ -1311,7 +1087,7 @@ t1	CREATE TABLE `t1` (
 show create table mysqltest.t2;
 Table	Create Table
 t2	CREATE TABLE `t2` (
-  `test` char(4) character set latin1 NOT NULL default ''
+  `test` varchar(4) character set latin1 NOT NULL default ''
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8
 drop table mysqltest.t1;
 drop table mysqltest.t2;
@@ -1326,7 +1102,7 @@ t1	CREATE TABLE `t1` (
 show create table mysqltest.t2;
 Table	Create Table
 t2	CREATE TABLE `t2` (
-  `test` char(4) NOT NULL default ''
+  `test` varchar(4) NOT NULL default ''
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
 drop database mysqltest;
 deallocate prepare stmt1;
@@ -1336,14 +1112,14 @@ show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (
   `c` char(10) default NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/tmp/'
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
 drop table t1;
 execute stmt;
 show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (
   `c` char(10) default NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='MYSQLTEST_VARDIR/tmp/'
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
 drop table t1;
 deallocate prepare stmt;
 End of 4.1 tests.
@@ -1787,4 +1563,54 @@ Variable_name	Value
 Slow_queries	1
 deallocate prepare no_index;
 deallocate prepare sq;
+drop table if exists t1;
+create table t1 (s1 char(20));
+prepare stmt from "alter table t1 modify s1 int";
+execute stmt;
+execute stmt;
+drop table t1;
+deallocate prepare stmt;
+drop table if exists t1;
+create table t1 (a int, b int);
+prepare s_6895 from "alter table t1 drop column b";
+execute s_6895;
+show columns from t1;
+Field	Type	Null	Key	Default	Extra
+a	int(11)	YES		NULL	
+drop table t1;
+create table t1 (a int, b int);
+execute s_6895;
+show columns from t1;
+Field	Type	Null	Key	Default	Extra
+a	int(11)	YES		NULL	
+drop table t1;
+create table t1 (a int, b int);
+execute s_6895;
+show columns from t1;
+Field	Type	Null	Key	Default	Extra
+a	int(11)	YES		NULL	
+deallocate prepare s_6895;
+drop table t1;
+create table t1 (i int primary key auto_increment) comment='comment for table t1';
+create table t2 (i int, j int, k int);
+prepare stmt from "alter table t1 auto_increment=100";
+execute stmt;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `i` int(11) NOT NULL auto_increment,
+  PRIMARY KEY  (`i`)
+) ENGINE=MyISAM AUTO_INCREMENT=100 DEFAULT CHARSET=latin1 COMMENT='comment for table t1'
+flush tables;
+select * from t2;
+i	j	k
+execute stmt;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `i` int(11) NOT NULL auto_increment,
+  PRIMARY KEY  (`i`)
+) ENGINE=MyISAM AUTO_INCREMENT=100 DEFAULT CHARSET=latin1 COMMENT='comment for table t1'
+deallocate prepare stmt;
+drop table t1, t2;
 End of 5.0 tests.

--- 1.80/mysql-test/t/ps.test	2006-12-12 01:50:17 +03:00
+++ 1.81/mysql-test/t/ps.test	2006-12-12 01:50:17 +03:00
@@ -1610,4 +1610,76 @@ execute sq;
 deallocate prepare no_index;
 deallocate prepare sq;
 
+#
+# Bug#4968 "Stored procedure crash if cursor opened on altered table"
+# The bug is not repeatable any more after the fix for
+# Bug#15217 "Bug #15217   Using a SP cursor on a table created with PREPARE
+# fails with weird error", however ALTER TABLE is not re-execution friendly
+# and that caused a valgrind warning. Check that the warning is gone.
+#
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+create table t1 (s1 char(20));
+prepare stmt from "alter table t1 modify s1 int";
+execute stmt;
+execute stmt;
+drop table t1;
+deallocate prepare stmt;
+
+#
+# Bug#6895 "Prepared Statements: ALTER TABLE DROP COLUMN does nothing"
+#
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+create table t1 (a int, b int);
+prepare s_6895 from "alter table t1 drop column b";
+execute s_6895;
+show columns from t1;
+drop table t1;
+create table t1 (a int, b int);
+execute s_6895;
+show columns from t1;
+drop table t1;
+create table t1 (a int, b int);
+execute s_6895;
+show columns from t1;
+deallocate prepare s_6895;
+drop table t1;
+
+#
+# Bug #22060 "ALTER TABLE x AUTO_INCREMENT=y in SP crashes server"
+#
+# 5.0 part of the test.
+#
+
+# ALTER TABLE
+create table t1 (i int primary key auto_increment) comment='comment for table t1';
+create table t2 (i int, j int, k int);
+prepare stmt from "alter table t1 auto_increment=100";
+execute stmt;
+show create table t1;
+# Let us trash table-cache's memory
+flush tables;
+select * from t2;
+execute stmt;
+show create table t1;
+deallocate prepare stmt;
+drop table t1, t2;
+# 5.1 part of the test.
+# CREATE DATABASE
+#set @old_character_set_server= @@character_set_server;
+#set @@character_set_server= latin1; 
+#prepare stmt from "create database mysqltest";
+#execute stmt;
+#show create database mysqltest;
+#drop database mysqltest;
+#set @@character_set_server= utf8; 
+#execute stmt;
+#show create database mysqltest;
+#drop database mysqltest;
+#deallocate prepare stmt;
+#set @@character_set_server= @old_character_set_server;
+
 --echo End of 5.0 tests.
Thread
bk commit into 5.0 tree (kostja:1.2317) BUG#4968konstantin11 Dec