| Bug #13729 | Stored procedures: packet error after exception handled | ||
|---|---|---|---|
| Submitted: | 4 Oct 2005 0:49 | Modified: | 30 Nov 2005 17:58 |
| Reporter: | Peter Gulutzan | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Stored Routines | Severity: | S2 (Serious) |
| Version: | 5.0.15-rc-debug | OS: | Linux (SUSE 9.2) |
| Assigned to: | Per-Erik Martin | CPU Architecture: | Any |
[4 Oct 2005 0:49]
Peter Gulutzan
[4 Oct 2005 15:18]
Valeriy Kravchuk
Can't repeat on today's 5.0.15-BK build (ChangeSet@1.2009, 2005-10-04 04:03:48+02:00, kent@mysql.com) on Fedora Core 1 as described:
mysql> delimiter //
mysql> create table t32 (s1 int, primary key (s1))//
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t32 values (1),(2)//
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> create procedure p32 () begin declare continue handler for sqlexception
-> select 55; update t32 set s1 = 1; end//
Query OK, 0 rows affected (0.03 sec)
mysql> call p32()//
+----+
| 55 |
+----+
| 55 |
+----+
1 row in set (0.00 sec)
mysql> drop procedure p32//
Query OK, 0 rows affected (0.00 sec)
mysql> select * from t32//
+----+
| s1 |
+----+
| 1 |
| 2 |
+----+
2 rows in set (0.00 sec)
mysql> create procedure p32 () begin declare continue handler for sqlexception
-> select 55; update t32 set s1 = 1; end//
Query OK, 0 rows affected (0.00 sec)
mysql> call p32()//
+----+
| 55 |
+----+
| 55 |
+----+
1 row in set (0.00 sec)
mysql> drop procedure p32//
Query OK, 0 rows affected (0.00 sec)
mysql> select version();
-> //
+-----------+
| version() |
+-----------+
| 5.0.15-rc |
+-----------+
1 row in set (0.00 sec)
What I am missing? --with-debug option for build?
[6 Oct 2005 21:26]
Peter Gulutzan
I can repeat the error, using mysqld built today (2005-10-06) with BUILD/compile-pentium-debug and starting mysqld with mysqld --user=root --skip-networking
[7 Oct 2005 2:41]
MySQL Verification Team
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 5.0.15-rc-debug
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> delimiter //
mysql> create table t32 (s1 int, primary key (s1))//
Query OK, 0 rows affected (0.03 sec)
mysql> insert into t32 values (1),(2)//
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> create procedure p32 () begin declare continue handler for sqlexception
-> select 55; update t32 set s1 = 1; end//
Query OK, 0 rows affected (0.00 sec)
mysql> call p32()//
+----+
| 55 |
+----+
| 55 |
+----+
1 row in set (0.01 sec)
mysql> drop procedure p32//
Packets out of order (Found: 6, expected 1)
ERROR 2013 (HY000): Lost connection to MySQL server during query
mysql>
[7 Oct 2005 16:00]
Per-Erik Martin
The handler/SP things are working ok, but something goes wrong in the update statement when an error occurs - it seems packages are sent even if it should have been aborted... (Using an "insert" that generates the same exception works for instance.)
[21 Oct 2005 11:00]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/internals/31285
[18 Nov 2005 14:31]
Konstantin Osipov
As discussed on IRC, we need a patch that makes sure that thd->is_fatal_error is not set on DUPLICATE KEY. This bug should be fixed in a manner that terminates SP execution if thd->is_fatal_error is set.
[23 Nov 2005 11:02]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/internals/32589
[24 Nov 2005 19:32]
Per-Erik Martin
Pushed to 5.0.17 bk.
[30 Nov 2005 17:58]
Paul DuBois
Noted in 5.0.17 changelog.
