Commit 788a7fe8 authored by unknown's avatar unknown

MDEV-3812

This patch undoes the removal of enum store_key_result by the previous patch for mdev-3812.
parent a8fffefa
......@@ -3321,13 +3321,13 @@ bool subselect_uniquesubquery_engine::copy_ref_key(bool skip_constants)
for (store_key **copy= tab->ref.key_copy ; *copy ; copy++)
{
bool store_res;
enum store_key::store_key_result store_res;
if (skip_constants && (*copy)->store_key_is_const())
continue;
store_res= (*copy)->copy();
tab->ref.key_err= store_res;
if (store_res)
if (store_res == store_key::STORE_KEY_FATAL)
{
/*
Error converting the left IN operand to the column type of the right
......
......@@ -1459,6 +1459,7 @@ class store_key :public Sql_alloc
{
public:
bool null_key; /* TRUE <=> the value of the key has a null part */
enum store_key_result { STORE_KEY_OK, STORE_KEY_FATAL, STORE_KEY_CONV };
enum Type { FIELD_STORE_KEY, ITEM_STORE_KEY, CONST_ITEM_STORE_KEY };
store_key(THD *thd, Field *field_arg, uchar *ptr, uchar *null, uint length)
:null_key(0), null_ptr(null), err(0)
......@@ -1495,9 +1496,9 @@ class store_key :public Sql_alloc
@details this function makes sure truncation warnings when preparing the
key buffers don't end up as errors (because of an enclosing INSERT/UPDATE).
*/
bool copy()
enum store_key_result copy()
{
bool result;
enum store_key_result result;
THD *thd= to_field->table->in_use;
enum_check_fields saved_count_cuted_fields= thd->count_cuted_fields;
ulonglong sql_mode= thd->variables.sql_mode;
......@@ -1519,7 +1520,7 @@ class store_key :public Sql_alloc
uchar *null_ptr;
uchar err;
virtual bool copy_inner()=0;
virtual enum store_key_result copy_inner()=0;
};
......@@ -1551,7 +1552,7 @@ class store_key_field: public store_key
}
protected:
bool copy_inner()
enum store_key_result copy_inner()
{
TABLE *table= copy_field.to_field->table;
my_bitmap_map *old_map= dbug_tmp_use_all_columns(table,
......@@ -1568,7 +1569,7 @@ class store_key_field: public store_key
copy_field.do_copy(&copy_field);
dbug_tmp_restore_column_map(table->write_set, old_map);
null_key= to_field->is_null();
return test(err);
return err != 0 ? STORE_KEY_FATAL : STORE_KEY_OK;
}
};
......@@ -1598,12 +1599,12 @@ class store_key_item :public store_key
const char *name() const { return "func"; }
protected:
bool copy_inner()
enum store_key_result copy_inner()
{
TABLE *table= to_field->table;
my_bitmap_map *old_map= dbug_tmp_use_all_columns(table,
table->write_set);
int res= 0;
int res= FALSE;
/*
It looks like the next statement is needed only for a simplified
......@@ -1622,10 +1623,11 @@ class store_key_item :public store_key
we need to check for errors executing it and react accordingly
*/
if (!res && table->in_use->is_error())
res= 1;
res= 1; /* STORE_KEY_FATAL */
dbug_tmp_restore_column_map(table->write_set, old_map);
null_key= to_field->is_null() || item->null_value;
return ((err != 0 || res < 0 || res > 2) ? true : test(res));
return ((err != 0 || res < 0 || res > 2) ? STORE_KEY_FATAL :
(store_key_result) res);
}
};
......@@ -1651,7 +1653,7 @@ class store_key_const_item :public store_key_item
bool store_key_is_const() { return true; }
protected:
bool copy_inner()
enum store_key_result copy_inner()
{
int res;
if (!inited)
......@@ -1663,18 +1665,18 @@ class store_key_const_item :public store_key_item
if ((res= item->save_in_field(to_field, 1)))
{
if (!err)
err= res < 0 ? 1 : res;
err= res < 0 ? 1 : res; /* 1=STORE_KEY_FATAL */
}
/*
Item::save_in_field() may call Item::val_xxx(). And if this is a subquery
we need to check for errors executing it and react accordingly
*/
if (!err && to_field->table->in_use->is_error())
err= 1;
err= 1; /* STORE_KEY_FATAL */
dbug_tmp_restore_column_map(table->write_set, old_map);
}
null_key= to_field->is_null() || item->null_value;
return (err > 2 ? true : test(err));
return (err > 2 ? STORE_KEY_FATAL : (store_key_result) err);
}
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment