Re: lost connection with SELECT queries and DELETE in SP

Remo Tex <[email protected]> Sat, 01 Oct 2005 09:43:29 +0300
Newsgroups gmane.comp.db.mysql.bugs
Message-ID <[email protected]>
Sorry it was my mistake. First time I ran server with "skip-innodb" 
option on... strange why mysql defaults to MyISAM without a error or 
warnig or.. whatever?
Now results without "skip-innodb" :-) ...still works :(
MySQL server:  5.0.13 binary distribution :
  SELECT VERSION();
  5.0.13-rc-nt-log
OS: Windows 2000

# --- And resulting output within innodb:

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>

# -- and tables were InnoDB :

show create table t1;
CREATE TABLE `t1` (
   `id1` int(11) NOT NULL,
   `c1` char(10) default NULL,
   PRIMARY KEY  (`id1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

show create table t2;
CREATE TABLE `t2` (
   `id2` int(11) NOT NULL,
   `c2` char(10) default NULL,
   `id1` int(11) NOT NULL,
   PRIMARY KEY  (`id2`),
   KEY `id1` (`id1`),
   CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`id1`) REFERENCES `t1` (`id1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1


Remo Tex wrote:
> 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
>>

-- 
MySQL Bugs Mailing List
For list archives: http://lists.mysql.com/bugs
To unsubscribe:    http://lists.mysql.com/[email protected]