From: Jon Olav Hauglid Date: July 19 2010 9:21am Subject: bzr commit into mysql-trunk-merge branch (jon.hauglid:3130) List-Archive: http://lists.mysql.com/commits/113837 Message-Id: <201007190922.o6J0BxLs017799@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============5150139752270853371==" --===============5150139752270853371== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/x/mysql-trunk-merge-test/ based on revid:davi.arnaut@stripped 3130 Jon Olav Hauglid 2010-07-19 [merge] manual merge from mysql-5.1-bugteam modified: mysql-test/r/update.result mysql-test/t/update.test sql/filesort.cc sql/opt_range.h sql/sql_delete.cc sql/sql_select.cc sql/sql_update.cc === modified file 'mysql-test/r/update.result' --- a/mysql-test/r/update.result 2010-06-22 20:32:29 +0000 +++ b/mysql-test/r/update.result 2010-07-19 09:21:24 +0000 @@ -527,3 +527,17 @@ ERROR HY000: You are using safe update m SET SESSION sql_safe_updates = DEFAULT; DROP TABLE t1; DROP VIEW v1; +# +# Bug#54734 assert in Diagnostics_area::set_ok_status +# +DROP TABLE IF EXISTS t1, not_exists; +DROP FUNCTION IF EXISTS f1; +DROP VIEW IF EXISTS v1; +CREATE TABLE t1 (PRIMARY KEY(pk)) AS SELECT 1 AS pk; +CREATE FUNCTION f1() RETURNS INTEGER RETURN (SELECT 1 FROM not_exists); +CREATE VIEW v1 AS SELECT pk FROM t1 WHERE f1() = 13; +UPDATE v1 SET pk = 7 WHERE pk > 0; +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 VIEW v1; +DROP FUNCTION f1; +DROP TABLE t1; === modified file 'mysql-test/t/update.test' --- a/mysql-test/t/update.test 2010-03-10 16:10:05 +0000 +++ b/mysql-test/t/update.test 2010-07-19 09:03:52 +0000 @@ -483,3 +483,23 @@ UPDATE IGNORE v1 SET a = 1; SET SESSION sql_safe_updates = DEFAULT; DROP TABLE t1; DROP VIEW v1; + +--echo # +--echo # Bug#54734 assert in Diagnostics_area::set_ok_status +--echo # + +--disable_warnings +DROP TABLE IF EXISTS t1, not_exists; +DROP FUNCTION IF EXISTS f1; +DROP VIEW IF EXISTS v1; +--enable_warnings + +CREATE TABLE t1 (PRIMARY KEY(pk)) AS SELECT 1 AS pk; +CREATE FUNCTION f1() RETURNS INTEGER RETURN (SELECT 1 FROM not_exists); +CREATE VIEW v1 AS SELECT pk FROM t1 WHERE f1() = 13; +--error ER_VIEW_INVALID +UPDATE v1 SET pk = 7 WHERE pk > 0; + +DROP VIEW v1; +DROP FUNCTION f1; +DROP TABLE t1; === modified file 'sql/filesort.cc' --- a/sql/filesort.cc 2010-07-09 01:19:57 +0000 +++ b/sql/filesort.cc 2010-07-19 09:21:24 +0000 @@ -511,6 +511,7 @@ static ha_rows find_all_keys(SORTPARAM * volatile THD::killed_state *killed= &thd->killed; handler *file; MY_BITMAP *save_read_set, *save_write_set; + bool skip_record; DBUG_ENTER("find_all_keys"); DBUG_PRINT("info",("using: %s", (select ? select->quick ? "ranges" : "where": @@ -603,7 +604,8 @@ static ha_rows find_all_keys(SORTPARAM * } if (error == 0) param->examined_rows++; - if (error == 0 && (!select || select->skip_record() == 0)) + if (!error && (!select || + (!select->skip_record(thd, &skip_record) && !skip_record))) { if (idx == param->keys) { === modified file 'sql/opt_range.h' --- a/sql/opt_range.h 2010-07-15 13:47:50 +0000 +++ b/sql/opt_range.h 2010-07-19 09:21:24 +0000 @@ -825,7 +825,11 @@ class SQL_SELECT :public Sql_alloc { tmp.set_all(); return test_quick_select(thd, tmp, 0, limit, force_quick_range) < 0; } - inline bool skip_record() { return cond ? cond->val_int() == 0 : 0; } + inline bool skip_record(THD *thd, bool *skip_record) + { + *skip_record= cond ? cond->val_int() == FALSE : FALSE; + return thd->is_error(); + } int test_quick_select(THD *thd, key_map keys, table_map prev_tables, ha_rows limit, bool force_quick_range); }; === modified file 'sql/sql_delete.cc' --- a/sql/sql_delete.cc 2010-06-22 20:32:29 +0000 +++ b/sql/sql_delete.cc 2010-07-19 09:21:24 +0000 @@ -59,6 +59,7 @@ bool mysql_delete(THD *thd, TABLE_LIST * bool const_cond_result; ha_rows deleted= 0; bool reverse= FALSE; + bool skip_record; ORDER *order= (ORDER *) ((order_list && order_list->elements) ? order_list->first : NULL); uint usable_index= MAX_KEY; @@ -298,7 +299,7 @@ bool mysql_delete(THD *thd, TABLE_LIST * { thd->examined_row_count++; // thd->is_error() is tested to disallow delete row on error - if (!(select && select->skip_record())&& ! thd->is_error() ) + if (!select || (!select->skip_record(thd, &skip_record) && !skip_record)) { if (table->triggers && === modified file 'sql/sql_select.cc' --- a/sql/sql_select.cc 2010-07-15 13:47:50 +0000 +++ b/sql/sql_select.cc 2010-07-19 09:21:24 +0000 @@ -11941,38 +11941,30 @@ flush_cached_records(JOIN *join,JOIN_TAB SQL_SELECT *select=join_tab->select; if (rc == NESTED_LOOP_OK) { - bool consider_record= !join_tab->cache.select || - !join_tab->cache.select->skip_record(); - - /* - Check for error: skip_record() can execute code by calling - Item_subselect::val_*. We need to check for errors (if any) - after such call. - */ - if (join->thd->is_error()) + bool skip_record= FALSE; + if (join_tab->cache.select && + join_tab->cache.select->skip_record(join->thd, &skip_record)) { reset_cache_write(&join_tab->cache); return NESTED_LOOP_ERROR; } - if (consider_record) + if (!skip_record) { uint i; reset_cache_read(&join_tab->cache); for (i=(join_tab->cache.records- (skip_last ? 1 : 0)) ; i-- > 0 ;) { read_cached_record(join_tab); - if (!select || !select->skip_record()) + skip_record= FALSE; + if (select && select->skip_record(join->thd, &skip_record)) { - /* - Check for error: skip_record() can execute code by calling - Item_subselect::val_*. We need to check for errors (if any) - after such call. - */ - if (join->thd->is_error()) - rc= NESTED_LOOP_ERROR; - else - rc= (join_tab->next_select)(join,join_tab+1,0); + reset_cache_write(&join_tab->cache); + return NESTED_LOOP_ERROR; + } + if (!skip_record) + { + rc= (join_tab->next_select)(join,join_tab+1,0); if (rc != NESTED_LOOP_OK && rc != NESTED_LOOP_NO_MORE_ROWS) { reset_cache_write(&join_tab->cache); === modified file 'sql/sql_update.cc' --- a/sql/sql_update.cc 2010-06-22 20:32:29 +0000 +++ b/sql/sql_update.cc 2010-07-19 09:21:24 +0000 @@ -477,7 +477,14 @@ int mysql_update(THD *thd, while (!(error=info.read_record(&info)) && !thd->killed) { thd->examined_row_count++; - if (!(select && select->skip_record())) + bool skip_record= FALSE; + if (select && select->skip_record(thd, &skip_record)) + { + error= 1; + table->file->unlock_row(); + break; + } + if (!skip_record) { if (table->file->was_semi_consistent_read()) continue; /* repeat the read of the same row if it still exists */ @@ -584,7 +591,8 @@ int mysql_update(THD *thd, while (!(error=info.read_record(&info)) && !thd->killed) { thd->examined_row_count++; - if (!(select && select->skip_record())) + bool skip_record; + if (!select || (!select->skip_record(thd, &skip_record) && !skip_record)) { if (table->file->was_semi_consistent_read()) continue; /* repeat the read of the same row if it still exists */ --===============5150139752270853371== 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-trunk-merge-test/ # testament_sha1: 137264f9dc9eedcb8ecf1f3d4a8809b2cf59c2e3 # timestamp: 2010-07-19 11:21:52 +0200 # source_branch: file:///export/home/x/mysql-5.1-bugteam-bug54360/ # base_revision_id: davi.arnaut@stripped\ # pgna8osocfym995p # # Begin bundle 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 --===============5150139752270853371==--