From: Jorgen Loland Date: February 18 2011 2:57pm Subject: bzr commit into mysql-5.5 branch (jorgen.loland:3257) Bug#11766234 List-Archive: http://lists.mysql.com/commits/131640 X-Bug: 11766234 Message-Id: <20110218145751.0E4CB79E@atum21.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============6439793497048909906==" --===============6439793497048909906== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/jl208045/mysql/mysql-5.5-59299/ based on revid:jorgen.loland@stripped 3257 Jorgen Loland 2011-02-18 BUG#11766234: ASSERT (TABLE_REF->TABLE || TABLE_REF->VIEW) FAILS IN SET_FIELD_ITERATOR (Former 59299) When a PROCEDURE does a natural join, resolving of which columns are used in the join is done only once; consecutive CALLs to the procedure will reuse this information: CREATE PROCEDURE proc() SELECT * FROM t1 NATURAL JOIN v1; CALL proc(); <- natural join columns resolved here CALL proc(); <- reuse resolved NJ columns from first CALL The second CALL knows that it can reuse the resolved NJ columns because the first CALL sets st_select_lex::first_natural_join_processing=false. The problem in this bug was that the table the view v1 depends on changed between CREATE PROCEDURE and the first CALL: CREATE PROCEDURE... ALTER TABLE t2 CHANGE COLUMN a b CHAR; CALL proc(); <- error when resolving natural join columns CALL proc(); <- tries to reuse from first CALL => crash The fix for this bug is to set first_natural_join_processing= FALSE iff the natural join columns resolving was successful. @ mysql-test/r/sp.result Add test for bug 11766234 @ mysql-test/t/sp.test Add test for bug 11766234 @ sql/sql_base.cc Set first_natural_join_processing= FALSE iff the natural join columns resolving was successful. modified: mysql-test/r/sp.result mysql-test/t/sp.test sql/sql_base.cc === modified file 'mysql-test/r/sp.result' --- a/mysql-test/r/sp.result 2010-07-30 15:28:36 +0000 +++ b/mysql-test/r/sp.result 2011-02-18 14:57:48 +0000 @@ -7161,6 +7161,26 @@ init_connect SET @@GLOBAL.init_connect= @old_init_connect; DROP PROCEDURE p2; DROP PROCEDURE p5; +# +# BUG#11766234: 59299: ASSERT (TABLE_REF->TABLE || TABLE_REF->VIEW) +# FAILS IN SET_FIELD_ITERATOR +# +CREATE TABLE t1 (i INT, a INT); +CREATE TABLE t2 (j INT, a INT); +INSERT INTO t1 VALUES (1,1), (2,2); +INSERT INTO t2 VALUES (2,2), (3,3); +CREATE VIEW v1 AS SELECT a FROM t2; +CREATE PROCEDURE proc() SELECT * FROM t1 NATURAL JOIN v1; +ALTER TABLE t2 CHANGE COLUMN a b CHAR; + +CALL proc(); +ERROR HY000: View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them +CALL proc(); +ERROR HY000: View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them + +DROP TABLE t1,t2; +DROP VIEW v1; +DROP PROCEDURE proc; # ------------------------------------------------------------------ # -- End of 5.1 tests # ------------------------------------------------------------------ === modified file 'mysql-test/t/sp.test' --- a/mysql-test/t/sp.test 2010-07-30 15:28:36 +0000 +++ b/mysql-test/t/sp.test 2011-02-18 14:57:48 +0000 @@ -8376,6 +8376,30 @@ SET @@GLOBAL.init_connect= @old_init_con DROP PROCEDURE p2; DROP PROCEDURE p5; +--echo # +--echo # BUG#11766234: 59299: ASSERT (TABLE_REF->TABLE || TABLE_REF->VIEW) +--echo # FAILS IN SET_FIELD_ITERATOR +--echo # + +CREATE TABLE t1 (i INT, a INT); +CREATE TABLE t2 (j INT, a INT); +INSERT INTO t1 VALUES (1,1), (2,2); +INSERT INTO t2 VALUES (2,2), (3,3); +CREATE VIEW v1 AS SELECT a FROM t2; +CREATE PROCEDURE proc() SELECT * FROM t1 NATURAL JOIN v1; +ALTER TABLE t2 CHANGE COLUMN a b CHAR; + +--echo +--error ER_VIEW_INVALID +CALL proc(); +--error ER_VIEW_INVALID +CALL proc(); + +--echo +DROP TABLE t1,t2; +DROP VIEW v1; +DROP PROCEDURE proc; + --echo # ------------------------------------------------------------------ --echo # -- End of 5.1 tests --echo # ------------------------------------------------------------------ === modified file 'sql/sql_base.cc' --- a/sql/sql_base.cc 2011-01-11 11:33:28 +0000 +++ b/sql/sql_base.cc 2011-02-18 14:57:48 +0000 @@ -7569,9 +7569,10 @@ static bool setup_natural_join_row_types List *from_clause, Name_resolution_context *context) { + DBUG_ENTER("setup_natural_join_row_types"); thd->where= "from clause"; if (from_clause->elements == 0) - return FALSE; /* We come here in the case of UNIONs. */ + DBUG_RETURN(false); /* We come here in the case of UNIONs. */ List_iterator_fast table_ref_it(*from_clause); TABLE_LIST *table_ref; /* Current table reference. */ @@ -7582,8 +7583,6 @@ static bool setup_natural_join_row_types bool save_first_natural_join_processing= context->select_lex->first_natural_join_processing; - context->select_lex->first_natural_join_processing= FALSE; - /* Note that tables in the list are in reversed order */ for (left_neighbor= table_ref_it++; left_neighbor ; ) { @@ -7596,10 +7595,9 @@ static bool setup_natural_join_row_types */ if (save_first_natural_join_processing) { - context->select_lex->first_natural_join_processing= FALSE; if (store_top_level_join_columns(thd, table_ref, left_neighbor, right_neighbor)) - return TRUE; + DBUG_RETURN(true); if (left_neighbor) { TABLE_LIST *first_leaf_on_the_right; @@ -7619,8 +7617,9 @@ static bool setup_natural_join_row_types DBUG_ASSERT(right_neighbor); context->first_name_resolution_table= right_neighbor->first_leaf_for_name_resolution(); + context->select_lex->first_natural_join_processing= FALSE; - return FALSE; + DBUG_RETURN (false); } --===============6439793497048909906== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/jorgen.loland@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: jorgen.loland@stripped\ # 4x6kp1rqb4hh0ryw # target_branch: file:///export/home/jl208045/mysql/mysql-5.5-59299/ # testament_sha1: b4969b3e40807b011d3954801cee1b16dbf29ba2 # timestamp: 2011-02-18 15:57:51 +0100 # base_revision_id: jorgen.loland@stripped\ # d4r3y8xhvarkjsal # # Begin bundle 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 a1I= --===============6439793497048909906==--