From: Jon Olav Hauglid Date: September 24 2010 7:18am Subject: bzr commit into mysql-5.5-runtime branch (jon.hauglid:3144) Bug#54920 List-Archive: http://lists.mysql.com/commits/118995 X-Bug: 54920 Message-Id: <201009240732.o8NIpO1V031130@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============2499520249977646020==" --===============2499520249977646020== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/x/mysql-5.5-runtime-bug54920/ based on revid:jon.hauglid@stripped 3144 Jon Olav Hauglid 2010-09-24 Bug #54920 Stored functions are allowed in HANDLER statements, but broken. Before this patch, it was allowed to use stored functions in HANDLER ... READ statements. The problem was that this functionality was not really supported by the code. Proper locking would for example not be performed, and it was also possible to break replication by having stored functions that performed updates. This patch disallows the use of stored functions in HANDLER ... READ. Any such statement will now give an ER_NOT_SUPPORTED_YET error. This is an incompatible change and should be reflected in the documentation. Test case added to handler_myisam/handler_innodb.test. modified: mysql-test/include/handler.inc mysql-test/r/handler_innodb.result mysql-test/r/handler_myisam.result sql/sql_yacc.yy === modified file 'mysql-test/include/handler.inc' --- a/mysql-test/include/handler.inc 2010-08-12 13:50:23 +0000 +++ b/mysql-test/include/handler.inc 2010-09-24 07:18:16 +0000 @@ -1809,9 +1809,32 @@ CREATE TABLE t1(a INT); INSERT INTO t1 VALUES (1); HANDLER t1 OPEN; # This used to cause the assert ---error ER_NO_SUCH_TABLE +--error ER_NOT_SUPPORTED_YET HANDLER t1 READ FIRST WHERE f1() = 1; HANDLER t1 CLOSE; DROP FUNCTION f1; DROP TABLE t1; + + +--echo # +--echo # Bug#54920 Stored functions are allowed in HANDLER statements, +--echo # but broken. +--echo # + +--disable_warnings +DROP TABLE IF EXISTS t1; +DROP FUNCTION IF EXISTS f1; +--enable_warnings + +CREATE TABLE t1 (a INT); +INSERT INTO t1 VALUES (1), (2); +CREATE FUNCTION f1() RETURNS INT RETURN 1; +HANDLER t1 OPEN; + +--error ER_NOT_SUPPORTED_YET +HANDLER t1 READ FIRST WHERE f1() = 1; + +HANDLER t1 CLOSE; +DROP FUNCTION f1; +DROP TABLE t1; === modified file 'mysql-test/r/handler_innodb.result' --- a/mysql-test/r/handler_innodb.result 2010-07-05 11:59:34 +0000 +++ b/mysql-test/r/handler_innodb.result 2010-09-24 07:18:16 +0000 @@ -1726,7 +1726,22 @@ CREATE TABLE t1(a INT); INSERT INTO t1 VALUES (1); HANDLER t1 OPEN; HANDLER t1 READ FIRST WHERE f1() = 1; -ERROR 42S02: Table 'test.t2' doesn't exist +ERROR 42000: This version of MySQL doesn't yet support 'stored functions in HANDLER ... READ' +HANDLER t1 CLOSE; +DROP FUNCTION f1; +DROP TABLE t1; +# +# Bug#54920 Stored functions are allowed in HANDLER statements, +# but broken. +# +DROP TABLE IF EXISTS t1; +DROP FUNCTION IF EXISTS f1; +CREATE TABLE t1 (a INT); +INSERT INTO t1 VALUES (1), (2); +CREATE FUNCTION f1() RETURNS INT RETURN 1; +HANDLER t1 OPEN; +HANDLER t1 READ FIRST WHERE f1() = 1; +ERROR 42000: This version of MySQL doesn't yet support 'stored functions in HANDLER ... READ' HANDLER t1 CLOSE; DROP FUNCTION f1; DROP TABLE t1; === modified file 'mysql-test/r/handler_myisam.result' --- a/mysql-test/r/handler_myisam.result 2010-07-05 11:59:34 +0000 +++ b/mysql-test/r/handler_myisam.result 2010-09-24 07:18:16 +0000 @@ -1722,7 +1722,22 @@ CREATE TABLE t1(a INT); INSERT INTO t1 VALUES (1); HANDLER t1 OPEN; HANDLER t1 READ FIRST WHERE f1() = 1; -ERROR 42S02: Table 'test.t2' doesn't exist +ERROR 42000: This version of MySQL doesn't yet support 'stored functions in HANDLER ... READ' +HANDLER t1 CLOSE; +DROP FUNCTION f1; +DROP TABLE t1; +# +# Bug#54920 Stored functions are allowed in HANDLER statements, +# but broken. +# +DROP TABLE IF EXISTS t1; +DROP FUNCTION IF EXISTS f1; +CREATE TABLE t1 (a INT); +INSERT INTO t1 VALUES (1), (2); +CREATE FUNCTION f1() RETURNS INT RETURN 1; +HANDLER t1 OPEN; +HANDLER t1 READ FIRST WHERE f1() = 1; +ERROR 42000: This version of MySQL doesn't yet support 'stored functions in HANDLER ... READ' HANDLER t1 CLOSE; DROP FUNCTION f1; DROP TABLE t1; === modified file 'sql/sql_yacc.yy' --- a/sql/sql_yacc.yy 2010-09-09 14:29:14 +0000 +++ b/sql/sql_yacc.yy 2010-09-24 07:18:16 +0000 @@ -13245,6 +13245,13 @@ handler: handler_read_or_scan where_clause opt_limit_clause { Lex->expr_allows_subselect= TRUE; + /* Stored functions are not supported for HANDLER READ. */ + if (Lex->uses_stored_routines()) + { + my_error(ER_NOT_SUPPORTED_YET, MYF(0), + "stored functions in HANDLER ... READ"); + MYSQL_YYABORT; + } } ; --===============2499520249977646020== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/jon.hauglid@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: jon.hauglid@stripped # target_branch: file:///export/home/x/mysql-5.5-runtime-bug54920/ # testament_sha1: aaa4800efe48004be1e1ff5763d8c3e325ed69c2 # timestamp: 2010-09-24 09:18:20 +0200 # source_branch: file:///export/home/x/mysql-5.5-bugfixing/ # base_revision_id: jon.hauglid@stripped\ # 0gpk0kemht1c13pr # # Begin bundle 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 --===============2499520249977646020==--