diff options
-rw-r--r-- | mysql-test/main/get_diagnostics.result | 28 | ||||
-rw-r--r-- | mysql-test/main/get_diagnostics.test | 20 | ||||
-rw-r--r-- | sql/sql_delete.cc | 3 |
3 files changed, 51 insertions, 0 deletions
diff --git a/mysql-test/main/get_diagnostics.result b/mysql-test/main/get_diagnostics.result index a884ebe3fe0..2e749fa21d7 100644 --- a/mysql-test/main/get_diagnostics.result +++ b/mysql-test/main/get_diagnostics.result @@ -1783,3 +1783,31 @@ SELECT @n; @n 4 DROP TABLE t1; +# +# MDEV-26844: DELETE returns ROW_NUMBER=1 for every row upon +# ER_TRUNCATED_WRONG_VALUE +# +# without ORDER BY +CREATE TABLE t (a VARCHAR(8)); +INSERT INTO t VALUES ('val1'),('val2'),('100'),('val4'); +SELECT * FROM t; +a +val1 +val2 +100 +val4 +DELETE FROM t WHERE a = 100; +Warnings: +Warning 1292 Truncated incorrect DOUBLE value: 'val1' +Warning 1292 Truncated incorrect DOUBLE value: 'val2' +Warning 1292 Truncated incorrect DOUBLE value: 'val4' +SHOW WARNINGS; +Level Code Message +Warning 1292 Truncated incorrect DOUBLE value: 'val1' +Warning 1292 Truncated incorrect DOUBLE value: 'val2' +Warning 1292 Truncated incorrect DOUBLE value: 'val4' +GET DIAGNOSTICS CONDITION 3 @n = ROW_NUMBER; +SELECT @n; +@n +4 +DROP TABLE t; diff --git a/mysql-test/main/get_diagnostics.test b/mysql-test/main/get_diagnostics.test index a1779f3c0ab..e8d81dca1e6 100644 --- a/mysql-test/main/get_diagnostics.test +++ b/mysql-test/main/get_diagnostics.test @@ -1667,3 +1667,23 @@ GET DIAGNOSTICS CONDITION 2 @n= ROW_NUMBER; SELECT @n; DROP TABLE t1; + +--echo # +--echo # MDEV-26844: DELETE returns ROW_NUMBER=1 for every row upon +--echo # ER_TRUNCATED_WRONG_VALUE +--echo # + +--echo # without ORDER BY + +CREATE TABLE t (a VARCHAR(8)); + +INSERT INTO t VALUES ('val1'),('val2'),('100'),('val4'); +SELECT * FROM t; + +DELETE FROM t WHERE a = 100; +SHOW WARNINGS; + +GET DIAGNOSTICS CONDITION 3 @n = ROW_NUMBER; +SELECT @n; + +DROP TABLE t; diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index 396ba7fe3e4..0403d6e73c3 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -795,9 +795,11 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds, THD_STAGE_INFO(thd, stage_updating); fix_rownum_pointers(thd, thd->lex->current_select, &deleted); + thd->get_stmt_da()->reset_current_row_for_warning(0); while (likely(!(error=info.read_record())) && likely(!thd->killed) && likely(!thd->is_error())) { + thd->get_stmt_da()->inc_current_row_for_warning(); if (delete_while_scanning) delete_record= record_should_be_deleted(thd, table, select, explain, delete_history); @@ -873,6 +875,7 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds, else break; } + thd->get_stmt_da()->reset_current_row_for_warning(1); terminate_delete: killed_status= thd->killed; |