diff options
author | Michael Widenius <monty@askmonty.org> | 2011-12-11 18:39:33 +0200 |
---|---|---|
committer | Michael Widenius <monty@askmonty.org> | 2011-12-11 18:39:33 +0200 |
commit | 148587461954b544355bc808a89bfed1a70694e1 (patch) | |
tree | 2fd1f7b65e3a4ce21719a5f66f6617a89ff9ab7e /sql/sql_base.cc | |
parent | 6d4224a31c9d32c8f8067a4f7d16daa29bcdee6b (diff) | |
download | mariadb-git-148587461954b544355bc808a89bfed1a70694e1.tar.gz |
Rewrite IGNORE handling:
- Instead of supressing all errors, only suppress safe ones like:
ER_DUP_KEY, ER_BAD_NULL_ERROR, ER_SUBQUERY_NO_1_ROW, ER_ROW_IS_REFERENCED_2
Diffstat (limited to 'sql/sql_base.cc')
-rw-r--r-- | sql/sql_base.cc | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/sql/sql_base.cc b/sql/sql_base.cc index c625aaab9a0..558e7b0aa9e 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -8549,9 +8549,11 @@ fill_record(THD * thd, List<Item> &fields, List<Item> &values, Item *value, *fld; Item_field *field; TABLE *table= 0, *vcol_table= 0; - bool abort_on_warning_saved= thd->abort_on_warning; + bool save_abort_on_warning= thd->abort_on_warning; + bool save_no_errors= thd->no_errors; DBUG_ENTER("fill_record"); + thd->no_errors= ignore_errors; /* Reset the table->auto_increment_field_not_null as it is valid for only one row. @@ -8596,7 +8598,7 @@ fill_record(THD * thd, List<Item> &fields, List<Item> &values, ER(ER_WARNING_NON_DEFAULT_VALUE_FOR_VIRTUAL_COLUMN), rfield->field_name, table->s->table_name.str); } - if ((value->save_in_field(rfield, 0) < 0) && !ignore_errors) + if ((value->save_in_field(rfield, 0)) < 0 && !ignore_errors) { my_message(ER_UNKNOWN_ERROR, ER(ER_UNKNOWN_ERROR), MYF(0)); goto err; @@ -8614,10 +8616,13 @@ fill_record(THD * thd, List<Item> &fields, List<Item> &values, goto err; } } - thd->abort_on_warning= abort_on_warning_saved; + thd->abort_on_warning= save_abort_on_warning; + thd->no_errors= save_no_errors; DBUG_RETURN(thd->is_error()); + err: - thd->abort_on_warning= abort_on_warning_saved; + thd->abort_on_warning= save_abort_on_warning; + thd->no_errors= save_no_errors; if (table) table->auto_increment_field_not_null= FALSE; DBUG_RETURN(TRUE); |