mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
Merge bk-internal.mysql.com:/home/bk/mysql-4.0
into mysql.com:/home/my/mysql-4.0 libmysql/libmysql.c: Auto merged
This commit is contained in:
commit
95f0e39a38
8 changed files with 91 additions and 25 deletions
|
@ -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)
|
||||||
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++)
|
||||||
|
|
|
@ -1,4 +1,30 @@
|
||||||
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,9 +5,17 @@ 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;
|
connection con1;
|
||||||
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);
|
||||||
|
@ -38,3 +46,39 @@ select * from t1;
|
||||||
commit;
|
commit;
|
||||||
|
|
||||||
drop table t1;
|
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 (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 {
|
||||||
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[] =
|
||||||
{"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",
|
||||||
#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[]=
|
||||||
&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[]= {
|
||||||
{"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
|
||||||
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;
|
||||||
|
|
Loading…
Reference in a new issue