From 797bd73cfa09e002819e847bd1aa9fea79dc5d9f Mon Sep 17 00:00:00 2001 From: Rucha Deodhar Date: Sun, 17 Oct 2021 16:24:31 +0530 Subject: [PATCH] MDEV-26841: ROW_NUMBER is not set and differs from the message upon ER_WRONG_VALUE_COUNT_ON_ROW for the 1st row Analysis: Current row for warning does not increment for prepare phase Fix: Increment current row for warning if number of fields in the table and row values dont match and number of values in rows is greater than number of fields --- mysql-test/main/get_diagnostics.result | 18 ++++++++++++++++++ mysql-test/main/get_diagnostics.test | 21 +++++++++++++++++++++ sql/sql_insert.cc | 2 ++ 3 files changed, 41 insertions(+) diff --git a/mysql-test/main/get_diagnostics.result b/mysql-test/main/get_diagnostics.result index d394d96eaff..6b01cbd78e0 100644 --- a/mysql-test/main/get_diagnostics.result +++ b/mysql-test/main/get_diagnostics.result @@ -1747,3 +1747,21 @@ SELECT @n, @m; @n @m 2 Data truncated for column 'a' at row 2 DROP TABLE t1; +# +# MDEV-26841: ROW_NUMBER is not set and differs from the message upon +# ER_WRONG_VALUE_COUNT_ON_ROW for the 1st row +# +CREATE TABLE t1 (a INT); +INSERT INTO t1 VALUES (1,2),(3); +ERROR 21S01: Column count doesn't match value count at row 1 +GET DIAGNOSTICS CONDITION 1 @n= ROW_NUMBER, @m= MESSAGE_TEXT; +SELECT @n, @m; +@n @m +1 Column count doesn't match value count at row 1 +INSERT INTO t1(a) VALUES(1,2), (3); +ERROR 21S01: Column count doesn't match value count at row 1 +GET DIAGNOSTICS CONDITION 1 @n= ROW_NUMBER, @m= MESSAGE_TEXT; +SELECT @n, @m; +@n @m +1 Column count doesn't match value count at row 1 +DROP TABLE t1; diff --git a/mysql-test/main/get_diagnostics.test b/mysql-test/main/get_diagnostics.test index f4495059f9c..623d9a9a686 100644 --- a/mysql-test/main/get_diagnostics.test +++ b/mysql-test/main/get_diagnostics.test @@ -1632,3 +1632,24 @@ GET DIAGNOSTICS CONDITION 1 @n= ROW_NUMBER, @m= MESSAGE_TEXT; SELECT @n, @m; DROP TABLE t1; + +--echo # +--echo # MDEV-26841: ROW_NUMBER is not set and differs from the message upon +--echo # ER_WRONG_VALUE_COUNT_ON_ROW for the 1st row +--echo # + +CREATE TABLE t1 (a INT); + +--error ER_WRONG_VALUE_COUNT_ON_ROW +INSERT INTO t1 VALUES (1,2),(3); + +GET DIAGNOSTICS CONDITION 1 @n= ROW_NUMBER, @m= MESSAGE_TEXT; +SELECT @n, @m; + +--error ER_WRONG_VALUE_COUNT_ON_ROW +INSERT INTO t1(a) VALUES(1,2), (3); + +GET DIAGNOSTICS CONDITION 1 @n= ROW_NUMBER, @m= MESSAGE_TEXT; +SELECT @n, @m; + +DROP TABLE t1; diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 3dff6722a3d..d3df63fe0e6 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -229,6 +229,7 @@ static int check_insert_fields(THD *thd, TABLE_LIST *table_list, } if (values.elements != table->s->visible_fields) { + thd->get_stmt_da()->reset_current_row_for_warning(1); my_error(ER_WRONG_VALUE_COUNT_ON_ROW, MYF(0), 1L); DBUG_RETURN(-1); } @@ -253,6 +254,7 @@ static int check_insert_fields(THD *thd, TABLE_LIST *table_list, if (fields.elements != values.elements) { + thd->get_stmt_da()->reset_current_row_for_warning(1); my_error(ER_WRONG_VALUE_COUNT_ON_ROW, MYF(0), 1L); DBUG_RETURN(-1); }