6 messages in com.mysql.lists.bugsRe: lost connection with SELECT queri...| From | Sent On | Attachments |
|---|---|---|
| Giuseppe Maxia | 30 Sep 2005 07:39 | |
| Remo Tex | 30 Sep 2005 23:23 | |
| Remo Tex | 30 Sep 2005 23:29 | |
| id...@remotex.bg | 30 Sep 2005 23:39 | |
| Remo Tex | 30 Sep 2005 23:43 | |
| Remo Tex | 03 Oct 2005 02:16 |
| Subject: | Re: lost connection with SELECT queries and DELETE in SP![]() |
|---|---|
| From: | Remo Tex (id...@remotex.bg) |
| Date: | 09/30/2005 11:23:27 PM |
| List: | com.mysql.lists.bugs |
well... Works for me: MySQL server: 5.0.13 binary distribution : SELECT VERSION(); 5.0.13-rc-nt-log OS: Windows 2000 Here are results:
C:\mysql-5.0.13-rc-win32\bin>mysql -u admin -p < test.mysql Enter password: ******* id1 c1 1 aaa 2 bbb 3 ccc 4 ddd 5 eee id2 c2 id1 1001 nnnn 1 1002 oooo 1 1003 pppp 2 1004 qqqq 2 1005 rrrr 2 1006 ssss 3 1007 tttt 3 1008 uuuu 4 DIAGNOSTICS TABLES READY -- CREATING STORED PROCEDURE DIAGNOSTICS STORED PROCEDURE READY -- NOW TESTING DIAGNOSTICS following call (1) should succeed table COUNT(*) t2 8 table COUNT(*) t2 6 table COUNT(*) t1 5 table COUNT(*) t1 4 DIAGNOSTICS previous call (1) should have succeeded DIAGNOSTICS following call (2a) should fail table COUNT(*) t2 6 table COUNT(*) t2 3 table COUNT(*) t1 4 table COUNT(*) t1 3 DIAGNOSTICS previous call (2a) should have failed DIAGNOSTICS following call (2b) should succeed table COUNT(*) t2 3 table COUNT(*) t2 3 table COUNT(*) t1 3 table COUNT(*) t1 3 DIAGNOSTICS previous call (2b) should have succeeded
C:\mysql-5.0.13-rc-win32\bin>
Giuseppe Maxia wrote:
Description: Using a mix of SELECT statements and DELETE commands on InnoDB tables will result in a lost connection, unless explicitly using autocommit=0.
MySQL server: 5.0.13 binary distribution (standard and max). OS: Linux (Fedora 4 and Debian 3.1)
How to replicate:
(1) save this script as test.mysql
# ---- CUT HERE ----- create database if not exists test; use test;
drop table if exists t2; drop table if exists t1;
create table t1 ( id1 int not null primary key, c1 char(10) ) ENGINE = INNODB DEFAULT CHARSET = LATIN1;
create table t2 ( id2 int not null primary key, c2 char(10), id1 int not null, key (id1), FOREIGN KEY (id1) REFERENCES t1 (id1) ) ENGINE = INNODB DEFAULT CHARSET = LATIN1;
INSERT INTO t1 (id1, c1) values (1, 'aaa'), (2, 'bbb'), (3, 'ccc'), (4, 'ddd'), (5, 'eee');
INSERT INTO t2 (id2,c2, id1) VALUES (1001, 'nnnn', 1), (1002, 'oooo', 1), (1003, 'pppp', 2), (1004, 'qqqq', 2), (1005, 'rrrr', 2), (1006, 'ssss', 3), (1007, 'tttt', 3), (1008, 'uuuu', 4);
select * from t1; select * from t2;
SELECT "TABLES READY -- CREATING STORED PROCEDURE" AS DIAGNOSTICS;
delimiter //
drop procedure if exists delete_t1 //
create procedure delete_t1(which_id int) DETERMINISTIC MODIFIES SQL DATA BEGIN SELECT 't2' AS 'table', COUNT(*) FROM t2; DELETE FROM t2 WHERE id1 = which_id; SELECT 't2' AS 'table', COUNT(*) FROM t2; SELECT 't1' AS 'table', COUNT(*) FROM t1; DELETE FROM t1 WHERE id1 = which_id; SELECT 't1' AS 'table', COUNT(*) FROM t1; END // delimiter ;
SELECT "STORED PROCEDURE READY -- NOW TESTING" AS DIAGNOSTICS;
select "following call (1) should succeed" AS DIAGNOSTICS; call delete_t1(1); -- this one will succeed COMMIT; select "previous call (1) should have succeeded" AS DIAGNOSTICS; select "following call (2a) should fail" AS DIAGNOSTICS; call delete_t1(2); -- this one will fail connect ; -- reconnect after failure select "previous call (2a) should have failed" AS DIAGNOSTICS; select "following call (2b) should succeed" AS DIAGNOSTICS; set autocommit = 0; call delete_t1(2); -- this one will succeed COMMIT; select "previous call (2b) should have succeeded" AS DIAGNOSTICS; # ---- CUT HERE
(2) run the script as mysql --force -t < test.mysql
(3) You should see output as follows: $ mysql -t --force < test.mysql +-----+------+ | id1 | c1 | +-----+------+ | 1 | aaa | | 2 | bbb | | 3 | ccc | | 4 | ddd | | 5 | eee | +-----+------+ +------+------+-----+ | id2 | c2 | id1 | +------+------+-----+ | 1001 | nnnn | 1 | | 1002 | oooo | 1 | | 1003 | pppp | 2 | | 1004 | qqqq | 2 | | 1005 | rrrr | 2 | | 1006 | ssss | 3 | | 1007 | tttt | 3 | | 1008 | uuuu | 4 | +------+------+-----+ +-------------------------------------------+ | DIAGNOSTICS | +-------------------------------------------+ | TABLES READY -- CREATING STORED PROCEDURE | +-------------------------------------------+ +---------------------------------------+ | DIAGNOSTICS | +---------------------------------------+ | STORED PROCEDURE READY -- NOW TESTING | +---------------------------------------+ +-----------------------------------+ | DIAGNOSTICS | +-----------------------------------+ | following call (1) should succeed | +-----------------------------------+ +-------+----------+ | table | COUNT(*) | +-------+----------+ | t2 | 8 | +-------+----------+ +-------+----------+ | table | COUNT(*) | +-------+----------+ | t2 | 6 | +-------+----------+ +-------+----------+ | table | COUNT(*) | +-------+----------+ | t1 | 5 | +-------+----------+ +-------+----------+ | table | COUNT(*) | +-------+----------+ | t1 | 4 | +-------+----------+ +-----------------------------------------+ | DIAGNOSTICS | +-----------------------------------------+ | previous call (1) should have succeeded | +-----------------------------------------+ +---------------------------------+ | DIAGNOSTICS | +---------------------------------+ | following call (2a) should fail | +---------------------------------+ ERROR 2013 (HY000) at line 58: Lost connection to MySQL server during query +---------------------------------------+ | DIAGNOSTICS | +---------------------------------------+ | previous call (2a) should have failed | +---------------------------------------+ +------------------------------------+ | DIAGNOSTICS | +------------------------------------+ | following call (2b) should succeed | +------------------------------------+ +-------+----------+ | table | COUNT(*) | +-------+----------+ | t2 | 3 | +-------+----------+ +-------+----------+ | table | COUNT(*) | +-------+----------+ | t2 | 3 | +-------+----------+ +-------+----------+ | table | COUNT(*) | +-------+----------+ | t1 | 4 | +-------+----------+ +-------+----------+ | table | COUNT(*) | +-------+----------+ | t1 | 3 | +-------+----------+ +------------------------------------------+ | DIAGNOSTICS | +------------------------------------------+ | previous call (2b) should have succeeded | +------------------------------------------+
Regards
GM




