diff options
author | unknown <mikael@dator5.(none)> | 2006-06-20 16:52:40 -0400 |
---|---|---|
committer | unknown <mikael@dator5.(none)> | 2006-06-20 16:52:40 -0400 |
commit | 5a737577e637dce91728e2cc0259719d7fe36774 (patch) | |
tree | d43f6fb2c0aaaf7ae238d1e51a722360cfd04522 /sql | |
parent | 86d16c98d668d7c3ab9cf1b3d5d5af6d6d245575 (diff) | |
download | mariadb-git-5a737577e637dce91728e2cc0259719d7fe36774.tar.gz |
BUG#17138: Crash in stored procedure after fatal error that wasn't a real fatal error
sql/handler.h:
Handle HA_ERR_FOUND_DUPP_KEY and HA_ERR_FOUND_DUPP_UNIQUE similarly
sql/item_sum.cc:
fix
sql/sql_select.cc:
fix
Diffstat (limited to 'sql')
-rw-r--r-- | sql/handler.h | 8 | ||||
-rw-r--r-- | sql/item_sum.cc | 3 | ||||
-rw-r--r-- | sql/sql_select.cc | 9 |
3 files changed, 10 insertions, 10 deletions
diff --git a/sql/handler.h b/sql/handler.h index b53c0a9c101..048657e419b 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -977,6 +977,9 @@ public: ignorable than others. E.g. the partition handler can get inserts into a range where there is no partition and this is an ignorable error. + HA_ERR_FOUND_DUPP_UNIQUE is a special case in MyISAM that means the + same thing as HA_ERR_FOUND_DUPP_KEY but can in some cases lead to + a slightly different error message. */ #define HA_CHECK_DUPP_KEY 1 #define HA_CHECK_DUPP_UNIQUE 2 @@ -985,9 +988,8 @@ public: { if (!error || ((flags & HA_CHECK_DUPP_KEY) && - error == HA_ERR_FOUND_DUPP_KEY) || - ((flags & HA_CHECK_DUPP_UNIQUE) && - error == HA_ERR_FOUND_DUPP_UNIQUE)) + (error == HA_ERR_FOUND_DUPP_KEY || + error == HA_ERR_FOUND_DUPP_UNIQUE))) return FALSE; return TRUE; } diff --git a/sql/item_sum.cc b/sql/item_sum.cc index d6bc2c326d6..ff37ceaa6fe 100644 --- a/sql/item_sum.cc +++ b/sql/item_sum.cc @@ -2663,8 +2663,7 @@ bool Item_sum_count_distinct::add() return tree->unique_add(table->record[0] + table->s->null_bytes); } if ((error= table->file->ha_write_row(table->record[0])) && - error != HA_ERR_FOUND_DUPP_KEY && - error != HA_ERR_FOUND_DUPP_UNIQUE) + table->file->cannot_ignore_error(error, HA_CHECK_DUPP)) return TRUE; return FALSE; } diff --git a/sql/sql_select.cc b/sql/sql_select.cc index e9e2a4ed1e0..add4746c819 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -9354,9 +9354,9 @@ bool create_myisam_from_heap(THD *thd, TABLE *table, TMP_TABLE_PARAM *param, /* copy row that filled HEAP table */ if ((write_err=new_table.file->write_row(table->record[0]))) { - if (write_err != HA_ERR_FOUND_DUPP_KEY && - write_err != HA_ERR_FOUND_DUPP_UNIQUE || !ignore_last_dupp_key_error) - goto err; + if (new_table.file->cannot_ignore_error(write_err, HA_CHECK_DUPP) || + !ignore_last_dupp_key_error) + goto err; } /* remove heap table and change to use myisam table */ @@ -10777,8 +10777,7 @@ end_write(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)), join->found_records++; if ((error=table->file->write_row(table->record[0]))) { - if (error == HA_ERR_FOUND_DUPP_KEY || - error == HA_ERR_FOUND_DUPP_UNIQUE) + if (table->file->cannot_ignore_error(error, HA_CHECK_DUPP)) goto end; if (create_myisam_from_heap(join->thd, table, &join->tmp_table_param, error,1)) |