diff options
author | unknown <mattiasj@witty.> | 2008-03-27 16:24:11 +0100 |
---|---|---|
committer | unknown <mattiasj@witty.> | 2008-03-27 16:24:11 +0100 |
commit | da9db4ed353411d1bfd013dfed7cc15633e2e1f8 (patch) | |
tree | bafe4ca3b0f182f8eb24f168e72d007ef9a790d0 /sql | |
parent | 5ad505dda2d8ae019f6abfbf6eb9091cea1a5c55 (diff) | |
parent | fb27979e6538e0f7c263b3d9f7400190f762e2fd (diff) | |
download | mariadb-git-da9db4ed353411d1bfd013dfed7cc15633e2e1f8.tar.gz |
Merge witty.:/Users/mattiasj/Public/shared-vms/bug21413-41-engines
into witty.:/Users/mattiasj/clones/bug21413-50-engines
sql/sql_insert.cc:
Manual merge
Diffstat (limited to 'sql')
-rw-r--r-- | sql/sql_insert.cc | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 1d324872409..746a04e03f3 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -709,8 +709,6 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list, error=0; id=0; thd->proc_info="update"; - if (duplic != DUP_ERROR || ignore) - table->file->extra(HA_EXTRA_IGNORE_DUP_KEY); if (duplic == DUP_REPLACE) { if (!table->triggers || !table->triggers->has_delete_triggers()) @@ -736,8 +734,15 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list, values_list.elements, and - if nothing else - to initialize the code to make the call of end_bulk_insert() below safe. */ - if (lock_type != TL_WRITE_DELAYED && !thd->prelocked_mode) - table->file->start_bulk_insert(values_list.elements); +#ifndef EMBEDDED_LIBRARY + if (lock_type != TL_WRITE_DELAYED) +#endif /* EMBEDDED_LIBRARY */ + { + if (duplic != DUP_ERROR || ignore) + table->file->extra(HA_EXTRA_IGNORE_DUP_KEY); + if (!thd->prelocked_mode) + table->file->start_bulk_insert(values_list.elements); + } thd->abort_on_warning= (!ignore && (thd->variables.sql_mode & (MODE_STRICT_TRANS_TABLES | @@ -863,6 +868,9 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list, else if (table->next_number_field && info.copied) id=table->next_number_field->val_int(); // Return auto_increment value + if (duplic != DUP_ERROR || ignore) + table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY); + transactional_table= table->file->has_transactions(); if ((changed= (info.copied || info.deleted || info.updated))) @@ -942,8 +950,6 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list, thd->count_cuted_fields= CHECK_FIELD_IGNORE; thd->next_insert_id=0; // Reset this if wrongly used table->auto_increment_field_not_null= FALSE; - if (duplic != DUP_ERROR || ignore) - table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY); if (duplic == DUP_REPLACE && (!table->triggers || !table->triggers->has_delete_triggers())) table->file->extra(HA_EXTRA_WRITE_CANNOT_REPLACE); @@ -1283,7 +1289,12 @@ bool mysql_prepare_insert(THD *thd, TABLE_LIST *table_list, select_lex->fix_prepare_information(thd, &fake_conds, &fake_conds); select_lex->first_execution= 0; } - if (duplic == DUP_UPDATE || duplic == DUP_REPLACE) + /* + Only call extra() handler method if we are not performing a DELAYED + operation. It will instead be executed by delayed insert thread. + */ + if ((duplic == DUP_UPDATE || duplic == DUP_REPLACE) && + (table->reginfo.lock_type != TL_WRITE_DELAYED)) table->file->extra(HA_EXTRA_RETRIEVE_PRIMARY_KEY); DBUG_RETURN(FALSE); } @@ -2453,6 +2464,9 @@ bool Delayed_insert::handle_inserts(void) info.ignore= row->ignore; info.handle_duplicates= row->dup; + if (info.handle_duplicates == DUP_UPDATE || + info.handle_duplicates == DUP_REPLACE) + table->file->extra(HA_EXTRA_RETRIEVE_PRIMARY_KEY); if (info.ignore || info.handle_duplicates != DUP_ERROR) { |