mysql-5.5.29 merge
This commit is contained in:
commit
d3935adf7a
@ -20,6 +20,7 @@ if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" GREATER 2.6)
|
||||
CMAKE_POLICY(VERSION 2.8)
|
||||
endif()
|
||||
|
||||
MESSAGE(STATUS "Running cmake version ${CMAKE_VERSION}")
|
||||
|
||||
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
|
||||
|
||||
@ -321,6 +322,7 @@ IF(NOT WITHOUT_SERVER)
|
||||
IF(EXISTS ${CMAKE_SOURCE_DIR}/internal/CMakeLists.txt)
|
||||
ADD_SUBDIRECTORY(internal)
|
||||
ENDIF()
|
||||
ADD_SUBDIRECTORY(packaging/rpm-uln)
|
||||
ENDIF()
|
||||
|
||||
IF(UNIX)
|
||||
|
@ -227,6 +227,16 @@ foreach my $option (@ARGV)
|
||||
$cmakeargs = $cmakeargs." -DCMAKE_VERBOSE_MAKEFILE=1";
|
||||
next;
|
||||
}
|
||||
if ($option =~ /with-client-ldflags/)
|
||||
{
|
||||
print("configure.pl : ignoring $option\n");
|
||||
next;
|
||||
}
|
||||
if ($option =~ /with-mysqld-ldflags=/)
|
||||
{
|
||||
print("configure.pl : ignoring $option\n");
|
||||
next;
|
||||
}
|
||||
|
||||
$option = uc($option);
|
||||
$option =~ s/-/_/g;
|
||||
|
@ -69,10 +69,13 @@ EXECUTE_PROCESS(
|
||||
COMMAND "@CMAKE_COMMAND@" -E echo Executing ${BOOTSTRAP_COMMAND}
|
||||
)
|
||||
EXECUTE_PROCESS (
|
||||
COMMAND "@CMAKE_COMMAND@" -E echo input file bootstrap.sql, current directory ${CWD}
|
||||
COMMAND "@CMAKE_COMMAND@" -E
|
||||
echo input file bootstrap.sql, current directory ${CWD}
|
||||
)
|
||||
EXECUTE_PROCESS (
|
||||
COMMAND ${BOOTSTRAP_COMMAND} INPUT_FILE bootstrap.sql OUTPUT_VARIABLE OUT
|
||||
COMMAND ${BOOTSTRAP_COMMAND}
|
||||
INPUT_FILE bootstrap.sql
|
||||
OUTPUT_VARIABLE OUT
|
||||
ERROR_VARIABLE ERR
|
||||
RESULT_VARIABLE RESULT
|
||||
)
|
||||
@ -81,3 +84,6 @@ IF(NOT RESULT EQUAL 0)
|
||||
MESSAGE(FATAL_ERROR "Could not create initial database \n ${OUT} \n ${ERR}")
|
||||
ENDIF()
|
||||
|
||||
EXECUTE_PROCESS (
|
||||
COMMAND "@CMAKE_COMMAND@" -E touch ${CMAKE_CURRENT_BINARY_DIR}/initdb.dep
|
||||
)
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2012, 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
|
||||
@ -82,9 +82,11 @@ MACRO(CREATE_INFO_BIN)
|
||||
|
||||
FILE(WRITE ${INFO_BIN} "===== Information about the build process: =====\n")
|
||||
IF (WIN32)
|
||||
EXECUTE_PROCESS(COMMAND cmd /c date /T OUTPUT_VARIABLE TMP_DATE)
|
||||
EXECUTE_PROCESS(COMMAND cmd /c date /T
|
||||
OUTPUT_VARIABLE TMP_DATE OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
ELSEIF(UNIX)
|
||||
EXECUTE_PROCESS(COMMAND date "+%Y-%m-%d %H:%M:%S" OUTPUT_VARIABLE TMP_DATE OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
EXECUTE_PROCESS(COMMAND date "+%Y-%m-%d %H:%M:%S"
|
||||
OUTPUT_VARIABLE TMP_DATE OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
ELSE()
|
||||
SET(TMP_DATE "(no date command known for this platform)")
|
||||
ENDIF()
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2010, 2012, 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
|
||||
@ -100,7 +100,10 @@ ENDIF()
|
||||
# just use if(INSTALL_PLUGINTESTDIR).
|
||||
# The plugin must set its own install path for tests
|
||||
#
|
||||
FILE(GLOB plugin_tests ${CMAKE_SOURCE_DIR}/plugin/*/tests)
|
||||
FILE(GLOB plugin_tests
|
||||
${CMAKE_SOURCE_DIR}/plugin/*/tests
|
||||
${CMAKE_SOURCE_DIR}/internal/plugin/*/tests
|
||||
)
|
||||
|
||||
#
|
||||
# STANDALONE layout
|
||||
|
@ -54,7 +54,7 @@ MACRO(GET_MYSQL_VERSION)
|
||||
ENDIF()
|
||||
|
||||
SET(VERSION "${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}${EXTRA_VERSION}")
|
||||
MESSAGE("-- MariaDB ${VERSION}")
|
||||
MESSAGE(STATUS "MariaDB ${VERSION}")
|
||||
SET(MYSQL_BASE_VERSION "${MAJOR_VERSION}.${MINOR_VERSION}" CACHE INTERNAL "MySQL Base version")
|
||||
SET(MYSQL_NO_DASH_VERSION "${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}")
|
||||
# Use NDBVERSION irregardless of whether this is Cluster or not, if not
|
||||
|
@ -130,7 +130,7 @@ IF(NOT VERSION)
|
||||
SET(package_name "mariadb${PRODUCT_TAG}-${VERSION}-${SYSTEM_NAME_AND_PROCESSOR}")
|
||||
ENDIF()
|
||||
|
||||
MESSAGE("-- Packaging as: ${package_name}")
|
||||
MESSAGE(STATUS "Packaging as: ${package_name}")
|
||||
|
||||
# Sometimes package suffix is added (something like "-icc-glibc23")
|
||||
IF(PACKAGE_SUFFIX)
|
||||
|
@ -39,6 +39,7 @@ MACRO(PLUGIN_APPEND_COLLECTIONS plugin)
|
||||
GET_FILENAME_COMPONENT(fname ${cfile} NAME)
|
||||
FILE(APPEND ${CMAKE_SOURCE_DIR}/mysql-test/collections/${fname} "${contents}")
|
||||
FILE(APPEND ${fcopied} "${fname}\n")
|
||||
MESSAGE(STATUS "Appended ${cfile}")
|
||||
ENDFOREACH()
|
||||
ENDIF()
|
||||
ENDMACRO()
|
||||
|
@ -40,3 +40,4 @@ ha_blackhole storage/blackhole BLACKHOLE_PLUGIN
|
||||
ha_federated storage/federated FEDERATED_PLUGIN
|
||||
mypluglib plugin/fulltext SIMPLE_PARSER
|
||||
libdaemon_example plugin/daemon_example DAEMONEXAMPLE
|
||||
adt_null plugin/audit_null AUDIT_NULL
|
||||
|
@ -8,6 +8,7 @@
|
||||
# --let $rpl_server_number= N
|
||||
# [--let $rpl_server_parameters= --flag1 --flag2 ...]
|
||||
# [--let $rpl_debug= 1]
|
||||
# [--let $rpl_server_error= 0]
|
||||
# --source include/rpl_start_server.inc
|
||||
#
|
||||
# Parameters:
|
||||
@ -21,6 +22,9 @@
|
||||
# If set, extra parameters given by this variable are passed to
|
||||
# mysqld.
|
||||
#
|
||||
# $rpl_server_error
|
||||
# If set, failure of the server startup is expected.
|
||||
#
|
||||
# $rpl_debug
|
||||
# See include/rpl_init.inc
|
||||
#
|
||||
@ -47,8 +51,9 @@ if ($rpl_server_parameters)
|
||||
# Write file to make mysql-test-run.pl start up the server again
|
||||
--exec echo "$_rpl_start_server_command" > $MYSQLTEST_VARDIR/tmp/mysqld.$rpl_server_number.expect
|
||||
|
||||
if (!$rpl_server_error)
|
||||
{
|
||||
--source include/rpl_reconnect.inc
|
||||
|
||||
|
||||
--let $include_filename= rpl_start_server.inc $_rpl_start_server_args
|
||||
--source include/end_include_file.inc
|
||||
}
|
||||
|
@ -3,3 +3,5 @@ Name Location Comment
|
||||
Ronald Bradford Brisbane, Australia EFF contribution for UC2006 Auction
|
||||
Sheeri Kritzer Boston, Mass. USA EFF contribution for UC2006 Auction
|
||||
Mark Shuttleworth London, UK. EFF contribution for UC2006 Auction
|
||||
Warnings:
|
||||
Warning 1681 'SHOW CONTRIBUTORS' is deprecated and will be removed in a future release.
|
||||
|
@ -121,17 +121,20 @@ ERROR 28000: Access denied for user 'grant_plug_dest'@'localhost'
|
||||
this should fail : not the same user
|
||||
GRANT PROXY ON grant_plug TO grant_plug_dest;
|
||||
ERROR 28000: Access denied for user 'grant_plug_dest'@'localhost'
|
||||
this should fail : same user, but on a different host
|
||||
This is a valid grant
|
||||
GRANT PROXY ON grant_plug_dest TO grant_plug;
|
||||
ERROR 28000: Access denied for user 'grant_plug_dest'@'localhost'
|
||||
this should work : same user
|
||||
GRANT PROXY ON grant_plug_dest@localhost TO grant_plug_dest2;
|
||||
REVOKE PROXY ON grant_plug_dest@localhost FROM grant_plug_dest2;
|
||||
REVOKE PROXY ON grant_plug_dest FROM grant_plug;
|
||||
this should work : same user
|
||||
GRANT PROXY ON grant_plug_dest TO grant_plug_dest2;
|
||||
REVOKE PROXY ON grant_plug_dest FROM grant_plug_dest2;
|
||||
this should fail : not the same user
|
||||
GRANT PROXY ON grant_plug_dest@localhost TO grant_plug WITH GRANT OPTION;
|
||||
ERROR 28000: Access denied for user 'grant_plug_dest'@'localhost'
|
||||
this should fail : not the same user
|
||||
REVOKE PROXY ON grant_plug_dest@localhost FROM grant_plug;
|
||||
ERROR 28000: Access denied for user 'grant_plug_dest'@'localhost'
|
||||
this should fail : can't create users
|
||||
GRANT PROXY ON grant_plug_dest@localhost TO grant_plug@localhost;
|
||||
GRANT PROXY ON grant_plug_dest TO grant_plug@localhost;
|
||||
ERROR 42000: You are not allowed to create a user with GRANT
|
||||
in default connection
|
||||
# test what root can grant
|
||||
@ -149,12 +152,12 @@ GRANT PROXY ON future_user TO grant_plug;
|
||||
in default connection
|
||||
SHOW GRANTS FOR grant_plug;
|
||||
Grants for grant_plug@%
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'grant_plug'@'%' IDENTIFIED VIA test_plugin_server USING 'grant_plug_dest' WITH GRANT OPTION
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'grant_plug'@'%' IDENTIFIED VIA test_plugin_server USING 'grant_plug_dest'
|
||||
GRANT PROXY ON 'future_user'@'%' TO 'grant_plug'@'%'
|
||||
REVOKE PROXY ON future_user FROM grant_plug;
|
||||
SHOW GRANTS FOR grant_plug;
|
||||
Grants for grant_plug@%
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'grant_plug'@'%' IDENTIFIED VIA test_plugin_server USING 'grant_plug_dest' WITH GRANT OPTION
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'grant_plug'@'%' IDENTIFIED VIA test_plugin_server USING 'grant_plug_dest'
|
||||
## testing drop user
|
||||
CREATE USER test_drop@localhost;
|
||||
GRANT PROXY ON future_user TO test_drop@localhost;
|
||||
|
@ -1552,3 +1552,14 @@ RELEASE_LOCK('t')
|
||||
óóóó
|
||||
1
|
||||
SET NAMES latin1;
|
||||
#
|
||||
# WL#6454: Deprecate SHOW AUTHORS and SHOW CONTRIBUTORS
|
||||
#
|
||||
SHOW AUTHORS;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1681 'SHOW AUTHORS' is deprecated and will be removed in a future release.
|
||||
SHOW CONTRIBUTORS;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1681 'SHOW CONTRIBUTORS' is deprecated and will be removed in a future release.
|
||||
|
@ -259,7 +259,6 @@ SELECT `my.db`.f1(2);
|
||||
# Switching to default connection.
|
||||
DROP DATABASE `my.db`;
|
||||
USE test;
|
||||
set @@global.concurrent_insert= @old_concurrent_insert;
|
||||
#
|
||||
# Bug#11763507 - 56224: FUNCTION NAME IS CASE-SENSITIVE
|
||||
#
|
||||
|
@ -1269,3 +1269,43 @@ SELECT * FROM t1;
|
||||
c1 c2
|
||||
1 NULL
|
||||
DROP TABLE t1;
|
||||
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
|
||||
SHOW VARIABLES LIKE "%auto_inc%";
|
||||
Variable_name Value
|
||||
auto_increment_increment 1
|
||||
auto_increment_offset 1
|
||||
CREATE TABLE t1 (c1 INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (2147483648, 'a');
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`c2` varchar(10) DEFAULT NULL,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=2147483649 DEFAULT CHARSET=latin1
|
||||
SELECT * FROM t1;
|
||||
c1 c2
|
||||
2147483648 a
|
||||
ALTER TABLE t1 CHANGE c1 c1 INT;
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'c1' at row 1
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL DEFAULT '0',
|
||||
`c2` varchar(10) DEFAULT NULL,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1(c2) VALUES('b');
|
||||
SELECT * FROM t1;
|
||||
c1 c2
|
||||
0 b
|
||||
2147483647 a
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL DEFAULT '0',
|
||||
`c2` varchar(10) DEFAULT NULL,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
|
@ -126,12 +126,12 @@ CREATE TABLE t1(
|
||||
c TEXT NOT NULL, d TEXT NOT NULL,
|
||||
PRIMARY KEY (c(767),d(767)))
|
||||
ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1 CHARSET=ASCII;
|
||||
ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs
|
||||
ERROR 42000: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.
|
||||
CREATE TABLE t1(
|
||||
c TEXT NOT NULL, d TEXT NOT NULL,
|
||||
PRIMARY KEY (c(767),d(767)))
|
||||
ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=2 CHARSET=ASCII;
|
||||
ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs
|
||||
ERROR 42000: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.
|
||||
CREATE TABLE t1(
|
||||
c TEXT NOT NULL, d TEXT NOT NULL,
|
||||
PRIMARY KEY (c(767),d(767)))
|
||||
@ -139,7 +139,7 @@ ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4 CHARSET=ASCII;
|
||||
drop table t1;
|
||||
CREATE TABLE t1(c TEXT, PRIMARY KEY (c(440)))
|
||||
ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1 CHARSET=ASCII;
|
||||
ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs
|
||||
ERROR 42000: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.
|
||||
CREATE TABLE t1(c TEXT, PRIMARY KEY (c(438)))
|
||||
ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1 CHARSET=ASCII;
|
||||
INSERT INTO t1 VALUES(REPEAT('A',512)),(REPEAT('B',512));
|
||||
|
@ -3026,7 +3026,7 @@ c21 CHAR(255), c22 CHAR(255), c23 CHAR(255), c24 CHAR(255),
|
||||
c25 CHAR(255), c26 CHAR(255), c27 CHAR(255), c28 CHAR(255),
|
||||
c29 CHAR(255), c30 CHAR(255), c31 CHAR(255), c32 CHAR(255)
|
||||
) ENGINE = InnoDB;
|
||||
ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs
|
||||
ERROR 42000: Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.
|
||||
DROP TABLE IF EXISTS t1;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 't1'
|
||||
|
@ -8,7 +8,7 @@ ERROR HY000: Too big row
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Error 139 Too big row
|
||||
Error 1118 Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs
|
||||
Error 1118 Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.
|
||||
DROP TABLE bug53591;
|
||||
SET GLOBAL innodb_file_format=Antelope;
|
||||
SET GLOBAL innodb_file_per_table=0;
|
||||
|
@ -649,7 +649,7 @@ CREATE TABLE worklog5743 (col_1_varchar VARCHAR (4000) CHARACTER SET 'utf8',
|
||||
col_2_varchar VARCHAR (4000) CHARACTER SET 'utf8' ,
|
||||
PRIMARY KEY (col_1_varchar(1024))
|
||||
) ROW_FORMAT=DYNAMIC, engine = innodb;
|
||||
ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs
|
||||
ERROR 42000: Row size too large (> max_row_size). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.
|
||||
CREATE TABLE worklog5743 (
|
||||
col_1_varbinary VARBINARY (4000) ,
|
||||
col_2_varchar VARCHAR (4000) CHARACTER SET 'utf8',
|
||||
|
@ -639,7 +639,7 @@ SHOW CREATE TABLE t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
# Check if we handl offset > column max value properly
|
||||
# Check if we handle offset > column max value properly
|
||||
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=256;
|
||||
SHOW VARIABLES LIKE "%auto_inc%";
|
||||
# TINYINT
|
||||
@ -648,3 +648,21 @@ INSERT INTO t1 VALUES (1, NULL);
|
||||
SHOW CREATE TABLE t1;
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
# Check if we handle the case where a current value is greater than the max
|
||||
# of the column. IMO, this should not be allowed and the assertion that fails
|
||||
# is actually an invariant.
|
||||
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
|
||||
SHOW VARIABLES LIKE "%auto_inc%";
|
||||
# TINYINT
|
||||
CREATE TABLE t1 (c1 INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (2147483648, 'a');
|
||||
SHOW CREATE TABLE t1;
|
||||
SELECT * FROM t1;
|
||||
ALTER TABLE t1 CHANGE c1 c1 INT;
|
||||
SHOW CREATE TABLE t1;
|
||||
INSERT INTO t1(c2) VALUES('b');
|
||||
SELECT * FROM t1;
|
||||
SHOW CREATE TABLE t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
@ -1,5 +1,10 @@
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
if (`select plugin_auth_version <= "1.1.8-29.1" from information_schema.plugins where plugin_name='innodb'`)
|
||||
{
|
||||
--skip Not fixed in XtraDB 1.1.8-29.1 or earlier
|
||||
}
|
||||
|
||||
let $per_table=`select @@innodb_file_per_table`;
|
||||
let $format=`select @@innodb_file_format`;
|
||||
let $innodb_strict_mode_orig=`select @@session.innodb_strict_mode`;
|
||||
|
@ -4,6 +4,11 @@
|
||||
# .\sync\sync0sync.c line 324
|
||||
# is fixed
|
||||
|
||||
if (`select plugin_auth_version <= "1.1.8-29.1" from information_schema.plugins where plugin_name='innodb'`)
|
||||
{
|
||||
--skip Not fixed in XtraDB 1.1.8-29.1 or earlier
|
||||
}
|
||||
|
||||
#######################################################################
|
||||
# #
|
||||
# Please, DO NOT TOUCH this file as well as the innodb.result file. #
|
||||
|
@ -1,5 +1,9 @@
|
||||
--source include/have_innodb.inc
|
||||
|
||||
if (`select plugin_auth_version <= "1.1.8-29.1" from information_schema.plugins where plugin_name='innodb'`)
|
||||
{
|
||||
--skip Not fixed in XtraDB 1.1.8-29.1 or earlier
|
||||
}
|
||||
let $file_format=`select @@innodb_file_format`;
|
||||
let $file_per_table=`select @@innodb_file_per_table`;
|
||||
|
||||
|
@ -14,6 +14,10 @@
|
||||
# #
|
||||
######################################################################
|
||||
|
||||
if (`select plugin_auth_version <= "1.1.8-29.1" from information_schema.plugins where plugin_name='innodb'`)
|
||||
{
|
||||
--skip Not fixed in XtraDB 1.1.8-29.1 or earlier
|
||||
}
|
||||
|
||||
# Save innodb variables
|
||||
let $innodb_file_format_orig=`select @@innodb_file_format`;
|
||||
@ -601,6 +605,7 @@ DROP TABLE worklog5743;
|
||||
# Prefix index with utf8 charset + varchar.
|
||||
# For varchar we also log the column itself as oppose of TEXT so it error
|
||||
# with limit 1024 due to overhead.
|
||||
--replace_regex /> [0-9]*/> max_row_size/
|
||||
-- error 1118
|
||||
CREATE TABLE worklog5743 (col_1_varchar VARCHAR (4000) CHARACTER SET 'utf8',
|
||||
col_2_varchar VARCHAR (4000) CHARACTER SET 'utf8' ,
|
||||
|
@ -1,6 +1,7 @@
|
||||
UPDATE performance_schema.setup_instruments SET enabled = 'NO', timed = 'YES';
|
||||
UPDATE performance_schema.setup_instruments SET enabled = 'YES'
|
||||
WHERE name LIKE 'wait/io/file/%';
|
||||
flush status;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (id INT PRIMARY KEY, b CHAR(100) DEFAULT 'initial value')
|
||||
ENGINE=MyISAM;
|
||||
@ -113,3 +114,19 @@ WHERE p.PROCESSLIST_ID = 1
|
||||
GROUP BY h.EVENT_NAME
|
||||
HAVING TOTAL_WAIT > 0;
|
||||
UPDATE performance_schema.setup_instruments SET enabled = 'YES';
|
||||
show status like "performance_schema%";
|
||||
Variable_name Value
|
||||
Performance_schema_cond_classes_lost 0
|
||||
Performance_schema_cond_instances_lost 0
|
||||
Performance_schema_file_classes_lost 0
|
||||
Performance_schema_file_handles_lost 0
|
||||
Performance_schema_file_instances_lost 0
|
||||
Performance_schema_locker_lost 0
|
||||
Performance_schema_mutex_classes_lost 0
|
||||
Performance_schema_mutex_instances_lost 0
|
||||
Performance_schema_rwlock_classes_lost 0
|
||||
Performance_schema_rwlock_instances_lost 0
|
||||
Performance_schema_table_handles_lost 0
|
||||
Performance_schema_table_instances_lost 0
|
||||
Performance_schema_thread_classes_lost 0
|
||||
Performance_schema_thread_instances_lost 0
|
||||
|
@ -2,6 +2,15 @@ UPDATE performance_schema.setup_instruments SET enabled = 'NO', timed = 'YES';
|
||||
UPDATE performance_schema.setup_instruments SET enabled = 'YES'
|
||||
WHERE name LIKE 'wait/synch/mutex/%'
|
||||
OR name LIKE 'wait/synch/rwlock/%';
|
||||
flush status;
|
||||
select NAME from performance_schema.mutex_instances
|
||||
where NAME = 'wait/synch/mutex/sql/LOCK_open';
|
||||
NAME
|
||||
wait/synch/mutex/sql/LOCK_open
|
||||
select NAME from performance_schema.rwlock_instances
|
||||
where NAME = 'wait/synch/rwlock/sql/LOCK_grant';
|
||||
NAME
|
||||
wait/synch/rwlock/sql/LOCK_grant
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (id INT PRIMARY KEY, b CHAR(100) DEFAULT 'initial value')
|
||||
ENGINE=MyISAM;
|
||||
@ -112,3 +121,19 @@ test_fm2_rw_timed
|
||||
Success
|
||||
UPDATE performance_schema.setup_instruments SET enabled = 'YES';
|
||||
DROP TABLE t1;
|
||||
show status like "performance_schema%";
|
||||
Variable_name Value
|
||||
Performance_schema_cond_classes_lost 0
|
||||
Performance_schema_cond_instances_lost 0
|
||||
Performance_schema_file_classes_lost 0
|
||||
Performance_schema_file_handles_lost 0
|
||||
Performance_schema_file_instances_lost 0
|
||||
Performance_schema_locker_lost 0
|
||||
Performance_schema_mutex_classes_lost 0
|
||||
Performance_schema_mutex_instances_lost 0
|
||||
Performance_schema_rwlock_classes_lost 0
|
||||
Performance_schema_rwlock_instances_lost 0
|
||||
Performance_schema_table_handles_lost 0
|
||||
Performance_schema_table_instances_lost 0
|
||||
Performance_schema_thread_classes_lost 0
|
||||
Performance_schema_thread_instances_lost 0
|
||||
|
@ -12,6 +12,9 @@ UPDATE performance_schema.setup_instruments SET enabled = 'NO', timed = 'YES';
|
||||
UPDATE performance_schema.setup_instruments SET enabled = 'YES'
|
||||
WHERE name LIKE 'wait/io/file/%';
|
||||
|
||||
# reset lost counters
|
||||
flush status;
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
@ -182,3 +185,7 @@ HAVING TOTAL_WAIT > 0;
|
||||
|
||||
# Clean-up.
|
||||
UPDATE performance_schema.setup_instruments SET enabled = 'YES';
|
||||
|
||||
# In case of failure, will indicate the root cause
|
||||
show status like "performance_schema%";
|
||||
|
||||
|
@ -13,6 +13,15 @@ UPDATE performance_schema.setup_instruments SET enabled = 'YES'
|
||||
WHERE name LIKE 'wait/synch/mutex/%'
|
||||
OR name LIKE 'wait/synch/rwlock/%';
|
||||
|
||||
# reset lost counters
|
||||
flush status;
|
||||
|
||||
# Make sure objects are instrumented
|
||||
select NAME from performance_schema.mutex_instances
|
||||
where NAME = 'wait/synch/mutex/sql/LOCK_open';
|
||||
select NAME from performance_schema.rwlock_instances
|
||||
where NAME = 'wait/synch/rwlock/sql/LOCK_grant';
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
@ -116,3 +125,7 @@ SELECT IF((COALESCE(@after_count, 0) - COALESCE(@before_count, 0)) = 0, 'Success
|
||||
# Clean-up.
|
||||
UPDATE performance_schema.setup_instruments SET enabled = 'YES';
|
||||
DROP TABLE t1;
|
||||
|
||||
# In case of failure, will indicate the root cause
|
||||
show status like "performance_schema%";
|
||||
|
||||
|
@ -93,7 +93,7 @@ Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 0
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_yes_tx 301
|
||||
Rpl_semi_sync_master_yes_tx 11
|
||||
[ on slave ]
|
||||
[ slave status after replicated inserts ]
|
||||
show status like 'Rpl_semi_sync_slave_status';
|
||||
@ -101,13 +101,13 @@ Variable_name Value
|
||||
Rpl_semi_sync_slave_status ON
|
||||
select count(distinct a) from t1;
|
||||
count(distinct a)
|
||||
300
|
||||
10
|
||||
select min(a) from t1;
|
||||
min(a)
|
||||
1
|
||||
select max(a) from t1;
|
||||
max(a)
|
||||
300
|
||||
10
|
||||
|
||||
# BUG#50157
|
||||
# semi-sync replication crashes when replicating a transaction which
|
||||
@ -133,6 +133,7 @@ SET SESSION AUTOCOMMIT= 1;
|
||||
#
|
||||
include/stop_slave.inc
|
||||
[ on master ]
|
||||
set global rpl_semi_sync_master_timeout= 5000;
|
||||
[ master status should be ON ]
|
||||
show status like 'Rpl_semi_sync_master_status';
|
||||
Variable_name Value
|
||||
@ -142,7 +143,7 @@ Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 0
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_yes_tx 304
|
||||
Rpl_semi_sync_master_yes_tx 14
|
||||
show status like 'Rpl_semi_sync_master_clients';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_clients 1
|
||||
@ -157,7 +158,7 @@ Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 1
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_yes_tx 304
|
||||
Rpl_semi_sync_master_yes_tx 14
|
||||
insert into t1 values (100);
|
||||
[ master status should be OFF ]
|
||||
show status like 'Rpl_semi_sync_master_status';
|
||||
@ -165,10 +166,10 @@ Variable_name Value
|
||||
Rpl_semi_sync_master_status OFF
|
||||
show status like 'Rpl_semi_sync_master_no_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 302
|
||||
Rpl_semi_sync_master_no_tx 12
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_yes_tx 304
|
||||
Rpl_semi_sync_master_yes_tx 14
|
||||
#
|
||||
# Test semi-sync status on master will be ON again when slave catches up
|
||||
#
|
||||
@ -198,10 +199,10 @@ Variable_name Value
|
||||
Rpl_semi_sync_master_status ON
|
||||
show status like 'Rpl_semi_sync_master_no_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 302
|
||||
Rpl_semi_sync_master_no_tx 12
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_yes_tx 304
|
||||
Rpl_semi_sync_master_yes_tx 14
|
||||
show status like 'Rpl_semi_sync_master_clients';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_clients 1
|
||||
@ -217,10 +218,10 @@ include/stop_slave.inc
|
||||
[ Semi-sync master status variables before FLUSH STATUS ]
|
||||
SHOW STATUS LIKE 'Rpl_semi_sync_master_no_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 302
|
||||
Rpl_semi_sync_master_no_tx 12
|
||||
SHOW STATUS LIKE 'Rpl_semi_sync_master_yes_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_yes_tx 305
|
||||
Rpl_semi_sync_master_yes_tx 15
|
||||
FLUSH NO_WRITE_TO_BINLOG STATUS;
|
||||
[ Semi-sync master status variables after FLUSH STATUS ]
|
||||
SHOW STATUS LIKE 'Rpl_semi_sync_master_no_tx';
|
||||
|
@ -67,7 +67,7 @@ if ($value == No such row)
|
||||
{
|
||||
set sql_log_bin=0;
|
||||
eval INSTALL PLUGIN rpl_semi_sync_master SONAME '$SEMISYNC_MASTER_SO';
|
||||
set global rpl_semi_sync_master_timeout= 5000; /* 5s */
|
||||
set global rpl_semi_sync_master_timeout= 60000; /* 60s */
|
||||
set sql_log_bin=1;
|
||||
}
|
||||
enable_query_log;
|
||||
@ -173,7 +173,7 @@ let $_connections_semisync_slave= query_get_value(SHOW STATUS LIKE 'Threads_conn
|
||||
replace_result $_connections_normal_slave CONNECTIONS_NORMAL_SLAVE $_connections_semisync_slave CONNECTIONS_SEMISYNC_SLAVE;
|
||||
eval select $_connections_semisync_slave - $_connections_normal_slave as 'Should be 0';
|
||||
|
||||
let $i=300;
|
||||
let $i=10;
|
||||
echo [ insert records to table ];
|
||||
disable_query_log;
|
||||
while ($i)
|
||||
@ -237,6 +237,7 @@ source include/stop_slave.inc;
|
||||
|
||||
connection master;
|
||||
echo [ on master ];
|
||||
set global rpl_semi_sync_master_timeout= 5000;
|
||||
|
||||
# The first semi-sync check should be on because after slave stop,
|
||||
# there are no transactions on the master.
|
||||
@ -263,7 +264,7 @@ show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
|
||||
# Semi-sync status on master is now OFF, so all these transactions
|
||||
# will be replicated asynchronously.
|
||||
let $i=300;
|
||||
let $i=10;
|
||||
disable_query_log;
|
||||
while ($i)
|
||||
{
|
||||
|
@ -174,21 +174,35 @@ GRANT PROXY ON ''@'' TO grant_plug;
|
||||
--error ER_ACCESS_DENIED_NO_PASSWORD_ERROR
|
||||
GRANT PROXY ON grant_plug TO grant_plug_dest;
|
||||
|
||||
--echo this should fail : same user, but on a different host
|
||||
--error ER_ACCESS_DENIED_NO_PASSWORD_ERROR
|
||||
# Security context in THD contains two pairs of (user,host)
|
||||
# 1. (user,host) pair referring to inbound connection
|
||||
# 2. (priv_user,priv_host) pair obtained from mysql.user table after doing
|
||||
# authnetication of incoming connection.
|
||||
# Granting/revoking proxy privileges, privileges should be checked wrt
|
||||
# (priv_user, priv_host) tuple that is obtained from mysql.user table
|
||||
# Following is a valid grant because effective user of connection is
|
||||
# grant_plug_dest@% and statement is trying to grant proxy on the same
|
||||
# user.
|
||||
--echo This is a valid grant
|
||||
GRANT PROXY ON grant_plug_dest TO grant_plug;
|
||||
REVOKE PROXY ON grant_plug_dest FROM grant_plug;
|
||||
|
||||
--echo this should work : same user
|
||||
GRANT PROXY ON grant_plug_dest@localhost TO grant_plug_dest2;
|
||||
REVOKE PROXY ON grant_plug_dest@localhost FROM grant_plug_dest2;
|
||||
GRANT PROXY ON grant_plug_dest TO grant_plug_dest2;
|
||||
REVOKE PROXY ON grant_plug_dest FROM grant_plug_dest2;
|
||||
|
||||
--echo this should work : same user
|
||||
# grant_plug_dest@localhost is not the same as grant_plug_dest@%
|
||||
# so following grant/revoke should fail
|
||||
--echo this should fail : not the same user
|
||||
--error ER_ACCESS_DENIED_NO_PASSWORD_ERROR
|
||||
GRANT PROXY ON grant_plug_dest@localhost TO grant_plug WITH GRANT OPTION;
|
||||
--echo this should fail : not the same user
|
||||
--error ER_ACCESS_DENIED_NO_PASSWORD_ERROR
|
||||
REVOKE PROXY ON grant_plug_dest@localhost FROM grant_plug;
|
||||
|
||||
--echo this should fail : can't create users
|
||||
--error ER_CANT_CREATE_USER_WITH_GRANT
|
||||
GRANT PROXY ON grant_plug_dest@localhost TO grant_plug@localhost;
|
||||
GRANT PROXY ON grant_plug_dest TO grant_plug@localhost;
|
||||
|
||||
connection default;
|
||||
--echo in default connection
|
||||
|
@ -1371,3 +1371,17 @@ SELECT RELEASE_LOCK('t');
|
||||
--connection default
|
||||
SET NAMES latin1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # WL#6454: Deprecate SHOW AUTHORS and SHOW CONTRIBUTORS
|
||||
--echo #
|
||||
|
||||
--disable_result_log
|
||||
SHOW AUTHORS;
|
||||
--enable_result_log
|
||||
SHOW WARNINGS;
|
||||
|
||||
--disable_result_log
|
||||
SHOW CONTRIBUTORS;
|
||||
--enable_result_log
|
||||
SHOW WARNINGS;
|
||||
|
@ -429,14 +429,6 @@ disconnect addcon;
|
||||
DROP DATABASE `my.db`;
|
||||
USE test;
|
||||
|
||||
#
|
||||
# Restore global concurrent_insert value. Keep in the end of the test file.
|
||||
#
|
||||
|
||||
set @@global.concurrent_insert= @old_concurrent_insert;
|
||||
|
||||
# Wait till all disconnects are completed
|
||||
--source include/wait_until_count_sessions.inc
|
||||
|
||||
--echo #
|
||||
--echo # Bug#11763507 - 56224: FUNCTION NAME IS CASE-SENSITIVE
|
||||
|
38
packaging/rpm-uln/CMakeLists.txt
Normal file
38
packaging/rpm-uln/CMakeLists.txt
Normal file
@ -0,0 +1,38 @@
|
||||
# Copyright (c) 2012, 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
|
||||
|
||||
|
||||
IF(UNIX)
|
||||
SET(prefix ${CMAKE_INSTALL_PREFIX})
|
||||
|
||||
SET(SPECFILENAME "mysql.${VERSION}.spec")
|
||||
IF("${VERSION}" MATCHES "-ndb-")
|
||||
STRING(REGEX REPLACE "^.*-ndb-" "" NDBVERSION "${VERSION}")
|
||||
SET(SPECFILENAME "mysql-cluster-${NDBVERSION}.spec")
|
||||
ENDIF()
|
||||
|
||||
# Left in current directory, to be taken during build
|
||||
CONFIGURE_FILE(mysql.spec.sh ${CMAKE_CURRENT_BINARY_DIR}/${SPECFILENAME} @ONLY)
|
||||
|
||||
FOREACH(ulnfile filter-requires-mysql.sh generate-tarball.sh my.cnf my_config.h
|
||||
mysql-5.5-errno.patch mysql-5.5-fix-tests.patch mysql-5.5-libdir.patch
|
||||
mysql-5.5-mtr1.patch mysql-5.5-stack-guard.patch mysql-5.5-testing.patch
|
||||
mysql-chain-certs.patch mysql-embedded-check.c mysql-expired-certs.patch
|
||||
mysql.init mysql-install-test.patch mysql-strmov.patch scriptstub.c
|
||||
README.mysql-docs)
|
||||
CONFIGURE_FILE(${ulnfile} ${CMAKE_CURRENT_BINARY_DIR}/${ulnfile} COPYONLY)
|
||||
ENDFOREACH()
|
||||
ENDIF()
|
||||
|
15
packaging/rpm-uln/README-ULN
Normal file
15
packaging/rpm-uln/README-ULN
Normal file
@ -0,0 +1,15 @@
|
||||
In order to have RPMs of MySQL which are distributed via ULN for Oracle Linux
|
||||
to be as closely compatible to such RPMs built and distributed by RedHat,
|
||||
this directory contains additional files which originated at RedHat
|
||||
and are used only for such RPMs intended for distribution via ULN.
|
||||
|
||||
Especially, this directory contains the spec file used to build these RPMs,
|
||||
named "mysql.spec". Please regard the following note:
|
||||
|
||||
You are receiving a copy of the Red Hat spec file.
|
||||
The terms of the Oracle license do NOT apply to the Red Hat spec file;
|
||||
it is licensed under the
|
||||
GNU GENERAL PUBLIC LICENSE Version 2, June 1991
|
||||
separately from the Oracle programs you receive.
|
||||
|
||||
|
4
packaging/rpm-uln/README.mysql-docs
Normal file
4
packaging/rpm-uln/README.mysql-docs
Normal file
@ -0,0 +1,4 @@
|
||||
The official MySQL documentation is not freely redistributable, so we cannot
|
||||
include it in RHEL or Fedora. You can find it on-line at
|
||||
|
||||
http://dev.mysql.com/doc/
|
3
packaging/rpm-uln/filter-requires-mysql.sh
Executable file
3
packaging/rpm-uln/filter-requires-mysql.sh
Executable file
@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
/usr/lib/rpm/perl.req $* | grep -v -e "perl(th" -e "perl(lib::mtr" -e "perl(mtr"
|
15
packaging/rpm-uln/generate-tarball.sh
Executable file
15
packaging/rpm-uln/generate-tarball.sh
Executable file
@ -0,0 +1,15 @@
|
||||
#!/bin/sh
|
||||
|
||||
VERSION=$1
|
||||
|
||||
rm -rf mysql-$VERSION
|
||||
|
||||
tar xfz mysql-$VERSION.tar.gz || exit 1
|
||||
|
||||
rm mysql-$VERSION/Docs/mysql.info
|
||||
|
||||
tar cfz mysql-$VERSION-nodocs.tar.gz mysql-$VERSION || exit 1
|
||||
|
||||
rm -rf mysql-$VERSION
|
||||
|
||||
exit 0
|
10
packaging/rpm-uln/my.cnf
Normal file
10
packaging/rpm-uln/my.cnf
Normal file
@ -0,0 +1,10 @@
|
||||
[mysqld]
|
||||
datadir=/var/lib/mysql
|
||||
socket=/var/lib/mysql/mysql.sock
|
||||
user=mysql
|
||||
# Disabling symbolic-links is recommended to prevent assorted security risks
|
||||
symbolic-links=0
|
||||
|
||||
[mysqld_safe]
|
||||
log-error=/var/log/mysqld.log
|
||||
pid-file=/var/run/mysqld/mysqld.pid
|
29
packaging/rpm-uln/my_config.h
Normal file
29
packaging/rpm-uln/my_config.h
Normal file
@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Kluge to support multilib installation of both 32- and 64-bit RPMS:
|
||||
* we need to arrange that header files that appear in both RPMs are
|
||||
* identical. Hence, this file is architecture-independent and calls
|
||||
* in an arch-dependent file that will appear in just one RPM.
|
||||
*
|
||||
* To avoid breaking arches not explicitly supported by Red Hat, we
|
||||
* use this indirection file *only* on known multilib arches.
|
||||
*
|
||||
* Note: this may well fail if user tries to use gcc's -I- option.
|
||||
* But that option is deprecated anyway.
|
||||
*/
|
||||
#if defined(__x86_64__)
|
||||
#include "my_config_x86_64.h"
|
||||
#elif defined(__i386__)
|
||||
#include "my_config_i386.h"
|
||||
#elif defined(__ppc64__) || defined(__powerpc64__)
|
||||
#include "my_config_ppc64.h"
|
||||
#elif defined(__ppc__) || defined(__powerpc__)
|
||||
#include "my_config_ppc.h"
|
||||
#elif defined(__s390x__)
|
||||
#include "my_config_s390x.h"
|
||||
#elif defined(__s390__)
|
||||
#include "my_config_s390.h"
|
||||
#elif defined(__sparc__) && defined(__arch64__)
|
||||
#include "my_config_sparc64.h"
|
||||
#elif defined(__sparc__)
|
||||
#include "my_config_sparc.h"
|
||||
#endif
|
21
packaging/rpm-uln/mysql-5.5-errno.patch
Normal file
21
packaging/rpm-uln/mysql-5.5-errno.patch
Normal file
@ -0,0 +1,21 @@
|
||||
"extern int errno" is just a really bad idea.
|
||||
|
||||
|
||||
diff -Naur mysql-5.1.32.orig/include/my_sys.h mysql-5.1.32/include/my_sys.h
|
||||
--- mysql-5.1.32.orig/include/my_sys.h 2009-02-13 19:52:19.000000000 -0500
|
||||
+++ mysql-5.1.32/include/my_sys.h 2009-03-04 18:08:40.000000000 -0500
|
||||
@@ -199,13 +199,8 @@
|
||||
#define my_afree(PTR) my_free(PTR)
|
||||
#endif /* HAVE_ALLOCA */
|
||||
|
||||
-#ifndef errno /* did we already get it? */
|
||||
-#ifdef HAVE_ERRNO_AS_DEFINE
|
||||
#include <errno.h> /* errno is a define */
|
||||
-#else
|
||||
-extern int errno; /* declare errno */
|
||||
-#endif
|
||||
-#endif /* #ifndef errno */
|
||||
+
|
||||
extern char *home_dir; /* Home directory for user */
|
||||
extern const char *my_progname; /* program-name (printed in errors) */
|
||||
extern char curr_dir[]; /* Current directory for user */
|
34
packaging/rpm-uln/mysql-5.5-fix-tests.patch
Normal file
34
packaging/rpm-uln/mysql-5.5-fix-tests.patch
Normal file
@ -0,0 +1,34 @@
|
||||
Adapt tests (where needed) to RedHat conventions.
|
||||
|
||||
1) The RedHat convention uses the package name "mysql*" whereas upstream uses "MySQL*".
|
||||
Test "file_contents" constructs path names and needs to be adapted.
|
||||
|
||||
=== modified file 'mysql-test/t/file_contents.test'
|
||||
--- mysql-5.5.17-orig/mysql-test/t/file_contents.test 2011-10-10 12:03:29 +0000
|
||||
+++ mysql-5.5.17/mysql-test/t/file_contents.test 2011-11-16 18:07:55 +0000
|
||||
@@ -17,20 +17,20 @@ if ($dir_bin =~ m|/usr/|) {
|
||||
$dir_docs =~ s|/lib|/share/doc|;
|
||||
if(-d "$dir_docs/packages") {
|
||||
# SuSE: "packages/" in the documentation path
|
||||
- $dir_docs = glob "$dir_docs/packages/MySQL-server*";
|
||||
+ $dir_docs = glob "$dir_docs/packages/mysql-server*";
|
||||
} else {
|
||||
# RedHat: version number in directory name
|
||||
- $dir_docs = glob "$dir_docs/MySQL-server*";
|
||||
+ $dir_docs = glob "$dir_docs/mysql-server*";
|
||||
}
|
||||
} elsif ($dir_bin =~ m|/usr$|) {
|
||||
# RPM build during development
|
||||
$dir_docs = "$dir_bin/share/doc";
|
||||
if(-d "$dir_docs/packages") {
|
||||
# SuSE: "packages/" in the documentation path
|
||||
- $dir_docs = glob "$dir_docs/packages/MySQL-server*";
|
||||
+ $dir_docs = glob "$dir_docs/packages/mysql-server*";
|
||||
} else {
|
||||
# RedHat: version number in directory name
|
||||
- $dir_docs = glob "$dir_docs/MySQL-server*";
|
||||
+ $dir_docs = glob "$dir_docs/mysql-server*";
|
||||
}
|
||||
} else {
|
||||
# tar.gz package, Windows, or developer work (in BZR)
|
||||
|
28
packaging/rpm-uln/mysql-5.5-libdir.patch
Normal file
28
packaging/rpm-uln/mysql-5.5-libdir.patch
Normal file
@ -0,0 +1,28 @@
|
||||
The RPMs built by MySQL AB (-> Sun -> Oracle) put the libraries into "/usr/lib".
|
||||
Those built by RedHat put them into "/usr/lib/mysql".
|
||||
This patch is to modify the cmake files to follow the RedHat convention.
|
||||
Similar, the server is now in "/usr/libexec" (formerly "/usr/sbin").
|
||||
|
||||
|
||||
diff -Naur mysql-5.5.17.orig/cmake/install_layout.cmake mysql-5.5.17/cmake/install_layout.cmake
|
||||
--- mysql-5.5.17.orig/cmake/install_layout.cmake 2011-06-30 15:46:53 +0000
|
||||
+++ mysql-5.5.17/cmake/install_layout.cmake 2011-10-27 16:40:10 +0000
|
||||
@@ -140,14 +140,14 @@ SET(INSTALL_SBINDIR_RPM
|
||||
# be applied at build time via "rpmbuild".
|
||||
#
|
||||
SET(INSTALL_BINDIR_RPM "bin")
|
||||
-SET(INSTALL_SBINDIR_RPM "sbin")
|
||||
+SET(INSTALL_SBINDIR_RPM "libexec")
|
||||
SET(INSTALL_SCRIPTDIR_RPM "bin")
|
||||
#
|
||||
IF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
|
||||
- SET(INSTALL_LIBDIR_RPM "lib64")
|
||||
+ SET(INSTALL_LIBDIR_RPM "lib64/mysql")
|
||||
SET(INSTALL_PLUGINDIR_RPM "lib64/mysql/plugin")
|
||||
ELSE()
|
||||
- SET(INSTALL_LIBDIR_RPM "lib")
|
||||
+ SET(INSTALL_LIBDIR_RPM "lib/mysql")
|
||||
SET(INSTALL_PLUGINDIR_RPM "lib/mysql/plugin")
|
||||
ENDIF()
|
||||
#
|
||||
|
25
packaging/rpm-uln/mysql-5.5-mtr1.patch
Normal file
25
packaging/rpm-uln/mysql-5.5-mtr1.patch
Normal file
@ -0,0 +1,25 @@
|
||||
Drop support for version 1 of "mysql-test-run.pl" from the RPMs:
|
||||
|
||||
1) The auto-generation of Perl dependencies will mishandle that code,
|
||||
probably because its run directory differs from its storage location.
|
||||
2) It does not provide several variables which are used in tests of MySQL 5.5
|
||||
|
||||
If you really need it, take it from the source tarball.
|
||||
|
||||
=== modified file 'mysql-test/mysql-test-run.pl'
|
||||
--- mysql-5.5.17-orig/mysql-test/mysql-test-run.pl 2011-10-03 11:16:40 +0000
|
||||
+++ mysql-5.5.17/mysql-test/mysql-test-run.pl 2011-11-16 19:06:38 +0000
|
||||
@@ -58,10 +58,9 @@ BEGIN {
|
||||
if ( $version == 1 )
|
||||
{
|
||||
print "=======================================================\n";
|
||||
- print " WARNING: Using mysql-test-run.pl version 1! \n";
|
||||
+ print " ERROR: Support for version 1 is dropped in this distribution! \n";
|
||||
print "=======================================================\n";
|
||||
- # Should use exec() here on *nix but this appears not to work on Windows
|
||||
- exit(system($^X, "lib/v1/mysql-test-run.pl", @ARGV) >> 8);
|
||||
+ exit(1);
|
||||
}
|
||||
elsif ( $version == 2 )
|
||||
{
|
||||
|
140
packaging/rpm-uln/mysql-5.5-stack-guard.patch
Normal file
140
packaging/rpm-uln/mysql-5.5-stack-guard.patch
Normal file
@ -0,0 +1,140 @@
|
||||
mysql is not accounting for the "guard page" when setting thread stack size
|
||||
requests. This is fatal on PPC systems, which may use guard pages as large
|
||||
as 64K. This patch also documents the IA64 situation a bit better.
|
||||
|
||||
Note: there are quite a few other setstacksize calls besides the two in
|
||||
mysqld.cc; is it important to fix any of the others?
|
||||
|
||||
Filed upstream at http://bugs.mysql.com/bug.php?id=35019
|
||||
|
||||
|
||||
diff -Naur mysql-5.1.30.orig/sql/mysqld.cc mysql-5.1.30/sql/mysqld.cc
|
||||
--- mysql-5.1.30.orig/sql/mysqld.cc 2008-11-14 11:37:13.000000000 -0500
|
||||
+++ mysql-5.1.30/sql/mysqld.cc 2009-01-13 12:08:35.000000000 -0500
|
||||
@@ -2653,6 +2653,70 @@
|
||||
}
|
||||
|
||||
|
||||
+/* pthread_attr_setstacksize without so much platform-dependency */
|
||||
+/* returns the actual stack size if possible */
|
||||
+static size_t my_setstacksize(pthread_attr_t *attr, size_t stacksize)
|
||||
+{
|
||||
+ size_t guard_size = 0;
|
||||
+
|
||||
+#if defined(__ia64__) || defined(__ia64)
|
||||
+ /*
|
||||
+ On IA64, half of the requested stack size is used for "normal stack"
|
||||
+ and half for "register stack". The space measured by check_stack_overrun
|
||||
+ is the "normal stack", so double the request to make sure we have the
|
||||
+ caller-expected amount of normal stack.
|
||||
+
|
||||
+ NOTE: there is no guarantee that the register stack can't grow faster
|
||||
+ than normal stack, so it's very unclear that we won't dump core due to
|
||||
+ stack overrun despite check_stack_overrun's efforts. Experimentation
|
||||
+ shows that in the execution_constants test, the register stack grows
|
||||
+ less than half as fast as normal stack, but perhaps other scenarios are
|
||||
+ less forgiving. If it turns out that more space is needed for the
|
||||
+ register stack, that could be forced (rather inefficiently) by using a
|
||||
+ multiplier higher than 2 here.
|
||||
+ */
|
||||
+ stacksize *= 2;
|
||||
+#endif
|
||||
+
|
||||
+ /*
|
||||
+ On many machines, the "guard space" is subtracted from the requested
|
||||
+ stack size, and that space is quite large on some platforms. So add
|
||||
+ it to our request, if we can find out what it is.
|
||||
+
|
||||
+ FIXME: autoconfiscate use of pthread_attr_getguardsize
|
||||
+ */
|
||||
+ if (pthread_attr_getguardsize(attr, &guard_size))
|
||||
+ guard_size = 0; /* if can't find it out, treat as 0 */
|
||||
+
|
||||
+ pthread_attr_setstacksize(attr, stacksize + guard_size);
|
||||
+
|
||||
+ /* Retrieve actual stack size if possible */
|
||||
+#ifdef HAVE_PTHREAD_ATTR_GETSTACKSIZE
|
||||
+ {
|
||||
+ size_t real_stack_size= 0;
|
||||
+ /* We must ignore real_stack_size = 0 as Solaris 2.9 can return 0 here */
|
||||
+ if (pthread_attr_getstacksize(attr, &real_stack_size) == 0 &&
|
||||
+ real_stack_size > guard_size)
|
||||
+ {
|
||||
+ real_stack_size -= guard_size;
|
||||
+ if (real_stack_size < stacksize)
|
||||
+ {
|
||||
+ if (global_system_variables.log_warnings)
|
||||
+ sql_print_warning("Asked for %ld thread stack, but got %ld",
|
||||
+ (long) stacksize, (long) real_stack_size);
|
||||
+ stacksize= real_stack_size;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+#if defined(__ia64__) || defined(__ia64)
|
||||
+ stacksize /= 2;
|
||||
+#endif
|
||||
+ return stacksize;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static void start_signal_handler(void)
|
||||
{
|
||||
int error;
|
||||
@@ -2663,15 +2727,7 @@
|
||||
#if !defined(HAVE_DEC_3_2_THREADS)
|
||||
pthread_attr_setscope(&thr_attr,PTHREAD_SCOPE_SYSTEM);
|
||||
(void) pthread_attr_setdetachstate(&thr_attr,PTHREAD_CREATE_DETACHED);
|
||||
-#if defined(__ia64__) || defined(__ia64)
|
||||
- /*
|
||||
- Peculiar things with ia64 platforms - it seems we only have half the
|
||||
- stack size in reality, so we have to double it here
|
||||
- */
|
||||
- pthread_attr_setstacksize(&thr_attr,my_thread_stack_size*2);
|
||||
-#else
|
||||
- pthread_attr_setstacksize(&thr_attr,my_thread_stack_size);
|
||||
-#endif
|
||||
+ (void) my_setstacksize(&thr_attr,my_thread_stack_size);
|
||||
#endif
|
||||
|
||||
mysql_mutex_lock(&LOCK_thread_count);
|
||||
@@ -4445,37 +4501,7 @@
|
||||
unireg_abort(1); // Will do exit
|
||||
|
||||
init_signals();
|
||||
-#if defined(__ia64__) || defined(__ia64)
|
||||
- /*
|
||||
- Peculiar things with ia64 platforms - it seems we only have half the
|
||||
- stack size in reality, so we have to double it here
|
||||
- */
|
||||
- pthread_attr_setstacksize(&connection_attrib,my_thread_stack_size*2);
|
||||
-#else
|
||||
- pthread_attr_setstacksize(&connection_attrib,my_thread_stack_size);
|
||||
-#endif
|
||||
-#ifdef HAVE_PTHREAD_ATTR_GETSTACKSIZE
|
||||
- {
|
||||
- /* Retrieve used stack size; Needed for checking stack overflows */
|
||||
- size_t stack_size= 0;
|
||||
- pthread_attr_getstacksize(&connection_attrib, &stack_size);
|
||||
-#if defined(__ia64__) || defined(__ia64)
|
||||
- stack_size/= 2;
|
||||
-#endif
|
||||
- /* We must check if stack_size = 0 as Solaris 2.9 can return 0 here */
|
||||
- if (stack_size && stack_size < my_thread_stack_size)
|
||||
- {
|
||||
- if (global_system_variables.log_warnings)
|
||||
- sql_print_warning("Asked for %lu thread stack, but got %ld",
|
||||
- my_thread_stack_size, (long) stack_size);
|
||||
-#if defined(__ia64__) || defined(__ia64)
|
||||
- my_thread_stack_size= stack_size*2;
|
||||
-#else
|
||||
- my_thread_stack_size= stack_size;
|
||||
-#endif
|
||||
- }
|
||||
- }
|
||||
-#endif
|
||||
+ my_thread_stack_size = my_setstacksize(&connection_attrib,my_thread_stack_size);
|
||||
|
||||
(void) thr_setconcurrency(concurrency); // 10 by default
|
||||
|
23
packaging/rpm-uln/mysql-5.5-testing.patch
Normal file
23
packaging/rpm-uln/mysql-5.5-testing.patch
Normal file
@ -0,0 +1,23 @@
|
||||
Hack the top-level Makefile to enable the openssl regression tests.
|
||||
(Why doesn't this happen automatically given the configure option??)
|
||||
|
||||
Also, increase the overall timeout for the regression tests to 12 hours,
|
||||
because on a slow or heavily-loaded build machine sometimes the default of
|
||||
5 hours isn't enough. (This has been demonstrated to fail in mass-rebuild
|
||||
scenarios, which aren't that uncommon for Fedora.) Similarly increase the
|
||||
per-testcase timeout to 30 minutes, since the default of 15 hasn't got a
|
||||
great deal of headroom either.
|
||||
|
||||
|
||||
diff -Naur mysql-5.1.32.orig/Makefile.am mysql-5.1.32/Makefile.am
|
||||
--- mysql-5.1.32.orig/Makefile.am 2009-02-13 19:51:56.000000000 -0500
|
||||
+++ mysql-5.1.32/Makefile.am 2009-03-04 18:12:36.000000000 -0500
|
||||
@@ -98,7 +98,7 @@
|
||||
|
||||
test-ns:
|
||||
cd mysql-test ; \
|
||||
- @PERL@ ./mysql-test-run.pl $(force) $(mem) --mysqld=--binlog-format=mixed
|
||||
+ @PERL@ ./mysql-test-run.pl $(force) $(mem) --ssl --mysqld=--binlog-format=mixed --suite-timeout=720 --testcase-timeout=30
|
||||
|
||||
test-binlog-statement:
|
||||
cd mysql-test ; \
|
45
packaging/rpm-uln/mysql-chain-certs.patch
Normal file
45
packaging/rpm-uln/mysql-chain-certs.patch
Normal file
@ -0,0 +1,45 @@
|
||||
Fix things so that chains of certificates work in the server and client
|
||||
certificate files.
|
||||
|
||||
This only really works for OpenSSL-based builds, as yassl is unable to read
|
||||
multiple certificates from a file. The patch below to yassl/src/ssl.cpp
|
||||
doesn't fix that, but just arranges that the viosslfactories.c patch won't
|
||||
have any ill effects in a yassl build. Since we don't use yassl in Red Hat/
|
||||
Fedora builds, I'm not feeling motivated to try to fix yassl for this.
|
||||
|
||||
See RH bug #598656. Filed upstream at http://bugs.mysql.com/bug.php?id=54158
|
||||
|
||||
===
|
||||
|
||||
Joerg Bruehe, MySQL Build Team at Oracle: First patch adapted to code changes in MySQL 5.5
|
||||
|
||||
|
||||
diff -Naur mysql-5.5.29.orig/vio/viosslfactories.c mysql-5.5.29/vio/viosslfactories.c
|
||||
--- mysql-5.5.29.orig/vio/viosslfactories.c 2010-05-06 11:28:07.000000000 -0400
|
||||
+++ mysql-5.5.29/vio/viosslfactories.c 2010-05-26 23:23:46.000000000 -0400
|
||||
@@ -106,7 +106,7 @@
|
||||
key_file= cert_file;
|
||||
|
||||
if (cert_file &&
|
||||
- SSL_CTX_use_certificate_file(ctx, cert_file, SSL_FILETYPE_PEM) <= 0)
|
||||
+ SSL_CTX_use_certificate_chain_file(ctx, cert_file) <= 0)
|
||||
{
|
||||
*error= SSL_INITERR_CERT;
|
||||
DBUG_PRINT("error",("%s from file '%s'", sslGetErrString(*error), cert_file));
|
||||
diff -Naur mysql-5.1.47.orig/extra/yassl/src/ssl.cpp mysql-5.1.47/extra/yassl/src/ssl.cpp
|
||||
--- mysql-5.1.47.orig/extra/yassl/src/ssl.cpp 2010-05-06 11:24:26.000000000 -0400
|
||||
+++ mysql-5.1.47/extra/yassl/src/ssl.cpp 2010-05-26 23:29:13.000000000 -0400
|
||||
@@ -1606,10 +1606,10 @@
|
||||
}
|
||||
|
||||
|
||||
- int SSL_CTX_use_certificate_chain_file(SSL_CTX*, const char*)
|
||||
+ int SSL_CTX_use_certificate_chain_file(SSL_CTX* ctx, const char* file)
|
||||
{
|
||||
- // TDOD:
|
||||
- return SSL_SUCCESS;
|
||||
+ // For the moment, treat like use_certificate_file
|
||||
+ return read_file(ctx, file, SSL_FILETYPE_PEM, Cert);
|
||||
}
|
||||
|
||||
|
26
packaging/rpm-uln/mysql-embedded-check.c
Normal file
26
packaging/rpm-uln/mysql-embedded-check.c
Normal file
@ -0,0 +1,26 @@
|
||||
/* simple test program to see if we can link the embedded server library */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "mysql.h"
|
||||
|
||||
MYSQL *mysql;
|
||||
|
||||
static char *server_options[] = \
|
||||
{ "mysql_test", "--defaults-file=my.cnf", NULL };
|
||||
int num_elements = (sizeof(server_options) / sizeof(char *)) - 1;
|
||||
|
||||
static char *server_groups[] = { "libmysqld_server",
|
||||
"libmysqld_client", NULL };
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
mysql_library_init(num_elements, server_options, server_groups);
|
||||
mysql = mysql_init(NULL);
|
||||
mysql_close(mysql);
|
||||
mysql_library_end();
|
||||
|
||||
return 0;
|
||||
}
|
555
packaging/rpm-uln/mysql-expired-certs.patch
Normal file
555
packaging/rpm-uln/mysql-expired-certs.patch
Normal file
@ -0,0 +1,555 @@
|
||||
Upstream insists on generating SSL testing certificates with relatively short
|
||||
lifespan, which has repeatedly caused problems (ie, one day the regression
|
||||
tests suddenly stop working). Replace them with certificates with 20-year
|
||||
lifespan. We should periodically regenerate these, too, but at least not
|
||||
very often.
|
||||
|
||||
|
||||
diff -Naur mysql-5.1.50.orig/mysql-test/std_data/cacert.pem mysql-5.1.50/mysql-test/std_data/cacert.pem
|
||||
--- mysql-5.1.50.orig/mysql-test/std_data/cacert.pem 2010-08-03 13:55:04.000000000 -0400
|
||||
+++ mysql-5.1.50/mysql-test/std_data/cacert.pem 2010-08-27 23:42:05.751428144 -0400
|
||||
@@ -1,17 +1,22 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
-MIICrTCCAhagAwIBAgIJAMI7xZKjhrDbMA0GCSqGSIb3DQEBBAUAMEQxCzAJBgNV
|
||||
+MIIDsjCCApqgAwIBAgIJAL5YrUwfPSWVMA0GCSqGSIb3DQEBBQUAMEQxCzAJBgNV
|
||||
BAYTAlNFMRAwDgYDVQQIEwdVcHBzYWxhMRAwDgYDVQQHEwdVcHBzYWxhMREwDwYD
|
||||
-VQQKEwhNeVNRTCBBQjAeFw0xMDAxMjkxMTQ3MTBaFw0xNTAxMjgxMTQ3MTBaMEQx
|
||||
+VQQKEwhNeVNRTCBBQjAeFw0xMDAxMjkwNTU5NTNaFw0xNTAxMjgwNTU5NTNaMEQx
|
||||
CzAJBgNVBAYTAlNFMRAwDgYDVQQIEwdVcHBzYWxhMRAwDgYDVQQHEwdVcHBzYWxh
|
||||
-MREwDwYDVQQKEwhNeVNRTCBBQjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
|
||||
-wQYsOEfrN4ESP3FjsI8cghE+tZVuyK2gck61lwieVxjgFMtBd65mI5a1y9pmlOI1
|
||||
-yM4SB2Ppqcuw7/e1CdV1y7lvHrGNt5yqEHbN4QX1gvsN8TQauP/2WILturk4R4Hq
|
||||
-rKg0ZySu7f1Xhl0ed9a48LpaEHD17IcxWEGMMJwAxF0CAwEAAaOBpjCBozAMBgNV
|
||||
-HRMEBTADAQH/MB0GA1UdDgQWBBSvktYQ0ahLnyxyVKqty+WpBbBrDTB0BgNVHSME
|
||||
-bTBrgBSvktYQ0ahLnyxyVKqty+WpBbBrDaFIpEYwRDELMAkGA1UEBhMCU0UxEDAO
|
||||
-BgNVBAgTB1VwcHNhbGExEDAOBgNVBAcTB1VwcHNhbGExETAPBgNVBAoTCE15U1FM
|
||||
-IEFCggkAwjvFkqOGsNswDQYJKoZIhvcNAQEEBQADgYEAdKN1PjwMHAKG2Ww1145g
|
||||
-JQGBnKxSFOUaoSvkBi/4ntTM+ysnViWh7WvxyWjR9zU9arfr7aqsDeQxm0XDOqzj
|
||||
-AQ/cQIla2/Li8tXyfc06bisH/IHRaSc2zWqioTKbEwMdVOdrvq4a8V8ic3xYyIWn
|
||||
-7F4WeS07J8LKardSvM0+hOA=
|
||||
+MREwDwYDVQQKEwhNeVNRTCBBQjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
||||
+ggEBAL6kNN4peX7uhK9rb06W/QbPEpVuejmdWdl2PqMshP/eSuXXw7kwVgfpxx9R
|
||||
+vC000CKQQSG9MCoZjtqPnFRsetmWLZgApRpEalGXTXJqq9sEbCfoFizg94U8G7d2
|
||||
+u5XJjLVmcG34ru36KoBgVx1zeH1puBAf8dOzrE4L7Y+ZQBFzFohjh8C2LqWC4nM5
|
||||
+qsLmOkDWMipGqYU5DvkKjIbTbwTyRNRgZHWSPfVDDPUIUOsY4BGUp2DpgeGY9aEv
|
||||
+lIs57Ev9JqlIUCV65lOhhDkG+xwmkHKHA+ECEU9cALI8+uXbh48MB9XpMOuk408X
|
||||
+/lX89aZwD0/G9kmObVGnE2G+H5UCAwEAAaOBpjCBozAdBgNVHQ4EFgQUsft+d7VA
|
||||
+jWgRftkR5cPG2k2sUbAwdAYDVR0jBG0wa4AUsft+d7VAjWgRftkR5cPG2k2sUbCh
|
||||
+SKRGMEQxCzAJBgNVBAYTAlNFMRAwDgYDVQQIEwdVcHBzYWxhMRAwDgYDVQQHEwdV
|
||||
+cHBzYWxhMREwDwYDVQQKEwhNeVNRTCBBQoIJAL5YrUwfPSWVMAwGA1UdEwQFMAMB
|
||||
+Af8wDQYJKoZIhvcNAQEFBQADggEBALRUOAmdL8R8sl1y8kiEiFgDatdXK5RDqWai
|
||||
+8yZChfmwTIToHhmQsOEshJe2e8hky3huUj+33VyXjINoMbebIwMuXPwEkbJal8RZ
|
||||
+nSJmF0jN1Qz7J/jFffwK9xmejWZJx49Kt2+Qwrwp6kDeq9TLFqQOoVczgyJPYsTL
|
||||
+NAOib5WqTud3XWvCwxrhqmWu7JZq6sp1fomP/uunprb8y2miWfLESZN2mKAhm44Q
|
||||
+Lws867LT8v2lskEjq2dT1LutD5+R66XcdjgSr0uDziDs64jZwCD6ea94hVFM7ej0
|
||||
+ZOXYeSEZJ56FjUxu632e9fY8NyMh30yKjjmQf1mM9PuGJvdvsWU=
|
||||
-----END CERTIFICATE-----
|
||||
diff -Naur mysql-5.1.50.orig/mysql-test/std_data/client-cert.pem mysql-5.1.50/mysql-test/std_data/client-cert.pem
|
||||
--- mysql-5.1.50.orig/mysql-test/std_data/client-cert.pem 2010-08-03 13:55:04.000000000 -0400
|
||||
+++ mysql-5.1.50/mysql-test/std_data/client-cert.pem 2010-08-27 23:42:05.752428395 -0400
|
||||
@@ -1,46 +1,69 @@
|
||||
Certificate:
|
||||
Data:
|
||||
- Version: 1 (0x0)
|
||||
- Serial Number: 1048577 (0x100001)
|
||||
- Signature Algorithm: md5WithRSAEncryption
|
||||
+ Version: 3 (0x2)
|
||||
+ Serial Number: 6 (0x6)
|
||||
+ Signature Algorithm: sha1WithRSAEncryption
|
||||
Issuer: C=SE, ST=Uppsala, L=Uppsala, O=MySQL AB
|
||||
Validity
|
||||
- Not Before: Jan 29 11:50:22 2010 GMT
|
||||
- Not After : Jan 28 11:50:22 2015 GMT
|
||||
+ Not Before: Feb 20 03:03:26 2010 GMT
|
||||
+ Not After : Sep 3 03:03:26 2030 GMT
|
||||
Subject: C=SE, ST=Uppsala, O=MySQL AB
|
||||
Subject Public Key Info:
|
||||
Public Key Algorithm: rsaEncryption
|
||||
- Public-Key: (1024 bit)
|
||||
- Modulus:
|
||||
- 00:cc:9a:37:49:13:66:dc:cf:e3:0b:13:a1:23:ed:
|
||||
- 78:db:4e:bd:11:f6:8c:0d:76:f9:a3:32:56:9a:f8:
|
||||
- a1:21:6a:55:4e:4d:3f:e6:67:9d:26:99:b2:cd:a4:
|
||||
- 9a:d2:2b:59:5c:d7:8a:d3:60:68:f8:18:bd:c5:be:
|
||||
- 15:e1:2a:3c:a3:d4:61:cb:f5:11:94:17:81:81:f7:
|
||||
- 87:8c:f6:6a:d2:ee:d8:e6:77:f6:62:66:4d:2e:16:
|
||||
- 8d:08:81:4a:c9:c6:4b:31:e5:b9:c7:8a:84:96:48:
|
||||
- a7:47:8c:0d:26:90:56:4e:e6:a5:6e:8c:b3:f2:9f:
|
||||
- fc:3d:78:9b:49:6e:86:83:77
|
||||
+ RSA Public Key: (1024 bit)
|
||||
+ Modulus (1024 bit):
|
||||
+ 00:c2:e7:20:cf:89:59:2f:67:cb:4c:9f:e8:11:f2:
|
||||
+ 23:e5:f1:b1:ee:3f:66:5f:c3:f5:fd:1e:31:ee:8f:
|
||||
+ 4c:2a:bd:c0:4a:a5:9f:c8:44:d5:77:8f:15:1b:4d:
|
||||
+ 78:6e:b2:a2:48:a5:24:33:05:40:02:b3:c1:87:8d:
|
||||
+ 59:3c:1a:07:aa:86:f0:04:e1:9c:20:4b:22:32:c4:
|
||||
+ 51:9e:40:e4:31:c3:57:f5:98:bf:2e:b1:fd:2c:56:
|
||||
+ bf:49:d9:9b:e7:17:cc:95:5f:b5:08:19:5e:9d:df:
|
||||
+ 65:22:39:2c:48:fb:69:96:31:7a:35:4d:de:60:b4:
|
||||
+ c1:60:19:5f:96:56:7e:55:19
|
||||
Exponent: 65537 (0x10001)
|
||||
- Signature Algorithm: md5WithRSAEncryption
|
||||
- 5e:1f:a3:53:5f:24:13:1c:f8:28:32:b0:7f:69:69:f3:0e:c0:
|
||||
- 34:87:10:03:7d:da:15:8b:bd:19:b8:1a:56:31:e7:85:49:81:
|
||||
- c9:7f:45:20:74:3e:89:c0:e0:26:84:51:cc:04:16:ce:69:99:
|
||||
- 01:e1:26:99:b3:e3:f5:bd:ec:5f:a0:84:e4:38:da:75:78:7b:
|
||||
- 89:9c:d2:cd:60:95:20:ba:8e:e3:7c:e6:df:76:3a:7c:89:77:
|
||||
- 02:94:86:11:3a:c4:61:7d:6f:71:83:21:8a:17:fb:17:e2:ee:
|
||||
- 02:6b:61:c1:b4:52:63:d7:d8:46:b2:c5:9c:6f:38:91:8a:35:
|
||||
- 32:0b
|
||||
+ X509v3 extensions:
|
||||
+ X509v3 Basic Constraints:
|
||||
+ CA:FALSE
|
||||
+ X509v3 Subject Key Identifier:
|
||||
+ 8D:10:67:91:33:76:9C:02:E5:78:5D:D8:C5:EF:25:96:B2:D7:FA:1F
|
||||
+ X509v3 Authority Key Identifier:
|
||||
+ keyid:B1:FB:7E:77:B5:40:8D:68:11:7E:D9:11:E5:C3:C6:DA:4D:AC:51:B0
|
||||
+ DirName:/C=SE/ST=Uppsala/L=Uppsala/O=MySQL AB
|
||||
+ serial:BE:58:AD:4C:1F:3D:25:95
|
||||
+
|
||||
+ Signature Algorithm: sha1WithRSAEncryption
|
||||
+ a9:88:10:3e:5d:2a:47:29:c8:03:27:7a:31:5a:8e:10:03:bc:
|
||||
+ b5:4e:37:1d:12:7b:eb:5f:50:71:70:b1:a3:8e:93:0e:77:17:
|
||||
+ 6c:47:b6:c9:a4:4d:2a:c4:38:f0:61:55:b2:7f:28:ba:06:79:
|
||||
+ ee:67:11:7d:d4:c9:7f:0a:18:c8:c1:cb:d0:2c:f9:63:0f:bb:
|
||||
+ 45:ca:de:ea:bb:ac:00:01:52:48:36:2b:07:2b:c8:46:c7:b1:
|
||||
+ 21:81:bd:77:39:e7:4c:39:aa:bd:ac:60:d8:a7:bf:cf:14:98:
|
||||
+ 4a:0b:a1:40:55:06:8d:6f:35:a9:39:a0:71:a9:97:ba:7c:73:
|
||||
+ 3c:41:ba:c5:1c:11:4b:2b:43:1d:2d:ba:7b:5f:14:b5:3d:64:
|
||||
+ 62:15:36:b4:16:bd:78:c8:43:8d:f9:1c:a5:d2:ac:a1:58:74:
|
||||
+ e1:99:de:ad:04:19:43:a8:bd:0a:fd:19:9b:50:44:46:6d:18:
|
||||
+ 55:4d:bf:b4:5b:a4:93:62:c7:64:91:6c:54:34:d1:f8:f3:ff:
|
||||
+ 12:6d:5f:85:e7:35:9e:5c:42:81:5e:fb:c8:bb:44:51:98:b2:
|
||||
+ ef:1b:9f:5a:22:77:28:7d:da:fb:08:c2:94:9a:0f:42:08:93:
|
||||
+ 54:10:1e:ad:f2:4f:fc:62:98:51:e9:9b:b9:3a:93:d9:e4:1f:
|
||||
+ 1d:c4:76:d0
|
||||
-----BEGIN CERTIFICATE-----
|
||||
-MIIB5zCCAVACAxAAATANBgkqhkiG9w0BAQQFADBEMQswCQYDVQQGEwJTRTEQMA4G
|
||||
-A1UECBMHVXBwc2FsYTEQMA4GA1UEBxMHVXBwc2FsYTERMA8GA1UEChMITXlTUUwg
|
||||
-QUIwHhcNMTAwMTI5MTE1MDIyWhcNMTUwMTI4MTE1MDIyWjAyMQswCQYDVQQGEwJT
|
||||
-RTEQMA4GA1UECBMHVXBwc2FsYTERMA8GA1UEChMITXlTUUwgQUIwgZ8wDQYJKoZI
|
||||
-hvcNAQEBBQADgY0AMIGJAoGBAMyaN0kTZtzP4wsToSPteNtOvRH2jA12+aMyVpr4
|
||||
-oSFqVU5NP+ZnnSaZss2kmtIrWVzXitNgaPgYvcW+FeEqPKPUYcv1EZQXgYH3h4z2
|
||||
-atLu2OZ39mJmTS4WjQiBSsnGSzHluceKhJZIp0eMDSaQVk7mpW6Ms/Kf/D14m0lu
|
||||
-hoN3AgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAXh+jU18kExz4KDKwf2lp8w7ANIcQ
|
||||
-A33aFYu9GbgaVjHnhUmByX9FIHQ+icDgJoRRzAQWzmmZAeEmmbPj9b3sX6CE5Dja
|
||||
-dXh7iZzSzWCVILqO43zm33Y6fIl3ApSGETrEYX1vcYMhihf7F+LuAmthwbRSY9fY
|
||||
-RrLFnG84kYo1Mgs=
|
||||
+MIIDETCCAfmgAwIBAgIBBjANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJTRTEQ
|
||||
+MA4GA1UECBMHVXBwc2FsYTEQMA4GA1UEBxMHVXBwc2FsYTERMA8GA1UEChMITXlT
|
||||
+UUwgQUIwHhcNMTAwMjIwMDMwMzI2WhcNMzAwOTAzMDMwMzI2WjAyMQswCQYDVQQG
|
||||
+EwJTRTEQMA4GA1UECBMHVXBwc2FsYTERMA8GA1UEChMITXlTUUwgQUIwgZ8wDQYJ
|
||||
+KoZIhvcNAQEBBQADgY0AMIGJAoGBAMLnIM+JWS9ny0yf6BHyI+Xxse4/Zl/D9f0e
|
||||
+Me6PTCq9wEqln8hE1XePFRtNeG6yokilJDMFQAKzwYeNWTwaB6qG8AThnCBLIjLE
|
||||
+UZ5A5DHDV/WYvy6x/SxWv0nZm+cXzJVftQgZXp3fZSI5LEj7aZYxejVN3mC0wWAZ
|
||||
+X5ZWflUZAgMBAAGjgaMwgaAwCQYDVR0TBAIwADAdBgNVHQ4EFgQUjRBnkTN2nALl
|
||||
+eF3Yxe8llrLX+h8wdAYDVR0jBG0wa4AUsft+d7VAjWgRftkR5cPG2k2sUbChSKRG
|
||||
+MEQxCzAJBgNVBAYTAlNFMRAwDgYDVQQIEwdVcHBzYWxhMRAwDgYDVQQHEwdVcHBz
|
||||
+YWxhMREwDwYDVQQKEwhNeVNRTCBBQoIJAL5YrUwfPSWVMA0GCSqGSIb3DQEBBQUA
|
||||
+A4IBAQCpiBA+XSpHKcgDJ3oxWo4QA7y1TjcdEnvrX1BxcLGjjpMOdxdsR7bJpE0q
|
||||
+xDjwYVWyfyi6BnnuZxF91Ml/ChjIwcvQLPljD7tFyt7qu6wAAVJINisHK8hGx7Eh
|
||||
+gb13OedMOaq9rGDYp7/PFJhKC6FAVQaNbzWpOaBxqZe6fHM8QbrFHBFLK0MdLbp7
|
||||
+XxS1PWRiFTa0Fr14yEON+Ryl0qyhWHThmd6tBBlDqL0K/RmbUERGbRhVTb+0W6ST
|
||||
+YsdkkWxUNNH48/8SbV+F5zWeXEKBXvvIu0RRmLLvG59aIncofdr7CMKUmg9CCJNU
|
||||
+EB6t8k/8YphR6Zu5OpPZ5B8dxHbQ
|
||||
-----END CERTIFICATE-----
|
||||
diff -Naur mysql-5.1.50.orig/mysql-test/std_data/client-key.pem mysql-5.1.50/mysql-test/std_data/client-key.pem
|
||||
--- mysql-5.1.50.orig/mysql-test/std_data/client-key.pem 2010-08-03 13:55:05.000000000 -0400
|
||||
+++ mysql-5.1.50/mysql-test/std_data/client-key.pem 2010-08-27 23:42:05.752428395 -0400
|
||||
@@ -1,15 +1,15 @@
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
-MIICXQIBAAKBgQDMmjdJE2bcz+MLE6Ej7XjbTr0R9owNdvmjMlaa+KEhalVOTT/m
|
||||
-Z50mmbLNpJrSK1lc14rTYGj4GL3FvhXhKjyj1GHL9RGUF4GB94eM9mrS7tjmd/Zi
|
||||
-Zk0uFo0IgUrJxksx5bnHioSWSKdHjA0mkFZO5qVujLPyn/w9eJtJboaDdwIDAQAB
|
||||
-AoGASqk/4We2En+93y3jkIO4pXafIe3w/3zZ7caRue1ehx4RUQh5d+95djuB9u7J
|
||||
-HEZ7TpjM7QNyao5EueL6gvbxt0LXFvqAMni7yM9tt/HUYtHHPqYiRtUny9bKYFTm
|
||||
-l8szCCMal/wD9GZU9ByHDNHm7tHUMyMhARNTYSgx+SERFmECQQD/6jJocC4SXf6f
|
||||
-T3LqimWR02lbJ7qCoDgRglsUXh0zjrG+IIiAyE+QOCCx1GMe3Uw6bsIuYwdHT6as
|
||||
-WcdPs04xAkEAzKulvEvLVvN5zfa/DTYRTV7jh6aDleOxjsD5oN/oJXoACnPzVuUL
|
||||
-qQQMNtuAXm6Q1QItrRxpQsSKbY0UQka6JwJBAOSgoNoG5lIIYTKIMvzwGV+XBLeo
|
||||
-HYsXgh+6Wo4uql3mLErUG78ZtWL9kc/tE4R+ZdyKGLaCR/1gXmH5bwN4B/ECQEBb
|
||||
-uUH8k3REG4kojesZlVc+/00ojzgS4UKCa/yqa9VdB6ZBz8MDQydinnShkTwgiGpy
|
||||
-xOoqhO753o2UT0qH8wECQQC99IEJWUnwvExVMkLaZH5NjAFJkb22sjkmuT11tAgU
|
||||
-RQgOMoDOm6driojnOnDWOkx1r1Gy9NgMLooduja4v6cx
|
||||
+MIICWwIBAAKBgQDC5yDPiVkvZ8tMn+gR8iPl8bHuP2Zfw/X9HjHuj0wqvcBKpZ/I
|
||||
+RNV3jxUbTXhusqJIpSQzBUACs8GHjVk8GgeqhvAE4ZwgSyIyxFGeQOQxw1f1mL8u
|
||||
+sf0sVr9J2ZvnF8yVX7UIGV6d32UiOSxI+2mWMXo1Td5gtMFgGV+WVn5VGQIDAQAB
|
||||
+AoGARXcXLKDpVooJ3W+IyQyiWsw//IhANpWjUOm4JiyQmxMyO+i4ACr4Yjpu7WI5
|
||||
+MEseqAGj20NdwxjKO0PXsCIe5LmrGZ+SI8+CSERFOWXWRtCWz7y7SG30i1k6suvM
|
||||
+mwqWom0tJLwn93uA1lm/WSwKQwUrJRahRQd3EaZqrl7DP5kCQQD/8gbuYAT5pxQe
|
||||
+ULLGM0RvEsXxDYbEDxNbY5wrBazfklBwpumxZpFl6jEAT++7Kh2Ns3A7kB1oUNlA
|
||||
+FPYr+dYPAkEAwvHEwRtoyUr8jqoqVVJWI76CDmBjEOzVeMKW97ztqbs2LxZW8dYI
|
||||
+iOh/myFGpdoUwgu0U8w9MmXcj3ZeZCYKVwJALyQ+AJPw9qa+fuLwOq9gsHCtwrty
|
||||
+EhSQxSlwrz/pWniRll439vPkXfgntF4E0t1r+hiN2Hqv3/HcQgBaYzkuIwJAG023
|
||||
+bACFxaOuCeFFepvEms8E8jSHy4gQQhCnCl24v8wLw76SQN7kZSCDNtwLRBFuVNtE
|
||||
+z3PMonFn2eQPRmGZkwJAP1c1BHprMQx/ruafdscROILv3JrH40C1bR6KVVBKt1dK
|
||||
+Qpnpgi7hK5rUQjDF8k3bn9ugTt06jyeHe/QhAml0kg==
|
||||
-----END RSA PRIVATE KEY-----
|
||||
diff -Naur mysql-5.1.50.orig/mysql-test/std_data/server-cert.pem mysql-5.1.50/mysql-test/std_data/server-cert.pem
|
||||
--- mysql-5.1.50.orig/mysql-test/std_data/server-cert.pem 2010-08-03 13:55:08.000000000 -0400
|
||||
+++ mysql-5.1.50/mysql-test/std_data/server-cert.pem 2010-08-27 23:42:05.753428361 -0400
|
||||
@@ -1,41 +1,69 @@
|
||||
Certificate:
|
||||
Data:
|
||||
- Version: 1 (0x0)
|
||||
- Serial Number: 1048578 (0x100002)
|
||||
- Signature Algorithm: md5WithRSAEncryption
|
||||
+ Version: 3 (0x2)
|
||||
+ Serial Number: 4 (0x4)
|
||||
+ Signature Algorithm: sha1WithRSAEncryption
|
||||
Issuer: C=SE, ST=Uppsala, L=Uppsala, O=MySQL AB
|
||||
Validity
|
||||
- Not Before: Jan 29 11:56:49 2010 GMT
|
||||
- Not After : Jan 28 11:56:49 2015 GMT
|
||||
+ Not Before: Feb 20 02:55:06 2010 GMT
|
||||
+ Not After : Sep 3 02:55:06 2030 GMT
|
||||
Subject: C=SE, ST=Uppsala, O=MySQL AB, CN=localhost
|
||||
Subject Public Key Info:
|
||||
Public Key Algorithm: rsaEncryption
|
||||
- Public-Key: (512 bit)
|
||||
- Modulus:
|
||||
- 00:cd:e4:87:51:9d:72:11:a0:d1:fa:f3:92:8b:13:
|
||||
- 1c:eb:f7:e2:9a:2f:72:a8:d6:65:48:d1:69:af:1b:
|
||||
- c0:4c:13:e5:60:60:51:41:e9:ab:a6:bc:13:bb:0c:
|
||||
- 5e:32:7c:d9:6c:9e:cd:05:24:84:78:db:80:91:2e:
|
||||
- d8:88:2b:c2:ed
|
||||
+ RSA Public Key: (1024 bit)
|
||||
+ Modulus (1024 bit):
|
||||
+ 00:e3:7d:4f:c2:23:77:a9:3a:2c:d2:69:59:a0:2f:
|
||||
+ 4e:d1:51:4c:ae:8d:f5:17:cc:ce:58:9c:83:4f:0b:
|
||||
+ a3:bb:29:a2:b8:1d:3e:1b:04:f9:a9:3e:e2:61:d0:
|
||||
+ e6:7b:b9:7c:12:d8:1f:86:c9:53:b5:04:dd:df:26:
|
||||
+ e9:c0:2b:de:4a:96:2e:f3:23:6f:79:6d:a9:d2:4e:
|
||||
+ 17:af:2f:de:8b:68:44:ae:de:a3:e2:c4:37:1c:04:
|
||||
+ ad:73:4b:85:f9:83:ac:fe:b7:c1:54:47:2e:96:d4:
|
||||
+ 31:96:85:94:69:d6:5a:63:24:04:99:89:19:1d:56:
|
||||
+ 8a:d1:77:aa:87:fb:38:cd:b7
|
||||
Exponent: 65537 (0x10001)
|
||||
- Signature Algorithm: md5WithRSAEncryption
|
||||
- 73:ce:9c:6e:39:46:b4:14:be:da:3f:f3:1b:ba:90:bc:23:43:
|
||||
- d7:82:2a:70:4e:a6:d9:5a:65:5c:b7:df:71:df:75:77:c5:80:
|
||||
- a4:af:fa:d2:59:e2:fd:c9:9c:f0:98:95:8e:69:a9:8c:7c:d8:
|
||||
- 6f:48:d2:e3:36:e0:cd:ff:3f:d1:a5:e6:ab:75:09:c4:50:10:
|
||||
- c4:96:dd:bf:3b:de:32:46:da:ca:4a:f1:d6:52:8a:33:2f:ab:
|
||||
- f5:2e:70:3f:d4:9c:be:00:c8:03:f9:39:8a:df:5b:70:3c:40:
|
||||
- ef:03:be:7c:3d:1d:32:32:f3:51:81:e2:83:30:6e:3d:38:9b:
|
||||
- fb:3c
|
||||
+ X509v3 extensions:
|
||||
+ X509v3 Basic Constraints:
|
||||
+ CA:FALSE
|
||||
+ X509v3 Subject Key Identifier:
|
||||
+ CC:8C:71:40:D0:0F:BF:D1:99:79:3F:1B:E9:10:76:19:67:36:0F:A3
|
||||
+ X509v3 Authority Key Identifier:
|
||||
+ keyid:B1:FB:7E:77:B5:40:8D:68:11:7E:D9:11:E5:C3:C6:DA:4D:AC:51:B0
|
||||
+ DirName:/C=SE/ST=Uppsala/L=Uppsala/O=MySQL AB
|
||||
+ serial:BE:58:AD:4C:1F:3D:25:95
|
||||
+
|
||||
+ Signature Algorithm: sha1WithRSAEncryption
|
||||
+ 6f:ad:5e:59:fa:84:3a:be:e2:72:b1:e8:66:2a:4e:f8:73:19:
|
||||
+ 11:06:11:92:78:56:3e:d6:e8:68:29:90:8b:59:d2:fe:aa:ae:
|
||||
+ 25:59:c7:e9:99:bb:4a:06:43:dd:40:bd:cb:f4:ae:79:95:7d:
|
||||
+ 8e:90:ef:58:d2:a8:fc:bf:07:f3:37:b2:9b:bd:da:e6:8c:56:
|
||||
+ dd:5e:c6:4a:70:7c:3e:3d:a1:e8:35:06:b8:a7:7b:ac:26:85:
|
||||
+ 54:5d:09:a2:7b:77:b4:17:7f:72:31:cb:ff:cc:67:6d:e6:3e:
|
||||
+ c6:dc:96:eb:4a:0a:ae:e9:48:ae:8a:e0:d6:73:57:6e:32:4c:
|
||||
+ 00:dc:28:da:55:b3:9f:9f:d8:98:cc:d9:f1:b6:b3:14:67:2e:
|
||||
+ a1:47:1e:51:11:cf:70:9f:31:8f:ba:59:29:f2:d0:88:0b:e2:
|
||||
+ 51:6b:f8:31:ed:6d:ac:00:5e:d3:78:4c:95:97:02:cc:74:2b:
|
||||
+ 3b:c6:28:e6:2a:c3:30:99:35:b4:4d:31:46:d4:90:f2:47:ed:
|
||||
+ 64:85:1a:75:2a:72:0a:2f:c6:3a:2f:d2:ac:6b:31:cc:e5:a8:
|
||||
+ 07:c2:d6:22:f3:c6:0f:bf:67:d9:d6:b2:79:cd:48:b5:c3:e0:
|
||||
+ e3:18:7f:b5:74:c9:43:19:fb:c4:93:29:ca:cc:90:2b:1b:6f:
|
||||
+ 45:f6:25:f9
|
||||
-----BEGIN CERTIFICATE-----
|
||||
-MIIBtzCCASACAxAAAjANBgkqhkiG9w0BAQQFADBEMQswCQYDVQQGEwJTRTEQMA4G
|
||||
-A1UECBMHVXBwc2FsYTEQMA4GA1UEBxMHVXBwc2FsYTERMA8GA1UEChMITXlTUUwg
|
||||
-QUIwHhcNMTAwMTI5MTE1NjQ5WhcNMTUwMTI4MTE1NjQ5WjBGMQswCQYDVQQGEwJT
|
||||
-RTEQMA4GA1UECBMHVXBwc2FsYTERMA8GA1UEChMITXlTUUwgQUIxEjAQBgNVBAMT
|
||||
-CWxvY2FsaG9zdDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDN5IdRnXIRoNH685KL
|
||||
-Exzr9+KaL3Ko1mVI0WmvG8BME+VgYFFB6aumvBO7DF4yfNlsns0FJIR424CRLtiI
|
||||
-K8LtAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAc86cbjlGtBS+2j/zG7qQvCND14Iq
|
||||
-cE6m2VplXLffcd91d8WApK/60lni/cmc8JiVjmmpjHzYb0jS4zbgzf8/0aXmq3UJ
|
||||
-xFAQxJbdvzveMkbaykrx1lKKMy+r9S5wP9ScvgDIA/k5it9bcDxA7wO+fD0dMjLz
|
||||
-UYHigzBuPTib+zw=
|
||||
+MIIDJTCCAg2gAwIBAgIBBDANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJTRTEQ
|
||||
+MA4GA1UECBMHVXBwc2FsYTEQMA4GA1UEBxMHVXBwc2FsYTERMA8GA1UEChMITXlT
|
||||
+UUwgQUIwHhcNMTAwMjIwMDI1NTA2WhcNMzAwOTAzMDI1NTA2WjBGMQswCQYDVQQG
|
||||
+EwJTRTEQMA4GA1UECBMHVXBwc2FsYTERMA8GA1UEChMITXlTUUwgQUIxEjAQBgNV
|
||||
+BAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA431PwiN3
|
||||
+qTos0mlZoC9O0VFMro31F8zOWJyDTwujuymiuB0+GwT5qT7iYdDme7l8EtgfhslT
|
||||
+tQTd3ybpwCveSpYu8yNveW2p0k4Xry/ei2hErt6j4sQ3HAStc0uF+YOs/rfBVEcu
|
||||
+ltQxloWUadZaYyQEmYkZHVaK0Xeqh/s4zbcCAwEAAaOBozCBoDAJBgNVHRMEAjAA
|
||||
+MB0GA1UdDgQWBBTMjHFA0A+/0Zl5PxvpEHYZZzYPozB0BgNVHSMEbTBrgBSx+353
|
||||
+tUCNaBF+2RHlw8baTaxRsKFIpEYwRDELMAkGA1UEBhMCU0UxEDAOBgNVBAgTB1Vw
|
||||
+cHNhbGExEDAOBgNVBAcTB1VwcHNhbGExETAPBgNVBAoTCE15U1FMIEFCggkAvlit
|
||||
+TB89JZUwDQYJKoZIhvcNAQEFBQADggEBAG+tXln6hDq+4nKx6GYqTvhzGREGEZJ4
|
||||
+Vj7W6GgpkItZ0v6qriVZx+mZu0oGQ91Avcv0rnmVfY6Q71jSqPy/B/M3spu92uaM
|
||||
+Vt1exkpwfD49oeg1Brine6wmhVRdCaJ7d7QXf3Ixy//MZ23mPsbclutKCq7pSK6K
|
||||
+4NZzV24yTADcKNpVs5+f2JjM2fG2sxRnLqFHHlERz3CfMY+6WSny0IgL4lFr+DHt
|
||||
+bawAXtN4TJWXAsx0KzvGKOYqwzCZNbRNMUbUkPJH7WSFGnUqcgovxjov0qxrMczl
|
||||
+qAfC1iLzxg+/Z9nWsnnNSLXD4OMYf7V0yUMZ+8STKcrMkCsbb0X2Jfk=
|
||||
-----END CERTIFICATE-----
|
||||
diff -Naur mysql-5.1.50.orig/mysql-test/std_data/server-key.pem mysql-5.1.50/mysql-test/std_data/server-key.pem
|
||||
--- mysql-5.1.50.orig/mysql-test/std_data/server-key.pem 2010-08-03 13:55:08.000000000 -0400
|
||||
+++ mysql-5.1.50/mysql-test/std_data/server-key.pem 2010-08-27 23:42:05.754428433 -0400
|
||||
@@ -1,9 +1,15 @@
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
-MIIBOwIBAAJBAM3kh1GdchGg0frzkosTHOv34povcqjWZUjRaa8bwEwT5WBgUUHp
|
||||
-q6a8E7sMXjJ82WyezQUkhHjbgJEu2Igrwu0CAwEAAQJBAJuwhFbF3NzRpBbEmnqJ
|
||||
-4GPa1UJMQMLFJF+04tqj/HxJcAIVhOJhGmmtYNw1yjz/ZsPnfJCMz4eFOtdjvGtf
|
||||
-peECIQDmFFg2WLvYo+2m9w9V7z4ZIkg7ixYkI/ObUUctfZkPOQIhAOUWnrvjFrAX
|
||||
-bIvYT/YR50+3ZDLEc51XxNgJnWqWYl1VAiEAnTOFWgyivFC1DgF8PvDp8u5TgCt2
|
||||
-A1d1GMgd490O+TECIC/WMl0/hTxOF9930vKqOGf//o9PUGkZq8QE9fcM4gtlAiAE
|
||||
-iOcFpnLjtWj57jrhuw214ucnB5rklkQQe+AtcARNkg==
|
||||
+MIICXgIBAAKBgQDjfU/CI3epOizSaVmgL07RUUyujfUXzM5YnINPC6O7KaK4HT4b
|
||||
+BPmpPuJh0OZ7uXwS2B+GyVO1BN3fJunAK95Kli7zI295banSThevL96LaESu3qPi
|
||||
+xDccBK1zS4X5g6z+t8FURy6W1DGWhZRp1lpjJASZiRkdVorRd6qH+zjNtwIDAQAB
|
||||
+AoGAUb0o91y/FjMs/72S0pes/lDz+JRRSGfyjKxQEgrgndNsADOhqRu0iTdrKDJj
|
||||
+XnlbN3ooecnFJfnFrvTQcJhSmlS30j6VrBw6LXpCBK3dvjYgJ9LOne7WK+dF1+vS
|
||||
+FMQtsP04C56Sxy6HJDpMyWJ6oS3Bu169ygG2AxKo+Fk+E6ECQQD38w/MzmrARz2Z
|
||||
+AGeEPDUnVZPYgtmXkmks95S0/2jSoLhmgpvJimzxwpYwVG/BG8dSDVuTDu5kp05D
|
||||
+3bZIp3EzAkEA6uAwJsCZPtHXlWU3wYZJsA697rUNjPaCQOIaZ/lnh5RUHTmUiw1h
|
||||
+Oj/VORqKB0kXqcDfawwLjZEvh1Xli+H5bQJBANTmhw2TvEPnp/OFTl1UGUvyBmXl
|
||||
+TRMB639qAu07VfVtfYi/4ya1zn/0VmOfTOoigQ5qW9Q1AOu6YNCTQl62L9MCQQDc
|
||||
+YfEsW2kvNYxYJHoVfuBjbuGuOnn1e1Oqd70ZND59S6NFLMMBWlORaVWzWACNZ3rp
|
||||
+kAzSj6HDeqgjD2jsQONdAkEAt7S1YHUn8F760bRn4AnAto2TVOYdArtTP/wYjd4o
|
||||
+9rJREO/d8AYkYJ96APLvF0SZ4n3t1pLwQRsKKN8ZGTmzLA==
|
||||
-----END RSA PRIVATE KEY-----
|
||||
diff -Naur mysql-5.1.50.orig/mysql-test/std_data/server8k-cert.pem mysql-5.1.50/mysql-test/std_data/server8k-cert.pem
|
||||
--- mysql-5.1.50.orig/mysql-test/std_data/server8k-cert.pem 2010-08-03 13:55:08.000000000 -0400
|
||||
+++ mysql-5.1.50/mysql-test/std_data/server8k-cert.pem 2010-08-27 23:43:00.005366270 -0400
|
||||
@@ -1,51 +1,69 @@
|
||||
+Certificate:
|
||||
+ Data:
|
||||
+ Version: 3 (0x2)
|
||||
+ Serial Number: 5 (0x5)
|
||||
+ Signature Algorithm: sha1WithRSAEncryption
|
||||
+ Issuer: C=SE, ST=Uppsala, L=Uppsala, O=MySQL AB
|
||||
+ Validity
|
||||
+ Not Before: Feb 20 03:00:54 2010 GMT
|
||||
+ Not After : Sep 3 03:00:54 2030 GMT
|
||||
+ Subject: C=SE, ST=Uppsala, O=MySQL AB, CN=server
|
||||
+ Subject Public Key Info:
|
||||
+ Public Key Algorithm: rsaEncryption
|
||||
+ RSA Public Key: (1024 bit)
|
||||
+ Modulus (1024 bit):
|
||||
+ 00:c5:da:44:95:06:77:16:21:af:a0:c4:3c:e9:f8:
|
||||
+ 1d:2d:95:f9:63:90:8c:3f:86:ba:77:76:4a:52:4b:
|
||||
+ 6b:af:29:f5:1c:aa:d4:3f:3e:42:9f:6d:46:ba:86:
|
||||
+ 90:b1:2d:cc:db:c6:33:15:a3:f4:af:53:33:4f:a1:
|
||||
+ 56:d1:aa:3b:26:10:f7:64:b5:f9:bf:1b:b1:47:8e:
|
||||
+ cc:a6:d6:0d:aa:4a:77:e3:a3:63:9d:2a:dc:65:f4:
|
||||
+ 7f:91:17:38:2d:d6:cd:4e:8d:53:52:97:6e:87:fc:
|
||||
+ 64:60:a6:a1:00:ac:96:6c:e4:42:94:75:17:46:6f:
|
||||
+ 91:b5:dd:06:47:ed:05:e3:db
|
||||
+ Exponent: 65537 (0x10001)
|
||||
+ X509v3 extensions:
|
||||
+ X509v3 Basic Constraints:
|
||||
+ CA:FALSE
|
||||
+ X509v3 Subject Key Identifier:
|
||||
+ 6E:60:3F:29:13:60:99:ED:0C:F7:15:B5:DB:7B:1C:FB:6F:60:19:ED
|
||||
+ X509v3 Authority Key Identifier:
|
||||
+ keyid:B1:FB:7E:77:B5:40:8D:68:11:7E:D9:11:E5:C3:C6:DA:4D:AC:51:B0
|
||||
+ DirName:/C=SE/ST=Uppsala/L=Uppsala/O=MySQL AB
|
||||
+ serial:BE:58:AD:4C:1F:3D:25:95
|
||||
+
|
||||
+ Signature Algorithm: sha1WithRSAEncryption
|
||||
+ 63:2e:0f:07:14:06:cf:74:90:3d:37:42:f2:48:70:60:21:bc:
|
||||
+ 34:52:31:f1:87:70:d2:b2:fb:ff:13:38:dc:f0:5e:43:d7:ee:
|
||||
+ a7:c7:1f:ac:aa:d2:8c:4f:fa:3c:4c:73:f6:b6:c2:0c:a0:ea:
|
||||
+ a2:c9:e2:73:61:c3:2e:78:40:0f:2a:d3:63:50:9b:b8:f9:89:
|
||||
+ 40:ed:98:08:97:c3:07:24:17:34:b5:78:89:0a:bb:83:4c:e2:
|
||||
+ 5c:2e:13:d6:21:30:ad:30:48:b5:70:12:ff:4a:6f:42:f0:f8:
|
||||
+ 9f:b1:4b:bd:89:2b:f0:9d:e2:49:2b:35:69:18:1f:76:40:b4:
|
||||
+ 76:bd:cb:dd:27:2f:c0:c1:e2:33:3e:6e:df:68:54:19:92:8a:
|
||||
+ bb:13:9c:cf:d6:17:56:da:bf:0d:64:70:3a:45:b7:aa:5f:e3:
|
||||
+ f5:96:ae:34:f2:17:37:27:d0:4b:e8:30:4a:c0:02:42:e2:d2:
|
||||
+ 30:eb:eb:c7:d7:ec:d8:df:5c:43:58:e2:6f:b7:58:54:0d:c4:
|
||||
+ 01:71:2d:59:8f:44:c7:a1:6c:0b:41:28:fa:b7:63:a7:68:d3:
|
||||
+ 4f:c3:0f:17:9e:b2:32:50:e6:0b:87:3d:e2:39:47:c0:d8:0a:
|
||||
+ 3b:f6:af:50:68:0f:9d:ef:6e:34:0d:3a:07:94:f8:a4:d7:24:
|
||||
+ 86:32:d3:b4
|
||||
-----BEGIN CERTIFICATE-----
|
||||
-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
-BAgTB1VwcHNhbGExETAPBgNVBAoTCE15U1FMIEFCMQ0wCwYDVQQLEwRUZXN0MQsw
|
||||
-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
-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
-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
-AAOCBA8AMIIECgKCBAEA6h3v1OWb9I9U/Z8diBu/xYGS8NCTD3ZESboHxVI2qSEC
|
||||
-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
-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
-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
-hACbfU87YjaSKs+q2VXCzfyYGZk1L1xk5GUI0bP+jutf1dDzNttW2/q2Nf5rxx09
|
||||
-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
-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
-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
-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
-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
-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
-+LFdt4N0cdII4gBgJAfLuuA2yrDXRq4P6cgpVMy0R+0dEYE8zzm8zf1a+Ud273LS
|
||||
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-+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
-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
-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
-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
-+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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-7QqY/OFTjpPH8nP57LwouiT6MgSUCWGaOkPuBJ9w9sENSbbINpgJJ42iAe2kE+R7
|
||||
-qEIvf/2ETCTseeQUqm2nWiSPLkNagEh6kojmEoKrGyrv3YjrSXSOY1a70tDVy43+
|
||||
-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
-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
-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
|
||||
-/w8pMRr8gEuRqpL2WdJiKGG6lhMHLVFo
|
||||
+MIIDIjCCAgqgAwIBAgIBBTANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJTRTEQ
|
||||
+MA4GA1UECBMHVXBwc2FsYTEQMA4GA1UEBxMHVXBwc2FsYTERMA8GA1UEChMITXlT
|
||||
+UUwgQUIwHhcNMTAwMjIwMDMwMDU0WhcNMzAwOTAzMDMwMDU0WjBDMQswCQYDVQQG
|
||||
+EwJTRTEQMA4GA1UECBMHVXBwc2FsYTERMA8GA1UEChMITXlTUUwgQUIxDzANBgNV
|
||||
+BAMTBnNlcnZlcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAxdpElQZ3FiGv
|
||||
+oMQ86fgdLZX5Y5CMP4a6d3ZKUktrryn1HKrUPz5Cn21GuoaQsS3M28YzFaP0r1Mz
|
||||
+T6FW0ao7JhD3ZLX5vxuxR47MptYNqkp346NjnSrcZfR/kRc4LdbNTo1TUpduh/xk
|
||||
+YKahAKyWbORClHUXRm+Rtd0GR+0F49sCAwEAAaOBozCBoDAJBgNVHRMEAjAAMB0G
|
||||
+A1UdDgQWBBRuYD8pE2CZ7Qz3FbXbexz7b2AZ7TB0BgNVHSMEbTBrgBSx+353tUCN
|
||||
+aBF+2RHlw8baTaxRsKFIpEYwRDELMAkGA1UEBhMCU0UxEDAOBgNVBAgTB1VwcHNh
|
||||
+bGExEDAOBgNVBAcTB1VwcHNhbGExETAPBgNVBAoTCE15U1FMIEFCggkAvlitTB89
|
||||
+JZUwDQYJKoZIhvcNAQEFBQADggEBAGMuDwcUBs90kD03QvJIcGAhvDRSMfGHcNKy
|
||||
++/8TONzwXkPX7qfHH6yq0oxP+jxMc/a2wgyg6qLJ4nNhwy54QA8q02NQm7j5iUDt
|
||||
+mAiXwwckFzS1eIkKu4NM4lwuE9YhMK0wSLVwEv9Kb0Lw+J+xS72JK/Cd4kkrNWkY
|
||||
+H3ZAtHa9y90nL8DB4jM+bt9oVBmSirsTnM/WF1bavw1kcDpFt6pf4/WWrjTyFzcn
|
||||
+0EvoMErAAkLi0jDr68fX7NjfXENY4m+3WFQNxAFxLVmPRMehbAtBKPq3Y6do00/D
|
||||
+DxeesjJQ5guHPeI5R8DYCjv2r1BoD53vbjQNOgeU+KTXJIYy07Q=
|
||||
-----END CERTIFICATE-----
|
||||
diff -Naur mysql-5.1.50.orig/mysql-test/std_data/server8k-key.pem mysql-5.1.50/mysql-test/std_data/server8k-key.pem
|
||||
--- mysql-5.1.50.orig/mysql-test/std_data/server8k-key.pem 2010-08-03 13:55:08.000000000 -0400
|
||||
+++ mysql-5.1.50/mysql-test/std_data/server8k-key.pem 2010-08-27 23:43:10.165365998 -0400
|
||||
@@ -1,99 +1,15 @@
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-+LJKwqbW8nOPBoiekimIKfJYoOA4+C/mAjsYl1sVjjEhXJAs9S9L2UvnUk1PsZi4
|
||||
-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
-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
-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
-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
-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
-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
-wUTO0lFpz7M+VyMNaJ6yXU6biBV5hLAI8C5ldr/SWI789W2+ebBaJ9gfK+PTtroh
|
||||
-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
-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
-XvYT6Uf6T6S1lBDFXNmY1qOuDkLBJTWRiwYMDViQEaWCaZgGTKDYeT3M8uR/Phyu
|
||||
-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
-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
-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
-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
-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
-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
-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
-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
-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
-hNwWBfmMlfzgOGtCYhMeK+AajqTtUbMYQA6qp47KJd/Oa5Dvi3ZCpvZh3Ll5iIau
|
||||
-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
-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
-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
-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
-3+TSK5t0yz0Nt7hNwcI6pLmWUIYcZgpFc/WsiiGscTfhy8rh3kRHI8ylGq53KNF+
|
||||
-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
-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
-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
-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
-2Q8nH1SVTuyGFREMp/zsiAEaGfdd0hI2r1J7OdNPBBCtmhITsy9ZYHqm5vrGvy3s
|
||||
-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
-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
-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
-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
-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
-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
-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
-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
-+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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-uHIyMphPMkKC4GC3/43kkMr6tck8kZbXGSYsLsBr2GkCggIBAJvvrjILQianzKcm
|
||||
-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
-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
-SJKzVPxwX3jwlrBmbx/pnb7dcLbFIbNcyLvl1ZJJu4BDMVRmgssTRp/5eExtQZg4
|
||||
-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
-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
-+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
-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
-z999bkfI4hBLq5pRSAXz+YVu5SMKa10GaawIwJLat+i+1zboF6QyI2o/Wz8nrsNq
|
||||
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-bNjtKM/P/DXpO+yJYoOPdKtaSDhtnfNDM7H/jztJ3XIrOltKA7CcRDohbBWIx8Q0
|
||||
-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
-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
-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
-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
-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
-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
-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
-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
|
||||
-----END RSA PRIVATE KEY-----
|
33
packaging/rpm-uln/mysql-install-test.patch
Normal file
33
packaging/rpm-uln/mysql-install-test.patch
Normal file
@ -0,0 +1,33 @@
|
||||
Improve the documentation that will be installed in the mysql-test RPM.
|
||||
|
||||
|
||||
diff -Naur mysql-5.1.43.orig/mysql-test/README mysql-5.1.43/mysql-test/README
|
||||
--- mysql-5.1.43.orig/mysql-test/README 2010-01-15 12:14:43.000000000 -0500
|
||||
+++ mysql-5.1.43/mysql-test/README 2010-02-13 21:18:06.000000000 -0500
|
||||
@@ -6,6 +6,16 @@
|
||||
actually have a co-existing MySQL installation. The tests will not
|
||||
conflict with it.
|
||||
|
||||
+For use in Red Hat distributions, you should run the script as user mysql,
|
||||
+so the best bet is something like
|
||||
+ cd /usr/share/mysql-test
|
||||
+ sudo -u mysql ./mysql-test-run
|
||||
+This will use the installed mysql executables, but will run a private copy
|
||||
+of the server process (using data files within /usr/share/mysql-test),
|
||||
+so you need not start the mysqld service beforehand.
|
||||
+To clean up afterwards, remove the created "var" subdirectory, eg
|
||||
+ sudo -u mysql rm -rf /usr/share/mysql-test/var
|
||||
+
|
||||
All tests must pass. If one or more of them fail on your system, please
|
||||
read the following manual section for instructions on how to report the
|
||||
problem:
|
||||
@@ -25,7 +35,8 @@
|
||||
|
||||
With no test cases named on the command line, mysql-test-run falls back
|
||||
to the normal "non-extern" behavior. The reason for this is that some
|
||||
-tests cannot run with an external server.
|
||||
+tests cannot run with an external server (because they need to control the
|
||||
+options with which the server is started).
|
||||
|
||||
|
||||
You can create your own test cases. To create a test case, create a new
|
32
packaging/rpm-uln/mysql-strmov.patch
Normal file
32
packaging/rpm-uln/mysql-strmov.patch
Normal file
@ -0,0 +1,32 @@
|
||||
Remove overly optimistic definition of strmov() as stpcpy().
|
||||
|
||||
mysql uses this macro with overlapping source and destination strings,
|
||||
which is verboten per spec, and fails on some Red Hat platforms.
|
||||
Deleting the definition is sufficient to make it fall back to a
|
||||
byte-at-a-time copy loop, which should consistently give the
|
||||
expected behavior.
|
||||
|
||||
Note: the particular case that prompted this patch is reported and fixed
|
||||
at http://bugs.mysql.com/bug.php?id=48864. However, my faith in upstream's
|
||||
ability to detect this type of error is low, and I also see little evidence
|
||||
of any real performance gain from optimizing these calls. So I'm keeping
|
||||
this patch.
|
||||
|
||||
|
||||
diff -Naur mysql-5.1.37.orig/include/m_string.h mysql-5.1.37/include/m_string.h
|
||||
--- mysql-5.1.37.orig/include/m_string.h 2009-07-13 19:08:50.000000000 -0400
|
||||
+++ mysql-5.1.37/include/m_string.h 2009-08-31 21:49:49.000000000 -0400
|
||||
@@ -81,13 +81,6 @@
|
||||
extern void *(*my_str_malloc)(size_t);
|
||||
extern void (*my_str_free)(void *);
|
||||
|
||||
-#if defined(HAVE_STPCPY)
|
||||
-#define strmov(A,B) stpcpy((A),(B))
|
||||
-#ifndef stpcpy
|
||||
-extern char *stpcpy(char *, const char *); /* For AIX with gcc 2.95.3 */
|
||||
-#endif
|
||||
-#endif
|
||||
-
|
||||
/* Declared in int2str() */
|
||||
extern char NEAR _dig_vec_upper[];
|
||||
extern char NEAR _dig_vec_lower[];
|
209
packaging/rpm-uln/mysql.init
Normal file
209
packaging/rpm-uln/mysql.init
Normal file
@ -0,0 +1,209 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# mysqld This shell script takes care of starting and stopping
|
||||
# the MySQL subsystem (mysqld).
|
||||
#
|
||||
# chkconfig: - 64 36
|
||||
# description: MySQL database server.
|
||||
# processname: mysqld
|
||||
# config: /etc/my.cnf
|
||||
# pidfile: /var/run/mysqld/mysqld.pid
|
||||
|
||||
# Source function library.
|
||||
. /etc/rc.d/init.d/functions
|
||||
|
||||
# Source networking configuration.
|
||||
. /etc/sysconfig/network
|
||||
|
||||
|
||||
exec="/usr/bin/mysqld_safe"
|
||||
prog="mysqld"
|
||||
|
||||
# Set timeouts here so they can be overridden from /etc/sysconfig/mysqld
|
||||
STARTTIMEOUT=120
|
||||
STOPTIMEOUT=60
|
||||
|
||||
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
|
||||
|
||||
lockfile=/var/lock/subsys/$prog
|
||||
|
||||
|
||||
# extract value of a MySQL option from config files
|
||||
# Usage: get_mysql_option SECTION VARNAME DEFAULT
|
||||
# result is returned in $result
|
||||
# We use my_print_defaults which prints all options from multiple files,
|
||||
# with the more specific ones later; hence take the last match.
|
||||
get_mysql_option(){
|
||||
result=`/usr/bin/my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1`
|
||||
if [ -z "$result" ]; then
|
||||
# not found, use default
|
||||
result="$3"
|
||||
fi
|
||||
}
|
||||
|
||||
get_mysql_option mysqld datadir "/var/lib/mysql"
|
||||
datadir="$result"
|
||||
get_mysql_option mysqld socket "$datadir/mysql.sock"
|
||||
socketfile="$result"
|
||||
get_mysql_option mysqld_safe log-error "/var/log/mysqld.log"
|
||||
errlogfile="$result"
|
||||
get_mysql_option mysqld_safe pid-file "/var/run/mysqld/mysqld.pid"
|
||||
mypidfile="$result"
|
||||
|
||||
|
||||
start(){
|
||||
[ -x $exec ] || exit 5
|
||||
# check to see if it's already running
|
||||
RESPONSE=`/usr/bin/mysqladmin --socket="$socketfile" --user=UNKNOWN_MYSQL_USER ping 2>&1`
|
||||
if [ $? = 0 ]; then
|
||||
# already running, do nothing
|
||||
action $"Starting $prog: " /bin/true
|
||||
ret=0
|
||||
elif echo "$RESPONSE" | grep -q "Access denied for user"
|
||||
then
|
||||
# already running, do nothing
|
||||
action $"Starting $prog: " /bin/true
|
||||
ret=0
|
||||
else
|
||||
# prepare for start
|
||||
touch "$errlogfile"
|
||||
chown mysql:mysql "$errlogfile"
|
||||
chmod 0640 "$errlogfile"
|
||||
[ -x /sbin/restorecon ] && /sbin/restorecon "$errlogfile"
|
||||
if [ ! -d "$datadir/mysql" ] ; then
|
||||
# First, make sure $datadir is there with correct permissions
|
||||
if [ ! -e "$datadir" -a ! -h "$datadir" ]
|
||||
then
|
||||
mkdir -p "$datadir" || exit 1
|
||||
fi
|
||||
chown mysql:mysql "$datadir"
|
||||
chmod 0755 "$datadir"
|
||||
[ -x /sbin/restorecon ] && /sbin/restorecon "$datadir"
|
||||
# Now create the database
|
||||
action $"Initializing MySQL database: " /usr/bin/mysql_install_db --datadir="$datadir" --user=mysql
|
||||
ret=$?
|
||||
chown -R mysql:mysql "$datadir"
|
||||
if [ $ret -ne 0 ] ; then
|
||||
return $ret
|
||||
fi
|
||||
fi
|
||||
chown mysql:mysql "$datadir"
|
||||
chmod 0755 "$datadir"
|
||||
# Pass all the options determined above, to ensure consistent behavior.
|
||||
# In many cases mysqld_safe would arrive at the same conclusions anyway
|
||||
# but we need to be sure. (An exception is that we don't force the
|
||||
# log-error setting, since this script doesn't really depend on that,
|
||||
# and some users might prefer to configure logging to syslog.)
|
||||
# Note: set --basedir to prevent probes that might trigger SELinux
|
||||
# alarms, per bug #547485
|
||||
$exec --datadir="$datadir" --socket="$socketfile" \
|
||||
--pid-file="$mypidfile" \
|
||||
--basedir=/usr --user=mysql >/dev/null 2>&1 &
|
||||
safe_pid=$!
|
||||
# Spin for a maximum of N seconds waiting for the server to come up;
|
||||
# exit the loop immediately if mysqld_safe process disappears.
|
||||
# Rather than assuming we know a valid username, accept an "access
|
||||
# denied" response as meaning the server is functioning.
|
||||
ret=0
|
||||
TIMEOUT="$STARTTIMEOUT"
|
||||
while [ $TIMEOUT -gt 0 ]; do
|
||||
RESPONSE=`/usr/bin/mysqladmin --socket="$socketfile" --user=UNKNOWN_MYSQL_USER ping 2>&1` && break
|
||||
echo "$RESPONSE" | grep -q "Access denied for user" && break
|
||||
if ! /bin/kill -0 $safe_pid 2>/dev/null; then
|
||||
echo "MySQL Daemon failed to start."
|
||||
ret=1
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
let TIMEOUT=${TIMEOUT}-1
|
||||
done
|
||||
if [ $TIMEOUT -eq 0 ]; then
|
||||
echo "Timeout error occurred trying to start MySQL Daemon."
|
||||
ret=1
|
||||
fi
|
||||
if [ $ret -eq 0 ]; then
|
||||
action $"Starting $prog: " /bin/true
|
||||
touch $lockfile
|
||||
else
|
||||
action $"Starting $prog: " /bin/false
|
||||
fi
|
||||
fi
|
||||
return $ret
|
||||
}
|
||||
|
||||
stop(){
|
||||
if [ ! -f "$mypidfile" ]; then
|
||||
# not running; per LSB standards this is "ok"
|
||||
action $"Stopping $prog: " /bin/true
|
||||
return 0
|
||||
fi
|
||||
MYSQLPID=`cat "$mypidfile"`
|
||||
if [ -n "$MYSQLPID" ]; then
|
||||
/bin/kill "$MYSQLPID" >/dev/null 2>&1
|
||||
ret=$?
|
||||
if [ $ret -eq 0 ]; then
|
||||
TIMEOUT="$STOPTIMEOUT"
|
||||
while [ $TIMEOUT -gt 0 ]; do
|
||||
/bin/kill -0 "$MYSQLPID" >/dev/null 2>&1 || break
|
||||
sleep 1
|
||||
let TIMEOUT=${TIMEOUT}-1
|
||||
done
|
||||
if [ $TIMEOUT -eq 0 ]; then
|
||||
echo "Timeout error occurred trying to stop MySQL Daemon."
|
||||
ret=1
|
||||
action $"Stopping $prog: " /bin/false
|
||||
else
|
||||
rm -f $lockfile
|
||||
rm -f "$socketfile"
|
||||
action $"Stopping $prog: " /bin/true
|
||||
fi
|
||||
else
|
||||
action $"Stopping $prog: " /bin/false
|
||||
fi
|
||||
else
|
||||
# failed to read pidfile, probably insufficient permissions
|
||||
action $"Stopping $prog: " /bin/false
|
||||
ret=4
|
||||
fi
|
||||
return $ret
|
||||
}
|
||||
|
||||
restart(){
|
||||
stop
|
||||
start
|
||||
}
|
||||
|
||||
condrestart(){
|
||||
[ -e $lockfile ] && restart || :
|
||||
}
|
||||
|
||||
|
||||
# See how we were called.
|
||||
case "$1" in
|
||||
start)
|
||||
start
|
||||
;;
|
||||
stop)
|
||||
stop
|
||||
;;
|
||||
status)
|
||||
status -p "$mypidfile" $prog
|
||||
;;
|
||||
restart)
|
||||
restart
|
||||
;;
|
||||
condrestart|try-restart)
|
||||
condrestart
|
||||
;;
|
||||
reload)
|
||||
exit 3
|
||||
;;
|
||||
force-reload)
|
||||
restart
|
||||
;;
|
||||
*)
|
||||
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
|
||||
exit 2
|
||||
esac
|
||||
|
||||
exit $?
|
1959
packaging/rpm-uln/mysql.spec.sh
Normal file
1959
packaging/rpm-uln/mysql.spec.sh
Normal file
File diff suppressed because it is too large
Load Diff
32
packaging/rpm-uln/scriptstub.c
Normal file
32
packaging/rpm-uln/scriptstub.c
Normal file
@ -0,0 +1,32 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
/* Translate call of myself into call of same-named script in LIBDIR */
|
||||
/* The macro LIBDIR must be defined as a double-quoted string */
|
||||
|
||||
int main (int argc, char **argv)
|
||||
{
|
||||
char *basename;
|
||||
char *fullname;
|
||||
char **newargs;
|
||||
int i;
|
||||
|
||||
basename = strrchr(argv[0], '/');
|
||||
if (basename)
|
||||
basename++;
|
||||
else
|
||||
basename = argv[0];
|
||||
fullname = malloc(strlen(LIBDIR) + strlen(basename) + 2);
|
||||
sprintf(fullname, "%s/%s", LIBDIR, basename);
|
||||
newargs = malloc((argc+1) * sizeof(char *));
|
||||
newargs[0] = fullname;
|
||||
for (i = 1; i < argc; i++)
|
||||
newargs[i] = argv[i];
|
||||
newargs[argc] = NULL;
|
||||
|
||||
execvp(fullname, newargs);
|
||||
|
||||
return 1;
|
||||
}
|
@ -450,29 +450,6 @@ else
|
||||
DATADIR=@localstatedir@
|
||||
fi
|
||||
|
||||
#
|
||||
# Try to find the plugin directory
|
||||
#
|
||||
|
||||
# Use user-supplied argument
|
||||
if [ -n "${PLUGIN_DIR}" ]; then
|
||||
plugin_dir="${PLUGIN_DIR}"
|
||||
else
|
||||
# Try to find plugin dir relative to basedir
|
||||
for dir in lib/mysql/plugin lib/plugin
|
||||
do
|
||||
if [ -d "${MY_BASEDIR_VERSION}/${dir}" ]; then
|
||||
plugin_dir="${MY_BASEDIR_VERSION}/${dir}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
# Give up and use compiled-in default
|
||||
if [ -z "${plugin_dir}" ]; then
|
||||
plugin_dir='@pkgplugindir@'
|
||||
fi
|
||||
fi
|
||||
plugin_dir="${plugin_dir}${PLUGIN_VARIANT}"
|
||||
|
||||
if test -z "$MYSQL_HOME"
|
||||
then
|
||||
if test -r "$MY_BASEDIR_VERSION/my.cnf" && test -r "$DATADIR/my.cnf"
|
||||
@ -533,6 +510,31 @@ fi
|
||||
parse_arguments `$print_defaults $defaults --loose-verbose mysqld_safe safe_mysqld`
|
||||
parse_arguments PICK-ARGS-FROM-ARGV "$@"
|
||||
|
||||
|
||||
#
|
||||
# Try to find the plugin directory
|
||||
#
|
||||
|
||||
# Use user-supplied argument
|
||||
if [ -n "${PLUGIN_DIR}" ]; then
|
||||
plugin_dir="${PLUGIN_DIR}"
|
||||
else
|
||||
# Try to find plugin dir relative to basedir
|
||||
for dir in lib/mysql/plugin lib/plugin
|
||||
do
|
||||
if [ -d "${MY_BASEDIR_VERSION}/${dir}" ]; then
|
||||
plugin_dir="${MY_BASEDIR_VERSION}/${dir}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
# Give up and use compiled-in default
|
||||
if [ -z "${plugin_dir}" ]; then
|
||||
plugin_dir='@pkgplugindir@'
|
||||
fi
|
||||
fi
|
||||
plugin_dir="${plugin_dir}${PLUGIN_VARIANT}"
|
||||
|
||||
|
||||
# Determine what logging facility to use
|
||||
|
||||
# Ensure that 'logger' exists, if it's requested
|
||||
|
@ -295,7 +295,6 @@ IF(WIN32 AND MYSQLD_EXECUTABLE)
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
${CONFIG_PARAM} -P ${CMAKE_CURRENT_BINARY_DIR}/create_initial_db.cmake
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/data
|
||||
COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/initdb.dep
|
||||
DEPENDS mysqld
|
||||
)
|
||||
ADD_CUSTOM_TARGET(initial_database
|
||||
|
@ -409,7 +409,6 @@ Event_db_repository::index_read_for_db_for_i_s(THD *thd, TABLE *schema_table,
|
||||
TABLE *event_table,
|
||||
const char *db)
|
||||
{
|
||||
int ret=0;
|
||||
CHARSET_INFO *scs= system_charset_info;
|
||||
KEY *key_info;
|
||||
uint key_len;
|
||||
@ -419,7 +418,14 @@ Event_db_repository::index_read_for_db_for_i_s(THD *thd, TABLE *schema_table,
|
||||
DBUG_ENTER("Event_db_repository::index_read_for_db_for_i_s");
|
||||
|
||||
DBUG_PRINT("info", ("Using prefix scanning on PK"));
|
||||
event_table->file->ha_index_init(0, 1);
|
||||
|
||||
int ret= event_table->file->ha_index_init(0, 1);
|
||||
if (ret)
|
||||
{
|
||||
event_table->file->print_error(ret, MYF(0));
|
||||
DBUG_RETURN(true);
|
||||
}
|
||||
|
||||
key_info= event_table->key_info;
|
||||
|
||||
if (key_info->key_parts == 0 ||
|
||||
|
@ -136,6 +136,7 @@ ha_rows filesort(THD *thd, TABLE *table, SORT_FIELD *sortorder, uint s_length,
|
||||
*/
|
||||
memcpy(&table_sort, &table->sort, sizeof(FILESORT_INFO));
|
||||
table->sort.io_cache= NULL;
|
||||
DBUG_ASSERT(table_sort.record_pointers == NULL);
|
||||
|
||||
outfile= table_sort.io_cache;
|
||||
my_b_clear(&tempfile);
|
||||
@ -364,6 +365,7 @@ ha_rows filesort(THD *thd, TABLE *table, SORT_FIELD *sortorder, uint s_length,
|
||||
|
||||
void filesort_free_buffers(TABLE *table, bool full)
|
||||
{
|
||||
DBUG_ENTER("filesort_free_buffers");
|
||||
my_free(table->sort.record_pointers);
|
||||
table->sort.record_pointers= NULL;
|
||||
|
||||
@ -380,6 +382,7 @@ void filesort_free_buffers(TABLE *table, bool full)
|
||||
my_free(table->sort.addon_field);
|
||||
table->sort.addon_buf= NULL;
|
||||
table->sort.addon_field= NULL;
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
||||
@ -529,6 +532,8 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select,
|
||||
if (!quick_select)
|
||||
{
|
||||
next_pos=(uchar*) 0; /* Find records in sequence */
|
||||
DBUG_EXECUTE_IF("bug14365043_1",
|
||||
DBUG_SET("+d,ha_rnd_init_fail"););
|
||||
if (file->ha_rnd_init_with_error(1))
|
||||
DBUG_RETURN(HA_POS_ERROR);
|
||||
file->extra_opt(HA_EXTRA_CACHE,
|
||||
|
@ -2857,6 +2857,17 @@ int ha_partition::open(const char *name, int mode, uint test_if_locked)
|
||||
if (bitmap_init(&m_bulk_insert_started, NULL, m_tot_parts + 1, FALSE))
|
||||
DBUG_RETURN(error);
|
||||
bitmap_clear_all(&m_bulk_insert_started);
|
||||
/*
|
||||
Initialize the bitmap we use to keep track of partitions which returned
|
||||
HA_ERR_KEY_NOT_FOUND from index_read_map.
|
||||
*/
|
||||
if (bitmap_init(&m_key_not_found_partitions, NULL, m_tot_parts, FALSE))
|
||||
{
|
||||
bitmap_free(&m_bulk_insert_started);
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
bitmap_clear_all(&m_key_not_found_partitions);
|
||||
m_key_not_found= false;
|
||||
/* Initialize the bitmap we use to determine what partitions are used */
|
||||
if (!m_is_clone_of)
|
||||
{
|
||||
@ -2999,6 +3010,7 @@ err_handler:
|
||||
(*file)->ha_close();
|
||||
err_alloc:
|
||||
bitmap_free(&m_bulk_insert_started);
|
||||
bitmap_free(&m_key_not_found_partitions);
|
||||
if (!m_is_clone_of)
|
||||
bitmap_free(&(m_part_info->used_partitions));
|
||||
|
||||
@ -3075,6 +3087,7 @@ int ha_partition::close(void)
|
||||
DBUG_ASSERT(table->s == table_share);
|
||||
destroy_record_priority_queue();
|
||||
bitmap_free(&m_bulk_insert_started);
|
||||
bitmap_free(&m_key_not_found_partitions);
|
||||
if (!m_is_clone_of)
|
||||
bitmap_free(&(m_part_info->used_partitions));
|
||||
file= m_file;
|
||||
@ -4614,21 +4627,24 @@ int ha_partition::index_read_map(uchar *buf, const uchar *key,
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
/**
|
||||
Common routine for a number of index_read variants
|
||||
|
||||
SYNOPSIS
|
||||
ha_partition::common_index_read()
|
||||
buf Buffer where the record should be returned
|
||||
have_start_key TRUE <=> the left endpoint is available, i.e.
|
||||
@param buf Buffer where the record should be returned.
|
||||
@param have_start_key TRUE <=> the left endpoint is available, i.e.
|
||||
we're in index_read call or in read_range_first
|
||||
call and the range has left endpoint
|
||||
|
||||
call and the range has left endpoint.
|
||||
FALSE <=> there is no left endpoint (we're in
|
||||
read_range_first() call and the range has no left
|
||||
endpoint)
|
||||
endpoint).
|
||||
|
||||
DESCRIPTION
|
||||
@return Operation status
|
||||
@retval 0 OK
|
||||
@retval HA_ERR_END_OF_FILE Whole index scanned, without finding the record.
|
||||
@retval HA_ERR_KEY_NOT_FOUND Record not found, but index cursor positioned.
|
||||
@retval other error code.
|
||||
|
||||
@details
|
||||
Start scanning the range (when invoked from read_range_first()) or doing
|
||||
an index lookup (when invoked from index_read_XXX):
|
||||
- If possible, perform partition selection
|
||||
@ -4638,10 +4654,6 @@ int ha_partition::index_read_map(uchar *buf, const uchar *key,
|
||||
handle_unordered_scan_next_partition)
|
||||
YES: Fill the priority queue and get the record that is the first in
|
||||
the ordering
|
||||
|
||||
RETURN
|
||||
0 OK
|
||||
other HA_ERR_END_OF_FILE or other error code.
|
||||
*/
|
||||
|
||||
int ha_partition::common_index_read(uchar *buf, bool have_start_key)
|
||||
@ -4651,14 +4663,16 @@ int ha_partition::common_index_read(uchar *buf, bool have_start_key)
|
||||
bool reverse_order= FALSE;
|
||||
DBUG_ENTER("ha_partition::common_index_read");
|
||||
|
||||
DBUG_PRINT("info", ("m_ordered: %u have_start_key: %u",
|
||||
m_ordered, have_start_key));
|
||||
DBUG_PRINT("info", ("m_ordered %u m_ordered_scan_ong %u",
|
||||
m_ordered, m_ordered_scan_ongoing));
|
||||
|
||||
if (have_start_key)
|
||||
{
|
||||
m_start_key.length= key_len= calculate_key_len(table, active_index,
|
||||
m_start_key.key,
|
||||
m_start_key.keypart_map);
|
||||
DBUG_PRINT("info", ("have_start_key map %lu find_flag %u len %u",
|
||||
m_start_key.keypart_map, m_start_key.flag, key_len));
|
||||
DBUG_ASSERT(key_len);
|
||||
}
|
||||
if ((error= partition_scan_set_up(buf, have_start_key)))
|
||||
@ -4676,24 +4690,16 @@ int ha_partition::common_index_read(uchar *buf, bool have_start_key)
|
||||
}
|
||||
DBUG_PRINT("info", ("m_ordered %u m_o_scan_ong %u have_start_key %u",
|
||||
m_ordered, m_ordered_scan_ongoing, have_start_key));
|
||||
if (!m_ordered_scan_ongoing ||
|
||||
(have_start_key && m_start_key.flag == HA_READ_KEY_EXACT &&
|
||||
!m_pkey_is_clustered &&
|
||||
key_len >= m_curr_key_info[0]->key_length))
|
||||
if (!m_ordered_scan_ongoing)
|
||||
{
|
||||
/*
|
||||
We use unordered index scan either when read_range is used and flag
|
||||
is set to not use ordered or when an exact key is used and in this
|
||||
case all records will be sorted equal and thus the sort order of the
|
||||
resulting records doesn't matter.
|
||||
We use unordered index scan when read_range is used and flag
|
||||
is set to not use ordered.
|
||||
We also use an unordered index scan when the number of partitions to
|
||||
scan is only one.
|
||||
The unordered index scan will use the partition set created.
|
||||
Need to set unordered scan ongoing since we can come here even when
|
||||
it isn't set.
|
||||
*/
|
||||
DBUG_PRINT("info", ("doing unordered scan"));
|
||||
m_ordered_scan_ongoing= FALSE;
|
||||
error= handle_unordered_scan_next_partition(buf);
|
||||
}
|
||||
else
|
||||
@ -4874,6 +4880,8 @@ int ha_partition::index_next(uchar * buf)
|
||||
TODO(low priority):
|
||||
If we want partition to work with the HANDLER commands, we
|
||||
must be able to do index_last() -> index_prev() -> index_next()
|
||||
and if direction changes, we must step back those partitions in
|
||||
the record queue so we don't return a value from the wrong direction.
|
||||
*/
|
||||
DBUG_ASSERT(m_index_scan_type != partition_index_last);
|
||||
if (!m_ordered_scan_ongoing)
|
||||
@ -5127,10 +5135,18 @@ int ha_partition::partition_scan_set_up(uchar * buf, bool idx_read_flag)
|
||||
|
||||
int ha_partition::handle_unordered_next(uchar *buf, bool is_next_same)
|
||||
{
|
||||
handler *file= m_file[m_part_spec.start_part];
|
||||
handler *file;
|
||||
int error;
|
||||
DBUG_ENTER("ha_partition::handle_unordered_next");
|
||||
|
||||
if (m_part_spec.start_part >= m_tot_parts)
|
||||
{
|
||||
/* Should never happen! */
|
||||
DBUG_ASSERT(0);
|
||||
DBUG_RETURN(HA_ERR_END_OF_FILE);
|
||||
}
|
||||
file= m_file[m_part_spec.start_part];
|
||||
|
||||
/*
|
||||
We should consider if this should be split into three functions as
|
||||
partition_read_range is_next_same are always local constants
|
||||
@ -5191,6 +5207,7 @@ int ha_partition::handle_unordered_next(uchar *buf, bool is_next_same)
|
||||
int ha_partition::handle_unordered_scan_next_partition(uchar * buf)
|
||||
{
|
||||
uint i;
|
||||
int saved_error= HA_ERR_END_OF_FILE;
|
||||
DBUG_ENTER("ha_partition::handle_unordered_scan_next_partition");
|
||||
|
||||
for (i= m_part_spec.start_part; i <= m_part_spec.end_part; i++)
|
||||
@ -5241,26 +5258,33 @@ int ha_partition::handle_unordered_scan_next_partition(uchar * buf)
|
||||
}
|
||||
if ((error != HA_ERR_END_OF_FILE) && (error != HA_ERR_KEY_NOT_FOUND))
|
||||
DBUG_RETURN(error);
|
||||
DBUG_PRINT("info", ("HA_ERR_END_OF_FILE on partition %d", i));
|
||||
}
|
||||
m_part_spec.start_part= NO_CURRENT_PART_ID;
|
||||
DBUG_RETURN(HA_ERR_END_OF_FILE);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Common routine to start index scan with ordered results
|
||||
If HA_ERR_KEY_NOT_FOUND, we must return that error instead of
|
||||
HA_ERR_END_OF_FILE, to be able to continue search.
|
||||
*/
|
||||
if (saved_error != HA_ERR_KEY_NOT_FOUND)
|
||||
saved_error= error;
|
||||
DBUG_PRINT("info", ("END_OF_FILE/KEY_NOT_FOUND on partition %d", i));
|
||||
}
|
||||
if (saved_error == HA_ERR_END_OF_FILE)
|
||||
m_part_spec.start_part= NO_CURRENT_PART_ID;
|
||||
DBUG_RETURN(saved_error);
|
||||
}
|
||||
|
||||
SYNOPSIS
|
||||
handle_ordered_index_scan()
|
||||
out:buf Read row in MySQL Row Format
|
||||
|
||||
RETURN VALUE
|
||||
HA_ERR_END_OF_FILE End of scan
|
||||
0 Success
|
||||
other Error code
|
||||
/**
|
||||
Common routine to start index scan with ordered results.
|
||||
|
||||
DESCRIPTION
|
||||
@param[out] buf Read row in MySQL Row Format
|
||||
|
||||
@return Operation status
|
||||
@retval HA_ERR_END_OF_FILE End of scan
|
||||
@retval HA_ERR_KEY_NOT_FOUNE End of scan
|
||||
@retval 0 Success
|
||||
@retval other Error code
|
||||
|
||||
@details
|
||||
This part contains the logic to handle index scans that require ordered
|
||||
output. This includes all except those started by read_range_first with
|
||||
the flag ordered set to FALSE. Thus most direct index_read and all
|
||||
@ -5282,8 +5306,14 @@ int ha_partition::handle_ordered_index_scan(uchar *buf, bool reverse_order)
|
||||
uint j= queue_first_element(&m_queue);
|
||||
bool found= FALSE;
|
||||
uchar *part_rec_buf_ptr= m_ordered_rec_buffer;
|
||||
int saved_error= HA_ERR_END_OF_FILE;
|
||||
DBUG_ENTER("ha_partition::handle_ordered_index_scan");
|
||||
|
||||
if (m_key_not_found)
|
||||
{
|
||||
m_key_not_found= false;
|
||||
bitmap_clear_all(&m_key_not_found_partitions);
|
||||
}
|
||||
m_top_entry= NO_CURRENT_PART_ID;
|
||||
queue_remove_all(&m_queue);
|
||||
|
||||
@ -5345,6 +5375,13 @@ int ha_partition::handle_ordered_index_scan(uchar *buf, bool reverse_order)
|
||||
{
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
else if (error == HA_ERR_KEY_NOT_FOUND)
|
||||
{
|
||||
DBUG_PRINT("info", ("HA_ERR_KEY_NOT_FOUND from partition %u", i));
|
||||
bitmap_set_bit(&m_key_not_found_partitions, i);
|
||||
m_key_not_found= true;
|
||||
saved_error= error;
|
||||
}
|
||||
part_rec_buf_ptr+= m_rec_length + PARTITION_BYTES_IN_POS;
|
||||
}
|
||||
if (found)
|
||||
@ -5362,7 +5399,7 @@ int ha_partition::handle_ordered_index_scan(uchar *buf, bool reverse_order)
|
||||
DBUG_PRINT("info", ("Record returned from partition %d", m_top_entry));
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
DBUG_RETURN(HA_ERR_END_OF_FILE);
|
||||
DBUG_RETURN(saved_error);
|
||||
}
|
||||
|
||||
|
||||
@ -5390,6 +5427,59 @@ void ha_partition::return_top_record(uchar *buf)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Add index_next/prev from partitions without exact match.
|
||||
|
||||
If there where any partitions that returned HA_ERR_KEY_NOT_FOUND when
|
||||
ha_index_read_map was done, those partitions must be included in the
|
||||
following index_next/prev call.
|
||||
*/
|
||||
|
||||
int ha_partition::handle_ordered_index_scan_key_not_found()
|
||||
{
|
||||
int error;
|
||||
uint i;
|
||||
uchar *part_buf= m_ordered_rec_buffer;
|
||||
uchar *curr_rec_buf= NULL;
|
||||
DBUG_ENTER("ha_partition::handle_ordered_index_scan_key_not_found");
|
||||
DBUG_ASSERT(m_key_not_found);
|
||||
/*
|
||||
Loop over all used partitions to get the correct offset
|
||||
into m_ordered_rec_buffer.
|
||||
*/
|
||||
for (i= 0; i < m_tot_parts; i++)
|
||||
{
|
||||
if (!bitmap_is_set(&m_part_info->used_partitions, i))
|
||||
continue;
|
||||
|
||||
if (bitmap_is_set(&m_key_not_found_partitions, i))
|
||||
{
|
||||
/*
|
||||
This partition is used and did return HA_ERR_KEY_NOT_FOUND
|
||||
in index_read_map.
|
||||
*/
|
||||
curr_rec_buf= part_buf + PARTITION_BYTES_IN_POS;
|
||||
error= m_file[i]->index_next(curr_rec_buf);
|
||||
/* HA_ERR_KEY_NOT_FOUND is not allowed from index_next! */
|
||||
DBUG_ASSERT(error != HA_ERR_KEY_NOT_FOUND);
|
||||
if (!error)
|
||||
queue_insert(&m_queue, part_buf);
|
||||
else if (error != HA_ERR_END_OF_FILE && error != HA_ERR_KEY_NOT_FOUND)
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
part_buf+= m_rec_length + PARTITION_BYTES_IN_POS;
|
||||
}
|
||||
DBUG_ASSERT(curr_rec_buf);
|
||||
bitmap_clear_all(&m_key_not_found_partitions);
|
||||
m_key_not_found= false;
|
||||
|
||||
/* Update m_top_entry, which may have changed. */
|
||||
uchar *key_buffer= queue_top(&m_queue);
|
||||
m_top_entry= uint2korr(key_buffer);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Common routine to handle index_next with ordered results
|
||||
|
||||
@ -5409,9 +5499,45 @@ int ha_partition::handle_ordered_next(uchar *buf, bool is_next_same)
|
||||
int error;
|
||||
uint part_id= m_top_entry;
|
||||
uchar *rec_buf= queue_top(&m_queue) + PARTITION_BYTES_IN_POS;
|
||||
handler *file= m_file[part_id];
|
||||
handler *file;
|
||||
DBUG_ENTER("ha_partition::handle_ordered_next");
|
||||
|
||||
if (m_key_not_found)
|
||||
{
|
||||
if (is_next_same)
|
||||
{
|
||||
/* Only rows which match the key. */
|
||||
m_key_not_found= false;
|
||||
bitmap_clear_all(&m_key_not_found_partitions);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* There are partitions not included in the index record queue. */
|
||||
uint old_elements= m_queue.elements;
|
||||
if ((error= handle_ordered_index_scan_key_not_found()))
|
||||
DBUG_RETURN(error);
|
||||
/*
|
||||
If the queue top changed, i.e. one of the partitions that gave
|
||||
HA_ERR_KEY_NOT_FOUND in index_read_map found the next record,
|
||||
return it.
|
||||
Otherwise replace the old with a call to index_next (fall through).
|
||||
*/
|
||||
if (old_elements != m_queue.elements && part_id != m_top_entry)
|
||||
{
|
||||
return_top_record(buf);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (part_id >= m_tot_parts)
|
||||
{
|
||||
/* This should never happen! */
|
||||
DBUG_ASSERT(0);
|
||||
DBUG_RETURN(HA_ERR_END_OF_FILE);
|
||||
}
|
||||
|
||||
file= m_file[part_id];
|
||||
|
||||
if (m_index_scan_type == partition_read_range)
|
||||
{
|
||||
error= file->read_range_next();
|
||||
|
@ -182,6 +182,9 @@ private:
|
||||
static int compare_number_of_records(ha_partition *me,
|
||||
const uint32 *a,
|
||||
const uint32 *b);
|
||||
/** partitions that returned HA_ERR_KEY_NOT_FOUND. */
|
||||
MY_BITMAP m_key_not_found_partitions;
|
||||
bool m_key_not_found;
|
||||
public:
|
||||
handler *clone(const char *name, MEM_ROOT *mem_root);
|
||||
virtual void set_part_info(partition_info *part_info)
|
||||
@ -516,6 +519,7 @@ private:
|
||||
int handle_unordered_next(uchar * buf, bool next_same);
|
||||
int handle_unordered_scan_next_partition(uchar * buf);
|
||||
int handle_ordered_index_scan(uchar * buf, bool reverse_order);
|
||||
int handle_ordered_index_scan_key_not_found();
|
||||
int handle_ordered_next(uchar * buf, bool next_same);
|
||||
int handle_ordered_prev(uchar * buf);
|
||||
void return_top_record(uchar * buf);
|
||||
|
@ -2334,18 +2334,25 @@ int handler::read_first_row(uchar * buf, uint primary_key)
|
||||
if (stats.deleted < 10 || primary_key >= MAX_KEY ||
|
||||
!(index_flags(primary_key, 0, 0) & HA_READ_ORDER))
|
||||
{
|
||||
if ((!(error= ha_rnd_init(1))))
|
||||
if (!(error= ha_rnd_init(1)))
|
||||
{
|
||||
while ((error= ha_rnd_next(buf)) == HA_ERR_RECORD_DELETED) ;
|
||||
(void) ha_rnd_end();
|
||||
while ((error= ha_rnd_next(buf)) == HA_ERR_RECORD_DELETED)
|
||||
/* skip deleted row */;
|
||||
const int end_error= ha_rnd_end();
|
||||
if (!error)
|
||||
error= end_error;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Find the first row through the primary key */
|
||||
if (!(error= ha_index_init(primary_key, 0)))
|
||||
{
|
||||
error= ha_index_first(buf);
|
||||
(void) ha_index_end();
|
||||
const int end_error= ha_index_end();
|
||||
if (!error)
|
||||
error= end_error;
|
||||
}
|
||||
}
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
@ -2744,7 +2751,15 @@ void handler::get_auto_increment(ulonglong offset, ulonglong increment,
|
||||
table->mark_columns_used_by_index_no_reset(table->s->next_number_index,
|
||||
table->read_set);
|
||||
column_bitmaps_signal();
|
||||
ha_index_init(table->s->next_number_index, 1);
|
||||
|
||||
if (ha_index_init(table->s->next_number_index, 1))
|
||||
{
|
||||
/* This should never happen, assert in debug, and fail in release build */
|
||||
DBUG_ASSERT(0);
|
||||
*first_value= ULONGLONG_MAX;
|
||||
return;
|
||||
}
|
||||
|
||||
if (table->s->next_number_keypart == 0)
|
||||
{ // Autoincrement at key-start
|
||||
error=ha_index_last(table->record[1]);
|
||||
@ -2775,13 +2790,25 @@ void handler::get_auto_increment(ulonglong offset, ulonglong increment,
|
||||
}
|
||||
|
||||
if (error)
|
||||
{
|
||||
if (error == HA_ERR_END_OF_FILE || error == HA_ERR_KEY_NOT_FOUND)
|
||||
{
|
||||
/* No entry found, start with 1. */
|
||||
nr= 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
DBUG_ASSERT(0);
|
||||
nr= ULONGLONG_MAX;
|
||||
}
|
||||
}
|
||||
else
|
||||
nr= ((ulonglong) table->next_number_field->
|
||||
val_int_offset(table->s->rec_buff_length)+1);
|
||||
ha_index_end();
|
||||
(void) extra(HA_EXTRA_NO_KEYREAD);
|
||||
*first_value= nr;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1843,6 +1843,7 @@ public:
|
||||
int ha_open(TABLE *table, const char *name, int mode, uint test_if_locked);
|
||||
int ha_index_init(uint idx, bool sorted)
|
||||
{
|
||||
DBUG_EXECUTE_IF("ha_index_init_fail", return HA_ERR_TABLE_DEF_CHANGED;);
|
||||
int result;
|
||||
DBUG_ENTER("ha_index_init");
|
||||
DBUG_ASSERT(inited==NONE);
|
||||
@ -1867,6 +1868,7 @@ public:
|
||||
virtual int prepare_index_scan() { return 0; }
|
||||
int ha_rnd_init(bool scan) __attribute__ ((warn_unused_result))
|
||||
{
|
||||
DBUG_EXECUTE_IF("ha_rnd_init_fail", return HA_ERR_TABLE_DEF_CHANGED;);
|
||||
int result;
|
||||
DBUG_ENTER("ha_rnd_init");
|
||||
DBUG_ASSERT(inited==NONE || (inited==RND && scan));
|
||||
@ -2748,7 +2750,7 @@ private:
|
||||
*/
|
||||
|
||||
virtual int open(const char *name, int mode, uint test_if_locked)=0;
|
||||
/* Note: ha_index_read_idx_map() may buypass index_init() */
|
||||
/* Note: ha_index_read_idx_map() may bypass index_init() */
|
||||
virtual int index_init(uint idx, bool sorted) { return 0; }
|
||||
virtual int index_end() { return 0; }
|
||||
/**
|
||||
|
@ -367,6 +367,14 @@ bool ip_to_hostname(struct sockaddr_storage *ip_storage,
|
||||
err_code= vio_getnameinfo(ip, hostname_buffer, NI_MAXHOST, NULL, 0,
|
||||
NI_NAMEREQD);
|
||||
|
||||
/* BEGIN : DEBUG */
|
||||
DBUG_EXECUTE_IF("addr_fake_ipv4",
|
||||
{
|
||||
strcpy(hostname_buffer, "santa.claus.ipv4.example.com");
|
||||
err_code= 0;
|
||||
};);
|
||||
/* END : DEBUG */
|
||||
|
||||
if (err_code)
|
||||
{
|
||||
// NOTE: gai_strerror() returns a string ending by a dot.
|
||||
@ -439,6 +447,12 @@ bool ip_to_hostname(struct sockaddr_storage *ip_storage,
|
||||
DBUG_RETURN(err_status);
|
||||
}
|
||||
|
||||
/*
|
||||
To avoid crashing the server in DBUG_EXECUTE_IF,
|
||||
Define a variable which depicts state of addr_info_list.
|
||||
*/
|
||||
bool free_addr_info_list= false;
|
||||
|
||||
/* Get IP-addresses for the resolved host name (FCrDNS technique). */
|
||||
|
||||
struct addrinfo hints;
|
||||
@ -453,6 +467,42 @@ bool ip_to_hostname(struct sockaddr_storage *ip_storage,
|
||||
(const char *) hostname_buffer));
|
||||
|
||||
err_code= getaddrinfo(hostname_buffer, NULL, &hints, &addr_info_list);
|
||||
if (err_code == 0)
|
||||
free_addr_info_list= true;
|
||||
|
||||
/* BEGIN : DEBUG */
|
||||
DBUG_EXECUTE_IF("addr_fake_ipv4",
|
||||
{
|
||||
if (free_addr_info_list)
|
||||
freeaddrinfo(addr_info_list);
|
||||
|
||||
struct sockaddr_in *debug_addr;
|
||||
static struct sockaddr_in debug_sock_addr[2];
|
||||
static struct addrinfo debug_addr_info[2];
|
||||
/* Simulating ipv4 192.0.2.5 */
|
||||
debug_addr= & debug_sock_addr[0];
|
||||
debug_addr->sin_family= AF_INET;
|
||||
debug_addr->sin_addr.s_addr= inet_addr("192.0.2.5");
|
||||
|
||||
/* Simulating ipv4 192.0.2.4 */
|
||||
debug_addr= & debug_sock_addr[1];
|
||||
debug_addr->sin_family= AF_INET;
|
||||
debug_addr->sin_addr.s_addr= inet_addr("192.0.2.4");
|
||||
|
||||
debug_addr_info[0].ai_addr= (struct sockaddr*) & debug_sock_addr[0];
|
||||
debug_addr_info[0].ai_addrlen= sizeof (struct sockaddr_in);
|
||||
debug_addr_info[0].ai_next= & debug_addr_info[1];
|
||||
|
||||
debug_addr_info[1].ai_addr= (struct sockaddr*) & debug_sock_addr[1];
|
||||
debug_addr_info[1].ai_addrlen= sizeof (struct sockaddr_in);
|
||||
debug_addr_info[1].ai_next= NULL;
|
||||
|
||||
addr_info_list= & debug_addr_info[0];
|
||||
err_code= 0;
|
||||
free_addr_info_list= false;
|
||||
};);
|
||||
|
||||
/* END : DEBUG */
|
||||
|
||||
if (err_code == EAI_NONAME)
|
||||
{
|
||||
@ -505,6 +555,7 @@ bool ip_to_hostname(struct sockaddr_storage *ip_storage,
|
||||
{
|
||||
DBUG_PRINT("error", ("Out of memory."));
|
||||
|
||||
if (free_addr_info_list)
|
||||
freeaddrinfo(addr_info_list);
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
@ -539,6 +590,7 @@ bool ip_to_hostname(struct sockaddr_storage *ip_storage,
|
||||
|
||||
/* Free the result of getaddrinfo(). */
|
||||
|
||||
if (free_addr_info_list)
|
||||
freeaddrinfo(addr_info_list);
|
||||
|
||||
/* Add an entry for the IP to the cache. */
|
||||
|
@ -3258,11 +3258,14 @@ int subselect_uniquesubquery_engine::scan_table()
|
||||
TABLE *table= tab->table;
|
||||
DBUG_ENTER("subselect_uniquesubquery_engine::scan_table");
|
||||
|
||||
if (table->file->inited)
|
||||
table->file->ha_index_end();
|
||||
if ((table->file->inited &&
|
||||
(error= table->file->ha_index_end())) ||
|
||||
(error= table->file->ha_rnd_init(1)))
|
||||
{
|
||||
(void) report_error(table, error);
|
||||
DBUG_RETURN(true);
|
||||
}
|
||||
|
||||
if (table->file->ha_rnd_init_with_error(1))
|
||||
DBUG_RETURN(1);
|
||||
table->file->extra_opt(HA_EXTRA_CACHE,
|
||||
current_thd->variables.read_buff_size);
|
||||
table->null_row= 0;
|
||||
@ -3398,8 +3401,13 @@ int subselect_uniquesubquery_engine::exec()
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
if (!table->file->inited)
|
||||
table->file->ha_index_init(tab->ref.key, 0);
|
||||
if (!table->file->inited &&
|
||||
(error= table->file->ha_index_init(tab->ref.key, 0)))
|
||||
{
|
||||
(void) report_error(table, error);
|
||||
DBUG_RETURN(true);
|
||||
}
|
||||
|
||||
error= table->file->ha_index_read_map(table->record[0],
|
||||
tab->ref.key_buff,
|
||||
make_prev_keypart_map(tab->
|
||||
@ -3563,8 +3571,13 @@ int subselect_indexsubquery_engine::exec()
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
if (!table->file->inited)
|
||||
table->file->ha_index_init(tab->ref.key, 1);
|
||||
if (!table->file->inited &&
|
||||
(error= table->file->ha_index_init(tab->ref.key, 1)))
|
||||
{
|
||||
(void) report_error(table, error);
|
||||
DBUG_RETURN(true);
|
||||
}
|
||||
|
||||
error= table->file->ha_index_read_map(table->record[0],
|
||||
tab->ref.key_buff,
|
||||
make_prev_keypart_map(tab->
|
||||
|
@ -725,7 +725,10 @@ static int find_and_fetch_row(TABLE *table, uchar *key)
|
||||
int error;
|
||||
/* We have a key: search the table using the index */
|
||||
if (!table->file->inited && (error= table->file->ha_index_init(0, FALSE)))
|
||||
{
|
||||
table->file->print_error(error, MYF(0));
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
|
||||
/*
|
||||
Don't print debug messages when running valgrind since they can
|
||||
@ -858,7 +861,7 @@ static int find_and_fetch_row(TABLE *table, uchar *key)
|
||||
default:
|
||||
table->file->print_error(error, MYF(0));
|
||||
DBUG_PRINT("info", ("Record not found"));
|
||||
table->file->ha_rnd_end();
|
||||
(void) table->file->ha_rnd_end();
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
}
|
||||
@ -2428,7 +2431,7 @@ int Old_rows_log_event::find_row(const Relay_log_info *rli)
|
||||
continue;
|
||||
DBUG_PRINT("info",("no record matching the given row found"));
|
||||
table->file->print_error(error, MYF(0));
|
||||
table->file->ha_index_end();
|
||||
(void) table->file->ha_index_end();
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
}
|
||||
|
@ -117,6 +117,7 @@
|
||||
#include "records.h" // init_read_record, end_read_record
|
||||
#include <m_ctype.h>
|
||||
#include "sql_select.h"
|
||||
#include "filesort.h" // filesort_free_buffers
|
||||
|
||||
#ifndef EXTRA_DEBUG
|
||||
#define test_rb_tree(A,B) {}
|
||||
@ -1892,7 +1893,8 @@ int QUICK_INDEX_SORT_SELECT::init()
|
||||
int QUICK_INDEX_SORT_SELECT::reset()
|
||||
{
|
||||
DBUG_ENTER("QUICK_INDEX_SORT_SELECT::reset");
|
||||
DBUG_RETURN(read_keys_and_merge());
|
||||
const int retval= read_keys_and_merge();
|
||||
DBUG_RETURN(retval);
|
||||
}
|
||||
|
||||
bool
|
||||
@ -2138,8 +2140,9 @@ int QUICK_ROR_INTERSECT_SELECT::init_ror_merged_scan(bool reuse_handler)
|
||||
There is no use of this->file. Use it for the first of merged range
|
||||
selects.
|
||||
*/
|
||||
if (quick->init_ror_merged_scan(TRUE))
|
||||
DBUG_RETURN(1);
|
||||
int error= quick->init_ror_merged_scan(TRUE);
|
||||
if (error)
|
||||
DBUG_RETURN(error);
|
||||
quick->file->extra(HA_EXTRA_KEYREAD_PRESERVE_FIELDS);
|
||||
}
|
||||
while ((cur= quick_it++))
|
||||
@ -2322,8 +2325,8 @@ int QUICK_ROR_UNION_SELECT::reset()
|
||||
List_iterator_fast<QUICK_SELECT_I> it(quick_selects);
|
||||
while ((quick= it++))
|
||||
{
|
||||
if (quick->reset())
|
||||
DBUG_RETURN(1);
|
||||
if ((error= quick->reset()))
|
||||
DBUG_RETURN(error);
|
||||
if ((error= quick->get_next()))
|
||||
{
|
||||
if (error == HA_ERR_END_OF_FILE)
|
||||
@ -2334,10 +2337,10 @@ int QUICK_ROR_UNION_SELECT::reset()
|
||||
queue_insert(&queue, (uchar*)quick);
|
||||
}
|
||||
|
||||
if (head->file->ha_rnd_init_with_error(1))
|
||||
if ((error= head->file->ha_rnd_init(1)))
|
||||
{
|
||||
DBUG_PRINT("error", ("ROR index_merge rnd_init call failed"));
|
||||
DBUG_RETURN(1);
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
|
||||
DBUG_RETURN(0);
|
||||
@ -10604,7 +10607,10 @@ int read_keys_and_merge_scans(THD *thd,
|
||||
*unique_ptr= unique;
|
||||
}
|
||||
else
|
||||
{
|
||||
unique->reset();
|
||||
filesort_free_buffers(head, false);
|
||||
}
|
||||
|
||||
DBUG_ASSERT(file->ref_length == unique->get_size());
|
||||
DBUG_ASSERT(thd->variables.sortbuff_size == unique->get_max_in_memory_size());
|
||||
@ -10763,6 +10769,13 @@ int QUICK_INDEX_INTERSECT_SELECT::get_next()
|
||||
If a Clustered PK scan is present, it is used only to check if row
|
||||
satisfies its condition (and never used for row retrieval).
|
||||
|
||||
Locking: to ensure that exclusive locks are only set on records that
|
||||
are included in the final result we must release the lock
|
||||
on all rows we read but do not include in the final result. This
|
||||
must be done on each index that reads the record and the lock
|
||||
must be released using the same handler (the same quick object) as
|
||||
used when reading the record.
|
||||
|
||||
RETURN
|
||||
0 - Ok
|
||||
other - Error code if any error occurred.
|
||||
@ -10773,6 +10786,12 @@ int QUICK_ROR_INTERSECT_SELECT::get_next()
|
||||
List_iterator_fast<QUICK_SELECT_WITH_RECORD> quick_it(quick_selects);
|
||||
QUICK_SELECT_WITH_RECORD *qr;
|
||||
QUICK_RANGE_SELECT* quick;
|
||||
|
||||
/* quick that reads the given rowid first. This is needed in order
|
||||
to be able to unlock the row using the same handler object that locked
|
||||
it */
|
||||
QUICK_RANGE_SELECT* quick_with_last_rowid;
|
||||
|
||||
int error, cmp;
|
||||
uint last_rowid_count=0;
|
||||
DBUG_ENTER("QUICK_ROR_INTERSECT_SELECT::get_next");
|
||||
@ -10786,8 +10805,11 @@ int QUICK_ROR_INTERSECT_SELECT::get_next()
|
||||
if (cpk_quick)
|
||||
{
|
||||
while (!error && !cpk_quick->row_in_ranges())
|
||||
{
|
||||
quick->file->unlock_row(); /* row not in range; unlock */
|
||||
error= quick->get_next();
|
||||
}
|
||||
}
|
||||
if (error)
|
||||
DBUG_RETURN(error);
|
||||
|
||||
@ -10798,6 +10820,7 @@ int QUICK_ROR_INTERSECT_SELECT::get_next()
|
||||
quick->file->position(quick->record);
|
||||
memcpy(last_rowid, quick->file->ref, head->file->ref_length);
|
||||
last_rowid_count= 1;
|
||||
quick_with_last_rowid= quick;
|
||||
|
||||
while (last_rowid_count < quick_selects.elements)
|
||||
{
|
||||
@ -10811,9 +10834,17 @@ int QUICK_ROR_INTERSECT_SELECT::get_next()
|
||||
do
|
||||
{
|
||||
if ((error= quick->get_next()))
|
||||
{
|
||||
quick_with_last_rowid->file->unlock_row();
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
quick->file->position(quick->record);
|
||||
cmp= head->file->cmp_ref(quick->file->ref, last_rowid);
|
||||
if (cmp < 0)
|
||||
{
|
||||
/* This row is being skipped. Release lock on it. */
|
||||
quick->file->unlock_row();
|
||||
}
|
||||
} while (cmp < 0);
|
||||
|
||||
key_copy(qr->key_tuple, record, head->key_info + quick->index,
|
||||
@ -10827,13 +10858,19 @@ int QUICK_ROR_INTERSECT_SELECT::get_next()
|
||||
{
|
||||
while (!cpk_quick->row_in_ranges())
|
||||
{
|
||||
quick->file->unlock_row(); /* row not in range; unlock */
|
||||
if ((error= quick->get_next()))
|
||||
{
|
||||
quick_with_last_rowid->file->unlock_row();
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
}
|
||||
quick->file->position(quick->record);
|
||||
}
|
||||
memcpy(last_rowid, quick->file->ref, head->file->ref_length);
|
||||
quick_with_last_rowid->file->unlock_row();
|
||||
last_rowid_count= 1;
|
||||
quick_with_last_rowid= quick;
|
||||
|
||||
//save the fields here
|
||||
key_copy(qr->key_tuple, record, head->key_info + quick->index,
|
||||
@ -10956,9 +10993,15 @@ int QUICK_RANGE_SELECT::reset()
|
||||
{
|
||||
if (in_ror_merged_scan)
|
||||
head->column_bitmaps_set_no_signal(&column_bitmap, &column_bitmap);
|
||||
|
||||
DBUG_EXECUTE_IF("bug14365043_2",
|
||||
DBUG_SET("+d,ha_index_init_fail"););
|
||||
if ((error= file->ha_index_init(index,1)))
|
||||
{
|
||||
file->print_error(error, MYF(0));
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
}
|
||||
|
||||
/* Allocate buffer if we need one but haven't allocated it yet */
|
||||
if (mrr_buf_size && !mrr_buf_desc)
|
||||
@ -13161,7 +13204,10 @@ int QUICK_GROUP_MIN_MAX_SELECT::reset(void)
|
||||
head->enable_keyread(); /* We need only the key attributes */
|
||||
}
|
||||
if ((result= file->ha_index_init(index,1)))
|
||||
{
|
||||
head->file->print_error(result, MYF(0));
|
||||
DBUG_RETURN(result);
|
||||
}
|
||||
if (quick_prefix_select && quick_prefix_select->reset())
|
||||
DBUG_RETURN(1);
|
||||
result= file->ha_index_last(record);
|
||||
|
@ -68,6 +68,7 @@ static int rr_index_desc(READ_RECORD *info);
|
||||
void init_read_record_idx(READ_RECORD *info, THD *thd, TABLE *table,
|
||||
bool print_error, uint idx, bool reverse)
|
||||
{
|
||||
int error;
|
||||
empty_record(table);
|
||||
bzero((char*) info,sizeof(*info));
|
||||
info->thd= thd;
|
||||
@ -77,8 +78,13 @@ void init_read_record_idx(READ_RECORD *info, THD *thd, TABLE *table,
|
||||
info->unlock_row= rr_unlock_row;
|
||||
|
||||
table->status=0; /* And it's always found */
|
||||
if (!table->file->inited)
|
||||
table->file->ha_index_init(idx, 1);
|
||||
if (!table->file->inited &&
|
||||
(error= table->file->ha_index_init(idx, 1)))
|
||||
{
|
||||
if (print_error)
|
||||
table->file->print_error(error, MYF(0));
|
||||
}
|
||||
|
||||
/* read_record will be changed to rr_index in rr_index_first */
|
||||
info->read_record= reverse ? rr_index_last : rr_index_first;
|
||||
}
|
||||
|
16
sql/sp.cc
16
sql/sp.cc
@ -1452,7 +1452,6 @@ bool lock_db_routines(THD *thd, char *db)
|
||||
{
|
||||
TABLE *table;
|
||||
uint key_len;
|
||||
int nxtres= 0;
|
||||
Open_tables_backup open_tables_state_backup;
|
||||
MDL_request_list mdl_requests;
|
||||
Lock_db_routines_error_handler err_handler;
|
||||
@ -1480,7 +1479,13 @@ bool lock_db_routines(THD *thd, char *db)
|
||||
table->field[MYSQL_PROC_FIELD_DB]->store(db, strlen(db), system_charset_info);
|
||||
key_len= table->key_info->key_part[0].store_length;
|
||||
table->field[MYSQL_PROC_FIELD_DB]->get_key_image(keybuf, key_len, Field::itRAW);
|
||||
table->file->ha_index_init(0, 1);
|
||||
int nxtres= table->file->ha_index_init(0, 1);
|
||||
if (nxtres)
|
||||
{
|
||||
table->file->print_error(nxtres, MYF(0));
|
||||
close_system_tables(thd, &open_tables_state_backup);
|
||||
DBUG_RETURN(true);
|
||||
}
|
||||
|
||||
if (! table->file->ha_index_read_map(table->record[0], keybuf, (key_part_map)1,
|
||||
HA_READ_KEY_EXACT))
|
||||
@ -1543,7 +1548,11 @@ sp_drop_db_routines(THD *thd, char *db)
|
||||
table->field[MYSQL_PROC_FIELD_DB]->get_key_image(keybuf, key_len, Field::itRAW);
|
||||
|
||||
ret= SP_OK;
|
||||
table->file->ha_index_init(0, 1);
|
||||
if (table->file->ha_index_init(0, 1))
|
||||
{
|
||||
ret= SP_KEY_NOT_FOUND;
|
||||
goto err_idx_init;
|
||||
}
|
||||
if (!table->file->ha_index_read_map(table->record[0], keybuf, (key_part_map)1,
|
||||
HA_READ_KEY_EXACT))
|
||||
{
|
||||
@ -1569,6 +1578,7 @@ sp_drop_db_routines(THD *thd, char *db)
|
||||
}
|
||||
table->file->ha_index_end();
|
||||
|
||||
err_idx_init:
|
||||
close_thread_tables(thd);
|
||||
/*
|
||||
Make sure to only release the MDL lock on mysql.proc, not other
|
||||
|
@ -67,19 +67,15 @@ sp_rcontext::~sp_rcontext()
|
||||
bool sp_rcontext::init(THD *thd)
|
||||
{
|
||||
uint handler_count= m_root_parsing_ctx->max_handler_index();
|
||||
uint i;
|
||||
|
||||
in_sub_stmt= thd->in_sub_stmt;
|
||||
|
||||
if (init_var_table(thd) || init_var_items())
|
||||
return TRUE;
|
||||
|
||||
if (!(m_raised_conditions= new (thd->mem_root) MYSQL_ERROR[handler_count]))
|
||||
if (!(m_raised_conditions= new (thd->mem_root) Sql_condition_info[handler_count]))
|
||||
return TRUE;
|
||||
|
||||
for (i= 0; i<handler_count; i++)
|
||||
m_raised_conditions[i].init(thd->mem_root);
|
||||
|
||||
return
|
||||
!(m_handler=
|
||||
(sp_handler_t*)thd->alloc(handler_count * sizeof(sp_handler_t))) ||
|
||||
@ -446,13 +442,12 @@ sp_rcontext::exit_handler()
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
MYSQL_ERROR*
|
||||
sp_rcontext::raised_condition() const
|
||||
Sql_condition_info* sp_rcontext::raised_condition() const
|
||||
{
|
||||
if (m_ihsp > 0)
|
||||
{
|
||||
uint hindex= m_in_handler[m_ihsp - 1].index;
|
||||
MYSQL_ERROR *raised= & m_raised_conditions[hindex];
|
||||
Sql_condition_info *raised= & m_raised_conditions[hindex];
|
||||
return raised;
|
||||
}
|
||||
|
||||
|
@ -58,6 +58,46 @@ typedef struct
|
||||
uint index;
|
||||
} sp_active_handler_t;
|
||||
|
||||
|
||||
class Sql_condition_info : public Sql_alloc
|
||||
{
|
||||
public:
|
||||
/** SQL error code. */
|
||||
uint m_sql_errno;
|
||||
|
||||
/** Error level. */
|
||||
MYSQL_ERROR::enum_warning_level m_level;
|
||||
|
||||
/** SQLSTATE. */
|
||||
char m_sql_state[SQLSTATE_LENGTH + 1];
|
||||
|
||||
/** Text message. */
|
||||
char m_message[MYSQL_ERRMSG_SIZE];
|
||||
|
||||
void set(uint sql_errno, const char* sqlstate,
|
||||
MYSQL_ERROR::enum_warning_level level,
|
||||
const char* msg)
|
||||
{
|
||||
m_sql_errno= sql_errno;
|
||||
m_level= level;
|
||||
|
||||
memcpy(m_sql_state, sqlstate, SQLSTATE_LENGTH);
|
||||
m_sql_state[SQLSTATE_LENGTH]= '\0';
|
||||
|
||||
strncpy(m_message, msg, MYSQL_ERRMSG_SIZE);
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
m_sql_errno= 0;
|
||||
m_level= MYSQL_ERROR::WARN_LEVEL_ERROR;
|
||||
|
||||
m_sql_state[0]= '\0';
|
||||
m_message[0]= '\0';
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
This class is a runtime context of a Stored Routine. It is used in an
|
||||
execution and is intended to contain all dynamic objects (i.e. objects, which
|
||||
@ -146,8 +186,7 @@ class sp_rcontext : public Sql_alloc
|
||||
MYSQL_ERROR::enum_warning_level level,
|
||||
const char *msg);
|
||||
|
||||
MYSQL_ERROR *
|
||||
raised_condition() const;
|
||||
Sql_condition_info *raised_condition() const;
|
||||
|
||||
void
|
||||
push_hstack(uint h);
|
||||
@ -232,7 +271,7 @@ private:
|
||||
SQL conditions caught by each handler.
|
||||
This is an array indexed by handler index.
|
||||
*/
|
||||
MYSQL_ERROR *m_raised_conditions;
|
||||
Sql_condition_info *m_raised_conditions;
|
||||
|
||||
uint m_hcount; // Stack pointer for m_handler
|
||||
uint *m_hstack; // Return stack for continue handlers
|
||||
|
@ -50,6 +50,7 @@
|
||||
#include "sql_connect.h"
|
||||
#include "hostname.h"
|
||||
#include "sql_db.h"
|
||||
#include "sql_array.h"
|
||||
|
||||
bool mysql_user_table_is_in_short_password_format= false;
|
||||
|
||||
@ -570,8 +571,9 @@ enum enum_acl_lists
|
||||
COLUMN_PRIVILEGES_HASH,
|
||||
PROC_PRIVILEGES_HASH,
|
||||
FUNC_PRIVILEGES_HASH,
|
||||
ACL_PROXY_USERS
|
||||
PROXY_USERS_ACL
|
||||
};
|
||||
|
||||
/*
|
||||
Convert scrambled password to binary form, according to scramble type,
|
||||
Binary form is stored in user.salt.
|
||||
@ -2722,7 +2724,13 @@ replace_proxies_priv_table(THD *thd, TABLE *table, const LEX_USER *user,
|
||||
|
||||
get_grantor(thd, grantor);
|
||||
|
||||
table->file->ha_index_init(0, 1);
|
||||
if ((error= table->file->ha_index_init(0, 1)))
|
||||
{
|
||||
table->file->print_error(error, MYF(0));
|
||||
DBUG_PRINT("info", ("ha_index_init error"));
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
|
||||
if (table->file->ha_index_read_map(table->record[0], user_key,
|
||||
HA_WHOLE_KEY,
|
||||
HA_READ_KEY_EXACT))
|
||||
@ -2964,7 +2972,12 @@ GRANT_TABLE::GRANT_TABLE(TABLE *form, TABLE *col_privs)
|
||||
key_copy(key, col_privs->record[0], col_privs->key_info, key_prefix_len);
|
||||
col_privs->field[4]->store("",0, &my_charset_latin1);
|
||||
|
||||
col_privs->file->ha_index_init(0, 1);
|
||||
if (col_privs->file->ha_index_init(0, 1))
|
||||
{
|
||||
cols= 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (col_privs->file->ha_index_read_map(col_privs->record[0], (uchar*) key,
|
||||
(key_part_map)15,
|
||||
HA_READ_KEY_EXACT))
|
||||
@ -3104,7 +3117,7 @@ static int replace_column_table(GRANT_TABLE *g_t,
|
||||
const char *db, const char *table_name,
|
||||
ulong rights, bool revoke_grant)
|
||||
{
|
||||
int error=0,result=0;
|
||||
int result=0;
|
||||
uchar key[MAX_KEY_LENGTH];
|
||||
uint key_prefix_length;
|
||||
KEY_PART_INFO *key_part= table->key_info->key_part;
|
||||
@ -3131,7 +3144,13 @@ static int replace_column_table(GRANT_TABLE *g_t,
|
||||
|
||||
List_iterator <LEX_COLUMN> iter(columns);
|
||||
class LEX_COLUMN *column;
|
||||
table->file->ha_index_init(0, 1);
|
||||
int error= table->file->ha_index_init(0, 1);
|
||||
if (error)
|
||||
{
|
||||
table->file->print_error(error, MYF(0));
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
|
||||
while ((column= iter++))
|
||||
{
|
||||
ulong privileges= column->rights;
|
||||
@ -4257,7 +4276,10 @@ static my_bool grant_load_procs_priv(TABLE *p_table)
|
||||
(void) my_hash_init(&func_priv_hash, &my_charset_utf8_bin,
|
||||
0,0,0, (my_hash_get_key) get_grant_table,
|
||||
0,0);
|
||||
p_table->file->ha_index_init(0, 1);
|
||||
|
||||
if (p_table->file->ha_index_init(0, 1))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
p_table->use_all_columns();
|
||||
|
||||
if (!p_table->file->ha_index_first(p_table->record[0]))
|
||||
@ -4358,7 +4380,10 @@ static my_bool grant_load(THD *thd, TABLE_LIST *tables)
|
||||
|
||||
t_table = tables[0].table;
|
||||
c_table = tables[1].table;
|
||||
t_table->file->ha_index_init(0, 1);
|
||||
|
||||
if (t_table->file->ha_index_init(0, 1))
|
||||
goto end_index_init;
|
||||
|
||||
t_table->use_all_columns();
|
||||
c_table->use_all_columns();
|
||||
|
||||
@ -4403,9 +4428,10 @@ static my_bool grant_load(THD *thd, TABLE_LIST *tables)
|
||||
return_val=0; // Return ok
|
||||
|
||||
end_unlock:
|
||||
thd->variables.sql_mode= old_sql_mode;
|
||||
t_table->file->ha_index_end();
|
||||
my_pthread_setspecific_ptr(THR_MALLOC, save_mem_root_ptr);
|
||||
end_index_init:
|
||||
thd->variables.sql_mode= old_sql_mode;
|
||||
DBUG_RETURN(return_val);
|
||||
}
|
||||
|
||||
@ -6098,11 +6124,10 @@ static int handle_grant_table(TABLE_LIST *tables, uint table_no, bool drop,
|
||||
2 COLUMN_PRIVILEGES_HASH
|
||||
3 PROC_PRIVILEGES_HASH
|
||||
4 FUNC_PRIVILEGES_HASH
|
||||
5 ACL_PROXY_USERS
|
||||
5 PROXY_USERS_ACL
|
||||
|
||||
@retval > 0 At least one element matched.
|
||||
@retval 0 OK, but no element matched.
|
||||
@retval -1 Wrong arguments to function or Out of Memory
|
||||
*/
|
||||
|
||||
static int handle_grant_struct(enum enum_acl_lists struct_no, bool drop,
|
||||
@ -6147,10 +6172,11 @@ static int handle_grant_struct(enum enum_acl_lists struct_no, bool drop,
|
||||
grant_name_hash= &func_priv_hash;
|
||||
elements= grant_name_hash->records;
|
||||
break;
|
||||
case 5:
|
||||
case PROXY_USERS_ACL:
|
||||
elements= acl_proxy_users.elements;
|
||||
break;
|
||||
default:
|
||||
DBUG_ASSERT(0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -6185,7 +6211,7 @@ static int handle_grant_struct(enum enum_acl_lists struct_no, bool drop,
|
||||
host= grant_name->host.hostname;
|
||||
break;
|
||||
|
||||
case 5:
|
||||
case PROXY_USERS_ACL:
|
||||
acl_proxy_user= dynamic_element(&acl_proxy_users, idx, ACL_PROXY_USER*);
|
||||
user= acl_proxy_user->get_user();
|
||||
host= acl_proxy_user->get_host();
|
||||
@ -6225,7 +6251,7 @@ static int handle_grant_struct(enum enum_acl_lists struct_no, bool drop,
|
||||
my_hash_delete(grant_name_hash, (uchar*) grant_name);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
case PROXY_USERS_ACL:
|
||||
delete_dynamic_element(&acl_proxy_users, idx);
|
||||
break;
|
||||
|
||||
@ -6297,11 +6323,10 @@ static int handle_grant_struct(enum enum_acl_lists struct_no, bool drop,
|
||||
break;
|
||||
}
|
||||
|
||||
case 5:
|
||||
case PROXY_USERS_ACL:
|
||||
acl_proxy_user->set_user (&mem, user_to->user.str);
|
||||
acl_proxy_user->set_host (&mem, user_to->host.str);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -6448,7 +6473,7 @@ static int handle_grant_data(TABLE_LIST *tables, bool drop,
|
||||
/* Handle proxies_priv table. */
|
||||
if (tables[5].table)
|
||||
{
|
||||
if ((found= handle_grant_table(tables, ACL_PROXY_USERS, drop, user_from, user_to)) < 0)
|
||||
if ((found= handle_grant_table(tables, 5, drop, user_from, user_to)) < 0)
|
||||
{
|
||||
/* Handle of table failed, don't touch the in-memory array. */
|
||||
result= -1;
|
||||
@ -6456,7 +6481,7 @@ static int handle_grant_data(TABLE_LIST *tables, bool drop,
|
||||
else
|
||||
{
|
||||
/* Handle proxies_priv array. */
|
||||
if ((handle_grant_struct(ACL_PROXY_USERS, drop, user_from, user_to) && !result) ||
|
||||
if ((handle_grant_struct(PROXY_USERS_ACL, drop, user_from, user_to) && !result) ||
|
||||
found)
|
||||
result= 1; /* At least one record/element found. */
|
||||
}
|
||||
@ -7278,14 +7303,25 @@ acl_check_proxy_grant_access(THD *thd, const char *host, const char *user,
|
||||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
|
||||
/* one can grant proxy to himself to others */
|
||||
if (!strcmp(thd->security_ctx->user, user) &&
|
||||
/*
|
||||
one can grant proxy for self to others.
|
||||
Security context in THD contains two pairs of (user,host):
|
||||
1. (user,host) pair referring to inbound connection.
|
||||
2. (priv_user,priv_host) pair obtained from mysql.user table after doing
|
||||
authnetication of incoming connection.
|
||||
Privileges should be checked wrt (priv_user, priv_host) tuple, because
|
||||
(user,host) pair obtained from inbound connection may have different
|
||||
values than what is actually stored in mysql.user table and while granting
|
||||
or revoking proxy privilege, user is expected to provide entries mentioned
|
||||
in mysql.user table.
|
||||
*/
|
||||
if (!strcmp(thd->security_ctx->priv_user, user) &&
|
||||
!my_strcasecmp(system_charset_info, host,
|
||||
thd->security_ctx->host))
|
||||
thd->security_ctx->priv_host))
|
||||
{
|
||||
DBUG_PRINT("info", ("strcmp (%s, %s) my_casestrcmp (%s, %s) equal",
|
||||
thd->security_ctx->user, user,
|
||||
host, thd->security_ctx->host));
|
||||
thd->security_ctx->priv_user, user,
|
||||
host, thd->security_ctx->priv_host));
|
||||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
|
||||
|
@ -846,14 +846,14 @@ retry:
|
||||
case RFIRST:
|
||||
if (keyname)
|
||||
{
|
||||
table->file->ha_index_or_rnd_end();
|
||||
table->file->ha_index_init(keyno, 1);
|
||||
if (!(error= table->file->ha_index_or_rnd_end()) &&
|
||||
!(error= table->file->ha_index_init(keyno, 1)))
|
||||
error= table->file->ha_index_first(table->record[0]);
|
||||
}
|
||||
else
|
||||
{
|
||||
table->file->ha_index_or_rnd_end();
|
||||
if (!(error= table->file->ha_rnd_init(1)))
|
||||
if (!(error= table->file->ha_index_or_rnd_end()) &&
|
||||
!(error= table->file->ha_rnd_init(1)))
|
||||
error= table->file->ha_rnd_next(table->record[0]);
|
||||
}
|
||||
mode= RNEXT;
|
||||
@ -872,8 +872,8 @@ retry:
|
||||
/* else fall through */
|
||||
case RLAST:
|
||||
DBUG_ASSERT(keyname != 0);
|
||||
table->file->ha_index_or_rnd_end();
|
||||
table->file->ha_index_init(keyno, 1);
|
||||
if (!(error= table->file->ha_index_or_rnd_end()) &&
|
||||
!(error= table->file->ha_index_init(keyno, 1)))
|
||||
error= table->file->ha_index_last(table->record[0]);
|
||||
mode=RPREV;
|
||||
break;
|
||||
@ -889,10 +889,11 @@ retry:
|
||||
|
||||
if (!(key= (uchar*) thd->calloc(ALIGN_SIZE(handler->key_len))))
|
||||
goto err;
|
||||
table->file->ha_index_or_rnd_end();
|
||||
table->file->ha_index_init(keyno, 1);
|
||||
if ((error= table->file->ha_index_or_rnd_end()))
|
||||
break;
|
||||
key_copy(key, table->record[0], table->key_info + keyno,
|
||||
handler->key_len);
|
||||
if (!(error= table->file->ha_index_init(keyno, 1)))
|
||||
error= table->file->ha_index_read_map(table->record[0],
|
||||
key, handler->keypart_map,
|
||||
ha_rkey_mode);
|
||||
|
@ -303,8 +303,14 @@ int get_topics_for_keyword(THD *thd, TABLE *topics, TABLE *relations,
|
||||
rtopic_id= find_fields[help_relation_help_topic_id].field;
|
||||
rkey_id= find_fields[help_relation_help_keyword_id].field;
|
||||
|
||||
topics->file->ha_index_init(iindex_topic,1);
|
||||
relations->file->ha_index_init(iindex_relations,1);
|
||||
if (topics->file->ha_index_init(iindex_topic,1) ||
|
||||
relations->file->ha_index_init(iindex_relations,1))
|
||||
{
|
||||
if (topics->file->inited)
|
||||
topics->file->ha_index_end();
|
||||
my_message(ER_CORRUPT_HELP_DB, ER(ER_CORRUPT_HELP_DB), MYF(0));
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
|
||||
rkey_id->store((longlong) key_id, TRUE);
|
||||
rkey_id->get_key_image(buff, rkey_id->pack_length(), Field::itRAW);
|
||||
|
@ -6121,8 +6121,13 @@ TABLE_LIST *st_select_lex::add_table_to_list(THD *thd,
|
||||
ptr->next_name_resolution_table= NULL;
|
||||
/* Link table in global list (all used tables) */
|
||||
lex->add_to_query_tables(ptr);
|
||||
|
||||
// Pure table aliases do not need to be locked:
|
||||
if (!test(table_options & TL_OPTION_ALIAS))
|
||||
{
|
||||
ptr->mdl_request.init(MDL_key::TABLE, ptr->db, ptr->table_name, mdl_type,
|
||||
MDL_TRANSACTION);
|
||||
}
|
||||
DBUG_RETURN(ptr);
|
||||
}
|
||||
|
||||
|
@ -10610,7 +10610,6 @@ void JOIN::cleanup(bool full)
|
||||
filesort_free_buffers(first_tab->table, full);
|
||||
}
|
||||
}
|
||||
|
||||
if (full)
|
||||
{
|
||||
JOIN_TAB *sort_tab= first_linear_tab(this, WITHOUT_CONST_TABLES);
|
||||
@ -15721,11 +15720,11 @@ do_select(JOIN *join,List<Item> *fields,TABLE *table,Procedure *procedure)
|
||||
if (table->group && join->tmp_table_param.sum_func_count &&
|
||||
table->s->keys && !table->file->inited)
|
||||
{
|
||||
int tmp_error;
|
||||
if ((tmp_error= table->file->ha_index_init(0, 0)))
|
||||
rc= table->file->ha_index_init(0, 0);
|
||||
if (rc)
|
||||
{
|
||||
table->file->print_error(tmp_error, MYF(0)); /* purecov: inspected */
|
||||
DBUG_RETURN(-1); /* purecov: inspected */
|
||||
table->file->print_error(rc, MYF(0));
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -16751,7 +16750,12 @@ int join_read_key2(THD *thd, JOIN_TAB *tab, TABLE *table, TABLE_REF *table_ref)
|
||||
int error;
|
||||
if (!table->file->inited)
|
||||
{
|
||||
table->file->ha_index_init(table_ref->key, (tab ? tab->sorted : TRUE));
|
||||
error= table->file->ha_index_init(table_ref->key, tab ? tab->sorted : TRUE);
|
||||
if (error)
|
||||
{
|
||||
(void) report_error(table, error);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* TODO: Why don't we do "Late NULLs Filtering" here? */
|
||||
@ -16842,8 +16846,8 @@ join_read_always_key(JOIN_TAB *tab)
|
||||
{
|
||||
if ((error= table->file->ha_index_init(tab->ref.key, tab->sorted)))
|
||||
{
|
||||
table->file->print_error(error, MYF(0));/* purecov: inspected */
|
||||
return(1); /* purecov: inspected */
|
||||
(void) report_error(table, error);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
@ -16873,14 +16877,13 @@ join_read_last_key(JOIN_TAB *tab)
|
||||
int error;
|
||||
TABLE *table= tab->table;
|
||||
|
||||
if (!table->file->inited)
|
||||
if (!table->file->inited &&
|
||||
(error= table->file->ha_index_init(tab->ref.key, tab->sorted)))
|
||||
{
|
||||
if ((error= table->file->ha_index_init(tab->ref.key, tab->sorted)))
|
||||
{
|
||||
table->file->print_error(error, MYF(0));/* purecov: inspected */
|
||||
return(1); /* purecov: inspected */
|
||||
}
|
||||
(void) report_error(table, error);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (cp_buffer_from_ref(tab->join->thd, table, &tab->ref))
|
||||
return -1;
|
||||
if ((error= table->file->ha_index_read_map(table->record[0],
|
||||
@ -17091,9 +17094,10 @@ join_ft_read_first(JOIN_TAB *tab)
|
||||
if (!table->file->inited &&
|
||||
(error= table->file->ha_index_init(tab->ref.key, 1)))
|
||||
{
|
||||
table->file->print_error(error, MYF(0)); /* purecov: inspected */
|
||||
return(1); /* purecov: inspected */
|
||||
(void) report_error(table, error);
|
||||
return 1;
|
||||
}
|
||||
|
||||
table->file->ft_init();
|
||||
|
||||
if ((error= table->file->ha_ft_read(table->record[0])))
|
||||
@ -17498,9 +17502,10 @@ end_update(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)),
|
||||
/* Change method to update rows */
|
||||
if ((error= table->file->ha_index_init(0, 0)))
|
||||
{
|
||||
table->file->print_error(error, MYF(0));/* purecov: inspected */
|
||||
DBUG_RETURN(NESTED_LOOP_ERROR); /* purecov: inspected */
|
||||
table->file->print_error(error, MYF(0));
|
||||
DBUG_RETURN(NESTED_LOOP_ERROR);
|
||||
}
|
||||
|
||||
join->join_tab[join->top_join_tab_count-1].next_select=end_unique_update;
|
||||
}
|
||||
join->send_records++;
|
||||
|
@ -5668,7 +5668,13 @@ int fill_schema_proc(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||
{
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
proc_table->file->ha_index_init(0, 1);
|
||||
|
||||
if (proc_table->file->ha_index_init(0, 1))
|
||||
{
|
||||
res= 1;
|
||||
goto err;
|
||||
}
|
||||
|
||||
if ((res= proc_table->file->ha_index_first(proc_table->record[0])))
|
||||
{
|
||||
res= (res == HA_ERR_END_OF_FILE) ? 0 : 1;
|
||||
@ -5694,7 +5700,9 @@ int fill_schema_proc(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||
}
|
||||
|
||||
err:
|
||||
proc_table->file->ha_index_end();
|
||||
if (proc_table->file->inited)
|
||||
(void) proc_table->file->ha_index_end();
|
||||
|
||||
close_system_tables(thd, &open_tables_state_backup);
|
||||
DBUG_RETURN(res);
|
||||
}
|
||||
|
@ -479,7 +479,7 @@ bool Signal_statement::execute(THD *thd)
|
||||
|
||||
bool Resignal_statement::execute(THD *thd)
|
||||
{
|
||||
MYSQL_ERROR *signaled;
|
||||
Sql_condition_info *signaled;
|
||||
int result= TRUE;
|
||||
|
||||
DBUG_ENTER("Resignal_statement::execute");
|
||||
@ -492,15 +492,21 @@ bool Resignal_statement::execute(THD *thd)
|
||||
DBUG_RETURN(result);
|
||||
}
|
||||
|
||||
MYSQL_ERROR signaled_err(thd->mem_root);
|
||||
signaled_err.set(signaled->m_sql_errno,
|
||||
signaled->m_sql_state,
|
||||
signaled->m_level,
|
||||
signaled->m_message);
|
||||
|
||||
if (m_cond == NULL)
|
||||
{
|
||||
/* RESIGNAL without signal_value */
|
||||
result= raise_condition(thd, signaled);
|
||||
result= raise_condition(thd, &signaled_err);
|
||||
DBUG_RETURN(result);
|
||||
}
|
||||
|
||||
/* RESIGNAL with signal_value */
|
||||
result= raise_condition(thd, signaled);
|
||||
result= raise_condition(thd, &signaled_err);
|
||||
|
||||
DBUG_RETURN(result);
|
||||
}
|
||||
|
@ -24,7 +24,7 @@
|
||||
#include "sql_acl.h" // DROP_ACL
|
||||
#include "sql_parse.h" // check_one_table_access()
|
||||
#include "sql_truncate.h"
|
||||
#include "sql_show.h"
|
||||
#include "sql_show.h" //append_identifier()
|
||||
|
||||
|
||||
/**
|
||||
|
@ -2241,11 +2241,16 @@ err:
|
||||
}
|
||||
|
||||
err2:
|
||||
if (table->file->inited)
|
||||
(void) table->file->ha_rnd_end();
|
||||
if (tmp_table->file->inited)
|
||||
(void) tmp_table->file->ha_rnd_end();
|
||||
check_opt_it.rewind();
|
||||
while (TABLE *tbl= check_opt_it++)
|
||||
tbl->file->ha_rnd_end();
|
||||
{
|
||||
if (tbl->file->inited)
|
||||
(void) tbl->file->ha_rnd_end();
|
||||
}
|
||||
|
||||
if (updated != org_updated)
|
||||
{
|
||||
|
@ -11454,11 +11454,19 @@ show_param:
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
lex->sql_command= SQLCOM_SHOW_AUTHORS;
|
||||
push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT,
|
||||
ER(ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT),
|
||||
"SHOW AUTHORS");
|
||||
}
|
||||
| CONTRIBUTORS_SYM
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
lex->sql_command= SQLCOM_SHOW_CONTRIBUTORS;
|
||||
push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT,
|
||||
ER(ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT),
|
||||
"SHOW CONTRIBUTORS");
|
||||
}
|
||||
| PRIVILEGES
|
||||
{
|
||||
|
@ -1718,14 +1718,11 @@ my_tz_init(THD *org_thd, const char *default_tzname, my_bool bootstrap)
|
||||
}
|
||||
|
||||
table= tz_tables[0].table;
|
||||
/*
|
||||
It is OK to ignore ha_index_init()/ha_index_end() return values since
|
||||
mysql.time_zone* tables are MyISAM and these operations always succeed
|
||||
for MyISAM.
|
||||
*/
|
||||
(void)table->file->ha_index_init(0, 1);
|
||||
table->use_all_columns();
|
||||
|
||||
if (table->file->ha_index_init(0, 1))
|
||||
goto end_with_close;
|
||||
|
||||
table->use_all_columns();
|
||||
tz_leapcnt= 0;
|
||||
|
||||
res= table->file->ha_index_first(table->record[0]);
|
||||
@ -1913,12 +1910,8 @@ tz_load_from_open_tables(const String *tz_name, TABLE_LIST *tz_tables)
|
||||
tz_tables= tz_tables->next_local;
|
||||
table->field[0]->store(tz_name->ptr(), tz_name->length(),
|
||||
&my_charset_latin1);
|
||||
/*
|
||||
It is OK to ignore ha_index_init()/ha_index_end() return values since
|
||||
mysql.time_zone* tables are MyISAM and these operations always succeed
|
||||
for MyISAM.
|
||||
*/
|
||||
(void)table->file->ha_index_init(0, 1);
|
||||
if (table->file->ha_index_init(0, 1))
|
||||
goto end;
|
||||
|
||||
if (table->file->ha_index_read_map(table->record[0], table->field[0]->ptr,
|
||||
HA_WHOLE_KEY, HA_READ_KEY_EXACT))
|
||||
@ -1951,7 +1944,8 @@ tz_load_from_open_tables(const String *tz_name, TABLE_LIST *tz_tables)
|
||||
field->get_key_image(keybuff,
|
||||
min(field->key_length(), sizeof(keybuff)),
|
||||
Field::itRAW);
|
||||
(void)table->file->ha_index_init(0, 1);
|
||||
if (table->file->ha_index_init(0, 1))
|
||||
goto end;
|
||||
|
||||
if (table->file->ha_index_read_map(table->record[0], keybuff,
|
||||
HA_WHOLE_KEY, HA_READ_KEY_EXACT))
|
||||
@ -1983,7 +1977,8 @@ tz_load_from_open_tables(const String *tz_name, TABLE_LIST *tz_tables)
|
||||
field->get_key_image(keybuff,
|
||||
min(field->key_length(), sizeof(keybuff)),
|
||||
Field::itRAW);
|
||||
(void)table->file->ha_index_init(0, 1);
|
||||
if (table->file->ha_index_init(0, 1))
|
||||
goto end;
|
||||
|
||||
res= table->file->ha_index_read_map(table->record[0], keybuff,
|
||||
(key_part_map)1, HA_READ_KEY_EXACT);
|
||||
@ -2053,7 +2048,8 @@ tz_load_from_open_tables(const String *tz_name, TABLE_LIST *tz_tables)
|
||||
*/
|
||||
table= tz_tables->table;
|
||||
table->field[0]->store((longlong) tzid, TRUE);
|
||||
(void)table->file->ha_index_init(0, 1);
|
||||
if (table->file->ha_index_init(0, 1))
|
||||
goto end;
|
||||
|
||||
res= table->file->ha_index_read_map(table->record[0], keybuff,
|
||||
(key_part_map)1, HA_READ_KEY_EXACT);
|
||||
@ -2187,7 +2183,7 @@ tz_load_from_open_tables(const String *tz_name, TABLE_LIST *tz_tables)
|
||||
|
||||
end:
|
||||
|
||||
if (table)
|
||||
if (table && table->file->inited)
|
||||
(void) table->file->ha_index_end();
|
||||
|
||||
DBUG_RETURN(return_val);
|
||||
|
@ -77,7 +77,10 @@ int unique_intersect_write_to_ptrs(uchar* key, element_count count, Unique *uniq
|
||||
Unique::Unique(qsort_cmp2 comp_func, void * comp_func_fixed_arg,
|
||||
uint size_arg, ulonglong max_in_memory_size_arg,
|
||||
uint min_dupl_count_arg)
|
||||
:max_in_memory_size(max_in_memory_size_arg), size(size_arg), elements(0)
|
||||
:max_in_memory_size(max_in_memory_size_arg),
|
||||
record_pointers(NULL),
|
||||
size(size_arg),
|
||||
elements(0)
|
||||
{
|
||||
min_dupl_count= min_dupl_count_arg;
|
||||
full_size= size;
|
||||
@ -625,6 +628,7 @@ bool Unique::get(TABLE *table)
|
||||
if (my_b_tell(&file) == 0)
|
||||
{
|
||||
/* Whole tree is in memory; Don't use disk if you don't need to */
|
||||
DBUG_ASSERT(table->sort.record_pointers == NULL);
|
||||
if ((record_pointers=table->sort.record_pointers= (uchar*)
|
||||
my_malloc(size * tree.elements_in_tree, MYF(0))))
|
||||
{
|
||||
@ -650,6 +654,7 @@ bool Unique::get(TABLE *table)
|
||||
bool error=1;
|
||||
|
||||
/* Open cached file if it isn't open */
|
||||
DBUG_ASSERT(table->sort.io_cache == NULL);
|
||||
outfile=table->sort.io_cache=(IO_CACHE*) my_malloc(sizeof(IO_CACHE),
|
||||
MYF(MY_ZEROFILL));
|
||||
|
||||
|
@ -187,14 +187,16 @@ struct fil_space_struct {
|
||||
requests on the file */
|
||||
ibool stop_new_ops;
|
||||
/*!< we set this TRUE when we start
|
||||
deleting a single-table tablespace */
|
||||
ibool is_being_deleted;
|
||||
/*!< this is set to TRUE when we start
|
||||
deleting a single-table tablespace and its
|
||||
file; when this flag is set no further i/o
|
||||
or flush requests can be placed on this space,
|
||||
though there may be such requests still being
|
||||
processed on this space */
|
||||
deleting a single-table tablespace.
|
||||
When this is set following new ops
|
||||
are not allowed:
|
||||
* read IO request
|
||||
* ibuf merge
|
||||
* file flush
|
||||
Note that we can still possibly have
|
||||
new write operations because we don't
|
||||
check this flag when doing flush
|
||||
batches. */
|
||||
ulint purpose;/*!< FIL_TABLESPACE, FIL_LOG, or
|
||||
FIL_ARCH_LOG */
|
||||
UT_LIST_BASE_NODE_T(fil_node_t) chain;
|
||||
@ -1286,7 +1288,6 @@ try_again:
|
||||
|
||||
space->stop_ios = FALSE;
|
||||
space->stop_new_ops = FALSE;
|
||||
space->is_being_deleted = FALSE;
|
||||
space->purpose = purpose;
|
||||
space->size = 0;
|
||||
space->flags = flags;
|
||||
@ -2301,11 +2302,9 @@ try_again:
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
ut_a(space);
|
||||
ut_a(space->stop_new_ops);
|
||||
ut_a(space->n_pending_ops == 0);
|
||||
|
||||
space->is_being_deleted = TRUE;
|
||||
|
||||
ut_a(UT_LIST_GET_LEN(space->chain) == 1);
|
||||
node = UT_LIST_GET_FIRST(space->chain);
|
||||
|
||||
@ -2348,13 +2347,26 @@ try_again:
|
||||
rw_lock_x_lock(&space->latch);
|
||||
|
||||
#ifndef UNIV_HOTBACKUP
|
||||
/* Invalidate in the buffer pool all pages belonging to the
|
||||
tablespace. Since we have set space->is_being_deleted = TRUE, readahead
|
||||
or ibuf merge can no longer read more pages of this tablespace to the
|
||||
buffer pool. Thus we can clean the tablespace out of the buffer pool
|
||||
completely and permanently. The flag is_being_deleted also prevents
|
||||
fil_flush() from being applied to this tablespace. */
|
||||
/* IMPORTANT: Because we have set space::stop_new_ops there
|
||||
can't be any new ibuf merges, reads or flushes. We are here
|
||||
because node::n_pending was zero above. However, it is still
|
||||
possible to have pending read and write requests:
|
||||
|
||||
A read request can happen because the reader thread has
|
||||
gone through the ::stop_new_ops check in buf_page_init_for_read()
|
||||
before the flag was set and has not yet incremented ::n_pending
|
||||
when we checked it above.
|
||||
|
||||
A write request can be issued any time because we don't check
|
||||
the ::stop_new_ops flag when queueing a block for write.
|
||||
|
||||
We deal with pending write requests in the following function
|
||||
where we'd minimally evict all dirty pages belonging to this
|
||||
space from the flush_list. Not that if a block is IO-fixed
|
||||
we'll wait for IO to complete.
|
||||
|
||||
To deal with potential read requests by checking the
|
||||
::stop_new_ops flag in fil_io() */
|
||||
buf_LRU_flush_or_remove_pages(
|
||||
id, evict_all
|
||||
? BUF_REMOVE_ALL_NO_WRITE
|
||||
@ -2364,6 +2376,15 @@ try_again:
|
||||
|
||||
mutex_enter(&fil_system->mutex);
|
||||
|
||||
/* Double check the sanity of pending ops after reacquiring
|
||||
the fil_system::mutex. */
|
||||
if (fil_space_get_by_id(id)) {
|
||||
ut_a(space->n_pending_ops == 0);
|
||||
ut_a(UT_LIST_GET_LEN(space->chain) == 1);
|
||||
node = UT_LIST_GET_FIRST(space->chain);
|
||||
ut_a(node->n_pending == 0);
|
||||
}
|
||||
|
||||
success = fil_space_free(id, TRUE);
|
||||
|
||||
mutex_exit(&fil_system->mutex);
|
||||
@ -2421,7 +2442,7 @@ fil_tablespace_is_being_deleted(
|
||||
|
||||
ut_a(space != NULL);
|
||||
|
||||
is_being_deleted = space->is_being_deleted;
|
||||
is_being_deleted = space->stop_new_ops;
|
||||
|
||||
mutex_exit(&fil_system->mutex);
|
||||
|
||||
@ -3695,7 +3716,7 @@ fil_tablespace_deleted_or_being_deleted_in_mem(
|
||||
|
||||
space = fil_space_get_by_id(id);
|
||||
|
||||
if (space == NULL || space->is_being_deleted) {
|
||||
if (space == NULL || space->stop_new_ops) {
|
||||
mutex_exit(&fil_system->mutex);
|
||||
|
||||
return(TRUE);
|
||||
@ -4408,7 +4429,9 @@ fil_io(
|
||||
|
||||
space = fil_space_get_by_id(space_id);
|
||||
|
||||
if (!space) {
|
||||
/* If we are deleting a tablespace we don't allow any read
|
||||
operations on that. However, we do allow write operations. */
|
||||
if (!space || (type == OS_FILE_READ && space->stop_new_ops)) {
|
||||
mutex_exit(&fil_system->mutex);
|
||||
|
||||
ut_print_timestamp(stderr);
|
||||
@ -4624,7 +4647,7 @@ fil_flush(
|
||||
|
||||
space = fil_space_get_by_id(space_id);
|
||||
|
||||
if (!space || space->is_being_deleted) {
|
||||
if (!space || space->stop_new_ops) {
|
||||
mutex_exit(&fil_system->mutex);
|
||||
|
||||
return;
|
||||
@ -4755,7 +4778,7 @@ fil_flush_file_spaces(
|
||||
space;
|
||||
space = UT_LIST_GET_NEXT(unflushed_spaces, space)) {
|
||||
|
||||
if (space->purpose == purpose && !space->is_being_deleted) {
|
||||
if (space->purpose == purpose && !space->stop_new_ops) {
|
||||
|
||||
space_ids[n_space_ids++] = space->id;
|
||||
}
|
||||
|
@ -1009,11 +1009,23 @@ convert_error_code_to_mysql(
|
||||
case DB_TABLE_NOT_FOUND:
|
||||
return(HA_ERR_NO_SUCH_TABLE);
|
||||
|
||||
case DB_TOO_BIG_RECORD:
|
||||
my_error(ER_TOO_BIG_ROWSIZE, MYF(0),
|
||||
page_get_free_space_of_empty(flags
|
||||
& DICT_TF_COMPACT) / 2);
|
||||
case DB_TOO_BIG_RECORD: {
|
||||
/* If prefix is true then a 768-byte prefix is stored
|
||||
locally for BLOB fields. Refer to dict_table_get_format() */
|
||||
bool prefix = ((flags & DICT_TF_FORMAT_MASK)
|
||||
>> DICT_TF_FORMAT_SHIFT) < UNIV_FORMAT_B;
|
||||
my_printf_error(ER_TOO_BIG_ROWSIZE,
|
||||
"Row size too large (> %lu). Changing some columns "
|
||||
"to TEXT or BLOB %smay help. In current row "
|
||||
"format, BLOB prefix of %d bytes is stored inline.",
|
||||
MYF(0),
|
||||
page_get_free_space_of_empty(flags &
|
||||
DICT_TF_COMPACT) / 2,
|
||||
prefix ? "or using ROW_FORMAT=DYNAMIC "
|
||||
"or ROW_FORMAT=COMPRESSED ": "",
|
||||
prefix ? DICT_MAX_FIXED_COL_LEN : 0);
|
||||
return(HA_ERR_TO_BIG_ROW);
|
||||
}
|
||||
|
||||
case DB_TOO_BIG_INDEX_COL:
|
||||
my_error(ER_INDEX_COLUMN_TOO_LONG, MYF(0),
|
||||
@ -1483,19 +1495,19 @@ innobase_next_autoinc(
|
||||
*/
|
||||
max_value= (~(ulonglong) 0);
|
||||
|
||||
/* Current value should never be greater than the maximum. */
|
||||
ut_a(current <= max_value);
|
||||
|
||||
/* According to MySQL documentation, if the offset is greater than
|
||||
the step then the offset is ignored. */
|
||||
if (offset > block) {
|
||||
offset = 0;
|
||||
}
|
||||
|
||||
/* Check for overflow. */
|
||||
/* Check for overflow. Current can be > max_value if the value is
|
||||
in reality a negative value.The visual studio compilers converts
|
||||
large double values automatically into unsigned long long datatype
|
||||
maximum value */
|
||||
if (block >= max_value
|
||||
|| offset > max_value
|
||||
|| current == max_value
|
||||
|| current >= max_value
|
||||
|| max_value - offset <= offset) {
|
||||
|
||||
next_value = max_value;
|
||||
|
@ -80,12 +80,13 @@ class ha_innobase: public handler
|
||||
|
||||
uchar* upd_buf; /*!< buffer used in updates */
|
||||
ulint upd_buf_size; /*!< the size of upd_buf in bytes */
|
||||
uchar srch_key_val1[REC_VERSION_56_MAX_INDEX_COL_LEN + 2];
|
||||
uchar srch_key_val2[REC_VERSION_56_MAX_INDEX_COL_LEN + 2];
|
||||
uchar srch_key_val1[MAX_KEY_LENGTH + MAX_REF_PARTS*2];
|
||||
uchar srch_key_val2[MAX_KEY_LENGTH + MAX_REF_PARTS*2];
|
||||
/*!< buffers used in converting
|
||||
search key values from MySQL format
|
||||
to InnoDB format. "+ 2" for the two
|
||||
bytes where the length is stored */
|
||||
to InnoDB format. For each column
|
||||
2 bytes are used to store length,
|
||||
hence MAX_REF_PARTS*2. */
|
||||
Table_flags int_table_flags;
|
||||
uint primary_key;
|
||||
ulong start_of_scan; /*!< this is set to 1 when we are
|
||||
|
@ -2868,6 +2868,14 @@ ibuf_get_volume_buffered_count_func(
|
||||
ut_a(len == 1);
|
||||
ut_ad(trx_sys_multiple_tablespace_format);
|
||||
|
||||
if (rec_get_deleted_flag(rec, 0)) {
|
||||
/* This record has been merged already,
|
||||
but apparently the system crashed before
|
||||
the change was discarded from the buffer.
|
||||
Pretend that the record does not exist. */
|
||||
return(0);
|
||||
}
|
||||
|
||||
types = rec_get_nth_field_old(rec, IBUF_REC_FIELD_METADATA, &len);
|
||||
|
||||
switch (UNIV_EXPECT(len % DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE,
|
||||
@ -4176,11 +4184,11 @@ ibuf_delete(
|
||||
page, 1);
|
||||
}
|
||||
#ifdef UNIV_ZIP_DEBUG
|
||||
ut_a(!page_zip || page_zip_validate(page_zip, page));
|
||||
ut_a(!page_zip || page_zip_validate(page_zip, page, index));
|
||||
#endif /* UNIV_ZIP_DEBUG */
|
||||
page_cur_delete_rec(&page_cur, index, offsets, mtr);
|
||||
#ifdef UNIV_ZIP_DEBUG
|
||||
ut_a(!page_zip || page_zip_validate(page_zip, page));
|
||||
ut_a(!page_zip || page_zip_validate(page_zip, page, index));
|
||||
#endif /* UNIV_ZIP_DEBUG */
|
||||
|
||||
if (page_zip) {
|
||||
@ -4295,7 +4303,7 @@ ibuf_delete_rec(
|
||||
an assertion failure after crash recovery. */
|
||||
btr_cur_set_deleted_flag_for_ibuf(
|
||||
btr_pcur_get_rec(pcur), NULL, TRUE, mtr);
|
||||
mtr_commit(mtr);
|
||||
ibuf_mtr_commit(mtr);
|
||||
log_make_checkpoint_at(IB_ULONGLONG_MAX, TRUE);
|
||||
DBUG_SUICIDE();
|
||||
}
|
||||
|
@ -28,6 +28,7 @@ Created 12/27/1996 Heikki Tuuri
|
||||
# include "trx0trx.h"
|
||||
# include "trx0undo.h"
|
||||
# include "row0row.h"
|
||||
# include "lock0lock.h"
|
||||
#endif /* !UNIV_HOTBACKUP */
|
||||
#include "page0zip.h"
|
||||
|
||||
@ -171,6 +172,8 @@ row_upd_rec_sys_fields(
|
||||
#if DATA_TRX_ID + 1 != DATA_ROLL_PTR
|
||||
# error "DATA_TRX_ID + 1 != DATA_ROLL_PTR"
|
||||
#endif
|
||||
ut_ad(lock_check_trx_id_sanity(trx_read_trx_id(rec + offset),
|
||||
rec, index, offsets, FALSE));
|
||||
trx_write_trx_id(rec + offset, trx->id);
|
||||
trx_write_roll_ptr(rec + offset + DATA_TRX_ID_LEN, roll_ptr);
|
||||
}
|
||||
|
@ -295,6 +295,24 @@ management to ensure correct alignment for doubles etc. */
|
||||
========================
|
||||
*/
|
||||
|
||||
/** There are currently two InnoDB file formats which are used to group
|
||||
features with similar restrictions and dependencies. Using an enum allows
|
||||
switch statements to give a compiler warning when a new one is introduced. */
|
||||
enum innodb_file_formats_enum {
|
||||
/** Antelope File Format: InnoDB/MySQL up to 5.1.
|
||||
This format includes REDUNDANT and COMPACT row formats */
|
||||
UNIV_FORMAT_A = 0,
|
||||
|
||||
/** Barracuda File Format: Introduced in InnoDB plugin for 5.1:
|
||||
This format includes COMPRESSED and DYNAMIC row formats. It
|
||||
includes the ability to create secondary indexes from data that
|
||||
is not on the clustered index page and the ability to store more
|
||||
data off the clustered index page. */
|
||||
UNIV_FORMAT_B = 1
|
||||
};
|
||||
|
||||
typedef enum innodb_file_formats_enum innodb_file_formats_t;
|
||||
|
||||
/* The 2-logarithm of UNIV_PAGE_SIZE: */
|
||||
#define UNIV_PAGE_SIZE_SHIFT 14
|
||||
/* The universal page size of the database */
|
||||
|
@ -1404,7 +1404,6 @@ os_file_create_func(
|
||||
SetLastError(ERROR_DISK_FULL);
|
||||
return((os_file_t) -1);
|
||||
);
|
||||
|
||||
try_again:
|
||||
ut_a(name);
|
||||
|
||||
@ -1526,7 +1525,6 @@ try_again:
|
||||
errno = ENOSPC;
|
||||
return((os_file_t) -1);
|
||||
);
|
||||
|
||||
try_again:
|
||||
ut_a(name);
|
||||
|
||||
|
@ -2487,6 +2487,9 @@ row_sel_convert_mysql_key_to_innobase(
|
||||
dfield++;
|
||||
}
|
||||
|
||||
DBUG_EXECUTE_IF("innodb_srch_key_buffer_full",
|
||||
ut_a(buf == (original_buf + buf_len)););
|
||||
|
||||
ut_a(buf <= original_buf + buf_len);
|
||||
|
||||
/* We set the length of tuple to n_fields: we assume that the memory
|
||||
|
@ -237,7 +237,8 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags)
|
||||
}
|
||||
|
||||
/* sanity check */
|
||||
if (share->base.keystart > 65535 || share->base.rec_reflength > 8)
|
||||
if (share->base.keystart > 65535 ||
|
||||
share->base.rec_reflength > 8 || share->base.key_reflength > 7)
|
||||
{
|
||||
my_errno=HA_ERR_CRASHED;
|
||||
goto err;
|
||||
|
@ -294,9 +294,9 @@ static struct my_option my_long_options[] =
|
||||
{ "sort_buffer_size", OPT_SORT_BUFFER_SIZE,
|
||||
"Deprecated. myisam_sort_buffer_size alias is being used",
|
||||
&check_param.sort_buffer_length,
|
||||
&check_param.sort_buffer_length, 0, GET_ULONG, REQUIRED_ARG,
|
||||
&check_param.sort_buffer_length, 0, GET_ULL, REQUIRED_ARG,
|
||||
(long) SORT_BUFFER_INIT, (long) (MIN_SORT_BUFFER + MALLOC_OVERHEAD),
|
||||
ULONG_MAX, (long) MALLOC_OVERHEAD, (long) 1L, 0},
|
||||
SIZE_T_MAX, (long) MALLOC_OVERHEAD, (long) 1L, 0},
|
||||
{ "myisam_sort_buffer_size", OPT_SORT_BUFFER_SIZE,
|
||||
"Alias of sort_buffer_size parameter",
|
||||
&check_param.sort_buffer_length,
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2000, 2012, 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
|
||||
@ -286,8 +286,9 @@ documentation and the manual for more information.
|
||||
Summary: MySQL: a very fast and reliable SQL database server
|
||||
Group: Applications/Databases
|
||||
Requires: %{distro_requires}
|
||||
Provides: msqlormysql mysql MySQL mysql-server MySQL-server
|
||||
Obsoletes: mysql MySQL mysql-server MySQL-server
|
||||
Provides: msqlormysql MySQL MySQL-server
|
||||
Conflicts: mysql mysql-server mysql-advanced mysql-server-advanced
|
||||
Obsoletes: MySQL MySQL-server
|
||||
Obsoletes: MySQL-server-classic MySQL-server-community MySQL-server-enterprise
|
||||
Obsoletes: MySQL-server-advanced MySQL-server-advanced-gpl MySQL-server-enterprise-gpl
|
||||
|
||||
@ -319,8 +320,9 @@ package "MySQL-client%{product_suffix}" as well!
|
||||
%package -n MySQL-client%{product_suffix}
|
||||
Summary: MySQL - Client
|
||||
Group: Applications/Databases
|
||||
Provides: mysql-client MySQL-client
|
||||
Obsoletes: mysql-client MySQL-client
|
||||
Provides: MySQL-client
|
||||
Conflicts: mysql mysql-advanced
|
||||
Obsoletes: MySQL-client
|
||||
Obsoletes: MySQL-client-classic MySQL-client-community MySQL-client-enterprise
|
||||
Obsoletes: MySQL-client-advanced MySQL-client-advanced-gpl MySQL-client-enterprise-gpl
|
||||
|
||||
@ -334,8 +336,9 @@ For a description of MySQL see the base MySQL RPM or http://www.mysql.com/
|
||||
Summary: MySQL - Test suite
|
||||
Group: Applications/Databases
|
||||
Requires: MySQL-client perl
|
||||
Provides: mysql-test MySQL-test
|
||||
Obsoletes: mysql-test MySQL-test
|
||||
Provides: MySQL-test
|
||||
Conflicts: mysql-test mysql-test-advanced
|
||||
Obsoletes: MySQL-test
|
||||
Obsoletes: mysql-bench MySQL-bench
|
||||
Obsoletes: MySQL-test-classic MySQL-test-community MySQL-test-enterprise
|
||||
Obsoletes: MySQL-test-advanced MySQL-test-advanced-gpl MySQL-test-enterprise-gpl
|
||||
@ -350,8 +353,9 @@ For a description of MySQL see the base MySQL RPM or http://www.mysql.com/
|
||||
%package -n MySQL-devel%{product_suffix}
|
||||
Summary: MySQL - Development header files and libraries
|
||||
Group: Applications/Databases
|
||||
Provides: mysql-devel MySQL-devel
|
||||
Obsoletes: mysql-devel MySQL-devel
|
||||
Provides: MySQL-devel
|
||||
Conflicts: mysql-devel mysql-embedded-devel mysql-devel-advanced mysql-embedded-devel-advanced
|
||||
Obsoletes: MySQL-devel
|
||||
Obsoletes: MySQL-devel-classic MySQL-devel-community MySQL-devel-enterprise
|
||||
Obsoletes: MySQL-devel-advanced MySQL-devel-advanced-gpl MySQL-devel-enterprise-gpl
|
||||
|
||||
@ -365,8 +369,9 @@ For a description of MySQL see the base MySQL RPM or http://www.mysql.com/
|
||||
%package -n MySQL-shared%{product_suffix}
|
||||
Summary: MySQL - Shared libraries
|
||||
Group: Applications/Databases
|
||||
Provides: mysql-shared MySQL-shared
|
||||
Obsoletes: mysql-shared MySQL-shared-standard MySQL-shared-pro
|
||||
Provides: MySQL-shared
|
||||
Conflicts: mysql-libs mysql-libs-advanced
|
||||
Obsoletes: MySQL-shared-standard MySQL-shared-pro
|
||||
Obsoletes: MySQL-shared-pro-cert MySQL-shared-pro-gpl
|
||||
Obsoletes: MySQL-shared-pro-gpl-cert MySQL-shared
|
||||
Obsoletes: MySQL-shared-classic MySQL-shared-community MySQL-shared-enterprise
|
||||
@ -381,8 +386,9 @@ and applications need to dynamically load and use MySQL.
|
||||
Summary: MySQL - Embedded library
|
||||
Group: Applications/Databases
|
||||
Requires: MySQL-devel
|
||||
Provides: mysql-embedded MySQL-embedded
|
||||
Obsoletes: mysql-embedded MySQL-embedded
|
||||
Provides: MySQL-embedded
|
||||
Conflicts: mysql-embedded mysql-embedded-advanced
|
||||
Obsoletes: MySQL-embedded
|
||||
Obsoletes: MySQL-embedded-pro
|
||||
Obsoletes: MySQL-embedded-classic MySQL-embedded-community MySQL-embedded-enterprise
|
||||
Obsoletes: MySQL-embedded-advanced MySQL-embedded-advanced-gpl MySQL-embedded-enterprise-gpl
|
||||
@ -601,8 +607,13 @@ fi
|
||||
# Check if we can safely upgrade. An upgrade is only safe if it's from one
|
||||
# of our RPMs in the same version family.
|
||||
|
||||
# Handle both ways of spelling the capability.
|
||||
installed=`rpm -q --whatprovides mysql-server 2> /dev/null`
|
||||
if [ $? -ne 0 -o -z "$installed" ]; then
|
||||
installed=`rpm -q --whatprovides MySQL-server 2> /dev/null`
|
||||
fi
|
||||
if [ $? -eq 0 -a -n "$installed" ]; then
|
||||
installed=`echo $installed | sed 's/\([^ ]*\) .*/\1/'` # Tests have shown duplicated package names
|
||||
vendor=`rpm -q --queryformat='%{VENDOR}' "$installed" 2>&1`
|
||||
version=`rpm -q --queryformat='%{VERSION}' "$installed" 2>&1`
|
||||
myoldvendor='%{mysql_old_vendor}'
|
||||
@ -1174,6 +1185,10 @@ echo "=====" >> $STATUS_HISTORY
|
||||
--define "runselftest 0"
|
||||
Failures of the test suite will NOT make the RPM build fail!
|
||||
|
||||
* Mon Jun 11 2012 Joerg Bruehe <joerg.bruehe@oracle.com>
|
||||
|
||||
- Make sure newly added "SPECIFIC-ULN/" directory does not disturb packaging.
|
||||
|
||||
* Wed Sep 28 2011 Joerg Bruehe <joerg.bruehe@oracle.com>
|
||||
|
||||
- Fix duplicate mentioning of "mysql_plugin" and its manual page,
|
||||
|
Loading…
x
Reference in New Issue
Block a user