List:Commits« Previous MessageNext Message »
From:Mattias Jonsson Date:October 17 2008 3:32pm
Subject:bzr commit into mysql-5.1 branch (mattias.jonsson:2675)
View as plain text  
#At file:///Users/mattiasj/clones/bzrroot/send-test-51-bugteam/

 2675 Mattias Jonsson	2008-10-17 [merge]
      test merge, please ignore
modified:
  mysql-test/r/partition_mgm_err.result
  mysql-test/t/partition_mgm_err.test
  sql/ha_partition.cc
  sql/ha_partition.h
  sql/sql_lex.h
  sql/sql_partition.cc
  sql/sql_table.cc
  sql/sql_yacc.yy

=== modified file 'mysql-test/r/partition_mgm_err.result'
--- a/mysql-test/r/partition_mgm_err.result	2006-06-09 14:20:23 +0000
+++ b/mysql-test/r/partition_mgm_err.result	2008-10-10 18:12:38 +0000
@@ -84,6 +84,14 @@ ALTER TABLE t1 DROP PARTITION x1;
 ERROR HY000: Partition management on a not partitioned table is not possible
 ALTER TABLE t1 COALESCE PARTITION 1;
 ERROR HY000: Partition management on a not partitioned table is not possible
+ALTER TABLE t1 ANALYZE PARTITION p1;
+ERROR HY000: Partition management on a not partitioned table is not possible
+ALTER TABLE t1 CHECK PARTITION p1;
+ERROR HY000: Partition management on a not partitioned table is not possible
+ALTER TABLE t1 OPTIMIZE PARTITION p1;
+ERROR HY000: Partition management on a not partitioned table is not possible
+ALTER TABLE t1 REPAIR PARTITION p1;
+ERROR HY000: Partition management on a not partitioned table is not possible
 DROP TABLE t1;
 CREATE TABLE t1 (a int)
 PARTITION BY KEY (a)

=== modified file 'mysql-test/t/partition_mgm_err.test'
--- a/mysql-test/t/partition_mgm_err.test	2006-03-11 14:17:10 +0000
+++ b/mysql-test/t/partition_mgm_err.test	2008-10-10 18:12:38 +0000
@@ -125,6 +125,18 @@ ALTER TABLE t1 DROP PARTITION x1;
 --error ER_PARTITION_MGMT_ON_NONPARTITIONED
 ALTER TABLE t1 COALESCE PARTITION 1;
 
+--error ER_PARTITION_MGMT_ON_NONPARTITIONED
+ALTER TABLE t1 ANALYZE PARTITION p1;
+
+--error ER_PARTITION_MGMT_ON_NONPARTITIONED
+ALTER TABLE t1 CHECK PARTITION p1;
+
+--error ER_PARTITION_MGMT_ON_NONPARTITIONED
+ALTER TABLE t1 OPTIMIZE PARTITION p1;
+
+--error ER_PARTITION_MGMT_ON_NONPARTITIONED
+ALTER TABLE t1 REPAIR PARTITION p1;
+
 DROP TABLE t1;
 
 CREATE TABLE t1 (a int)

=== modified file 'sql/ha_partition.cc'
--- a/sql/ha_partition.cc	2008-10-06 13:14:20 +0000
+++ b/sql/ha_partition.cc	2008-10-10 18:12:38 +0000
@@ -876,10 +876,7 @@ int ha_partition::optimize(THD *thd, HA_
 {
   DBUG_ENTER("ha_partition::optimize");
 
-  DBUG_RETURN(handle_opt_partitions(thd, check_opt, 
-                                    OPTIMIZE_PARTS,
-                                    thd->lex->alter_info.flags &
-                                    ALTER_OPTIMIZE_PARTITION ? FALSE : TRUE));
+  DBUG_RETURN(handle_opt_partitions(thd, check_opt, OPTIMIZE_PARTS));
 }
 
 
@@ -900,10 +897,7 @@ int ha_partition::analyze(THD *thd, HA_C
 {
   DBUG_ENTER("ha_partition::analyze");
 
-  DBUG_RETURN(handle_opt_partitions(thd, check_opt, 
-                                    ANALYZE_PARTS,
-                                    thd->lex->alter_info.flags &
-                                    ALTER_ANALYZE_PARTITION ? FALSE : TRUE));
+  DBUG_RETURN(handle_opt_partitions(thd, check_opt, ANALYZE_PARTS));
 }
 
 
@@ -924,10 +918,7 @@ int ha_partition::check(THD *thd, HA_CHE
 {
   DBUG_ENTER("ha_partition::check");
 
-  DBUG_RETURN(handle_opt_partitions(thd, check_opt, 
-                                    CHECK_PARTS,
-                                    thd->lex->alter_info.flags &
-                                    ALTER_CHECK_PARTITION ? FALSE : TRUE));
+  DBUG_RETURN(handle_opt_partitions(thd, check_opt, CHECK_PARTS));
 }
 
 
@@ -948,12 +939,10 @@ int ha_partition::repair(THD *thd, HA_CH
 {
   DBUG_ENTER("ha_partition::repair");
 
-  DBUG_RETURN(handle_opt_partitions(thd, check_opt, 
-                                    REPAIR_PARTS,
-                                    thd->lex->alter_info.flags &
-                                    ALTER_REPAIR_PARTITION ? FALSE : TRUE));
+  DBUG_RETURN(handle_opt_partitions(thd, check_opt, REPAIR_PARTS));
 }
 
+
 /*
   Handle optimize/analyze/check/repair of one partition
 
@@ -1056,7 +1045,6 @@ static bool print_admin_msg(THD* thd, co
     thd                      Thread object
     check_opt                Options
     flag                     Optimize/Analyze/Check/Repair flag
-    all_parts                All partitions or only a subset
 
   RETURN VALUE
     >0                        Failure
@@ -1064,7 +1052,7 @@ static bool print_admin_msg(THD* thd, co
 */
 
 int ha_partition::handle_opt_partitions(THD *thd, HA_CHECK_OPT *check_opt,
-                                        uint flag, bool all_parts)
+                                        uint flag)
 {
   List_iterator<partition_element> part_it(m_part_info->partitions);
   uint no_parts= m_part_info->no_parts;
@@ -1072,7 +1060,7 @@ int ha_partition::handle_opt_partitions(
   uint i= 0;
   int error;
   DBUG_ENTER("ha_partition::handle_opt_partitions");
-  DBUG_PRINT("enter", ("all_parts %u, flag= %u", all_parts, flag));
+  DBUG_PRINT("enter", ("flag= %u", flag));
 
   do
   {
@@ -1081,7 +1069,7 @@ int ha_partition::handle_opt_partitions(
       when ALTER TABLE <CMD> PARTITION ...
       it should only do named partitions, otherwise all partitions
     */
-    if (all_parts ||
+    if (!(thd->lex->alter_info.flags & ALTER_ADMIN_PARTITION) ||
         part_elem->part_state == PART_CHANGED)
     {
       if (m_is_sub_partitioned)

=== modified file 'sql/ha_partition.h'
--- a/sql/ha_partition.h	2008-10-01 10:14:55 +0000
+++ b/sql/ha_partition.h	2008-10-10 18:12:38 +0000
@@ -988,8 +988,7 @@ public:
     virtual bool is_crashed() const;
 
     private:
-    int handle_opt_partitions(THD *thd, HA_CHECK_OPT *check_opt,
-                              uint flags, bool all_parts);
+    int handle_opt_partitions(THD *thd, HA_CHECK_OPT *check_opt, uint flags);
     public:
   /*
     -------------------------------------------------------------------------

=== modified file 'sql/sql_lex.h'
--- a/sql/sql_lex.h	2008-10-07 21:52:49 +0000
+++ b/sql/sql_lex.h	2008-10-17 15:31:49 +0000
@@ -843,15 +843,12 @@ inline bool st_select_lex_unit::is_union
 #define ALTER_COALESCE_PARTITION (1L << 15)
 #define ALTER_REORGANIZE_PARTITION (1L << 16) 
 #define ALTER_PARTITION          (1L << 17)
-#define ALTER_OPTIMIZE_PARTITION (1L << 18)
+#define ALTER_ADMIN_PARTITION    (1L << 18)
 #define ALTER_TABLE_REORG        (1L << 19)
 #define ALTER_REBUILD_PARTITION  (1L << 20)
 #define ALTER_ALL_PARTITION      (1L << 21)
-#define ALTER_ANALYZE_PARTITION  (1L << 22)
-#define ALTER_CHECK_PARTITION    (1L << 23)
-#define ALTER_REPAIR_PARTITION   (1L << 24)
-#define ALTER_REMOVE_PARTITIONING (1L << 25)
-#define ALTER_FOREIGN_KEY         (1L << 26)
+#define ALTER_REMOVE_PARTITIONING (1L << 22)
+#define ALTER_FOREIGN_KEY        (1L << 23)
 
 enum enum_alter_table_change_level
 {

=== modified file 'sql/sql_partition.cc'
--- a/sql/sql_partition.cc	2008-10-07 15:19:32 +0000
+++ b/sql/sql_partition.cc	2008-10-10 18:12:38 +0000
@@ -4195,12 +4195,13 @@ uint prep_alter_part_table(THD *thd, TAB
       !(thd->work_part_info= thd->lex->part_info->get_clone()))
     DBUG_RETURN(TRUE);
 
+  /* ALTER_ADMIN_PARTITION is handled in mysql_admin_table */
+  DBUG_ASSERT(!(alter_info->flags & ALTER_ADMIN_PARTITION));
+
   if (alter_info->flags &
       (ALTER_ADD_PARTITION | ALTER_DROP_PARTITION |
        ALTER_COALESCE_PARTITION | ALTER_REORGANIZE_PARTITION |
-       ALTER_TABLE_REORG | ALTER_OPTIMIZE_PARTITION |
-       ALTER_CHECK_PARTITION | ALTER_ANALYZE_PARTITION |
-       ALTER_REPAIR_PARTITION | ALTER_REBUILD_PARTITION))
+       ALTER_TABLE_REORG | ALTER_REBUILD_PARTITION))
   {
     partition_info *tab_part_info= table->part_info;
     partition_info *alt_part_info= thd->work_part_info;
@@ -4592,11 +4593,7 @@ that are reorganised.
       }
       tab_part_info->no_parts-= no_parts_dropped;
     }
-    else if ((alter_info->flags & ALTER_OPTIMIZE_PARTITION) ||
-             (alter_info->flags & ALTER_ANALYZE_PARTITION) ||
-             (alter_info->flags & ALTER_CHECK_PARTITION) ||
-             (alter_info->flags & ALTER_REPAIR_PARTITION) ||
-             (alter_info->flags & ALTER_REBUILD_PARTITION))
+    else if (alter_info->flags & ALTER_REBUILD_PARTITION)
     {
       uint no_parts_found;
       uint no_parts_opt= alter_info->partition_names.elements;
@@ -4604,18 +4601,7 @@ that are reorganised.
       if (no_parts_found != no_parts_opt &&
           (!(alter_info->flags & ALTER_ALL_PARTITION)))
       {
-        const char *ptr;
-        if (alter_info->flags & ALTER_OPTIMIZE_PARTITION)
-          ptr= "OPTIMIZE";
-        else if (alter_info->flags & ALTER_ANALYZE_PARTITION)
-          ptr= "ANALYZE";
-        else if (alter_info->flags & ALTER_CHECK_PARTITION)
-          ptr= "CHECK";
-        else if (alter_info->flags & ALTER_REPAIR_PARTITION)
-          ptr= "REPAIR";
-        else
-          ptr= "REBUILD";
-        my_error(ER_DROP_PARTITION_NON_EXISTENT, MYF(0), ptr);
+        my_error(ER_DROP_PARTITION_NON_EXISTENT, MYF(0), "REBUILD");
         DBUG_RETURN(TRUE);
       }
       if (!(*fast_alter_partition))

=== modified file 'sql/sql_table.cc'
--- a/sql/sql_table.cc	2008-10-13 10:22:36 +0000
+++ b/sql/sql_table.cc	2008-10-17 15:31:49 +0000
@@ -4198,7 +4198,7 @@ static bool mysql_admin_table(THD* thd, 
       table->next_local= save_next_local;
       thd->open_options&= ~extra_open_options;
 #ifdef WITH_PARTITION_STORAGE_ENGINE
-      if (table->table && table->table->part_info)
+      if (table->table)
       {
         /*
           Set up which partitions that should be processed
@@ -4206,11 +4206,13 @@ static bool mysql_admin_table(THD* thd, 
         */
         Alter_info *alter_info= &lex->alter_info;
 
-        if (alter_info->flags & ALTER_ANALYZE_PARTITION ||
-            alter_info->flags & ALTER_CHECK_PARTITION ||
-            alter_info->flags & ALTER_OPTIMIZE_PARTITION ||
-            alter_info->flags & ALTER_REPAIR_PARTITION)
+        if (alter_info->flags & ALTER_ADMIN_PARTITION)
         {
+          if (!table->table->part_info)
+          {
+            my_error(ER_PARTITION_MGMT_ON_NONPARTITIONED, MYF(0));
+            DBUG_RETURN(TRUE);
+          }
           uint no_parts_found;
           uint no_parts_opt= alter_info->partition_names.elements;
           no_parts_found= set_part_state(alter_info, table->table->part_info,

=== modified file 'sql/sql_yacc.yy'
--- a/sql/sql_yacc.yy	2008-10-02 12:53:08 +0000
+++ b/sql/sql_yacc.yy	2008-10-10 18:12:38 +0000
@@ -5658,7 +5658,7 @@ alter_commands:
           {
             LEX *lex= Lex;
             lex->sql_command = SQLCOM_OPTIMIZE;
-            lex->alter_info.flags|= ALTER_OPTIMIZE_PARTITION;
+            lex->alter_info.flags|= ALTER_ADMIN_PARTITION;
             lex->no_write_to_binlog= $3;
             lex->check_opt.init();
           }
@@ -5668,7 +5668,7 @@ alter_commands:
           {
             LEX *lex= Lex;
             lex->sql_command = SQLCOM_ANALYZE;
-            lex->alter_info.flags|= ALTER_ANALYZE_PARTITION;
+            lex->alter_info.flags|= ALTER_ADMIN_PARTITION;
             lex->no_write_to_binlog= $3;
             lex->check_opt.init();
           }
@@ -5676,7 +5676,7 @@ alter_commands:
           {
             LEX *lex= Lex;
             lex->sql_command = SQLCOM_CHECK;
-            lex->alter_info.flags|= ALTER_CHECK_PARTITION;
+            lex->alter_info.flags|= ALTER_ADMIN_PARTITION;
             lex->check_opt.init();
           }
           opt_mi_check_type
@@ -5685,7 +5685,7 @@ alter_commands:
           {
             LEX *lex= Lex;
             lex->sql_command = SQLCOM_REPAIR;
-            lex->alter_info.flags|= ALTER_REPAIR_PARTITION;
+            lex->alter_info.flags|= ALTER_ADMIN_PARTITION;
             lex->no_write_to_binlog= $3;
             lex->check_opt.init();
           }

Thread
bzr commit into mysql-5.1 branch (mattias.jonsson:2675)Mattias Jonsson17 Oct