List:Commits« Previous MessageNext Message »
From:konstantin Date:May 21 2007 6:57pm
Subject:bk commit into 5.1 tree (kostja:1.2529)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 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, 2007-05-21 22:57:34+04:00, kostja@vajra.(none) +3 -0
  Work in progress (alter table and stored procedures, 4968)

  sql/mysql_priv.h@stripped, 2007-05-21 22:57:30+04:00, kostja@vajra.(none) +1 -1
    Next increment.

  sql/sql_parse.cc@stripped, 2007-05-21 22:57:30+04:00, kostja@vajra.(none) +1 -2
    Next increment.

  sql/sql_table.cc@stripped, 2007-05-21 22:57:31+04:00, kostja@vajra.(none) +48 -37
    Next increment.

# 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:	vajra.(none)
# Root:	/opt/local/work/mysql-5.1-4968-new

--- 1.508/sql/mysql_priv.h	2007-05-21 19:07:46 +04:00
+++ 1.509/sql/mysql_priv.h	2007-05-21 22:57:30 +04:00
@@ -960,7 +960,7 @@ int prepare_create_field(create_field *s
 			 longlong table_flags);
 bool mysql_create_table(THD *thd,const char *db, const char *table_name,
                         HA_CREATE_INFO *create_info,
-                        List<create_field> &fields, List<Key> &keys,
+                        Alter_info *alter_info,
                         bool tmp_table, uint select_field_count);
 bool mysql_create_table_no_lock(THD *thd, const char *db,
                                 const char *table_name,

--- 1.669/sql/sql_parse.cc	2007-05-21 19:07:46 +04:00
+++ 1.670/sql/sql_parse.cc	2007-05-21 22:57:30 +04:00
@@ -2259,8 +2259,7 @@ mysql_execute_command(THD *thd)
       {
         res= mysql_create_table(thd, create_table->db,
 				create_table->table_name, &create_info,
-				alter_info.create_list,
-				alter_info.key_list, 0, 0);
+				&alter_info, 0, 0);
       }
       if (!res)
 	send_ok(thd);

--- 1.417/sql/sql_table.cc	2007-05-21 19:07:47 +04:00
+++ 1.418/sql/sql_table.cc	2007-05-21 22:57:31 +04:00
@@ -3559,8 +3559,8 @@ warn:
 
 bool mysql_create_table(THD *thd, const char *db, const char *table_name,
                         HA_CREATE_INFO *create_info,
-                        List<create_field> &fields,
-                        List<Key> &keys,bool internal_tmp_table,
+                        Alter_info *alter_info,
+                        bool internal_tmp_table,
                         uint select_field_count)
 {
   TABLE *name_lock= 0;
@@ -3611,7 +3611,8 @@ bool mysql_create_table(THD *thd, const 
   }
 
   result= mysql_create_table_no_lock(thd, db, table_name, create_info,
-                                     fields, keys, internal_tmp_table,
+                                     alter_info->create_list,
+                                     alter_info->key_list, internal_tmp_table,
                                      select_field_count);
 
 unlock:
@@ -5557,11 +5558,10 @@ view_err:
   List_iterator<Alter_drop> drop_it(alter_info->drop_list);
   List_iterator<create_field> def_it(fields);
   List_iterator<Alter_column> alter_it(alter_info->alter_list);
-  List<create_field> create_list;		// Add new fields here
-  List<Key> key_list;				// Add new keys here
-  List_iterator<create_field> find_it(create_list);
+  Alter_info new_info;                          // Add new fields and keys here
+  List_iterator<create_field> find_it(new_info.create_list);
   List_iterator<Key> key_it(keys);
-  List_iterator<create_field> field_it(create_list);
+  List_iterator<create_field> field_it(new_info.create_list);
   List<key_part_spec> key_parts;
 
   KEY *key_info=table->key_info;
@@ -5862,7 +5862,7 @@ view_err:
       def->field=field;
       if (!def->after)
       {
-	create_list.push_back(def);
+	new_info.create_list.push_back(def);
 	def_it.remove();
       }
     }
@@ -5872,7 +5872,8 @@ view_err:
         This field was not dropped and not changed, add it to the list
         for the new table.
       */
-      create_list.push_back(def=new create_field(field,field));
+      def= new create_field(field,field);
+      new_info.create_list.push_back(def);
       alter_it.rewind();			// Change default if ALTER
       Alter_column *alter;
       while ((alter=alter_it++))
@@ -5904,9 +5905,9 @@ view_err:
       goto err;
     }
     if (!def->after)
-      create_list.push_back(def);
+      new_info.create_list.push_back(def);
     else if (def->after == first_keyword)
-      create_list.push_front(def);
+      new_info.create_list.push_front(def);
     else
     {
       create_field *find;
@@ -5930,7 +5931,7 @@ view_err:
              alter_info->alter_list.head()->name, table_name);
     goto err;
   }
-  if (!create_list.elements)
+  if (!new_info.create_list.elements)
   {
     my_message(ER_CANT_REMOVE_ALL_FIELDS, ER(ER_CANT_REMOVE_ALL_FIELDS),
                MYF(0));
@@ -6014,6 +6015,8 @@ view_err:
     if (key_parts.elements)
     {
       KEY_CREATE_INFO key_create_info;
+      Key *key;
+      enum Key::Keytype key_type;
       bzero((char*) &key_create_info, sizeof(key_create_info));
 
       key_create_info.algorithm= key_info->algorithm;
@@ -6022,17 +6025,25 @@ view_err:
       if (key_info->flags & HA_USES_PARSER)
         key_create_info.parser_name= *key_info->parser_name;
 
-      key_list.push_back(new Key(key_info->flags & HA_SPATIAL ? Key::SPATIAL :
-				 (key_info->flags & HA_NOSAME ?
-				 (!my_strcasecmp(system_charset_info,
-						 key_name, primary_key_name) ?
-				  Key::PRIMARY	: Key::UNIQUE) :
-				  (key_info->flags & HA_FULLTEXT ?
-				   Key::FULLTEXT : Key::MULTIPLE)),
-				 key_name,
-                                 &key_create_info,
-                                 test(key_info->flags & HA_GENERATED_KEY),
-				 key_parts));
+      if (key_info->flags & HA_SPATIAL)
+        key_type= Key::SPATIAL;
+      else if (key_info->flags & HA_NOSAME)
+      {
+        if (! my_strcasecmp(system_charset_info, key_name, primary_key_name))
+          key_type= Key::PRIMARY;
+        else
+          key_type= Key::UNIQUE;
+      }
+      else if (key_info->flags & HA_FULLTEXT)
+        key_type= Key::FULLTEXT;
+      else
+        key_type= Key::MULTIPLE;
+
+      key= new Key(key_type, key_name,
+                   &key_create_info,
+                   test(key_info->flags & HA_GENERATED_KEY),
+                   key_parts);
+      new_info.key_list.push_back(key);
     }
   }
   {
@@ -6040,7 +6051,7 @@ view_err:
     while ((key=key_it++))			// Add new keys
     {
       if (key->type != Key::FOREIGN_KEY)
-	key_list.push_back(key);
+        new_info.key_list.push_back(key);
       if (key->name &&
 	  !my_strcasecmp(system_charset_info,key->name,primary_key_name))
       {
@@ -6110,7 +6121,7 @@ view_err:
   else
   {
     /* Check how much the tables differ. */
-    need_copy_table= compare_tables(table, &create_list, &key_list,
+    need_copy_table= compare_tables(table, &new_info.create_list, &new_info.key_list,
                                     create_info, alter_info, order_num,
                                     &key_info_buffer,
                                     &index_drop_buffer, &index_drop_count,
@@ -6240,7 +6251,7 @@ view_err:
     DBUG_ASSERT(!name_lock);
     DBUG_RETURN(fast_alter_partition_table(thd, table, alter_info,
                                            create_info, table_list,
-                                           &create_list, &key_list,
+                                           &new_info.create_list, &new_info.key_list,
                                            db, table_name,
                                            fast_alter_partition));
   }
@@ -6299,8 +6310,8 @@ view_err:
   */
   tmp_disable_binlog(thd);
   error= mysql_create_table_no_lock(thd, new_db, tmp_name,
-                                    create_info, create_list,
-                                    key_list, 1, 0);
+                                    create_info, new_info.create_list,
+                                    new_info.key_list, 1, 0);
   reenable_binlog(thd);
   if (error)
     goto err;
@@ -6341,7 +6352,7 @@ view_err:
     /* We don't want update TIMESTAMP fields during ALTER TABLE. */
     new_table->timestamp_field_type= TIMESTAMP_NO_AUTO_SET;
     new_table->next_number_field=new_table->found_next_number_field;
-    error=copy_data_between_tables(table, new_table, create_list, ignore,
+    error=copy_data_between_tables(table, new_table, new_info.create_list, ignore,
                                    order_num, order, &copied, &deleted,
                                    alter_info->keys_onoff);
   }
@@ -6979,21 +6990,21 @@ copy_data_between_tables(TABLE *from,TAB
 */
 bool mysql_recreate_table(THD *thd, TABLE_LIST *table_list)
 {
-  DBUG_ENTER("mysql_recreate_table");
-  LEX *lex= thd->lex;
   HA_CREATE_INFO create_info;
-  lex->col_list.empty();
-  lex->alter_info.reset();
+  Alter_info alter_info;
+
+  DBUG_ENTER("mysql_recreate_table");
+
   bzero((char*) &create_info, sizeof(create_info));
   create_info.db_type= 0;
   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_RECREATE);
+  alter_info.flags= (ALTER_CHANGE_COLUMN | ALTER_RECREATE);
   DBUG_RETURN(mysql_alter_table(thd, NullS, NullS, &create_info,
-                                table_list, lex->alter_info.create_list,
-                                lex->alter_info.key_list, 0, (ORDER *) 0,
-                                0, &lex->alter_info));
+                                table_list, alter_info.create_list,
+                                alter_info.key_list, 0, (ORDER *) 0,
+                                0, &alter_info));
 }
 
 
Thread
bk commit into 5.1 tree (kostja:1.2529)konstantin21 May