diff options
author | Monty <monty@mariadb.org> | 2018-04-04 12:16:12 +0300 |
---|---|---|
committer | Monty <monty@mariadb.org> | 2018-05-07 00:07:32 +0300 |
commit | 30ebc3ee9efcab635b1f3e14b9198a58ae93c233 (patch) | |
tree | 81e3ad66cd4ec8693964317cbf23515d0e9ecf35 /sql/sql_base.cc | |
parent | a22a339f8e044a1e8df011beb0b4c8f43792ac96 (diff) | |
download | mariadb-git-30ebc3ee9efcab635b1f3e14b9198a58ae93c233.tar.gz |
Add likely/unlikely to speed up execution
Added to:
- if (error)
- Lex
- sql_yacc.yy and sql_yacc_ora.yy
- In header files to alloc() calls
- Added thd argument to thd_net_is_killed()
Diffstat (limited to 'sql/sql_base.cc')
-rw-r--r-- | sql/sql_base.cc | 79 |
1 files changed, 41 insertions, 38 deletions
diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 0081365793b..daae00fac76 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1785,7 +1785,7 @@ retry_share: share= tdc_acquire_share(thd, table_list, gts_flags, &table); - if (!share) + if (unlikely(!share)) { /* Hide "Table doesn't exist" errors if the table belongs to a view. @@ -1927,7 +1927,7 @@ retry_share: thd->open_options, table, FALSE, IF_PARTITIONING(table_list->partition_names,0)); - if (error) + if (unlikely(error)) { my_free(table); @@ -1972,7 +1972,7 @@ retry_share: table_list->table= table; #ifdef WITH_PARTITION_STORAGE_ENGINE - if (table->part_info) + if (unlikely(table->part_info)) { /* Partitions specified were incorrect.*/ if (part_names_error) @@ -2057,7 +2057,7 @@ TABLE *find_table_for_mdl_upgrade(THD *thd, const char *db, { TABLE *tab= find_locked_table(thd->open_tables, db, table_name); - if (!tab) + if (unlikely(!tab)) { if (!no_error) my_error(ER_TABLE_NOT_LOCKED, MYF(0), table_name); @@ -2070,8 +2070,8 @@ TABLE *find_table_for_mdl_upgrade(THD *thd, const char *db, cases don't take a global IX lock in order to be compatible with global read lock. */ - if (!thd->mdl_context.is_lock_owner(MDL_key::GLOBAL, "", "", - MDL_INTENTION_EXCLUSIVE)) + if (unlikely(!thd->mdl_context.is_lock_owner(MDL_key::GLOBAL, "", "", + MDL_INTENTION_EXCLUSIVE))) { if (!no_error) my_error(ER_TABLE_NOT_LOCKED_FOR_WRITE, MYF(0), table_name); @@ -2083,7 +2083,7 @@ TABLE *find_table_for_mdl_upgrade(THD *thd, const char *db, (tab= find_locked_table(tab->next, db, table_name))) continue; - if (!tab && !no_error) + if (unlikely(!tab && !no_error)) my_error(ER_TABLE_NOT_LOCKED_FOR_WRITE, MYF(0), table_name); return tab; @@ -3529,7 +3529,7 @@ open_and_process_table(THD *thd, LEX *lex, TABLE_LIST *tables, error= open_table(thd, tables, ot_ctx); } - if (error) + if (unlikely(error)) { if (! ot_ctx->can_recover_from_failed_open() && safe_to_ignore_table) { @@ -3609,7 +3609,7 @@ open_and_process_table(THD *thd, LEX *lex, TABLE_LIST *tables, if (need_prelocking && ! lex->requires_prelocking()) lex->mark_as_requiring_prelocking(save_query_tables_last); - if (error) + if (unlikely(error)) goto end; } @@ -3619,7 +3619,7 @@ open_and_process_table(THD *thd, LEX *lex, TABLE_LIST *tables, /* Check and update metadata version of a base table. */ error= check_and_update_table_version(thd, tables, tables->table->s); - if (error) + if (unlikely(error)) goto end; /* After opening a MERGE table add the children to the query list of @@ -3679,7 +3679,7 @@ process_view_routines: if (need_prelocking && ! lex->requires_prelocking()) lex->mark_as_requiring_prelocking(save_query_tables_last); - if (error) + if (unlikely(error)) goto end; } @@ -4048,7 +4048,7 @@ restart: flags, prelocking_strategy, has_prelocking_list, &ot_ctx); - if (error) + if (unlikely(error)) { if (ot_ctx.can_recover_from_failed_open()) { @@ -4130,7 +4130,7 @@ restart: if (need_prelocking && ! *start) *start= thd->lex->query_tables; - if (error) + if (unlikely(error)) { if (ot_ctx.can_recover_from_failed_open()) { @@ -4226,7 +4226,7 @@ error: THD_STAGE_INFO(thd, stage_after_opening_tables); thd_proc_info(thd, 0); - if (error && *table_to_open) + if (unlikely(error) && *table_to_open) { (*table_to_open)->table= NULL; } @@ -4404,7 +4404,7 @@ handle_table(THD *thd, Query_tables_list *prelocking_ctx, arena= thd->activate_stmt_arena_if_needed(&backup); table->file->get_parent_foreign_key_list(thd, &fk_list); - if (thd->is_error()) + if (unlikely(thd->is_error())) { if (arena) thd->restore_active_arena(arena, &backup); @@ -4455,7 +4455,7 @@ handle_table(THD *thd, Query_tables_list *prelocking_ctx, table->internal_tables); if (arena) thd->restore_active_arena(arena, &backup); - if (error) + if (unlikely(error)) { *need_prelocking= TRUE; return TRUE; @@ -4696,7 +4696,7 @@ static bool check_lock_and_start_stmt(THD *thd, table_list->table->alias.c_ptr()); DBUG_RETURN(1); } - if ((error= table_list->table->file->start_stmt(thd, lock_type))) + if (unlikely((error= table_list->table->file->start_stmt(thd, lock_type)))) { table_list->table->file->print_error(error, MYF(0)); DBUG_RETURN(1); @@ -4836,7 +4836,7 @@ TABLE *open_ltable(THD *thd, TABLE_LIST *table_list, thr_lock_type lock_type, break; } - if (!error) + if (likely(!error)) { /* We can't have a view or some special "open_strategy" in this function @@ -6178,7 +6178,7 @@ find_field_in_tables(THD *thd, Item_ident *item, if (db) return cur_field; - if (found) + if (unlikely(found)) { if (report_error == REPORT_ALL_ERRORS || report_error == IGNORE_EXCEPT_NON_UNIQUE) @@ -6190,7 +6190,7 @@ find_field_in_tables(THD *thd, Item_ident *item, } } - if (found) + if (likely(found)) return found; /* @@ -6309,7 +6309,7 @@ find_item_in_list(Item *find, List<Item> &items, uint *counter, (if this field created from expression argument of group_concat()), => we have to check presence of name before compare */ - if (!item_field->name.str) + if (unlikely(!item_field->name.str)) continue; if (table_name) @@ -6427,24 +6427,27 @@ find_item_in_list(Item *find, List<Item> &items, uint *counter, } } } - if (!found) + + if (likely(found)) + return found; + + if (unlikely(found_unaliased_non_uniq)) { - if (found_unaliased_non_uniq) - { - if (report_error != IGNORE_ERRORS) - my_error(ER_NON_UNIQ_ERROR, MYF(0), - find->full_name(), current_thd->where); - return (Item **) 0; - } - if (found_unaliased) - { - found= found_unaliased; - *counter= unaliased_counter; - *resolution= RESOLVED_BEHIND_ALIAS; - } + if (report_error != IGNORE_ERRORS) + my_error(ER_NON_UNIQ_ERROR, MYF(0), + find->full_name(), current_thd->where); + return (Item **) 0; } + if (found_unaliased) + { + found= found_unaliased; + *counter= unaliased_counter; + *resolution= RESOLVED_BEHIND_ALIAS; + } + if (found) return found; + if (report_error != REPORT_EXCEPT_NOT_FOUND) { if (report_error == REPORT_ALL_ERRORS) @@ -8187,7 +8190,7 @@ fill_record(THD *thd, TABLE *table_arg, List<Item> &fields, List<Item> &values, if (rfield->stored_in_db()) { - if (value->save_in_field(rfield, 0) < 0 && !ignore_errors) + if (unlikely(value->save_in_field(rfield, 0) < 0) && !ignore_errors) { my_message(ER_UNKNOWN_ERROR, ER_THD(thd, ER_UNKNOWN_ERROR), MYF(0)); goto err; @@ -8442,7 +8445,7 @@ fill_record(THD *thd, TABLE *table, Field **ptr, List<Item> &values, /* Ensure that all fields are from the same table */ DBUG_ASSERT(field->table == table); - if (field->invisible) + if (unlikely(field->invisible)) { all_fields_have_values= false; continue; @@ -8454,7 +8457,7 @@ fill_record(THD *thd, TABLE *table, Field **ptr, List<Item> &values, if (field->field_index == autoinc_index) table->auto_increment_field_not_null= TRUE; - if (field->vcol_info || (vers_sys_field && !ignore_errors)) + if (unlikely(field->vcol_info) || (vers_sys_field && !ignore_errors)) { Item::Type type= value->type(); if (type != Item::DEFAULT_VALUE_ITEM && |