Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
69a11590
Commit
69a11590
authored
Dec 20, 2006
by
unknown
Browse files
Options
Browse Files
Download
Plain Diff
Merge bk-internal.mysql.com:/data0/bk/mysql-5.0
into bk-internal.mysql.com:/data0/bk/mysql-5.0-build
parents
6dd079a6
b8550ca1
Changes
33
Show whitespace changes
Inline
Side-by-side
Showing
33 changed files
with
376 additions
and
114 deletions
+376
-114
cmd-line-utils/readline/histfile.c
cmd-line-utils/readline/histfile.c
+2
-1
innobase/dict/dict0dict.c
innobase/dict/dict0dict.c
+16
-13
innobase/include/row0mysql.h
innobase/include/row0mysql.h
+2
-0
innobase/include/sync0rw.h
innobase/include/sync0rw.h
+10
-4
innobase/include/sync0sync.h
innobase/include/sync0sync.h
+20
-12
innobase/include/sync0sync.ic
innobase/include/sync0sync.ic
+2
-2
innobase/log/log0recv.c
innobase/log/log0recv.c
+10
-0
innobase/row/row0mysql.c
innobase/row/row0mysql.c
+10
-1
innobase/srv/srv0start.c
innobase/srv/srv0start.c
+0
-11
innobase/sync/sync0rw.c
innobase/sync/sync0rw.c
+8
-6
innobase/sync/sync0sync.c
innobase/sync/sync0sync.c
+19
-13
innobase/trx/trx0roll.c
innobase/trx/trx0roll.c
+19
-1
innobase/trx/trx0trx.c
innobase/trx/trx0trx.c
+18
-0
mysql-test/include/innodb_rollback_on_timeout.inc
mysql-test/include/innodb_rollback_on_timeout.inc
+37
-0
mysql-test/mysql-test-run.pl
mysql-test/mysql-test-run.pl
+6
-0
mysql-test/r/func_str.result
mysql-test/r/func_str.result
+12
-0
mysql-test/r/innodb_mysql.result
mysql-test/r/innodb_mysql.result
+36
-0
mysql-test/r/innodb_timeout_rollback.result
mysql-test/r/innodb_timeout_rollback.result
+35
-0
mysql-test/t/disabled.def
mysql-test/t/disabled.def
+1
-0
mysql-test/t/func_str.test
mysql-test/t/func_str.test
+8
-0
mysql-test/t/innodb_mysql-master.opt
mysql-test/t/innodb_mysql-master.opt
+1
-0
mysql-test/t/innodb_mysql.test
mysql-test/t/innodb_mysql.test
+2
-0
mysql-test/t/innodb_timeout_rollback-master.opt
mysql-test/t/innodb_timeout_rollback-master.opt
+1
-0
mysql-test/t/innodb_timeout_rollback.test
mysql-test/t/innodb_timeout_rollback.test
+5
-0
scripts/make_binary_distribution.sh
scripts/make_binary_distribution.sh
+1
-0
sql/ha_innodb.cc
sql/ha_innodb.cc
+36
-19
sql/ha_innodb.h
sql/ha_innodb.h
+1
-0
sql/item_strfunc.cc
sql/item_strfunc.cc
+19
-20
sql/mysqld.cc
sql/mysqld.cc
+6
-1
sql/set_var.cc
sql/set_var.cc
+1
-0
sql/udf_example.c
sql/udf_example.c
+1
-1
strings/decimal.c
strings/decimal.c
+26
-8
support-files/mysql.spec.sh
support-files/mysql.spec.sh
+5
-1
No files found.
cmd-line-utils/readline/histfile.c
View file @
69a11590
...
...
@@ -334,7 +334,8 @@ history_truncate_file (fname, lines)
file_size
=
(
size_t
)
finfo
.
st_size
;
/* check for overflow on very large files */
if
(
file_size
!=
finfo
.
st_size
||
file_size
+
1
<
file_size
)
if
((
long
long
)
file_size
!=
(
long
long
)
finfo
.
st_size
||
file_size
+
1
<
file_size
)
{
close
(
file
);
#if defined (EFBIG)
...
...
innobase/dict/dict0dict.c
View file @
69a11590
...
...
@@ -27,6 +27,9 @@ Created 1/8/1996 Heikki Tuuri
#include "que0que.h"
#include "rem0cmp.h"
/* Implement isspace() in a locale-independent way. (Bug #24299) */
#define ib_isspace(c) strchr(" \v\f\t\r\n", c)
dict_sys_t
*
dict_sys
=
NULL
;
/* the dictionary system */
rw_lock_t
dict_operation_lock
;
/* table create, drop, etc. reserve
...
...
@@ -2406,7 +2409,7 @@ dict_accept(
*
success
=
FALSE
;
while
(
isspace
(
*
ptr
))
{
while
(
i
b_i
sspace
(
*
ptr
))
{
ptr
++
;
}
...
...
@@ -2451,7 +2454,7 @@ dict_scan_id(
*
id
=
NULL
;
while
(
isspace
(
*
ptr
))
{
while
(
i
b_i
sspace
(
*
ptr
))
{
ptr
++
;
}
...
...
@@ -2482,7 +2485,7 @@ dict_scan_id(
len
++
;
}
}
else
{
while
(
!
isspace
(
*
ptr
)
&&
*
ptr
!=
'('
&&
*
ptr
!=
')'
while
(
!
i
b_i
sspace
(
*
ptr
)
&&
*
ptr
!=
'('
&&
*
ptr
!=
')'
&&
(
accept_also_dot
||
*
ptr
!=
'.'
)
&&
*
ptr
!=
','
&&
*
ptr
!=
'\0'
)
{
...
...
@@ -2512,12 +2515,12 @@ dict_scan_id(
if
(
heap
&&
!
quote
)
{
/* EMS MySQL Manager sometimes adds characters 0xA0 (in
latin1, a 'non-breakable space') to the end of a table name.
But isspace(0xA0) is not true, which confuses our foreign key
parser. After the UTF-8 conversion in ha_innodb.cc, bytes 0xC2
and 0xA0 are at the end of the string
.
After the UTF-8 conversion in ha_innodb.cc, bytes 0xC2
and 0xA0 are at the end of the string, and ib_isspace()
does not work for multi-byte UTF-8 characters
.
TODO: we should
lex the string using thd->charset_info, and
my_isspace().
Only after that, convert id names to UTF-8
. */
In MySQL 5.1 we
lex the string using thd->charset_info, and
my_isspace().
This workaround is not needed there
. */
b
=
(
byte
*
)(
*
id
);
id_len
=
strlen
((
char
*
)
b
);
...
...
@@ -3006,11 +3009,11 @@ loop:
ut_a
(
success
);
if
(
!
isspace
(
*
ptr
)
&&
*
ptr
!=
'"'
&&
*
ptr
!=
'`'
)
{
if
(
!
i
b_i
sspace
(
*
ptr
)
&&
*
ptr
!=
'"'
&&
*
ptr
!=
'`'
)
{
goto
loop
;
}
while
(
isspace
(
*
ptr
))
{
while
(
i
b_i
sspace
(
*
ptr
))
{
ptr
++
;
}
...
...
@@ -3052,7 +3055,7 @@ loop:
goto
loop
;
}
if
(
!
isspace
(
*
ptr
))
{
if
(
!
i
b_i
sspace
(
*
ptr
))
{
goto
loop
;
}
...
...
@@ -3140,7 +3143,7 @@ col_loop1:
}
ptr
=
dict_accept
(
ptr
,
"REFERENCES"
,
&
success
);
if
(
!
success
||
!
isspace
(
*
ptr
))
{
if
(
!
success
||
!
i
b_i
sspace
(
*
ptr
))
{
dict_foreign_report_syntax_err
(
name
,
start_of_latest_foreign
,
ptr
);
return
(
DB_CANNOT_ADD_CONSTRAINT
);
...
...
@@ -3527,7 +3530,7 @@ loop:
ptr
=
dict_accept
(
ptr
,
"DROP"
,
&
success
);
if
(
!
isspace
(
*
ptr
))
{
if
(
!
i
b_i
sspace
(
*
ptr
))
{
goto
loop
;
}
...
...
innobase/include/row0mysql.h
View file @
69a11590
...
...
@@ -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
;
/***********************************************************************
...
...
innobase/include/sync0rw.h
View file @
69a11590
...
...
@@ -61,7 +61,11 @@ Creates, or rather, initializes an rw-lock object in a specified memory
location (which must be appropriately aligned). The rw-lock is initialized
to the non-locked state. Explicit freeing of the rw-lock with rw_lock_free
is necessary only if the memory block containing it is freed. */
#define rw_lock_create(L) rw_lock_create_func((L), __FILE__, __LINE__, #L)
#ifdef UNIV_DEBUG
# define rw_lock_create(L) rw_lock_create_func((L), #L, __FILE__, __LINE__)
#else
/* UNIV_DEBUG */
# define rw_lock_create(L) rw_lock_create_func((L), __FILE__, __LINE__)
#endif
/* UNIV_DEBUG */
/*=====================*/
/**********************************************************************
...
...
@@ -74,9 +78,11 @@ void
rw_lock_create_func
(
/*================*/
rw_lock_t
*
lock
,
/* in: pointer to memory */
#ifdef UNIV_DEBUG
const
char
*
cmutex_name
,
/* in: mutex name */
#endif
/* UNIV_DEBUG */
const
char
*
cfile_name
,
/* in: file name where created */
ulint
cline
,
/* in: file line where created */
const
char
*
cmutex_name
);
/* in: mutex name */
ulint
cline
);
/* in: file line where created */
/**********************************************************************
Calling this function is obligatory only if the memory buffer containing
the rw-lock is freed. Removes an rw-lock object from the global list. The
...
...
innobase/include/sync0sync.h
View file @
69a11590
...
...
@@ -39,7 +39,11 @@ location (which must be appropriately aligned). The mutex is initialized
in the reset state. Explicit freeing of the mutex with mutex_free is
necessary only if the memory block containing it is freed. */
#define mutex_create(M) mutex_create_func((M), __FILE__, __LINE__, #M)
#ifdef UNIV_DEBUG
# define mutex_create(M) mutex_create_func((M), #M, __FILE__, __LINE__)
#else
# define mutex_create(M) mutex_create_func((M), __FILE__, __LINE__)
#endif
/*===================*/
/**********************************************************************
Creates, or rather, initializes a mutex object in a specified memory
...
...
@@ -51,9 +55,11 @@ void
mutex_create_func
(
/*==============*/
mutex_t
*
mutex
,
/* in: pointer to memory */
#ifdef UNIV_DEBUG
const
char
*
cmutex_name
,
/* in: mutex name */
#endif
/* UNIV_DEBUG */
const
char
*
cfile_name
,
/* in: file name where created */
ulint
cline
,
/* in: file line where created */
const
char
*
cmutex_name
);
/* in: mutex name */
ulint
cline
);
/* in: file line where created */
/**********************************************************************
Calling this function is obligatory only if the memory buffer containing
the mutex is freed. Removes a mutex object from the mutex list. The mutex
...
...
@@ -479,15 +485,17 @@ struct mutex_struct {
ulint
cline
;
/* Line where created */
ulint
magic_n
;
#ifndef UNIV_HOTBACKUP
ulong
count_os_wait
;
/* count of os_wait */
# ifdef UNIV_DEBUG
ulong
count_using
;
/* count of times mutex used */
ulong
count_spin_loop
;
/* count of spin loops */
ulong
count_spin_rounds
;
/* count of spin rounds */
ulong
count_os_wait
;
/* count of os_wait */
ulong
count_os_yield
;
/* count of os_wait */
ulonglong
lspent_time
;
/* mutex os_wait timer msec */
ulonglong
lmax_spent_time
;
/* mutex os_wait timer msec */
const
char
*
cmutex_name
;
/* mutex name */
ulint
mutex_type
;
/* 0 - usual mutex 1 - rw_lock mutex */
# endif
/* UNIV_DEBUG */
#endif
/* !UNIV_HOTBACKUP */
};
...
...
innobase/include/sync0sync.ic
View file @
69a11590
...
...
@@ -250,9 +250,9 @@ mutex_enter_func(
/* Note that we do not peek at the value of lock_word before trying
the atomic test_and_set; we could peek, and possibly save time. */
#if
ndef
UNIV_HOTBACKUP
#if
defined UNIV_DEBUG && !defined
UNIV_HOTBACKUP
mutex->count_using++;
#endif /* UNIV_HOTBACKUP */
#endif /* UNIV_
DEBUG && !UNIV_
HOTBACKUP */
if (!mutex_test_and_set(mutex))
{
...
...
innobase/log/log0recv.c
View file @
69a11590
...
...
@@ -33,6 +33,7 @@ Created 9/20/1997 Heikki Tuuri
#include "btr0cur.h"
#include "dict0boot.h"
#include "fil0fil.h"
#include "sync0sync.h"
#ifdef UNIV_HOTBACKUP
/* This is set to FALSE if the backup was originally taken with the
...
...
@@ -2969,6 +2970,15 @@ recv_recovery_from_checkpoint_finish(void)
#ifndef UNIV_LOG_DEBUG
recv_sys_free
();
#endif
#ifdef UNIV_SYNC_DEBUG
/* Wait for a while so that created threads have time to suspend
themselves before we switch the latching order checks on */
os_thread_sleep
(
1000000
);
/* Switch latching order checks on in sync0sync.c */
sync_order_checks_on
=
TRUE
;
#endif
if
(
srv_force_recovery
<
SRV_FORCE_NO_TRX_UNDO
)
{
/* Rollback the uncommitted transactions which have no user
session */
...
...
innobase/row/row0mysql.c
View file @
69a11590
...
...
@@ -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. */
...
...
@@ -514,7 +517,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 */
...
...
@@ -522,6 +527,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 */
...
...
innobase/srv/srv0start.c
View file @
69a11590
...
...
@@ -1554,17 +1554,6 @@ innobase_start_or_create_for_mysql(void)
srv_was_started
=
TRUE
;
srv_is_being_started
=
FALSE
;
#ifdef UNIV_DEBUG
/* Wait a while so that the created threads have time to suspend
themselves before we switch sync debugging on; otherwise a thread may
execute mutex_enter() before the checks are on, and mutex_exit() after
the checks are on, which will cause an assertion failure in sync
debug. */
os_thread_sleep
(
3000000
);
#endif
sync_order_checks_on
=
TRUE
;
if
(
trx_doublewrite
==
NULL
)
{
/* Create the doublewrite buffer to a new tablespace */
...
...
innobase/sync/sync0rw.c
View file @
69a11590
...
...
@@ -89,9 +89,11 @@ void
rw_lock_create_func
(
/*================*/
rw_lock_t
*
lock
,
/* in: pointer to memory */
#ifdef UNIV_DEBUG
const
char
*
cmutex_name
,
/* in: mutex name */
#endif
/* UNIV_DEBUG */
const
char
*
cfile_name
,
/* in: file name where created */
ulint
cline
,
/* in: file line where created */
const
char
*
cmutex_name
)
/* in: mutex name */
ulint
cline
)
/* in: file line where created */
{
/* If this is the very first time a synchronization
object is created, then the following call initializes
...
...
@@ -102,10 +104,10 @@ rw_lock_create_func(
lock
->
mutex
.
cfile_name
=
cfile_name
;
lock
->
mutex
.
cline
=
cline
;
#if
ndef
UNIV_HOTBACKUP
#if
defined UNIV_DEBUG && !defined
UNIV_HOTBACKUP
lock
->
mutex
.
cmutex_name
=
cmutex_name
;
lock
->
mutex
.
mutex_type
=
1
;
#endif
/* !UNIV_HOTBACKUP */
#endif
/*
UNIV_DEBUG &&
!UNIV_HOTBACKUP */
rw_lock_set_waiters
(
lock
,
0
);
rw_lock_set_writer
(
lock
,
RW_LOCK_NOT_LOCKED
);
...
...
innobase/sync/sync0sync.c
View file @
69a11590
...
...
@@ -202,9 +202,11 @@ void
mutex_create_func
(
/*==============*/
mutex_t
*
mutex
,
/* in: pointer to memory */
#ifdef UNIV_DEBUG
const
char
*
cmutex_name
,
/* in: mutex name */
#endif
/* UNIV_DEBUG */
const
char
*
cfile_name
,
/* in: file name where created */
ulint
cline
,
/* in: file line where created */
const
char
*
cmutex_name
)
/* in: mutex name */
ulint
cline
)
/* in: file line where created */
{
#if defined(_WIN32) && defined(UNIV_CAN_USE_X86_ASSEMBLER)
mutex_reset_lock_word
(
mutex
);
...
...
@@ -223,6 +225,8 @@ mutex_create_func(
mutex
->
cfile_name
=
cfile_name
;
mutex
->
cline
=
cline
;
#ifndef UNIV_HOTBACKUP
mutex
->
count_os_wait
=
0
;
# ifdef UNIV_DEBUG
mutex
->
cmutex_name
=
cmutex_name
;
mutex
->
count_using
=
0
;
mutex
->
mutex_type
=
0
;
...
...
@@ -230,8 +234,8 @@ mutex_create_func(
mutex
->
lmax_spent_time
=
0
;
mutex
->
count_spin_loop
=
0
;
mutex
->
count_spin_rounds
=
0
;
mutex
->
count_os_wait
=
0
;
mutex
->
count_os_yield
=
0
;
# endif
/* UNIV_DEBUG */
#endif
/* !UNIV_HOTBACKUP */
/* Check that lock_word is aligned; this is important on Intel */
...
...
@@ -378,13 +382,13 @@ mutex_spin_wait(
{
ulint
index
;
/* index of the reserved wait cell */
ulint
i
;
/* spin round count */
#if
ndef
UNIV_HOTBACKUP
#if
defined UNIV_DEBUG && !defined
UNIV_HOTBACKUP
ib_longlong
lstart_time
=
0
,
lfinish_time
;
/* for timing os_wait */
ulint
ltime_diff
;
ulint
sec
;
ulint
ms
;
uint
timer_started
=
0
;
#endif
/* !UNIV_HOTBACKUP */
#endif
/*
UNIV_DEBUG &&
!UNIV_HOTBACKUP */
ut_ad
(
mutex
);
mutex_loop:
...
...
@@ -398,10 +402,10 @@ mutex_loop:
memory word. */
spin_loop:
#if
ndef
UNIV_HOTBACKUP
#if
defined UNIV_DEBUG && !defined
UNIV_HOTBACKUP
mutex_spin_wait_count
++
;
mutex
->
count_spin_loop
++
;
#endif
/* !UNIV_HOTBACKUP */
#endif
/*
UNIV_DEBUG &&
!UNIV_HOTBACKUP */
while
(
mutex_get_lock_word
(
mutex
)
!=
0
&&
i
<
SYNC_SPIN_ROUNDS
)
{
...
...
@@ -415,7 +419,7 @@ spin_loop:
if
(
i
==
SYNC_SPIN_ROUNDS
)
{
#if
ndef
UNIV_HOTBACKUP
#if
defined UNIV_DEBUG && !defined
UNIV_HOTBACKUP
mutex
->
count_os_yield
++
;
if
(
timed_mutexes
==
1
&&
timer_started
==
0
)
{
...
...
@@ -423,7 +427,7 @@ spin_loop:
lstart_time
=
(
ib_longlong
)
sec
*
1000000
+
ms
;
timer_started
=
1
;
}
#endif
/* !UNIV_HOTBACKUP */
#endif
/*
UNIV_DEBUG &&
!UNIV_HOTBACKUP */
os_thread_yield
();
}
...
...
@@ -436,9 +440,9 @@ spin_loop:
mutex_spin_round_count
+=
i
;
#if
ndef
UNIV_HOTBACKUP
#if
defined UNIV_DEBUG && !defined
UNIV_HOTBACKUP
mutex
->
count_spin_rounds
+=
i
;
#endif
/* !UNIV_HOTBACKUP */
#endif
/*
UNIV_DEBUG &&
!UNIV_HOTBACKUP */
if
(
mutex_test_and_set
(
mutex
)
==
0
)
{
...
...
@@ -522,6 +526,7 @@ Now there is no risk of infinite wait on the event. */
#ifndef UNIV_HOTBACKUP
mutex
->
count_os_wait
++
;
# ifdef UNIV_DEBUG
/*
!!!!! Sometimes os_wait can be called without os_thread_yield
*/
...
...
@@ -532,13 +537,14 @@ Now there is no risk of infinite wait on the event. */
lstart_time
=
(
ib_longlong
)
sec
*
1000000
+
ms
;
timer_started
=
1
;
}
# endif
/* UNIV_DEBUG */
#endif
/* !UNIV_HOTBACKUP */
sync_array_wait_event
(
sync_primary_wait_array
,
index
);
goto
mutex_loop
;
finish_timing:
#if
ndef
UNIV_HOTBACKUP
#if
defined UNIV_DEBUG && !defined
UNIV_HOTBACKUP
if
(
timed_mutexes
==
1
&&
timer_started
==
1
)
{
ut_usectime
(
&
sec
,
&
ms
);
...
...
@@ -551,7 +557,7 @@ finish_timing:
mutex
->
lmax_spent_time
=
ltime_diff
;
}
}
#endif
/* !UNIV_HOTBACKUP */
#endif
/*
UNIV_DEBUG &&
!UNIV_HOTBACKUP */
return
;
}
...
...
innobase/trx/trx0roll.c
View file @
69a11590
...
...
@@ -130,6 +130,24 @@ trx_rollback_for_mysql(
trx
->
op_info
=
"rollback"
;
/* If we are doing the XA recovery of prepared transactions, then
the transaction object does not have an InnoDB session object, and we
set a dummy session that we use for all MySQL transactions. */
mutex_enter
(
&
kernel_mutex
);
if
(
trx
->
sess
==
NULL
)
{
/* Open a dummy session */
if
(
!
trx_dummy_sess
)
{
trx_dummy_sess
=
sess_open
();
}
trx
->
sess
=
trx_dummy_sess
;
}
mutex_exit
(
&
kernel_mutex
);
err
=
trx_general_rollback_for_mysql
(
trx
,
FALSE
,
NULL
);
trx
->
op_info
=
""
;
...
...
innobase/trx/trx0trx.c
View file @
69a11590
...
...
@@ -1602,6 +1602,24 @@ trx_commit_for_mysql(
trx
->
op_info
=
"committing"
;
/* If we are doing the XA recovery of prepared transactions, then
the transaction object does not have an InnoDB session object, and we
set the dummy session that we use for all MySQL transactions. */
mutex_enter
(
&
kernel_mutex
);
if
(
trx
->
sess
==
NULL
)
{
/* Open a dummy session */
if
(
!
trx_dummy_sess
)
{
trx_dummy_sess
=
sess_open
();
}
trx
->
sess
=
trx_dummy_sess
;
}
mutex_exit
(
&
kernel_mutex
);
trx_start_if_not_started
(
trx
);
mutex_enter
(
&
kernel_mutex
);
...
...
mysql-test/include/innodb_rollback_on_timeout.inc
0 → 100644
View file @
69a11590
#
# 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
;
mysql-test/mysql-test-run.pl
View file @
69a11590
...
...
@@ -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
]
=
...
...
mysql-test/r/func_str.result
View file @
69a11590
...
...
@@ -1916,4 +1916,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
mysql-test/r/innodb_mysql.result
View file @
69a11590
...
...
@@ -383,4 +383,40 @@ 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
mysql-test/r/innodb_timeout_rollback.result
0 → 100644
View file @
69a11590
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
mysql-test/t/disabled.def
View file @
69a11590
...
...
@@ -10,6 +10,7 @@
#
##############################################################################
im_daemon_life_cycle : Bug#24415 see note: [19 Dec 23:17] Trudy Pelzer
ndb_load : Bug#17233
user_limits : Bug#23921 random failure of user_limits.test
flush2 : Bug#24805 Pushbuild can't handle test with --disable-log-bin
...
...
mysql-test/t/func_str.test
View file @
69a11590
...
...
@@ -991,5 +991,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
mysql-test/t/innodb_mysql-master.opt
0 → 100644
View file @
69a11590
--innodb-lock-wait-timeout=2
mysql-test/t/innodb_mysql.test
View file @
69a11590
...
...
@@ -384,4 +384,6 @@ 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
mysql-test/t/innodb_timeout_rollback-master.opt
0 → 100644
View file @
69a11590
--innodb_lock_wait_timeout=2 --innodb_rollback_on_timeout
mysql-test/t/innodb_timeout_rollback.test
0 → 100644
View file @
69a11590
--
source
include
/
have_innodb
.
inc
--
source
include
/
innodb_rollback_on_timeout
.
inc
--
echo
End
of
5.0
tests
scripts/make_binary_distribution.sh
View file @
69a11590
...
...
@@ -243,6 +243,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
\
...
...
sql/ha_innodb.cc
View file @
69a11590
...
...
@@ -173,6 +173,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
;
...
...
@@ -467,6 +468,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
)
{
...
...
@@ -1380,6 +1385,8 @@ innobase_init(void)
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
;
...
...
@@ -5308,19 +5315,11 @@ ha_innobase::info(
prebuilt
->
trx
->
op_info
=
(
char
*
)
"returning various info to MySQL"
;
if
(
ib_table
->
space
!=
0
)
{
my_snprintf
(
path
,
sizeof
(
path
),
"%s/%s%s"
,
mysql_data_home
,
ib_table
->
name
,
".ibd"
);
unpack_filename
(
path
,
path
);
}
else
{
my_snprintf
(
path
,
sizeof
(
path
),
"%s/%s%s"
,
mysql_data_home
,
ib_table
->
name
,
reg_ext
);
unpack_filename
(
path
,
path
);
}
/* Note that we do not know the access time of the table,
nor the CHECK TABLE time, nor the UPDATE or INSERT time. */
...
...
@@ -6377,14 +6376,17 @@ innodb_mutex_show_status(
Protocol
*
protocol
=
thd
->
protocol
;
List
<
Item
>
field_list
;
mutex_t
*
mutex
;
#ifdef UNIV_DEBUG
ulint
rw_lock_count
=
0
;
ulint
rw_lock_count_spin_loop
=
0
;
ulint
rw_lock_count_spin_rounds
=
0
;
ulint
rw_lock_count_os_wait
=
0
;
ulint
rw_lock_count_os_yield
=
0
;
ulonglong
rw_lock_wait_time
=
0
;
#endif
/* UNIV_DEBUG */
DBUG_ENTER
(
"innodb_mutex_show_status"
);
#ifdef UNIV_DEBUG
field_list
.
push_back
(
new
Item_empty_string
(
"Mutex"
,
FN_REFLEN
));
field_list
.
push_back
(
new
Item_empty_string
(
"Module"
,
FN_REFLEN
));
field_list
.
push_back
(
new
Item_uint
(
"Count"
,
21
));
...
...
@@ -6393,19 +6395,23 @@ innodb_mutex_show_status(
field_list
.
push_back
(
new
Item_uint
(
"OS_waits"
,
21
));
field_list
.
push_back
(
new
Item_uint
(
"OS_yields"
,
21
));
field_list
.
push_back
(
new
Item_uint
(
"OS_waits_time"
,
21
));
#else
/* UNIV_DEBUG */
field_list
.
push_back
(
new
Item_empty_string
(
"File"
,
FN_REFLEN
));
field_list
.
push_back
(
new
Item_uint
(
"Line"
,
21
));
field_list
.
push_back
(
new
Item_uint
(
"OS_waits"
,
21
));
#endif
/* UNIV_DEBUG */
if
(
protocol
->
send_fields
(
&
field_list
,
Protocol
::
SEND_NUM_ROWS
|
Protocol
::
SEND_EOF
))
DBUG_RETURN
(
TRUE
);
#ifdef MUTEX_PROTECT_TO_BE_ADDED_LATER
mutex_enter
(
&
mutex_list_mutex
);
#endif
mutex_enter_noninline
(
&
mutex_list_mutex
);
mutex
=
UT_LIST_GET_FIRST
(
mutex_list
);
while
(
mutex
!=
NULL
)
{
#ifdef UNIV_DEBUG
if
(
mutex
->
mutex_type
!=
1
)
{
if
(
mutex
->
count_using
>
0
)
...
...
@@ -6422,9 +6428,7 @@ innodb_mutex_show_status(
if
(
protocol
->
write
())
{
#ifdef MUTEX_PROTECT_TO_BE_ADDED_LATER
mutex_exit
(
&
mutex_list_mutex
);
#endif
mutex_exit_noninline
(
&
mutex_list_mutex
);
DBUG_RETURN
(
1
);
}
}
...
...
@@ -6438,10 +6442,25 @@ innodb_mutex_show_status(
rw_lock_count_os_yield
+=
mutex
->
count_os_yield
;
rw_lock_wait_time
+=
mutex
->
lspent_time
;
}
#else
/* UNIV_DEBUG */
protocol
->
prepare_for_resend
();
protocol
->
store
(
mutex
->
cfile_name
,
system_charset_info
);
protocol
->
store
((
ulonglong
)
mutex
->
cline
);
protocol
->
store
((
ulonglong
)
mutex
->
count_os_wait
);
if
(
protocol
->
write
())
{
mutex_exit_noninline
(
&
mutex_list_mutex
);
DBUG_RETURN
(
1
);
}
#endif
/* UNIV_DEBUG */
mutex
=
UT_LIST_GET_NEXT
(
list
,
mutex
);
}
mutex_exit_noninline
(
&
mutex_list_mutex
);
#ifdef UNIV_DEBUG
protocol
->
prepare_for_resend
();
protocol
->
store
(
"rw_lock_mutexes"
,
system_charset_info
);
protocol
->
store
(
""
,
system_charset_info
);
...
...
@@ -6456,10 +6475,8 @@ innodb_mutex_show_status(
{
DBUG_RETURN
(
1
);
}
#endif
/* UNIV_DEBUG */
#ifdef MUTEX_PROTECT_TO_BE_ADDED_LATER
mutex_exit
(
&
mutex_list_mutex
);
#endif
send_eof
(
thd
);
DBUG_RETURN
(
FALSE
);
}
...
...
sql/ha_innodb.h
View file @
69a11590
...
...
@@ -216,6 +216,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
my_bool
innobase_very_fast_shutdown
;
/* set this to 1 just before
calling innobase_end() if you want
...
...
sql/item_strfunc.cc
View file @
69a11590
...
...
@@ -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
);
...
...
@@ -2227,25 +2228,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
,
...
...
@@ -2319,15 +2318,14 @@ String *Item_func_rpad::val_str(String *str)
String
*
res
=
args
[
0
]
->
val_str
(
str
);
String
*
rpad
=
args
[
2
]
->
val_str
(
&
rpad_str
);
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
((
count
>
INT_MAX32
)
||
args
[
1
]
->
unsigned_flag
)
if
((
ulonglong
)
count
>
INT_MAX32
)
count
=
INT_MAX32
;
if
(
!
res
||
args
[
1
]
->
null_value
||
!
rpad
||
count
<
0
)
goto
err
;
null_value
=
0
;
if
(
count
<=
(
res_char_length
=
res
->
numchars
()))
{
// String to pad is big enough
res
->
length
(
res
->
charpos
((
int
)
count
));
// Shorten result if longer
...
...
@@ -2421,14 +2419,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
)
...
...
sql/mysqld.cc
View file @
69a11590
...
...
@@ -4692,7 +4692,8 @@ enum options_mysqld
OPT_LOG_SLOW_ADMIN_STATEMENTS
,
OPT_TABLE_LOCK_WAIT_TIMEOUT
,
OPT_PORT_OPEN_TIMEOUT
,
OPT_MERGE
OPT_MERGE
,
OPT_INNODB_ROLLBACK_ON_TIMEOUT
};
...
...
@@ -4968,6 +4969,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
,
...
...
sql/set_var.cc
View file @
69a11590
...
...
@@ -904,6 +904,7 @@ struct show_var_st 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
},
...
...
sql/udf_example.c
View file @
69a11590
...
...
@@ -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
)
?
1
UL
:
0
);
return
0
;
}
...
...
strings/decimal.c
View file @
69a11590
...
...
@@ -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
;
}
...
...
support-files/mysql.spec.sh
View file @
69a11590
...
...
@@ -588,7 +588,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
}
/man
1
/mysqlmanager.8
*
%doc %attr
(
644, root, man
)
%
{
_mandir
}
/man
8
/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
*
...
...
@@ -755,6 +755,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"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment