Details
-
Bug
-
Status: Stalled (View Workflow)
-
Major
-
Resolution: Unresolved
-
10.5, 10.6, 10.11, 11.4
-
None
Description
The correct behavior can be verified by the following assertions
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
|
--- a/sql/sql_base.cc
|
+++ b/sql/sql_base.cc
|
@@ -2765,7 +2765,7 @@
|
add_back_last_deleted_lock(dst_table_list);
|
|
table->mdl_ticket->downgrade_lock(table->reginfo.lock_type >=
|
- TL_WRITE_ALLOW_WRITE ?
|
+ TL_WRITE_ALLOW_WRITE ?
|
MDL_SHARED_NO_READ_WRITE :
|
MDL_SHARED_READ);
|
|
@@ -8606,11 +8606,15 @@
|
|
if (rfield->stored_in_db())
|
{
|
- if (!skip_sys_field &&
|
- unlikely(value->save_in_field(rfield, 0) < 0) && !ignore_errors)
|
+ if (!skip_sys_field)
|
{
|
- my_message(ER_UNKNOWN_ERROR, ER_THD(thd, ER_UNKNOWN_ERROR), MYF(0));
|
- goto err;
|
+ if (unlikely(value->save_in_field(rfield, 0) < 0) && !ignore_errors)
|
+ {
|
+ my_message(ER_UNKNOWN_ERROR, ER_THD(thd, ER_UNKNOWN_ERROR), MYF(0));
|
+ goto err;
|
+ }
|
+
|
+ DBUG_ASSERT(!thd->is_error() || ignore_errors);
|
}
|
/*
|
In sql MODE_SIMULTANEOUS_ASSIGNMENT,
|
@@ -8901,6 +8905,9 @@
|
else
|
if (value->save_in_field(field, 0) < 0)
|
goto err;
|
+ else
|
+ DBUG_ASSERT(!thd->is_error());
|
+
|
field->set_has_explicit_value();
|
}
|
/* Update virtual fields if there wasn't any errors */
|
adding which results in test crashes.
The result of save_in_field(...) < 0 should unambiguously mean a failed statement and should always be returned whenever thd->is_error() became true during the call.
Attachments
Issue Links
- relates to
-
MDEV-30263 Assertion failure in Protocol::end_statement upon HANDLER READ with invalid timestamp
-
- Closed
-