Commit 9f8d47d8 authored by monty@mysql.com's avatar monty@mysql.com

Merge bk-internal.mysql.com:/home/bk/mysql-4.0

into mysql.com:/home/my/mysql-4.0
parents 20ac420e 1f8b3d0f
...@@ -3173,20 +3173,18 @@ void my_net_local_init(NET *net) ...@@ -3173,20 +3173,18 @@ void my_net_local_init(NET *net)
trailing '. The caller must supply whichever of those is desired. trailing '. The caller must supply whichever of those is desired.
*/ */
unsigned long ulong mysql_hex_string(char *to, const char *from, ulong length)
mysql_hex_string(char *to, const char *from, unsigned long length)
{ {
char *to0= to; char *to0= to;
const char *end; const char *end;
static char hex[]= "0123456789ABCDEF";
for (end= from + length; from < end; from++) for (end= from + length; from < end; from++)
{ {
*to++= hex[((unsigned char) *from) >> 4]; *to++= _dig_vec[((unsigned char) *from) >> 4];
*to++= hex[((unsigned char) *from) & 0x0F]; *to++= _dig_vec[((unsigned char) *from) & 0x0F];
} }
*to= '\0'; *to= '\0';
return to-to0; return (ulong) (to-to0);
} }
/* /*
......
...@@ -418,14 +418,12 @@ static bool open_isam_files(PACK_MRG_INFO *mrg,char **names,uint count) ...@@ -418,14 +418,12 @@ static bool open_isam_files(PACK_MRG_INFO *mrg,char **names,uint count)
mrg->src_file_has_indexes_disabled= 0; mrg->src_file_has_indexes_disabled= 0;
for (i=0; i < count ; i++) for (i=0; i < count ; i++)
{ {
if ((mrg->file[i]=open_isam_file(names[i],O_RDONLY))) if (!(mrg->file[i]=open_isam_file(names[i],O_RDONLY)))
{
mrg->src_file_has_indexes_disabled |=
(mrg->file[i]->s->state.key_map !=
(1ULL << mrg->file[i]->s->base.keys) - 1);
}
else
goto error; goto error;
mrg->src_file_has_indexes_disabled|= ((mrg->file[i]->s->state.key_map !=
(((ulonglong) 1) <<
mrg->file[i]->s->base. keys) - 1));
} }
/* Check that files are identical */ /* Check that files are identical */
for (j=0 ; j < count-1 ; j++) for (j=0 ; j < count-1 ; j++)
......
drop table if exists t1; drop table if exists t1;
select @@innodb_table_locks;
@@innodb_table_locks
0
set @@innodb_table_locks=1;
create table t1 (id integer, x integer) engine=INNODB;
insert into t1 values(0, 0);
set autocommit=0;
SELECT * from t1 where id = 0 FOR UPDATE;
id x
0 0
set autocommit=0;
lock table t1 write;
update t1 set x=1 where id = 0;
select * from t1;
id x
0 1
commit;
update t1 set x=2 where id = 0;
commit;
unlock tables;
select * from t1;
id x
0 2
commit;
drop table t1;
set @@innodb_table_locks=0;
create table t1 (id integer, x integer) engine=INNODB; create table t1 (id integer, x integer) engine=INNODB;
insert into t1 values(0, 0); insert into t1 values(0, 0);
set autocommit=0; set autocommit=0;
......
...@@ -5,10 +5,54 @@ connect (con2,localhost,root,,); ...@@ -5,10 +5,54 @@ connect (con2,localhost,root,,);
drop table if exists t1; drop table if exists t1;
# #
# Testing of explicit table locks # Check and select innodb lock type
# #
select @@innodb_table_locks;
#
# Testing of explicit table locks with enforced table locks
#
set @@innodb_table_locks=1;
connection con1;
create table t1 (id integer, x integer) engine=INNODB;
insert into t1 values(0, 0);
set autocommit=0;
SELECT * from t1 where id = 0 FOR UPDATE;
connection con2;
set autocommit=0;
# The following statement should hang because con1 is locking the page
--send
lock table t1 write;
--sleep 2;
connection con1; connection con1;
update t1 set x=1 where id = 0;
select * from t1;
commit;
connection con2;
reap;
update t1 set x=2 where id = 0;
commit;
unlock tables;
connection con1;
select * from t1;
commit;
drop table t1;
#
# Try with old lock method (where LOCK TABLE is ignored)
#
set @@innodb_table_locks=0;
create table t1 (id integer, x integer) engine=INNODB; create table t1 (id integer, x integer) engine=INNODB;
insert into t1 values(0, 0); insert into t1 values(0, 0);
set autocommit=0; set autocommit=0;
......
...@@ -4694,7 +4694,7 @@ ha_innobase::external_lock( ...@@ -4694,7 +4694,7 @@ ha_innobase::external_lock(
if (prebuilt->select_lock_type != LOCK_NONE) { if (prebuilt->select_lock_type != LOCK_NONE) {
if (thd->in_lock_tables && if (thd->in_lock_tables &&
!thd->variables.innodb_table_locks_old_behavior) { thd->variables.innodb_table_locks) {
ulint error; ulint error;
error = row_lock_table_for_mysql(prebuilt); error = row_lock_table_for_mysql(prebuilt);
......
...@@ -3526,7 +3526,7 @@ enum options_mysqld { ...@@ -3526,7 +3526,7 @@ enum options_mysqld {
OPT_INNODB_FORCE_RECOVERY, OPT_INNODB_FORCE_RECOVERY,
OPT_INNODB_STATUS_FILE, OPT_INNODB_STATUS_FILE,
OPT_INNODB_MAX_DIRTY_PAGES_PCT, OPT_INNODB_MAX_DIRTY_PAGES_PCT,
OPT_INNODB_TABLE_LOCKS_OLD_BEHAVIOR, OPT_INNODB_TABLE_LOCKS,
OPT_BDB_CACHE_SIZE, OPT_BDB_CACHE_SIZE,
OPT_BDB_LOG_BUFFER_SIZE, OPT_BDB_LOG_BUFFER_SIZE,
OPT_BDB_MAX_LOCK, OPT_BDB_MAX_LOCK,
...@@ -3700,10 +3700,10 @@ struct my_option my_long_options[] = ...@@ -3700,10 +3700,10 @@ struct my_option my_long_options[] =
{"innodb_max_dirty_pages_pct", OPT_INNODB_MAX_DIRTY_PAGES_PCT, {"innodb_max_dirty_pages_pct", OPT_INNODB_MAX_DIRTY_PAGES_PCT,
"Percentage of dirty pages allowed in bufferpool", (gptr*) &srv_max_buf_pool_modified_pct, "Percentage of dirty pages allowed in bufferpool", (gptr*) &srv_max_buf_pool_modified_pct,
(gptr*) &srv_max_buf_pool_modified_pct, 0, GET_ULONG, REQUIRED_ARG, 90, 0, 100, 0, 0, 0}, (gptr*) &srv_max_buf_pool_modified_pct, 0, GET_ULONG, REQUIRED_ARG, 90, 0, 100, 0, 0, 0},
{"innodb_table_locks_old_behavior", OPT_INNODB_TABLE_LOCKS_OLD_BEHAVIOR, {"innodb_table_locks", OPT_INNODB_TABLE_LOCKS,
"Disable InnoDB locking in LOCK TABLES", "If Innodb should enforce LOCK TABLE",
(gptr*) &global_system_variables.innodb_table_locks_old_behavior, (gptr*) &global_system_variables.innodb_table_locks,
(gptr*) &global_system_variables.innodb_table_locks_old_behavior, (gptr*) &global_system_variables.innodb_table_locks,
0, GET_BOOL, OPT_ARG, 0, 0, 0, 0, 0, 0}, 0, GET_BOOL, OPT_ARG, 0, 0, 0, 0, 0, 0},
#endif /* End HAVE_INNOBASE_DB */ #endif /* End HAVE_INNOBASE_DB */
{"help", '?', "Display this help and exit", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, {"help", '?', "Display this help and exit", 0, 0, 0, GET_NO_ARG, NO_ARG, 0,
......
...@@ -263,8 +263,8 @@ sys_var_thd_ulong sys_net_wait_timeout("wait_timeout", ...@@ -263,8 +263,8 @@ sys_var_thd_ulong sys_net_wait_timeout("wait_timeout",
#ifdef HAVE_INNOBASE_DB #ifdef HAVE_INNOBASE_DB
sys_var_long_ptr sys_innodb_max_dirty_pages_pct("innodb_max_dirty_pages_pct", sys_var_long_ptr sys_innodb_max_dirty_pages_pct("innodb_max_dirty_pages_pct",
&srv_max_buf_pool_modified_pct); &srv_max_buf_pool_modified_pct);
sys_var_thd_bool sys_innodb_table_locks_old_behavior("innodb_table_locks_old_behavior", sys_var_thd_bool sys_innodb_table_locks("innodb_table_locks",
&SV::innodb_table_locks_old_behavior); &SV::innodb_table_locks);
#endif #endif
...@@ -451,7 +451,7 @@ sys_var *sys_variables[]= ...@@ -451,7 +451,7 @@ sys_var *sys_variables[]=
&sys_os, &sys_os,
#ifdef HAVE_INNOBASE_DB #ifdef HAVE_INNOBASE_DB
&sys_innodb_max_dirty_pages_pct, &sys_innodb_max_dirty_pages_pct,
&sys_innodb_table_locks_old_behavior, &sys_innodb_table_locks,
#endif #endif
&sys_unique_checks &sys_unique_checks
}; };
...@@ -523,7 +523,7 @@ struct show_var_st init_vars[]= { ...@@ -523,7 +523,7 @@ struct show_var_st init_vars[]= {
{"innodb_log_group_home_dir", (char*) &innobase_log_group_home_dir, SHOW_CHAR_PTR}, {"innodb_log_group_home_dir", (char*) &innobase_log_group_home_dir, SHOW_CHAR_PTR},
{"innodb_mirrored_log_groups", (char*) &innobase_mirrored_log_groups, SHOW_LONG}, {"innodb_mirrored_log_groups", (char*) &innobase_mirrored_log_groups, SHOW_LONG},
{sys_innodb_max_dirty_pages_pct.name, (char*) &sys_innodb_max_dirty_pages_pct, SHOW_SYS}, {sys_innodb_max_dirty_pages_pct.name, (char*) &sys_innodb_max_dirty_pages_pct, SHOW_SYS},
{sys_innodb_table_locks_old_behavior.name, (char*) &sys_innodb_table_locks_old_behavior, SHOW_SYS}, {sys_innodb_table_locks.name, (char*) &sys_innodb_table_locks, SHOW_SYS},
#endif #endif
{sys_interactive_timeout.name,(char*) &sys_interactive_timeout, SHOW_SYS}, {sys_interactive_timeout.name,(char*) &sys_interactive_timeout, SHOW_SYS},
{sys_join_buffer_size.name, (char*) &sys_join_buffer_size, SHOW_SYS}, {sys_join_buffer_size.name, (char*) &sys_join_buffer_size, SHOW_SYS},
......
...@@ -339,7 +339,7 @@ struct system_variables ...@@ -339,7 +339,7 @@ struct system_variables
my_bool new_mode; my_bool new_mode;
my_bool query_cache_wlock_invalidate; my_bool query_cache_wlock_invalidate;
#ifdef HAVE_INNOBASE_DB #ifdef HAVE_INNOBASE_DB
my_bool innodb_table_locks_old_behavior; my_bool innodb_table_locks;
#endif /* HAVE_INNOBASE_DB */ #endif /* HAVE_INNOBASE_DB */
CONVERT *convert_set; CONVERT *convert_set;
......
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