mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
Code cleanups (done during review of new code)
Rename innodb_table_locks_old_behavior -> innodb_table_locks Set innodb_table_locks to off by default to get same behaviour as in MySQL 4.0.20 (This means that Innodb ignore table locks by default, which makes it easier to combine MyISAM and InnoDB to simulate a transaction) libmysql/libmysql.c: Use ulong instead of unsigned long Reuse _dig_vec() myisam/myisampack.c: Simplify code mysql-test/r/innodb-lock.result: new test case mysql-test/t/innodb-lock.test: new test case sql/ha_innodb.cc: Rename innodb_table_locks_old_behavior -> innodb_table_locks sql/mysqld.cc: Rename innodb_table_locks_old_behavior -> innodb_table_locks Set this off by default to get same behaviour as in MySQL 4.0.20 sql/set_var.cc: Rename innodb_table_locks_old_behavior -> innodb_table_locks sql/sql_class.h: Rename innodb_table_locks_old_behavior -> innodb_table_locks
This commit is contained in:
parent
2428fb5c2b
commit
ed8ec2cf16
8 changed files with 91 additions and 25 deletions
|
@ -3170,20 +3170,18 @@ void my_net_local_init(NET *net)
|
|||
encoded string, not including the terminating null character.
|
||||
*/
|
||||
|
||||
unsigned long
|
||||
mysql_hex_string(char *to, const char *from, unsigned long length)
|
||||
ulong mysql_hex_string(char *to, const char *from, ulong length)
|
||||
{
|
||||
char *to0= to;
|
||||
const char *end;
|
||||
static char hex[]= "0123456789ABCDEF";
|
||||
|
||||
for (end= from + length; from < end; from++)
|
||||
{
|
||||
*to++= hex[((unsigned char) *from) >> 4];
|
||||
*to++= hex[((unsigned char) *from) & 0x0F];
|
||||
*to++= _dig_vec[((unsigned char) *from) >> 4];
|
||||
*to++= _dig_vec[((unsigned char) *from) & 0x0F];
|
||||
}
|
||||
*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)
|
|||
mrg->src_file_has_indexes_disabled= 0;
|
||||
for (i=0; i < count ; i++)
|
||||
{
|
||||
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
|
||||
if (!(mrg->file[i]=open_isam_file(names[i],O_RDONLY)))
|
||||
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 */
|
||||
for (j=0 ; j < count-1 ; j++)
|
||||
|
|
|
@ -1,4 +1,30 @@
|
|||
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;
|
||||
insert into t1 values(0, 0);
|
||||
set autocommit=0;
|
||||
|
|
|
@ -5,9 +5,17 @@ connect (con2,localhost,root,,);
|
|||
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);
|
||||
|
@ -38,3 +46,39 @@ 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;
|
||||
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;
|
||||
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;
|
||||
|
|
|
@ -4694,7 +4694,7 @@ ha_innobase::external_lock(
|
|||
|
||||
if (prebuilt->select_lock_type != LOCK_NONE) {
|
||||
if (thd->in_lock_tables &&
|
||||
!thd->variables.innodb_table_locks_old_behavior) {
|
||||
thd->variables.innodb_table_locks) {
|
||||
ulint error;
|
||||
error = row_lock_table_for_mysql(prebuilt);
|
||||
|
||||
|
|
|
@ -3526,7 +3526,7 @@ enum options_mysqld {
|
|||
OPT_INNODB_FORCE_RECOVERY,
|
||||
OPT_INNODB_STATUS_FILE,
|
||||
OPT_INNODB_MAX_DIRTY_PAGES_PCT,
|
||||
OPT_INNODB_TABLE_LOCKS_OLD_BEHAVIOR,
|
||||
OPT_INNODB_TABLE_LOCKS,
|
||||
OPT_BDB_CACHE_SIZE,
|
||||
OPT_BDB_LOG_BUFFER_SIZE,
|
||||
OPT_BDB_MAX_LOCK,
|
||||
|
@ -3700,10 +3700,10 @@ struct my_option my_long_options[] =
|
|||
{"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,
|
||||
(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,
|
||||
"Disable InnoDB locking in LOCK TABLES",
|
||||
(gptr*) &global_system_variables.innodb_table_locks_old_behavior,
|
||||
(gptr*) &global_system_variables.innodb_table_locks_old_behavior,
|
||||
{"innodb_table_locks", OPT_INNODB_TABLE_LOCKS,
|
||||
"If Innodb should enforce LOCK TABLE",
|
||||
(gptr*) &global_system_variables.innodb_table_locks,
|
||||
(gptr*) &global_system_variables.innodb_table_locks,
|
||||
0, GET_BOOL, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
||||
#endif /* End HAVE_INNOBASE_DB */
|
||||
{"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",
|
|||
#ifdef HAVE_INNOBASE_DB
|
||||
sys_var_long_ptr sys_innodb_max_dirty_pages_pct("innodb_max_dirty_pages_pct",
|
||||
&srv_max_buf_pool_modified_pct);
|
||||
sys_var_thd_bool sys_innodb_table_locks_old_behavior("innodb_table_locks_old_behavior",
|
||||
&SV::innodb_table_locks_old_behavior);
|
||||
sys_var_thd_bool sys_innodb_table_locks("innodb_table_locks",
|
||||
&SV::innodb_table_locks);
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -451,7 +451,7 @@ sys_var *sys_variables[]=
|
|||
&sys_os,
|
||||
#ifdef HAVE_INNOBASE_DB
|
||||
&sys_innodb_max_dirty_pages_pct,
|
||||
&sys_innodb_table_locks_old_behavior,
|
||||
&sys_innodb_table_locks,
|
||||
#endif
|
||||
&sys_unique_checks
|
||||
};
|
||||
|
@ -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_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_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
|
||||
{sys_interactive_timeout.name,(char*) &sys_interactive_timeout, SHOW_SYS},
|
||||
{sys_join_buffer_size.name, (char*) &sys_join_buffer_size, SHOW_SYS},
|
||||
|
|
|
@ -339,7 +339,7 @@ struct system_variables
|
|||
my_bool new_mode;
|
||||
my_bool query_cache_wlock_invalidate;
|
||||
#ifdef HAVE_INNOBASE_DB
|
||||
my_bool innodb_table_locks_old_behavior;
|
||||
my_bool innodb_table_locks;
|
||||
#endif /* HAVE_INNOBASE_DB */
|
||||
|
||||
CONVERT *convert_set;
|
||||
|
|
Loading…
Reference in a new issue