Commit 723ffdb3 authored by Julius Goryavsky's avatar Julius Goryavsky Committed by Marko Mäkelä

MDEV-9519: After-merge fix for 10.3

parent 446b3ebd
......@@ -3409,10 +3409,32 @@ int handler::update_auto_increment()
if (unlikely(tmp)) // Out of range value in store
{
/*
It's better to return an error here than getting a confusing
'duplicate key error' later.
First, test if the query was aborted due to strict mode constraints
or new field value greater than maximum integer value:
*/
result= HA_ERR_AUTOINC_ERANGE;
if (thd->killed == KILL_BAD_DATA ||
nr > table->next_number_field->get_max_int_value())
{
/*
It's better to return an error here than getting a confusing
'duplicate key error' later.
*/
result= HA_ERR_AUTOINC_ERANGE;
}
else
{
/*
Field refused this value (overflow) and truncated it, use the result
of the truncation (which is going to be inserted); however we try to
decrease it to honour auto_increment_* variables.
That will shift the left bound of the reserved interval, we don't
bother shifting the right bound (anyway any other value from this
interval will cause a duplicate key).
*/
nr= prev_insert_id(table->next_number_field->val_int(), variables);
if (unlikely(table->next_number_field->store((longlong)nr, TRUE)))
nr= table->next_number_field->val_int();
}
}
if (append)
{
......
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