Below is the list of changes that have just been committed into a local
5.1 repository of mikron. When mikron 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
1.1898 05/09/02 19:40:40 mronstrom@stripped +8 -0
WL 2602,2603,2604: Partition Management
sql/sql_yacc.yy
1.404 05/09/02 19:40:23 mronstrom@stripped +30 -0
Added part_state to generate_partition_syntax
sql/sql_table.cc
1.269 05/09/02 19:40:23 mronstrom@stripped +42 -42
Added part_state to generate_partition_syntax
sql/sql_show.cc
1.258 05/09/02 19:40:22 mronstrom@stripped +1 -1
Added part_state to generate_partition_syntax
sql/sql_partition.cc
1.4 05/09/02 19:40:22 mronstrom@stripped +64 -29
Added part_state to generate_partition_syntax
sql/lex.h
1.141 05/09/02 19:40:21 mronstrom@stripped +1 -0
Added part_state to generate_partition_syntax
sql/handler.h
1.157 05/09/02 19:40:21 mronstrom@stripped +4 -2
Added part_state to generate_partition_syntax
sql/ha_partition.h
1.4 05/09/02 19:40:21 mronstrom@stripped +6 -5
Add add_partitions
sql/ha_partition.cc
1.5 05/09/02 19:40:21 mronstrom@stripped +51 -0
Add add_partitions
# 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: mronstrom
# Host: c-8a0ae253.1238-1-64736c10.cust.bredbandsbolaget.se
# Root: /Users/mikron/wl2602
--- 1.156/sql/handler.h 2005-09-02 15:57:09 +02:00
+++ 1.157/sql/handler.h 2005-09-02 19:40:21 +02:00
@@ -408,7 +408,8 @@
PART_NORMAL= 0,
PART_IS_DROPPED= 1,
PART_TO_BE_DROPPED= 2,
- PART_DROPPING= 3,
+ PART_TO_BE_ADDED= 3,
+ PART_TO_BE_REORGED= 4,
PART_IS_ADDED= 4,
PART_IS_ADDING= 5,
PART_ADDED= 6
@@ -669,7 +670,8 @@
handler *file, ulonglong max_rows);
bool fix_partition_func(THD *thd, const char *name, TABLE *table);
char *generate_partition_syntax(partition_info *part_info,
- uint *buf_length, bool use_sql_alloc);
+ uint *buf_length, bool use_sql_alloc,
+ bool write_part_state);
bool partition_key_modified(TABLE *table, List<Item> &fields);
void get_partition_set(const TABLE *table, byte *buf, const uint index,
const key_range *key_spec,
--- 1.140/sql/lex.h 2005-08-19 16:25:28 +02:00
+++ 1.141/sql/lex.h 2005-09-02 19:40:21 +02:00
@@ -375,6 +375,7 @@
{ "PARTITION", SYM(PARTITION_SYM)},
#endif
{ "PARTITIONS", SYM(PARTITIONS_SYM)},
+ { "PART_STATE", SYM(PART_STATE_SYM)},
{ "PASSWORD", SYM(PASSWORD)},
{ "PHASE", SYM(PHASE_SYM)},
{ "POINT", SYM(POINT_SYM)},
--- 1.257/sql/sql_show.cc 2005-08-05 23:50:38 +02:00
+++ 1.258/sql/sql_show.cc 2005-09-02 19:40:22 +02:00
@@ -1050,7 +1050,7 @@
if (table->s->part_info &&
((part_syntax= generate_partition_syntax(table->s->part_info,
&part_syntax_len,
- FALSE))))
+ FALSE, FALSE))))
{
packet->append(part_syntax, part_syntax_len);
my_free(part_syntax, MYF(0));
--- 1.268/sql/sql_table.cc 2005-09-02 15:57:11 +02:00
+++ 1.269/sql/sql_table.cc 2005-09-02 19:40:23 +02:00
@@ -146,7 +146,7 @@
}
if (!(part_syntax_buf= generate_partition_syntax(part_info,
&syntax_len,
- TRUE)))
+ TRUE, TRUE)))
{
DBUG_RETURN(TRUE);
}
@@ -1729,7 +1729,7 @@
*/
if (!(part_syntax_buf= generate_partition_syntax(part_info,
&syntax_len,
- TRUE)))
+ TRUE, FALSE)))
DBUG_RETURN(TRUE);
part_info->part_info_string= part_syntax_buf;
part_info->part_info_len= syntax_len;
@@ -4300,18 +4300,18 @@
{
/* Set-up struct used to write frm files */
partition_info *part_info= table->s->part_info;
- write_frm_type wft_obj;
- write_frm_type *wft= &wft_obj;
- wft->thd= thd;
- wft->create_info= create_info;
- wft->create_list= &create_list;
- wft->key_list= &key_list;
- wft->db_options= 0;
- wft->table= table;
- wft->key_info_buffer= 0;
- wft->key_count= 0;
- wft->db= db;
- wft->table_name= table_name;
+ LOCK_PARAM_TYPE lpt_obj;
+ LOCK_PARAM_TYPE *lpt= &lpt_obj;
+ lpt->thd= thd;
+ lpt->create_info= create_info;
+ lpt->create_list= &create_list;
+ lpt->key_list= &key_list;
+ lpt->db_options= 0;
+ lpt->table= table;
+ lpt->key_info_buffer= 0;
+ lpt->key_count= 0;
+ lpt->db= db;
+ lpt->table_name= table_name;
thd->lex->part_info= part_info;
if (online_drop_partition)
{
@@ -4345,12 +4345,12 @@
remaining locks).
*/
- if ((abort_and_upgrade_lock(wft)) ||
- (mysql_write_frm(wft, TRUE, FALSE)) ||
- (close_open_tables_and_downgrade(wft), FALSE) ||
- (mysql_drop_partitions(wft)) ||
- (mysql_write_frm(wft, FALSE, TRUE)) ||
- (mysql_wait_completed_table(wft, table), FALSE))
+ if ((abort_and_upgrade_lock(lpt)) ||
+ (mysql_write_frm(lpt, TRUE, FALSE)) ||
+ (close_open_tables_and_downgrade(lpt), FALSE) ||
+ (mysql_drop_partitions(lpt)) ||
+ (mysql_write_frm(lpt, FALSE, TRUE)) ||
+ (mysql_wait_completed_table(lpt, table), FALSE))
{
DBUG_RETURN(TRUE);
}
@@ -4387,13 +4387,13 @@
remaining locks).
*/
if (table->reginfo.lock_type == TL_WRITE_ALLOW_READ)
- mysql_lock_downgrade_write(wft->thd, wft->table,
+ mysql_lock_downgrade_write(lpt->thd, lpt->table,
TL_WRITE_ALLOW_WRITE);
- if ((mysql_write_frm(wft, TRUE, FALSE)) ||
- (mysql_add_partitions(wft)) ||
- (abort_and_upgrade_lock(wft)) ||
- (mysql_write_frm(wft, FALSE, TRUE)) ||
- (close_open_tables_and_downgrade(wft), FALSE))
+ if ((mysql_write_frm(lpt, TRUE, FALSE)) ||
+ (mysql_add_partitions(lpt)) ||
+ (abort_and_upgrade_lock(lpt)) ||
+ (mysql_write_frm(lpt, FALSE, TRUE)) ||
+ (close_open_tables_and_downgrade(lpt), FALSE))
{
DBUG_RETURN(TRUE);
}
@@ -4452,31 +4452,31 @@
if (table->file->alter_table_flags() & HA_ONLINE_DOUBLE_WRITE)
{
if (table->reginfo.lock_type == TL_WRITE_ALLOW_READ)
- mysql_lock_downgrade_write(wft->thd, wft->table,
+ mysql_lock_downgrade_write(lpt->thd, lpt->table,
TL_WRITE_ALLOW_WRITE);
- if ((mysql_write_frm(wft, TRUE, FALSE)) ||
- (mysql_add_partitions(wft)) ||
+ if ((mysql_write_frm(lpt, TRUE, FALSE)) ||
+ (mysql_add_partitions(lpt)) ||
(table->file->copy_partitions()) ||
- (mysql_write_frm(wft, FALSE, TRUE)) ||
- (mysql_wait_completed_table(wft, table), FALSE) ||
- (mysql_drop_partitions(wft)) ||
- (mysql_write_frm(wft, FALSE, FALSE)) ||
- (mysql_wait_completed_table(wft, table), FALSE))
+ (mysql_write_frm(lpt, FALSE, TRUE)) ||
+ (mysql_wait_completed_table(lpt, table), FALSE) ||
+ (mysql_drop_partitions(lpt)) ||
+ (mysql_write_frm(lpt, FALSE, FALSE)) ||
+ (mysql_wait_completed_table(lpt, table), FALSE))
{
DBUG_RETURN(TRUE);
}
}
else
{
- if ((mysql_write_frm(wft, TRUE, FALSE)) ||
- (mysql_add_partitions(wft)) ||
+ if ((mysql_write_frm(lpt, TRUE, FALSE)) ||
+ (mysql_add_partitions(lpt)) ||
(table->file->copy_partitions()) ||
- (abort_and_upgrade_lock(wft)) ||
- (mysql_write_frm(wft, FALSE, TRUE)) ||
- (mysql_rename_partitions(wft)) ||
- (close_open_tables_and_downgrade(wft), FALSE) ||
- (mysql_drop_partitions(wft)) ||
- (mysql_write_frm(wft, FALSE, FALSE)))
+ (abort_and_upgrade_lock(lpt)) ||
+ (mysql_write_frm(lpt, FALSE, TRUE)) ||
+ (mysql_rename_partitions(lpt)) ||
+ (close_open_tables_and_downgrade(lpt), FALSE) ||
+ (mysql_drop_partitions(lpt)) ||
+ (mysql_write_frm(lpt, FALSE, FALSE)))
{
DBUG_RETURN(TRUE);
}
--- 1.403/sql/sql_yacc.yy 2005-08-19 16:25:28 +02:00
+++ 1.404/sql/sql_yacc.yy 2005-09-02 19:40:23 +02:00
@@ -472,6 +472,7 @@
%token PARTIAL
%token PARTITION_SYM
%token PARTITIONS_SYM
+%token PART_STATE_SYM
%token PASSWORD
%token PARAM_MARKER
%token PHASE_SYM
@@ -2840,6 +2841,7 @@
part_info->count_curr_parts++;
}
part_name {}
+ opt_part_state {}
opt_part_values {}
opt_part_options {}
opt_sub_partition {}
@@ -2850,6 +2852,33 @@
{ Lex->part_info->curr_part_elem->partition_name= $1.str; }
;
+opt_part_state:
+ /* empty */
+ { Lex->part_info->curr_part_elem->part_state= PART_NORMAL; }
+ | PART_STATE_SYM opt_equal ident_or_text
+ {
+ char *part_state= $3.str;
+ if (strcmp(part_state, "PART_TO_BE_DROPPED"))
+ {
+ ;
+ } else if (strcmp(part_state, "PART_TO_BE_ADDED"))
+ {
+ ;
+ } else if (strcmp(part_state, "PART_IS_ADDING"))
+ {
+ ;
+ }
+ else if (strcmp(part_state, "PART_TO_BE_REORGED"))
+ {
+ ;
+ }
+ else
+ {
+ YYABORT;
+ }
+ }
+ ;
+
opt_part_values:
/* empty */
{
@@ -8127,6 +8156,7 @@
| PACK_KEYS_SYM {}
| PARTIAL {}
| PARTITIONS_SYM {}
+ | PART_STATE_SYM {}
| PASSWORD {}
| PHASE_SYM {}
| POINT_SYM {}
--- 1.4/sql/ha_partition.cc 2005-08-22 17:56:49 +02:00
+++ 1.5/sql/ha_partition.cc 2005-09-02 19:40:21 +02:00
@@ -390,6 +390,8 @@
DBUG_RETURN(0);
}
+
+
int ha_partition::drop_partitions(const char *path)
{
List_iterator<partition_element> part_it(m_part_info->partitions);
@@ -430,6 +432,55 @@
error= m_file[i]->delete_table((const char *) part_name_buff);
}
part_elem->part_state= PART_IS_DROPPED;
+ }
+ } while (++i < no_parts);
+ DBUG_RETURN(error);
+}
+
+
+int ha_partition::add_partitions(HA_CREATE_INFO *create_info,
+ const char *path)
+{
+ List_iterator<partition_element> part_it(m_part_info->partitions);
+ char part_name_buff[FN_REFLEN];
+ uint no_parts= m_part_info->no_parts;
+ uint no_subparts= m_part_info->no_subparts, i= 0;
+ int error= 1;
+ DBUG_ENTER("ha_partition::add_partitions()");
+
+ do
+ {
+ partition_element *part_elem= part_it++;
+ if (part_elem->part_state == PART_TO_BE_ADDED)
+ {
+ /*
+ This part is to be dropped, meaning the part or all its subparts.
+ */
+ if (is_sub_partitioned(m_part_info))
+ {
+ List_iterator<partition_element> sub_it(part_elem->subpartitions);
+ uint j= 0, part;
+ do
+ {
+ partition_element *sub_elem= sub_it++;
+ create_subpartition_name(part_name_buff, path,
+ part_elem->partition_name,
+ sub_elem->partition_name);
+ part= i * no_subparts + j;
+ DBUG_PRINT("info", ("Add subpartition %s", part_name_buff));
+ error= m_file[part]->create((const char *) part_name_buff,
+ table, create_info);
+ } while (++j < no_subparts);
+ }
+ else
+ {
+ create_partition_name(part_name_buff, path,
+ part_elem->partition_name);
+ DBUG_PRINT("info", ("Add partition %s", part_name_buff));
+ error= m_file[i]->create((const char *) part_name_buff,
+ table, create_info);
+ }
+ part_elem->part_state= PART_NORMAL;
}
} while (++i < no_parts);
DBUG_RETURN(error);
--- 1.3/sql/ha_partition.h 2005-08-22 17:56:50 +02:00
+++ 1.4/sql/ha_partition.h 2005-09-02 19:40:21 +02:00
@@ -161,11 +161,12 @@
*/
virtual int delete_table(const char *from);
virtual int rename_table(const char *from, const char *to);
- virtual int create(const char *name, TABLE * form,
- HA_CREATE_INFO * create_info);
+ virtual int create(const char *name, TABLE *form,
+ HA_CREATE_INFO *create_info);
virtual int create_handler_files(const char *name);
- virtual void update_create_info(HA_CREATE_INFO * create_info);
+ virtual void update_create_info(HA_CREATE_INFO *create_info);
virtual char *update_table_comment(const char *comment);
+ virtual int add_partitions(HA_CREATE_INFO *create_info, const char *path);
virtual int drop_partitions(const char *path);
private:
/*
@@ -174,8 +175,8 @@
*/
uint del_ren_cre_table(const char *from,
const char *to= NULL,
- TABLE * table_arg= NULL,
- HA_CREATE_INFO * create_info= NULL);
+ TABLE *table_arg= NULL,
+ HA_CREATE_INFO *create_info= NULL);
/*
One method to create the table_name.par file containing the names of the
underlying partitions, their engine and the number of partitions.
--- 1.3/sql/sql_partition.cc 2005-08-19 16:25:28 +02:00
+++ 1.4/sql/sql_partition.cc 2005-09-02 19:40:22 +02:00
@@ -1886,6 +1886,33 @@
return err;
}
+static int add_part_state_string(File fptr)
+{
+ return add_string(fptr, "PART_STATE = ");
+}
+
+static int add_partition_state(File fptr, partition_element *p_elem)
+{
+ int err= 0;
+ switch (p_elem->part_state)
+ {
+ case PART_TO_BE_DROPPED:
+ err+= add_part_state_string(fptr);
+ err+= add_string(fptr, "PART_TO_BE_DROPPED");
+ break;
+ case PART_TO_BE_ADDED:
+ err+= add_part_state_string(fptr);
+ err+= add_string(fptr, "PART_TO_BE_ADDED");
+ break;
+ case PART_IS_DROPPED:
+ case PART_NORMAL:
+ break;
+ default:
+ break;
+ }
+ return err;
+}
+
static int add_partition_options(File fptr, partition_element *p_elem)
{
int err= 0;
@@ -1952,6 +1979,8 @@
buf_length A pointer to the returned buffer length
use_sql_alloc Allocate buffer from sql_alloc if true
otherwise use my_malloc
+ write_part_state Is partition state to be written as part of
+ the syntax
RETURN VALUES
NULL error
buf, buf_length Buffer and its length
@@ -1977,7 +2006,8 @@
char *generate_partition_syntax(partition_info *part_info,
uint *buf_length,
- bool use_sql_alloc)
+ bool use_sql_alloc,
+ bool write_part_state)
{
uint i,j, no_parts, no_subparts;
partition_element *part_elem;
@@ -2050,41 +2080,46 @@
do
{
part_elem= part_it++;
- err+= add_partition(fptr);
- err+= add_string(fptr, part_elem->partition_name);
- err+= add_space(fptr);
- err+= add_partition_values(fptr, part_info, part_elem);
- if (!is_sub_partitioned(part_info))
- err+= add_partition_options(fptr, part_elem);
- if (is_sub_partitioned(part_info))
+ if (part_elem->part_state != PART_IS_DROPPED)
{
+ err+= add_partition(fptr);
+ err+= add_string(fptr, part_elem->partition_name);
err+= add_space(fptr);
- err+= add_begin_parenthesis(fptr);
- List_iterator<partition_element> sub_it(part_elem->subpartitions);
- j= 0;
- do
+ if (write_part_state)
+ err+= add_partition_state(fptr, part_elem);
+ err+= add_partition_values(fptr, part_info, part_elem);
+ if (!is_sub_partitioned(part_info))
+ err+= add_partition_options(fptr, part_elem);
+ if (is_sub_partitioned(part_info))
{
- part_elem= sub_it++;
- err+= add_subpartition(fptr);
- err+= add_string(fptr, part_elem->partition_name);
err+= add_space(fptr);
- err+= add_partition_options(fptr, part_elem);
- if (j != (no_subparts-1))
+ err+= add_begin_parenthesis(fptr);
+ List_iterator<partition_element> sub_it(part_elem->subpartitions);
+ j= 0;
+ do
{
- err+= add_comma(fptr);
+ part_elem= sub_it++;
+ err+= add_subpartition(fptr);
+ err+= add_string(fptr, part_elem->partition_name);
err+= add_space(fptr);
- }
- else
- err+= add_end_parenthesis(fptr);
- } while (++j < no_subparts);
- }
- if (i != (no_parts-1))
- {
- err+= add_comma(fptr);
- err+= add_space(fptr);
+ err+= add_partition_options(fptr, part_elem);
+ if (j != (no_subparts-1))
+ {
+ err+= add_comma(fptr);
+ err+= add_space(fptr);
+ }
+ else
+ err+= add_end_parenthesis(fptr);
+ } while (++j < no_subparts);
+ }
+ if (i != (no_parts-1))
+ {
+ err+= add_comma(fptr);
+ err+= add_space(fptr);
+ }
+ else
+ err+= add_end_parenthesis(fptr);
}
- else
- err+= add_end_parenthesis(fptr);
} while (++i < no_parts);
if (err)
goto close_file;
| Thread |
|---|
| • bk commit into 5.1 tree (mronstrom:1.1898) | mikael | 5 Sep |