summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xBUILD/SETUP.sh2
-rwxr-xr-xBUILD/compile-pentium-debug-max4
-rw-r--r--sql/ha_partition.cc8
-rw-r--r--sql/mysql_priv.h21
-rw-r--r--sql/mysqld.cc4
-rw-r--r--sql/set_var.cc3
-rw-r--r--sql/sql_partition.cc71
-rw-r--r--sql/sql_table.cc6
-rw-r--r--sql/table.cc2
9 files changed, 76 insertions, 45 deletions
diff --git a/BUILD/SETUP.sh b/BUILD/SETUP.sh
index e76507b1a77..00e78d0719d 100755
--- a/BUILD/SETUP.sh
+++ b/BUILD/SETUP.sh
@@ -71,7 +71,7 @@ pentium_cflags="$check_cpu_cflags"
pentium64_cflags="$check_cpu_cflags -m64"
ppc_cflags="$check_cpu_cflags"
sparc_cflags=""
-error_inject_flag="--with-error-inject "
+error_inject="--with-error-inject "
# be as fast as we can be without losing our ability to backtrace
fast_cflags="-O3 -fno-omit-frame-pointer"
diff --git a/BUILD/compile-pentium-debug-max b/BUILD/compile-pentium-debug-max
index d065ed2bf71..9aa71239bd8 100755
--- a/BUILD/compile-pentium-debug-max
+++ b/BUILD/compile-pentium-debug-max
@@ -3,9 +3,9 @@
path=`dirname $0`
. "$path/SETUP.sh" $@ --with-debug=full
-extra_flags="$pentium_cflags $debug_cflags $max_cflags $error_inject_flag"
+extra_flags="$pentium_cflags $debug_cflags $max_cflags"
c_warnings="$c_warnings $debug_extra_warnings"
cxx_warnings="$cxx_warnings $debug_extra_warnings"
-extra_configs="$pentium_configs $debug_configs $max_configs"
+extra_configs="$pentium_configs $debug_configs $max_configs $error_inject"
. "$path/FINISH.sh"
diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc
index d318c4ab348..193fe863f8c 100644
--- a/sql/ha_partition.cc
+++ b/sql/ha_partition.cc
@@ -1879,8 +1879,8 @@ bool ha_partition::create_handler_file(const char *name)
{
part_elem= part_it++;
if (part_elem->part_state != PART_NORMAL &&
- part_elem->part_state != PART_IS_ADDED &&
- part_elem->part_state != PART_IS_CHANGED)
+ part_elem->part_state != PART_TO_BE_ADDED &&
+ part_elem->part_state != PART_CHANGED)
continue;
tablename_to_filename(part_elem->partition_name, part_name,
FN_REFLEN);
@@ -1931,8 +1931,8 @@ bool ha_partition::create_handler_file(const char *name)
{
part_elem= part_it++;
if (part_elem->part_state != PART_NORMAL &&
- part_elem->part_state != PART_IS_ADDED &&
- part_elem->part_state != PART_IS_CHANGED)
+ part_elem->part_state != PART_TO_BE_ADDED &&
+ part_elem->part_state != PART_CHANGED)
continue;
if (!m_is_sub_partitioned)
{
diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h
index 22fb67ff3fb..8c207992d5e 100644
--- a/sql/mysql_priv.h
+++ b/sql/mysql_priv.h
@@ -608,9 +608,9 @@ struct Query_cache_query_flags
in various error cases.
*/
#ifndef ERROR_INJECT_SUPPORT
-#define ERROR_INJECTOR(x)
-#define ERROR_INJECTOR_ACTION(x)
-#define ERROR_INJECTOR_CRASH(x)
+#define ERROR_INJECT(x) 0
+#define ERROR_INJECT_ACTION(x) 0
+#define ERROR_INJECT_CRASH(x) 0
#define SET_ERROR_INJECT_CODE(x)
#define SET_ERROR_INJECT_VALUE(x)
#else
@@ -624,7 +624,7 @@ inline bool
my_error_inject(int error)
{
THD *thd= current_thd;
- if (thd->variables.error_inject_code == error)
+ if (thd->variables.error_inject_code == (uint)error)
{
thd->variables.error_inject_code= 0;
return 1;
@@ -632,10 +632,10 @@ my_error_inject(int error)
return 0;
}
-#define ERROR_INJECTOR_CRASH(code) \
- (my_error_inject((code)) ? ((DBUG_ASSERT(0)), 0) : 0
-#define ERROR_INJECTOR_ACTION(code, action) \
- (my_error_inject((code)) ? ((action), 0) : 0
+#define ERROR_INJECT_CRASH(code) \
+ (my_error_inject((code)) ? ((DBUG_ASSERT(0)), 0) : 0)
+#define ERROR_INJECT_ACTION(code, action) \
+ (my_error_inject((code)) ? ((action), 0) : 0)
#define ERROR_INJECT(code) \
(my_error_inject((code)) ? 1 : 0)
#endif
@@ -1146,7 +1146,7 @@ bool write_log_ph2_change_partition(ALTER_PARTITION_PARAM_TYPE *lpt);
#define WFRM_WRITE_SHADOW 1
#define WFRM_INSTALL_SHADOW 2
-#define WFRM_PACK_FRM
+#define WFRM_PACK_FRM 4
bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags);
bool abort_and_upgrade_lock(ALTER_PARTITION_PARAM_TYPE *lpt);
void close_open_tables_and_downgrade(ALTER_PARTITION_PARAM_TYPE *lpt);
@@ -1317,6 +1317,9 @@ extern ulong delayed_insert_timeout;
extern ulong delayed_insert_limit, delayed_queue_size;
extern ulong delayed_insert_threads, delayed_insert_writes;
extern ulong delayed_rows_in_use,delayed_insert_errors;
+#ifdef ERROR_INJECT_SUPPORT
+extern ulong error_inject_code, error_inject_value;
+#endif
extern ulong slave_open_temp_tables;
extern ulong query_cache_size, query_cache_min_res_unit;
extern ulong slow_launch_threads, slow_launch_time;
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 07e2abc1de5..d9853e26197 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -503,6 +503,10 @@ ulong aborted_threads, aborted_connects;
ulong delayed_insert_timeout, delayed_insert_limit, delayed_queue_size;
ulong delayed_insert_threads, delayed_insert_writes, delayed_rows_in_use;
ulong delayed_insert_errors,flush_time;
+#ifdef ERROR_INJECT_SUPPORT
+ulong error_inject_code= 0;
+ulong error_inject_value= 0;
+#endif
ulong specialflag=0;
ulong binlog_cache_use= 0, binlog_cache_disk_use= 0;
ulong max_connections, max_connect_errors;
diff --git a/sql/set_var.cc b/sql/set_var.cc
index bc6c68e87f6..4c156c134cf 100644
--- a/sql/set_var.cc
+++ b/sql/set_var.cc
@@ -217,10 +217,11 @@ sys_var_long_ptr sys_delayed_queue_size("delayed_queue_size",
&delayed_queue_size);
#ifdef ERROR_INJECT_SUPPORT
sys_var_long_ptr sys_error_inject_code("error_inject_code",
- &error_inject_code);
+ &error_inject_code);
sys_var_long_ptr sys_error_inject_value("error_inject_value",
&error_inject_value);
#endif
+
sys_var_event_executor sys_event_executor("event_scheduler",
&event_executor_running_global_var);
sys_var_long_ptr sys_expire_logs_days("expire_logs_days",
diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc
index d2a4579f53b..ed8b62cc300 100644
--- a/sql/sql_partition.cc
+++ b/sql/sql_partition.cc
@@ -2459,6 +2459,7 @@ char *generate_partition_syntax(partition_info *part_info,
if (write_all || (!part_info->use_default_partitions))
{
+ bool first= TRUE;
err+= add_begin_parenthesis(fptr);
i= 0;
do
@@ -2467,6 +2468,12 @@ char *generate_partition_syntax(partition_info *part_info,
if (part_elem->part_state != PART_TO_BE_DROPPED &&
part_elem->part_state != PART_REORGED_DROPPED)
{
+ if (!first)
+ {
+ err+= add_comma(fptr);
+ err+= add_space(fptr);
+ }
+ first= FALSE;
err+= add_partition(fptr);
err+= add_string(fptr, part_elem->partition_name);
err+= add_space(fptr);
@@ -2496,11 +2503,6 @@ char *generate_partition_syntax(partition_info *part_info,
err+= add_end_parenthesis(fptr);
} while (++j < no_subparts);
}
- if (i != (tot_no_parts-1))
- {
- err+= add_comma(fptr);
- err+= add_space(fptr);
- }
}
if (i == (tot_no_parts-1))
err+= add_end_parenthesis(fptr);
@@ -5179,6 +5181,25 @@ write_log_ph2_change_partition(ALTER_PARTITION_PARAM_TYPE *lpt)
/*
+ Remove entry from table log and release resources for others to use
+
+ SYNOPSIS
+ write_log_completed()
+ lpt Struct containing parameters
+ RETURN VALUES
+ TRUE Error
+ FALSE Success
+*/
+static
+bool
+write_log_completed(ALTER_PARTITION_PARAM_TYPE *lpt)
+{
+ DBUG_ENTER("write_log_ph2_change_partition");
+ DBUG_RETURN(FALSE);
+}
+
+
+/*
Actually perform the change requested by ALTER TABLE of partitions
previously prepared.
@@ -5308,8 +5329,8 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
1) Write the new frm, pack it and then delete it
2) Perform the change within the handler
*/
- if ((mysql_write_frm(lpt, WFRM_WRITE_SHADOW | WFRM_PACK_FRM)) ||
- (mysql_change_partitions(lpt)))
+ if (mysql_write_frm(lpt, WFRM_WRITE_SHADOW | WFRM_PACK_FRM) ||
+ mysql_change_partitions(lpt))
{
fast_alter_partition_error_handler(lpt);
DBUG_RETURN(TRUE);
@@ -5370,25 +5391,25 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
to test if recovery is properly done.
*/
if (write_log_shadow_frm(lpt, FALSE) ||
- ERROR_INJECTOR_CRASH(1000) ||
+ ERROR_INJECT_CRASH(1000) ||
mysql_write_frm(lpt, WFRM_WRITE_SHADOW) ||
- ERROR_INJECTOR_CRASH(1001) ||
+ ERROR_INJECT_CRASH(1001) ||
write_log_drop_partition(lpt) ||
- ERROR_INJECTOR_CRASH(1002) ||
+ ERROR_INJECT_CRASH(1002) ||
abort_and_upgrade_lock(lpt) ||
((!thd->lex->no_write_to_binlog) &&
- write_bin_log(thd, FALSE,
- thd->query, thd->query_length), FALSE) ||
- ERROR_INJECTOR_CRASH(1003) ||
+ (write_bin_log(thd, FALSE,
+ thd->query, thd->query_length), FALSE)) ||
+ ERROR_INJECT_CRASH(1003) ||
mysql_write_frm(lpt, WFRM_INSTALL_SHADOW) ||
(close_open_tables_and_downgrade(lpt), FALSE) ||
- ERROR_INJECTOR_CRASH(1004) ||
+ ERROR_INJECT_CRASH(1004) ||
table->file->extra(HA_EXTRA_PREPARE_FOR_DELETE) ||
- ERROR_INJECTOR_CRASH(1005) ||
+ ERROR_INJECT_CRASH(1005) ||
mysql_drop_partitions(lpt) ||
- ERROR_INJECTOR_CRASH(1006) ||
+ ERROR_INJECT_CRASH(1006) ||
write_log_completed(lpt) ||
- ERROR_INJECTOR_CRASH(1007) ||
+ ERROR_INJECT_CRASH(1007) ||
(mysql_wait_completed_table(lpt, table), FALSE))
{
fast_alter_partition_error_handler(lpt);
@@ -5426,25 +5447,25 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
9) Complete query
*/
if (write_log_shadow_frm(lpt, FALSE) ||
- ERROR_INJECTED_CRASH(1010) ||
+ ERROR_INJECT_CRASH(1010) ||
mysql_write_frm(lpt, WFRM_WRITE_SHADOW) ||
- ERROR_INJECTED_CRASH(1011) ||
+ ERROR_INJECT_CRASH(1011) ||
write_log_add_partition(lpt) ||
- ERROR_INJECTED_CRASH(1012) ||
+ ERROR_INJECT_CRASH(1012) ||
mysql_change_partitions(lpt) ||
- ERROR_INJECTED_CRASH(1013) ||
+ ERROR_INJECT_CRASH(1013) ||
abort_and_upgrade_lock(lpt) ||
((!thd->lex->no_write_to_binlog) &&
(write_bin_log(thd, FALSE,
thd->query, thd->query_length), FALSE)) ||
- ERROR_INJECTED_CRASH(1014) ||
+ ERROR_INJECT_CRASH(1014) ||
write_log_shadow_frm(lpt, TRUE) ||
- ERROR_INJECTED_CRASH(1015) ||
+ ERROR_INJECT_CRASH(1015) ||
mysql_write_frm(lpt, WFRM_INSTALL_SHADOW) ||
- ERROR_INJECTED_CRASH(1016) ||
+ ERROR_INJECT_CRASH(1016) ||
(close_open_tables_and_downgrade(lpt), FALSE) ||
write_log_completed(lpt) ||
- ERROR_INJECTED_CRASH(1017))
+ ERROR_INJECT_CRASH(1017))
{
fast_alter_partition_error_handler(lpt);
DBUG_RETURN(TRUE);
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 809a70a0d45..fe37b70c3b3 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -307,9 +307,9 @@ bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags)
/*
Build shadow frm file name
*/
- build_table_filename(shadow_path, sizeof(path), lpt->db,
+ build_table_filename(shadow_path, sizeof(shadow_path), lpt->db,
lpt->table_name, "#");
- strxmov(shadow_frm_name, path, reg_ext, NullS);
+ strxmov(shadow_frm_name, shadow_path, reg_ext, NullS);
if (flags & WFRM_WRITE_SHADOW)
{
if (mysql_copy_create_list(lpt->create_list,
@@ -324,7 +324,7 @@ bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags)
lpt->table->file,
&lpt->key_info_buffer,
&lpt->key_count,
- /*select_field_count*/ 0)))
+ /*select_field_count*/ 0))
{
DBUG_RETURN(TRUE);
}
diff --git a/sql/table.cc b/sql/table.cc
index 046ed6d1add..ed34273334d 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -638,6 +638,7 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head,
#endif
next_chunk+= 5 + partition_info_len;
}
+#if 0
if (share->mysql_version == 50106)
{
/*
@@ -647,6 +648,7 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head,
*/
next_chunk+= 4;
}
+#endif
keyinfo= share->key_info;
for (i= 0; i < keys; i++, keyinfo++)
{