mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
Merge pgalbraith@bk-internal.mysql.com:/home/bk/mysql-5.1
into radha.patg.net:/Users/patg/mysql-build/mysql-5.1-arch-merge
This commit is contained in:
commit
2e538b4192
27 changed files with 245 additions and 41 deletions
|
@ -144,6 +144,7 @@ void set_extra_default(int id, const struct my_option *opt)
|
|||
case 'f': /* --force is ours */
|
||||
case 'u': /* --user passed on cmdline */
|
||||
case 'T': /* --debug-info is not accepted by mysqlcheck */
|
||||
case 'p': /* --password may change yet */
|
||||
/* so, do nothing */
|
||||
break;
|
||||
default:
|
||||
|
@ -175,7 +176,7 @@ void set_extra_default(int id, const struct my_option *opt)
|
|||
d->id= id;
|
||||
d->name= opt->name;
|
||||
d->n_len= strlen(opt->name);
|
||||
if (opt->arg_type != NO_ARG)
|
||||
if (opt->arg_type != NO_ARG && opt->value)
|
||||
switch (opt->var_type & GET_TYPE_MASK) {
|
||||
case GET_BOOL:
|
||||
if (*((int *)opt->value))
|
||||
|
@ -321,6 +322,15 @@ static int create_defaults_file(const char *path, const char *forced_path)
|
|||
}
|
||||
|
||||
dynstr_set(&buf, "\n[client]");
|
||||
if (opt_password)
|
||||
{
|
||||
if (dynstr_append(&buf, "\npassword=")
|
||||
|| dynstr_append(&buf, opt_password))
|
||||
{
|
||||
ret = 1;
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
while (extra_defaults)
|
||||
{
|
||||
int len;
|
||||
|
|
37
mysql-test/include/innodb_rollback_on_timeout.inc
Normal file
37
mysql-test/include/innodb_rollback_on_timeout.inc
Normal file
|
@ -0,0 +1,37 @@
|
|||
#
|
||||
# Bug #24200: Provide backwards compatibility mode for 4.x "rollback on
|
||||
# transaction timeout"
|
||||
#
|
||||
show variables like 'innodb_rollback_on_timeout';
|
||||
create table t1 (a int unsigned not null primary key) engine = innodb;
|
||||
insert into t1 values (1);
|
||||
commit;
|
||||
connect (con1,localhost,root,,);
|
||||
connect (con2,localhost,root,,);
|
||||
|
||||
connection con2;
|
||||
begin work;
|
||||
insert into t1 values (2);
|
||||
select * from t1;
|
||||
|
||||
connection con1;
|
||||
begin work;
|
||||
insert into t1 values (5);
|
||||
select * from t1;
|
||||
# Lock wait timeout set to 2 seconds in <THIS TEST>-master.opt; this
|
||||
# statement will time out; in 5.0.13+, it will not roll back transaction.
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
insert into t1 values (2);
|
||||
# On 5.0.13+, this should give ==> 1, 5
|
||||
select * from t1;
|
||||
commit;
|
||||
|
||||
connection con2;
|
||||
select * from t1;
|
||||
commit;
|
||||
|
||||
connection default;
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
disconnect con1;
|
||||
disconnect con2;
|
|
@ -462,6 +462,8 @@ EXPLAIN SELECT b, SUM(c) FROM t1 GROUP BY b;
|
|||
EXPLAIN SELECT SQL_BIG_RESULT b, SUM(c) FROM t1 GROUP BY b;
|
||||
DROP TABLE t1;
|
||||
|
||||
--source include/innodb_rollback_on_timeout.inc
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
|
||||
|
|
|
@ -58,6 +58,7 @@ $Devel::Trace::TRACE= 0; # Don't trace boring init stuff
|
|||
use File::Path;
|
||||
use File::Basename;
|
||||
use File::Copy;
|
||||
use File::Temp qw / tempdir /;
|
||||
use Cwd;
|
||||
use Getopt::Long;
|
||||
use Sys::Hostname;
|
||||
|
@ -1020,6 +1021,11 @@ sub command_line_setup () {
|
|||
my $sockdir = $opt_tmpdir;
|
||||
$sockdir =~ s|/+$||;
|
||||
|
||||
# On some operating systems, there is a limit to the length of a
|
||||
# UNIX domain socket's path far below PATH_MAX, so try to avoid long
|
||||
# socket path names.
|
||||
$sockdir = tempdir(CLEANUP => 1) if ( length($sockdir) > 80 );
|
||||
|
||||
# Put this into a hash, will be a C struct
|
||||
|
||||
$master->[0]=
|
||||
|
|
|
@ -2249,4 +2249,16 @@ CHAR(0xff,0x8f USING utf8) IS NULL
|
|||
Warnings:
|
||||
Error 1300 Invalid utf8 character string: 'FF8F'
|
||||
SET SQL_MODE=@orig_sql_mode;
|
||||
select substring('abc', cast(2 as unsigned int));
|
||||
substring('abc', cast(2 as unsigned int))
|
||||
bc
|
||||
select repeat('a', cast(2 as unsigned int));
|
||||
repeat('a', cast(2 as unsigned int))
|
||||
aa
|
||||
select rpad('abc', cast(5 as unsigned integer), 'x');
|
||||
rpad('abc', cast(5 as unsigned integer), 'x')
|
||||
abcxx
|
||||
select lpad('abc', cast(5 as unsigned integer), 'x');
|
||||
lpad('abc', cast(5 as unsigned integer), 'x')
|
||||
xxabc
|
||||
End of 5.0 tests
|
||||
|
|
|
@ -403,6 +403,42 @@ EXPLAIN SELECT SQL_BIG_RESULT b, SUM(c) FROM t1 GROUP BY b;
|
|||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 128 Using filesort
|
||||
DROP TABLE t1;
|
||||
show variables like 'innodb_rollback_on_timeout';
|
||||
Variable_name Value
|
||||
innodb_rollback_on_timeout OFF
|
||||
create table t1 (a int unsigned not null primary key) engine = innodb;
|
||||
insert into t1 values (1);
|
||||
commit;
|
||||
begin work;
|
||||
insert into t1 values (2);
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
begin work;
|
||||
insert into t1 values (5);
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
5
|
||||
insert into t1 values (2);
|
||||
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
5
|
||||
commit;
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
commit;
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
5
|
||||
drop table t1;
|
||||
End of 5.0 tests
|
||||
CREATE TABLE `t2` (
|
||||
`k` int(11) NOT NULL auto_increment,
|
||||
|
|
35
mysql-test/r/innodb_timeout_rollback.result
Normal file
35
mysql-test/r/innodb_timeout_rollback.result
Normal file
|
@ -0,0 +1,35 @@
|
|||
show variables like 'innodb_rollback_on_timeout';
|
||||
Variable_name Value
|
||||
innodb_rollback_on_timeout ON
|
||||
create table t1 (a int unsigned not null primary key) engine = innodb;
|
||||
insert into t1 values (1);
|
||||
commit;
|
||||
begin work;
|
||||
insert into t1 values (2);
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
begin work;
|
||||
insert into t1 values (5);
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
5
|
||||
insert into t1 values (2);
|
||||
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
commit;
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
commit;
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
drop table t1;
|
||||
End of 5.0 tests
|
|
@ -11,6 +11,7 @@
|
|||
##############################################################################
|
||||
user_limits : Bug#23921 random failure of user_limits.test
|
||||
|
||||
im_daemon_life_cycle : Bug#24415 see note: [19 Dec 23:17] Trudy Pelzer
|
||||
im_options : Bug#20294 2006-07-24 stewart Instance manager test im_options fails randomly
|
||||
concurrent_innodb : BUG#21579 2006-08-11 mleich innodb_concurrent random failures with varying differences
|
||||
ndb_autodiscover : BUG#18952 2006-02-16 jmiller Needs to be fixed w.r.t binlog
|
||||
|
|
|
@ -1098,5 +1098,13 @@ SELECT CHAR(0xff,0x8f USING utf8) IS NULL;
|
|||
|
||||
SET SQL_MODE=@orig_sql_mode;
|
||||
|
||||
#
|
||||
# Bug #24947: problem with some string function with unsigned int parameters
|
||||
#
|
||||
|
||||
select substring('abc', cast(2 as unsigned int));
|
||||
select repeat('a', cast(2 as unsigned int));
|
||||
select rpad('abc', cast(5 as unsigned integer), 'x');
|
||||
select lpad('abc', cast(5 as unsigned integer), 'x');
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
|
1
mysql-test/t/innodb_mysql-master.opt
Normal file
1
mysql-test/t/innodb_mysql-master.opt
Normal file
|
@ -0,0 +1 @@
|
|||
--innodb-lock-wait-timeout=2
|
1
mysql-test/t/innodb_timeout_rollback-master.opt
Normal file
1
mysql-test/t/innodb_timeout_rollback-master.opt
Normal file
|
@ -0,0 +1 @@
|
|||
--innodb_lock_wait_timeout=2 --innodb_rollback_on_timeout
|
5
mysql-test/t/innodb_timeout_rollback.test
Normal file
5
mysql-test/t/innodb_timeout_rollback.test
Normal file
|
@ -0,0 +1,5 @@
|
|||
-- source include/have_innodb.inc
|
||||
|
||||
--source include/innodb_rollback_on_timeout.inc
|
||||
|
||||
--echo End of 5.0 tests
|
|
@ -498,7 +498,7 @@ insert into t1 values (1),(2),(3),(4),(5),(6);
|
|||
insert into t2 values (1,1),(2,1);
|
||||
lock tables t1 read local, t2 read local;
|
||||
select straight_join * from t1,t2 force index (primary) where t1.a=t2.a;
|
||||
connect (root,localhost,root,,test,$MASTER_MYPORT,master.sock);
|
||||
connect (root,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK);
|
||||
insert into t2 values(2,0);
|
||||
disconnect root;
|
||||
connection default;
|
||||
|
|
|
@ -81,12 +81,12 @@ drop table t1, t2, t3, t11, t21;
|
|||
#
|
||||
# do not use QC if tables locked (BUG#12385)
|
||||
#
|
||||
connect (root,localhost,root,,test,$MASTER_MYPORT,master.sock);
|
||||
connect (root,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK);
|
||||
connection root;
|
||||
CREATE TABLE t1 ( a INT NOT NULL PRIMARY KEY AUTO_INCREMENT ) ENGINE =
|
||||
MyISAM;
|
||||
LOCK TABLE t1 READ LOCAL;
|
||||
connect (root2,localhost,root,,test,$MASTER_MYPORT,master.sock);
|
||||
connect (root2,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK);
|
||||
connection root2;
|
||||
INSERT INTO t1 VALUES (), (), ();
|
||||
connection root;
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
#####################
|
||||
|
||||
connect (master,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK);
|
||||
connect (slave,localhost,root,,test,$SLAVE_MYPORT,slave.sock);
|
||||
connect (slave,localhost,root,,test,$SLAVE_MYPORT,$SLAVE_MYSOCK);
|
||||
connection master;
|
||||
reset master;
|
||||
show master status;
|
||||
|
|
|
@ -19,7 +19,7 @@ connect (master,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK);
|
|||
--disable_warnings
|
||||
drop table if exists t1, t2, t3, t4;
|
||||
--enable_warnings
|
||||
connect (slave,localhost,root,,test,$SLAVE_MYPORT,slave.sock);
|
||||
connect (slave,localhost,root,,test,$SLAVE_MYPORT,$SLAVE_MYSOCK);
|
||||
system cat /dev/null > $MYSQLTEST_VARDIR/slave-data/master.info;
|
||||
system chmod 000 $MYSQLTEST_VARDIR/slave-data/master.info;
|
||||
connection slave;
|
||||
|
|
|
@ -246,6 +246,7 @@ $CP mysql-test/include/*.inc $BASE/mysql-test/include
|
|||
$CP mysql-test/include/*.test $BASE/mysql-test/include
|
||||
$CP mysql-test/t/*.def $BASE/mysql-test/t
|
||||
$CP mysql-test/std_data/*.dat mysql-test/std_data/*.frm \
|
||||
mysql-test/std_data/*.MYD mysql-test/std_data/*.MYI \
|
||||
mysql-test/std_data/*.pem mysql-test/std_data/Moscow_leap \
|
||||
mysql-test/std_data/des_key_file mysql-test/std_data/*.*001 \
|
||||
mysql-test/std_data/*.cnf \
|
||||
|
|
|
@ -1166,7 +1166,8 @@ String *Item_func_substr::val_str(String *str)
|
|||
|
||||
/* if "unsigned_flag" is set, we have a *huge* positive number. */
|
||||
/* Assumes that the maximum length of a String is < INT_MAX32. */
|
||||
if ((args[1]->unsigned_flag) || (start < INT_MIN32) || (start > INT_MAX32))
|
||||
if ((!args[1]->unsigned_flag && (start < INT_MIN32 || start > INT_MAX32)) ||
|
||||
(args[1]->unsigned_flag && ((ulonglong) start > INT_MAX32)))
|
||||
return &my_empty_string;
|
||||
|
||||
start= ((start < 0) ? res->numchars() + start : start - 1);
|
||||
|
@ -2272,25 +2273,23 @@ String *Item_func_repeat::val_str(String *str)
|
|||
uint length,tot_length;
|
||||
char *to;
|
||||
/* must be longlong to avoid truncation */
|
||||
longlong tmp_count= args[1]->val_int();
|
||||
long count= (long) tmp_count;
|
||||
longlong count= args[1]->val_int();
|
||||
String *res= args[0]->val_str(str);
|
||||
|
||||
/* Assumes that the maximum length of a String is < INT_MAX32. */
|
||||
/* Bounds check on count: If this is triggered, we will error. */
|
||||
if ((tmp_count > INT_MAX32) || args[1]->unsigned_flag)
|
||||
count= INT_MAX32;
|
||||
|
||||
if (args[0]->null_value || args[1]->null_value)
|
||||
goto err; // string and/or delim are null
|
||||
null_value= 0;
|
||||
if ((tmp_count <= 0) && !args[1]->unsigned_flag) // For nicer SQL code
|
||||
if ((count <= 0) && !args[1]->unsigned_flag) // For nicer SQL code
|
||||
return &my_empty_string;
|
||||
/* Assumes that the maximum length of a String is < INT_MAX32. */
|
||||
/* Bounds check on count: If this is triggered, we will error. */
|
||||
if ((ulonglong) count > INT_MAX32)
|
||||
count= INT_MAX32;
|
||||
if (count == 1) // To avoid reallocs
|
||||
return res;
|
||||
length=res->length();
|
||||
// Safe length check
|
||||
if (length > current_thd->variables.max_allowed_packet/count)
|
||||
if (length > current_thd->variables.max_allowed_packet / (uint) count)
|
||||
{
|
||||
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_WARN_ALLOWED_PACKET_OVERFLOWED,
|
||||
|
@ -2364,15 +2363,14 @@ String *Item_func_rpad::val_str(String *str)
|
|||
String *res= args[0]->val_str(str);
|
||||
String *rpad= args[2]->val_str(&rpad_str);
|
||||
|
||||
/* Assumes that the maximum length of a String is < INT_MAX32. */
|
||||
/* Set here so that rest of code sees out-of-bound value as such. */
|
||||
if ((count > INT_MAX32) || args[1]->unsigned_flag)
|
||||
count= INT_MAX32;
|
||||
|
||||
if (!res || args[1]->null_value || !rpad || count < 0)
|
||||
if (!res || args[1]->null_value || !rpad ||
|
||||
((count < 0) && !args[1]->unsigned_flag))
|
||||
goto err;
|
||||
null_value=0;
|
||||
|
||||
/* Assumes that the maximum length of a String is < INT_MAX32. */
|
||||
/* Set here so that rest of code sees out-of-bound value as such. */
|
||||
if ((ulonglong) count > INT_MAX32)
|
||||
count= INT_MAX32;
|
||||
if (count <= (res_char_length= res->numchars()))
|
||||
{ // String to pad is big enough
|
||||
res->length(res->charpos((int) count)); // Shorten result if longer
|
||||
|
@ -2466,14 +2464,15 @@ String *Item_func_lpad::val_str(String *str)
|
|||
String *res= args[0]->val_str(&tmp_value);
|
||||
String *pad= args[2]->val_str(&lpad_str);
|
||||
|
||||
if (!res || args[1]->null_value || !pad ||
|
||||
((count < 0) && !args[1]->unsigned_flag))
|
||||
goto err;
|
||||
null_value=0;
|
||||
/* Assumes that the maximum length of a String is < INT_MAX32. */
|
||||
/* Set here so that rest of code sees out-of-bound value as such. */
|
||||
if ((count > INT_MAX32) || args[1]->unsigned_flag)
|
||||
if ((ulonglong) count > INT_MAX32)
|
||||
count= INT_MAX32;
|
||||
|
||||
if (!res || args[1]->null_value || !pad || count < 0)
|
||||
goto err;
|
||||
null_value=0;
|
||||
res_char_length= res->numchars();
|
||||
|
||||
if (count <= res_char_length)
|
||||
|
|
|
@ -391,6 +391,7 @@ extern my_bool innobase_log_archive,
|
|||
innobase_use_large_pages,
|
||||
innobase_use_native_aio,
|
||||
innobase_file_per_table, innobase_locks_unsafe_for_binlog,
|
||||
innobase_rollback_on_timeout,
|
||||
innobase_create_status_file;
|
||||
extern "C" {
|
||||
extern ulong srv_max_buf_pool_modified_pct;
|
||||
|
@ -4873,7 +4874,8 @@ enum options_mysqld
|
|||
OPT_PORT_OPEN_TIMEOUT,
|
||||
OPT_GENERAL_LOG,
|
||||
OPT_SLOW_LOG,
|
||||
OPT_MERGE
|
||||
OPT_MERGE,
|
||||
OPT_INNODB_ROLLBACK_ON_TIMEOUT
|
||||
};
|
||||
|
||||
|
||||
|
@ -5166,6 +5168,10 @@ Disable with --skip-innodb-doublewrite.", (gptr*) &innobase_use_doublewrite,
|
|||
(gptr*) &srv_max_purge_lag,
|
||||
(gptr*) &srv_max_purge_lag, 0, GET_LONG, REQUIRED_ARG, 0, 0, ~0L,
|
||||
0, 1L, 0},
|
||||
{"innodb_rollback_on_timeout", OPT_INNODB_ROLLBACK_ON_TIMEOUT,
|
||||
"Roll back the complete transaction on lock wait timeout, for 4.x compatibility (disabled by default)",
|
||||
(gptr*) &innobase_rollback_on_timeout, (gptr*) &innobase_rollback_on_timeout,
|
||||
0, GET_BOOL, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"innodb_status_file", OPT_INNODB_STATUS_FILE,
|
||||
"Enable SHOW INNODB STATUS output in the innodb_status.<pid> file",
|
||||
(gptr*) &innobase_create_status_file, (gptr*) &innobase_create_status_file,
|
||||
|
@ -8153,7 +8159,8 @@ my_bool innobase_log_archive,
|
|||
innobase_use_doublewrite,
|
||||
innobase_use_checksums,
|
||||
innobase_file_per_table,
|
||||
innobase_locks_unsafe_for_binlog;
|
||||
innobase_locks_unsafe_for_binlog,
|
||||
innobase_rollback_on_timeout;
|
||||
|
||||
extern "C" {
|
||||
ulong srv_max_buf_pool_modified_pct;
|
||||
|
|
|
@ -78,7 +78,8 @@ extern my_bool innobase_log_archive,
|
|||
innobase_use_doublewrite,
|
||||
innobase_use_checksums,
|
||||
innobase_file_per_table,
|
||||
innobase_locks_unsafe_for_binlog;
|
||||
innobase_locks_unsafe_for_binlog,
|
||||
innobase_rollback_on_timeout;
|
||||
|
||||
extern "C" {
|
||||
extern ulong srv_max_buf_pool_modified_pct;
|
||||
|
@ -825,6 +826,7 @@ SHOW_VAR init_vars[]= {
|
|||
{sys_innodb_max_purge_lag.name, (char*) &sys_innodb_max_purge_lag, SHOW_SYS},
|
||||
{"innodb_mirrored_log_groups", (char*) &innobase_mirrored_log_groups, SHOW_LONG},
|
||||
{"innodb_open_files", (char*) &innobase_open_files, SHOW_LONG },
|
||||
{"innodb_rollback_on_timeout", (char*) &innobase_rollback_on_timeout, SHOW_MY_BOOL},
|
||||
{sys_innodb_support_xa.name, (char*) &sys_innodb_support_xa, SHOW_SYS},
|
||||
{sys_innodb_sync_spin_loops.name, (char*) &sys_innodb_sync_spin_loops, SHOW_SYS},
|
||||
{sys_innodb_table_locks.name, (char*) &sys_innodb_table_locks, SHOW_SYS},
|
||||
|
|
|
@ -1087,7 +1087,7 @@ my_bool is_const_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
|
|||
strmov(message, "IS_CONST accepts only one argument");
|
||||
return 1;
|
||||
}
|
||||
initid->ptr= (char*)((args->args[0] != NULL) ? 1 : 0);
|
||||
initid->ptr= (char*)((args->args[0] != NULL) ? 1UL : 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -181,6 +181,7 @@ my_bool innobase_use_large_pages = FALSE;
|
|||
my_bool innobase_use_native_aio = FALSE;
|
||||
my_bool innobase_file_per_table = FALSE;
|
||||
my_bool innobase_locks_unsafe_for_binlog = FALSE;
|
||||
my_bool innobase_rollback_on_timeout = FALSE;
|
||||
my_bool innobase_create_status_file = FALSE;
|
||||
|
||||
static char *internal_innobase_data_file_path = NULL;
|
||||
|
@ -473,6 +474,10 @@ convert_error_code_to_mysql(
|
|||
latest SQL statement in a lock wait timeout. Previously, we
|
||||
rolled back the whole transaction. */
|
||||
|
||||
if (thd && row_rollback_on_timeout) {
|
||||
ha_rollback(thd);
|
||||
}
|
||||
|
||||
return(HA_ERR_LOCK_WAIT_TIMEOUT);
|
||||
|
||||
} else if (error == (int) DB_NO_REFERENCED_ROW) {
|
||||
|
@ -1566,6 +1571,8 @@ innobase_init(void *p)
|
|||
os_use_large_pages = (ibool) innobase_use_large_pages;
|
||||
os_large_page_size = (ulint) innobase_large_page_size;
|
||||
|
||||
row_rollback_on_timeout = (ibool) innobase_rollback_on_timeout;
|
||||
|
||||
srv_file_per_table = (ibool) innobase_file_per_table;
|
||||
srv_locks_unsafe_for_binlog = (ibool) innobase_locks_unsafe_for_binlog;
|
||||
|
||||
|
|
|
@ -224,6 +224,7 @@ extern my_bool innobase_log_archive,
|
|||
innobase_use_large_pages,
|
||||
innobase_use_native_aio,
|
||||
innobase_file_per_table, innobase_locks_unsafe_for_binlog,
|
||||
innobase_rollback_on_timeout,
|
||||
innobase_create_status_file;
|
||||
extern "C" {
|
||||
extern ulong srv_max_buf_pool_modified_pct;
|
||||
|
|
|
@ -19,6 +19,8 @@ Created 9/17/2000 Heikki Tuuri
|
|||
#include "btr0pcur.h"
|
||||
#include "trx0types.h"
|
||||
|
||||
extern ibool row_rollback_on_timeout;
|
||||
|
||||
typedef struct row_prebuilt_struct row_prebuilt_t;
|
||||
|
||||
/***********************************************************************
|
||||
|
|
|
@ -35,6 +35,9 @@ Created 9/17/2000 Heikki Tuuri
|
|||
/* A dummy variable used to fool the compiler */
|
||||
ibool row_mysql_identically_false = FALSE;
|
||||
|
||||
/* Provide optional 4.x backwards compatibility for 5.0 and above */
|
||||
ibool row_rollback_on_timeout = FALSE;
|
||||
|
||||
/* List of tables we should drop in background. ALTER TABLE in MySQL requires
|
||||
that the table handler can drop the table in background when there are no
|
||||
queries to it any more. Protected by the kernel mutex. */
|
||||
|
@ -496,7 +499,9 @@ handle_new_error:
|
|||
return(TRUE);
|
||||
|
||||
} else if (err == DB_DEADLOCK
|
||||
|| err == DB_LOCK_TABLE_FULL) {
|
||||
|| err == DB_LOCK_TABLE_FULL
|
||||
|| (err == DB_LOCK_WAIT_TIMEOUT
|
||||
&& row_rollback_on_timeout)) {
|
||||
/* Roll back the whole transaction; this resolution was added
|
||||
to version 3.23.43 */
|
||||
|
||||
|
@ -504,6 +509,10 @@ handle_new_error:
|
|||
|
||||
} else if (err == DB_OUT_OF_FILE_SPACE
|
||||
|| err == DB_LOCK_WAIT_TIMEOUT) {
|
||||
|
||||
ut_ad(!(err == DB_LOCK_WAIT_TIMEOUT
|
||||
&& row_rollback_on_timeout));
|
||||
|
||||
if (savept) {
|
||||
/* Roll back the latest, possibly incomplete
|
||||
insertion or update */
|
||||
|
|
|
@ -138,6 +138,12 @@ static const dec1 frac_max[DIG_PER_DEC1-1]={
|
|||
900000000, 990000000, 999000000,
|
||||
999900000, 999990000, 999999000,
|
||||
999999900, 999999990 };
|
||||
static double scaler10[]= {
|
||||
1.0, 1e10, 1e20, 1e30, 1e40, 1e50, 1e60, 1e70, 1e80, 1e90
|
||||
};
|
||||
static double scaler1[]= {
|
||||
1.0, 10.0, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9
|
||||
};
|
||||
|
||||
#ifdef HAVE_purify
|
||||
#define sanity(d) DBUG_ASSERT((d)->len > 0)
|
||||
|
@ -946,15 +952,27 @@ fatal_error:
|
|||
|
||||
int decimal2double(decimal_t *from, double *to)
|
||||
{
|
||||
double x=0, t=DIG_BASE;
|
||||
int intg, frac;
|
||||
dec1 *buf=from->buf;
|
||||
double result= 0.0;
|
||||
int i, exp= 0;
|
||||
dec1 *buf= from->buf;
|
||||
|
||||
for (i= from->intg; i > 0; i-= DIG_PER_DEC1)
|
||||
result= result * DIG_BASE + *buf++;
|
||||
|
||||
for (i= from->frac; i > 0; i-= DIG_PER_DEC1) {
|
||||
result= result * DIG_BASE + *buf++;
|
||||
exp+= DIG_PER_DEC1;
|
||||
}
|
||||
|
||||
DBUG_PRINT("info", ("interm.: %f %d %f", result, exp,
|
||||
scaler10[exp / 10] * scaler1[exp % 10]));
|
||||
|
||||
result/= scaler10[exp / 10] * scaler1[exp % 10];
|
||||
|
||||
*to= from->sign ? -result : result;
|
||||
|
||||
DBUG_PRINT("info", ("result: %f (%lx)", *to, *(ulong *)to));
|
||||
|
||||
for (intg=from->intg; intg > 0; intg-=DIG_PER_DEC1)
|
||||
x=x*DIG_BASE + *buf++;
|
||||
for (frac=from->frac; frac > 0; frac-=DIG_PER_DEC1, t*=DIG_BASE)
|
||||
x+=*buf++/t;
|
||||
*to=from->sign ? -x : x;
|
||||
return E_DEC_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -533,7 +533,7 @@ fi
|
|||
%doc %attr(644, root, man) %{_mandir}/man1/mysql_upgrade.1*
|
||||
%doc %attr(644, root, man) %{_mandir}/man1/mysqlhotcopy.1*
|
||||
%doc %attr(644, root, man) %{_mandir}/man1/mysqlman.1*
|
||||
%doc %attr(644, root, man) %{_mandir}/man1/mysqlmanager.8*
|
||||
%doc %attr(644, root, man) %{_mandir}/man8/mysqlmanager.8*
|
||||
%doc %attr(644, root, man) %{_mandir}/man1/mysql.server.1*
|
||||
%doc %attr(644, root, man) %{_mandir}/man1/mysql_tzinfo_to_sql.1*
|
||||
%doc %attr(644, root, man) %{_mandir}/man1/mysql_zap.1*
|
||||
|
@ -689,6 +689,10 @@ fi
|
|||
# itself - note that they must be ordered by date (important when
|
||||
# merging BK trees)
|
||||
%changelog
|
||||
* Mon Dec 18 2006 Joerg Bruehe <joerg@mysql.com>
|
||||
|
||||
- Fix the move of "mysqlmanager" to section 8: Directory name was wrong.
|
||||
|
||||
* Thu Dec 14 2006 Joerg Bruehe <joerg@mysql.com>
|
||||
|
||||
- Include the new man pages for "my_print_defaults" and "mysql_tzinfo_to_sql"
|
||||
|
|
Loading…
Reference in a new issue