From: vasil.dimov Date: October 4 2010 10:46am Subject: bzr commit into mysql-5.5-innodb branch (vasil.dimov:3229) List-Archive: http://lists.mysql.com/commits/119816 Message-Id: <20101004104703.CBF2E2E0AC@mail.v5d.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============7614189556502381239==" --===============7614189556502381239== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///usr/local/devel/bzrroot/server/mysql-5.5-innodb/ based on revid:vasil.dimov@stripped 3229 Vasil Dimov 2010-10-04 [merge] Merge mysql-5.5-innodb from bk-internal to my local tree added: mysql-test/suite/innodb/r/innodb_bug56716.result mysql-test/suite/innodb/t/innodb_bug56716.test modified: storage/innobase/row/row0sel.c === added file 'mysql-test/suite/innodb/r/innodb_bug56716.result' --- a/mysql-test/suite/innodb/r/innodb_bug56716.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/innodb/r/innodb_bug56716.result revid:vasil.dimov@stripped @@ -0,0 +1,4 @@ +CREATE TABLE bug56716 (a INT PRIMARY KEY,b INT,c INT,INDEX(b)) ENGINE=InnoDB; +SELECT * FROM bug56716 WHERE b<=42 ORDER BY b DESC FOR UPDATE; +a b c +DROP TABLE bug56716; === added file 'mysql-test/suite/innodb/t/innodb_bug56716.test' --- a/mysql-test/suite/innodb/t/innodb_bug56716.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/innodb/t/innodb_bug56716.test revid:vasil.dimov@stripped @@ -0,0 +1,10 @@ +# +# Bug #56716 InnoDB locks a record gap without locking the table +# +-- source include/have_innodb.inc + +CREATE TABLE bug56716 (a INT PRIMARY KEY,b INT,c INT,INDEX(b)) ENGINE=InnoDB; + +SELECT * FROM bug56716 WHERE b<=42 ORDER BY b DESC FOR UPDATE; + +DROP TABLE bug56716; === modified file 'storage/innobase/row/row0sel.c' --- a/storage/innobase/row/row0sel.c revid:vasil.dimov@stripped +++ b/storage/innobase/row/row0sel.c revid:vasil.dimov@stripped @@ -3711,6 +3711,42 @@ release_search_latch_if_needed: clust_index = dict_table_get_first_index(index->table); + /* Do some start-of-statement preparations */ + + if (!prebuilt->sql_stat_start) { + /* No need to set an intention lock or assign a read view */ + + if (trx->read_view == NULL + && prebuilt->select_lock_type == LOCK_NONE) { + + fputs("InnoDB: Error: MySQL is trying to" + " perform a consistent read\n" + "InnoDB: but the read view is not assigned!\n", + stderr); + trx_print(stderr, trx, 600); + fputc('\n', stderr); + ut_error; + } + } else if (prebuilt->select_lock_type == LOCK_NONE) { + /* This is a consistent read */ + /* Assign a read view for the query */ + + trx_assign_read_view(trx); + prebuilt->sql_stat_start = FALSE; + } else { + err = lock_table(0, index->table, + prebuilt->select_lock_type == LOCK_S + ? LOCK_IS : LOCK_IX, thr); + + if (err != DB_SUCCESS) { + + goto lock_wait_or_error; + } + prebuilt->sql_stat_start = FALSE; + } + + /* Open or restore index cursor position */ + if (UNIV_LIKELY(direction != 0)) { ibool need_to_process = sel_restore_position_for_mysql( &same_user_rec, BTR_SEARCH_LEAF, @@ -3786,42 +3822,6 @@ release_search_latch_if_needed: } } - if (!prebuilt->sql_stat_start) { - /* No need to set an intention lock or assign a read view */ - - if (trx->read_view == NULL - && prebuilt->select_lock_type == LOCK_NONE) { - - fputs("InnoDB: Error: MySQL is trying to" - " perform a consistent read\n" - "InnoDB: but the read view is not assigned!\n", - stderr); - trx_print(stderr, trx, 600); - fputc('\n', stderr); - ut_a(0); - } - } else if (prebuilt->select_lock_type == LOCK_NONE) { - /* This is a consistent read */ - /* Assign a read view for the query */ - - trx_assign_read_view(trx); - prebuilt->sql_stat_start = FALSE; - } else { - ulint lock_mode; - if (prebuilt->select_lock_type == LOCK_S) { - lock_mode = LOCK_IS; - } else { - lock_mode = LOCK_IX; - } - err = lock_table(0, index->table, lock_mode, thr); - - if (err != DB_SUCCESS) { - - goto lock_wait_or_error; - } - prebuilt->sql_stat_start = FALSE; - } - rec_loop: /*-------------------------------------------------------------*/ /* PHASE 4: Look for matching records in a loop */ --===============7614189556502381239== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/vasil.dimov@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: vasil.dimov@stripped # target_branch: file:///usr/local/devel/bzrroot/server/mysql-5.5-\ # innodb/ # testament_sha1: 655c9eebd3a7baa741375c088e4c92a4e812120f # timestamp: 2010-10-04 13:47:03 +0300 # source_branch: file:///usr/local/devel/bzrroot/server/mysql-5.5-\ # bugfixing/ # base_revision_id: vasil.dimov@stripped\ # 94iemyrw0qn39w71 # # Begin bundle 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 --===============7614189556502381239==--