Bug #46259 | 5.0.83 -> 5.1.36, query doesn't work | ||
---|---|---|---|
Submitted: | 17 Jul 2009 10:05 | Modified: | 19 Dec 2009 0:09 |
Reporter: | Henry Rolofs | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: DML | Severity: | S3 (Non-critical) |
Version: | 5.1.36, 5.4.4 | OS: | Any (openSUSE 11.1) |
Assigned to: | Martin Hansson | CPU Architecture: | Any |
Tags: | parser, regression, udf |
[17 Jul 2009 10:05]
Henry Rolofs
[17 Jul 2009 10:32]
Valeriy Kravchuk
Sorry, but I can't repeat this problem using my simple test cases, with built in or stored function I define: mysql> select version(); +------------------+ | version() | +------------------+ | 5.1.36-community | +------------------+ 1 row in set (0.00 sec) mysql> create function my(p1 int, p2 int) returns int return 1; Query OK, 0 rows affected (0.00 sec) mysql> select if(1 is not null,1,2) as a from (select 1 as b) as t order by my(a ,1); +---+ | a | +---+ | 1 | +---+ 1 row in set (0.00 sec) mysql> select if(t.b is not null, t.b, 2) as a from (select 1 as b) as t order b y my(a,1); +---+ | a | +---+ | 1 | +---+ 1 row in set (0.00 sec) So, please, check your test case, provide a code of your field() function and copy/paste testing results from mysql command line client as I did.
[17 Jul 2009 11:51]
Henry Rolofs
Hello Valeriy, the field() function is the mysql internal string function. Here are my tests: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 24 Server version: 5.1.36 MySQL Community Server (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> select version(); +-----------+ | version() | +-----------+ | 5.1.36 | +-----------+ 1 row in set (0.00 sec) mysql> select if (`tab1`.`data1` is not null, `tab1`.`data1`,2) as `data2` from (select 1 as `data1`) as `tab1` order by field(`data2`,1); ERROR 1054 (42S22): Unknown column 'data2' in 'order clause' mysql> I figured out that the ` inside the field function makes the problem. mysql> select if (`tab1`.`data1` is not null, `tab1`.`data1`,2) as `data2` from (select 1 as `data1`) as `tab1` order by field(data2,1); +-------+ | data2 | +-------+ | 1 | +-------+ 1 row in set (0.00 sec) mysql> The same with your example mysql> select if(1 is not null,1,2) as a from (select 1 as b) as t order by my(a ,1); +---+ | a | +---+ | 1 | +---+ 1 row in set (0.00 sec) mysql> select if(1 is not null,1,2) as a from (select 1 as b) as t order by my(`a` ,1); ERROR 1054 (42S22): Unknown column 'a' in 'order clause' mysql> Regards,Henry
[17 Jul 2009 12:23]
Valeriy Kravchuk
Indeed, you are right. I just was not able to imagine that `a` vs a can make any difference. My bad. Verified just as described: C:\Program Files\MySQL\MySQL Server 5.0\bin>mysql -uroot -proot -P3310 test Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.1.36-community MySQL Community Server (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> select if(t.b is not null, t.b, 2) as a from (select 1 as b) as t order b y field(a,1); +---+ | a | +---+ | 1 | +---+ 1 row in set (0.05 sec) mysql> select if(t.b is not null, t.b, 2) as `a` from (select 1 as b) as t order by field(`a`,1); ERROR 1054 (42S22): Unknown column 'a' in 'order clause' mysql> exit Bye C:\Program Files\MySQL\MySQL Server 5.0\bin>mysql -uroot -proot -P3308 test Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 12 Server version: 5.0.79-enterprise-gpl-nt MySQL Enterprise Server - Pro Edition ( GPL) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> select if(t.b is not null, t.b, 2) as `a` from (select 1 as b) as t order by field(`a`,1); +---+ | a | +---+ | 1 | +---+ 1 row in set (0.20 sec)
[17 Jul 2009 12:25]
Valeriy Kravchuk
Recent azalea is also affected. This time on Linux, simply: openxs@suse:/home2/openxs/dbs/azalea> bin/mysql -uroot test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 Server version: 5.4.4-alpha-debug Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> select 1 as a order by filed(a,1); ERROR 1305 (42000): FUNCTION test.filed does not exist mysql> select 1 as a order by field(a,1); +---+ | a | +---+ | 1 | +---+ 1 row in set (0.00 sec) mysql> select 1 as `a` order by field(`a`,1); ERROR 1054 (42S22): Unknown column 'a' in 'order clause'
[17 Jul 2009 15:36]
Henry Rolofs
Hello Valeriy, thanks for fast verifing the bug. Henry
[17 Jul 2009 19:23]
Peter Laursen
http://bugs.mysql.com/bug.php?id=35863 "Clarified that aliases may be quoted as identifiers or as strings here: http://dev.mysql.com/doc/refman/5.0/en/identifiers.html"
[4 Sep 2009 9:08]
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/commits/82427 3093 Martin Hansson 2009-09-04 Bug#46259: 5.0.83 -> 5.1.36, query doesn't work The parser rule for expressions in a udf parameter list contains two hacks: First, the parser input stream is read verbatim, bypassing the lexer. Second, the Item::name field is overwritten. If the argument to a udf was a field, the field's name as seen by name resolution was overwritten this way. If the field name was quoted or escaped, it would appear as e.g. "`field`". Fixed by disabling the hack for fields. @ mysql-test/r/udf.result Bug#46259: Test result. @ mysql-test/t/udf.test Bug#46259: Test case. @ sql/sql_yacc.yy Bug#46259: Fix.
[7 Sep 2009 9:45]
Henry Rolofs
Hello Martin, thanks for your patch. :-) With this patch (if it included in the binary distrubition)i can start with the migration of my databases/application from 5.0 to 5.1. Thanks, Henry
[7 Sep 2009 9:58]
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/commits/82565 3093 Martin Hansson 2009-09-07 Bug#46259: 5.0.83 -> 5.1.36, query doesn't work The parser rule for expressions in a udf parameter list contains two hacks: First, the parser input stream is read verbatim, bypassing the lexer. Second, the Item::name field is overwritten. If the argument to a udf was a field, the field's name as seen by name resolution was overwritten this way. If the field name was quoted or escaped, it would appear as e.g. "`field`". Fixed by not overwriting field names. @ mysql-test/r/udf.result Bug#46259: Test result. @ mysql-test/t/udf.test Bug#46259: Test case. @ sql/sql_yacc.yy Bug#46259: Fix.
[7 Sep 2009 12:07]
Martin Hansson
Fix has changed slightly, reviewers might want to take a look.
[7 Sep 2009 12:48]
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/commits/82586 3586 Martin Hansson 2009-09-07 [merge] Bug#46259: Merge
[7 Sep 2009 12:51]
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/commits/82589 3116 Martin Hansson 2009-09-07 [merge] Bug#46259: Merge
[7 Sep 2009 14:54]
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/commits/82601 3107 Martin Hansson 2009-09-07 [merge] Bug#46259: Merge
[14 Sep 2009 16:03]
Bugs System
Pushed into 5.4.4-alpha (revid:alik@sun.com-20090914155317-m1g9wodmndzdj4l1) (version source revid:alik@sun.com-20090914155317-m1g9wodmndzdj4l1) (merge vers: 5.4.4-alpha) (pib:11)
[2 Oct 2009 1:19]
Paul DuBois
Noted in 5.4.3 (not 5.4.4) changelog: A parser problem prevented properly stripping backquotes from an argument to a user-defined function (UDF). If the UDF was in an ORDER BY clause, its name would not be properly resolved against an alias with the same name in the select list. Setting report to NDI pending push into 5.1.x.
[6 Oct 2009 8:59]
Bugs System
Pushed into 5.1.40 (revid:joro@sun.com-20091006073316-lea2cpijh9r6on7c) (version source revid:martin.hansson@sun.com-20090907145247-q8qhcgweg0qt0j7y) (merge vers: 5.1.39) (pib:11)
[7 Oct 2009 0:45]
Paul DuBois
Noted in 5.1.40 changelog.
[22 Oct 2009 7:52]
Henry Rolofs
Yesterday I have done the first tests with mysql-5.1.40-linux-i686-glibc23.tar.gz. Till now everything works find. All my application and scripts runs with 5.1.40. Now I can start with the migration from 5.0.x to 5.1.x. Many thanks, Henry :-)
[23 Oct 2009 12:58]
Martin Hansson
I am happy you're pleased...
[23 Oct 2009 18:17]
Henry Rolofs
Today during the migration iy "found" an other problem. http://bugs.mysql.com/bug.php?id=48265 step by step ;-)
[18 Dec 2009 10:30]
Bugs System
Pushed into 5.1.41-ndb-7.1.0 (revid:jonas@mysql.com-20091218102229-64tk47xonu3dv6r6) (version source revid:jonas@mysql.com-20091218095730-26gwjidfsdw45dto) (merge vers: 5.1.41-ndb-7.1.0) (pib:15)
[18 Dec 2009 10:45]
Bugs System
Pushed into 5.1.41-ndb-6.2.19 (revid:jonas@mysql.com-20091218100224-vtzr0fahhsuhjsmt) (version source revid:jonas@mysql.com-20091217101452-qwzyaig50w74xmye) (merge vers: 5.1.41-ndb-6.2.19) (pib:15)
[18 Dec 2009 11:01]
Bugs System
Pushed into 5.1.41-ndb-6.3.31 (revid:jonas@mysql.com-20091218100616-75d9tek96o6ob6k0) (version source revid:jonas@mysql.com-20091217154335-290no45qdins5bwo) (merge vers: 5.1.41-ndb-6.3.31) (pib:15)
[18 Dec 2009 11:15]
Bugs System
Pushed into 5.1.41-ndb-7.0.11 (revid:jonas@mysql.com-20091218101303-ga32mrnr15jsa606) (version source revid:jonas@mysql.com-20091218064304-ezreonykd9f4kelk) (merge vers: 5.1.41-ndb-7.0.11) (pib:15)