diff options
Diffstat (limited to 'sql/sql_insert.cc')
-rw-r--r-- | sql/sql_insert.cc | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index ac8f5a06745..adb33af05b9 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -81,15 +81,13 @@ static int check_insert_fields(THD *thd, TABLE_LIST *table_list, { if (!table) { - DBUG_ASSERT(table_list->view && - table_list->ancestor && table_list->ancestor->next_local); my_error(ER_VIEW_NO_INSERT_FIELD_LIST, MYF(0), table_list->view_db.str, table_list->view_name.str); return -1; } if (values.elements != table->s->fields) { - my_error(ER_WRONG_VALUE_COUNT_ON_ROW, MYF(0), 1); + my_error(ER_WRONG_VALUE_COUNT_ON_ROW, MYF(0), 1L); return -1; } #ifndef NO_EMBEDDED_ACCESS_CHECKS @@ -112,7 +110,7 @@ static int check_insert_fields(THD *thd, TABLE_LIST *table_list, int res; if (fields.elements != values.elements) { - my_error(ER_WRONG_VALUE_COUNT_ON_ROW, MYF(0), 1); + my_error(ER_WRONG_VALUE_COUNT_ON_ROW, MYF(0), 1L); return -1; } @@ -125,7 +123,7 @@ static int check_insert_fields(THD *thd, TABLE_LIST *table_list, thd->lex->select_lex.no_wrap_view_item= 0; if (res) return -1; - if (table == 0) + if (table_list->effective_algorithm == VIEW_ALGORITHM_MERGE) { /* it is join view => we need to find table for update */ List_iterator_fast<Item> it(fields); @@ -135,7 +133,7 @@ static int check_insert_fields(THD *thd, TABLE_LIST *table_list, while ((item= it++)) map|= item->used_tables(); - if (table_list->check_single_table(&tbl, map) || tbl == 0) + if (table_list->check_single_table(&tbl, map, table_list) || tbl == 0) { my_error(ER_VIEW_MULTIUPDATE, MYF(0), table_list->view_db.str, table_list->view_name.str); @@ -709,8 +707,6 @@ static bool mysql_prepare_insert_check_table(THD *thd, TABLE_LIST *table_list, thd->lex->empty_field_list_on_rset= 1; if (!table_list->table) { - DBUG_ASSERT(table_list->view && - table_list->ancestor && table_list->ancestor->next_local); my_error(ER_VIEW_NO_INSERT_FIELD_LIST, MYF(0), table_list->view_db.str, table_list->view_name.str); DBUG_RETURN(TRUE); @@ -897,7 +893,11 @@ int write_record(THD *thd, TABLE *table,COPY_INFO *info) goto err; if ((error=table->file->update_row(table->record[1],table->record[0]))) + { + if ((error == HA_ERR_FOUND_DUPP_KEY) && info->ignore) + break; goto err; + } info->updated++; break; } |