summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRucha Deodhar <rucha.deodhar@mariadb.com>2021-10-17 16:24:31 +0530
committerRucha Deodhar <rucha.deodhar@mariadb.com>2021-10-20 17:20:25 +0530
commitab83e23c1eabf7f59d2d4a2e9cd0d9db41651811 (patch)
treed4fb898cd2ea54360fd52f6b109fdb8d223d1cfd
parentad59a17b810d0feb6feb460f38a0c74cdb3c2187 (diff)
downloadmariadb-git-ab83e23c1eabf7f59d2d4a2e9cd0d9db41651811.tar.gz
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
-rw-r--r--mysql-test/main/get_diagnostics.result18
-rw-r--r--mysql-test/main/get_diagnostics.test21
-rw-r--r--sql/sql_insert.cc2
3 files changed, 41 insertions, 0 deletions
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);
}