summaryrefslogtreecommitdiff
path: root/sql/sql_table.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_table.cc')
-rw-r--r--sql/sql_table.cc176
1 files changed, 95 insertions, 81 deletions
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 245f59a973a..6b8efd3c170 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -115,7 +115,7 @@ static char* add_identifier(THD* thd, char *to_p, const char * end_p,
res= strconvert(&my_charset_filename, conv_name, name_len,
system_charset_info,
conv_string, FN_REFLEN, &errors);
- if (!res || errors)
+ if (unlikely(!res || errors))
{
DBUG_PRINT("error", ("strconvert of '%s' failed with %u (errors: %u)", conv_name, res, errors));
conv_name= name;
@@ -128,7 +128,9 @@ static char* add_identifier(THD* thd, char *to_p, const char * end_p,
conv_name_end= conv_string + res;
}
- quote = thd ? get_quote_char_for_identifier(thd, conv_name, res - 1) : '`';
+ quote= (likely(thd) ?
+ get_quote_char_for_identifier(thd, conv_name, res - 1) :
+ '`');
if (quote != EOF && (end_p - to_p > 2))
{
@@ -390,7 +392,7 @@ uint filename_to_tablename(const char *from, char *to, size_t to_length,
res= strconvert(&my_charset_filename, from, FN_REFLEN,
system_charset_info, to, to_length, &errors);
- if (errors) // Old 5.0 name
+ if (unlikely(errors)) // Old 5.0 name
{
res= (strxnmov(to, to_length, MYSQL50_TABLE_NAME_PREFIX, from, NullS) -
to);
@@ -1160,7 +1162,8 @@ static int execute_ddl_log_action(THD *thd, DDL_LOG_ENTRY *ddl_log_entry)
if (frm_action)
{
strxmov(to_path, ddl_log_entry->name, reg_ext, NullS);
- if ((error= mysql_file_delete(key_file_frm, to_path, MYF(MY_WME))))
+ if (unlikely((error= mysql_file_delete(key_file_frm, to_path,
+ MYF(MY_WME)))))
{
if (my_errno != ENOENT)
break;
@@ -1172,7 +1175,7 @@ static int execute_ddl_log_action(THD *thd, DDL_LOG_ENTRY *ddl_log_entry)
}
else
{
- if ((error= file->ha_delete_table(ddl_log_entry->name)))
+ if (unlikely((error= file->ha_delete_table(ddl_log_entry->name))))
{
if (error != ENOENT && error != HA_ERR_NO_SUCH_TABLE)
break;
@@ -1425,19 +1428,19 @@ bool write_ddl_log_entry(DDL_LOG_ENTRY *ddl_log_entry,
+ (2*FN_REFLEN)],
(char*) &global_ddl_log.file_entry_buf[DDL_LOG_NAME_POS
+ (3*FN_REFLEN)]));
- if (write_ddl_log_file_entry((*active_entry)->entry_pos))
+ if (unlikely(write_ddl_log_file_entry((*active_entry)->entry_pos)))
{
error= TRUE;
sql_print_error("Failed to write entry_no = %u",
(*active_entry)->entry_pos);
}
- if (write_header && !error)
+ if (write_header && likely(!error))
{
(void) sync_ddl_log_no_lock();
if (write_ddl_log_header())
error= TRUE;
}
- if (error)
+ if (unlikely(error))
release_ddl_log_memory_entry(*active_entry);
DBUG_RETURN(error);
}
@@ -1868,8 +1871,10 @@ bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags)
lpt->create_info->tmp_table(), frm.str, frm.length);
my_free(const_cast<uchar*>(frm.str));
- if (error || lpt->table->file->ha_create_partitioning_metadata(shadow_path,
- NULL, CHF_CREATE_FLAG))
+ if (unlikely(error) ||
+ unlikely(lpt->table->file->
+ ha_create_partitioning_metadata(shadow_path,
+ NULL, CHF_CREATE_FLAG)))
{
mysql_file_delete(key_file_frm, shadow_frm_name, MYF(0));
error= 1;
@@ -2127,7 +2132,7 @@ bool mysql_rm_table(THD *thd,TABLE_LIST *tables, bool if_exists,
false, drop_sequence, false, false);
thd->pop_internal_handler();
- if (error)
+ if (unlikely(error))
DBUG_RETURN(TRUE);
my_ok(thd);
DBUG_RETURN(FALSE);
@@ -2524,26 +2529,26 @@ int mysql_rm_table_no_locks(THD *thd, TABLE_LIST *tables, bool if_exists,
*/
(void) mysql_file_delete(key_file_frm, path, MYF(0));
}
- else if (mysql_file_delete(key_file_frm, path,
- MYF(MY_WME)))
+ else if (unlikely(mysql_file_delete(key_file_frm, path,
+ MYF(MY_WME))))
{
frm_delete_error= my_errno;
DBUG_ASSERT(frm_delete_error);
}
}
- if (!error)
+ if (likely(!error))
{
int trigger_drop_error= 0;
- if (!frm_delete_error)
+ if (likely(!frm_delete_error))
{
non_tmp_table_deleted= TRUE;
trigger_drop_error=
Table_triggers_list::drop_all_triggers(thd, &db, &table->table_name);
}
- if (trigger_drop_error ||
+ if (unlikely(trigger_drop_error) ||
(frm_delete_error && frm_delete_error != ENOENT))
error= 1;
else if (frm_delete_error && if_exists)
@@ -4809,10 +4814,14 @@ int create_table_impl(THD *thd,
create_info->data_file_name= create_info->index_file_name= 0;
}
else
- if (error_if_data_home_dir(create_info->data_file_name, "DATA DIRECTORY") ||
- error_if_data_home_dir(create_info->index_file_name, "INDEX DIRECTORY")||
- check_partition_dirs(thd->lex->part_info))
- goto err;
+ {
+ if (unlikely(error_if_data_home_dir(create_info->data_file_name,
+ "DATA DIRECTORY")) ||
+ unlikely(error_if_data_home_dir(create_info->index_file_name,
+ "INDEX DIRECTORY")) ||
+ unlikely(check_partition_dirs(thd->lex->part_info)))
+ goto err;
+ }
alias= const_cast<LEX_CSTRING*>(table_case_name(create_info, table_name));
@@ -5195,9 +5204,10 @@ err:
thd->transaction.stmt.mark_created_temp_table();
/* Write log if no error or if we already deleted a table */
- if (!result || thd->log_current_statement)
+ if (likely(!result) || thd->log_current_statement)
{
- if (result && create_info->table_was_deleted && pos_in_locked_tables)
+ if (unlikely(result) && create_info->table_was_deleted &&
+ pos_in_locked_tables)
{
/*
Possible locked table was dropped. We should remove meta data locks
@@ -5205,7 +5215,7 @@ err:
*/
thd->locked_tables_list.unlock_locked_table(thd, mdl_ticket);
}
- else if (!result && create_info->tmp_table() && create_info->table)
+ else if (likely(!result) && create_info->tmp_table() && create_info->table)
{
/*
Remember that tmp table creation was logged so that we know if
@@ -5213,8 +5223,8 @@ err:
*/
create_info->table->s->table_creation_was_logged= 1;
}
- if (write_bin_log(thd, result ? FALSE : TRUE, thd->query(),
- thd->query_length(), is_trans))
+ if (unlikely(write_bin_log(thd, result ? FALSE : TRUE, thd->query(),
+ thd->query_length(), is_trans)))
result= 1;
}
DBUG_RETURN(result);
@@ -5439,9 +5449,9 @@ mysql_rename_table(handlerton *base, const LEX_CSTRING *old_db,
error= my_errno;
(void) file->ha_create_partitioning_metadata(to, from, CHF_RENAME_FLAG);
}
- else if (!file || !(error=file->ha_rename_table(from_base, to_base)))
+ else if (!file || likely(!(error=file->ha_rename_table(from_base, to_base))))
{
- if (!(flags & NO_FRM_RENAME) && rename_file_ext(from,to,reg_ext))
+ if (!(flags & NO_FRM_RENAME) && unlikely(rename_file_ext(from,to,reg_ext)))
{
error=my_errno;
if (file)
@@ -5454,10 +5464,14 @@ mysql_rename_table(handlerton *base, const LEX_CSTRING *old_db,
}
}
delete file;
- if (error == HA_ERR_WRONG_COMMAND)
- my_error(ER_NOT_SUPPORTED_YET, MYF(0), "ALTER TABLE");
- else if (error)
- my_error(ER_ERROR_ON_RENAME, MYF(0), from, to, error);
+
+ if (unlikely(error))
+ {
+ if (error == HA_ERR_WRONG_COMMAND)
+ my_error(ER_NOT_SUPPORTED_YET, MYF(0), "ALTER TABLE");
+ else
+ my_error(ER_ERROR_ON_RENAME, MYF(0), from, to, error);
+ }
else if (!(flags & FN_IS_TMP))
mysql_audit_rename_table(thd, old_db, old_name, new_db, new_name);
@@ -5859,7 +5873,7 @@ int mysql_discard_or_import_tablespace(THD *thd,
THD_STAGE_INFO(thd, stage_end);
- if (error)
+ if (unlikely(error))
goto err;
/*
@@ -5870,15 +5884,15 @@ int mysql_discard_or_import_tablespace(THD *thd,
/* The ALTER TABLE is always in its own transaction */
error= trans_commit_stmt(thd);
- if (trans_commit_implicit(thd))
+ if (unlikely(trans_commit_implicit(thd)))
error=1;
- if (!error)
+ if (likely(!error))
error= write_bin_log(thd, FALSE, thd->query(), thd->query_length());
err:
thd->tablespace_op=FALSE;
- if (error == 0)
+ if (likely(error == 0))
{
my_ok(thd);
DBUG_RETURN(0);
@@ -6007,7 +6021,7 @@ drop_create_field:
break;
}
}
- if (*f_ptr == NULL)
+ if (unlikely(*f_ptr == NULL))
{
push_warning_printf(thd, Sql_condition::WARN_LEVEL_NOTE,
ER_BAD_FIELD_ERROR,
@@ -6043,7 +6057,7 @@ drop_create_field:
acol->name, (*f_ptr)->field_name.str) == 0)
break;
}
- if (*f_ptr == NULL)
+ if (unlikely(*f_ptr == NULL))
{
push_warning_printf(thd, Sql_condition::WARN_LEVEL_NOTE,
ER_BAD_FIELD_ERROR,
@@ -7216,18 +7230,20 @@ bool alter_table_manage_keys(TABLE *table, int indexes_were_disabled,
error= table->file->ha_disable_indexes(HA_KEY_SWITCH_NONUNIQ_SAVE);
}
- if (error == HA_ERR_WRONG_COMMAND)
+ if (unlikely(error))
{
- THD *thd= table->in_use;
- push_warning_printf(thd, Sql_condition::WARN_LEVEL_NOTE,
- ER_ILLEGAL_HA, ER_THD(thd, ER_ILLEGAL_HA),
- table->file->table_type(),
- table->s->db.str, table->s->table_name.str);
- error= 0;
+ if (error == HA_ERR_WRONG_COMMAND)
+ {
+ THD *thd= table->in_use;
+ push_warning_printf(thd, Sql_condition::WARN_LEVEL_NOTE,
+ ER_ILLEGAL_HA, ER_THD(thd, ER_ILLEGAL_HA),
+ table->file->table_type(),
+ table->s->db.str, table->s->table_name.str);
+ error= 0;
+ }
+ else
+ table->file->print_error(error, MYF(0));
}
- else if (error)
- table->file->print_error(error, MYF(0));
-
DBUG_RETURN(error);
}
@@ -8007,7 +8023,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
break;
}
- if (find && !find->field)
+ if (likely(find && !find->field))
find_it.remove();
else
{
@@ -8078,7 +8094,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
&find->field_name))
break;
}
- if (!find)
+ if (unlikely(!find))
{
my_error(ER_BAD_FIELD_ERROR, MYF(0), def->after.str,
table->s->table_name.str);
@@ -8112,13 +8128,13 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
alter_it.remove();
}
}
- if (alter_info->alter_list.elements)
+ if (unlikely(alter_info->alter_list.elements))
{
my_error(ER_BAD_FIELD_ERROR, MYF(0),
alter_info->alter_list.head()->name, table->s->table_name.str);
goto err;
}
- if (!new_create_list.elements)
+ if (unlikely(!new_create_list.elements))
{
my_message(ER_CANT_REMOVE_ALL_FIELDS,
ER_THD(thd, ER_CANT_REMOVE_ALL_FIELDS),
@@ -8594,7 +8610,7 @@ static bool fk_prepare_copy_alter_table(THD *thd, TABLE *table,
table->file->get_parent_foreign_key_list(thd, &fk_parent_key_list);
/* OOM when building list. */
- if (thd->is_error())
+ if (unlikely(thd->is_error()))
DBUG_RETURN(true);
/*
@@ -8689,7 +8705,7 @@ static bool fk_prepare_copy_alter_table(THD *thd, TABLE *table,
table->file->get_foreign_key_list(thd, &fk_child_key_list);
/* OOM when building list. */
- if (thd->is_error())
+ if (unlikely(thd->is_error()))
DBUG_RETURN(true);
/*
@@ -8783,7 +8799,7 @@ simple_tmp_rename_or_index_change(THD *thd, TABLE_LIST *table_list,
keys_onoff);
}
- if (!error && alter_ctx->is_table_renamed())
+ if (likely(!error) && alter_ctx->is_table_renamed())
{
THD_STAGE_INFO(thd, stage_rename);
@@ -8796,20 +8812,17 @@ simple_tmp_rename_or_index_change(THD *thd, TABLE_LIST *table_list,
&alter_ctx->new_alias);
}
- if (!error)
+ if (likely(!error))
{
- int res= 0;
/*
We do not replicate alter table statement on temporary tables under
ROW-based replication.
*/
if (!thd->is_current_stmt_binlog_format_row())
{
- res= write_bin_log(thd, true, thd->query(), thd->query_length());
+ error= write_bin_log(thd, true, thd->query(), thd->query_length()) != 0;
}
- if (res != 0)
- error= true;
- else
+ if (likely(!error))
my_ok(thd);
}
@@ -8858,7 +8871,7 @@ simple_rename_or_index_change(THD *thd, TABLE_LIST *table_list,
keys_onoff);
}
- if (!error && alter_ctx->is_table_renamed())
+ if (likely(!error) && alter_ctx->is_table_renamed())
{
THD_STAGE_INFO(thd, stage_rename);
handlerton *old_db_type= table->s->db_type();
@@ -8898,11 +8911,11 @@ simple_rename_or_index_change(THD *thd, TABLE_LIST *table_list,
}
}
- if (!error)
+ if (likely(!error))
{
error= write_bin_log(thd, TRUE, thd->query(), thd->query_length());
- if (!error)
+ if (likely(!error))
my_ok(thd);
}
table_list->table= NULL; // For query cache
@@ -8963,7 +8976,8 @@ simple_rename_or_index_change(THD *thd, TABLE_LIST *table_list,
based on information about the table changes from fill_alter_inplace_info().
*/
-bool mysql_alter_table(THD *thd, const LEX_CSTRING *new_db, const LEX_CSTRING *new_name,
+bool mysql_alter_table(THD *thd, const LEX_CSTRING *new_db,
+ const LEX_CSTRING *new_name,
HA_CREATE_INFO *create_info,
TABLE_LIST *table_list,
Alter_info *alter_info,
@@ -9065,7 +9079,7 @@ bool mysql_alter_table(THD *thd, const LEX_CSTRING *new_db, const LEX_CSTRING *n
};);
#endif // WITH_WSREP
- if (error)
+ if (unlikely(error))
DBUG_RETURN(true);
table->use_all_columns();
@@ -9511,7 +9525,7 @@ bool mysql_alter_table(THD *thd, const LEX_CSTRING *new_db, const LEX_CSTRING *n
&key_info, &key_count, &frm);
reenable_binlog(thd);
thd->abort_on_warning= false;
- if (error)
+ if (unlikely(error))
{
my_free(const_cast<uchar*>(frm.str));
DBUG_RETURN(true);
@@ -10018,8 +10032,8 @@ err_new_table_cleanup:
the table to be altered isn't empty.
Report error here.
*/
- if (alter_ctx.error_if_not_empty &&
- thd->get_stmt_da()->current_row_for_warning())
+ if (unlikely(alter_ctx.error_if_not_empty &&
+ thd->get_stmt_da()->current_row_for_warning()))
{
const char *f_val= 0;
enum enum_mysql_timestamp_type t_type= MYSQL_TIMESTAMP_DATE;
@@ -10285,15 +10299,15 @@ copy_data_between_tables(THD *thd, TABLE *from, TABLE *to,
if (!ignore) /* for now, InnoDB needs the undo log for ALTER IGNORE */
to->file->extra(HA_EXTRA_BEGIN_ALTER_COPY);
- while (!(error= info.read_record()))
+ while (likely(!(error= info.read_record())))
{
- if (thd->killed)
+ if (unlikely(thd->killed))
{
thd->send_kill_message();
error= 1;
break;
}
- if (++thd->progress.counter >= time_to_report_progress)
+ if (unlikely(++thd->progress.counter >= time_to_report_progress))
{
time_to_report_progress+= MY_HOW_OFTEN_TO_WRITE/10;
thd_progress_report(thd, thd->progress.counter,
@@ -10301,7 +10315,7 @@ copy_data_between_tables(THD *thd, TABLE *from, TABLE *to,
}
/* Return error if source table isn't empty. */
- if (alter_ctx->error_if_not_empty)
+ if (unlikely(alter_ctx->error_if_not_empty))
{
error= 1;
break;
@@ -10343,7 +10357,7 @@ copy_data_between_tables(THD *thd, TABLE *from, TABLE *to,
/* This will set thd->is_error() if fatal failure */
if (to->verify_constraints(ignore) == VIEW_CHECK_SKIP)
continue;
- if (thd->is_error())
+ if (unlikely(thd->is_error()))
{
error= 1;
break;
@@ -10353,7 +10367,7 @@ copy_data_between_tables(THD *thd, TABLE *from, TABLE *to,
error= to->file->ha_write_row(to->record[0]);
to->auto_increment_field_not_null= FALSE;
- if (error)
+ if (unlikely(error))
{
if (to->file->is_fatal_error(error, HA_CHECK_DUP))
{
@@ -10365,7 +10379,7 @@ copy_data_between_tables(THD *thd, TABLE *from, TABLE *to,
else
{
/* Duplicate key error. */
- if (alter_ctx->fk_error_if_delete_row)
+ if (unlikely(alter_ctx->fk_error_if_delete_row))
{
/*
We are trying to omit a row from the table which serves as parent
@@ -10421,7 +10435,7 @@ copy_data_between_tables(THD *thd, TABLE *from, TABLE *to,
/* We are going to drop the temporary table */
to->file->extra(HA_EXTRA_PREPARE_FOR_DROP);
}
- if (to->file->ha_end_bulk_insert() && error <= 0)
+ if (unlikely(to->file->ha_end_bulk_insert()) && error <= 0)
{
/* Give error, if not already given */
if (!thd->is_error())
@@ -10432,7 +10446,7 @@ copy_data_between_tables(THD *thd, TABLE *from, TABLE *to,
to->file->extra(HA_EXTRA_END_ALTER_COPY);
to->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
- if (mysql_trans_commit_alter_copy_data(thd))
+ if (unlikely(mysql_trans_commit_alter_copy_data(thd)))
error= 1;
err:
@@ -10447,10 +10461,10 @@ copy_data_between_tables(THD *thd, TABLE *from, TABLE *to,
*copied= found_count;
*deleted=delete_count;
to->file->ha_release_auto_increment();
- if (to->file->ha_external_lock(thd,F_UNLCK))
- error=1;
- if (error < 0 && !from->s->tmp_table &&
- to->file->extra(HA_EXTRA_PREPARE_FOR_RENAME))
+ if (unlikely(to->file->ha_external_lock(thd,F_UNLCK)))
+ error= 1;
+ if (likely(error < 0) && !from->s->tmp_table &&
+ unlikely(to->file->extra(HA_EXTRA_PREPARE_FOR_RENAME)))
error= 1;
thd_progress_end(thd);
DBUG_RETURN(error > 0 ? -1 : 0);