Commit e042a3d2 authored by lenz@mysql.com's avatar lenz@mysql.com

Merge lgrimmer@work.mysql.com:/home/bk/mysql

into mysql.com:/space/my/mysql-3.23
parents b507a851 541c40b0
...@@ -393,6 +393,7 @@ struct row_prebuilt_struct { ...@@ -393,6 +393,7 @@ struct row_prebuilt_struct {
an SQL statement: we may have to set an SQL statement: we may have to set
an intention lock on the table, an intention lock on the table,
create a consistent read view etc. */ create a consistent read view etc. */
ibool mysql_has_locked;
ibool clust_index_was_generated; ibool clust_index_was_generated;
/* if the user did not define a /* if the user did not define a
primary key in MySQL, then Innobase primary key in MySQL, then Innobase
......
...@@ -320,6 +320,7 @@ row_create_prebuilt( ...@@ -320,6 +320,7 @@ row_create_prebuilt(
prebuilt->trx = NULL; prebuilt->trx = NULL;
prebuilt->sql_stat_start = TRUE; prebuilt->sql_stat_start = TRUE;
prebuilt->mysql_has_locked = FALSE;
prebuilt->index = NULL; prebuilt->index = NULL;
prebuilt->n_template = 0; prebuilt->n_template = 0;
......
...@@ -3453,7 +3453,7 @@ ha_innobase::start_stmt( ...@@ -3453,7 +3453,7 @@ ha_innobase::start_stmt(
prebuilt->hint_no_need_to_fetch_extra_cols = TRUE; prebuilt->hint_no_need_to_fetch_extra_cols = TRUE;
prebuilt->read_just_key = 0; prebuilt->read_just_key = 0;
if (prebuilt->select_lock_type == LOCK_NONE) { if (!prebuilt->mysql_has_locked) {
/* This handle is for a temporary table created inside /* This handle is for a temporary table created inside
this same LOCK TABLES; since MySQL does NOT call external_lock this same LOCK TABLES; since MySQL does NOT call external_lock
in this case, we must use x-row locks inside InnoDB to be in this case, we must use x-row locks inside InnoDB to be
...@@ -3510,6 +3510,7 @@ ha_innobase::external_lock( ...@@ -3510,6 +3510,7 @@ ha_innobase::external_lock(
thd->transaction.all.innodb_active_trans = 1; thd->transaction.all.innodb_active_trans = 1;
trx->n_mysql_tables_in_use++; trx->n_mysql_tables_in_use++;
prebuilt->mysql_has_locked = TRUE;
if (thd->tx_isolation == ISO_SERIALIZABLE if (thd->tx_isolation == ISO_SERIALIZABLE
&& prebuilt->select_lock_type == LOCK_NONE) { && prebuilt->select_lock_type == LOCK_NONE) {
...@@ -3527,6 +3528,7 @@ ha_innobase::external_lock( ...@@ -3527,6 +3528,7 @@ ha_innobase::external_lock(
} }
} else { } else {
trx->n_mysql_tables_in_use--; trx->n_mysql_tables_in_use--;
prebuilt->mysql_has_locked = FALSE;
auto_inc_counter_for_this_stat = 0; auto_inc_counter_for_this_stat = 0;
if (trx->n_mysql_tables_in_use == 0) { if (trx->n_mysql_tables_in_use == 0) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment