diff --git a/sql/sql_error.cc b/sql/sql_error.cc index 6a47e4b9cac..a9edbac9fd6 100644 --- a/sql/sql_error.cc +++ b/sql/sql_error.cc @@ -318,18 +318,16 @@ Diagnostics_area::reset_diagnostics_area() #endif get_warning_info()->clear_error_condition(); set_is_sent(false); - /** Tiny reset in debug mode to see garbage right away */ - if (!is_bulk_op()) - /* - For BULK DML operations (e.g. UPDATE) the data member m_status - has the value DA_OK_BULK. Keep this value in order to handle - m_affected_rows, m_statement_warn_count in correct way. Else, - the number of rows and the number of warnings affected by - the last statement executed as part of a trigger fired by the dml - (e.g. UPDATE statement fires a trigger on AFTER UPDATE) would counts - rows modified by trigger's statement. - */ - m_status= DA_EMPTY; + /* + For BULK DML operations (e.g. UPDATE) the data member m_status + has the value DA_OK_BULK. Keep this value in order to handle + m_affected_rows, m_statement_warn_count in correct way. Else, + the number of rows and the number of warnings affected by + the last statement executed as part of a trigger fired by the dml + (e.g. UPDATE statement fires a trigger on AFTER UPDATE) would counts + rows modified by trigger's statement. + */ + m_status= is_bulk_op() ? DA_OK_BULK : DA_EMPTY; DBUG_VOID_RETURN; } diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c index 5e8ec0701ff..a8c163eff2a 100644 --- a/tests/mysql_client_test.c +++ b/tests/mysql_client_test.c @@ -22886,8 +22886,58 @@ void test_mdev_10075() DIE_UNLESS(rc == 1); mysql_free_result(result); + mysql_query(mysql, "drop table t1"); } + +static void test_mdev35953() +{ +#ifndef EMBEDDED_LIBRARY + int rc; + MYSQL_STMT *stmt; + MYSQL_BIND bind[1]; + int vals[]= {1, 2}, count= array_elements(vals); + MYSQL *con= mysql_client_init(NULL); + DIE_UNLESS(con); + if (!mysql_real_connect(con, opt_host, opt_user, opt_password, current_db, + opt_port, opt_unix_socket, 0)) + { + fprintf(stderr, "Failed to connect to database: Error: %s\n", + mysql_error(con)); + exit(1); + } + rc= mysql_query(mysql, "create table t1 (a int)"); + myquery(rc); + + stmt= mysql_stmt_init(con); + rc= mysql_stmt_prepare(stmt, "insert into t1 (a) values (?)", -1); + check_execute(stmt, rc); + + memset(bind, 0, sizeof(bind)); + bind[0].buffer_type = MYSQL_TYPE_LONG; + bind[0].buffer = vals; + + mysql_stmt_attr_set(stmt, STMT_ATTR_ARRAY_SIZE, &count); + rc= mysql_stmt_bind_param(stmt, bind); + check_execute(stmt, rc); + + rc= mysql_stmt_execute(stmt); + check_execute(stmt, rc); + + rc= mysql_query(mysql, "alter table t1 add xx int"); + myquery(rc); + + rc= mysql_stmt_execute(stmt); + check_execute(stmt, rc); + + mysql_stmt_close(stmt); + mysql_close(con); + + mysql_query(mysql, "drop table t1"); +#endif +} + + static struct my_tests_st my_tests[]= { { "test_mdev_20516", test_mdev_20516 }, { "test_mdev24827", test_mdev24827 }, @@ -23206,6 +23256,7 @@ static struct my_tests_st my_tests[]= { { "test_mdev_34958", test_mdev_34958 }, #endif { "test_mdev_10075", test_mdev_10075}, + { "test_mdev35953", test_mdev35953 }, { 0, 0 } };