merge from 5.5 main
This commit is contained in:
commit
8589a3e251
@ -448,7 +448,8 @@ enum ha_base_keytype {
|
|||||||
#define HA_ERR_TOO_MANY_CONCURRENT_TRXS 177 /*Too many active concurrent transactions */
|
#define HA_ERR_TOO_MANY_CONCURRENT_TRXS 177 /*Too many active concurrent transactions */
|
||||||
#define HA_ERR_INDEX_COL_TOO_LONG 178 /* Index column length exceeds limit */
|
#define HA_ERR_INDEX_COL_TOO_LONG 178 /* Index column length exceeds limit */
|
||||||
#define HA_ERR_INDEX_CORRUPT 179 /* Index corrupted */
|
#define HA_ERR_INDEX_CORRUPT 179 /* Index corrupted */
|
||||||
#define HA_ERR_LAST 179 /* Copy of last error nr */
|
#define HA_ERR_UNDO_REC_TOO_BIG 180 /* Undo log record too big */
|
||||||
|
#define HA_ERR_LAST 180 /* Copy of last error nr */
|
||||||
|
|
||||||
/* Number of different errors */
|
/* Number of different errors */
|
||||||
#define HA_ERR_ERRORS (HA_ERR_LAST - HA_ERR_FIRST + 1)
|
#define HA_ERR_ERRORS (HA_ERR_LAST - HA_ERR_FIRST + 1)
|
||||||
|
@ -22,6 +22,11 @@
|
|||||||
extern uint mysql_port;
|
extern uint mysql_port;
|
||||||
extern char * mysql_unix_port;
|
extern char * mysql_unix_port;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Note: CLIENT_CAPABILITIES is also defined in sql/client_settings.h.
|
||||||
|
When adding capabilities here, consider if they should be also added to
|
||||||
|
the server's version.
|
||||||
|
*/
|
||||||
#define CLIENT_CAPABILITIES (CLIENT_LONG_PASSWORD | \
|
#define CLIENT_CAPABILITIES (CLIENT_LONG_PASSWORD | \
|
||||||
CLIENT_LONG_FLAG | \
|
CLIENT_LONG_FLAG | \
|
||||||
CLIENT_TRANSACTIONS | \
|
CLIENT_TRANSACTIONS | \
|
||||||
|
24
mysql-test/r/auth_rpl.result
Normal file
24
mysql-test/r/auth_rpl.result
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
include/master-slave.inc
|
||||||
|
[connection master]
|
||||||
|
[connection slave]
|
||||||
|
include/stop_slave.inc
|
||||||
|
[connection master]
|
||||||
|
CREATE USER 'plug_user' IDENTIFIED WITH 'test_plugin_server' AS 'plug_user';
|
||||||
|
GRANT REPLICATION SLAVE ON *.* TO plug_user;
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
[connection slave]
|
||||||
|
CHANGE MASTER TO
|
||||||
|
MASTER_USER= 'plug_user',
|
||||||
|
MASTER_PASSWORD= 'plug_user';
|
||||||
|
include/start_slave.inc
|
||||||
|
# Slave in-sync with master now.
|
||||||
|
SELECT user, plugin, authentication_string FROM mysql.user WHERE user LIKE 'plug_user';
|
||||||
|
user plugin authentication_string
|
||||||
|
plug_user test_plugin_server plug_user
|
||||||
|
# Cleanup (on slave).
|
||||||
|
include/stop_slave.inc
|
||||||
|
CHANGE MASTER TO MASTER_USER='root';
|
||||||
|
DROP USER 'plug_user';
|
||||||
|
# Cleanup (on master).
|
||||||
|
DROP USER 'plug_user';
|
||||||
|
include/rpl_end.inc
|
@ -2785,5 +2785,40 @@ format(123,2,'no_NO')
|
|||||||
123,00
|
123,00
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
#
|
#
|
||||||
|
# Bug#12985030 SIMPLE QUERY WITH DECIMAL NUMBERS LEAKS MEMORY
|
||||||
|
#
|
||||||
|
SELECT (rpad(1.0,2048,1)) IS NOT FALSE;
|
||||||
|
(rpad(1.0,2048,1)) IS NOT FALSE
|
||||||
|
1
|
||||||
|
SELECT ((+0) IN
|
||||||
|
((0b111111111111111111111111111111111111111111111111111),(rpad(1.0,2048,1)),
|
||||||
|
(32767.1)));
|
||||||
|
((+0) IN
|
||||||
|
((0b111111111111111111111111111111111111111111111111111),(rpad(1.0,2048,1)),
|
||||||
|
(32767.1)))
|
||||||
|
0
|
||||||
|
SELECT ((rpad(1.0,2048,1)) = ('4(') ^ (0.1));
|
||||||
|
((rpad(1.0,2048,1)) = ('4(') ^ (0.1))
|
||||||
|
0
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect INTEGER value: '4('
|
||||||
|
SELECT
|
||||||
|
pow((rpad(1.0,2048,1)),(b'1111111111111111111111111111111111111111111'));
|
||||||
|
ERROR 22003: DOUBLE value is out of range in 'pow(rpad(1.0,2048,1),0x07ffffffffff)'
|
||||||
|
SELECT ((rpad(1.0,2048,1)) + (0) ^ ('../'));
|
||||||
|
((rpad(1.0,2048,1)) + (0) ^ ('../'))
|
||||||
|
1.011111111111111
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect INTEGER value: '../'
|
||||||
|
SELECT stddev_samp(rpad(1.0,2048,1));
|
||||||
|
stddev_samp(rpad(1.0,2048,1))
|
||||||
|
NULL
|
||||||
|
SELECT ((127.1) not in ((rpad(1.0,2048,1)),(''),(-1.1)));
|
||||||
|
((127.1) not in ((rpad(1.0,2048,1)),(''),(-1.1)))
|
||||||
|
1
|
||||||
|
SELECT ((0xf3) * (rpad(1.0,2048,1)) << (0xcc));
|
||||||
|
((0xf3) * (rpad(1.0,2048,1)) << (0xcc))
|
||||||
|
0
|
||||||
|
#
|
||||||
# End of 5.5 tests
|
# End of 5.5 tests
|
||||||
#
|
#
|
||||||
|
@ -118,3 +118,35 @@ Aborted: file is not compressed
|
|||||||
DROP TABLE t1,t2,t3;
|
DROP TABLE t1,t2,t3;
|
||||||
DROP TABLE mysql_db1.t1;
|
DROP TABLE mysql_db1.t1;
|
||||||
DROP DATABASE mysql_db1;
|
DROP DATABASE mysql_db1;
|
||||||
|
#
|
||||||
|
# BUG#11761180 - 53646: MYISAMPACK CORRUPTS TABLES WITH FULLTEXT INDEXES
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(a CHAR(4), FULLTEXT(a));
|
||||||
|
INSERT INTO t1 VALUES('aaaa'),('bbbb'),('cccc');
|
||||||
|
FLUSH TABLE t1;
|
||||||
|
CHECK TABLE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 check status OK
|
||||||
|
SELECT * FROM t1 WHERE MATCH(a) AGAINST('aaaa' IN BOOLEAN MODE);
|
||||||
|
a
|
||||||
|
aaaa
|
||||||
|
SELECT * FROM t1 WHERE MATCH(a) AGAINST('aaaa');
|
||||||
|
a
|
||||||
|
aaaa
|
||||||
|
DROP TABLE t1;
|
||||||
|
# Test table with key_reflength > rec_reflength
|
||||||
|
CREATE TABLE t1(a CHAR(30), FULLTEXT(a));
|
||||||
|
# Populating a table, so it's index file exceeds 65K
|
||||||
|
# Populating a table, so index file has second level fulltext tree
|
||||||
|
FLUSH TABLE t1;
|
||||||
|
# Compressing table
|
||||||
|
# Fixing index (repair by sort)
|
||||||
|
CHECK TABLE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 check status OK
|
||||||
|
FLUSH TABLE t1;
|
||||||
|
# Fixing index (repair with keycache)
|
||||||
|
CHECK TABLE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 check status OK
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -975,6 +975,15 @@ INSERT INTO t1 VALUES(9,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r,@r);
|
|||||||
UPDATE t1 SET a=1000;
|
UPDATE t1 SET a=1000;
|
||||||
DELETE FROM t1;
|
DELETE FROM t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE bug12547647(
|
||||||
|
a INT NOT NULL, b BLOB NOT NULL, c TEXT,
|
||||||
|
PRIMARY KEY (b(10), a), INDEX (c(767)), INDEX(b(767))
|
||||||
|
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
|
||||||
|
INSERT INTO bug12547647 VALUES (5,repeat('khdfo5AlOq',1900),repeat('g',7751));
|
||||||
|
COMMIT;
|
||||||
|
UPDATE bug12547647 SET c = REPEAT('b',16928);
|
||||||
|
ERROR HY000: Undo log record is too big.
|
||||||
|
DROP TABLE bug12547647;
|
||||||
set global innodb_file_per_table=0;
|
set global innodb_file_per_table=0;
|
||||||
set global innodb_file_format=Antelope;
|
set global innodb_file_format=Antelope;
|
||||||
set global innodb_file_format_max=Antelope;
|
set global innodb_file_format_max=Antelope;
|
||||||
|
@ -477,6 +477,19 @@ DELETE FROM t1;
|
|||||||
-- sleep 10
|
-- sleep 10
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
# Bug#12547647 UPDATE LOGGING COULD EXCEED LOG PAGE SIZE
|
||||||
|
CREATE TABLE bug12547647(
|
||||||
|
a INT NOT NULL, b BLOB NOT NULL, c TEXT,
|
||||||
|
PRIMARY KEY (b(10), a), INDEX (c(767)), INDEX(b(767))
|
||||||
|
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
|
||||||
|
|
||||||
|
INSERT INTO bug12547647 VALUES (5,repeat('khdfo5AlOq',1900),repeat('g',7751));
|
||||||
|
COMMIT;
|
||||||
|
# The following used to cause infinite undo log allocation.
|
||||||
|
--error ER_UNDO_RECORD_TOO_BIG
|
||||||
|
UPDATE bug12547647 SET c = REPEAT('b',16928);
|
||||||
|
DROP TABLE bug12547647;
|
||||||
|
|
||||||
eval set global innodb_file_per_table=$per_table;
|
eval set global innodb_file_per_table=$per_table;
|
||||||
eval set global innodb_file_format=$format;
|
eval set global innodb_file_format=$format;
|
||||||
eval set global innodb_file_format_max=$format;
|
eval set global innodb_file_format_max=$format;
|
||||||
|
2
mysql-test/t/auth_rpl-master.opt
Normal file
2
mysql-test/t/auth_rpl-master.opt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
$PLUGIN_AUTH_OPT
|
||||||
|
$PLUGIN_AUTH_LOAD
|
4
mysql-test/t/auth_rpl-slave.opt
Normal file
4
mysql-test/t/auth_rpl-slave.opt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
--master-retry-count=1
|
||||||
|
$PLUGIN_AUTH_OPT
|
||||||
|
$PLUGIN_AUTH_LOAD
|
||||||
|
|
66
mysql-test/t/auth_rpl.test
Normal file
66
mysql-test/t/auth_rpl.test
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
--source include/have_plugin_auth.inc
|
||||||
|
--source include/not_embedded.inc
|
||||||
|
--source include/master-slave.inc
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check that replication slave can connect to master using an account
|
||||||
|
# which authenticates with an external authentication plugin (bug#12897501).
|
||||||
|
|
||||||
|
#
|
||||||
|
# First stop the slave to guarantee that nothing is replicated.
|
||||||
|
#
|
||||||
|
--connection slave
|
||||||
|
--echo [connection slave]
|
||||||
|
--source include/stop_slave.inc
|
||||||
|
#
|
||||||
|
# Create an replication account on the master.
|
||||||
|
#
|
||||||
|
--connection master
|
||||||
|
--echo [connection master]
|
||||||
|
CREATE USER 'plug_user' IDENTIFIED WITH 'test_plugin_server' AS 'plug_user';
|
||||||
|
GRANT REPLICATION SLAVE ON *.* TO plug_user;
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Now go to slave and change the replication user.
|
||||||
|
#
|
||||||
|
--connection slave
|
||||||
|
--echo [connection slave]
|
||||||
|
--let $master_user= query_get_value(SHOW SLAVE STATUS, Master_User, 1)
|
||||||
|
CHANGE MASTER TO
|
||||||
|
MASTER_USER= 'plug_user',
|
||||||
|
MASTER_PASSWORD= 'plug_user';
|
||||||
|
|
||||||
|
#
|
||||||
|
# Start slave with new replication account - this should trigger connection
|
||||||
|
# to the master server.
|
||||||
|
#
|
||||||
|
--source include/start_slave.inc
|
||||||
|
|
||||||
|
# Replicate all statements executed on master, in this case,
|
||||||
|
# (creation of the plug_user account).
|
||||||
|
#
|
||||||
|
--connection master
|
||||||
|
--sync_slave_with_master
|
||||||
|
--echo # Slave in-sync with master now.
|
||||||
|
|
||||||
|
SELECT user, plugin, authentication_string FROM mysql.user WHERE user LIKE 'plug_user';
|
||||||
|
|
||||||
|
#
|
||||||
|
# Now we can stop the slave and clean up.
|
||||||
|
#
|
||||||
|
# Note: it is important that slave is stopped at this
|
||||||
|
# moment - otherwise master's cleanup statements
|
||||||
|
# would be replicated on slave!
|
||||||
|
#
|
||||||
|
--echo # Cleanup (on slave).
|
||||||
|
--source include/stop_slave.inc
|
||||||
|
eval CHANGE MASTER TO MASTER_USER='$master_user';
|
||||||
|
DROP USER 'plug_user';
|
||||||
|
|
||||||
|
--echo # Cleanup (on master).
|
||||||
|
--connection master
|
||||||
|
DROP USER 'plug_user';
|
||||||
|
|
||||||
|
--let $rpl_only_running_threads= 1
|
||||||
|
--source include/rpl_end.inc
|
@ -1436,6 +1436,25 @@ SHOW CREATE TABLE t1;
|
|||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#12985030 SIMPLE QUERY WITH DECIMAL NUMBERS LEAKS MEMORY
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
SELECT (rpad(1.0,2048,1)) IS NOT FALSE;
|
||||||
|
SELECT ((+0) IN
|
||||||
|
((0b111111111111111111111111111111111111111111111111111),(rpad(1.0,2048,1)),
|
||||||
|
(32767.1)));
|
||||||
|
SELECT ((rpad(1.0,2048,1)) = ('4(') ^ (0.1));
|
||||||
|
|
||||||
|
--error 1690
|
||||||
|
SELECT
|
||||||
|
pow((rpad(1.0,2048,1)),(b'1111111111111111111111111111111111111111111'));
|
||||||
|
SELECT ((rpad(1.0,2048,1)) + (0) ^ ('../'));
|
||||||
|
SELECT stddev_samp(rpad(1.0,2048,1));
|
||||||
|
SELECT ((127.1) not in ((rpad(1.0,2048,1)),(''),(-1.1)));
|
||||||
|
SELECT ((0xf3) * (rpad(1.0,2048,1)) << (0xcc));
|
||||||
|
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 5.5 tests
|
--echo # End of 5.5 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -221,3 +221,47 @@ DROP TABLE t1,t2,t3;
|
|||||||
DROP TABLE mysql_db1.t1;
|
DROP TABLE mysql_db1.t1;
|
||||||
DROP DATABASE mysql_db1;
|
DROP DATABASE mysql_db1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # BUG#11761180 - 53646: MYISAMPACK CORRUPTS TABLES WITH FULLTEXT INDEXES
|
||||||
|
--echo #
|
||||||
|
CREATE TABLE t1(a CHAR(4), FULLTEXT(a));
|
||||||
|
INSERT INTO t1 VALUES('aaaa'),('bbbb'),('cccc');
|
||||||
|
FLUSH TABLE t1;
|
||||||
|
--exec $MYISAMPACK -sf $MYSQLD_DATADIR/test/t1
|
||||||
|
--exec $MYISAMCHK -srq $MYSQLD_DATADIR/test/t1
|
||||||
|
CHECK TABLE t1;
|
||||||
|
SELECT * FROM t1 WHERE MATCH(a) AGAINST('aaaa' IN BOOLEAN MODE);
|
||||||
|
SELECT * FROM t1 WHERE MATCH(a) AGAINST('aaaa');
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo # Test table with key_reflength > rec_reflength
|
||||||
|
CREATE TABLE t1(a CHAR(30), FULLTEXT(a));
|
||||||
|
--disable_query_log
|
||||||
|
--echo # Populating a table, so it's index file exceeds 65K
|
||||||
|
let $1=1700;
|
||||||
|
while ($1)
|
||||||
|
{
|
||||||
|
eval INSERT INTO t1 VALUES('$1aaaaaaaaaaaaaaaaaaaaaaaaaa');
|
||||||
|
dec $1;
|
||||||
|
}
|
||||||
|
|
||||||
|
--echo # Populating a table, so index file has second level fulltext tree
|
||||||
|
let $1=60;
|
||||||
|
while ($1)
|
||||||
|
{
|
||||||
|
eval INSERT INTO t1 VALUES('aaaa'),('aaaa'),('aaaa'),('aaaa'),('aaaa');
|
||||||
|
dec $1;
|
||||||
|
}
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
FLUSH TABLE t1;
|
||||||
|
--echo # Compressing table
|
||||||
|
--exec $MYISAMPACK -sf $MYSQLD_DATADIR/test/t1
|
||||||
|
--echo # Fixing index (repair by sort)
|
||||||
|
--exec $MYISAMCHK -srnq $MYSQLD_DATADIR/test/t1
|
||||||
|
CHECK TABLE t1;
|
||||||
|
FLUSH TABLE t1;
|
||||||
|
--echo # Fixing index (repair with keycache)
|
||||||
|
--exec $MYISAMCHK -soq $MYSQLD_DATADIR/test/t1
|
||||||
|
CHECK TABLE t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -880,13 +880,16 @@
|
|||||||
# Note the wildcard in the (mangled) function signatures of
|
# Note the wildcard in the (mangled) function signatures of
|
||||||
# write_keys() and find_all_keys().
|
# write_keys() and find_all_keys().
|
||||||
# They both return ha_rows, which is platform dependent.
|
# They both return ha_rows, which is platform dependent.
|
||||||
|
#
|
||||||
|
# The '...' wildcards are for 'fun:inline_mysql_file_write' which *may*
|
||||||
|
# be inlined.
|
||||||
{
|
{
|
||||||
Bug#12856915 VALGRIND FAILURE IN FILESORT/CREATE_SORT_INDEX / one
|
Bug#12856915 VALGRIND FAILURE IN FILESORT/CREATE_SORT_INDEX / one
|
||||||
Memcheck:Param
|
Memcheck:Param
|
||||||
write(buf)
|
write(buf)
|
||||||
obj:*/libpthread*.so
|
obj:*/libpthread*.so
|
||||||
fun:my_write
|
fun:my_write
|
||||||
fun:inline_mysql_file_write
|
...
|
||||||
fun:my_b_flush_io_cache
|
fun:my_b_flush_io_cache
|
||||||
fun:_my_b_write
|
fun:_my_b_write
|
||||||
fun:_Z*10write_keysP13st_sort_paramPPhjP11st_io_cacheS4_
|
fun:_Z*10write_keysP13st_sort_paramPPhjP11st_io_cacheS4_
|
||||||
@ -894,16 +897,17 @@
|
|||||||
fun:_Z8filesortP3THDP5TABLEP13st_sort_fieldjP10SQL_SELECTybPy
|
fun:_Z8filesortP3THDP5TABLEP13st_sort_fieldjP10SQL_SELECTybPy
|
||||||
}
|
}
|
||||||
|
|
||||||
## {
|
{
|
||||||
## Bug#12856915 VALGRIND FAILURE IN FILESORT/CREATE_SORT_INDEX / two
|
Bug#12856915 VALGRIND FAILURE IN FILESORT/CREATE_SORT_INDEX / two
|
||||||
## Memcheck:Param
|
Memcheck:Param
|
||||||
## write(buf)
|
write(buf)
|
||||||
## obj:*/libpthread*.so
|
obj:*/libpthread*.so
|
||||||
## fun:my_write
|
fun:my_write
|
||||||
## fun:my_b_flush_io_cache
|
...
|
||||||
## fun:_Z15merge_many_buffP13st_sort_paramPhP10st_buffpekPjP11st_io_cache
|
fun:my_b_flush_io_cache
|
||||||
## fun:_Z8filesortP3THDP8st_tableP13st_sort_fieldjP10SQL_SELECTybPy
|
fun:_Z15merge_many_buffP13st_sort_paramPhP10st_buffpekPjP11st_io_cache
|
||||||
## }
|
fun:_Z8filesortP3THDP5TABLEP13st_sort_fieldjP10SQL_SELECTybPy
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
Bug#12856915 VALGRIND FAILURE IN FILESORT/CREATE_SORT_INDEX / three
|
Bug#12856915 VALGRIND FAILURE IN FILESORT/CREATE_SORT_INDEX / three
|
||||||
@ -911,7 +915,7 @@
|
|||||||
write(buf)
|
write(buf)
|
||||||
obj:*/libpthread*.so
|
obj:*/libpthread*.so
|
||||||
fun:my_write
|
fun:my_write
|
||||||
fun:inline_mysql_file_write
|
...
|
||||||
fun:my_b_flush_io_cache
|
fun:my_b_flush_io_cache
|
||||||
fun:_Z8filesortP3THDP5TABLEP13st_sort_fieldjP10SQL_SELECTybPy
|
fun:_Z8filesortP3THDP5TABLEP13st_sort_fieldjP10SQL_SELECTybPy
|
||||||
}
|
}
|
||||||
|
@ -82,7 +82,8 @@ static const char *handler_error_messages[]=
|
|||||||
"Read page with wrong checksum",
|
"Read page with wrong checksum",
|
||||||
"Too many active concurrent transactions",
|
"Too many active concurrent transactions",
|
||||||
"Index column length exceeds limit",
|
"Index column length exceeds limit",
|
||||||
"Index corrupted"
|
"Index corrupted",
|
||||||
|
"Undo record too big"
|
||||||
};
|
};
|
||||||
|
|
||||||
extern void my_handler_error_register(void);
|
extern void my_handler_error_register(void);
|
||||||
|
@ -312,18 +312,18 @@ int ActiveTranx::clear_active_tranx_nodes(const char *log_file_name,
|
|||||||
* The most important functions during semi-syn replication listed:
|
* The most important functions during semi-syn replication listed:
|
||||||
*
|
*
|
||||||
* Master:
|
* Master:
|
||||||
* . reportReplyBinlog(): called by the binlog dump thread when it receives
|
* . reportReplyBinlog(): called by the binlog dump thread when it receives
|
||||||
* the slave's status information.
|
* the slave's status information.
|
||||||
* . updateSyncHeader(): based on transaction waiting information, decide
|
* . updateSyncHeader(): based on transaction waiting information, decide
|
||||||
* whether to request the slave to reply.
|
* whether to request the slave to reply.
|
||||||
* . writeTraxInBinlog(): called by the transaction thread when it finishes
|
* . writeTranxInBinlog(): called by the transaction thread when it finishes
|
||||||
* writing all transaction events in binlog.
|
* writing all transaction events in binlog.
|
||||||
* . commitTrx(): transaction thread wait for the slave reply.
|
* . commitTrx(): transaction thread wait for the slave reply.
|
||||||
*
|
*
|
||||||
* Slave:
|
* Slave:
|
||||||
* . slaveReadSyncHeader(): read the semi-sync header from the master, get the
|
* . slaveReadSyncHeader(): read the semi-sync header from the master, get the
|
||||||
* sync status and get the payload for events.
|
* sync status and get the payload for events.
|
||||||
* . slaveReply(): reply to the master about the replication progress.
|
* . slaveReply(): reply to the master about the replication progress.
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
@ -65,7 +65,7 @@ ADD_CUSTOM_TARGET(GenFixPrivs
|
|||||||
|
|
||||||
IF(UNIX)
|
IF(UNIX)
|
||||||
FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/make_binary_distribution
|
FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/make_binary_distribution
|
||||||
"cd ${CMAKE_BINARY_DIR} && '${CMAKE_CPACK_COMMAND}' -G TGZ --config CPackConfig.cmake" )
|
"cd ${CMAKE_BINARY_DIR} && '${CMAKE_CPACK_COMMAND}' -G TGZ --config CPackConfig.cmake\n" )
|
||||||
EXECUTE_PROCESS(
|
EXECUTE_PROCESS(
|
||||||
COMMAND chmod +x ${CMAKE_CURRENT_BINARY_DIR}/make_binary_distribution
|
COMMAND chmod +x ${CMAKE_CURRENT_BINARY_DIR}/make_binary_distribution
|
||||||
)
|
)
|
||||||
@ -104,11 +104,11 @@ IF(UNIX)
|
|||||||
# FIND_PROC and CHECK_PID are used by mysqld_safe
|
# FIND_PROC and CHECK_PID are used by mysqld_safe
|
||||||
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||||
SET (FIND_PROC
|
SET (FIND_PROC
|
||||||
"ps wwwp $PID | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"$MYSQLD\" > /dev/null")
|
"ps wwwp $PID | grep -v mysqld_safe | grep -- $MYSQLD > /dev/null")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
IF(NOT FIND_PROC AND CMAKE_SYSTEM_NAME MATCHES "SunOS")
|
IF(NOT FIND_PROC AND CMAKE_SYSTEM_NAME MATCHES "SunOS")
|
||||||
SET (FIND_PROC
|
SET (FIND_PROC
|
||||||
"ps -p $PID | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"$MYSQLD\" > /dev/null")
|
"ps -p $PID | grep -v mysqld_safe | grep -- $MYSQLD > /dev/null")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF(NOT FIND_PROC)
|
IF(NOT FIND_PROC)
|
||||||
@ -116,7 +116,7 @@ IF(NOT FIND_PROC)
|
|||||||
EXECUTE_PROCESS(COMMAND ps -uaxww OUTPUT_QUIET ERROR_QUIET RESULT_VARIABLE result)
|
EXECUTE_PROCESS(COMMAND ps -uaxww OUTPUT_QUIET ERROR_QUIET RESULT_VARIABLE result)
|
||||||
IF(result MATCHES 0)
|
IF(result MATCHES 0)
|
||||||
SET( FIND_PROC
|
SET( FIND_PROC
|
||||||
"ps -uaxww | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"$MYSQLD\" | grep \" $PID \" > /dev/null")
|
"ps -uaxww | grep -v mysqld_safe | grep -- $MYSQLD | grep $PID > /dev/null")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
@ -124,7 +124,7 @@ IF(NOT FIND_PROC)
|
|||||||
# SysV style
|
# SysV style
|
||||||
EXECUTE_PROCESS(COMMAND ps -ef OUTPUT_QUIET ERROR_QUIET RESULT_VARIABLE result)
|
EXECUTE_PROCESS(COMMAND ps -ef OUTPUT_QUIET ERROR_QUIET RESULT_VARIABLE result)
|
||||||
IF(result MATCHES 0)
|
IF(result MATCHES 0)
|
||||||
SET( FIND_PROC "ps -ef | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"$MYSQLD\" | grep \" $PID \" > /dev/null")
|
SET( FIND_PROC "ps -ef | grep -v mysqld_safe | grep -- $MYSQLD | grep $PID > /dev/null")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
@ -1,342 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; version 2 of the License.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
|
|
||||||
##############################################################################
|
|
||||||
#
|
|
||||||
# This is a script to create a TAR or ZIP binary distribution out of a
|
|
||||||
# built source tree. The output file will be put at the top level of
|
|
||||||
# the source tree, as "mysql-<vsn>....{tar.gz,zip}"
|
|
||||||
#
|
|
||||||
# Note that the structure created by this script is slightly different from
|
|
||||||
# what a normal "make install" would produce. No extra "mysql" sub directory
|
|
||||||
# will be created, i.e. no "$prefix/include/mysql", "$prefix/lib/mysql" or
|
|
||||||
# "$prefix/share/mysql". This is because the build system explicitly calls
|
|
||||||
# make with pkgdatadir=<datadir>, etc.
|
|
||||||
#
|
|
||||||
# In GNU make/automake terms
|
|
||||||
#
|
|
||||||
# "pkglibdir" is set to the same as "libdir"
|
|
||||||
# "pkgincludedir" is set to the same as "includedir"
|
|
||||||
# "pkgdatadir" is set to the same as "datadir"
|
|
||||||
# "pkgplugindir" is set to "$pkglibdir/plugin"
|
|
||||||
# "pkgsuppdir" is set to "@prefix@/support-files",
|
|
||||||
# normally the same as "datadir"
|
|
||||||
#
|
|
||||||
# The temporary directory path given to "--tmp=<path>" has to be
|
|
||||||
# absolute and with no spaces.
|
|
||||||
#
|
|
||||||
# Note that for best result, the original "make" should be done with
|
|
||||||
# the same arguments as used for "make install" below, especially the
|
|
||||||
# 'pkglibdir', as the RPATH should to be set correctly.
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
##############################################################################
|
|
||||||
#
|
|
||||||
# Read the command line arguments that control this script
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
machine=@MACHINE_TYPE@
|
|
||||||
system=@SYSTEM_TYPE@
|
|
||||||
SOURCE=`pwd`
|
|
||||||
CP="cp -p"
|
|
||||||
MV="mv"
|
|
||||||
|
|
||||||
# There are platforms, notably OS X on Intel (x86 + x86_64),
|
|
||||||
# for which "uname" does not provide sufficient information.
|
|
||||||
# The value of CFLAGS as used during compilation is the most exact info
|
|
||||||
# we can get - after all, we care about _what_ we built, not _where_ we did it.
|
|
||||||
cflags="@CFLAGS@"
|
|
||||||
|
|
||||||
STRIP=1 # Option ignored
|
|
||||||
SILENT=0
|
|
||||||
MALLOC_LIB=
|
|
||||||
PLATFORM=""
|
|
||||||
TMP=/tmp
|
|
||||||
NEW_NAME="" # Final top directory and TAR package name
|
|
||||||
SUFFIX=""
|
|
||||||
SHORT_PRODUCT_TAG="" # If don't want server suffix in package name
|
|
||||||
NDBCLUSTER="" # Option ignored
|
|
||||||
|
|
||||||
for arg do
|
|
||||||
case "$arg" in
|
|
||||||
--tmp=*) TMP=`echo "$arg" | sed -e "s;--tmp=;;"` ;;
|
|
||||||
--suffix=*) SUFFIX=`echo "$arg" | sed -e "s;--suffix=;;"` ;;
|
|
||||||
--short-product-tag=*) SHORT_PRODUCT_TAG=`echo "$arg" | sed -e "s;--short-product-tag=;;"` ;;
|
|
||||||
--inject-malloc-lib=*) MALLOC_LIB=`echo "$arg" | sed -e 's;^[^=]*=;;'` ;;
|
|
||||||
--no-strip) STRIP=0 ;;
|
|
||||||
--machine=*) machine=`echo "$arg" | sed -e "s;--machine=;;"` ;;
|
|
||||||
--platform=*) PLATFORM=`echo "$arg" | sed -e "s;--platform=;;"` ;;
|
|
||||||
--silent) SILENT=1 ;;
|
|
||||||
--with-ndbcluster) NDBCLUSTER=1 ;;
|
|
||||||
*)
|
|
||||||
echo "Unknown argument '$arg'"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Adjust "system" output from "uname" to be more human readable
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
if [ x"$PLATFORM" = x"" ] ; then
|
|
||||||
# FIXME move this to the build tools
|
|
||||||
# Remove vendor from $system
|
|
||||||
system=`echo $system | sed -e 's/[a-z]*-\(.*\)/\1/g'`
|
|
||||||
|
|
||||||
# Map OS names to "our" OS names (eg. darwin6.8 -> osx10.2)
|
|
||||||
system=`echo $system | sed -e 's/darwin6.*/osx10.2/g'`
|
|
||||||
system=`echo $system | sed -e 's/darwin7.*/osx10.3/g'`
|
|
||||||
system=`echo $system | sed -e 's/darwin8.*/osx10.4/g'`
|
|
||||||
system=`echo $system | sed -e 's/darwin9.*/osx10.5/g'`
|
|
||||||
system=`echo $system | sed -e 's/\(aix4.3\).*/\1/g'`
|
|
||||||
system=`echo $system | sed -e 's/\(aix5.1\).*/\1/g'`
|
|
||||||
system=`echo $system | sed -e 's/\(aix5.2\).*/\1/g'`
|
|
||||||
system=`echo $system | sed -e 's/\(aix5.3\).*/\1/g'`
|
|
||||||
system=`echo $system | sed -e 's/osf5.1b/tru64/g'`
|
|
||||||
system=`echo $system | sed -e 's/linux-gnu/linux/g'`
|
|
||||||
system=`echo $system | sed -e 's/solaris2.\([0-9]*\)/solaris\1/g'`
|
|
||||||
system=`echo $system | sed -e 's/sco3.2v\(.*\)/openserver\1/g'`
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Get the "machine", which really is the CPU architecture (including the size).
|
|
||||||
# The precedence is:
|
|
||||||
# 1) use an explicit argument, if given;
|
|
||||||
# 2) use platform-specific fixes, if there are any (see bug#37808);
|
|
||||||
# 3) stay with the default (determined during "configure", using predefined macros).
|
|
||||||
|
|
||||||
if [ x"$MACHINE" != x"" ] ; then
|
|
||||||
machine=$MACHINE
|
|
||||||
else
|
|
||||||
case $system in
|
|
||||||
osx* )
|
|
||||||
# Extract "XYZ" from CFLAGS "... -arch XYZ ...", or empty!
|
|
||||||
cflag_arch=`echo "$cflags" | sed -n -e 's=.* -arch \([^ ]*\) .*=\1=p'`
|
|
||||||
case "$cflag_arch" in
|
|
||||||
i386 ) case $system in
|
|
||||||
osx10.4 ) machine=i686 ;; # Used a different naming
|
|
||||||
* ) machine=x86 ;;
|
|
||||||
esac ;;
|
|
||||||
x86_64 ) machine=x86_64 ;;
|
|
||||||
ppc ) ;; # No treatment needed with PPC
|
|
||||||
ppc64 ) ;;
|
|
||||||
* ) # No matching compiler flag? "--platform" is needed
|
|
||||||
if [ x"$PLATFORM" != x"" ] ; then
|
|
||||||
: # See below: "$PLATFORM" will take precedence anyway
|
|
||||||
elif [ "$system" = "osx10.3" -a -z "$cflag_arch" ] ; then
|
|
||||||
: # Special case of OS X 10.3, which is PPC-32 only and doesn't use "-arch"
|
|
||||||
else
|
|
||||||
echo "On system '$system' only specific '-arch' values are expected."
|
|
||||||
echo "It is taken from the 'CFLAGS' whose value is:"
|
|
||||||
echo "$cflags"
|
|
||||||
echo "'-arch $cflag_arch' is unexpected, and no '--platform' was given: ABORT"
|
|
||||||
exit 1
|
|
||||||
fi ;;
|
|
||||||
esac # "$cflag_arch"
|
|
||||||
;;
|
|
||||||
esac # $system
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Combine OS and CPU to the "platform". Again, an explicit argument takes precedence.
|
|
||||||
if [ x"$PLATFORM" != x"" ] ; then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
PLATFORM="$system-$machine"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Print the platform name for build logs
|
|
||||||
echo "PLATFORM NAME: $PLATFORM"
|
|
||||||
|
|
||||||
# Change the distribution to a long descriptive name
|
|
||||||
# For the cluster product, concentrate on the second part
|
|
||||||
VERSION_NAME=@VERSION@
|
|
||||||
case $VERSION_NAME in
|
|
||||||
*-ndb-* ) VERSION_NAME=`echo $VERSION_NAME | sed -e 's/[.0-9]*-ndb-//'` ;;
|
|
||||||
esac
|
|
||||||
if [ x"$SHORT_PRODUCT_TAG" != x"" ] ; then
|
|
||||||
NEW_NAME=mysql-$SHORT_PRODUCT_TAG-$VERSION_NAME-$PLATFORM$SUFFIX
|
|
||||||
else
|
|
||||||
NEW_NAME=mysql@MYSQL_SERVER_SUFFIX@-$VERSION_NAME-$PLATFORM$SUFFIX
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Define BASE, and remove the old BASE directory if any
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
BASE=$TMP/my_dist$SUFFIX
|
|
||||||
if [ -d $BASE ] ; then
|
|
||||||
rm -rf $BASE
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Find the TAR to use
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
# This is needed to prefer GNU tar over platform tar because that can't
|
|
||||||
# always handle long filenames
|
|
||||||
|
|
||||||
PATH_DIRS=`echo $PATH | \
|
|
||||||
sed -e 's/^:/. /' -e 's/:$/ ./' -e 's/::/ . /g' -e 's/:/ /g' `
|
|
||||||
|
|
||||||
which_1 ()
|
|
||||||
{
|
|
||||||
for cmd
|
|
||||||
do
|
|
||||||
for d in $PATH_DIRS
|
|
||||||
do
|
|
||||||
for file in $d/$cmd
|
|
||||||
do
|
|
||||||
if [ -x $file -a ! -d $file ] ; then
|
|
||||||
echo $file
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done
|
|
||||||
done
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
tar=`which_1 gnutar gtar`
|
|
||||||
if [ $? -ne 0 -o x"$tar" = x"" ] ; then
|
|
||||||
tar=tar
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
##############################################################################
|
|
||||||
#
|
|
||||||
# Handle the Unix/Linux packaging using "make install"
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Terminate on any base level error
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Really ugly, one script, "mysql_install_db", needs prefix set to ".",
|
|
||||||
# i.e. makes access relative the current directory. This matches
|
|
||||||
# the documentation, so better not change this. And for another script,
|
|
||||||
# "mysql.server", we make some relative, others not.
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
cd scripts
|
|
||||||
rm -f mysql_install_db
|
|
||||||
@MAKE@ mysql_install_db \
|
|
||||||
prefix=. \
|
|
||||||
bindir=./bin \
|
|
||||||
sbindir=./bin \
|
|
||||||
scriptdir=./bin \
|
|
||||||
libexecdir=./bin \
|
|
||||||
pkgdatadir=./share \
|
|
||||||
localstatedir=./data
|
|
||||||
cd ..
|
|
||||||
|
|
||||||
cd support-files
|
|
||||||
rm -f mysql.server
|
|
||||||
@MAKE@ mysql.server \
|
|
||||||
bindir=./bin \
|
|
||||||
sbindir=./bin \
|
|
||||||
scriptdir=./bin \
|
|
||||||
libexecdir=./bin \
|
|
||||||
pkgdatadir=@pkgdatadir@
|
|
||||||
cd ..
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Do a install that we later are to pack. Use the same paths as in
|
|
||||||
# the build for the relevant directories.
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
@MAKE@ DESTDIR=$BASE install \
|
|
||||||
pkglibdir=@pkglibdir@ \
|
|
||||||
pkgincludedir=@pkgincludedir@ \
|
|
||||||
pkgdatadir=@pkgdatadir@ \
|
|
||||||
pkgplugindir=@pkgplugindir@ \
|
|
||||||
pkgsuppdir=@pkgsuppdir@ \
|
|
||||||
mandir=@mandir@ \
|
|
||||||
infodir=@infodir@
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Rename top directory, and set DEST to the new directory
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
mv $BASE@prefix@ $BASE/$NEW_NAME
|
|
||||||
DEST=$BASE/$NEW_NAME
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# If we compiled with gcc, copy libgcc.a to the dist as libmygcc.a
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
if [ x"@GXX@" = x"yes" ] ; then
|
|
||||||
gcclib=`@CC@ @CFLAGS@ --print-libgcc-file 2>/dev/null` || true
|
|
||||||
if [ -z "$gcclib" ] ; then
|
|
||||||
echo "Warning: Compiler doesn't tell libgcc.a!"
|
|
||||||
elif [ -f "$gcclib" ] ; then
|
|
||||||
$CP $gcclib $DEST/lib/libmygcc.a
|
|
||||||
else
|
|
||||||
echo "Warning: Compiler result '$gcclib' not found / no file!"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If requested, add a malloc library .so into pkglibdir for use
|
|
||||||
# by mysqld_safe
|
|
||||||
if [ -n "$MALLOC_LIB" ]; then
|
|
||||||
cp "$MALLOC_LIB" "$DEST/lib/"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# FIXME let this script be in "bin/", where it is in the RPMs?
|
|
||||||
# http://dev.mysql.com/doc/refman/5.1/en/mysql-install-db-problems.html
|
|
||||||
mkdir $DEST/scripts
|
|
||||||
mv $DEST/bin/mysql_install_db $DEST/scripts/
|
|
||||||
|
|
||||||
# Note, no legacy "safe_mysqld" link to "mysqld_safe" in 5.1
|
|
||||||
|
|
||||||
# Copy readme and license files
|
|
||||||
cp README Docs/INSTALL-BINARY $DEST/
|
|
||||||
if [ -f COPYING ] ; then
|
|
||||||
cp COPYING $DEST/
|
|
||||||
elif [ -f LICENSE.mysql ] ; then
|
|
||||||
cp LICENSE.mysql $DEST/
|
|
||||||
else
|
|
||||||
echo "ERROR: no license files found"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# FIXME should be handled by make file, and to other dir
|
|
||||||
mkdir -p $DEST/bin $DEST/support-files
|
|
||||||
cp scripts/mysqlaccess.conf $DEST/bin/
|
|
||||||
cp support-files/magic $DEST/support-files/
|
|
||||||
|
|
||||||
# Create empty data directories, set permission (FIXME why?)
|
|
||||||
mkdir $DEST/data $DEST/data/mysql $DEST/data/test
|
|
||||||
chmod o-rwx $DEST/data $DEST/data/mysql $DEST/data/test
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Create the result tar file
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
echo "Using $tar to create archive"
|
|
||||||
OPT=cvf
|
|
||||||
if [ x$SILENT = x1 ] ; then
|
|
||||||
OPT=cf
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Creating and compressing archive"
|
|
||||||
rm -f $NEW_NAME.tar.gz
|
|
||||||
(cd $BASE ; $tar $OPT - $NEW_NAME) | gzip -9 > $NEW_NAME.tar.gz
|
|
||||||
echo "$NEW_NAME.tar.gz created"
|
|
||||||
|
|
||||||
echo "Removing temporary directory"
|
|
||||||
rm -rf $BASE
|
|
||||||
exit 0
|
|
@ -1,425 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; version 2 of the License.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
|
|
||||||
# Exit if failing to copy, we want exact specifications, not
|
|
||||||
# just "what happen to be built".
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Read first argument that is the base name of the resulting TAR file.
|
|
||||||
# See usage() function below for a description on the arguments.
|
|
||||||
#
|
|
||||||
# NOTE: We will read the rest of the command line later on.
|
|
||||||
# NOTE: Pattern matching with "{..,..}" can't be used, not portable.
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
# FIXME why "libmysql.dll" installed both in "bin" and "lib/opt"?
|
|
||||||
|
|
||||||
usage()
|
|
||||||
{
|
|
||||||
echo <<EOF
|
|
||||||
Usage: make_win_bin_dist [ options ] package-base-name [ copy-defs... ]
|
|
||||||
|
|
||||||
This is a script to run from the top of a source tree built on Windows.
|
|
||||||
The "package-base-name" argument should be something like
|
|
||||||
|
|
||||||
mysql-noinstall-5.0.25-win32 (or winx64)
|
|
||||||
|
|
||||||
and will become the name of the directory of the unpacked ZIP (stripping
|
|
||||||
away the "noinstall" part of the ZIP file name if any) and the base
|
|
||||||
for the resulting package name.
|
|
||||||
|
|
||||||
Options are
|
|
||||||
|
|
||||||
--embedded Pack the embedded server and give error if not built.
|
|
||||||
The default is to pack it if it is built.
|
|
||||||
|
|
||||||
--no-embedded Don't pack the embedded server even if built
|
|
||||||
|
|
||||||
--debug Pack the debug binaries and give error if not built.
|
|
||||||
The default is to pack them if they are built.
|
|
||||||
|
|
||||||
--no-debug Don't pack the debug binaries even if built
|
|
||||||
|
|
||||||
--only-debug The target for this build was "Debug", and we just
|
|
||||||
want to replace the normal binaries with debug
|
|
||||||
versions, i.e. no separate "debug" directories.
|
|
||||||
|
|
||||||
--exe-suffix=SUF Add a suffix to the filename part of the "mysqld" binary.
|
|
||||||
|
|
||||||
As you might want to include files of directories from other builds
|
|
||||||
(like a "mysqld-max.exe" server), you can instruct this script to copy
|
|
||||||
them in for you. This is the "copy-def" arguments, and they are of the
|
|
||||||
form
|
|
||||||
|
|
||||||
relative-dest-name=source-name .....
|
|
||||||
|
|
||||||
i.e. can be something like
|
|
||||||
|
|
||||||
bin/mysqld-max.exe=../my-max-build/sql/release/mysqld.exe
|
|
||||||
|
|
||||||
If you specify a directory the whole directory will be copied.
|
|
||||||
|
|
||||||
EOF
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# We need to be at the top of a source tree, check that we are
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
if [ ! -d "sql" ] ; then
|
|
||||||
echo "You need to run this script from inside the source tree"
|
|
||||||
usage
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Actual argument processing, first part
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
NOINST_NAME=""
|
|
||||||
TARGET="release"
|
|
||||||
PACK_EMBEDDED="" # Could be "no", "yes" or empty
|
|
||||||
PACK_DEBUG="" # Could be "no", "yes" or empty
|
|
||||||
EXE_SUFFIX=""
|
|
||||||
|
|
||||||
for arg do
|
|
||||||
shift
|
|
||||||
case "$arg" in
|
|
||||||
--embedded) PACK_EMBEDDED="yes" ;;
|
|
||||||
--no-embedded) PACK_EMBEDDED="no" ;;
|
|
||||||
--debug) PACK_DEBUG="yes" ;;
|
|
||||||
--no-debug) PACK_DEBUG="no" ;;
|
|
||||||
--only-debug) TARGET="debug" ; PACK_DEBUG="no" ;;
|
|
||||||
--exe-suffix=*) EXE_SUFFIX=`echo "$arg" | sed -e "s,--exe-suffix=,,"` ;;
|
|
||||||
-*)
|
|
||||||
echo "Unknown argument '$arg'"
|
|
||||||
usage
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
NOINST_NAME="$arg"
|
|
||||||
break
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ x"$NOINST_NAME" = x"" ] ; then
|
|
||||||
echo "No base package name given"
|
|
||||||
usage
|
|
||||||
fi
|
|
||||||
DESTDIR=`echo $NOINST_NAME | sed 's/-noinstall-/-/'`
|
|
||||||
|
|
||||||
if [ -e $DESTDIR ] ; then
|
|
||||||
echo "Please remove the old $DESTDIR before running this script"
|
|
||||||
usage
|
|
||||||
fi
|
|
||||||
|
|
||||||
trap 'echo "Cleaning up and exiting..." ; rm -fr $DESTDIR; exit 1' ERR
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Adjust target name if needed, release with debug info has another name
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
if [ x"$TARGET" = x"release" -a -f "client/relwithdebinfo/mysql.exe" ]
|
|
||||||
then
|
|
||||||
TARGET="relwithdebinfo"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Copy executables, and client DLL
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
mkdir $DESTDIR
|
|
||||||
mkdir $DESTDIR/bin
|
|
||||||
cp client/$TARGET/*.exe $DESTDIR/bin/
|
|
||||||
cp extra/$TARGET/*.exe $DESTDIR/bin/
|
|
||||||
cp storage/myisam/$TARGET/*.exe $DESTDIR/bin/
|
|
||||||
if [ x"$TARGET" != x"release" ] ; then
|
|
||||||
cp client/$TARGET/mysql.pdb $DESTDIR/bin/
|
|
||||||
cp client/$TARGET/mysqladmin.pdb $DESTDIR/bin/
|
|
||||||
cp client/$TARGET/mysqlbinlog.pdb $DESTDIR/bin/
|
|
||||||
cp client/$TARGET/mysqldump.pdb $DESTDIR/bin/
|
|
||||||
cp client/$TARGET/mysqlimport.pdb $DESTDIR/bin/
|
|
||||||
cp client/$TARGET/mysqlshow.pdb $DESTDIR/bin/
|
|
||||||
fi
|
|
||||||
cp tests/$TARGET/*.exe $DESTDIR/bin/
|
|
||||||
cp libmysql/$TARGET/libmysql.dll $DESTDIR/bin/
|
|
||||||
|
|
||||||
cp sql/$TARGET/mysqld.exe $DESTDIR/bin/mysqld$EXE_SUFFIX.exe
|
|
||||||
if [ x"$TARGET" != x"release" ] ; then
|
|
||||||
cp sql/$TARGET/mysqld.pdb $DESTDIR/bin/mysqld$EXE_SUFFIX.pdb
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ x"$PACK_DEBUG" = x"" -a -f "sql/debug/mysqld.exe" -o \
|
|
||||||
x"$PACK_DEBUG" = x"yes" ] ; then
|
|
||||||
cp sql/debug/mysqld.exe $DESTDIR/bin/mysqld-debug.exe
|
|
||||||
cp sql/debug/mysqld.pdb $DESTDIR/bin/mysqld-debug.pdb
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Copy data directory, readme files etc
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
if [ -d win/data ] ; then
|
|
||||||
cp -pR win/data $DESTDIR/
|
|
||||||
fi
|
|
||||||
|
|
||||||
mkdir $DESTDIR/Docs
|
|
||||||
cp Docs/INSTALL-BINARY $DESTDIR/Docs/
|
|
||||||
cp Docs/manual.chm $DESTDIR/Docs/ || /bin/true
|
|
||||||
cp ChangeLog $DESTDIR/Docs/ || /bin/true
|
|
||||||
cp support-files/my-*.ini $DESTDIR/
|
|
||||||
cp README $DESTDIR/
|
|
||||||
|
|
||||||
if [ -f COPYING ] ; then
|
|
||||||
cp COPYING $DESTDIR/
|
|
||||||
cp COPYING $DESTDIR/Docs/
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# These will be filled in when we enable embedded. Note that if no
|
|
||||||
# argument is given, it is copied if exists, else a check is done.
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
copy_embedded()
|
|
||||||
{
|
|
||||||
mkdir -p $DESTDIR/Embedded/DLL/release \
|
|
||||||
$DESTDIR/Embedded/static/release \
|
|
||||||
$DESTDIR/include
|
|
||||||
cp libmysqld/libmysqld.def $DESTDIR/include/
|
|
||||||
cp libmysqld/$TARGET/mysqlserver.lib $DESTDIR/Embedded/static/release/
|
|
||||||
cp libmysqld/$TARGET/libmysqld.dll $DESTDIR/Embedded/DLL/release/
|
|
||||||
cp libmysqld/$TARGET/libmysqld.exp $DESTDIR/Embedded/DLL/release/
|
|
||||||
cp libmysqld/$TARGET/libmysqld.lib $DESTDIR/Embedded/DLL/release/
|
|
||||||
if [ x"$TARGET" != x"release" ] ; then
|
|
||||||
cp libmysqld/$TARGET/mysqlserver.pdb $DESTDIR/Embedded/static/release/
|
|
||||||
cp libmysqld/$TARGET/libmysqld.pdb $DESTDIR/Embedded/DLL/release/
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ x"$PACK_DEBUG" = x"" -a -f "libmysqld/debug/libmysqld.lib" -o \
|
|
||||||
x"$PACK_DEBUG" = x"yes" ] ; then
|
|
||||||
mkdir -p $DESTDIR/Embedded/DLL/debug \
|
|
||||||
$DESTDIR/Embedded/static/debug
|
|
||||||
cp libmysqld/debug/mysqlserver.lib $DESTDIR/Embedded/static/debug/
|
|
||||||
cp libmysqld/debug/mysqlserver.pdb $DESTDIR/Embedded/static/debug/
|
|
||||||
cp libmysqld/debug/libmysqld.dll $DESTDIR/Embedded/DLL/debug/
|
|
||||||
cp libmysqld/debug/libmysqld.exp $DESTDIR/Embedded/DLL/debug/
|
|
||||||
cp libmysqld/debug/libmysqld.lib $DESTDIR/Embedded/DLL/debug/
|
|
||||||
cp libmysqld/debug/libmysqld.pdb $DESTDIR/Embedded/DLL/debug/
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ x"$PACK_EMBEDDED" = x"" -a \
|
|
||||||
-f "libmysqld/$TARGET/mysqlserver.lib" -a \
|
|
||||||
-f "libmysqld/$TARGET/libmysqld.lib" -o \
|
|
||||||
x"$PACK_EMBEDDED" = x"yes" ] ; then
|
|
||||||
copy_embedded
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Note: Make sure to sync with include/Makefile.am and WiX installer
|
|
||||||
# XML specifications
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
mkdir -p $DESTDIR/include
|
|
||||||
cp include/mysql.h \
|
|
||||||
include/mysql_com.h \
|
|
||||||
include/mysql_time.h \
|
|
||||||
include/my_list.h \
|
|
||||||
include/my_alloc.h \
|
|
||||||
include/typelib.h \
|
|
||||||
include/my_dbug.h \
|
|
||||||
include/m_string.h \
|
|
||||||
include/my_sys.h \
|
|
||||||
include/my_xml.h \
|
|
||||||
include/mysql_embed.h \
|
|
||||||
include/my_pthread.h \
|
|
||||||
include/my_no_pthread.h \
|
|
||||||
include/decimal.h \
|
|
||||||
include/errmsg.h \
|
|
||||||
include/my_global.h \
|
|
||||||
include/my_config.h \
|
|
||||||
include/my_net.h \
|
|
||||||
include/my_getopt.h \
|
|
||||||
include/sslopt-longopts.h \
|
|
||||||
include/my_dir.h \
|
|
||||||
include/sslopt-vars.h \
|
|
||||||
include/sslopt-case.h \
|
|
||||||
include/sql_common.h \
|
|
||||||
include/keycache.h \
|
|
||||||
include/m_ctype.h \
|
|
||||||
include/my_attribute.h \
|
|
||||||
include/my_compiler.h \
|
|
||||||
include/mysqld_error.h \
|
|
||||||
include/sql_state.h \
|
|
||||||
include/mysqld_ername.h \
|
|
||||||
include/mysql_version.h \
|
|
||||||
libmysql/libmysql.def \
|
|
||||||
$DESTDIR/include/
|
|
||||||
|
|
||||||
mkdir -p $DESTDIR/include/mysql
|
|
||||||
cp include/mysql/plugin.h $DESTDIR/include/mysql/
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Client libraries, and other libraries
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
mkdir -p $DESTDIR/lib/opt
|
|
||||||
mkdir -p $DESTDIR/lib/plugin
|
|
||||||
cp sql/$TARGET/mysqld.lib $DESTDIR/lib/
|
|
||||||
cp libmysql/$TARGET/libmysql.dll \
|
|
||||||
libmysql/$TARGET/libmysql.lib \
|
|
||||||
libmysql/$TARGET/mysqlclient.lib \
|
|
||||||
mysys/$TARGET/mysys.lib \
|
|
||||||
regex/$TARGET/regex.lib \
|
|
||||||
strings/$TARGET/strings.lib \
|
|
||||||
zlib/$TARGET/zlib.lib $DESTDIR/lib/opt/
|
|
||||||
if [ -d storage/innodb_plugin ]; then
|
|
||||||
cp storage/innodb_plugin/$TARGET/ha_innodb_plugin.dll \
|
|
||||||
$DESTDIR/lib/plugin/
|
|
||||||
fi
|
|
||||||
if [ -d plugin/semisync ]; then
|
|
||||||
cp plugin/semisync/$TARGET/semisync_master.dll \
|
|
||||||
plugin/semisync/$TARGET/semisync_slave.dll \
|
|
||||||
$DESTDIR/lib/plugin/
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ x"$TARGET" != x"release" ] ; then
|
|
||||||
cp libmysql/$TARGET/libmysql.pdb \
|
|
||||||
libmysql/$TARGET/mysqlclient.pdb \
|
|
||||||
mysys/$TARGET/mysys.pdb \
|
|
||||||
regex/$TARGET/regex.pdb \
|
|
||||||
strings/$TARGET/strings.pdb \
|
|
||||||
zlib/$TARGET/zlib.pdb $DESTDIR/lib/opt/
|
|
||||||
if [ -d storage/innodb_plugin ]; then
|
|
||||||
cp storage/innodb_plugin/$TARGET/ha_innodb_plugin.pdb \
|
|
||||||
$DESTDIR/lib/plugin/
|
|
||||||
fi
|
|
||||||
if [ -d plugin/semisync ]; then
|
|
||||||
cp plugin/semisync/$TARGET/semisync_master.pdb \
|
|
||||||
plugin/semisync/$TARGET/semisync_slave.pdb \
|
|
||||||
$DESTDIR/lib/plugin/
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if [ x"$PACK_DEBUG" = x"" -a -f "libmysql/debug/libmysql.lib" -o \
|
|
||||||
x"$PACK_DEBUG" = x"yes" ] ; then
|
|
||||||
mkdir -p $DESTDIR/lib/debug
|
|
||||||
mkdir -p $DESTDIR/lib/plugin/debug
|
|
||||||
cp libmysql/debug/libmysql.dll \
|
|
||||||
libmysql/debug/libmysql.lib \
|
|
||||||
libmysql/debug/libmysql.pdb \
|
|
||||||
libmysql/debug/mysqlclient.lib \
|
|
||||||
libmysql/debug/mysqlclient.pdb \
|
|
||||||
mysys/debug/mysys.lib \
|
|
||||||
mysys/debug/mysys.pdb \
|
|
||||||
regex/debug/regex.lib \
|
|
||||||
regex/debug/regex.pdb \
|
|
||||||
strings/debug/strings.lib \
|
|
||||||
strings/debug/strings.pdb \
|
|
||||||
zlib/debug/zlib.lib \
|
|
||||||
zlib/debug/zlib.pdb $DESTDIR/lib/debug/
|
|
||||||
if [ -d storage/innodb_plugin ]; then
|
|
||||||
cp storage/innodb_plugin/debug/ha_innodb_plugin.dll \
|
|
||||||
storage/innodb_plugin/debug/ha_innodb_plugin.lib \
|
|
||||||
storage/innodb_plugin/debug/ha_innodb_plugin.pdb \
|
|
||||||
$DESTDIR/lib/plugin/debug/
|
|
||||||
fi
|
|
||||||
if [ -d plugin/semisync ]; then
|
|
||||||
cp plugin/semisync/debug/semisync_master.dll \
|
|
||||||
plugin/semisync/debug/semisync_master.lib \
|
|
||||||
plugin/semisync/debug/semisync_master.pdb \
|
|
||||||
plugin/semisync/debug/semisync_slave.dll \
|
|
||||||
plugin/semisync/debug/semisync_slave.lib \
|
|
||||||
plugin/semisync/debug/semisync_slave.pdb \
|
|
||||||
$DESTDIR/lib/plugin/debug/
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Copy the test directory
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
mkdir $DESTDIR/mysql-test
|
|
||||||
cp mysql-test/mysql-test-run.pl $DESTDIR/mysql-test/
|
|
||||||
cp mysql-test/mysql-stress-test.pl $DESTDIR/mysql-test/
|
|
||||||
cp mysql-test/README $DESTDIR/mysql-test/
|
|
||||||
cp -R mysql-test/{t,r,include,suite,std_data,lib,collections} $DESTDIR/mysql-test/
|
|
||||||
|
|
||||||
# Note that this will not copy "extra" if a soft link
|
|
||||||
if [ -d mysql-test/extra ] ; then
|
|
||||||
mkdir $DESTDIR/mysql-test/extra
|
|
||||||
cp -pR mysql-test/extra/* $DESTDIR/mysql-test/extra/
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Copy what could be usable in the "scripts" directory
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
mysql_scripts="\
|
|
||||||
mysql_config.pl \
|
|
||||||
mysql_convert_table_format.pl \
|
|
||||||
mysql_install_db.pl \
|
|
||||||
mysql_secure_installation.pl \
|
|
||||||
mysqld_multi.pl \
|
|
||||||
mysqldumpslow.pl \
|
|
||||||
mysqlhotcopy.pl \
|
|
||||||
"
|
|
||||||
|
|
||||||
mkdir -p $DESTDIR/scripts
|
|
||||||
|
|
||||||
for i in $mysql_scripts
|
|
||||||
do
|
|
||||||
cp scripts/$i $DESTDIR/scripts/$i
|
|
||||||
done
|
|
||||||
|
|
||||||
cp -pR sql/share $DESTDIR/
|
|
||||||
cp -pR sql-bench $DESTDIR/
|
|
||||||
rm -f $DESTDIR/sql-bench/*.sh $DESTDIR/sql-bench/Makefile*
|
|
||||||
|
|
||||||
# The SQL initialisation code is to be in "share"
|
|
||||||
cp scripts/*.sql $DESTDIR/share/
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Clean up from possibly copied SCCS directories
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
rm -rf `find $DESTDIR -type d -name SCCS -print`
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Copy other files specified on command line DEST=SOURCE
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
for arg do
|
|
||||||
dst=`echo $arg | sed -n 's/=.*$//p'`
|
|
||||||
src=`echo $arg | sed -n 's/^.*=//p'`
|
|
||||||
|
|
||||||
if [ x"$dst" = x"" -o x"$src" = x"" ] ; then
|
|
||||||
echo "Invalid specification of what to copy"
|
|
||||||
usage
|
|
||||||
fi
|
|
||||||
|
|
||||||
mkdir -p `dirname $DESTDIR/$dst`
|
|
||||||
cp -pR "$src" $DESTDIR/$dst
|
|
||||||
done
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# Finally create the ZIP archive
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
rm -f $NOINST_NAME.zip
|
|
||||||
zip -r $NOINST_NAME.zip $DESTDIR
|
|
||||||
rm -Rf $DESTDIR
|
|
@ -61,10 +61,15 @@ Usage: $0 [OPTIONS]
|
|||||||
--cross-bootstrap For internal use. Used when building the MySQL system
|
--cross-bootstrap For internal use. Used when building the MySQL system
|
||||||
tables on a different host than the target.
|
tables on a different host than the target.
|
||||||
--datadir=path The path to the MySQL data directory.
|
--datadir=path The path to the MySQL data directory.
|
||||||
|
--defaults-extra-file=name
|
||||||
|
Read this file after the global files are read.
|
||||||
|
--defaults-file=name Only read default options from the given file name.
|
||||||
--force Causes mysql_install_db to run even if DNS does not
|
--force Causes mysql_install_db to run even if DNS does not
|
||||||
work. In that case, grant table entries that normally
|
work. In that case, grant table entries that normally
|
||||||
use hostnames will use IP addresses.
|
use hostnames will use IP addresses.
|
||||||
|
--help Display this help and exit.
|
||||||
--ldata=path The path to the MySQL data directory. Same as --datadir.
|
--ldata=path The path to the MySQL data directory. Same as --datadir.
|
||||||
|
--no-defaults Don't read default options from any option file.
|
||||||
--rpm For internal use. This option is used by RPM files
|
--rpm For internal use. This option is used by RPM files
|
||||||
during the MySQL installation process.
|
during the MySQL installation process.
|
||||||
--skip-name-resolve Use IP addresses rather than hostnames when creating
|
--skip-name-resolve Use IP addresses rather than hostnames when creating
|
||||||
|
@ -46,10 +46,15 @@ Usage: $0 [OPTIONS]
|
|||||||
--cross-bootstrap For internal use. Used when building the MySQL system
|
--cross-bootstrap For internal use. Used when building the MySQL system
|
||||||
tables on a different host than the target.
|
tables on a different host than the target.
|
||||||
--datadir=path The path to the MySQL data directory.
|
--datadir=path The path to the MySQL data directory.
|
||||||
|
--defaults-extra-file=name
|
||||||
|
Read this file after the global files are read.
|
||||||
|
--defaults-file=name Only read default options from the given file name.
|
||||||
--force Causes mysql_install_db to run even if DNS does not
|
--force Causes mysql_install_db to run even if DNS does not
|
||||||
work. In that case, grant table entries that normally
|
work. In that case, grant table entries that normally
|
||||||
use hostnames will use IP addresses.
|
use hostnames will use IP addresses.
|
||||||
|
--help Display this help and exit.
|
||||||
--ldata=path The path to the MySQL data directory. Same as --datadir.
|
--ldata=path The path to the MySQL data directory. Same as --datadir.
|
||||||
|
--no-defaults Don't read default options from any option file.
|
||||||
--rpm For internal use. This option is used by RPM files
|
--rpm For internal use. This option is used by RPM files
|
||||||
during the MySQL installation process.
|
during the MySQL installation process.
|
||||||
--skip-name-resolve Use IP addresses rather than hostnames when creating
|
--skip-name-resolve Use IP addresses rather than hostnames when creating
|
||||||
|
@ -23,9 +23,18 @@
|
|||||||
#include <thr_alarm.h>
|
#include <thr_alarm.h>
|
||||||
#include <sql_common.h>
|
#include <sql_common.h>
|
||||||
|
|
||||||
#define CLIENT_CAPABILITIES (CLIENT_LONG_PASSWORD | CLIENT_LONG_FLAG | \
|
/*
|
||||||
CLIENT_SECURE_CONNECTION | CLIENT_TRANSACTIONS | \
|
Note: CLIENT_CAPABILITIES is also defined in libmysql/client_settings.h.
|
||||||
CLIENT_PROTOCOL_41 | CLIENT_SECURE_CONNECTION)
|
When adding capabilities here, consider if they should be also added to
|
||||||
|
the libmysql version.
|
||||||
|
*/
|
||||||
|
#define CLIENT_CAPABILITIES (CLIENT_LONG_PASSWORD | \
|
||||||
|
CLIENT_LONG_FLAG | \
|
||||||
|
CLIENT_SECURE_CONNECTION | \
|
||||||
|
CLIENT_TRANSACTIONS | \
|
||||||
|
CLIENT_PROTOCOL_41 | \
|
||||||
|
CLIENT_SECURE_CONNECTION | \
|
||||||
|
CLIENT_PLUGIN_AUTH)
|
||||||
|
|
||||||
#define read_user_name(A) {}
|
#define read_user_name(A) {}
|
||||||
#undef HAVE_SMEM
|
#undef HAVE_SMEM
|
||||||
|
@ -2869,6 +2869,9 @@ void handler::print_error(int error, myf errflag)
|
|||||||
case HA_ERR_INDEX_CORRUPT:
|
case HA_ERR_INDEX_CORRUPT:
|
||||||
textno= ER_INDEX_CORRUPT;
|
textno= ER_INDEX_CORRUPT;
|
||||||
break;
|
break;
|
||||||
|
case HA_ERR_UNDO_REC_TOO_BIG:
|
||||||
|
textno= ER_UNDO_RECORD_TOO_BIG;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
/* The error was "unknown" to this function.
|
/* The error was "unknown" to this function.
|
||||||
|
@ -6417,3 +6417,6 @@ ER_ERROR_IN_UNKNOWN_TRIGGER_BODY
|
|||||||
|
|
||||||
ER_INDEX_CORRUPT
|
ER_INDEX_CORRUPT
|
||||||
eng "Index %s is corrupted"
|
eng "Index %s is corrupted"
|
||||||
|
|
||||||
|
ER_UNDO_RECORD_TOO_BIG
|
||||||
|
eng "Undo log record is too big."
|
||||||
|
@ -4204,6 +4204,10 @@ static int connect_to_master(THD* thd, MYSQL* mysql, Master_info* mi,
|
|||||||
/* This one is not strictly needed but we have it here for completeness */
|
/* This one is not strictly needed but we have it here for completeness */
|
||||||
mysql_options(mysql, MYSQL_SET_CHARSET_DIR, (char *) charsets_dir);
|
mysql_options(mysql, MYSQL_SET_CHARSET_DIR, (char *) charsets_dir);
|
||||||
|
|
||||||
|
/* Set MYSQL_PLUGIN_DIR in case master asks for an external authentication plugin */
|
||||||
|
if (opt_plugin_dir_ptr && *opt_plugin_dir_ptr)
|
||||||
|
mysql_options(mysql, MYSQL_PLUGIN_DIR, opt_plugin_dir_ptr);
|
||||||
|
|
||||||
while (!(slave_was_killed = io_slave_killed(thd,mi)) &&
|
while (!(slave_was_killed = io_slave_killed(thd,mi)) &&
|
||||||
(reconnect ? mysql_reconnect(mysql) != 0 :
|
(reconnect ? mysql_reconnect(mysql) != 0 :
|
||||||
mysql_real_connect(mysql, mi->host, mi->user, mi->password, 0,
|
mysql_real_connect(mysql, mi->host, mi->user, mi->password, 0,
|
||||||
|
@ -1845,6 +1845,7 @@ btr_cur_update_in_place(
|
|||||||
roll_ptr_t roll_ptr = 0;
|
roll_ptr_t roll_ptr = 0;
|
||||||
trx_t* trx;
|
trx_t* trx;
|
||||||
ulint was_delete_marked;
|
ulint was_delete_marked;
|
||||||
|
ibool is_hashed;
|
||||||
mem_heap_t* heap = NULL;
|
mem_heap_t* heap = NULL;
|
||||||
ulint offsets_[REC_OFFS_NORMAL_SIZE];
|
ulint offsets_[REC_OFFS_NORMAL_SIZE];
|
||||||
ulint* offsets = offsets_;
|
ulint* offsets = offsets_;
|
||||||
@ -1886,7 +1887,21 @@ btr_cur_update_in_place(
|
|||||||
return(err);
|
return(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (block->is_hashed) {
|
if (!(flags & BTR_KEEP_SYS_FLAG)) {
|
||||||
|
row_upd_rec_sys_fields(rec, NULL,
|
||||||
|
index, offsets, trx, roll_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
was_delete_marked = rec_get_deleted_flag(
|
||||||
|
rec, page_is_comp(buf_block_get_frame(block)));
|
||||||
|
|
||||||
|
is_hashed = block->is_hashed;
|
||||||
|
|
||||||
|
if (is_hashed) {
|
||||||
|
/* TO DO: Can we skip this if none of the fields
|
||||||
|
index->search_info->curr_n_fields
|
||||||
|
are being updated? */
|
||||||
|
|
||||||
/* The function row_upd_changes_ord_field_binary works only
|
/* The function row_upd_changes_ord_field_binary works only
|
||||||
if the update vector was built for a clustered index, we must
|
if the update vector was built for a clustered index, we must
|
||||||
NOT call it if index is secondary */
|
NOT call it if index is secondary */
|
||||||
@ -1902,17 +1917,9 @@ btr_cur_update_in_place(
|
|||||||
rw_lock_x_lock(&btr_search_latch);
|
rw_lock_x_lock(&btr_search_latch);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(flags & BTR_KEEP_SYS_FLAG)) {
|
|
||||||
row_upd_rec_sys_fields(rec, NULL,
|
|
||||||
index, offsets, trx, roll_ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
was_delete_marked = rec_get_deleted_flag(
|
|
||||||
rec, page_is_comp(buf_block_get_frame(block)));
|
|
||||||
|
|
||||||
row_upd_rec_in_place(rec, index, offsets, update, page_zip);
|
row_upd_rec_in_place(rec, index, offsets, update, page_zip);
|
||||||
|
|
||||||
if (block->is_hashed) {
|
if (is_hashed) {
|
||||||
rw_lock_x_unlock(&btr_search_latch);
|
rw_lock_x_unlock(&btr_search_latch);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2638,7 +2645,8 @@ btr_cur_parse_del_mark_set_clust_rec(
|
|||||||
|
|
||||||
/* We do not need to reserve btr_search_latch, as the page
|
/* We do not need to reserve btr_search_latch, as the page
|
||||||
is only being recovered, and there cannot be a hash index to
|
is only being recovered, and there cannot be a hash index to
|
||||||
it. */
|
it. Besides, these fields are being updated in place
|
||||||
|
and the adaptive hash index does not depend on them. */
|
||||||
|
|
||||||
btr_rec_set_deleted_flag(rec, page_zip, val);
|
btr_rec_set_deleted_flag(rec, page_zip, val);
|
||||||
|
|
||||||
@ -2718,9 +2726,9 @@ btr_cur_del_mark_set_clust_rec(
|
|||||||
return(err);
|
return(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (block->is_hashed) {
|
/* The btr_search_latch is not needed here, because
|
||||||
rw_lock_x_lock(&btr_search_latch);
|
the adaptive hash index does not depend on the delete-mark
|
||||||
}
|
and the delete-mark is being updated in place. */
|
||||||
|
|
||||||
page_zip = buf_block_get_page_zip(block);
|
page_zip = buf_block_get_page_zip(block);
|
||||||
|
|
||||||
@ -2734,10 +2742,6 @@ btr_cur_del_mark_set_clust_rec(
|
|||||||
index, offsets, trx, roll_ptr);
|
index, offsets, trx, roll_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (block->is_hashed) {
|
|
||||||
rw_lock_x_unlock(&btr_search_latch);
|
|
||||||
}
|
|
||||||
|
|
||||||
btr_cur_del_mark_set_clust_rec_log(flags, rec, index, val, trx,
|
btr_cur_del_mark_set_clust_rec_log(flags, rec, index, val, trx,
|
||||||
roll_ptr, mtr);
|
roll_ptr, mtr);
|
||||||
|
|
||||||
@ -2813,7 +2817,8 @@ btr_cur_parse_del_mark_set_sec_rec(
|
|||||||
|
|
||||||
/* We do not need to reserve btr_search_latch, as the page
|
/* We do not need to reserve btr_search_latch, as the page
|
||||||
is only being recovered, and there cannot be a hash index to
|
is only being recovered, and there cannot be a hash index to
|
||||||
it. */
|
it. Besides, the delete-mark flag is being updated in place
|
||||||
|
and the adaptive hash index does not depend on it. */
|
||||||
|
|
||||||
btr_rec_set_deleted_flag(rec, page_zip, val);
|
btr_rec_set_deleted_flag(rec, page_zip, val);
|
||||||
}
|
}
|
||||||
@ -2861,16 +2866,11 @@ btr_cur_del_mark_set_sec_rec(
|
|||||||
ut_ad(!!page_rec_is_comp(rec)
|
ut_ad(!!page_rec_is_comp(rec)
|
||||||
== dict_table_is_comp(cursor->index->table));
|
== dict_table_is_comp(cursor->index->table));
|
||||||
|
|
||||||
if (block->is_hashed) {
|
/* We do not need to reserve btr_search_latch, as the
|
||||||
rw_lock_x_lock(&btr_search_latch);
|
delete-mark flag is being updated in place and the adaptive
|
||||||
}
|
hash index does not depend on it. */
|
||||||
|
|
||||||
btr_rec_set_deleted_flag(rec, buf_block_get_page_zip(block), val);
|
btr_rec_set_deleted_flag(rec, buf_block_get_page_zip(block), val);
|
||||||
|
|
||||||
if (block->is_hashed) {
|
|
||||||
rw_lock_x_unlock(&btr_search_latch);
|
|
||||||
}
|
|
||||||
|
|
||||||
btr_cur_del_mark_set_sec_rec_log(rec, val, mtr);
|
btr_cur_del_mark_set_sec_rec_log(rec, val, mtr);
|
||||||
|
|
||||||
return(DB_SUCCESS);
|
return(DB_SUCCESS);
|
||||||
@ -2891,8 +2891,11 @@ btr_cur_set_deleted_flag_for_ibuf(
|
|||||||
ibool val, /*!< in: value to set */
|
ibool val, /*!< in: value to set */
|
||||||
mtr_t* mtr) /*!< in: mtr */
|
mtr_t* mtr) /*!< in: mtr */
|
||||||
{
|
{
|
||||||
/* We do not need to reserve btr_search_latch, as the page has just
|
/* We do not need to reserve btr_search_latch, as the page
|
||||||
been read to the buffer pool and there cannot be a hash index to it. */
|
has just been read to the buffer pool and there cannot be
|
||||||
|
a hash index to it. Besides, the delete-mark flag is being
|
||||||
|
updated in place and the adaptive hash index does not depend
|
||||||
|
on it. */
|
||||||
|
|
||||||
btr_rec_set_deleted_flag(rec, page_zip, val);
|
btr_rec_set_deleted_flag(rec, page_zip, val);
|
||||||
|
|
||||||
|
@ -330,7 +330,6 @@ buf_buddy_relocate(
|
|||||||
{
|
{
|
||||||
buf_page_t* bpage;
|
buf_page_t* bpage;
|
||||||
const ulint size = BUF_BUDDY_LOW << i;
|
const ulint size = BUF_BUDDY_LOW << i;
|
||||||
ullint usec = ut_time_us(NULL);
|
|
||||||
mutex_t* mutex;
|
mutex_t* mutex;
|
||||||
ulint space;
|
ulint space;
|
||||||
ulint page_no;
|
ulint page_no;
|
||||||
@ -397,6 +396,7 @@ buf_buddy_relocate(
|
|||||||
|
|
||||||
if (buf_page_can_relocate(bpage)) {
|
if (buf_page_can_relocate(bpage)) {
|
||||||
/* Relocate the compressed page. */
|
/* Relocate the compressed page. */
|
||||||
|
ullint usec = ut_time_us(NULL);
|
||||||
ut_a(bpage->zip.data == src);
|
ut_a(bpage->zip.data == src);
|
||||||
memcpy(dst, src, size);
|
memcpy(dst, src, size);
|
||||||
bpage->zip.data = dst;
|
bpage->zip.data = dst;
|
||||||
|
@ -2990,19 +2990,20 @@ buf_page_init_low(
|
|||||||
|
|
||||||
/********************************************************************//**
|
/********************************************************************//**
|
||||||
Inits a page to the buffer buf_pool. */
|
Inits a page to the buffer buf_pool. */
|
||||||
static
|
static __attribute__((nonnull))
|
||||||
void
|
void
|
||||||
buf_page_init(
|
buf_page_init(
|
||||||
/*==========*/
|
/*==========*/
|
||||||
|
buf_pool_t* buf_pool,/*!< in/out: buffer pool */
|
||||||
ulint space, /*!< in: space id */
|
ulint space, /*!< in: space id */
|
||||||
ulint offset, /*!< in: offset of the page within space
|
ulint offset, /*!< in: offset of the page within space
|
||||||
in units of a page */
|
in units of a page */
|
||||||
ulint fold, /*!< in: buf_page_address_fold(space,offset) */
|
ulint fold, /*!< in: buf_page_address_fold(space,offset) */
|
||||||
buf_block_t* block) /*!< in: block to init */
|
buf_block_t* block) /*!< in/out: block to init */
|
||||||
{
|
{
|
||||||
buf_page_t* hash_page;
|
buf_page_t* hash_page;
|
||||||
buf_pool_t* buf_pool = buf_pool_get(space, offset);
|
|
||||||
|
|
||||||
|
ut_ad(buf_pool == buf_pool_get(space, offset));
|
||||||
ut_ad(buf_pool_mutex_own(buf_pool));
|
ut_ad(buf_pool_mutex_own(buf_pool));
|
||||||
ut_ad(mutex_own(&(block->mutex)));
|
ut_ad(mutex_own(&(block->mutex)));
|
||||||
ut_a(buf_block_get_state(block) != BUF_BLOCK_FILE_PAGE);
|
ut_a(buf_block_get_state(block) != BUF_BLOCK_FILE_PAGE);
|
||||||
@ -3161,7 +3162,7 @@ err_exit:
|
|||||||
|
|
||||||
ut_ad(buf_pool_from_bpage(bpage) == buf_pool);
|
ut_ad(buf_pool_from_bpage(bpage) == buf_pool);
|
||||||
|
|
||||||
buf_page_init(space, offset, fold, block);
|
buf_page_init(buf_pool, space, offset, fold, block);
|
||||||
|
|
||||||
/* The block must be put to the LRU list, to the old blocks */
|
/* The block must be put to the LRU list, to the old blocks */
|
||||||
buf_LRU_add_block(bpage, TRUE/* to old blocks */);
|
buf_LRU_add_block(bpage, TRUE/* to old blocks */);
|
||||||
@ -3365,7 +3366,7 @@ buf_page_create(
|
|||||||
|
|
||||||
mutex_enter(&block->mutex);
|
mutex_enter(&block->mutex);
|
||||||
|
|
||||||
buf_page_init(space, offset, fold, block);
|
buf_page_init(buf_pool, space, offset, fold, block);
|
||||||
|
|
||||||
/* The block must be put to the LRU list */
|
/* The block must be put to the LRU list */
|
||||||
buf_LRU_add_block(&block->page, FALSE);
|
buf_LRU_add_block(&block->page, FALSE);
|
||||||
|
@ -1045,6 +1045,8 @@ convert_error_code_to_mysql(
|
|||||||
return(HA_ERR_UNSUPPORTED);
|
return(HA_ERR_UNSUPPORTED);
|
||||||
case DB_INDEX_CORRUPT:
|
case DB_INDEX_CORRUPT:
|
||||||
return(HA_ERR_INDEX_CORRUPT);
|
return(HA_ERR_INDEX_CORRUPT);
|
||||||
|
case DB_UNDO_RECORD_TOO_BIG:
|
||||||
|
return(HA_ERR_UNDO_REC_TOO_BIG);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2210,17 +2210,17 @@ ibuf_add_free_page(void)
|
|||||||
buf_block_t* block = buf_page_get(
|
buf_block_t* block = buf_page_get(
|
||||||
IBUF_SPACE_ID, 0, page_no, RW_X_LATCH, &mtr);
|
IBUF_SPACE_ID, 0, page_no, RW_X_LATCH, &mtr);
|
||||||
|
|
||||||
|
ibuf_enter(&mtr);
|
||||||
|
|
||||||
|
mutex_enter(&ibuf_mutex);
|
||||||
|
|
||||||
|
root = ibuf_tree_root_get(&mtr);
|
||||||
|
|
||||||
buf_block_dbg_add_level(block, SYNC_IBUF_TREE_NODE_NEW);
|
buf_block_dbg_add_level(block, SYNC_IBUF_TREE_NODE_NEW);
|
||||||
|
|
||||||
page = buf_block_get_frame(block);
|
page = buf_block_get_frame(block);
|
||||||
}
|
}
|
||||||
|
|
||||||
ibuf_enter(&mtr);
|
|
||||||
|
|
||||||
mutex_enter(&ibuf_mutex);
|
|
||||||
|
|
||||||
root = ibuf_tree_root_get(&mtr);
|
|
||||||
|
|
||||||
/* Add the page to the free list and update the ibuf size data */
|
/* Add the page to the free list and update the ibuf size data */
|
||||||
|
|
||||||
flst_add_last(root + PAGE_HEADER + PAGE_BTR_IBUF_FREE_LIST,
|
flst_add_last(root + PAGE_HEADER + PAGE_BTR_IBUF_FREE_LIST,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1996, 2009, Innobase Oy. All Rights Reserved.
|
Copyright (c) 1996, 2011, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
the terms of the GNU General Public License as published by the Free Software
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -111,6 +111,7 @@ enum db_err {
|
|||||||
DB_TOO_BIG_INDEX_COL, /* index column size exceeds maximum
|
DB_TOO_BIG_INDEX_COL, /* index column size exceeds maximum
|
||||||
limit */
|
limit */
|
||||||
DB_INDEX_CORRUPT, /* we have corrupted index */
|
DB_INDEX_CORRUPT, /* we have corrupted index */
|
||||||
|
DB_UNDO_RECORD_TOO_BIG, /* the undo log record is too big */
|
||||||
|
|
||||||
/* The following are partial failure codes */
|
/* The following are partial failure codes */
|
||||||
DB_FAIL = 1000,
|
DB_FAIL = 1000,
|
||||||
|
@ -68,10 +68,7 @@ typedef byte page_header_t;
|
|||||||
#define PAGE_MAX_TRX_ID 18 /* highest id of a trx which may have modified
|
#define PAGE_MAX_TRX_ID 18 /* highest id of a trx which may have modified
|
||||||
a record on the page; trx_id_t; defined only
|
a record on the page; trx_id_t; defined only
|
||||||
in secondary indexes and in the insert buffer
|
in secondary indexes and in the insert buffer
|
||||||
tree; NOTE: this may be modified only
|
tree */
|
||||||
when the thread has an x-latch to the page,
|
|
||||||
and ALSO an x-latch to btr_search_latch
|
|
||||||
if there is a hash index to the page! */
|
|
||||||
#define PAGE_HEADER_PRIV_END 26 /* end of private data structure of the page
|
#define PAGE_HEADER_PRIV_END 26 /* end of private data structure of the page
|
||||||
header which are set in a page create */
|
header which are set in a page create */
|
||||||
/*----*/
|
/*----*/
|
||||||
|
@ -157,11 +157,6 @@ row_upd_rec_sys_fields(
|
|||||||
{
|
{
|
||||||
ut_ad(dict_index_is_clust(index));
|
ut_ad(dict_index_is_clust(index));
|
||||||
ut_ad(rec_offs_validate(rec, index, offsets));
|
ut_ad(rec_offs_validate(rec, index, offsets));
|
||||||
#ifdef UNIV_SYNC_DEBUG
|
|
||||||
if (!rw_lock_own(&btr_search_latch, RW_LOCK_EX)) {
|
|
||||||
ut_ad(!buf_block_align(rec)->is_hashed);
|
|
||||||
}
|
|
||||||
#endif /* UNIV_SYNC_DEBUG */
|
|
||||||
|
|
||||||
if (UNIV_LIKELY_NULL(page_zip)) {
|
if (UNIV_LIKELY_NULL(page_zip)) {
|
||||||
ulint pos = dict_index_get_sys_col_pos(index, DATA_TRX_ID);
|
ulint pos = dict_index_get_sys_col_pos(index, DATA_TRX_ID);
|
||||||
|
@ -684,7 +684,6 @@ or row lock! */
|
|||||||
#define SYNC_BUF_FLUSH_LIST 145 /* Buffer flush list mutex */
|
#define SYNC_BUF_FLUSH_LIST 145 /* Buffer flush list mutex */
|
||||||
#define SYNC_DOUBLEWRITE 140
|
#define SYNC_DOUBLEWRITE 140
|
||||||
#define SYNC_ANY_LATCH 135
|
#define SYNC_ANY_LATCH 135
|
||||||
#define SYNC_THR_LOCAL 133
|
|
||||||
#define SYNC_MEM_HASH 131
|
#define SYNC_MEM_HASH 131
|
||||||
#define SYNC_MEM_POOL 130
|
#define SYNC_MEM_POOL 130
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1996, 2009, Innobase Oy. All Rights Reserved.
|
Copyright (c) 1996, 2011, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
the terms of the GNU General Public License as published by the Free Software
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -204,17 +204,51 @@ trx_undo_add_page(
|
|||||||
mtr_t* mtr); /*!< in: mtr which does not have a latch to any
|
mtr_t* mtr); /*!< in: mtr which does not have a latch to any
|
||||||
undo log page; the caller must have reserved
|
undo log page; the caller must have reserved
|
||||||
the rollback segment mutex */
|
the rollback segment mutex */
|
||||||
|
/********************************************************************//**
|
||||||
|
Frees the last undo log page.
|
||||||
|
The caller must hold the rollback segment mutex. */
|
||||||
|
UNIV_INTERN
|
||||||
|
void
|
||||||
|
trx_undo_free_last_page_func(
|
||||||
|
/*==========================*/
|
||||||
|
#ifdef UNIV_DEBUG
|
||||||
|
const trx_t* trx, /*!< in: transaction */
|
||||||
|
#endif /* UNIV_DEBUG */
|
||||||
|
trx_undo_t* undo, /*!< in/out: undo log memory copy */
|
||||||
|
mtr_t* mtr) /*!< in/out: mini-transaction which does not
|
||||||
|
have a latch to any undo log page or which
|
||||||
|
has allocated the undo log page */
|
||||||
|
__attribute__((nonnull));
|
||||||
|
#ifdef UNIV_DEBUG
|
||||||
|
# define trx_undo_free_last_page(trx,undo,mtr) \
|
||||||
|
trx_undo_free_last_page_func(trx,undo,mtr)
|
||||||
|
#else /* UNIV_DEBUG */
|
||||||
|
# define trx_undo_free_last_page(trx,undo,mtr) \
|
||||||
|
trx_undo_free_last_page_func(undo,mtr)
|
||||||
|
#endif /* UNIV_DEBUG */
|
||||||
|
|
||||||
/***********************************************************************//**
|
/***********************************************************************//**
|
||||||
Truncates an undo log from the end. This function is used during a rollback
|
Truncates an undo log from the end. This function is used during a rollback
|
||||||
to free space from an undo log. */
|
to free space from an undo log. */
|
||||||
UNIV_INTERN
|
UNIV_INTERN
|
||||||
void
|
void
|
||||||
trx_undo_truncate_end(
|
trx_undo_truncate_end_func(
|
||||||
/*==================*/
|
/*=======================*/
|
||||||
trx_t* trx, /*!< in: transaction whose undo log it is */
|
#ifdef UNIV_DEBUG
|
||||||
trx_undo_t* undo, /*!< in: undo log */
|
const trx_t* trx, /*!< in: transaction whose undo log it is */
|
||||||
undo_no_t limit); /*!< in: all undo records with undo number
|
#endif /* UNIV_DEBUG */
|
||||||
|
trx_undo_t* undo, /*!< in/out: undo log */
|
||||||
|
undo_no_t limit) /*!< in: all undo records with undo number
|
||||||
>= this value should be truncated */
|
>= this value should be truncated */
|
||||||
|
__attribute__((nonnull));
|
||||||
|
#ifdef UNIV_DEBUG
|
||||||
|
# define trx_undo_truncate_end(trx,undo,limit) \
|
||||||
|
trx_undo_truncate_end_func(trx,undo,limit)
|
||||||
|
#else /* UNIV_DEBUG */
|
||||||
|
# define trx_undo_truncate_end(trx,undo,limit) \
|
||||||
|
trx_undo_truncate_end_func(undo,limit)
|
||||||
|
#endif /* UNIV_DEBUG */
|
||||||
|
|
||||||
/***********************************************************************//**
|
/***********************************************************************//**
|
||||||
Truncates an undo log from the start. This function is used during a purge
|
Truncates an undo log from the start. This function is used during a purge
|
||||||
operation. */
|
operation. */
|
||||||
|
@ -576,6 +576,7 @@ handle_new_error:
|
|||||||
case DB_DUPLICATE_KEY:
|
case DB_DUPLICATE_KEY:
|
||||||
case DB_FOREIGN_DUPLICATE_KEY:
|
case DB_FOREIGN_DUPLICATE_KEY:
|
||||||
case DB_TOO_BIG_RECORD:
|
case DB_TOO_BIG_RECORD:
|
||||||
|
case DB_UNDO_RECORD_TOO_BIG:
|
||||||
case DB_ROW_IS_REFERENCED:
|
case DB_ROW_IS_REFERENCED:
|
||||||
case DB_NO_REFERENCED_ROW:
|
case DB_NO_REFERENCED_ROW:
|
||||||
case DB_CANNOT_ADD_CONSTRAINT:
|
case DB_CANNOT_ADD_CONSTRAINT:
|
||||||
@ -3246,6 +3247,19 @@ check_next_foreign:
|
|||||||
"index_id CHAR;\n"
|
"index_id CHAR;\n"
|
||||||
"foreign_id CHAR;\n"
|
"foreign_id CHAR;\n"
|
||||||
"found INT;\n"
|
"found INT;\n"
|
||||||
|
|
||||||
|
"DECLARE CURSOR cur_fk IS\n"
|
||||||
|
"SELECT ID FROM SYS_FOREIGN\n"
|
||||||
|
"WHERE FOR_NAME = :table_name\n"
|
||||||
|
"AND TO_BINARY(FOR_NAME)\n"
|
||||||
|
" = TO_BINARY(:table_name)\n"
|
||||||
|
"LOCK IN SHARE MODE;\n"
|
||||||
|
|
||||||
|
"DECLARE CURSOR cur_idx IS\n"
|
||||||
|
"SELECT ID FROM SYS_INDEXES\n"
|
||||||
|
"WHERE TABLE_ID = table_id\n"
|
||||||
|
"LOCK IN SHARE MODE;\n"
|
||||||
|
|
||||||
"BEGIN\n"
|
"BEGIN\n"
|
||||||
"SELECT ID INTO table_id\n"
|
"SELECT ID INTO table_id\n"
|
||||||
"FROM SYS_TABLES\n"
|
"FROM SYS_TABLES\n"
|
||||||
@ -3268,13 +3282,9 @@ check_next_foreign:
|
|||||||
"IF (:table_name = 'SYS_FOREIGN_COLS') THEN\n"
|
"IF (:table_name = 'SYS_FOREIGN_COLS') THEN\n"
|
||||||
" found := 0;\n"
|
" found := 0;\n"
|
||||||
"END IF;\n"
|
"END IF;\n"
|
||||||
|
"OPEN cur_fk;\n"
|
||||||
"WHILE found = 1 LOOP\n"
|
"WHILE found = 1 LOOP\n"
|
||||||
" SELECT ID INTO foreign_id\n"
|
" FETCH cur_fk INTO foreign_id;\n"
|
||||||
" FROM SYS_FOREIGN\n"
|
|
||||||
" WHERE FOR_NAME = :table_name\n"
|
|
||||||
" AND TO_BINARY(FOR_NAME)\n"
|
|
||||||
" = TO_BINARY(:table_name)\n"
|
|
||||||
" LOCK IN SHARE MODE;\n"
|
|
||||||
" IF (SQL % NOTFOUND) THEN\n"
|
" IF (SQL % NOTFOUND) THEN\n"
|
||||||
" found := 0;\n"
|
" found := 0;\n"
|
||||||
" ELSE\n"
|
" ELSE\n"
|
||||||
@ -3284,12 +3294,11 @@ check_next_foreign:
|
|||||||
" WHERE ID = foreign_id;\n"
|
" WHERE ID = foreign_id;\n"
|
||||||
" END IF;\n"
|
" END IF;\n"
|
||||||
"END LOOP;\n"
|
"END LOOP;\n"
|
||||||
|
"CLOSE cur_fk;\n"
|
||||||
"found := 1;\n"
|
"found := 1;\n"
|
||||||
|
"OPEN cur_idx;\n"
|
||||||
"WHILE found = 1 LOOP\n"
|
"WHILE found = 1 LOOP\n"
|
||||||
" SELECT ID INTO index_id\n"
|
" FETCH cur_idx INTO index_id;\n"
|
||||||
" FROM SYS_INDEXES\n"
|
|
||||||
" WHERE TABLE_ID = table_id\n"
|
|
||||||
" LOCK IN SHARE MODE;\n"
|
|
||||||
" IF (SQL % NOTFOUND) THEN\n"
|
" IF (SQL % NOTFOUND) THEN\n"
|
||||||
" found := 0;\n"
|
" found := 0;\n"
|
||||||
" ELSE\n"
|
" ELSE\n"
|
||||||
@ -3300,6 +3309,7 @@ check_next_foreign:
|
|||||||
" AND TABLE_ID = table_id;\n"
|
" AND TABLE_ID = table_id;\n"
|
||||||
" END IF;\n"
|
" END IF;\n"
|
||||||
"END LOOP;\n"
|
"END LOOP;\n"
|
||||||
|
"CLOSE cur_idx;\n"
|
||||||
"DELETE FROM SYS_COLUMNS\n"
|
"DELETE FROM SYS_COLUMNS\n"
|
||||||
"WHERE TABLE_ID = table_id;\n"
|
"WHERE TABLE_ID = table_id;\n"
|
||||||
"DELETE FROM SYS_TABLES\n"
|
"DELETE FROM SYS_TABLES\n"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1997, 2010, Innobase Oy. All Rights Reserved.
|
Copyright (c) 1997, 2011, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2008, Google Inc.
|
Copyright (c) 2008, Google Inc.
|
||||||
|
|
||||||
Portions of this file contain modifications contributed and copyrighted by
|
Portions of this file contain modifications contributed and copyrighted by
|
||||||
@ -99,14 +99,22 @@ row_sel_sec_rec_is_for_blob(
|
|||||||
ulint clust_len, /*!< in: length of clust_field */
|
ulint clust_len, /*!< in: length of clust_field */
|
||||||
const byte* sec_field, /*!< in: column in secondary index */
|
const byte* sec_field, /*!< in: column in secondary index */
|
||||||
ulint sec_len, /*!< in: length of sec_field */
|
ulint sec_len, /*!< in: length of sec_field */
|
||||||
|
ulint prefix_len, /*!< in: index column prefix length
|
||||||
|
in bytes */
|
||||||
dict_table_t* table) /*!< in: table */
|
dict_table_t* table) /*!< in: table */
|
||||||
{
|
{
|
||||||
ulint len;
|
ulint len;
|
||||||
byte buf[REC_VERSION_56_MAX_INDEX_COL_LEN];
|
byte buf[REC_VERSION_56_MAX_INDEX_COL_LEN];
|
||||||
ulint zip_size = dict_table_flags_to_zip_size(table->flags);
|
ulint zip_size = dict_table_flags_to_zip_size(table->flags);
|
||||||
ulint max_prefix_len = DICT_MAX_FIELD_LEN_BY_FORMAT(table);
|
|
||||||
|
|
||||||
|
/* This function should never be invoked on an Antelope format
|
||||||
|
table, because they should always contain enough prefix in the
|
||||||
|
clustered index record. */
|
||||||
|
ut_ad(dict_table_get_format(table) >= DICT_TF_FORMAT_ZIP);
|
||||||
ut_a(clust_len >= BTR_EXTERN_FIELD_REF_SIZE);
|
ut_a(clust_len >= BTR_EXTERN_FIELD_REF_SIZE);
|
||||||
|
ut_ad(prefix_len >= sec_len);
|
||||||
|
ut_ad(prefix_len > 0);
|
||||||
|
ut_a(prefix_len <= sizeof buf);
|
||||||
|
|
||||||
if (UNIV_UNLIKELY
|
if (UNIV_UNLIKELY
|
||||||
(!memcmp(clust_field + clust_len - BTR_EXTERN_FIELD_REF_SIZE,
|
(!memcmp(clust_field + clust_len - BTR_EXTERN_FIELD_REF_SIZE,
|
||||||
@ -118,7 +126,7 @@ row_sel_sec_rec_is_for_blob(
|
|||||||
return(FALSE);
|
return(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
len = btr_copy_externally_stored_field_prefix(buf, max_prefix_len,
|
len = btr_copy_externally_stored_field_prefix(buf, prefix_len,
|
||||||
zip_size,
|
zip_size,
|
||||||
clust_field, clust_len);
|
clust_field, clust_len);
|
||||||
|
|
||||||
@ -132,7 +140,7 @@ row_sel_sec_rec_is_for_blob(
|
|||||||
}
|
}
|
||||||
|
|
||||||
len = dtype_get_at_most_n_mbchars(prtype, mbminmaxlen,
|
len = dtype_get_at_most_n_mbchars(prtype, mbminmaxlen,
|
||||||
sec_len, len, (const char*) buf);
|
prefix_len, len, (const char*) buf);
|
||||||
|
|
||||||
return(!cmp_data_data(mtype, prtype, buf, len, sec_field, sec_len));
|
return(!cmp_data_data(mtype, prtype, buf, len, sec_field, sec_len));
|
||||||
}
|
}
|
||||||
@ -224,6 +232,7 @@ row_sel_sec_rec_is_for_clust_rec(
|
|||||||
col->mbminmaxlen,
|
col->mbminmaxlen,
|
||||||
clust_field, clust_len,
|
clust_field, clust_len,
|
||||||
sec_field, sec_len,
|
sec_field, sec_len,
|
||||||
|
ifield->prefix_len,
|
||||||
clust_index->table)) {
|
clust_index->table)) {
|
||||||
goto inequal;
|
goto inequal;
|
||||||
}
|
}
|
||||||
@ -493,7 +502,7 @@ sel_col_prefetch_buf_alloc(
|
|||||||
sel_buf = column->prefetch_buf + i;
|
sel_buf = column->prefetch_buf + i;
|
||||||
|
|
||||||
sel_buf->data = NULL;
|
sel_buf->data = NULL;
|
||||||
|
sel_buf->len = 0;
|
||||||
sel_buf->val_buf_size = 0;
|
sel_buf->val_buf_size = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -518,6 +527,8 @@ sel_col_prefetch_buf_free(
|
|||||||
mem_free(sel_buf->data);
|
mem_free(sel_buf->data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mem_free(prefetch_buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************************************************//**
|
/*********************************************************************//**
|
||||||
|
@ -1214,7 +1214,6 @@ sync_thread_add_level(
|
|||||||
case SYNC_WORK_QUEUE:
|
case SYNC_WORK_QUEUE:
|
||||||
case SYNC_LOG:
|
case SYNC_LOG:
|
||||||
case SYNC_LOG_FLUSH_ORDER:
|
case SYNC_LOG_FLUSH_ORDER:
|
||||||
case SYNC_THR_LOCAL:
|
|
||||||
case SYNC_ANY_LATCH:
|
case SYNC_ANY_LATCH:
|
||||||
case SYNC_FILE_FORMAT_TAG:
|
case SYNC_FILE_FORMAT_TAG:
|
||||||
case SYNC_DOUBLEWRITE:
|
case SYNC_DOUBLEWRITE:
|
||||||
@ -1339,8 +1338,7 @@ sync_thread_add_level(
|
|||||||
break;
|
break;
|
||||||
case SYNC_IBUF_INDEX_TREE:
|
case SYNC_IBUF_INDEX_TREE:
|
||||||
if (sync_thread_levels_contain(array, SYNC_FSP)) {
|
if (sync_thread_levels_contain(array, SYNC_FSP)) {
|
||||||
ut_a(sync_thread_levels_g(
|
ut_a(sync_thread_levels_g(array, level - 1, TRUE));
|
||||||
array, SYNC_FSP_PAGE - 1, TRUE));
|
|
||||||
} else {
|
} else {
|
||||||
ut_a(sync_thread_levels_g(
|
ut_a(sync_thread_levels_g(
|
||||||
array, SYNC_IBUF_TREE_NODE - 1, TRUE));
|
array, SYNC_IBUF_TREE_NODE - 1, TRUE));
|
||||||
|
@ -669,7 +669,6 @@ trx_undo_page_report_modify(
|
|||||||
/* Save to the undo log the old values of the columns to be updated. */
|
/* Save to the undo log the old values of the columns to be updated. */
|
||||||
|
|
||||||
if (update) {
|
if (update) {
|
||||||
|
|
||||||
if (trx_undo_left(undo_page, ptr) < 5) {
|
if (trx_undo_left(undo_page, ptr) < 5) {
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
@ -1119,13 +1118,14 @@ trx_undo_rec_get_partial_row(
|
|||||||
#endif /* !UNIV_HOTBACKUP */
|
#endif /* !UNIV_HOTBACKUP */
|
||||||
|
|
||||||
/***********************************************************************//**
|
/***********************************************************************//**
|
||||||
Erases the unused undo log page end. */
|
Erases the unused undo log page end.
|
||||||
static
|
@return TRUE if the page contained something, FALSE if it was empty */
|
||||||
void
|
static __attribute__((nonnull))
|
||||||
|
ibool
|
||||||
trx_undo_erase_page_end(
|
trx_undo_erase_page_end(
|
||||||
/*====================*/
|
/*====================*/
|
||||||
page_t* undo_page, /*!< in: undo page whose end to erase */
|
page_t* undo_page, /*!< in/out: undo page whose end to erase */
|
||||||
mtr_t* mtr) /*!< in: mtr */
|
mtr_t* mtr) /*!< in/out: mini-transaction */
|
||||||
{
|
{
|
||||||
ulint first_free;
|
ulint first_free;
|
||||||
|
|
||||||
@ -1135,6 +1135,7 @@ trx_undo_erase_page_end(
|
|||||||
(UNIV_PAGE_SIZE - FIL_PAGE_DATA_END) - first_free);
|
(UNIV_PAGE_SIZE - FIL_PAGE_DATA_END) - first_free);
|
||||||
|
|
||||||
mlog_write_initial_log_record(undo_page, MLOG_UNDO_ERASE_END, mtr);
|
mlog_write_initial_log_record(undo_page, MLOG_UNDO_ERASE_END, mtr);
|
||||||
|
return(first_free != TRX_UNDO_PAGE_HDR + TRX_UNDO_PAGE_HDR_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************//**
|
/***********************************************************//**
|
||||||
@ -1202,6 +1203,9 @@ trx_undo_report_row_operation(
|
|||||||
mem_heap_t* heap = NULL;
|
mem_heap_t* heap = NULL;
|
||||||
ulint offsets_[REC_OFFS_NORMAL_SIZE];
|
ulint offsets_[REC_OFFS_NORMAL_SIZE];
|
||||||
ulint* offsets = offsets_;
|
ulint* offsets = offsets_;
|
||||||
|
#ifdef UNIV_DEBUG
|
||||||
|
int loop_count = 0;
|
||||||
|
#endif /* UNIV_DEBUG */
|
||||||
rec_offs_init(offsets_);
|
rec_offs_init(offsets_);
|
||||||
|
|
||||||
ut_a(dict_index_is_clust(index));
|
ut_a(dict_index_is_clust(index));
|
||||||
@ -1264,7 +1268,7 @@ trx_undo_report_row_operation(
|
|||||||
|
|
||||||
mtr_start(&mtr);
|
mtr_start(&mtr);
|
||||||
|
|
||||||
for (;;) {
|
do {
|
||||||
buf_block_t* undo_block;
|
buf_block_t* undo_block;
|
||||||
page_t* undo_page;
|
page_t* undo_page;
|
||||||
ulint offset;
|
ulint offset;
|
||||||
@ -1293,7 +1297,31 @@ trx_undo_report_row_operation(
|
|||||||
version the replicate page constructed using the log
|
version the replicate page constructed using the log
|
||||||
records stays identical to the original page */
|
records stays identical to the original page */
|
||||||
|
|
||||||
trx_undo_erase_page_end(undo_page, &mtr);
|
if (!trx_undo_erase_page_end(undo_page, &mtr)) {
|
||||||
|
/* The record did not fit on an empty
|
||||||
|
undo page. Discard the freshly allocated
|
||||||
|
page and return an error. */
|
||||||
|
|
||||||
|
/* When we remove a page from an undo
|
||||||
|
log, this is analogous to a
|
||||||
|
pessimistic insert in a B-tree, and we
|
||||||
|
must reserve the counterpart of the
|
||||||
|
tree latch, which is the rseg
|
||||||
|
mutex. We must commit the mini-transaction
|
||||||
|
first, because it may be holding lower-level
|
||||||
|
latches, such as SYNC_FSP and SYNC_FSP_PAGE. */
|
||||||
|
|
||||||
|
mtr_commit(&mtr);
|
||||||
|
mtr_start(&mtr);
|
||||||
|
|
||||||
|
mutex_enter(&rseg->mutex);
|
||||||
|
trx_undo_free_last_page(trx, undo, &mtr);
|
||||||
|
mutex_exit(&rseg->mutex);
|
||||||
|
|
||||||
|
err = DB_UNDO_RECORD_TOO_BIG;
|
||||||
|
goto err_exit;
|
||||||
|
}
|
||||||
|
|
||||||
mtr_commit(&mtr);
|
mtr_commit(&mtr);
|
||||||
} else {
|
} else {
|
||||||
/* Success */
|
/* Success */
|
||||||
@ -1313,16 +1341,15 @@ trx_undo_report_row_operation(
|
|||||||
*roll_ptr = trx_undo_build_roll_ptr(
|
*roll_ptr = trx_undo_build_roll_ptr(
|
||||||
op_type == TRX_UNDO_INSERT_OP,
|
op_type == TRX_UNDO_INSERT_OP,
|
||||||
rseg->id, page_no, offset);
|
rseg->id, page_no, offset);
|
||||||
if (UNIV_LIKELY_NULL(heap)) {
|
err = DB_SUCCESS;
|
||||||
mem_heap_free(heap);
|
goto func_exit;
|
||||||
}
|
|
||||||
return(DB_SUCCESS);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ut_ad(page_no == undo->last_page_no);
|
ut_ad(page_no == undo->last_page_no);
|
||||||
|
|
||||||
/* We have to extend the undo log by one page */
|
/* We have to extend the undo log by one page */
|
||||||
|
|
||||||
|
ut_ad(++loop_count < 2);
|
||||||
mtr_start(&mtr);
|
mtr_start(&mtr);
|
||||||
|
|
||||||
/* When we add a page to an undo log, this is analogous to
|
/* When we add a page to an undo log, this is analogous to
|
||||||
@ -1334,18 +1361,19 @@ trx_undo_report_row_operation(
|
|||||||
page_no = trx_undo_add_page(trx, undo, &mtr);
|
page_no = trx_undo_add_page(trx, undo, &mtr);
|
||||||
|
|
||||||
mutex_exit(&(rseg->mutex));
|
mutex_exit(&(rseg->mutex));
|
||||||
|
} while (UNIV_LIKELY(page_no != FIL_NULL));
|
||||||
|
|
||||||
if (UNIV_UNLIKELY(page_no == FIL_NULL)) {
|
/* Did not succeed: out of space */
|
||||||
/* Did not succeed: out of space */
|
err = DB_OUT_OF_FILE_SPACE;
|
||||||
|
|
||||||
mutex_exit(&(trx->undo_mutex));
|
err_exit:
|
||||||
mtr_commit(&mtr);
|
mutex_exit(&trx->undo_mutex);
|
||||||
if (UNIV_LIKELY_NULL(heap)) {
|
mtr_commit(&mtr);
|
||||||
mem_heap_free(heap);
|
func_exit:
|
||||||
}
|
if (UNIV_LIKELY_NULL(heap)) {
|
||||||
return(DB_OUT_OF_FILE_SPACE);
|
mem_heap_free(heap);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
return(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*============== BUILDING PREVIOUS VERSION OF A RECORD ===============*/
|
/*============== BUILDING PREVIOUS VERSION OF A RECORD ===============*/
|
||||||
|
@ -1004,29 +1004,28 @@ trx_undo_free_page(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************//**
|
/********************************************************************//**
|
||||||
Frees an undo log page when there is also the memory object for the undo
|
Frees the last undo log page.
|
||||||
log. */
|
The caller must hold the rollback segment mutex. */
|
||||||
static
|
UNIV_INTERN
|
||||||
void
|
void
|
||||||
trx_undo_free_page_in_rollback(
|
trx_undo_free_last_page_func(
|
||||||
/*===========================*/
|
/*==========================*/
|
||||||
trx_t* trx __attribute__((unused)), /*!< in: transaction */
|
#ifdef UNIV_DEBUG
|
||||||
trx_undo_t* undo, /*!< in: undo log memory copy */
|
const trx_t* trx, /*!< in: transaction */
|
||||||
ulint page_no,/*!< in: page number to free: must not be the
|
#endif /* UNIV_DEBUG */
|
||||||
header page */
|
trx_undo_t* undo, /*!< in/out: undo log memory copy */
|
||||||
mtr_t* mtr) /*!< in: mtr which does not have a latch to any
|
mtr_t* mtr) /*!< in/out: mini-transaction which does not
|
||||||
undo log page; the caller must have reserved
|
have a latch to any undo log page or which
|
||||||
the rollback segment mutex */
|
has allocated the undo log page */
|
||||||
{
|
{
|
||||||
ulint last_page_no;
|
ut_ad(mutex_own(&trx->undo_mutex));
|
||||||
|
ut_ad(undo->hdr_page_no != undo->last_page_no);
|
||||||
|
ut_ad(undo->size > 0);
|
||||||
|
|
||||||
ut_ad(undo->hdr_page_no != page_no);
|
undo->last_page_no = trx_undo_free_page(
|
||||||
ut_ad(mutex_own(&(trx->undo_mutex)));
|
undo->rseg, FALSE, undo->space,
|
||||||
|
undo->hdr_page_no, undo->last_page_no, mtr);
|
||||||
|
|
||||||
last_page_no = trx_undo_free_page(undo->rseg, FALSE, undo->space,
|
|
||||||
undo->hdr_page_no, page_no, mtr);
|
|
||||||
|
|
||||||
undo->last_page_no = last_page_no;
|
|
||||||
undo->size--;
|
undo->size--;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1062,9 +1061,11 @@ Truncates an undo log from the end. This function is used during a rollback
|
|||||||
to free space from an undo log. */
|
to free space from an undo log. */
|
||||||
UNIV_INTERN
|
UNIV_INTERN
|
||||||
void
|
void
|
||||||
trx_undo_truncate_end(
|
trx_undo_truncate_end_func(
|
||||||
/*==================*/
|
/*=======================*/
|
||||||
trx_t* trx, /*!< in: transaction whose undo log it is */
|
#ifdef UNIV_DEBUG
|
||||||
|
const trx_t* trx, /*!< in: transaction whose undo log it is */
|
||||||
|
#endif /* UNIV_DEBUG */
|
||||||
trx_undo_t* undo, /*!< in: undo log */
|
trx_undo_t* undo, /*!< in: undo log */
|
||||||
undo_no_t limit) /*!< in: all undo records with undo number
|
undo_no_t limit) /*!< in: all undo records with undo number
|
||||||
>= this value should be truncated */
|
>= this value should be truncated */
|
||||||
@ -1090,18 +1091,7 @@ trx_undo_truncate_end(
|
|||||||
|
|
||||||
rec = trx_undo_page_get_last_rec(undo_page, undo->hdr_page_no,
|
rec = trx_undo_page_get_last_rec(undo_page, undo->hdr_page_no,
|
||||||
undo->hdr_offset);
|
undo->hdr_offset);
|
||||||
for (;;) {
|
while (rec) {
|
||||||
if (rec == NULL) {
|
|
||||||
if (last_page_no == undo->hdr_page_no) {
|
|
||||||
|
|
||||||
goto function_exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
trx_undo_free_page_in_rollback(
|
|
||||||
trx, undo, last_page_no, &mtr);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (trx_undo_rec_get_undo_no(rec) >= limit) {
|
if (trx_undo_rec_get_undo_no(rec) >= limit) {
|
||||||
/* Truncate at least this record off, maybe
|
/* Truncate at least this record off, maybe
|
||||||
more */
|
more */
|
||||||
@ -1115,6 +1105,14 @@ trx_undo_truncate_end(
|
|||||||
undo->hdr_offset);
|
undo->hdr_offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (last_page_no == undo->hdr_page_no) {
|
||||||
|
|
||||||
|
goto function_exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
ut_ad(last_page_no == undo->last_page_no);
|
||||||
|
trx_undo_free_last_page(trx, undo, &mtr);
|
||||||
|
|
||||||
mtr_commit(&mtr);
|
mtr_commit(&mtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -714,6 +714,8 @@ ut_strerr(
|
|||||||
return("No index on referenced keys in referenced table");
|
return("No index on referenced keys in referenced table");
|
||||||
case DB_INDEX_CORRUPT:
|
case DB_INDEX_CORRUPT:
|
||||||
return("Index corrupted");
|
return("Index corrupted");
|
||||||
|
case DB_UNDO_RECORD_TOO_BIG:
|
||||||
|
return("Undo record too big");
|
||||||
case DB_END_OF_INDEX:
|
case DB_END_OF_INDEX:
|
||||||
return("End of index");
|
return("End of index");
|
||||||
/* do not add default: in order to produce a warning if new code
|
/* do not add default: in order to produce a warning if new code
|
||||||
|
@ -360,7 +360,7 @@ static int _ft2_search(FTB *ftb, FTB_WORD *ftbw, my_bool init_search)
|
|||||||
int subkeys=1;
|
int subkeys=1;
|
||||||
my_bool can_go_down;
|
my_bool can_go_down;
|
||||||
MI_INFO *info=ftb->info;
|
MI_INFO *info=ftb->info;
|
||||||
uint UNINIT_VAR(off), extra=HA_FT_WLEN+info->s->base.rec_reflength;
|
uint UNINIT_VAR(off), extra= HA_FT_WLEN + info->s->rec_reflength;
|
||||||
uchar *lastkey_buf=ftbw->word+ftbw->off;
|
uchar *lastkey_buf=ftbw->word+ftbw->off;
|
||||||
|
|
||||||
if (ftbw->flags & FTB_FLAG_TRUNC)
|
if (ftbw->flags & FTB_FLAG_TRUNC)
|
||||||
|
@ -72,7 +72,7 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio)
|
|||||||
uchar *keybuff=aio->keybuff;
|
uchar *keybuff=aio->keybuff;
|
||||||
MI_KEYDEF *keyinfo=info->s->keyinfo+aio->keynr;
|
MI_KEYDEF *keyinfo=info->s->keyinfo+aio->keynr;
|
||||||
my_off_t key_root=info->s->state.key_root[aio->keynr];
|
my_off_t key_root=info->s->state.key_root[aio->keynr];
|
||||||
uint extra=HA_FT_WLEN+info->s->base.rec_reflength;
|
uint extra= HA_FT_WLEN + info->s->rec_reflength;
|
||||||
#if HA_FT_WTYPE == HA_KEYTYPE_FLOAT
|
#if HA_FT_WTYPE == HA_KEYTYPE_FLOAT
|
||||||
float tmp_weight;
|
float tmp_weight;
|
||||||
#else
|
#else
|
||||||
|
@ -3899,7 +3899,7 @@ static int sort_ft_key_write(MI_SORT_PARAM *sort_param, const void *a)
|
|||||||
SORT_FT_BUF *ft_buf=sort_info->ft_buf;
|
SORT_FT_BUF *ft_buf=sort_info->ft_buf;
|
||||||
SORT_KEY_BLOCKS *key_block=sort_info->key_block;
|
SORT_KEY_BLOCKS *key_block=sort_info->key_block;
|
||||||
|
|
||||||
val_len=HA_FT_WLEN+sort_info->info->s->base.rec_reflength;
|
val_len= HA_FT_WLEN + sort_info->info->s->rec_reflength;
|
||||||
get_key_full_length_rdonly(a_len, (uchar *)a);
|
get_key_full_length_rdonly(a_len, (uchar *)a);
|
||||||
|
|
||||||
if (!ft_buf)
|
if (!ft_buf)
|
||||||
@ -3909,7 +3909,7 @@ static int sort_ft_key_write(MI_SORT_PARAM *sort_param, const void *a)
|
|||||||
and row format is NOT static - for _mi_dpointer not to garble offsets
|
and row format is NOT static - for _mi_dpointer not to garble offsets
|
||||||
*/
|
*/
|
||||||
if ((sort_info->info->s->base.key_reflength <=
|
if ((sort_info->info->s->base.key_reflength <=
|
||||||
sort_info->info->s->base.rec_reflength) &&
|
sort_info->info->s->rec_reflength) &&
|
||||||
(sort_info->info->s->options &
|
(sort_info->info->s->options &
|
||||||
(HA_OPTION_PACK_RECORD | HA_OPTION_COMPRESS_RECORD)))
|
(HA_OPTION_PACK_RECORD | HA_OPTION_COMPRESS_RECORD)))
|
||||||
ft_buf=(SORT_FT_BUF *)my_malloc(sort_param->keyinfo->block_length +
|
ft_buf=(SORT_FT_BUF *)my_malloc(sort_param->keyinfo->block_length +
|
||||||
|
@ -519,7 +519,7 @@ int _mi_insert(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
|||||||
{
|
{
|
||||||
if (keyinfo->block_length - a_length < 32 &&
|
if (keyinfo->block_length - a_length < 32 &&
|
||||||
keyinfo->flag & HA_FULLTEXT && key_pos == endpos &&
|
keyinfo->flag & HA_FULLTEXT && key_pos == endpos &&
|
||||||
info->s->base.key_reflength <= info->s->base.rec_reflength &&
|
info->s->base.key_reflength <= info->s->rec_reflength &&
|
||||||
info->s->options & (HA_OPTION_PACK_RECORD | HA_OPTION_COMPRESS_RECORD))
|
info->s->options & (HA_OPTION_PACK_RECORD | HA_OPTION_COMPRESS_RECORD))
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
@ -46,7 +46,7 @@
|
|||||||
see if it is possible to get rid of malloc().
|
see if it is possible to get rid of malloc().
|
||||||
this constant is sufficient to avoid malloc() on all inputs I have tried.
|
this constant is sufficient to avoid malloc() on all inputs I have tried.
|
||||||
*/
|
*/
|
||||||
#define DTOA_BUFF_SIZE (420 * sizeof(void *))
|
#define DTOA_BUFF_SIZE (460 * sizeof(void *))
|
||||||
|
|
||||||
/* Magic value returned by dtoa() to indicate overflow */
|
/* Magic value returned by dtoa() to indicate overflow */
|
||||||
#define DTOA_OVERFLOW 9999
|
#define DTOA_OVERFLOW 9999
|
||||||
@ -659,6 +659,7 @@ typedef struct Stack_alloc
|
|||||||
static Bigint *Balloc(int k, Stack_alloc *alloc)
|
static Bigint *Balloc(int k, Stack_alloc *alloc)
|
||||||
{
|
{
|
||||||
Bigint *rv;
|
Bigint *rv;
|
||||||
|
DBUG_ASSERT(k <= Kmax);
|
||||||
if (k <= Kmax && alloc->freelist[k])
|
if (k <= Kmax && alloc->freelist[k])
|
||||||
{
|
{
|
||||||
rv= alloc->freelist[k];
|
rv= alloc->freelist[k];
|
||||||
@ -1005,7 +1006,7 @@ static Bigint p5_a[]=
|
|||||||
|
|
||||||
static Bigint *pow5mult(Bigint *b, int k, Stack_alloc *alloc)
|
static Bigint *pow5mult(Bigint *b, int k, Stack_alloc *alloc)
|
||||||
{
|
{
|
||||||
Bigint *b1, *p5, *p51;
|
Bigint *b1, *p5, *p51=NULL;
|
||||||
int i;
|
int i;
|
||||||
static int p05[3]= { 5, 25, 125 };
|
static int p05[3]= { 5, 25, 125 };
|
||||||
|
|
||||||
@ -1037,6 +1038,8 @@ static Bigint *pow5mult(Bigint *b, int k, Stack_alloc *alloc)
|
|||||||
p5= p51;
|
p5= p51;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (p51)
|
||||||
|
Bfree(p51, alloc);
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,43 +139,62 @@
|
|||||||
%endif
|
%endif
|
||||||
%endif
|
%endif
|
||||||
%else
|
%else
|
||||||
%if %(test -f /etc/redhat-release && echo 1 || echo 0)
|
%if %(test -f /etc/oracle-release && echo 1 || echo 0)
|
||||||
%define rhelver %(rpm -qf --qf '%%{version}\\n' /etc/redhat-release | sed -e 's/^\\([0-9]*\\).*/\\1/g')
|
%define elver %(rpm -qf --qf '%%{version}\\n' /etc/oracle-release | sed -e 's/^\\([0-9]*\\).*/\\1/g')
|
||||||
%if "%rhelver" == "4"
|
%if "%elver" == "6"
|
||||||
%define distro_description Red Hat Enterprise Linux 4
|
%define distro_description Oracle Linux 6
|
||||||
%define distro_releasetag rhel4
|
%define distro_releasetag el6
|
||||||
%define distro_buildreq gcc-c++ gperf ncurses-devel perl readline-devel time zlib-devel
|
%define distro_buildreq gcc-c++ ncurses-devel perl readline-devel time zlib-devel
|
||||||
%define distro_requires chkconfig coreutils grep procps shadow-utils net-tools
|
%define distro_requires chkconfig coreutils grep procps shadow-utils net-tools
|
||||||
%else
|
%else
|
||||||
%if "%rhelver" == "5"
|
%{error:Oracle Linux %{elver} is unsupported}
|
||||||
%define distro_description Red Hat Enterprise Linux 5
|
|
||||||
%define distro_releasetag rhel5
|
|
||||||
%define distro_buildreq gcc-c++ gperf ncurses-devel perl readline-devel time zlib-devel
|
|
||||||
%define distro_requires chkconfig coreutils grep procps shadow-utils net-tools
|
|
||||||
%else
|
|
||||||
%{error:Red Hat Enterprise Linux %{rhelver} is unsupported}
|
|
||||||
%endif
|
|
||||||
%endif
|
%endif
|
||||||
%else
|
%else
|
||||||
%if %(test -f /etc/SuSE-release && echo 1 || echo 0)
|
%if %(test -f /etc/redhat-release && echo 1 || echo 0)
|
||||||
%define susever %(rpm -qf --qf '%%{version}\\n' /etc/SuSE-release)
|
%define rhelver %(rpm -qf --qf '%%{version}\\n' /etc/redhat-release | sed -e 's/^\\([0-9]*\\).*/\\1/g')
|
||||||
%if "%susever" == "10"
|
%if "%rhelver" == "4"
|
||||||
%define distro_description SUSE Linux Enterprise Server 10
|
%define distro_description Red Hat Enterprise Linux 4
|
||||||
%define distro_releasetag sles10
|
%define distro_releasetag rhel4
|
||||||
%define distro_buildreq gcc-c++ gdbm-devel gperf ncurses-devel openldap2-client readline-devel zlib-devel
|
%define distro_buildreq gcc-c++ gperf ncurses-devel perl readline-devel time zlib-devel
|
||||||
%define distro_requires aaa_base coreutils grep procps pwdutils
|
%define distro_requires chkconfig coreutils grep procps shadow-utils net-tools
|
||||||
%else
|
%else
|
||||||
%if "%susever" == "11"
|
%if "%rhelver" == "5"
|
||||||
%define distro_description SUSE Linux Enterprise Server 11
|
%define distro_description Red Hat Enterprise Linux 5
|
||||||
%define distro_releasetag sles11
|
%define distro_releasetag rhel5
|
||||||
%define distro_buildreq gcc-c++ gdbm-devel gperf ncurses-devel openldap2-client procps pwdutils readline-devel zlib-devel
|
%define distro_buildreq gcc-c++ gperf ncurses-devel perl readline-devel time zlib-devel
|
||||||
%define distro_requires aaa_base coreutils grep procps pwdutils
|
%define distro_requires chkconfig coreutils grep procps shadow-utils net-tools
|
||||||
%else
|
%else
|
||||||
%{error:SuSE %{susever} is unsupported}
|
%if "%rhelver" == "6"
|
||||||
|
%define distro_description Red Hat Enterprise Linux 6
|
||||||
|
%define distro_releasetag rhel6
|
||||||
|
%define distro_buildreq gcc-c++ ncurses-devel perl readline-devel time zlib-devel
|
||||||
|
%define distro_requires chkconfig coreutils grep procps shadow-utils net-tools
|
||||||
|
%else
|
||||||
|
%{error:Red Hat Enterprise Linux %{rhelver} is unsupported}
|
||||||
|
%endif
|
||||||
%endif
|
%endif
|
||||||
%endif
|
%endif
|
||||||
%else
|
%else
|
||||||
%{error:Unsupported distribution}
|
%if %(test -f /etc/SuSE-release && echo 1 || echo 0)
|
||||||
|
%define susever %(rpm -qf --qf '%%{version}\\n' /etc/SuSE-release)
|
||||||
|
%if "%susever" == "10"
|
||||||
|
%define distro_description SUSE Linux Enterprise Server 10
|
||||||
|
%define distro_releasetag sles10
|
||||||
|
%define distro_buildreq gcc-c++ gdbm-devel gperf ncurses-devel openldap2-client readline-devel zlib-devel
|
||||||
|
%define distro_requires aaa_base coreutils grep procps pwdutils
|
||||||
|
%else
|
||||||
|
%if "%susever" == "11"
|
||||||
|
%define distro_description SUSE Linux Enterprise Server 11
|
||||||
|
%define distro_releasetag sles11
|
||||||
|
%define distro_buildreq gcc-c++ gdbm-devel gperf ncurses-devel openldap2-client procps pwdutils readline-devel zlib-devel
|
||||||
|
%define distro_requires aaa_base coreutils grep procps pwdutils
|
||||||
|
%else
|
||||||
|
%{error:SuSE %{susever} is unsupported}
|
||||||
|
%endif
|
||||||
|
%endif
|
||||||
|
%else
|
||||||
|
%{error:Unsupported distribution}
|
||||||
|
%endif
|
||||||
%endif
|
%endif
|
||||||
%endif
|
%endif
|
||||||
%endif
|
%endif
|
||||||
@ -444,25 +463,6 @@ mkdir release
|
|||||||
make ${MAKE_JFLAG} VERBOSE=1
|
make ${MAKE_JFLAG} VERBOSE=1
|
||||||
)
|
)
|
||||||
|
|
||||||
# Use the build root for temporary storage of the shared libraries.
|
|
||||||
RBR=$RPM_BUILD_ROOT
|
|
||||||
|
|
||||||
# Clean up the BuildRoot first
|
|
||||||
[ "$RBR" != "/" ] && [ -d "$RBR" ] && rm -rf "$RBR";
|
|
||||||
|
|
||||||
# For gcc builds, include libgcc.a in the devel subpackage (BUG 4921). This
|
|
||||||
# needs to be during build phase as $CC is not set during install.
|
|
||||||
if "$CC" -v 2>&1 | grep '^gcc.version' >/dev/null 2>&1
|
|
||||||
then
|
|
||||||
libgcc=`$CC $CFLAGS --print-libgcc-file`
|
|
||||||
if [ -f $libgcc ]
|
|
||||||
then
|
|
||||||
mkdir -p $RBR%{_libdir}/mysql
|
|
||||||
install -m 644 $libgcc $RBR%{_libdir}/mysql/libmygcc.a
|
|
||||||
echo "%{_libdir}/mysql/libmygcc.a" >>optional-files-devel
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
%install
|
%install
|
||||||
|
|
||||||
@ -485,6 +485,23 @@ install -d $RBR%{_sbindir}
|
|||||||
make DESTDIR=$RBR install
|
make DESTDIR=$RBR install
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# For gcc builds, include libgcc.a in the devel subpackage (BUG 4921). Do
|
||||||
|
# this in a sub-shell to ensure we don't pollute the install environment
|
||||||
|
# with compiler bits.
|
||||||
|
(
|
||||||
|
PATH=${MYSQL_BUILD_PATH:-$PATH}
|
||||||
|
CC=${MYSQL_BUILD_CC:-${CC:-gcc}}
|
||||||
|
CFLAGS=${MYSQL_BUILD_CFLAGS:-${CFLAGS:-$RPM_OPT_FLAGS}}
|
||||||
|
if "${CC}" -v 2>&1 | grep '^gcc.version' >/dev/null 2>&1; then
|
||||||
|
libgcc=`${CC} ${CFLAGS} --print-libgcc-file`
|
||||||
|
if [ -f ${libgcc} ]; then
|
||||||
|
mkdir -p $RBR%{_libdir}/mysql
|
||||||
|
install -m 644 ${libgcc} $RBR%{_libdir}/mysql/libmygcc.a
|
||||||
|
echo "%{_libdir}/mysql/libmygcc.a" >>optional-files-devel
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
)
|
||||||
|
|
||||||
# FIXME: at some point we should stop doing this and just install everything
|
# FIXME: at some point we should stop doing this and just install everything
|
||||||
# FIXME: directly into %{_libdir}/mysql - perhaps at the same time as renaming
|
# FIXME: directly into %{_libdir}/mysql - perhaps at the same time as renaming
|
||||||
# FIXME: the shared libraries to use libmysql*-$major.$minor.so syntax
|
# FIXME: the shared libraries to use libmysql*-$major.$minor.so syntax
|
||||||
@ -516,7 +533,7 @@ install -m 644 "%{malloc_lib_source}" \
|
|||||||
|
|
||||||
# Remove man pages we explicitly do not want to package, avoids 'unpackaged
|
# Remove man pages we explicitly do not want to package, avoids 'unpackaged
|
||||||
# files' warning.
|
# files' warning.
|
||||||
rm -f $RBR%{_mandir}/man1/make_win_bin_dist.1*
|
# This has become obsolete: rm -f $RBR%{_mandir}/man1/make_win_bin_dist.1*
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Post processing actions, i.e. when installed
|
# Post processing actions, i.e. when installed
|
||||||
@ -970,6 +987,7 @@ echo "=====" >> $STATUS_HISTORY
|
|||||||
%doc %attr(644, root, man) %{_mandir}/man1/mysqld_safe.1*
|
%doc %attr(644, root, man) %{_mandir}/man1/mysqld_safe.1*
|
||||||
%doc %attr(644, root, man) %{_mandir}/man1/mysqldumpslow.1*
|
%doc %attr(644, root, man) %{_mandir}/man1/mysqldumpslow.1*
|
||||||
%doc %attr(644, root, man) %{_mandir}/man1/mysql_install_db.1*
|
%doc %attr(644, root, man) %{_mandir}/man1/mysql_install_db.1*
|
||||||
|
%doc %attr(644, root, man) %{_mandir}/man1/mysql_plugin.1*
|
||||||
%doc %attr(644, root, man) %{_mandir}/man1/mysql_secure_installation.1*
|
%doc %attr(644, root, man) %{_mandir}/man1/mysql_secure_installation.1*
|
||||||
%doc %attr(644, root, man) %{_mandir}/man1/mysql_setpermission.1*
|
%doc %attr(644, root, man) %{_mandir}/man1/mysql_setpermission.1*
|
||||||
%doc %attr(644, root, man) %{_mandir}/man1/mysql_upgrade.1*
|
%doc %attr(644, root, man) %{_mandir}/man1/mysql_upgrade.1*
|
||||||
@ -996,11 +1014,11 @@ echo "=====" >> $STATUS_HISTORY
|
|||||||
%attr(755, root, root) %{_bindir}/mysql_convert_table_format
|
%attr(755, root, root) %{_bindir}/mysql_convert_table_format
|
||||||
%attr(755, root, root) %{_bindir}/mysql_fix_extensions
|
%attr(755, root, root) %{_bindir}/mysql_fix_extensions
|
||||||
%attr(755, root, root) %{_bindir}/mysql_install_db
|
%attr(755, root, root) %{_bindir}/mysql_install_db
|
||||||
|
%attr(755, root, root) %{_bindir}/mysql_plugin
|
||||||
%attr(755, root, root) %{_bindir}/mysql_secure_installation
|
%attr(755, root, root) %{_bindir}/mysql_secure_installation
|
||||||
%attr(755, root, root) %{_bindir}/mysql_setpermission
|
%attr(755, root, root) %{_bindir}/mysql_setpermission
|
||||||
%attr(755, root, root) %{_bindir}/mysql_tzinfo_to_sql
|
%attr(755, root, root) %{_bindir}/mysql_tzinfo_to_sql
|
||||||
%attr(755, root, root) %{_bindir}/mysql_upgrade
|
%attr(755, root, root) %{_bindir}/mysql_upgrade
|
||||||
%attr(755, root, root) %{_bindir}/mysql_plugin
|
|
||||||
%attr(755, root, root) %{_bindir}/mysql_zap
|
%attr(755, root, root) %{_bindir}/mysql_zap
|
||||||
%attr(755, root, root) %{_bindir}/mysqlbug
|
%attr(755, root, root) %{_bindir}/mysqlbug
|
||||||
%attr(755, root, root) %{_bindir}/mysqld_multi
|
%attr(755, root, root) %{_bindir}/mysqld_multi
|
||||||
@ -1133,6 +1151,21 @@ echo "=====" >> $STATUS_HISTORY
|
|||||||
# merging BK trees)
|
# merging BK trees)
|
||||||
##############################################################################
|
##############################################################################
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Sep 13 2011 Jonathan Perkin <jonathan.perkin@oracle.com>
|
||||||
|
|
||||||
|
- Add support for Oracle Linux 6 and Red Hat Enterprise Linux 6. Due to
|
||||||
|
changes in RPM behaviour ($RPM_BUILD_ROOT is removed prior to install)
|
||||||
|
this necessitated a move of the libmygcc.a installation to the install
|
||||||
|
phase, which is probably where it belonged in the first place.
|
||||||
|
|
||||||
|
* Tue Sep 13 2011 Joerg Bruehe <joerg.bruehe@oracle.com>
|
||||||
|
|
||||||
|
- "make_win_bin_dist" and its manual are dropped, cmake does it different.
|
||||||
|
|
||||||
|
* Tue Aug 30 2011 Joerg Bruehe <joerg.bruehe@oracle.com>
|
||||||
|
|
||||||
|
- Add the manual page for "mysql_plugin" to the server package.
|
||||||
|
|
||||||
* Fri Aug 19 2011 Joerg Bruehe <joerg.bruehe@oracle.com>
|
* Fri Aug 19 2011 Joerg Bruehe <joerg.bruehe@oracle.com>
|
||||||
|
|
||||||
- Null-upmerge the fix of bug#37165: This spec file is not affected.
|
- Null-upmerge the fix of bug#37165: This spec file is not affected.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user