Bug #6866 stored procedures are errornous in conjunction with views
| Submitted: | 29 Nov 2004 2:29 | Modified: | 10 Jun 2005 20:08 |
|---|---|---|---|
| Reporter: | Harald Gölles | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server | Severity: | S2 (Serious) |
| Version: | 5.0.2 | OS: | Linux (linux) |
| Assigned to: | Igor Babaev | CPU Architecture: | Any |
[4 Dec 2004 0:04]
Peter Gulutzan
Here is a slightly simpler test case (SuSE 9.2, 5.0.3-alpha-debug) create table t (s1 int); create view v as select * from t; create procedure p () select * from v; call p(); /* the return is 'empty set' but the server has crashed */
[25 Feb 2005 12:50]
Per-Erik Martin
This no longer crashes the server. Instead a syntax error is reported, but this is independent of the use of a stored procedure. The additional simplified test case is now working. mysql> call tp (1); ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'test`.`t` join `test`.`t2` on((`test`.`t`.`t2` = `test`.`t2`.`t2`))) left join `' at line 1 mysql> mysql> select * from tv where t1 = 1; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'test`.`t` join `test`.`t2` on((`test`.`t`.`t2` = `test`.`t2`.`t2`))) left join `' at line 1 mysql> select t.*, t2.data2, t3.data3 from t inner join t2 on t.t2 = t2.t2 left join t3 on t.t3 = t3.t3 order by t.t1, t2.t2, t3.t3; +------+------+------+------+-------+-------+ | t1 | t2 | t3 | data | data2 | data3 | +------+------+------+------+-------+-------+ | 1 | 1 | 4 | xx | a | d | +------+------+------+------+-------+-------+ 1 row in set (0.04 sec)
[6 Jun 2005 13:05]
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/25641
[6 Jun 2005 14:23]
Igor Babaev
ChangeSet
1.1952 05/06/06 06:05:11 igor@rurik.mysql.com +3 -0
sp.test, sp.result:
Added a test case for bug #6866.
sql_select.cc:
Fixed bug #6866.
Bug was due to the fact that on_expr was not backed up
for the second execution of the stored procedure.
This fix will appear in 5.0.7.
[10 Jun 2005 20:08]
Paul DuBois
Noted in 5.0.7 changelog.
[10 Jun 2005 20:08]
Paul DuBois
Noted in 5.0.7 changelog.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.057 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.
Description: when creating a stored procedure that selects data from a view, connection gets lost or wrong data is returned. ERROR 2013 (HY000): Lost connection to MySQL server during query (randomly, seems to occur more often if query - interval decreases) sometimes wrong results are returned: it seems the left joined table is cross joined, and all rows of t3 are returned. mysqld was compiled with CFLAGS="-O2 -mcpu=pentium3" CXX=gcc CXXFLAGS="-O2 -mcpu=pentium3 -felide-constructors" \ ./configure --prefix /var/mysql5 --with-tcp-port=3307 --with-unix-socket-path=/var/run/mysql5.sock \ --with-collation=latin1_general_cs --with-charset=latin1 \ --without-debug --with-extra-charsets=complex --enable-thread-safe-client \ --enable-local-infile --enable-assembler --disable-shared \ --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static \ --without-geometry How to repeat: use test; drop table t; drop table t2; drop table t3; create table t (t1 int, t2 int, t3 int, data varchar(500)); create table t2 (t2 int, data2 varchar(500)); create table t3 (t3 int, data3 varchar(500)); insert into t2 (t2, data2) values (1, 'a'); insert into t2 (t2, data2) values (2, 'b'); insert into t2 (t2, data2) values (3, 'c'); insert into t3 (t3, data3) values (4, 'd'); insert into t3 (t3, data3) values (5, 'e'); insert into t3 (t3, data3) values (6, 'f'); insert into t (t1, t2, t3, data) values (1,1,4,'xx'); drop view tv; create view tv as select t.*, t2.data2, t3.data3 from t inner join t2 on t.t2 = t2.t2 left join t3 on t.t3 = t3.t3 order by t.t1, t2.t2, t3.t3; drop procedure tp; DELIMITER // create procedure tp (_t1 int) begin select * from tv where t1 = _t1; end // DELIMITER ; call tp (1); call tp (1); call tp (1); call tp (1); results in: mysql> call tp (1); +------+------+------+------+-------+-------+ | t1 | t2 | t3 | data | data2 | data3 | +------+------+------+------+-------+-------+ | 1 | 1 | 4 | xx | a | d | +------+------+------+------+-------+-------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.00 sec) mysql> call tp (1); +------+------+------+------+-------+-------+ | t1 | t2 | t3 | data | data2 | data3 | +------+------+------+------+-------+-------+ | 1 | 1 | 4 | xx | a | d | | 1 | 1 | 4 | xx | a | e | | 1 | 1 | 4 | xx | a | f | +------+------+------+------+-------+-------+ 3 rows in set (0.01 sec) Query OK, 0 rows affected (0.01 sec) mysql> call tp (1); ERROR 2013 (HY000): Lost connection to MySQL server during query mysql> call tp (1); ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysql5.sock' (111) ERROR: Can't connect to the server mysql> mysql> call tp (1); No connection. Trying to reconnect... Connection id: 1 Current database: test +------+------+------+------+-------+-------+ | t1 | t2 | t3 | data | data2 | data3 | +------+------+------+------+-------+-------+ | 1 | 1 | 4 | xx | a | d | +------+------+------+------+-------+-------+ 1 row in set (0.01 sec) Query OK, 0 rows affected (0.01 sec) Suggested fix: ?