summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Golubchik <sergii@pisem.net>2014-08-02 21:26:16 +0200
committerSergei Golubchik <sergii@pisem.net>2014-08-02 21:26:16 +0200
commit1c6ad62a269a3a03d8a343e1412876e04e9e9c37 (patch)
tree1e837eb728452ebaf749b5f9eedc018404798ed6
parent14200dfa43756a0f9cb50c0b5d47d99b4fb1b6fa (diff)
parente9b2f5bf15281583b38a56b12f9ae2420c46a6d1 (diff)
downloadmariadb-git-1c6ad62a269a3a03d8a343e1412876e04e9e9c37.tar.gz
mysql-5.5.39 merge
~40% bugfixed(*) applied ~40$ bugfixed reverted (incorrect or we're not buggy) ~20% bugfixed applied, despite us being not buggy (*) only changes in the server code, e.g. not cmakefiles
-rw-r--r--CMakeLists.txt9
-rw-r--r--client/mysqladmin.cc63
-rw-r--r--client/mysqldump.c39
-rw-r--r--cmake/dtrace.cmake43
-rw-r--r--cmake/install_macros.cmake4
-rw-r--r--cmake/os/Windows.cmake29
-rw-r--r--extra/yassl/CMakeLists.txt3
-rw-r--r--extra/yassl/src/ssl.cpp7
-rw-r--r--extra/yassl/taocrypt/CMakeLists.txt3
-rw-r--r--extra/yassl/taocrypt/include/asn.hpp8
-rw-r--r--include/thread_pool_priv.h4
-rw-r--r--libmysql/CMakeLists.txt1
-rw-r--r--[-rwxr-xr-x]mysql-test/collections/default.weekly0
-rw-r--r--mysql-test/include/install_semisync.inc4
-rw-r--r--mysql-test/include/stop_dump_threads.inc32
-rw-r--r--mysql-test/include/uninstall_semisync.inc5
-rw-r--r--mysql-test/r/func_str.result3
-rw-r--r--mysql-test/r/group_min_max.result56
-rw-r--r--mysql-test/r/group_min_max_innodb.result168
-rw-r--r--mysql-test/r/mysqld--help.result4
-rw-r--r--mysql-test/r/partition_pruning.result114
-rw-r--r--mysql-test/r/union.result34
-rw-r--r--mysql-test/r/variables.result4
-rw-r--r--mysql-test/r/view.result39
-rwxr-xr-x[-rw-r--r--]mysql-test/std_data/checkDBI_DBD-mysql.pl0
-rw-r--r--mysql-test/suite/archive/partition_archive.result26
-rw-r--r--mysql-test/suite/archive/partition_archive.test18
-rw-r--r--mysql-test/suite/binlog/t/binlog_killed.test4
-rw-r--r--mysql-test/suite/innodb/r/blob_unique2pk.result15
-rw-r--r--mysql-test/suite/innodb/r/innodb-fk.result35
-rw-r--r--mysql-test/suite/innodb/t/blob_unique2pk.test20
-rw-r--r--mysql-test/suite/innodb/t/innodb-fk.test86
-rw-r--r--mysql-test/suite/innodb/t/innodb_bug60196-master.opt2
-rw-r--r--mysql-test/suite/rpl/disabled.def1
-rw-r--r--mysql-test/suite/rpl/r/rpl_semi_sync.result4
-rw-r--r--mysql-test/suite/rpl/r/rpl_semi_sync_uninstall_plugin.result36
-rw-r--r--mysql-test/suite/rpl/r/rpl_stop_slave.result7
-rw-r--r--mysql-test/suite/rpl/t/rpl_semi_sync.test12
-rw-r--r--mysql-test/suite/rpl/t/rpl_semi_sync_uninstall_plugin.test145
-rw-r--r--mysql-test/suite/rpl/t/rpl_stop_slave.test27
-rw-r--r--mysql-test/suite/sys_vars/r/timed_mutexes_basic.result20
-rw-r--r--mysql-test/t/func_str.test5
-rw-r--r--mysql-test/t/group_min_max.test25
-rw-r--r--mysql-test/t/group_min_max_innodb.test93
-rwxr-xr-x[-rw-r--r--]mysql-test/t/long_tmpdir-master.sh0
-rwxr-xr-x[-rw-r--r--]mysql-test/t/lowercase_mixed_tmpdir-master.sh0
-rw-r--r--mysql-test/t/lowercase_table4-master.opt2
-rw-r--r--mysql-test/t/partition_pruning.test48
-rw-r--r--mysql-test/t/union.test30
-rw-r--r--mysql-test/t/view.test41
-rw-r--r--mysys/CMakeLists.txt3
-rw-r--r--mysys/mf_iocache2.c9
-rwxr-xr-xpackaging/rpm-oel/filter-requires.sh2
-rw-r--r--packaging/rpm-oel/mysql.spec.in51
-rw-r--r--packaging/rpm-uln/CMakeLists.txt38
-rw-r--r--packaging/rpm-uln/README-ULN15
-rw-r--r--packaging/rpm-uln/README.mysql-docs4
-rwxr-xr-xpackaging/rpm-uln/filter-requires-mysql.sh3
-rwxr-xr-xpackaging/rpm-uln/generate-tarball.sh15
-rw-r--r--packaging/rpm-uln/my.cnf10
-rw-r--r--packaging/rpm-uln/my_config.h29
-rw-r--r--packaging/rpm-uln/mysql-5.5-errno.patch21
-rw-r--r--packaging/rpm-uln/mysql-5.5-fix-tests.patch34
-rw-r--r--packaging/rpm-uln/mysql-5.5-libdir.patch28
-rw-r--r--packaging/rpm-uln/mysql-5.5-mtr1.patch25
-rw-r--r--packaging/rpm-uln/mysql-5.5-stack-guard.patch140
-rw-r--r--packaging/rpm-uln/mysql-5.5-testing.patch23
-rw-r--r--packaging/rpm-uln/mysql-chain-certs.patch45
-rw-r--r--packaging/rpm-uln/mysql-embedded-check.c26
-rw-r--r--packaging/rpm-uln/mysql-expired-certs.patch555
-rw-r--r--packaging/rpm-uln/mysql-install-test.patch33
-rw-r--r--packaging/rpm-uln/mysql-strmov.patch32
-rw-r--r--packaging/rpm-uln/mysql.init209
-rw-r--r--packaging/rpm-uln/mysql.spec.sh1991
-rw-r--r--packaging/rpm-uln/scriptstub.c32
-rw-r--r--plugin/win_auth_client/CMakeLists.txt1
-rw-r--r--scripts/CMakeLists.txt1
-rw-r--r--scripts/mysql_config.sh7
-rw-r--r--[-rwxr-xr-x]scripts/mysqlaccess.conf0
-rwxr-xr-x[-rw-r--r--]sql-bench/graph-compare-results.sh0
-rw-r--r--sql-bench/innotest1.sh280
-rw-r--r--sql-bench/innotest1a.sh212
-rw-r--r--sql-bench/innotest1b.sh198
-rw-r--r--sql-bench/innotest2.sh296
-rw-r--r--sql-bench/innotest2a.sh184
-rw-r--r--sql-bench/innotest2b.sh204
-rw-r--r--sql/item_strfunc.cc50
-rw-r--r--sql/log_event.cc6
-rw-r--r--sql/opt_range.cc208
-rw-r--r--sql/scheduler.cc4
-rw-r--r--sql/sql_class.cc2
-rw-r--r--sql/sql_insert.cc2
-rw-r--r--sql/sql_lex.cc19
-rw-r--r--sql/sql_lex.h6
-rw-r--r--sql/sql_parse.cc2
-rw-r--r--sql/sql_partition.cc70
-rw-r--r--sql/sql_repl.cc2
-rw-r--r--sql/sql_table.cc64
-rw-r--r--sql/sql_table.h3
-rw-r--r--sql/sql_union.cc8
-rw-r--r--sql/sql_view.cc5
-rw-r--r--sql/sql_yacc.yy5
-rw-r--r--sql/sys_vars.cc9
-rw-r--r--sql/table.cc24
-rw-r--r--storage/heap/hp_block.c6
-rw-r--r--storage/heap/hp_create.c3
-rw-r--r--storage/innobase/dict/dict0crea.c42
-rw-r--r--storage/innobase/dict/dict0dict.c103
-rw-r--r--storage/innobase/dict/dict0load.c93
-rw-r--r--storage/innobase/dict/dict0mem.c15
-rw-r--r--storage/innobase/handler/i_s.cc13
-rw-r--r--storage/innobase/include/dict0dict.h39
-rw-r--r--storage/innobase/include/dict0dict.ic61
-rw-r--r--storage/innobase/include/dict0load.h12
-rw-r--r--storage/innobase/include/dict0mem.h12
-rw-r--r--storage/myisam/ha_myisam.cc1
-rw-r--r--strings/CMakeLists.txt3
-rw-r--r--strings/ctype-bin.c3
-rw-r--r--strings/ctype-eucjpms.c5
-rw-r--r--strings/ctype-ujis.c6
-rw-r--r--support-files/CMakeLists.txt8
-rw-r--r--support-files/mysql.spec.sh7
-rw-r--r--vio/CMakeLists.txt3
-rw-r--r--zlib/CMakeLists.txt3
124 files changed, 2723 insertions, 4338 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b03cdf438a3..297cb7709c3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -26,6 +26,14 @@ IF(POLICY CMP0022)
CMAKE_POLICY(SET CMP0022 OLD)
ENDIF()
+# We use the LOCATION target property (CMP0026)
+# and get_target_property() for non-existent targets (CMP0045)
+IF(CMAKE_VERSION VERSION_EQUAL "3.0.0" OR
+ CMAKE_VERSION VERSION_GREATER "3.0.0")
+ CMAKE_POLICY(SET CMP0026 OLD)
+ CMAKE_POLICY(SET CMP0045 OLD)
+ENDIF()
+
MESSAGE(STATUS "Running cmake version ${CMAKE_VERSION}")
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
@@ -422,7 +430,6 @@ IF(NOT WITHOUT_SERVER)
IF(EXISTS ${CMAKE_SOURCE_DIR}/internal/CMakeLists.txt)
ADD_SUBDIRECTORY(internal)
ENDIF()
- ADD_SUBDIRECTORY(packaging/rpm-uln)
ADD_SUBDIRECTORY(packaging/rpm-oel)
ENDIF()
diff --git a/client/mysqladmin.cc b/client/mysqladmin.cc
index dd35547a2c2..57feed163ad 100644
--- a/client/mysqladmin.cc
+++ b/client/mysqladmin.cc
@@ -1,6 +1,6 @@
/*
- Copyright (c) 2000, 2012, Oracle and/or its affiliates.
- Copyright (c) 2010, 2012, Monty Program Ab.
+ Copyright (c) 2000, 2014, Oracle and/or its affiliates.
+ Copyright (c) 2010, 2014, Monty Program Ab.
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
@@ -70,6 +70,7 @@ extern "C" my_bool get_one_option(int optid, const struct my_option *opt,
char *argument);
static my_bool sql_connect(MYSQL *mysql, uint wait);
static int execute_commands(MYSQL *mysql,int argc, char **argv);
+static char **mask_password(int argc, char ***argv);
static int drop_db(MYSQL *mysql,const char *db);
extern "C" sig_handler endprog(int signal_number);
static void nice_time(ulong sec,char *buff);
@@ -303,9 +304,9 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
int main(int argc,char *argv[])
{
- int error= 0;
+ int error= 0, temp_argc;
MYSQL mysql;
- char **commands, **save_argv;
+ char **commands, **save_argv, **temp_argv;
MY_INIT(argv[0]);
mysql_init(&mysql);
@@ -313,8 +314,12 @@ int main(int argc,char *argv[])
if ((error= load_defaults("my",load_default_groups,&argc,&argv)))
goto err1;
save_argv = argv; /* Save for free_defaults */
+
if ((error=handle_options(&argc, &argv, my_long_options, get_one_option)))
goto err2;
+ temp_argv= mask_password(argc, &argv);
+ temp_argc= argc;
+
if (debug_info_flag)
my_end_arg= MY_CHECK_ERROR | MY_GIVE_INFO;
if (debug_check_flag)
@@ -325,7 +330,7 @@ int main(int argc,char *argv[])
usage();
exit(1);
}
- commands = argv;
+ commands = temp_argv;
if (tty_password)
opt_password = get_tty_password(NullS);
@@ -465,6 +470,13 @@ int main(int argc,char *argv[])
} /* got connection */
mysql_close(&mysql);
+ temp_argc--;
+ while(temp_argc >= 0)
+ {
+ my_free(temp_argv[temp_argc]);
+ temp_argc--;
+ }
+ my_free(temp_argv);
err2:
mysql_library_end();
my_free(opt_password);
@@ -1165,6 +1177,47 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
return 0;
}
+/**
+ @brief Masking the password if it is passed as command line argument.
+
+ @details It works in Linux and changes cmdline in ps and /proc/pid/cmdline,
+ but it won't work for history file of shell.
+ The command line arguments are copied to another array and the
+ password in the argv is masked. This function is called just after
+ "handle_options" because in "handle_options", the agrv pointers
+ are altered which makes freeing of dynamically allocated memory
+ difficult. The password masking is done before all other operations
+ in order to minimise the time frame of password visibility via cmdline.
+
+ @param argc command line options (count)
+ @param argv command line options (values)
+
+ @return temp_argv copy of argv
+*/
+
+static char **mask_password(int argc, char ***argv)
+{
+ char **temp_argv;
+ temp_argv= (char **)(my_malloc(sizeof(char *) * argc, MYF(MY_WME)));
+ argc--;
+ while (argc > 0)
+ {
+ temp_argv[argc]= my_strdup((*argv)[argc], MYF(MY_FAE));
+ if (find_type((*argv)[argc - 1],&command_typelib, FIND_TYPE_BASIC) == ADMIN_PASSWORD ||
+ find_type((*argv)[argc - 1],&command_typelib, FIND_TYPE_BASIC) == ADMIN_OLD_PASSWORD)
+ {
+ char *start= (*argv)[argc];
+ while (*start)
+ *start++= 'x';
+ start= (*argv)[argc];
+ if (*start)
+ start[1]= 0; /* Cut length of argument */
+ }
+ argc--;
+ }
+ temp_argv[argc]= my_strdup((*argv)[argc], MYF(MY_FAE));
+ return(temp_argv);
+}
static void print_version(void)
{
diff --git a/client/mysqldump.c b/client/mysqldump.c
index b859876cff6..b649e638bc3 100644
--- a/client/mysqldump.c
+++ b/client/mysqldump.c
@@ -5645,19 +5645,36 @@ int main(int argc, char **argv)
dump_all_tablespaces();
dump_all_databases();
}
- else if (argc > 1 && !opt_databases)
- {
- /* Only one database and selected table(s) */
- if (!opt_alltspcs && !opt_notspcs)
- dump_tablespaces_for_tables(*argv, (argv + 1), (argc -1));
- dump_selected_tables(*argv, (argv + 1), (argc - 1));
- }
else
{
- /* One or more databases, all tables */
- if (!opt_alltspcs && !opt_notspcs)
- dump_tablespaces_for_databases(argv);
- dump_databases(argv);
+ // Check all arguments meet length condition. Currently database and table
+ // names are limited to NAME_LEN bytes and stack-based buffers assumes
+ // that escaped name will be not longer than NAME_LEN*2 + 2 bytes long.
+ int argument;
+ for (argument= 0; argument < argc; argument++)
+ {
+ size_t argument_length= strlen(argv[argument]);
+ if (argument_length > NAME_LEN)
+ {
+ die(EX_CONSCHECK, "[ERROR] Argument '%s' is too long, it cannot be "
+ "name for any table or database.\n", argv[argument]);
+ }
+ }
+
+ if (argc > 1 && !opt_databases)
+ {
+ /* Only one database and selected table(s) */
+ if (!opt_alltspcs && !opt_notspcs)
+ dump_tablespaces_for_tables(*argv, (argv + 1), (argc - 1));
+ dump_selected_tables(*argv, (argv + 1), (argc - 1));
+ }
+ else
+ {
+ /* One or more databases, all tables */
+ if (!opt_alltspcs && !opt_notspcs)
+ dump_tablespaces_for_databases(argv);
+ dump_databases(argv);
+ }
}
/* add 'START SLAVE' to end of dump */
diff --git a/cmake/dtrace.cmake b/cmake/dtrace.cmake
index 1fc87cfcbef..5d0bb7ff8c9 100644
--- a/cmake/dtrace.cmake
+++ b/cmake/dtrace.cmake
@@ -1,4 +1,4 @@
-# Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 2014, 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
@@ -80,13 +80,6 @@ IF(ENABLE_DTRACE)
${CMAKE_BINARY_DIR}/include/probes_mysql_dtrace.h
${CMAKE_BINARY_DIR}/include/probes_mysql_nodtrace.h
)
- IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
- # Systemtap object
- EXECUTE_PROCESS(
- COMMAND ${DTRACE} -G -s ${CMAKE_SOURCE_DIR}/include/probes_mysql.d.base
- -o ${CMAKE_BINARY_DIR}/probes_mysql.o
- )
- ENDIF()
ADD_CUSTOM_TARGET(gen_dtrace_header
DEPENDS
${CMAKE_BINARY_DIR}/include/probes_mysql.d
@@ -105,12 +98,7 @@ FUNCTION(DTRACE_INSTRUMENT target)
IF(ENABLE_DTRACE)
ADD_DEPENDENCIES(${target} gen_dtrace_header)
- IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
- TARGET_LINK_LIBRARIES(${target} ${CMAKE_BINARY_DIR}/probes_mysql.o)
- ENDIF()
-
- # On Solaris, invoke dtrace -G to generate object file and
- # link it together with target.
+ # Invoke dtrace to generate object file and link it together with target.
IF(CMAKE_SYSTEM_NAME MATCHES "SunOS")
SET(objdir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${target}.dir)
SET(outfile ${objdir}/${target}_dtrace.o)
@@ -127,6 +115,21 @@ FUNCTION(DTRACE_INSTRUMENT target)
-P ${CMAKE_SOURCE_DIR}/cmake/dtrace_prelink.cmake
WORKING_DIRECTORY ${objdir}
)
+ ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Linux")
+ # dtrace on Linux runs gcc and uses flags from environment
+ SET(CFLAGS_SAVED $ENV{CFLAGS})
+ SET(ENV{CFLAGS} ${CMAKE_C_FLAGS})
+ SET(outfile "${CMAKE_BINARY_DIR}/probes_mysql.o")
+ # Systemtap object
+ EXECUTE_PROCESS(
+ COMMAND ${DTRACE} -G -s ${CMAKE_SOURCE_DIR}/include/probes_mysql.d.base
+ -o ${outfile}
+ )
+ SET(ENV{CFLAGS} ${CFLAGS_SAVED})
+ ENDIF()
+
+ # Do not try to extend the library if we have not built the .o file
+ IF(outfile)
# Add full object path to linker flags
GET_TARGET_PROPERTY(target_type ${target} TYPE)
IF(NOT target_type MATCHES "STATIC")
@@ -138,12 +141,12 @@ FUNCTION(DTRACE_INSTRUMENT target)
# but maybe one day this will be fixed.
GET_TARGET_PROPERTY(target_location ${target} LOCATION)
ADD_CUSTOM_COMMAND(
- TARGET ${target} POST_BUILD
- COMMAND ${CMAKE_AR} r ${target_location} ${outfile}
- COMMAND ${CMAKE_RANLIB} ${target_location}
- )
- # Used in DTRACE_INSTRUMENT_WITH_STATIC_LIBS
- SET(TARGET_OBJECT_DIRECTORY_${target} ${objdir} CACHE INTERNAL "")
+ TARGET ${target} POST_BUILD
+ COMMAND ${CMAKE_AR} r ${target_location} ${outfile}
+ COMMAND ${CMAKE_RANLIB} ${target_location}
+ )
+ # Used in DTRACE_INSTRUMENT_WITH_STATIC_LIBS
+ SET(TARGET_OBJECT_DIRECTORY_${target} ${objdir} CACHE INTERNAL "")
ENDIF()
ENDIF()
ENDIF()
diff --git a/cmake/install_macros.cmake b/cmake/install_macros.cmake
index ee345b177bd..15e2dc4930b 100644
--- a/cmake/install_macros.cmake
+++ b/cmake/install_macros.cmake
@@ -38,7 +38,9 @@ FUNCTION (INSTALL_DEBUG_SYMBOLS)
STRING(REPLACE ".dll" ".pdb" pdb_location ${pdb_location})
STRING(REPLACE ".lib" ".pdb" pdb_location ${pdb_location})
IF(CMAKE_GENERATOR MATCHES "Visual Studio")
- STRING(REPLACE "${CMAKE_CFG_INTDIR}" "\${CMAKE_INSTALL_CONFIG_NAME}" pdb_location ${pdb_location})
+ STRING(REPLACE
+ "${CMAKE_CFG_INTDIR}" "\${CMAKE_INSTALL_CONFIG_NAME}"
+ pdb_location ${pdb_location})
ENDIF()
set(comp "")
diff --git a/cmake/os/Windows.cmake b/cmake/os/Windows.cmake
index 42ddb12bf37..16c2743aa4a 100644
--- a/cmake/os/Windows.cmake
+++ b/cmake/os/Windows.cmake
@@ -1,4 +1,4 @@
-# Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2010, 2014, 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
@@ -62,22 +62,30 @@ IF(MINGW AND CMAKE_SIZEOF_VOID_P EQUAL 4)
ENDIF()
IF(MSVC)
- # Enable debug info also in Release build, and create PDB to be able to analyze
- # crashes
- FOREACH(lang C CXX)
- SET(CMAKE_${lang}_FLAGS_RELEASE "${CMAKE_${lang}_FLAGS_RELEASE} /Zi")
- ENDFOREACH()
+ # Enable debug info also in Release build,
+ # and create PDB to be able to analyze crashes.
FOREACH(type EXE SHARED MODULE)
- SET(CMAKE_{type}_LINKER_FLAGS_RELEASE "${CMAKE_${type}_LINKER_FLAGS_RELEASE} /debug")
+ SET(CMAKE_{type}_LINKER_FLAGS_RELEASE
+ "${CMAKE_${type}_LINKER_FLAGS_RELEASE} /debug")
ENDFOREACH()
# Force static runtime libraries
+ # - Choose debugging information:
+ # /Z7
+ # Produces an .obj file containing full symbolic debugging
+ # information for use with the debugger. The symbolic debugging
+ # information includes the names and types of variables, as well as
+ # functions and line numbers. No .pdb file is produced by the compiler.
+ FOREACH(lang C CXX)
+ SET(CMAKE_${lang}_FLAGS_RELEASE "${CMAKE_${lang}_FLAGS_RELEASE} /Z7")
+ ENDFOREACH()
FOREACH(flag
- CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO
- CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_DEBUG_INIT
+ CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO
+ CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_DEBUG_INIT
CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELWITHDEBINFO
- CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_DEBUG_INIT)
+ CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_DEBUG_INIT)
STRING(REPLACE "/MD" "/MT" "${flag}" "${${flag}}")
+ STRING(REPLACE "/Zi" "/Z7" "${flag}" "${${flag}}")
ENDFOREACH()
# Remove support for exceptions
@@ -109,7 +117,6 @@ IF(MSVC)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4800 /wd4805 /wd4996")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4800 /wd4805 /wd4996 /we4099")
-
IF(CMAKE_SIZEOF_VOID_P MATCHES 8)
# _WIN64 is defined by the compiler itself.
# Yet, we define it here again to work around a bug with Intellisense
diff --git a/extra/yassl/CMakeLists.txt b/extra/yassl/CMakeLists.txt
index a5d5898e192..5c5e4922b1d 100644
--- a/extra/yassl/CMakeLists.txt
+++ b/extra/yassl/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2006, 2014, 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
@@ -37,7 +37,6 @@ ENDIF()
ADD_CONVENIENCE_LIBRARY(yassl ${YASSL_SOURCES})
RESTRICT_SYMBOL_EXPORTS(yassl)
-INSTALL_DEBUG_SYMBOLS(yassl)
IF(MSVC)
INSTALL_DEBUG_TARGET(yassl DESTINATION ${INSTALL_LIBDIR}/debug)
ENDIF()
diff --git a/extra/yassl/src/ssl.cpp b/extra/yassl/src/ssl.cpp
index becc4e5ba83..9c1016ba53d 100644
--- a/extra/yassl/src/ssl.cpp
+++ b/extra/yassl/src/ssl.cpp
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2005, 2014, 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
@@ -790,7 +790,10 @@ int SSL_CTX_load_verify_locations(SSL_CTX* ctx, const char* file,
strncpy(name, path, MAX_PATH - 1 - HALF_PATH);
strncat(name, "/", 1);
strncat(name, entry->d_name, HALF_PATH);
- if (stat(name, &buf) < 0) return SSL_BAD_STAT;
+ if (stat(name, &buf) < 0) {
+ closedir(dir);
+ return SSL_BAD_STAT;
+ }
if (S_ISREG(buf.st_mode))
ret = read_file(ctx, name, SSL_FILETYPE_PEM, CA);
diff --git a/extra/yassl/taocrypt/CMakeLists.txt b/extra/yassl/taocrypt/CMakeLists.txt
index 749193f1935..a08089870a3 100644
--- a/extra/yassl/taocrypt/CMakeLists.txt
+++ b/extra/yassl/taocrypt/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2006, 2014, 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
@@ -36,7 +36,6 @@ ENDIF()
ADD_CONVENIENCE_LIBRARY(taocrypt ${TAOCRYPT_SOURCES})
RESTRICT_SYMBOL_EXPORTS(taocrypt)
-INSTALL_DEBUG_SYMBOLS(taocrypt)
IF(MSVC)
INSTALL_DEBUG_TARGET(taocrypt DESTINATION ${INSTALL_LIBDIR}/debug)
ENDIF()
diff --git a/extra/yassl/taocrypt/include/asn.hpp b/extra/yassl/taocrypt/include/asn.hpp
index fee2f26fb73..daf1000bde9 100644
--- a/extra/yassl/taocrypt/include/asn.hpp
+++ b/extra/yassl/taocrypt/include/asn.hpp
@@ -1,5 +1,5 @@
/*
- Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2005, 2014, 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
@@ -294,9 +294,9 @@ private:
byte* signature_;
char issuer_[ASN_NAME_MAX]; // Names
char subject_[ASN_NAME_MAX]; // Names
- char beforeDate_[MAX_DATE_SZ]; // valid before date
- char afterDate_[MAX_DATE_SZ]; // valid after date
- bool verify_; // Default to yes, but could be off
+ char beforeDate_[MAX_DATE_SZ+1]; // valid before date, +null term
+ char afterDate_[MAX_DATE_SZ+1]; // valid after date, +null term
+ bool verify_; // Default to yes, but could be off
void ReadHeader();
void Decode(SignerList*, CertType);
diff --git a/include/thread_pool_priv.h b/include/thread_pool_priv.h
index 9a9c65af6da..a199923ff00 100644
--- a/include/thread_pool_priv.h
+++ b/include/thread_pool_priv.h
@@ -1,6 +1,6 @@
#error don't use
/*
- Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2010, 2014, 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
@@ -50,6 +50,8 @@ void thd_clear_errors(THD *thd);
void thd_set_thread_stack(THD *thd, char *stack_start);
void thd_lock_thread_count(THD *thd);
void thd_unlock_thread_count(THD *thd);
+void thd_lock_thread_remove(THD *thd);
+void thd_unlock_thread_remove(THD *thd);
void thd_close_connection(THD *thd);
THD *thd_get_current_thd();
void thd_lock_data(THD *thd);
diff --git a/libmysql/CMakeLists.txt b/libmysql/CMakeLists.txt
index c536b7cefb8..fc4abb0ddd4 100644
--- a/libmysql/CMakeLists.txt
+++ b/libmysql/CMakeLists.txt
@@ -385,7 +385,6 @@ SET(LIBS clientlib dbug strings vio mysys ${ZLIB_LIBRARY} ${SSL_LIBRARIES} ${LIB
MERGE_LIBRARIES(mysqlclient STATIC ${LIBS} COMPONENT Development)
# Visual Studio users need debug static library for debug projects
-INSTALL_DEBUG_SYMBOLS(clientlib)
IF(MSVC)
INSTALL_DEBUG_TARGET(mysqlclient DESTINATION ${INSTALL_LIBDIR}/debug)
INSTALL_DEBUG_TARGET(clientlib DESTINATION ${INSTALL_LIBDIR}/debug)
diff --git a/mysql-test/collections/default.weekly b/mysql-test/collections/default.weekly
index a03e2593cfe..a03e2593cfe 100755..100644
--- a/mysql-test/collections/default.weekly
+++ b/mysql-test/collections/default.weekly
diff --git a/mysql-test/include/install_semisync.inc b/mysql-test/include/install_semisync.inc
index 368b7b7cb4a..9cc6df2072a 100644
--- a/mysql-test/include/install_semisync.inc
+++ b/mysql-test/include/install_semisync.inc
@@ -14,7 +14,7 @@
if ($value == No such row)
{
SET sql_log_bin = 0;
- eval INSTALL PLUGIN rpl_semi_sync_master SONAME '$SEMISYNC_MASTER_PLUGIN';
+ install plugin rpl_semi_sync_master soname 'semisync_master';
SET GLOBAL rpl_semi_sync_master_enabled = 1;
SET sql_log_bin = 1;
}
@@ -28,7 +28,7 @@ if ($value == No such row)
if ($value == No such row)
{
SET sql_log_bin = 0;
- eval INSTALL PLUGIN rpl_semi_sync_slave SONAME '$SEMISYNC_SLAVE_PLUGIN';
+ install plugin rpl_semi_sync_slave soname 'semisync_slave';
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
SET sql_log_bin = 1;
}
diff --git a/mysql-test/include/stop_dump_threads.inc b/mysql-test/include/stop_dump_threads.inc
new file mode 100644
index 00000000000..ae33c963d9a
--- /dev/null
+++ b/mysql-test/include/stop_dump_threads.inc
@@ -0,0 +1,32 @@
+# ==== Purpose ====
+#
+# Stop all dump threads on the server of the current connection.
+#
+# ==== Usage ====
+#
+# --source include/stop_dump_threads.inc
+
+--let $include_filename= stop_dump_threads.inc
+--source include/begin_include_file.inc
+
+
+--let $_sdt_show_rpl_debug_info_old= $show_rpl_debug_info
+--let $show_rpl_debug_info= 1
+--disable_query_log
+--disable_result_log
+
+--let $_sdt_dump_thread_id= `SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND = 'Binlog dump'`
+
+while ($_sdt_dump_thread_id != '')
+{
+ eval KILL $_sdt_dump_thread_id;
+ --let $wait_condition= SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE ID = $_sdt_dump_thread_id
+ --source include/wait_condition.inc
+
+ --let $_sdt_dump_thread_id= `SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND = 'Binlog dump'`
+}
+
+--let $show_rpl_debug_info= $_sdt_show_rpl_debug_info_old
+
+--let $include_filename= stop_dump_threads.inc
+--source include/end_include_file.inc
diff --git a/mysql-test/include/uninstall_semisync.inc b/mysql-test/include/uninstall_semisync.inc
index 11668d1db97..0a4c55fa4f2 100644
--- a/mysql-test/include/uninstall_semisync.inc
+++ b/mysql-test/include/uninstall_semisync.inc
@@ -13,6 +13,11 @@
UNINSTALL PLUGIN rpl_semi_sync_slave;
--connection master
+# After BUG#17638477 fix, uninstallation of rpl_semi_sync_master
+# is not allowed when there are semi sync slaves. Hence kill
+# all dump threads before uninstalling it.
+SET GLOBAL rpl_semi_sync_master_enabled = OFF;
+--source include/stop_dump_threads.inc
UNINSTALL PLUGIN rpl_semi_sync_master;
--enable_warnings
diff --git a/mysql-test/r/func_str.result b/mysql-test/r/func_str.result
index bff8d0f1504..05d975b548b 100644
--- a/mysql-test/r/func_str.result
+++ b/mysql-test/r/func_str.result
@@ -2950,6 +2950,9 @@ replace(var, '00000000', table_name)
(( t2 ++ t2 ))
drop procedure foo;
drop table t1,t2;
+select md5(_filename "a"), sha(_filename "a");
+md5(_filename "a") sha(_filename "a")
+0cc175b9c0f1b6a831c399e269772661 86f7e437faa5a7fce15d1ddcb9eaeaea377667b8
#
# End of 5.5 tests
#
diff --git a/mysql-test/r/group_min_max.result b/mysql-test/r/group_min_max.result
index d590039f322..f658898543d 100644
--- a/mysql-test/r/group_min_max.result
+++ b/mysql-test/r/group_min_max.result
@@ -3506,7 +3506,7 @@ COUNT(DISTINCT a, b) SUM(DISTINCT a)
0 NULL
EXPLAIN SELECT SUM(DISTINCT a), MAX(b) FROM t2 GROUP BY a;
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t2 range NULL a 5 NULL 9 Using index for group-by
+1 SIMPLE t2 index NULL a 15 NULL 16 Using index
SELECT SUM(DISTINCT a), MAX(b) FROM t2 GROUP BY a;
SUM(DISTINCT a) MAX(b)
1 8
@@ -3534,7 +3534,7 @@ SELECT 42 * (a + c + COUNT(DISTINCT c, a, b)) FROM t2 GROUP BY a, b, c;
168
EXPLAIN SELECT (SUM(DISTINCT a) + MAX(b)) FROM t2 GROUP BY a;
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t2 range NULL a 5 NULL 9 Using index for group-by
+1 SIMPLE t2 index NULL a 15 NULL 16 Using index
SELECT (SUM(DISTINCT a) + MAX(b)) FROM t2 GROUP BY a;
(SUM(DISTINCT a) + MAX(b))
9
@@ -3563,6 +3563,58 @@ id select_type table type possible_keys key key_len ref rows Extra
drop table t1;
# End of test#50539.
#
+# Bug#17217128 - BAD INTERACTION BETWEEN MIN/MAX AND
+# "HAVING SUM(DISTINCT)": WRONG RESULTS.
+#
+CREATE TABLE t (a INT, b INT, KEY(a,b));
+INSERT INTO t VALUES (1,1), (2,2), (3,3), (4,4), (1,0), (3,2), (4,5);
+ANALYZE TABLE t;
+Table Op Msg_type Msg_text
+test.t analyze status OK
+SELECT a, SUM(DISTINCT a), MIN(b) FROM t GROUP BY a;
+a SUM(DISTINCT a) MIN(b)
+1 1 0
+2 2 2
+3 3 2
+4 4 4
+EXPLAIN SELECT a, SUM(DISTINCT a), MIN(b) FROM t GROUP BY a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t index NULL a 10 NULL 7 Using index
+SELECT a, SUM(DISTINCT a), MAX(b) FROM t GROUP BY a;
+a SUM(DISTINCT a) MAX(b)
+1 1 1
+2 2 2
+3 3 3
+4 4 5
+EXPLAIN SELECT a, SUM(DISTINCT a), MAX(b) FROM t GROUP BY a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t index NULL a 10 NULL 7 Using index
+SELECT a, MAX(b) FROM t GROUP BY a HAVING SUM(DISTINCT a);
+a MAX(b)
+1 1
+2 2
+3 3
+4 5
+EXPLAIN SELECT a, MAX(b) FROM t GROUP BY a HAVING SUM(DISTINCT a);
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t index NULL a 10 NULL 7 Using index
+SELECT SUM(DISTINCT a), MIN(b), MAX(b) FROM t;
+SUM(DISTINCT a) MIN(b) MAX(b)
+10 0 5
+EXPLAIN SELECT SUM(DISTINCT a), MIN(b), MAX(b) FROM t;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t index NULL a 10 NULL 7 Using index
+SELECT a, SUM(DISTINCT a), MIN(b), MAX(b) FROM t GROUP BY a;
+a SUM(DISTINCT a) MIN(b) MAX(b)
+1 1 0 1
+2 2 2 2
+3 3 2 3
+4 4 4 5
+EXPLAIN SELECT a, SUM(DISTINCT a), MIN(b), MAX(b) FROM t GROUP BY a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t index NULL a 10 NULL 7 Using index
+DROP TABLE t;
+#
# MDEV-4219 A simple select query returns random data (upstream bug#68473)
#
drop table if exists faulty;
diff --git a/mysql-test/r/group_min_max_innodb.result b/mysql-test/r/group_min_max_innodb.result
index 320c4b2b750..c4d2fb88784 100644
--- a/mysql-test/r/group_min_max_innodb.result
+++ b/mysql-test/r/group_min_max_innodb.result
@@ -118,3 +118,171 @@ COUNT(DISTINCT a)
1
DROP TABLE t1;
End of 5.5 tests
+#
+# Bug#17909656 - WRONG RESULTS FOR A SIMPLE QUERY WITH GROUP BY
+#
+CREATE TABLE t0 (
+i1 INTEGER NOT NULL
+);
+INSERT INTO t0 VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),
+(11),(12),(13),(14),(15),(16),(17),(18),(19),(20),
+(21),(22),(23),(24),(25),(26),(27),(28),(29),(30);
+CREATE TABLE t1 (
+c1 CHAR(1) NOT NULL,
+i1 INTEGER NOT NULL,
+i2 INTEGER NOT NULL,
+UNIQUE KEY k1 (c1,i2)
+) ENGINE=InnoDB;
+INSERT INTO t1 SELECT 'A',i1,i1 FROM t0;
+INSERT INTO t1 SELECT 'B',i1,i1 FROM t0;
+INSERT INTO t1 SELECT 'C',i1,i1 FROM t0;
+INSERT INTO t1 SELECT 'D',i1,i1 FROM t0;
+INSERT INTO t1 SELECT 'E',i1,i1 FROM t0;
+INSERT INTO t1 SELECT 'F',i1,i1 FROM t0;
+CREATE TABLE t2 (
+c1 CHAR(1) NOT NULL,
+i1 INTEGER NOT NULL,
+i2 INTEGER NOT NULL,
+UNIQUE KEY k2 (c1,i1,i2)
+) ENGINE=InnoDB;
+INSERT INTO t2 SELECT 'A',i1,i1 FROM t0;
+INSERT INTO t2 SELECT 'B',i1,i1 FROM t0;
+INSERT INTO t2 SELECT 'C',i1,i1 FROM t0;
+INSERT INTO t2 SELECT 'D',i1,i1 FROM t0;
+INSERT INTO t2 SELECT 'E',i1,i1 FROM t0;
+INSERT INTO t2 SELECT 'F',i1,i1 FROM t0;
+ANALYZE TABLE t1;
+ANALYZE TABLE t2;
+EXPLAIN SELECT c1, max(i2) FROM t1 WHERE (c1 = 'C' AND i2 = 17) OR ( c1 = 'F')
+GROUP BY c1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 range k1 k1 5 NULL 31 Using where; Using index
+SELECT c1, max(i2) FROM t1 WHERE (c1 = 'C' AND i2 = 17) OR ( c1 = 'F')
+GROUP BY c1;
+c1 max(i2)
+C 17
+F 30
+EXPLAIN SELECT c1, max(i2) FROM t1 WHERE (c1 = 'C' OR ( c1 = 'F' AND i2 = 17))
+GROUP BY c1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 range k1 k1 5 NULL 31 Using where; Using index
+SELECT c1, max(i2) FROM t1 WHERE (c1 = 'C' OR ( c1 = 'F' AND i2 = 17))
+GROUP BY c1;
+c1 max(i2)
+C 30
+F 17
+EXPLAIN SELECT c1, max(i2) FROM t1 WHERE (c1 = 'C' OR c1 = 'F' ) AND ( i2 = 17 )
+GROUP BY c1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 range k1 k1 5 NULL 1 Using where; Using index for group-by
+SELECT c1, max(i2) FROM t1 WHERE (c1 = 'C' OR c1 = 'F' ) AND ( i2 = 17 )
+GROUP BY c1;
+c1 max(i2)
+C 17
+F 17
+EXPLAIN SELECT c1, max(i2) FROM t1
+WHERE ((c1 = 'C' AND (i2 = 40 OR i2 = 30)) OR ( c1 = 'F' AND (i2 = 40 )))
+GROUP BY c1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 range k1 k1 5 NULL 3 Using where; Using index
+SELECT c1, max(i2) FROM t1
+WHERE ((c1 = 'C' AND (i2 = 40 OR i2 = 30)) OR ( c1 = 'F' AND (i2 = 40 )))
+GROUP BY c1;
+c1 max(i2)
+C 30
+EXPLAIN SELECT c1, i1, max(i2) FROM t2
+WHERE (c1 = 'C' OR ( c1 = 'F' AND i1 < 35)) AND ( i2 = 17 )
+GROUP BY c1,i1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t2 range k2 k2 9 NULL 59 Using where; Using index for group-by
+SELECT c1, i1, max(i2) FROM t2
+WHERE (c1 = 'C' OR ( c1 = 'F' AND i1 < 35)) AND ( i2 = 17 )
+GROUP BY c1,i1;
+c1 i1 max(i2)
+C 17 17
+F 17 17
+EXPLAIN SELECT c1, i1, max(i2) FROM t2
+WHERE (((c1 = 'C' AND i1 < 40) OR ( c1 = 'F' AND i1 < 35)) AND ( i2 = 17 ))
+GROUP BY c1,i1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t2 range k2 k2 9 NULL 58 Using where; Using index for group-by
+SELECT c1, i1, max(i2) FROM t2
+WHERE (((c1 = 'C' AND i1 < 40) OR ( c1 = 'F' AND i1 < 35)) AND ( i2 = 17 ))
+GROUP BY c1,i1;
+c1 i1 max(i2)
+C 17 17
+F 17 17
+EXPLAIN SELECT c1, i1, max(i2) FROM t2
+WHERE ((c1 = 'C' AND i1 < 40) OR ( c1 = 'F' AND i1 < 35) OR ( i2 = 17 ))
+GROUP BY c1,i1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t2 index k2 k2 9 NULL 180 Using where; Using index
+SELECT c1, i1, max(i2) FROM t2
+WHERE ((c1 = 'C' AND i1 < 40) OR ( c1 = 'F' AND i1 < 35) OR ( i2 = 17 ))
+GROUP BY c1,i1;
+c1 i1 max(i2)
+A 17 17
+B 17 17
+C 1 1
+C 2 2
+C 3 3
+C 4 4
+C 5 5
+C 6 6
+C 7 7
+C 8 8
+C 9 9
+C 10 10
+C 11 11
+C 12 12
+C 13 13
+C 14 14
+C 15 15
+C 16 16
+C 17 17
+C 18 18
+C 19 19
+C 20 20
+C 21 21
+C 22 22
+C 23 23
+C 24 24
+C 25 25
+C 26 26
+C 27 27
+C 28 28
+C 29 29
+C 30 30
+D 17 17
+E 17 17
+F 1 1
+F 2 2
+F 3 3
+F 4 4
+F 5 5
+F 6 6
+F 7 7
+F 8 8
+F 9 9
+F 10 10
+F 11 11
+F 12 12
+F 13 13
+F 14 14
+F 15 15
+F 16 16
+F 17 17
+F 18 18
+F 19 19
+F 20 20
+F 21 21
+F 22 22
+F 23 23
+F 24 24
+F 25 25
+F 26 26
+F 27 27
+F 28 28
+F 29 29
+F 30 30
+DROP TABLE t0,t1,t2;
diff --git a/mysql-test/r/mysqld--help.result b/mysql-test/r/mysqld--help.result
index 10e297bafb6..8bcad2a3cf5 100644
--- a/mysql-test/r/mysqld--help.result
+++ b/mysql-test/r/mysqld--help.result
@@ -824,8 +824,8 @@ The following options may be given as the first argument:
How many threads we should keep in a cache for reuse
--thread-stack=# The stack size for each thread
--time-format=name The TIME format (ignored)
- --timed-mutexes Specify whether to time mutexes (only InnoDB mutexes are
- currently supported)
+ --timed-mutexes Specify whether to time mutexes. Deprecated, has no
+ effect.
--tmp-table-size=# If an internal in-memory temporary table exceeds this
size, MySQL will automatically convert it to an on-disk
MyISAM or Aria table
diff --git a/mysql-test/r/partition_pruning.result b/mysql-test/r/partition_pruning.result
index 0a4cf9932c0..e52c2c7d886 100644
--- a/mysql-test/r/partition_pruning.result
+++ b/mysql-test/r/partition_pruning.result
@@ -3302,6 +3302,120 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
1 SIMPLE t1 p0,p1,p2 ALL NULL NULL NULL NULL 100 Using where
drop table t0, t1;
#
+# Bug#71095: Wrong results with PARTITION BY LIST COLUMNS()
+#
+CREATE TABLE t1
+(c1 int,
+c2 int,
+c3 int,
+c4 int,
+PRIMARY KEY (c1,c2))
+PARTITION BY LIST COLUMNS (c2)
+(PARTITION p1 VALUES IN (1,2),
+PARTITION p2 VALUES IN (3,4));
+INSERT INTO t1 VALUES (1, 1, 1, 1), (2, 3, 1, 1);
+INSERT INTO t1 VALUES (1, 2, 1, 1), (2, 4, 1, 1);
+SELECT * FROM t1 WHERE c1 = 1 AND c2 < 1;
+c1 c2 c3 c4
+SELECT * FROM t1 WHERE c1 = 1 AND c2 <= 1;
+c1 c2 c3 c4
+1 1 1 1
+SELECT * FROM t1 WHERE c1 = 1 AND c2 = 1;
+c1 c2 c3 c4
+1 1 1 1
+SELECT * FROM t1 WHERE c1 = 1 AND c2 >= 1;
+c1 c2 c3 c4
+1 1 1 1
+1 2 1 1
+SELECT * FROM t1 WHERE c1 = 1 AND c2 > 1;
+c1 c2 c3 c4
+1 2 1 1
+SELECT * FROM t1 WHERE c1 = 1 AND c2 < 3;
+c1 c2 c3 c4
+1 1 1 1
+1 2 1 1
+SELECT * FROM t1 WHERE c1 = 1 AND c2 <= 3;
+c1 c2 c3 c4
+1 1 1 1
+1 2 1 1
+SELECT * FROM t1 WHERE c1 = 2 AND c2 <= 3;
+c1 c2 c3 c4
+2 3 1 1
+SELECT * FROM t1 WHERE c1 = 2 AND c2 = 3;
+c1 c2 c3 c4
+2 3 1 1
+SELECT * FROM t1 WHERE c1 = 2 AND c2 >= 3;
+c1 c2 c3 c4
+2 3 1 1
+2 4 1 1
+SELECT * FROM t1 WHERE c1 = 2 AND c2 > 3;
+c1 c2 c3 c4
+2 4 1 1
+SELECT * FROM t1 WHERE c1 = 2 AND c2 < 4;
+c1 c2 c3 c4
+2 3 1 1
+SELECT * FROM t1 WHERE c1 = 2 AND c2 <= 4;
+c1 c2 c3 c4
+2 3 1 1
+2 4 1 1
+SELECT * FROM t1 WHERE c1 = 2 AND c2 = 4;
+c1 c2 c3 c4
+2 4 1 1
+SELECT * FROM t1 WHERE c1 = 2 AND c2 >= 4;
+c1 c2 c3 c4
+2 4 1 1
+SELECT * FROM t1 WHERE c1 = 2 AND c2 > 4;
+c1 c2 c3 c4
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 1 AND c2 < 1;
+id select_type table partitions type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 1 AND c2 <= 1;
+id select_type table partitions type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 p1 range PRIMARY PRIMARY 8 NULL 1 Using where
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 1 AND c2 = 1;
+id select_type table partitions type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 p1 const PRIMARY PRIMARY 8 const,const 1
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 1 AND c2 >= 1;
+id select_type table partitions type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 p1,p2 range PRIMARY PRIMARY 8 NULL 2 Using where
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 1 AND c2 > 1;
+id select_type table partitions type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 p1,p2 range PRIMARY PRIMARY 8 NULL 2 Using where
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 1 AND c2 < 3;
+id select_type table partitions type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 p1 range PRIMARY PRIMARY 8 NULL 1 Using where
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 1 AND c2 <= 3;
+id select_type table partitions type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 p1,p2 range PRIMARY PRIMARY 8 NULL 2 Using where
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 2 AND c2 <= 3;
+id select_type table partitions type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 p1,p2 range PRIMARY PRIMARY 8 NULL 2 Using where
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 2 AND c2 = 3;
+id select_type table partitions type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 p2 const PRIMARY PRIMARY 8 const,const 1
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 2 AND c2 >= 3;
+id select_type table partitions type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 p2 range PRIMARY PRIMARY 8 NULL 1 Using where
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 2 AND c2 > 3;
+id select_type table partitions type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 p2 range PRIMARY PRIMARY 8 NULL 1 Using where
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 2 AND c2 < 4;
+id select_type table partitions type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 p1,p2 range PRIMARY PRIMARY 8 NULL 2 Using where
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 2 AND c2 <= 4;
+id select_type table partitions type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 p1,p2 range PRIMARY PRIMARY 8 NULL 2 Using where
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 2 AND c2 = 4;
+id select_type table partitions type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 p2 const PRIMARY PRIMARY 8 const,const 1
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 2 AND c2 >= 4;
+id select_type table partitions type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 p2 range PRIMARY PRIMARY 8 NULL 1 Using where
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 2 AND c2 > 4;
+id select_type table partitions type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
+DROP TABLE t1;
+#
# MDEV-6239: Partition pruning is not working as expected in an inner query
#
create table t1
diff --git a/mysql-test/r/union.result b/mysql-test/r/union.result
index 6d99cad30f0..4ecac34d9fa 100644
--- a/mysql-test/r/union.result
+++ b/mysql-test/r/union.result
@@ -1876,6 +1876,40 @@ SELECT(SELECT 1 AS a FROM dual ORDER BY a DESC LIMIT 1) AS dev;
dev
1
#
+# Bug #17059925 : UNIONS COMPUTES ROWS_EXAMINED INCORRECTLY
+#
+SET @old_slow_query_log= @@global.slow_query_log;
+SET @old_log_output= @@global.log_output;
+SET @old_long_query_time= @@long_query_time;
+SET GLOBAL log_output= "TABLE";
+SET GLOBAL slow_query_log= ON;
+SET SESSION long_query_time= 0;
+CREATE TABLE t17059925 (a INT);
+CREATE TABLE t2 (b INT);
+CREATE TABLE t3 (c INT);
+INSERT INTO t17059925 VALUES (1), (2), (3);
+INSERT INTO t2 VALUES (4), (5), (6);
+INSERT INTO t3 VALUES (7), (8), (9);
+TRUNCATE table mysql.slow_log;
+SELECT * FROM t17059925 UNION SELECT * FROM t2 UNION SELECT * FROM t3;
+a
+1
+2
+3
+4
+5
+6
+7
+8
+9
+SELECT sql_text, rows_examined FROM mysql.slow_log WHERE sql_text LIKE '%SELECT%t17059925%';
+sql_text rows_examined
+SELECT * FROM t17059925 UNION SELECT * FROM t2 UNION SELECT * FROM t3 18
+DROP TABLE t17059925, t2, t3;
+SET @@long_query_time= @old_long_query_time;
+SET @@global.log_output= @old_log_output;
+SET @@global.slow_query_log= @old_slow_query_log;
+#
# lp:1010729: Unexpected syntax error from UNION
# (bug #54382) with single-table join nest
#
diff --git a/mysql-test/r/variables.result b/mysql-test/r/variables.result
index dd74e02a26f..28b67732a77 100644
--- a/mysql-test/r/variables.result
+++ b/mysql-test/r/variables.result
@@ -189,6 +189,8 @@ select @@concurrent_insert;
@@concurrent_insert
AUTO
set global timed_mutexes=ON;
+Warnings:
+Warning 1287 '@@timed_mutexes' is deprecated and will be removed in a future release.
show variables like 'timed_mutexes';
Variable_name Value
timed_mutexes ON
@@ -196,6 +198,8 @@ select * from information_schema.session_variables where variable_name like 'tim
VARIABLE_NAME VARIABLE_VALUE
TIMED_MUTEXES ON
set global timed_mutexes=0;
+Warnings:
+Warning 1287 '@@timed_mutexes' is deprecated and will be removed in a future release.
show variables like 'timed_mutexes';
Variable_name Value
timed_mutexes OFF
diff --git a/mysql-test/r/view.result b/mysql-test/r/view.result
index 4511c4502ea..2978fce3a98 100644
--- a/mysql-test/r/view.result
+++ b/mysql-test/r/view.result
@@ -4791,6 +4791,45 @@ DROP DATABASE IF EXISTS nodb;
CREATE VIEW nodb.a AS SELECT 1;
ERROR 42000: Unknown database 'nodb'
#
+# BUG#14117018 - MYSQL SERVER CREATES INVALID VIEW DEFINITION
+# BUG#18405221 - SHOW CREATE VIEW OUTPUT INCORRECT
+#
+CREATE VIEW v1 AS (SELECT '' FROM DUAL);
+CREATE VIEW v2 AS (SELECT 'BUG#14117018' AS col1 FROM DUAL) UNION ALL
+(SELECT '' FROM DUAL);
+CREATE VIEW v3 AS (SELECT 'BUG#14117018' AS col1 FROM DUAL) UNION ALL
+(SELECT '' FROM DUAL) UNION ALL
+(SELECT '' FROM DUAL);
+CREATE VIEW v4 AS (SELECT 'BUG#14117018' AS col1 FROM DUAL) UNION ALL
+(SELECT '' AS col2 FROM DUAL) UNION ALL
+(SELECT '' FROM DUAL);
+CREATE VIEW v5 AS (SELECT 'buggy' AS col1, 'fix' as col2 FROM DUAL) UNION ALL
+(SELECT 'buggy' as a, 'fix' as a FROM DUAL);
+# Name for the column in select1 is set properly with or
+# without this fix.
+SHOW CREATE VIEW v1;
+View Create View character_set_client collation_connection
+v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS (select '' AS `Name_exp_1`) latin1 latin1_swedish_ci
+# Name for the column in select2 is set with this fix.
+# Without this fix, name would not have set for the
+# columns in select2.
+SHOW CREATE VIEW v2;
+View Create View character_set_client collation_connection
+v2 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2` AS (select 'BUG#14117018' AS `col1`) union all (select '' AS `Name_exp_1`) latin1 latin1_swedish_ci
+# Name for the field item in select2 & select3 is set with this fix.
+# Without this fix, name would not have set for the
+# columns in select2 & select3.
+SHOW CREATE VIEW v3;
+View Create View character_set_client collation_connection
+v3 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v3` AS (select 'BUG#14117018' AS `col1`) union all (select '' AS `Name_exp_1`) union all (select '' AS `Name_exp_1`) latin1 latin1_swedish_ci
+# Name for the field item in select3 is set with this fix.
+# Without this fix, name would not have set for the
+# columns in select3.
+SHOW CREATE VIEW v4;
+View Create View character_set_client collation_connection
+v4 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v4` AS (select 'BUG#14117018' AS `col1`) union all (select '' AS `col2`) union all (select '' AS `Name_exp_1`) latin1 latin1_swedish_ci
+DROP VIEW v1, v2, v3, v4, v5;
+#
# lp:833600 Wrong result with view + outer join + uncorrelated subquery (non-semijoin)
#
CREATE TABLE t1 ( a int, b int );
diff --git a/mysql-test/std_data/checkDBI_DBD-mysql.pl b/mysql-test/std_data/checkDBI_DBD-mysql.pl
index d62d2f8bfc0..d62d2f8bfc0 100644..100755
--- a/mysql-test/std_data/checkDBI_DBD-mysql.pl
+++ b/mysql-test/std_data/checkDBI_DBD-mysql.pl
diff --git a/mysql-test/suite/archive/partition_archive.result b/mysql-test/suite/archive/partition_archive.result
index 186a7930251..e666c1a8215 100644
--- a/mysql-test/suite/archive/partition_archive.result
+++ b/mysql-test/suite/archive/partition_archive.result
@@ -126,3 +126,29 @@ select count(*) from t1;
count(*)
100
drop table t1;
+#
+#BUG 18618561: FAILED ALTER TABLE ENGINE CHANGE WITH PARTITIONS
+# CORRUPTS FRM
+CREATE TABLE t1 (fld1 INT PRIMARY KEY) ENGINE= MYISAM PARTITION BY HASH(fld1)
+PARTITIONS 5;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `fld1` int(11) NOT NULL,
+ PRIMARY KEY (`fld1`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+/*!50100 PARTITION BY HASH (fld1)
+PARTITIONS 5 */
+ALTER TABLE t1 ENGINE= ARCHIVE;
+ERROR HY000: Can't create table 'test.#sql-temporary' (errno: 1)
+#After the patch, the ENGINE is correctly displayed as MyISAM
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `fld1` int(11) NOT NULL,
+ PRIMARY KEY (`fld1`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+/*!50100 PARTITION BY HASH (fld1)
+PARTITIONS 5 */
+#Cleanup.
+DROP TABLE t1;
diff --git a/mysql-test/suite/archive/partition_archive.test b/mysql-test/suite/archive/partition_archive.test
index 6f6a26c018a..c8dec726d1d 100644
--- a/mysql-test/suite/archive/partition_archive.test
+++ b/mysql-test/suite/archive/partition_archive.test
@@ -128,3 +128,21 @@ show create table t1;
select count(*) from t1;
drop table t1;
+
+--echo #
+--echo #BUG 18618561: FAILED ALTER TABLE ENGINE CHANGE WITH PARTITIONS
+--echo # CORRUPTS FRM
+
+CREATE TABLE t1 (fld1 INT PRIMARY KEY) ENGINE= MYISAM PARTITION BY HASH(fld1)
+PARTITIONS 5;
+SHOW CREATE TABLE t1;
+
+--replace_regex /#sql-[0-9a-f_]*/#sql-temporary/
+--error ER_CANT_CREATE_TABLE
+ALTER TABLE t1 ENGINE= ARCHIVE;
+
+--echo #After the patch, the ENGINE is correctly displayed as MyISAM
+SHOW CREATE TABLE t1;
+
+--echo #Cleanup.
+DROP TABLE t1;
diff --git a/mysql-test/suite/binlog/t/binlog_killed.test b/mysql-test/suite/binlog/t/binlog_killed.test
index 9b6420df4b4..6fd9924d44b 100644
--- a/mysql-test/suite/binlog/t/binlog_killed.test
+++ b/mysql-test/suite/binlog/t/binlog_killed.test
@@ -353,6 +353,10 @@ drop function bug27563;
# common cleanup
#
+connection default;
+disconnect con1;
+disconnect con2;
+
drop table t1,t2,t3;
--echo end of the tests
diff --git a/mysql-test/suite/innodb/r/blob_unique2pk.result b/mysql-test/suite/innodb/r/blob_unique2pk.result
new file mode 100644
index 00000000000..57953dc8624
--- /dev/null
+++ b/mysql-test/suite/innodb/r/blob_unique2pk.result
@@ -0,0 +1,15 @@
+create table t1 (f1 tinyblob not null) engine=innodb;
+alter table t1 add unique index (f1(255));
+drop table t1;
+create table t1 (f1 tinyblob not null) engine=innodb;
+alter table t1 add unique index (f1(356));
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `f1` tinyblob NOT NULL,
+ UNIQUE KEY `f1` (`f1`(255))
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+drop table t1;
+create table t1 (f1 point not null) engine=innodb;
+alter table t1 add unique index (f1);
+drop table t1;
diff --git a/mysql-test/suite/innodb/r/innodb-fk.result b/mysql-test/suite/innodb/r/innodb-fk.result
new file mode 100644
index 00000000000..cf883d83874
--- /dev/null
+++ b/mysql-test/suite/innodb/r/innodb-fk.result
@@ -0,0 +1,35 @@
+#
+# Bug #18806829 OPENING INNODB TABLES WITH MANY FOREIGN KEY
+# REFERENCES IS SLOW/CRASHES SEMAPHORE
+#
+create table t1 (f1 int primary key) engine=innodb;
+insert into t1 values (5);
+insert into t1 values (2882);
+insert into t1 values (10);
+update t1 set f1 = 28 where f1 = 2882;
+select * from fk_120;
+f1
+5
+10
+28
+select * from fk_1;
+f1
+5
+10
+28
+select * from fk_50;
+f1
+5
+10
+28
+drop table t1;
+#
+# Check if restrict is working fine.
+#
+create table t1 (f1 int primary key) engine=innodb;
+delete from t1 where f1 = 29;
+ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`fk_29`, CONSTRAINT `pc29` FOREIGN KEY (`f1`) REFERENCES `t1` (`f1`))
+select * from fk_29;
+f1
+29
+drop table t1;
diff --git a/mysql-test/suite/innodb/t/blob_unique2pk.test b/mysql-test/suite/innodb/t/blob_unique2pk.test
new file mode 100644
index 00000000000..ff6720690dd
--- /dev/null
+++ b/mysql-test/suite/innodb/t/blob_unique2pk.test
@@ -0,0 +1,20 @@
+--source include/have_innodb.inc
+
+
+#
+# Bug#16368875 INNODB: FAILING ASSERTION: PRIMARY_KEY_NO == -1 || PRIMARY_KEY_NO == 0
+#
+create table t1 (f1 tinyblob not null) engine=innodb;
+alter table t1 add unique index (f1(255));
+drop table t1;
+
+create table t1 (f1 tinyblob not null) engine=innodb;
+alter table t1 add unique index (f1(356));
+show create table t1;
+drop table t1;
+
+create table t1 (f1 point not null) engine=innodb;
+alter table t1 add unique index (f1);
+drop table t1;
+
+
diff --git a/mysql-test/suite/innodb/t/innodb-fk.test b/mysql-test/suite/innodb/t/innodb-fk.test
new file mode 100644
index 00000000000..9839cd2d084
--- /dev/null
+++ b/mysql-test/suite/innodb/t/innodb-fk.test
@@ -0,0 +1,86 @@
+--source include/have_innodb.inc
+--source include/not_embedded.inc
+
+--echo #
+--echo # Bug #18806829 OPENING INNODB TABLES WITH MANY FOREIGN KEY
+--echo # REFERENCES IS SLOW/CRASHES SEMAPHORE
+--echo #
+
+create table t1 (f1 int primary key) engine=innodb;
+insert into t1 values (5);
+insert into t1 values (2882);
+insert into t1 values (10);
+
+let $fk_tables = 120;
+
+--disable_query_log
+let $i = $fk_tables;
+while ($i)
+{
+ eval create table fk_$i (f1 int primary key,
+ constraint pc$i foreign key (f1) references t1(f1)
+ on delete cascade on update cascade) engine=innodb;
+ eval insert into fk_$i values (5);
+ eval insert into fk_$i values (2882);
+ eval insert into fk_$i values (10);
+ dec $i;
+}
+--enable_query_log
+
+--source include/restart_mysqld.inc
+
+update t1 set f1 = 28 where f1 = 2882;
+
+select * from fk_120;
+select * from fk_1;
+select * from fk_50;
+
+--disable_query_log
+let $i = $fk_tables;
+while ($i)
+{
+ eval drop table fk_$i;
+ dec $i;
+}
+--enable_query_log
+
+drop table t1;
+
+--echo #
+--echo # Check if restrict is working fine.
+--echo #
+
+create table t1 (f1 int primary key) engine=innodb;
+
+let $fk_tables = 30;
+
+--disable_query_log
+let $i = $fk_tables;
+while ($i)
+{
+ eval create table fk_$i (f1 int primary key,
+ constraint pc$i foreign key (f1) references t1(f1)
+ on delete restrict on update restrict) engine=innodb;
+ eval insert into t1 values ($i);
+ eval insert into fk_$i values ($i);
+ dec $i;
+}
+--enable_query_log
+
+--source include/restart_mysqld.inc
+
+--error ER_ROW_IS_REFERENCED_2
+delete from t1 where f1 = 29;
+select * from fk_29;
+
+--disable_query_log
+let $i = $fk_tables;
+while ($i)
+{
+ eval drop table fk_$i;
+ dec $i;
+}
+--enable_query_log
+
+drop table t1;
+
diff --git a/mysql-test/suite/innodb/t/innodb_bug60196-master.opt b/mysql-test/suite/innodb/t/innodb_bug60196-master.opt
index c0a1981fa7c..ac4d3211e89 100644
--- a/mysql-test/suite/innodb/t/innodb_bug60196-master.opt
+++ b/mysql-test/suite/innodb/t/innodb_bug60196-master.opt
@@ -1 +1 @@
---lower-case-table-names=2
+--lower-case-table-names=2
diff --git a/mysql-test/suite/rpl/disabled.def b/mysql-test/suite/rpl/disabled.def
index f9af9c30f5c..687930e1524 100644
--- a/mysql-test/suite/rpl/disabled.def
+++ b/mysql-test/suite/rpl/disabled.def
@@ -1,3 +1,4 @@
+rpl_semi_sync_uninstall_plugin: waiting for the fix
##############################################################################
#
# List the test cases that are to be disabled temporarily.
diff --git a/mysql-test/suite/rpl/r/rpl_semi_sync.result b/mysql-test/suite/rpl/r/rpl_semi_sync.result
index 51859b5b49b..196844255f6 100644
--- a/mysql-test/suite/rpl/r/rpl_semi_sync.result
+++ b/mysql-test/suite/rpl/r/rpl_semi_sync.result
@@ -386,6 +386,7 @@ Rpl_semi_sync_slave_status ON
include/stop_slave.inc
[ on master ]
set sql_log_bin=0;
+include/stop_dump_threads.inc
UNINSTALL PLUGIN rpl_semi_sync_master;
set sql_log_bin=1;
SHOW VARIABLES LIKE 'rpl_semi_sync_master_enabled';
@@ -439,9 +440,8 @@ Rpl_semi_sync_slave_status OFF
#
# Clean up
#
+include/uninstall_semisync.inc
include/stop_slave.inc
-UNINSTALL PLUGIN rpl_semi_sync_slave;
-UNINSTALL PLUGIN rpl_semi_sync_master;
change master to master_user='root',master_password='';
include/start_slave.inc
drop table t1;
diff --git a/mysql-test/suite/rpl/r/rpl_semi_sync_uninstall_plugin.result b/mysql-test/suite/rpl/r/rpl_semi_sync_uninstall_plugin.result
new file mode 100644
index 00000000000..bd659e71600
--- /dev/null
+++ b/mysql-test/suite/rpl/r/rpl_semi_sync_uninstall_plugin.result
@@ -0,0 +1,36 @@
+include/master-slave.inc
+[connection master]
+INSTALL PLUGIN rpl_semi_sync_master SONAME 'SEMISYNC_MASTER_PLUGIN';
+INSTALL PLUGIN rpl_semi_sync_slave SONAME 'SEMISYNC_SLAVE_PLUGIN';
+UNINSTALL PLUGIN rpl_semi_sync_slave;
+UNINSTALL PLUGIN rpl_semi_sync_master;
+CREATE TABLE t1(i int);
+INSERT INTO t1 values (1);
+DROP TABLE t1;
+include/install_semisync.inc
+call mtr.add_suppression("Plugin 'rpl_semi_sync_slave' cannot be uninstalled now");
+UNINSTALL PLUGIN rpl_semi_sync_slave;
+ERROR HY000: Unknown error
+call mtr.add_suppression("Plugin 'rpl_semi_sync_master' cannot be uninstalled now");
+UNINSTALL PLUGIN rpl_semi_sync_master;
+ERROR HY000: Unknown error
+CREATE TABLE t1(i int);
+INSERT INTO t1 values (2);
+DROP TABLE t1;
+include/assert.inc [semi sync slave status should be ON.]
+include/assert.inc [semi sync master status should be ON.]
+include/assert.inc [semi sync master clients should be 1.]
+SET GLOBAL rpl_semi_sync_master_enabled = OFF;
+include/assert.inc [semi sync master clients should be 1.]
+UNINSTALL PLUGIN rpl_semi_sync_master;
+ERROR HY000: Unknown error
+include/stop_slave.inc
+SET GLOBAL rpl_semi_sync_slave_enabled = OFF;
+include/start_slave.inc
+UNINSTALL PLUGIN rpl_semi_sync_slave;
+include/assert.inc [semi sync master clients should be 0.]
+UNINSTALL PLUGIN rpl_semi_sync_master;
+CREATE TABLE t1(i int);
+INSERT INTO t1 values (3);
+DROP TABLE t1;
+include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/r/rpl_stop_slave.result b/mysql-test/suite/rpl/r/rpl_stop_slave.result
index 5959ee09993..b93ecce3597 100644
--- a/mysql-test/suite/rpl/r/rpl_stop_slave.result
+++ b/mysql-test/suite/rpl/r/rpl_stop_slave.result
@@ -94,10 +94,12 @@ DROP TABLE t1, t2;
CREATE TABLE t1 (c1 INT KEY, c2 INT) ENGINE=InnoDB;
CREATE TABLE t2 (c1 INT) ENGINE=MyISAM;
INSERT INTO t1 VALUES(1, 1);
+include/stop_slave.inc
[connection master]
+include/stop_dump_threads.inc
SET GLOBAL debug_dbug= '+d,dump_thread_wait_before_send_xid,*';
[connection slave]
-include/restart_slave.inc
+include/start_slave.inc
BEGIN;
UPDATE t1 SET c2 = 2 WHERE c1 = 1;
[connection master]
@@ -116,6 +118,9 @@ SET DEBUG_SYNC= 'now WAIT_FOR signal.continued';
[connection slave]
include/wait_for_slave_to_stop.inc
[connection slave1]
+[connection master]
+include/stop_dump_threads.inc
+[connection slave1]
include/start_slave.inc
[connection master]
DROP TABLE t1, t2;
diff --git a/mysql-test/suite/rpl/t/rpl_semi_sync.test b/mysql-test/suite/rpl/t/rpl_semi_sync.test
index 664ea732cac..091bbc38a15 100644
--- a/mysql-test/suite/rpl/t/rpl_semi_sync.test
+++ b/mysql-test/suite/rpl/t/rpl_semi_sync.test
@@ -548,6 +548,7 @@ source include/stop_slave.inc;
connection master;
echo [ on master ];
set sql_log_bin=0;
+--source include/stop_dump_threads.inc
UNINSTALL PLUGIN rpl_semi_sync_master;
set sql_log_bin=1;
enable_query_log;
@@ -601,19 +602,10 @@ SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
--echo #
--echo # Clean up
--echo #
+--source include/uninstall_semisync.inc
connection slave;
source include/stop_slave.inc;
-UNINSTALL PLUGIN rpl_semi_sync_slave;
-
-connection master;
-# The dump thread may still be running on the master, and so the following
-# UNINSTALL could generate a warning about the plugin is busy.
-disable_warnings;
-UNINSTALL PLUGIN rpl_semi_sync_master;
-enable_warnings;
-
-connection slave;
change master to master_user='root',master_password='';
source include/start_slave.inc;
diff --git a/mysql-test/suite/rpl/t/rpl_semi_sync_uninstall_plugin.test b/mysql-test/suite/rpl/t/rpl_semi_sync_uninstall_plugin.test
new file mode 100644
index 00000000000..2badd4203cf
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_semi_sync_uninstall_plugin.test
@@ -0,0 +1,145 @@
+###############################################################################
+# Bug#17638477 UNINSTALL AND INSTALL SEMI-SYNC PLUGIN CAUSES SLAVES TO BREAK
+# Problem: Uninstallation of Semi sync plugin should be blocked when it is
+# in use.
+# Test case: Uninstallation of semi sync should be allowed
+# On Master:
+# 1) When there is no dump thread
+# 2) When there are no semi sync slaves (i.e., async replication).
+# On Slave:
+# 1) When there is no I/O thread
+# 2) When there are no semi sync enabled I/O thread (i.e.,async replication).
+###############################################################################
+
+--source include/have_semisync_plugin.inc
+--source include/not_embedded.inc
+--source include/have_binlog_format_statement.inc
+--source include/master-slave.inc
+
+###############################################################################
+# Case 1: Uninstallation of semi sync plugins should be allowed when it is
+# not in use i.e., when asynchronous replication is active.
+###############################################################################
+# Step 1.1: Install semi sync master plugin on master
+--replace_result $SEMISYNC_MASTER_PLUGIN SEMISYNC_MASTER_PLUGIN
+eval INSTALL PLUGIN rpl_semi_sync_master SONAME '$SEMISYNC_MASTER_PLUGIN';
+
+# Step 1.2: Install semi sync slave plugin on slave
+--connection slave
+--replace_result $SEMISYNC_SLAVE_PLUGIN SEMISYNC_SLAVE_PLUGIN
+eval INSTALL PLUGIN rpl_semi_sync_slave SONAME '$SEMISYNC_SLAVE_PLUGIN';
+
+# Step 1.3: Uninstallation of semisync plugin on master and slave should be
+# allowed at this state as there is no semi sync replication enabled between
+# master and slave.
+UNINSTALL PLUGIN rpl_semi_sync_slave;
+--connection master
+UNINSTALL PLUGIN rpl_semi_sync_master;
+
+# Step 1.4: Check that replication is working fine at the end of the test case.
+CREATE TABLE t1(i int);
+INSERT INTO t1 values (1);
+DROP TABLE t1;
+--sync_slave_with_master
+
+###############################################################################
+# Case 2: Uninstallation of semi sync plugins should be disallowed
+# when it is in use i.e., when semi sync replication is active
+###############################################################################
+# Step 2.1: Install and enable semi sync replication between master and slave
+--source include/install_semisync.inc
+
+# Step 2.2: Check that rpl_semi_sync_slave uninstallation on Slave is not
+# possible at this state
+--connection slave
+call mtr.add_suppression("Plugin 'rpl_semi_sync_slave' cannot be uninstalled now");
+--error ER_UNKNOWN_ERROR
+UNINSTALL PLUGIN rpl_semi_sync_slave;
+
+# Step 2.3: Check that rpl_semi_sync_master uninstallation on Master is not
+# possible at this state
+--connection master
+call mtr.add_suppression("Plugin 'rpl_semi_sync_master' cannot be uninstalled now");
+--error ER_UNKNOWN_ERROR
+UNINSTALL PLUGIN rpl_semi_sync_master;
+
+# Step 2.4: Check that replication is working fine at the end of the test case.
+CREATE TABLE t1(i int);
+INSERT INTO t1 values (2);
+DROP TABLE t1;
+--sync_slave_with_master
+
+# Step 2.5: Make sure rpl_semi_sync_master_status on Master and
+# rpl_semi_sync_slave_staus on Slave are ON
+--let $slave_status=[show status like "Rpl_semi_sync_slave_status", Value, 1]
+--let assert_cond= "$slave_status" = "ON"
+--let assert_text= semi sync slave status should be ON.
+--source include/assert.inc
+
+--connection master
+--let $master_status=[show status like "Rpl_semi_sync_master_status", Value, 1]
+--let assert_cond= "$master_status" = "ON"
+--let assert_text= semi sync master status should be ON.
+--source include/assert.inc
+
+--let $master_clients=[show status like "Rpl_semi_sync_master_clients", Value, 1]
+--let assert_cond= $master_clients = 1
+--let assert_text= semi sync master clients should be 1.
+--source include/assert.inc
+
+###############################################################################
+# Case 3: Uninstallation of semi sync plugin should be disallowed when there
+# are semi sync slaves even though rpl_semi_sync_master_enabled= OFF;.
+###############################################################################
+# Step 3.1: Disable semi sync on master
+--connection master
+SET GLOBAL rpl_semi_sync_master_enabled = OFF;
+
+# Step 3.2: Check that still Rpl_semi_sync_master_clients is 1
+--let $master_clients=[show status like "Rpl_semi_sync_master_clients", Value, 1]
+--let assert_cond= $master_clients = 1
+--let assert_text= semi sync master clients should be 1.
+--source include/assert.inc
+
+# Step 3.3: Since Rpl_semi_sync_master_clients is 1, uninstallation of
+# rpl_semi_sync_master should be disallowed.
+--error ER_UNKNOWN_ERROR
+UNINSTALL PLUGIN rpl_semi_sync_master;
+
+###############################################################################
+# Case 4: Uninstallation of semi sync plugin should be allowed when it is not
+# in use. Same as Case 1 but this case is to check the case after enabling and
+# disabling semi sync replication.
+###############################################################################
+
+# Step 4.1: Stop IO thread on slave.
+--connection slave
+--source include/stop_slave.inc
+
+# Step 4.2: Disable semi sync on slave.
+SET GLOBAL rpl_semi_sync_slave_enabled = OFF;
+
+# Step 4.3: Start IO thread on slave.
+--source include/start_slave.inc
+
+# Step 4.4: Uninstall semi sync plugin, it should be successful now.
+UNINSTALL PLUGIN rpl_semi_sync_slave;
+
+# Step 4.5: On Master, check that semi sync slaves are now '0'.
+--connection master
+--let $master_clients=[show status like "Rpl_semi_sync_master_clients", Value, 1]
+--let assert_cond= $master_clients = 0
+--let assert_text= semi sync master clients should be 0.
+--source include/assert.inc
+
+# Step 4.6: So uninstalling semi sync plugin should be allowed
+UNINSTALL PLUGIN rpl_semi_sync_master;
+
+# Step 4.7: Check that replication is working fine at the end of the test case
+CREATE TABLE t1(i int);
+INSERT INTO t1 values (3);
+DROP TABLE t1;
+--sync_slave_with_master
+
+# Cleanup
+source include/rpl_end.inc;
diff --git a/mysql-test/suite/rpl/t/rpl_stop_slave.test b/mysql-test/suite/rpl/t/rpl_stop_slave.test
index d9d7f39c321..340738f8cb2 100644
--- a/mysql-test/suite/rpl/t/rpl_stop_slave.test
+++ b/mysql-test/suite/rpl/t/rpl_stop_slave.test
@@ -74,14 +74,17 @@ CREATE TABLE t2 (c1 INT) ENGINE=MyISAM;
INSERT INTO t1 VALUES(1, 1);
sync_slave_with_master;
+--source include/stop_slave.inc
--source include/rpl_connection_master.inc
+# make sure that there are no zombie threads
+--source include/stop_dump_threads.inc
let $debug_save= `SELECT @@GLOBAL.debug`;
SET GLOBAL debug_dbug= '+d,dump_thread_wait_before_send_xid,*';
--source include/rpl_connection_slave.inc
-source include/restart_slave_sql.inc;
+--source include/start_slave.inc
BEGIN;
UPDATE t1 SET c2 = 2 WHERE c1 = 1;
@@ -93,6 +96,10 @@ INSERT INTO t2 VALUES(1);
UPDATE t1 SET c2 = 3 WHERE c1 = 1;
COMMIT;
+# wait for the dump thread reach the sync point
+--let $wait_condition= select count(*)=1 from information_schema.processlist where state LIKE '%debug sync point%' and command='Binlog Dump'
+--source include/wait_condition.inc
+
--source include/rpl_connection_slave1.inc
let $show_statement= SHOW PROCESSLIST;
let $field= Info;
@@ -105,6 +112,7 @@ send STOP SLAVE;
ROLLBACK;
--source include/rpl_connection_master.inc
+
SET DEBUG_SYNC= 'now SIGNAL signal.continue';
SET DEBUG_SYNC= 'now WAIT_FOR signal.continued';
@@ -113,12 +121,25 @@ source include/wait_for_slave_to_stop.inc;
--source include/rpl_connection_slave1.inc
reap;
-source include/start_slave.inc;
+# Slave has stopped, thence lets make sure that
+# we kill the zombie dump threads. Also, make
+# sure that we disable the DBUG_EXECUTE_IF
+# that would set the dump thread to wait
--source include/rpl_connection_master.inc
-DROP TABLE t1, t2;
--disable_query_log
eval SET GLOBAL debug_dbug= '$debug_save';
--enable_query_log
+# make sure that there are no zombie threads
+--source include/stop_dump_threads.inc
+
+--source include/rpl_connection_slave1.inc
+# now the dump thread on the master will start
+# from a clean slate, i.e. without the
+# DBUG_EXECUTE_IF set
+source include/start_slave.inc;
+
+--source include/rpl_connection_master.inc
+DROP TABLE t1, t2;
--source include/rpl_end.inc
SET DEBUG_SYNC= 'RESET';
diff --git a/mysql-test/suite/sys_vars/r/timed_mutexes_basic.result b/mysql-test/suite/sys_vars/r/timed_mutexes_basic.result
index 50a5285b0d7..8c295fe8063 100644
--- a/mysql-test/suite/sys_vars/r/timed_mutexes_basic.result
+++ b/mysql-test/suite/sys_vars/r/timed_mutexes_basic.result
@@ -4,7 +4,11 @@ SELECT @global_start_value;
0
'#--------------------FN_DYNVARS_177_01------------------------#'
SET @@global.timed_mutexes = 1;
+Warnings:
+Warning 1287 '@@timed_mutexes' is deprecated and will be removed in a future release.
SET @@global.timed_mutexes = DEFAULT;
+Warnings:
+Warning 1287 '@@timed_mutexes' is deprecated and will be removed in a future release.
SELECT @@global.timed_mutexes;
@@global.timed_mutexes
0
@@ -17,15 +21,21 @@ SELECT @@timed_mutexes;
SELECT global.timed_mutexes;
ERROR 42S02: Unknown table 'global' in field list
SET global timed_mutexes = 1;
+Warnings:
+Warning 1287 '@@timed_mutexes' is deprecated and will be removed in a future release.
SELECT @@global.timed_mutexes;
@@global.timed_mutexes
1
'#--------------------FN_DYNVARS_177_03------------------------#'
SET @@global.timed_mutexes = 0;
+Warnings:
+Warning 1287 '@@timed_mutexes' is deprecated and will be removed in a future release.
SELECT @@global.timed_mutexes;
@@global.timed_mutexes
0
SET @@global.timed_mutexes = 1;
+Warnings:
+Warning 1287 '@@timed_mutexes' is deprecated and will be removed in a future release.
SELECT @@global.timed_mutexes;
@@global.timed_mutexes
1
@@ -82,23 +92,33 @@ VARIABLE_VALUE
ON
'#---------------------FN_DYNVARS_177_08-------------------------#'
SET @@global.timed_mutexes = OFF;
+Warnings:
+Warning 1287 '@@timed_mutexes' is deprecated and will be removed in a future release.
SELECT @@global.timed_mutexes;
@@global.timed_mutexes
0
SET @@global.timed_mutexes = ON;
+Warnings:
+Warning 1287 '@@timed_mutexes' is deprecated and will be removed in a future release.
SELECT @@global.timed_mutexes;
@@global.timed_mutexes
1
'#---------------------FN_DYNVARS_177_09----------------------#'
SET @@global.timed_mutexes = TRUE;
+Warnings:
+Warning 1287 '@@timed_mutexes' is deprecated and will be removed in a future release.
SELECT @@global.timed_mutexes;
@@global.timed_mutexes
1
SET @@global.timed_mutexes = FALSE;
+Warnings:
+Warning 1287 '@@timed_mutexes' is deprecated and will be removed in a future release.
SELECT @@global.timed_mutexes;
@@global.timed_mutexes
0
SET @@global.timed_mutexes = @global_start_value;
+Warnings:
+Warning 1287 '@@timed_mutexes' is deprecated and will be removed in a future release.
SELECT @@global.timed_mutexes;
@@global.timed_mutexes
0
diff --git a/mysql-test/t/func_str.test b/mysql-test/t/func_str.test
index c61ebbfa4bd..3c3de4240ab 100644
--- a/mysql-test/t/func_str.test
+++ b/mysql-test/t/func_str.test
@@ -1583,6 +1583,11 @@ call foo('(( 00000000 ++ 00000000 ))');
drop procedure foo;
drop table t1,t2;
+#
+# Bug#18786138 SHA/MD5 HASHING FUNCTIONS DIE WITH "FILENAME" CHARACTER SET
+#
+select md5(_filename "a"), sha(_filename "a");
+
--echo #
--echo # End of 5.5 tests
--echo #
diff --git a/mysql-test/t/group_min_max.test b/mysql-test/t/group_min_max.test
index 85559afb7b3..8d5863db176 100644
--- a/mysql-test/t/group_min_max.test
+++ b/mysql-test/t/group_min_max.test
@@ -1404,6 +1404,31 @@ drop table t1;
--echo # End of test#50539.
--echo #
+--echo # Bug#17217128 - BAD INTERACTION BETWEEN MIN/MAX AND
+--echo # "HAVING SUM(DISTINCT)": WRONG RESULTS.
+--echo #
+
+CREATE TABLE t (a INT, b INT, KEY(a,b));
+INSERT INTO t VALUES (1,1), (2,2), (3,3), (4,4), (1,0), (3,2), (4,5);
+ANALYZE TABLE t;
+
+SELECT a, SUM(DISTINCT a), MIN(b) FROM t GROUP BY a;
+EXPLAIN SELECT a, SUM(DISTINCT a), MIN(b) FROM t GROUP BY a;
+
+SELECT a, SUM(DISTINCT a), MAX(b) FROM t GROUP BY a;
+EXPLAIN SELECT a, SUM(DISTINCT a), MAX(b) FROM t GROUP BY a;
+
+SELECT a, MAX(b) FROM t GROUP BY a HAVING SUM(DISTINCT a);
+EXPLAIN SELECT a, MAX(b) FROM t GROUP BY a HAVING SUM(DISTINCT a);
+
+SELECT SUM(DISTINCT a), MIN(b), MAX(b) FROM t;
+EXPLAIN SELECT SUM(DISTINCT a), MIN(b), MAX(b) FROM t;
+
+SELECT a, SUM(DISTINCT a), MIN(b), MAX(b) FROM t GROUP BY a;
+EXPLAIN SELECT a, SUM(DISTINCT a), MIN(b), MAX(b) FROM t GROUP BY a;
+DROP TABLE t;
+
+--echo #
--echo # MDEV-4219 A simple select query returns random data (upstream bug#68473)
--echo #
diff --git a/mysql-test/t/group_min_max_innodb.test b/mysql-test/t/group_min_max_innodb.test
index 7038eb2ff47..6967f847147 100644
--- a/mysql-test/t/group_min_max_innodb.test
+++ b/mysql-test/t/group_min_max_innodb.test
@@ -137,3 +137,96 @@ SELECT COUNT(DISTINCT a) FROM t1 WHERE b = 'b';
DROP TABLE t1;
--echo End of 5.5 tests
+
+--echo #
+--echo # Bug#17909656 - WRONG RESULTS FOR A SIMPLE QUERY WITH GROUP BY
+--echo #
+
+CREATE TABLE t0 (
+ i1 INTEGER NOT NULL
+);
+
+INSERT INTO t0 VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),
+ (11),(12),(13),(14),(15),(16),(17),(18),(19),(20),
+ (21),(22),(23),(24),(25),(26),(27),(28),(29),(30);
+
+CREATE TABLE t1 (
+ c1 CHAR(1) NOT NULL,
+ i1 INTEGER NOT NULL,
+ i2 INTEGER NOT NULL,
+ UNIQUE KEY k1 (c1,i2)
+) ENGINE=InnoDB;
+
+INSERT INTO t1 SELECT 'A',i1,i1 FROM t0;
+INSERT INTO t1 SELECT 'B',i1,i1 FROM t0;
+INSERT INTO t1 SELECT 'C',i1,i1 FROM t0;
+INSERT INTO t1 SELECT 'D',i1,i1 FROM t0;
+INSERT INTO t1 SELECT 'E',i1,i1 FROM t0;
+INSERT INTO t1 SELECT 'F',i1,i1 FROM t0;
+
+CREATE TABLE t2 (
+ c1 CHAR(1) NOT NULL,
+ i1 INTEGER NOT NULL,
+ i2 INTEGER NOT NULL,
+ UNIQUE KEY k2 (c1,i1,i2)
+) ENGINE=InnoDB;
+
+INSERT INTO t2 SELECT 'A',i1,i1 FROM t0;
+INSERT INTO t2 SELECT 'B',i1,i1 FROM t0;
+INSERT INTO t2 SELECT 'C',i1,i1 FROM t0;
+INSERT INTO t2 SELECT 'D',i1,i1 FROM t0;
+INSERT INTO t2 SELECT 'E',i1,i1 FROM t0;
+INSERT INTO t2 SELECT 'F',i1,i1 FROM t0;
+
+-- disable_result_log
+ANALYZE TABLE t1;
+ANALYZE TABLE t2;
+-- enable_result_log
+
+let query=
+SELECT c1, max(i2) FROM t1 WHERE (c1 = 'C' AND i2 = 17) OR ( c1 = 'F')
+GROUP BY c1;
+eval EXPLAIN $query;
+eval $query;
+
+let query=
+SELECT c1, max(i2) FROM t1 WHERE (c1 = 'C' OR ( c1 = 'F' AND i2 = 17))
+GROUP BY c1;
+eval EXPLAIN $query;
+eval $query;
+
+let query=
+SELECT c1, max(i2) FROM t1 WHERE (c1 = 'C' OR c1 = 'F' ) AND ( i2 = 17 )
+GROUP BY c1;
+eval EXPLAIN $query;
+eval $query;
+
+let query=
+SELECT c1, max(i2) FROM t1
+WHERE ((c1 = 'C' AND (i2 = 40 OR i2 = 30)) OR ( c1 = 'F' AND (i2 = 40 )))
+GROUP BY c1;
+eval EXPLAIN $query;
+eval $query;
+
+let query=
+SELECT c1, i1, max(i2) FROM t2
+WHERE (c1 = 'C' OR ( c1 = 'F' AND i1 < 35)) AND ( i2 = 17 )
+GROUP BY c1,i1;
+eval EXPLAIN $query;
+eval $query;
+
+let query=
+SELECT c1, i1, max(i2) FROM t2
+WHERE (((c1 = 'C' AND i1 < 40) OR ( c1 = 'F' AND i1 < 35)) AND ( i2 = 17 ))
+GROUP BY c1,i1;
+eval EXPLAIN $query;
+eval $query;
+
+let query=
+SELECT c1, i1, max(i2) FROM t2
+WHERE ((c1 = 'C' AND i1 < 40) OR ( c1 = 'F' AND i1 < 35) OR ( i2 = 17 ))
+GROUP BY c1,i1;
+eval EXPLAIN $query;
+eval $query;
+
+DROP TABLE t0,t1,t2;
diff --git a/mysql-test/t/long_tmpdir-master.sh b/mysql-test/t/long_tmpdir-master.sh
index 7bcbee26105..7bcbee26105 100644..100755
--- a/mysql-test/t/long_tmpdir-master.sh
+++ b/mysql-test/t/long_tmpdir-master.sh
diff --git a/mysql-test/t/lowercase_mixed_tmpdir-master.sh b/mysql-test/t/lowercase_mixed_tmpdir-master.sh
index 9330d0581ee..9330d0581ee 100644..100755
--- a/mysql-test/t/lowercase_mixed_tmpdir-master.sh
+++ b/mysql-test/t/lowercase_mixed_tmpdir-master.sh
diff --git a/mysql-test/t/lowercase_table4-master.opt b/mysql-test/t/lowercase_table4-master.opt
index c0a1981fa7c..ac4d3211e89 100644
--- a/mysql-test/t/lowercase_table4-master.opt
+++ b/mysql-test/t/lowercase_table4-master.opt
@@ -1 +1 @@
---lower-case-table-names=2
+--lower-case-table-names=2
diff --git a/mysql-test/t/partition_pruning.test b/mysql-test/t/partition_pruning.test
index 69f159e8142..a34ffe7b365 100644
--- a/mysql-test/t/partition_pruning.test
+++ b/mysql-test/t/partition_pruning.test
@@ -1415,6 +1415,54 @@ explain partitions select * from t1 where a between 10 and 10+33;
drop table t0, t1;
--echo #
+--echo # Bug#71095: Wrong results with PARTITION BY LIST COLUMNS()
+--echo #
+CREATE TABLE t1
+(c1 int,
+ c2 int,
+ c3 int,
+ c4 int,
+ PRIMARY KEY (c1,c2))
+PARTITION BY LIST COLUMNS (c2)
+(PARTITION p1 VALUES IN (1,2),
+ PARTITION p2 VALUES IN (3,4));
+INSERT INTO t1 VALUES (1, 1, 1, 1), (2, 3, 1, 1);
+INSERT INTO t1 VALUES (1, 2, 1, 1), (2, 4, 1, 1);
+SELECT * FROM t1 WHERE c1 = 1 AND c2 < 1;
+SELECT * FROM t1 WHERE c1 = 1 AND c2 <= 1;
+SELECT * FROM t1 WHERE c1 = 1 AND c2 = 1;
+SELECT * FROM t1 WHERE c1 = 1 AND c2 >= 1;
+SELECT * FROM t1 WHERE c1 = 1 AND c2 > 1;
+SELECT * FROM t1 WHERE c1 = 1 AND c2 < 3;
+SELECT * FROM t1 WHERE c1 = 1 AND c2 <= 3;
+SELECT * FROM t1 WHERE c1 = 2 AND c2 <= 3;
+SELECT * FROM t1 WHERE c1 = 2 AND c2 = 3;
+SELECT * FROM t1 WHERE c1 = 2 AND c2 >= 3;
+SELECT * FROM t1 WHERE c1 = 2 AND c2 > 3;
+SELECT * FROM t1 WHERE c1 = 2 AND c2 < 4;
+SELECT * FROM t1 WHERE c1 = 2 AND c2 <= 4;
+SELECT * FROM t1 WHERE c1 = 2 AND c2 = 4;
+SELECT * FROM t1 WHERE c1 = 2 AND c2 >= 4;
+SELECT * FROM t1 WHERE c1 = 2 AND c2 > 4;
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 1 AND c2 < 1;
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 1 AND c2 <= 1;
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 1 AND c2 = 1;
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 1 AND c2 >= 1;
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 1 AND c2 > 1;
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 1 AND c2 < 3;
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 1 AND c2 <= 3;
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 2 AND c2 <= 3;
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 2 AND c2 = 3;
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 2 AND c2 >= 3;
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 2 AND c2 > 3;
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 2 AND c2 < 4;
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 2 AND c2 <= 4;
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 2 AND c2 = 4;
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 2 AND c2 >= 4;
+EXPLAIN PARTITIONS SELECT * FROM t1 WHERE c1 = 2 AND c2 > 4;
+DROP TABLE t1;
+
+--echo #
--echo # MDEV-6239: Partition pruning is not working as expected in an inner query
--echo #
diff --git a/mysql-test/t/union.test b/mysql-test/t/union.test
index 877509a9fc0..a5d7dae606f 100644
--- a/mysql-test/t/union.test
+++ b/mysql-test/t/union.test
@@ -1273,6 +1273,36 @@ SELECT(SELECT 1 AS a ORDER BY a) AS dev;
SELECT(SELECT 1 AS a LIMIT 1) AS dev;
SELECT(SELECT 1 AS a FROM dual ORDER BY a DESC LIMIT 1) AS dev;
+
+--echo #
+--echo # Bug #17059925 : UNIONS COMPUTES ROWS_EXAMINED INCORRECTLY
+--echo #
+
+## Save current state of slow log variables
+SET @old_slow_query_log= @@global.slow_query_log;
+SET @old_log_output= @@global.log_output;
+SET @old_long_query_time= @@long_query_time;
+SET GLOBAL log_output= "TABLE";
+SET GLOBAL slow_query_log= ON;
+SET SESSION long_query_time= 0;
+
+CREATE TABLE t17059925 (a INT);
+CREATE TABLE t2 (b INT);
+CREATE TABLE t3 (c INT);
+INSERT INTO t17059925 VALUES (1), (2), (3);
+INSERT INTO t2 VALUES (4), (5), (6);
+INSERT INTO t3 VALUES (7), (8), (9);
+TRUNCATE table mysql.slow_log;
+--sorted_result
+SELECT * FROM t17059925 UNION SELECT * FROM t2 UNION SELECT * FROM t3;
+SELECT sql_text, rows_examined FROM mysql.slow_log WHERE sql_text LIKE '%SELECT%t17059925%';
+DROP TABLE t17059925, t2, t3;
+
+## Reset to initial values
+SET @@long_query_time= @old_long_query_time;
+SET @@global.log_output= @old_log_output;
+SET @@global.slow_query_log= @old_slow_query_log;
+
--echo #
--echo # lp:1010729: Unexpected syntax error from UNION
--echo # (bug #54382) with single-table join nest
diff --git a/mysql-test/t/view.test b/mysql-test/t/view.test
index 5f3e69431ee..9cb9deff3f8 100644
--- a/mysql-test/t/view.test
+++ b/mysql-test/t/view.test
@@ -4700,6 +4700,47 @@ DROP DATABASE IF EXISTS nodb;
--error ER_BAD_DB_ERROR
CREATE VIEW nodb.a AS SELECT 1;
+
+--echo #
+--echo # BUG#14117018 - MYSQL SERVER CREATES INVALID VIEW DEFINITION
+--echo # BUG#18405221 - SHOW CREATE VIEW OUTPUT INCORRECT
+--echo #
+
+CREATE VIEW v1 AS (SELECT '' FROM DUAL);
+CREATE VIEW v2 AS (SELECT 'BUG#14117018' AS col1 FROM DUAL) UNION ALL
+ (SELECT '' FROM DUAL);
+CREATE VIEW v3 AS (SELECT 'BUG#14117018' AS col1 FROM DUAL) UNION ALL
+ (SELECT '' FROM DUAL) UNION ALL
+ (SELECT '' FROM DUAL);
+CREATE VIEW v4 AS (SELECT 'BUG#14117018' AS col1 FROM DUAL) UNION ALL
+ (SELECT '' AS col2 FROM DUAL) UNION ALL
+ (SELECT '' FROM DUAL);
+
+# In the second (and later) UNIONed queries, duplicate column names are allowed
+CREATE VIEW v5 AS (SELECT 'buggy' AS col1, 'fix' as col2 FROM DUAL) UNION ALL
+ (SELECT 'buggy' as a, 'fix' as a FROM DUAL);
+
+--echo # Name for the column in select1 is set properly with or
+--echo # without this fix.
+SHOW CREATE VIEW v1;
+
+--echo # Name for the column in select2 is set with this fix.
+--echo # Without this fix, name would not have set for the
+--echo # columns in select2.
+SHOW CREATE VIEW v2;
+
+--echo # Name for the field item in select2 & select3 is set with this fix.
+--echo # Without this fix, name would not have set for the
+--echo # columns in select2 & select3.
+SHOW CREATE VIEW v3;
+
+--echo # Name for the field item in select3 is set with this fix.
+--echo # Without this fix, name would not have set for the
+--echo # columns in select3.
+SHOW CREATE VIEW v4;
+
+DROP VIEW v1, v2, v3, v4, v5;
+
# Check that all connections opened by test cases in this file are really
# gone so execution of other tests won't be affected by their presence.
--source include/wait_until_count_sessions.inc
diff --git a/mysys/CMakeLists.txt b/mysys/CMakeLists.txt
index e0f2de4a61b..06a811f0994 100644
--- a/mysys/CMakeLists.txt
+++ b/mysys/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2006, 2013, Oracle and/or its affiliates
+# Copyright (c) 2006, 2014, Oracle and/or its affiliates
#
# 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
@@ -87,7 +87,6 @@ ADD_EXECUTABLE(thr_lock thr_lock.c)
TARGET_LINK_LIBRARIES(thr_lock mysys)
SET_TARGET_PROPERTIES(thr_lock PROPERTIES COMPILE_FLAGS "-DMAIN")
-INSTALL_DEBUG_SYMBOLS(mysys)
IF(MSVC)
INSTALL_DEBUG_TARGET(mysys DESTINATION ${INSTALL_LIBDIR}/debug)
ENDIF()
diff --git a/mysys/mf_iocache2.c b/mysys/mf_iocache2.c
index c447c4b44a1..c9bec6f1f5d 100644
--- a/mysys/mf_iocache2.c
+++ b/mysys/mf_iocache2.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2000, 2014, 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
@@ -456,6 +456,13 @@ process_flags:
goto err;
}
}
+ else if (*fmt == 'c') /* char type parameter */
+ {
+ char par[2];
+ par[0] = va_arg(args, int);
+ if (my_b_write(info, (uchar*) par, 1))
+ goto err;
+ }
else if (*fmt == 'b') /* Sized buffer parameter, only precision makes sense */
{
char *par = va_arg(args, char *);
diff --git a/packaging/rpm-oel/filter-requires.sh b/packaging/rpm-oel/filter-requires.sh
index 521eb0ca7d9..3fdf43870fa 100755
--- a/packaging/rpm-oel/filter-requires.sh
+++ b/packaging/rpm-oel/filter-requires.sh
@@ -2,5 +2,5 @@
#
/usr/lib/rpm/perl.req $* |
-sed -e '/perl(hostnames)/d' -e '/perl(lib::mtr.*/d' -e '/perl(lib::v1.*/d' -e '/perl(mtr_.*/d' -e '/perl(My::.*/d'
+sed -e '/perl(GD)/d' -e '/perl(hostnames)/d' -e '/perl(lib::mtr.*/d' -e '/perl(lib::v1.*/d' -e '/perl(mtr_.*/d' -e '/perl(My::.*/d'
diff --git a/packaging/rpm-oel/mysql.spec.in b/packaging/rpm-oel/mysql.spec.in
index d28e89b4216..ba57515678c 100644
--- a/packaging/rpm-oel/mysql.spec.in
+++ b/packaging/rpm-oel/mysql.spec.in
@@ -85,7 +85,7 @@ Name: mysql-%{product_suffix}
Summary: A very fast and reliable SQL database server
Group: Applications/Databases
Version: @VERSION@
-Release: 2%{?commercial:.1}%{?dist}
+Release: 4%{?commercial:.1}%{?dist}
License: Copyright (c) 2000, @MYSQL_COPYRIGHT_YEAR@, %{mysql_vendor}. All rights reserved. Under %{?license_type} license as shown in the Description field.
Source0: https://cdn.mysql.com/Downloads/MySQL-@MYSQL_BASE_VERSION@/%{src_dir}.tar.gz
URL: http://www.mysql.com/
@@ -118,7 +118,7 @@ BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
%if 0%{?rhel} > 6
# For rpm => 4.9 only: https://fedoraproject.org/wiki/Packaging:AutoProvidesAndRequiresFiltering
-%global __requires_exclude ^perl\\((hostnames|lib::mtr|lib::v1|mtr_|My::)
+%global __requires_exclude ^perl\\((GD|hostnames|lib::mtr|lib::v1|mtr_|My::)
%global __provides_exclude_from ^(/usr/share/(mysql|mysql-test)/.*|%{_libdir}/mysql/plugin/.*\\.so)$
%else
# https://fedoraproject.org/wiki/EPEL:Packaging#Generic_Filtering_on_EPEL6
@@ -166,6 +166,7 @@ Requires: mysql-community-common%{?_isa} = %{version}-%{release}
Obsoletes: MySQL-server < %{version}-%{release}
Obsoletes: mysql-server < %{version}-%{release}
Obsoletes: mariadb-server
+Obsoletes: mariadb-galera-server
Provides: mysql-server = %{version}-%{release}
Provides: mysql-server%{?_isa} = %{version}-%{release}
%if 0%{?systemd}
@@ -262,6 +263,25 @@ This package contains the MySQL regression test suite for MySQL
database server.
+%package bench
+Summary: MySQL benchmark suite
+Group: Applications/Databases
+%if 0%{?commercial}
+Obsoletes: mysql-community-bench < %{version}-%{release}
+Requires: mysql-enterprise-server%{?_isa} = %{version}-%{release}
+%else
+Requires: mysql-community-server%{?_isa} = %{version}-%{release}
+%endif
+Obsoletes: mariadb-bench
+Obsoletes: community-mysql-bench < %{version}-%{release}
+Obsoletes: mysql-bench < %{version}-%{release}
+Provides: mysql-bench = %{version}-%{release}
+Provides: mysql-bench%{?_isa} = %{version}-%{release}
+
+%description bench
+This package contains the MySQL Benchmark Suite for MySQL database
+server.
+
%package devel
Summary: Development header files and libraries for MySQL database client applications
Group: Applications/Databases
@@ -344,6 +364,7 @@ Requires: mysql-enterprise-common%{?_isa} = %{version}-%{release}
Provides: MySQL-embedded%{?_isa} = %{version}-%{release}
Requires: mysql-community-common%{?_isa} = %{version}-%{release}
%endif
+Obsoletes: mariadb-embedded
Obsoletes: MySQL-embedded < %{version}-%{release}
Obsoletes: mysql-embedded < %{version}-%{release}
Provides: mysql-embedded = %{version}-%{release}
@@ -372,6 +393,7 @@ Requires: mysql-enterprise-embedded%{?_isa} = %{version}-%{release}
Requires: mysql-community-devel%{?_isa} = %{version}-%{release}
Requires: mysql-community-embedded%{?_isa} = %{version}-%{release}
%endif
+Obsoletes: mariadb-embedded-devel
Obsoletes: mysql-embedded-devel < %{version}-%{release}
Provides: mysql-embedded-devel = %{version}-%{release}
Provides: mysql-embedded-devel%{?_isa} = %{version}-%{release}
@@ -472,11 +494,13 @@ mkdir debug
cmake ../%{src_dir} \
-DBUILD_CONFIG=mysql_release \
-DINSTALL_LAYOUT=RPM \
- -DCMAKE_BUILD_TYPE=Debug %{?el7:-DENABLE_DTRACE=OFF} \
+ -DCMAKE_BUILD_TYPE=Debug \
+ -DENABLE_DTRACE=OFF \
-DCMAKE_C_FLAGS="$optflags" \
-DCMAKE_CXX_FLAGS="$optflags" \
-DINSTALL_LIBDIR="%{_lib}/mysql" \
-DINSTALL_PLUGINDIR="%{_lib}/mysql/plugin" \
+ -DINSTALL_SQLBENCHDIR=share \
-DMYSQL_UNIX_ADDR="%{mysqldatadir}/mysql.sock" \
-DFEATURE_SET="%{feature_set}" \
-DWITH_EMBEDDED_SERVER=1 \
@@ -495,11 +519,13 @@ mkdir release
cmake ../%{src_dir} \
-DBUILD_CONFIG=mysql_release \
-DINSTALL_LAYOUT=RPM \
- -DCMAKE_BUILD_TYPE=RelWithDebInfo %{?el7:-DENABLE_DTRACE=OFF} \
+ -DCMAKE_BUILD_TYPE=RelWithDebInfo \
+ -DENABLE_DTRACE=OFF \
-DCMAKE_C_FLAGS="%{optflags}" \
-DCMAKE_CXX_FLAGS="%{optflags}" \
-DINSTALL_LIBDIR="%{_lib}/mysql" \
-DINSTALL_PLUGINDIR="%{_lib}/mysql/plugin" \
+ -DINSTALL_SQLBENCHDIR=share \
-DMYSQL_UNIX_ADDR="%{mysqldatadir}/mysql.sock" \
-DFEATURE_SET="%{feature_set}" \
-DWITH_EMBEDDED_SERVER=1 \
@@ -862,6 +888,10 @@ fi
%attr(644, root, root) %{_mandir}/man1/mysql_client_test_embedded.1*
%attr(644, root, root) %{_mandir}/man1/mysqltest_embedded.1*
+%files bench
+%defattr(-, root, root, -)
+%{_datadir}/sql-bench
+
%files embedded
%defattr(-, root, root, -)
%dir %attr(755, root, root) %{_libdir}/mysql
@@ -881,6 +911,19 @@ fi
%endif
%changelog
+* Tue Jul 08 2014 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.5.39-4
+- Remove perl(GD) and dtrace dependencies
+
+* Tue Jul 01 2014 Bjorn Munch <bjorn.munch@oracle.com> - 5.5.39-3
+- Disable dtrace, as it fails on OEL6 boxes with Oracle dtrace installed
+
+* Thu Jun 26 2014 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.5.39-2
+- Resolve embedded-devel conflict issue
+
+* Wed Jun 25 2014 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.5.39-1
+- Add bench package
+- Enable dtrace
+
* Sun May 11 2014 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.5.38-2
- Increment release version to resolve upgrade conflict issue
diff --git a/packaging/rpm-uln/CMakeLists.txt b/packaging/rpm-uln/CMakeLists.txt
deleted file mode 100644
index c8f13379697..00000000000
--- a/packaging/rpm-uln/CMakeLists.txt
+++ /dev/null
@@ -1,38 +0,0 @@
-# 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()
-
diff --git a/packaging/rpm-uln/README-ULN b/packaging/rpm-uln/README-ULN
deleted file mode 100644
index 8ae44a18605..00000000000
--- a/packaging/rpm-uln/README-ULN
+++ /dev/null
@@ -1,15 +0,0 @@
-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.
-
-
diff --git a/packaging/rpm-uln/README.mysql-docs b/packaging/rpm-uln/README.mysql-docs
deleted file mode 100644
index dd894a7b9c0..00000000000
--- a/packaging/rpm-uln/README.mysql-docs
+++ /dev/null
@@ -1,4 +0,0 @@
-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/
diff --git a/packaging/rpm-uln/filter-requires-mysql.sh b/packaging/rpm-uln/filter-requires-mysql.sh
deleted file mode 100755
index d435062b8dc..00000000000
--- a/packaging/rpm-uln/filter-requires-mysql.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-/usr/lib/rpm/perl.req $* | grep -v -e "perl(th" -e "perl(lib::mtr" -e "perl(mtr"
diff --git a/packaging/rpm-uln/generate-tarball.sh b/packaging/rpm-uln/generate-tarball.sh
deleted file mode 100755
index 2ff4bff2349..00000000000
--- a/packaging/rpm-uln/generate-tarball.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/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
diff --git a/packaging/rpm-uln/my.cnf b/packaging/rpm-uln/my.cnf
deleted file mode 100644
index fae0fa276e1..00000000000
--- a/packaging/rpm-uln/my.cnf
+++ /dev/null
@@ -1,10 +0,0 @@
-[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
diff --git a/packaging/rpm-uln/my_config.h b/packaging/rpm-uln/my_config.h
deleted file mode 100644
index 435a126ac97..00000000000
--- a/packaging/rpm-uln/my_config.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * 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
diff --git a/packaging/rpm-uln/mysql-5.5-errno.patch b/packaging/rpm-uln/mysql-5.5-errno.patch
deleted file mode 100644
index 033e5195973..00000000000
--- a/packaging/rpm-uln/mysql-5.5-errno.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-"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 */
diff --git a/packaging/rpm-uln/mysql-5.5-fix-tests.patch b/packaging/rpm-uln/mysql-5.5-fix-tests.patch
deleted file mode 100644
index a1ab7a82210..00000000000
--- a/packaging/rpm-uln/mysql-5.5-fix-tests.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-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)
-
diff --git a/packaging/rpm-uln/mysql-5.5-libdir.patch b/packaging/rpm-uln/mysql-5.5-libdir.patch
deleted file mode 100644
index 2ab3e9eec27..00000000000
--- a/packaging/rpm-uln/mysql-5.5-libdir.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-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()
- #
-
diff --git a/packaging/rpm-uln/mysql-5.5-mtr1.patch b/packaging/rpm-uln/mysql-5.5-mtr1.patch
deleted file mode 100644
index 7a7dc85f16c..00000000000
--- a/packaging/rpm-uln/mysql-5.5-mtr1.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-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 )
- {
-
diff --git a/packaging/rpm-uln/mysql-5.5-stack-guard.patch b/packaging/rpm-uln/mysql-5.5-stack-guard.patch
deleted file mode 100644
index b2624d982de..00000000000
--- a/packaging/rpm-uln/mysql-5.5-stack-guard.patch
+++ /dev/null
@@ -1,140 +0,0 @@
-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
-
diff --git a/packaging/rpm-uln/mysql-5.5-testing.patch b/packaging/rpm-uln/mysql-5.5-testing.patch
deleted file mode 100644
index 74387135346..00000000000
--- a/packaging/rpm-uln/mysql-5.5-testing.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-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 ; \
diff --git a/packaging/rpm-uln/mysql-chain-certs.patch b/packaging/rpm-uln/mysql-chain-certs.patch
deleted file mode 100644
index 4e26af16cb0..00000000000
--- a/packaging/rpm-uln/mysql-chain-certs.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-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);
- }
-
-
diff --git a/packaging/rpm-uln/mysql-embedded-check.c b/packaging/rpm-uln/mysql-embedded-check.c
deleted file mode 100644
index 8bf8ca53dad..00000000000
--- a/packaging/rpm-uln/mysql-embedded-check.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* 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;
-}
diff --git a/packaging/rpm-uln/mysql-expired-certs.patch b/packaging/rpm-uln/mysql-expired-certs.patch
deleted file mode 100644
index acd3a78cce7..00000000000
--- a/packaging/rpm-uln/mysql-expired-certs.patch
+++ /dev/null
@@ -1,555 +0,0 @@
-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-----
--MIIJFDCCBPwCAQEwDQYJKoZIhvcNAQEEBQAwTjELMAkGA1UEBhMCU0UxEDAOBgNV
--BAgTB1VwcHNhbGExETAPBgNVBAoTCE15U1FMIEFCMQ0wCwYDVQQLEwRUZXN0MQsw
--CQYDVQQDEwJDQTAeFw0xMDA3MjgxNDA3MjhaFw0xODEwMTQxNDA3MjhaMFIxCzAJ
--BgNVBAYTAlNFMRAwDgYDVQQIEwdVcHBzYWxhMREwDwYDVQQKEwhNeVNRTCBBQjEN
--MAsGA1UECxMEVGVzdDEPMA0GA1UEAxMGc2VydmVyMIIEIjANBgkqhkiG9w0BAQEF
--AAOCBA8AMIIECgKCBAEA6h3v1OWb9I9U/Z8diBu/xYGS8NCTD3ZESboHxVI2qSEC
--PgxNNcG8Lh0ktQdgYcOe64MnDTZX0Bibm47hoDldrAlTSffFxQhylqBBoXxDF+Lr
--hXIqCz7K0PsK+bYusL9ezJ7PETDnCT7oy95q4GXbKsutbNsm9if4ZE41gs2KnoU2
--DA7kvMmkKojrMIL4+BqTXA20LLo0iSbgvUTvpSJw4u96BeyzMNnxK2wP5vvTtUo5
--hACbfU87YjaSKs+q2VXCzfyYGZk1L1xk5GUI0bP+jutf1dDzNttW2/q2Nf5rxx09
--Gh/GwmOnEk1O7cOZ8VQCsOHirIM39NuSARsY6Y3G5XM4k2W4nxyR/RtdG9bvs/33
--aGsZ5V5yp7WSs8s9HHwaCPSsUiLKckQ7uA0TTRgbeweMrrLKovG57jsbBBB8pQD4
--PRd31qgxCdstWXHiWwRyI8vOLWENPXPFqA/rJwwqNdWTogy38aqVXxGYR8PIwjA2
--OaIwFjwGZcsPNLqw6bgAN8O2UBqZHWiMF8mi7brvioDvAIufZuqa2SqT/At45H83
--psQ6R4FsxZt6SAK7EsdPo8OYTrY1i4iPZd/eKhnEu2srEZgsKRwY5H1mvDH5fWCc
--HSFu07sWmlmK6Or65Fsa0IaKLJiQDVVETd6xrI0wkM4AOcbKDrS7aywJ426dopbs
--+LFdt4N0cdII4gBgJAfLuuA2yrDXRq4P6cgpVMy0R+0dEYE8zzm8zf1a+Ud273LS
--9+LB+LJKwqbW8nOPBoiekimIKfJYoOA4+C/mAjsYl1sVjjEhXJAs9S9L2UvnUk1P
--sZi4UKHI6eAIEl7VM1sQ4GbdZ0px2dF2Ax7pGkhD+DLpYyYkCprharKZdmuUNLUd
--NhXxi/HSEiE+Uy+o8RIzmH7LuROl/ZgnfHjJEiBLt2qPvwrwYd4c3XuXWs4YsWfV
--JTt8Mx2ihgVcdGy9//shCSmgJwR1oWrhgC10AEL2fKeRnYUal1i+IxFPp7nb8uwx
--UADgR0cY4A3qR/JP489QFIcxBTVs65De+Bq3ecnujk6yeGpD9iptonq4Y8uNZMc1
--kOE7GiFGwR4EufT5SEMh+tUkjth2r+842vmZZuxrVQaohDiATmIJA07W51zKH+nQ
--uw4qVKnAhPaDLCLc7YMIH9JcmkeQX0nf8/S2O2WYDH8glVDi5hfW08tCmV647vRY
--nTIywUTO0lFpz7M+VyMNaJ6yXU6biBV5hLAI8C5ldr/SWI789W2+ebBaJ9gfK+PT
--trohFSK37GcoSH4V6qSLJHCBASEsiddqHIHMLJZRYD+B6J3tLhjVUM43u+MEGbFT
--d33ZDke/WzLTExWkaOv36e67gDBmgDuj9yroq3wGfwIDAQABMA0GCSqGSIb3DQEB
--BAUAA4IEAQCc9RBhRbuWlmRZPZkqIdi5/+enyjoMmOa6ryJPxFSP8D2jrlHgQsk1
--+GsJmPFT3rwWfoGAQu/aeSX4sp8OhKVJtqNA6MJrGYnZIMolgYa1wZPbkjJsdEfi
--UsZdIB0n2+KA0xwEdGPdkGCfNPBtOg557DkcyEvsIZ9ELp4Pp2XzWRhyFGasJZc4
--YwgD/3K2rpOPZoMkBKeKqV19j41OfLKGBVyuaqzitbu9+KT4RU1ibr2a+UuFCwdT
--oqyN7bfWXjcjXOMkxCsOmLfKmqQxs7TEOVrYPTdYjamDxLy/e5g5FgoCxGY8iil0
--+YFLZyH6eEx/Os9DlG/M3O1MeRD9U97CdsphbDVZIDyWw5xeX8qQHJe0KSprAgiG
--TLhTZHeyrKujQCQS1oFFmNy4gSqXt0j1/6/9T80j6HeyjiiYEaEQK9YLTAjRoA7W
--VN8wtHI5F3RlNOVQEJks/bjdlpLL3VhaWtfewGh/mXRGcow84cgcsejMexmhreHm
--JfTUl9+X1IFFxGq2/606A9ROQ7kN/s4rXu7/TiMODXI/kZijoWd2SCc7Z0YWoNo7
--IRKkmZtrsflJbObEuK2Jk59uqzSxyQOBId8qtbPo8qJJyHGV5GCp34g4x67BxJBo
--h1iyVMamBAS5Ip1ejghuROrB8Hit8NhAZApXju62btJeXLX+mQayXb/wC/IXNJJD
--83tXiLfZgs6GzLAq7+KW/64sZSvj87CPiNtxkvjchAvyr+fhbBXCrf4rlOjJE6SH
--Je2/Jon7uqijncARGLBeYUT0Aa6k1slpXuSKxDNt7EIkP21kDZ5/OJ0Y1u587KVB
--dEhuDgNf2/8ij7gAQBwBoZMe1DrwddrxgLLBlyHpAZetNYFZNT+Cs/OlpqI0Jm59
--kK9pX0BY4AGOd23XM3K/uLawdmf67kkftim7aVaqXFHPiWsJVtlzmidKvNSmbmZe
--dOmMXp6PBoqcdusFVUS7vjd3KAes5wUX/CaTyOOPRu0LMSnpwEnaL76IC9x4Jd6d
--7QqY/OFTjpPH8nP57LwouiT6MgSUCWGaOkPuBJ9w9sENSbbINpgJJ42iAe2kE+R7
--qEIvf/2ETCTseeQUqm2nWiSPLkNagEh6kojmEoKrGyrv3YjrSXSOY1a70tDVy43+
--ueQDQzNZm3Q7inpke2ZKvWyY0LQmLzP2te+tnNBcdLyKJx7emPRTuMUlEdK7cLbt
--V3Sy9IKtyAXqqd66fPFj4NhJygyncj8M6CSqhG5L0GhDbkA8UJ8yK/gfKm3h5xe2
--utULK5VMtAhQt6cVahO59A9t/OI17y45bmlIgdlEQISzVFe9ZbIUJW44zBfPx74k
--/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-----
--MIISKQIBAAKCBAEA6h3v1OWb9I9U/Z8diBu/xYGS8NCTD3ZESboHxVI2qSECPgxN
--NcG8Lh0ktQdgYcOe64MnDTZX0Bibm47hoDldrAlTSffFxQhylqBBoXxDF+LrhXIq
--Cz7K0PsK+bYusL9ezJ7PETDnCT7oy95q4GXbKsutbNsm9if4ZE41gs2KnoU2DA7k
--vMmkKojrMIL4+BqTXA20LLo0iSbgvUTvpSJw4u96BeyzMNnxK2wP5vvTtUo5hACb
--fU87YjaSKs+q2VXCzfyYGZk1L1xk5GUI0bP+jutf1dDzNttW2/q2Nf5rxx09Gh/G
--wmOnEk1O7cOZ8VQCsOHirIM39NuSARsY6Y3G5XM4k2W4nxyR/RtdG9bvs/33aGsZ
--5V5yp7WSs8s9HHwaCPSsUiLKckQ7uA0TTRgbeweMrrLKovG57jsbBBB8pQD4PRd3
--1qgxCdstWXHiWwRyI8vOLWENPXPFqA/rJwwqNdWTogy38aqVXxGYR8PIwjA2OaIw
--FjwGZcsPNLqw6bgAN8O2UBqZHWiMF8mi7brvioDvAIufZuqa2SqT/At45H83psQ6
--R4FsxZt6SAK7EsdPo8OYTrY1i4iPZd/eKhnEu2srEZgsKRwY5H1mvDH5fWCcHSFu
--07sWmlmK6Or65Fsa0IaKLJiQDVVETd6xrI0wkM4AOcbKDrS7aywJ426dopbs+LFd
--t4N0cdII4gBgJAfLuuA2yrDXRq4P6cgpVMy0R+0dEYE8zzm8zf1a+Ud273LS9+LB
--+LJKwqbW8nOPBoiekimIKfJYoOA4+C/mAjsYl1sVjjEhXJAs9S9L2UvnUk1PsZi4
--UKHI6eAIEl7VM1sQ4GbdZ0px2dF2Ax7pGkhD+DLpYyYkCprharKZdmuUNLUdNhXx
--i/HSEiE+Uy+o8RIzmH7LuROl/ZgnfHjJEiBLt2qPvwrwYd4c3XuXWs4YsWfVJTt8
--Mx2ihgVcdGy9//shCSmgJwR1oWrhgC10AEL2fKeRnYUal1i+IxFPp7nb8uwxUADg
--R0cY4A3qR/JP489QFIcxBTVs65De+Bq3ecnujk6yeGpD9iptonq4Y8uNZMc1kOE7
--GiFGwR4EufT5SEMh+tUkjth2r+842vmZZuxrVQaohDiATmIJA07W51zKH+nQuw4q
--VKnAhPaDLCLc7YMIH9JcmkeQX0nf8/S2O2WYDH8glVDi5hfW08tCmV647vRYnTIy
--wUTO0lFpz7M+VyMNaJ6yXU6biBV5hLAI8C5ldr/SWI789W2+ebBaJ9gfK+PTtroh
--FSK37GcoSH4V6qSLJHCBASEsiddqHIHMLJZRYD+B6J3tLhjVUM43u+MEGbFTd33Z
--Dke/WzLTExWkaOv36e67gDBmgDuj9yroq3wGfwIDAQABAoIEAQCSt6YoZqigz/50
--XvYT6Uf6T6S1lBDFXNmY1qOuDkLBJTWRiwYMDViQEaWCaZgGTKDYeT3M8uR/Phyu
--lRFi5vCEMufmcAeZ3hxptw7KU+R8ILJ207/zgit6YglTys9h5txTIack39+6FJmx
--wbZ64HpETJZnpMO6+fuZaMXyLjuT8mmXjvHcOgXOvjWeFkZOveDhjJkAesUXuqyX
--EI+ajoXuQiPXeKonkD2qd7NTjzfy4gw/ZF4NXs0ZVJeviqtIPo2xp33udOw2vRFh
--bMvlF4cNLAbIKYVyOG0ruOfd2I7Unsc/CvD1u5vlRVuUd8OO0JZLIZR7hlRX+A58
--8O1g2H/wJZAsF1BnLnFzDGYCX2WjCCK3Zn85FkKGRa0lTdYDduad/C/N3Y2/pHFE
--e7U/2D7IkEei59tD2HcsDBB3MJnckkn/hyiL9qWcxqWZ61vurE+XjU6tc6fnfhk9
--pJQ6yU3epPU7Vfsk0UGA7bbgKpsyzyH8Zl76YC2mN2ZVJjZekfhY+ibT9odEPdOl
--yLB5iXA6/WhKkDWaOqZGOH+7MblWgT9wHINlcn+nKzOr00JHl26ac6aMlXXi9vbe
--4jgJbFK1HYlFIndyX/BdqRTsFemDoDrVqrEYsaONoVYDd9c5qrqYOeh34DhOksQW
--hNwWBfmMlfzgOGtCYhMeK+AajqTtUbMYQA6qp47KJd/Oa5Dvi3ZCpvZh3Ll5iIau
--rqCtmojsWCqmpWSu7P+Wu4+O3XkUMPdQUuQ5rJFESEBB3yEJcxqk/RItTcKNElNC
--PASrPrMD9cli7S/pJ+frbhu1Gna1ArXzXQE9pMozPaBpjCig7+15R0lL3pmOKO6e
--WK3dgSwrnW6TQdLPlSD4lbRoiIdTHVBczztDeUqVvFiV3/cuaEi1nvaVdAYLqjuL
--ogK4HwE/FQ54S0ijAsP52n25usoH6OTU3bSd/7NTp0vZCy3yf10x7HUdsh2DvhRO
--3+TSK5t0yz0Nt7hNwcI6pLmWUIYcZgpFc/WsiiGscTfhy8rh3kRHI8ylGq53KNF+
--yCVmjqnBRWs91ArxmeF1ctX2t3w5p7gf65hJWqoX/2DiSi5FBsr6HLxa5sUi4wRZ
--136aCNt5Wu7w+AzPDbQW6qKUGSyfHJAw4JZasZcaZLise5IWb1ks0DtFbWWdT3ux
--8r2AM7IO1WopnekrYCnx/aBvBAv4NjWozVA517ztVttPERt3AGb4nm387nYt5R2U
--NO2GBWcDyT8JQLKmffE1AkWolCR1GsvcNLQfLCbnNppgsnsLE/viTG4mq1wjnd8O
--2Q8nH1SVTuyGFREMp/zsiAEaGfdd0hI2r1J7OdNPBBCtmhITsy9ZYHqm5vrGvy3s
--vi2GuB2RAoICAQD/oWUsg4eTJxHifTJLz/tVSTXnw7DhfbFVa1K1rUV63/MRQAFW
--pabN4T6Yfp3CpdRkljCA8KPJZj7euwhm4OEg1ulpOouA+cfWlE9RFE8wyOK5SYwM
--k+nk31P9MUC866pZg/ghzBGDub91OW1+ZGEtqnLI/n/LhiAIWt0hJvgZclTc1cAL
--xffHVlFwoSyNl/nc3ueZCC95nOLst2XcuxZLLbOFtZCmDYsp49q/Jn6EFjn4Ge2o
--qp38z6eZgDMP1F4lb9nDqXPHfUSt2jxKlmpfXS+IPKdba67+EjhbtmUYzaR4EoPI
--zh+o6SrVWT6Yve7KGiYv06fuRz1m/lLQO/Arbd9ntSjgn+ZEXGOkbhnHUX3DJ4ny
--/6XEGB9NLQjern4uNTn0AaV+uvhncapFMaIBnVfq0Cw8eog0136PBYRaVX7T44j5
--HwIyGXWtYGA/SzDEQoksD0Y/T61BEGnLZaKeavNd82WwFvcYHZtE0J4aQGjCEE7N
--+nijzCy+j5ETmme9KJvQHpEyXP3N4RBko1eWvyTwFZDdIXtoa6TTEI51lm+FXJ/b
--Y+BzMr6KRo29FB+7//1ptUoMvn5hzL0PwOv2ZSTQuoG5hLDEbxWXLNhd1VHcfznF
--3EZHwfD2F8aGQ3kz+fkMTNfK955KorDrmLgvmV9eZZ5yQxGZrs5H5YfKpwKCAgEA
--6nSUbzfSdVFUH89NM5FmEJgkD06vqCgHl2mpyF+VmDGcay4K06eA4QbRO5kns13+
--n6PcBl/YVW/rNE8iFi+WxfqUpAjdR1HlShvTuTRVqtFTfuN8XhbYU6VMjKyuE0kd
--LKe3KRdwubjVNhXRZLBknU+3Y/4hnIR7mcE3/M5Zv5hjb7XnwWg/SzxV9WojCKiu
--vQ7cXhH5/o7EuKcl1d6vueGhWsRylCG9RimwgViR2H7zD9kpkOc0nNym9cSpb0Gv
--Lui4cf/fVwIt2HfNEGBjbM/83e2MH6b8Xp1fFAy0aXCdRtOo4LVOzJVAxn5dERMX
--4JJ4d5cSFbssDN1bITOKzuytfBqRIQGNkOfizgQNWUiaFI0MhEN/icymjm1ybOIh
--Gc9tzqKI4wP2X9g+u3+Oof1QaBcZ4UbZEU9ITN87Pa6XVJmpNx7A81BafWoEPFeE
--ahoO4XDwlHZazDuSlOseEShxXcVwaIiqySy7OBEPBVuYdEd2Qw/z3JTx9Kw8MKnf
--hu+ar5tz5dPnJIsvLeYCcJDe/K6loiZuHTtPbWEy9p6It7qubQNPBvTSBN5eVDKc
--Q2bTQNCx8SAAA9C5gJiwWoQKsXJzbRFRY77P9JjuGpua3YJ2nYBHEJmF+fp1R33c
--uHIyMphPMkKC4GC3/43kkMr6tck8kZbXGSYsLsBr2GkCggIBAJvvrjILQianzKcm
--zAmnI6AQ+ssYesvyyrxaraeZvSqJdlLtgmOCxVANuQt5IW9djUSWwZvGL4Np1aw0
--15k6UNqhftzsE7FnrVneOsww4WXXBUcV8FKz4Bf3i9qFswILmGzmrfSf8YczRfGS
--SJKzVPxwX3jwlrBmbx/pnb7dcLbFIbNcyLvl1ZJJu4BDMVRmgssTRp/5eExtQZg4
--//A4SA8wH7TO3yAMXvn8vrGgH8kfbdlEp88d1SYk3g4rP/rGB3A63NIYikIEzmJn
--ICQ3wUfPJnGq3kRMWgEuyCZaCy2oNE3yrWVPJ8z3/2MJ/79ZDVNHxEeki2o1FuW+
--+nGAPq+fZIp03iy4HdVRro7dgugtc9QaSHJtNId8V4vSjviX5Oz3FxUb9AJst58S
--nVV8Q2FMxBa/SlzSOkhRtCg2q1gXkzhaMnIVUleRZFGQ2uWBToxKMjcoUifIyN1J
--z999bkfI4hBLq5pRSAXz+YVu5SMKa10GaawIwJLat+i+1zboF6QyI2o/Wz8nrsNq
--KX/ajFGu5C94WFgsVoWKNI90KBLe48Ssje9c68waBlV/WHMg1YLvU3yqVDOV+K5c
--IHB9tPMnG+AgBYZPxSzuvnLrrkj/GeKx0WI7TrvzOLRGKJo6irMEJ8IzFegASRUq
--TVZKYQDYRG7m+lKlSxU+pyMAh2c9AoICAE4kavCip1eIssQjYLTGSkFPo/0iGbOv
--G9CgXAE3snFWX67tWphupKrbjdMSWcQTmPD2OTg6q6zWL4twsIi6dcMooHAHsFC7
--//LyUV/SDJdxSyXohiQJ8zH1zwy35RDydnHSuF5OvLh53T44iWDI1dAEqLgAFI3J
--LjTxzEpLMGiGTuYFt+ejai0WQAQayvBw4ESM9m+4CB2K0hBFTXv5y5HlnNTW0uWC
--VUZUUMrbjUieDz8B/zOXi9aYSGFzmZFGUDAPSqJcSMEELemPDF7f8WNr8vi42tIV
--4tlaFD1nep4F9bWMiCXU6B2RxVQi+7vcJEIqL1KUnGd3ydfD00K+ng4Xnj7Vz/cz
--QE7CqrpFaXmPlCMzW6+dm51/AyhHXDLkL2od05hiXcNkJ7KMLWRqwExHVIxM3shR
--x7lYNl3ArUsCrNd6m4aOjnrKFk7kjeLavHxskPccoGKrC9o0JMfTkWLgmuBJFQ0S
--N/HzIbcvIFWF0Ms4ojb50yp6ziXhXfJOO/0KUQEki71XIhvw89mVZszDzD5lqzjf
--HCZMBU4MbmL6NdEevFIDH0zPPkx3HPNtJt3kIJbit9wI8VhUMe+ldGnGxpWb8tKw
--SfM3vrHkYr+lizk26XfXMFhdAuVtT7dzQKSNEyP/1a2Hs307Xzgiv8JulJ8QIkrX
--/nsYWPOAGLG5AoICABmdW9Ppkvuhb1AEcjTWb+XCyopoBc6vit/uQWD9uO+CeX7a
--cfzq+iH01CAjyVMc4E1JDc5Lpi106U+GRGcAAaPJB2Sp5NznoxaOVrb71blu4Q4x
--bNjtKM/P/DXpO+yJYoOPdKtaSDhtnfNDM7H/jztJ3XIrOltKA7CcRDohbBWIx8Q0
--0uEpvfFpZZBco3yVmjP0RLgIVYn/ZDj9wGhSvFWIJ5vv6GXmtDrcHGMLxcfv7t76
--UVcMW/Yy4mYJRCzGOrWagyVijJ6MTVNciqadWcH1KcbB3EGoMFYMn61or2qJABPM
--xz89IlhnROU1Re3X/QRx5t86cw6oa+FqrWMOhSs31I0dNWSuS/xDympG27YIYSDd
--mv5seT78GjFmMJC5pPOLoXsbTPB0HpsX2/UL/w/eRAfilTOef/Cf9VE5MP/C2YR7
--NBxUU7/+21D6WvdtBTcZbrXWGroAo8zPP+PwX0+c6WoAvqDJvCPndp8xZhSgEJN/
--0kScptezi8n3ZHI95EA9U5mAHxHz0IhDDVzWw/z1f1SBPxKVX3+By3zaa3lrD2ch
--cHq7nBkX72veEevnHUY8Z2rHE2G2jdmRfOtwm4sjL0VBV9fRRoxzJWRduKyeOtDL
--EhhBhUoTrT48UnfW9hxnbNLB9P/hh+UJu9HrS2uAwHoGE1+8gcyundupGDBn
-+MIICXgIBAAKBgQDF2kSVBncWIa+gxDzp+B0tlfljkIw/hrp3dkpSS2uvKfUcqtQ/
-+PkKfbUa6hpCxLczbxjMVo/SvUzNPoVbRqjsmEPdktfm/G7FHjsym1g2qSnfjo2Od
-+Ktxl9H+RFzgt1s1OjVNSl26H/GRgpqEArJZs5EKUdRdGb5G13QZH7QXj2wIDAQAB
-+AoGBAJLCjh7Q9eLnx+QDzH9s+Q/IcH4nSbERmh1lFEopAc6j29qQ6PGkmDy0DUPs
-+70VOCOh5A4mo3aZzm9sUfVb24/nRtmyTP/AtMuIVGCsUqzI28dJRGvRlY0aSQG/C
-+ILqMP69kiMNGBvuyEIiJhisOmMvDFEp7HrrXHJM9qcc217DpAkEA4nzJ9yyy2e4O
-+r6/D711hdfcU/F+ktXw+pL77kSSdTABUap92Uv2RL36UA4q5h8RNvq/GrzMNm6Ye
-+u2IMvBCiTQJBAN+iRbiMJCSitTg5YVMluVbT87co7jbTqk7LN1ujyIFEklm4xlHG
-+DLJNgEoDR7QJtAkL++FyogC4zsQsey5voscCQQCp54trTbDuI9QIoAaQrrDKWgz4
-+NpfNPeOQm2UFQT5vIWAyjGWrZGViB8bp0UvVOcJI5nxaOiZfOYOcdrWu75uRAkAn
-+67zMc9/j1lPJRJz2Dc7nDBD+ikTz7pcBV897AWLCiK4jbBOi91q+3YzgKXO8VNsZ
-+nlUJasA2psbqSBJ5OJ5zAkEA2UxoMju54hASjT54Z92IzraVw4Vo8CYwOcw5fr7z
-++m5xg1mmWdLBclmZ+WjARzDuTHIW6u/WCxNGg42AykWzfw==
- -----END RSA PRIVATE KEY-----
diff --git a/packaging/rpm-uln/mysql-install-test.patch b/packaging/rpm-uln/mysql-install-test.patch
deleted file mode 100644
index 5980aea6a9f..00000000000
--- a/packaging/rpm-uln/mysql-install-test.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-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
diff --git a/packaging/rpm-uln/mysql-strmov.patch b/packaging/rpm-uln/mysql-strmov.patch
deleted file mode 100644
index a144d0936e4..00000000000
--- a/packaging/rpm-uln/mysql-strmov.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-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[];
diff --git a/packaging/rpm-uln/mysql.init b/packaging/rpm-uln/mysql.init
deleted file mode 100644
index 310e8cfa023..00000000000
--- a/packaging/rpm-uln/mysql.init
+++ /dev/null
@@ -1,209 +0,0 @@
-#!/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 $?
diff --git a/packaging/rpm-uln/mysql.spec.sh b/packaging/rpm-uln/mysql.spec.sh
deleted file mode 100644
index 34aed51048f..00000000000
--- a/packaging/rpm-uln/mysql.spec.sh
+++ /dev/null
@@ -1,1991 +0,0 @@
-#
-# This file was modified by Oracle in 2011 and later.
-# Details of the modifications are described in the "changelog" section.
-#
-# Modifications 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
-# 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; see the file COPYING. If not, write to the
-# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston
-# MA 02110-1301 USA.
-
-##############################################################################
-# Some common macro definitions
-##############################################################################
-
-# NOTE: "vendor" is used in upgrade/downgrade check, so you can't
-# change these, has to be exactly as is.
-# %define mysql_old_vendor MySQL AB # Applies to traditional MySQL RPMs only.
-# %define mysql_vendor_2 Sun Microsystems, Inc.
-%define mysql_vendor Oracle and/or its affiliates
-
-%define mysql_version @VERSION@
-
-%define mysqldatadir /var/lib/mysql
-
-%define release 1
-
-##############################################################################
-# Command line handling
-##############################################################################
-#
-# To set options:
-#
-# $ rpmbuild --define="option <x>" ...
-#
-
-# ----------------------------------------------------------------------------
-# Commercial builds
-# ----------------------------------------------------------------------------
-%if %{undefined commercial}
-%define commercial 0
-%endif
-
-# ----------------------------------------------------------------------------
-# Source name
-# ----------------------------------------------------------------------------
-%if %{undefined src_base}
-%define src_base mysql
-%endif
-%define src_dir %{src_base}-%{mysql_version}
-
-# ----------------------------------------------------------------------------
-# Feature set (storage engines, options). Default to community (everything)
-# ----------------------------------------------------------------------------
-%if %{undefined feature_set}
-%define feature_set community
-%endif
-
-# ----------------------------------------------------------------------------
-# Server comment strings
-# ----------------------------------------------------------------------------
-%if %{undefined compilation_comment_debug}
-%define compilation_comment_debug MySQL Community Server - Debug (GPL)
-%endif
-%if %{undefined compilation_comment_release}
-%define compilation_comment_release MySQL Community Server (GPL)
-%endif
-
-# ----------------------------------------------------------------------------
-# Product and server suffixes
-# ----------------------------------------------------------------------------
-%if %{undefined product_suffix}
- %if %{defined short_product_tag}
- %define product_suffix -%{short_product_tag}
- %else
- %define product_suffix %{nil}
- %endif
-%endif
-
-%if %{undefined server_suffix}
-%define server_suffix %{nil}
-%endif
-
-# ----------------------------------------------------------------------------
-# Distribution support
-# ----------------------------------------------------------------------------
-%if %{undefined distro_specific}
-%define distro_specific 0
-%endif
-%if %{distro_specific}
- %if %(test -f /etc/oracle-release && echo 1 || echo 0)
- %define elver %(rpm -qf --qf '%%{version}\\n' /etc/oracle-release | sed -e 's/^\\([0-9]*\\).*/\\1/g')
- %if "%elver" == "6"
- %define distro_description Oracle Linux 6
- %define distro_releasetag el6
- %define distro_buildreq gcc-c++ ncurses-devel perl readline-devel time zlib-devel
- %define distro_requires chkconfig coreutils grep procps shadow-utils net-tools
- %else
- %{error:Oracle Linux %{elver} is unsupported}
- %endif
- %else
- %if %(test -f /etc/redhat-release && echo 1 || echo 0)
- %define rhelver %(rpm -qf --qf '%%{version}\\n' /etc/redhat-release | sed -e 's/^\\([0-9]*\\).*/\\1/g')
- %if "%rhelver" == "5"
- %define distro_description Red Hat Enterprise Linux 5
- %define distro_releasetag rhel5
- %define distro_buildreq gcc-c++ gperf ncurses-devel perl readline-devel time zlib-devel
- %define distro_requires chkconfig coreutils grep procps shadow-utils net-tools
- %else
- %if "%rhelver" == "6"
- %define distro_description Red Hat Enterprise Linux 6
- %define distro_releasetag rhel6
- %define distro_buildreq gcc-c++ ncurses-devel perl readline-devel time zlib-devel
- %define distro_requires chkconfig coreutils grep procps shadow-utils net-tools
- %else
- %{error:Red Hat Enterprise Linux %{rhelver} is unsupported}
- %endif
- %endif
- %else
- %if %(test -f /etc/SuSE-release && echo 1 || echo 0)
- %define susever %(rpm -qf --qf '%%{version}\\n' /etc/SuSE-release | cut -d. -f1)
- %if "%susever" == "10"
- %define distro_description SUSE Linux Enterprise Server 10
- %define distro_releasetag sles10
- %define distro_buildreq gcc-c++ gdbm-devel gperf ncurses-devel openldap2-client readline-devel zlib-devel
- %define distro_requires aaa_base coreutils grep procps pwdutils
- %else
- %if "%susever" == "11"
- %define distro_description SUSE Linux Enterprise Server 11
- %define distro_releasetag sles11
- %define distro_buildreq gcc-c++ gdbm-devel gperf ncurses-devel openldap2-client procps pwdutils readline-devel zlib-devel
- %define distro_requires aaa_base coreutils grep procps pwdutils
- %else
- %{error:SuSE %{susever} is unsupported}
- %endif
- %endif
- %else
- %{error:Unsupported distribution}
- %endif
- %endif
- %endif
-%else
- %define generic_kernel %(uname -r | cut -d. -f1-2)
- %define distro_description Generic Linux (kernel %{generic_kernel})
- %define distro_releasetag linux%{generic_kernel}
- %define distro_buildreq gcc-c++ gperf ncurses-devel perl readline-devel time zlib-devel
- %define distro_requires coreutils grep procps /sbin/chkconfig /usr/sbin/useradd /usr/sbin/groupadd
-%endif
-
-# Avoid debuginfo RPMs, leaves binaries unstripped
-%define debug_package %{nil}
-
-# Hack to work around bug in RHEL5 __os_install_post macro, wrong inverted
-# test for __debug_package
-%define __strip /bin/true
-
-# ----------------------------------------------------------------------------
-# Support optional "tcmalloc" library (experimental)
-# ----------------------------------------------------------------------------
-%if %{defined malloc_lib_target}
-%define WITH_TCMALLOC 1
-%else
-%define WITH_TCMALLOC 0
-%endif
-
-##############################################################################
-# Configuration based upon above user input, not to be set directly
-##############################################################################
-
-%if %{commercial}
-%define license_files_server %{src_dir}/LICENSE.mysql
-%define license_type Commercial
-%else
-%define license_files_server %{src_dir}/COPYING %{src_dir}/README
-%define license_type GPL
-%endif
-
-##############################################################################
-# Main spec file section
-##############################################################################
-
-Name: mysql%{product_suffix}
-Summary: MySQL client programs and shared libraries
-Group: Applications/Databases
-Version: @MYSQL_RPM_VERSION@
-Release: %{release}%{?distro_releasetag:.%{distro_releasetag}}
-# exceptions allow client libraries to be linked with most open source SW,
-# not only GPL code.
-License: Copyright (c) 2000, @MYSQL_COPYRIGHT_YEAR@, %{mysql_vendor}. All rights reserved. Under %{license_type} license as shown in the Description field.
-URL: http://www.mysql.com/
-Packager: MySQL Release Engineering <mysql-build@oss.oracle.com>
-Vendor: %{mysql_vendor}
-
-# Regression tests may take a long time, override the default to skip them
-%{!?runselftest:%global runselftest 1}
-
-# Upstream has a mirror redirector for downloads, so the URL is hard to
-# represent statically. You can get the tarball by following a link from
-# http://dev.mysql.com/downloads/mysql/
-Source0: %{src_dir}.tar.gz
-# The upstream tarball includes non-free documentation that only the
-# copyright holder (MySQL -> Sun -> Oracle) may ship.
-# To remove the non-free documentation, run this script after downloading
-# the tarball into the current directory:
-# ./generate-tarball.sh $VERSION
-# Then, source name changes:
-# Source0: mysql-%{version}-nodocs.tar.gz
-%if %{commercial}
-NoSource: 0
-%endif
-Source1: generate-tarball.sh
-Source2: mysql.init
-Source3: my.cnf
-Source4: scriptstub.c
-Source5: my_config.h
-# The below is only needed for packages built outside MySQL -> Sun -> Oracle:
-Source6: README.mysql-docs
-Source9: mysql-embedded-check.c
-# Working around perl dependency checking bug in rpm FTTB. Remove later.
-Source999: filter-requires-mysql.sh
-
-# Patch1: mysql-ssl-multilib.patch Not needed by MySQL (yaSSL), will not work in 5.5 (cmake)
-Patch2: mysql-5.5-errno.patch
-Patch4: mysql-5.5-testing.patch
-Patch5: mysql-install-test.patch
-Patch6: mysql-5.5-stack-guard.patch
-# Patch7: mysql-disable-test.patch Already fixed in current 5.1
-# Patch8: mysql-setschedparam.patch Will not work in 5.5 (cmake)
-# Patch9: mysql-no-docs.patch Will not work in 5.5 (cmake)
-Patch10: mysql-strmov.patch
- # Not used by MySQL
-# Patch12: mysql-cve-2008-7247.patch Already fixed in 5.5
-Patch13: mysql-expired-certs.patch
- # Will not be used by MySQL
-# Patch14: mysql-missing-string-code.patch Undecided, will not work in 5.5 (cmake)
-# Patch15: mysql-lowercase-bug.patch Fixed in MySQL 5.1.54 and 5.5.9
-Patch16: mysql-chain-certs.patch
-Patch17: mysql-5.5-libdir.patch
-Patch18: mysql-5.5-fix-tests.patch
-Patch19: mysql-5.5-mtr1.patch
-
-BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
-BuildRequires: %{distro_buildreq}
-BuildRequires: gawk
-# make test requires time and ps
-BuildRequires: procps
-# Socket and Time::HiRes are needed to run regression tests
-BuildRequires: perl(Socket), perl(Time::HiRes)
-
-Requires: %{distro_requires}
-Requires: fileutils
-Requires: mysql-libs%{product_suffix} = %{version}-%{release}
-Requires: bash
-
-# If %%{product_suffix} is non-empty, the auto-generated capability is insufficient:
-# We want all dependency handling to use the generic name only.
-# Similar in other sub-packages
-Provides: mysql
-
-# MySQL (with caps) is upstream's spelling of their own RPMs for mysql
-Obsoletes: MySQL
-# mysql-cluster used to be built from this SRPM, but no more
-Obsoletes: mysql-cluster < 5.1.44
-# We need cross-product "Obsoletes:" to allow cross-product upgrades:
-Obsoletes: mysql < %{version}-%{release}
-Obsoletes: mysql-advanced < %{version}-%{release}
-
-# Working around perl dependency checking bug in rpm FTTB. Remove later.
-%global __perl_requires %{SOURCE999}
-
-%description -n mysql%{product_suffix}
-MySQL is a multi-user, multi-threaded SQL database server. MySQL is a
-client/server implementation consisting of a server daemon (mysqld)
-and many different client programs and libraries. The base package
-contains the standard MySQL client programs and generic MySQL files.
-
-The MySQL software has Dual Licensing, which means you can use the MySQL
-software free of charge under the GNU General Public License
-(http://www.gnu.org/licenses/). You can also purchase commercial MySQL
-licenses from %{mysql_vendor} if you do not wish to be bound by the terms of
-the GPL. See the chapter "Licensing and Support" in the manual for
-further info.
-
-%package -n mysql-libs%{product_suffix}
-
-Summary: The shared libraries required for MySQL clients
-Group: Applications/Databases
-Requires: /sbin/ldconfig
-Obsoletes: mysql-libs < %{version}-%{release}
-Obsoletes: mysql-libs-advanced < %{version}-%{release}
-Provides: mysql-libs
-
-%description -n mysql-libs%{product_suffix}
-The mysql-libs package provides the essential shared libraries for any
-MySQL client program or interface. You will need to install this package
-to use any other MySQL package or any clients that need to connect to a
-MySQL server.
-
-%package -n mysql-server%{product_suffix}
-
-Summary: The MySQL server and related files
-Group: Applications/Databases
-Requires: mysql%{product_suffix} = %{version}-%{release}
-Requires: sh-utils
-Requires(pre): /usr/sbin/useradd
-Requires(post): chkconfig
-Requires(preun): chkconfig
-# This is for /sbin/service
-Requires(preun): initscripts
-Requires(postun): initscripts
-# mysqlhotcopy needs DBI/DBD support
-Requires: perl-DBI, perl-DBD-MySQL
-Obsoletes: MySQL-server
-Obsoletes: mysql-server < %{version}-%{release}
-Obsoletes: mysql-server-advanced < %{version}-%{release}
-Provides: mysql-server
-
-%description -n mysql-server%{product_suffix}
-MySQL is a multi-user, multi-threaded SQL database server. MySQL is a
-client/server implementation consisting of a server daemon (mysqld)
-and many different client programs and libraries. This package contains
-the MySQL server and some accompanying files and directories.
-
-%package -n mysql-devel%{product_suffix}
-
-Summary: Files for development of MySQL applications
-Group: Applications/Databases
-Requires: mysql%{product_suffix} = %{version}-%{release}
-Requires: openssl-devel
-Obsoletes: MySQL-devel
-Obsoletes: mysql-devel < %{version}-%{release}
-Obsoletes: mysql-devel-advanced < %{version}-%{release}
-Provides: mysql-devel
-
-%description -n mysql-devel%{product_suffix}
-MySQL is a multi-user, multi-threaded SQL database server. This
-package contains the libraries and header files that are needed for
-developing MySQL client applications.
-
-%package -n mysql-embedded%{product_suffix}
-
-Summary: MySQL as an embeddable library
-Group: Applications/Databases
-Obsoletes: mysql-embedded < %{version}-%{release}
-Obsoletes: mysql-embedded-advanced < %{version}-%{release}
-Provides: mysql-embedded
-
-%description -n mysql-embedded%{product_suffix}
-MySQL is a multi-user, multi-threaded SQL database server. This
-package contains a version of the MySQL server that can be embedded
-into a client application instead of running as a separate process,
-as well as a command line client with such an embedded server.
-
-%package -n mysql-embedded-devel%{product_suffix}
-
-Summary: Development files for MySQL as an embeddable library
-Group: Applications/Databases
-Requires: mysql-embedded%{product_suffix} = %{version}-%{release}
-Requires: mysql-devel%{product_suffix} = %{version}-%{release}
-Obsoletes: mysql-embedded-devel < %{version}-%{release}
-Obsoletes: mysql-embedded-devel-advanced < %{version}-%{release}
-Provides: mysql-embedded-devel
-
-%description -n mysql-embedded-devel%{product_suffix}
-MySQL is a multi-user, multi-threaded SQL database server. This
-package contains files needed for developing and testing with
-the embedded version of the MySQL server.
-
-%package -n mysql-test%{product_suffix}
-
-Summary: The test suite distributed with MySQL
-Group: Applications/Databases
-Requires: mysql%{product_suffix} = %{version}-%{release}
-Requires: mysql-server%{product_suffix} = %{version}-%{release}
-Obsoletes: MySQL-test
-Obsoletes: mysql-test < %{version}-%{release}
-Obsoletes: mysql-test-advanced < %{version}-%{release}
-Provides: mysql-test
-
-%description -n mysql-test%{product_suffix}
-MySQL is a multi-user, multi-threaded SQL database server. This
-package contains the regression test suite distributed with
-the MySQL sources.
-
-%prep
-%setup -T -a 0 -c -n %{src_dir}
-
-cd %{src_dir} # read about "%setup -n"
-# %patch1 -p1
-%patch2 -p1
-# %patch4 -p1 TODO / FIXME: if wanted, needs to be adapted to new mysql-test-run setup
-%patch5 -p1
-%patch6 -p1
-# %patch8 -p1
-# %patch9 -p1
-# %patch10 -p1
-# %patch13 -p1
-# %patch14 -p1
-%patch16 -p1
-%patch17 -p1
-%patch18 -p1
-%patch19 -p1
-
-# workaround for upstream bug #56342
-rm -f mysql-test/t/ssl_8k_key-master.opt
-
-%build
-
-# Fail quickly and obviously if user tries to build as root
-%if %runselftest
- if [ x"`id -u`" = x0 ]; then
- echo "The MySQL regression tests may fail if run as root."
- echo "If you really need to build the RPM as root, use"
- echo "--define='runselftest 0' to skip the regression tests."
- exit 1
- fi
-%endif
-
-# Be strict about variables, bail at earliest opportunity, etc.
-set -eu
-
-# Optional package files
-touch optional-files-devel
-
-#
-# Set environment in order of preference, MYSQL_BUILD_* first, then variable
-# name, finally a default. RPM_OPT_FLAGS is assumed to be a part of the
-# default RPM build environment.
-#
-# We set CXX=gcc by default to support so-called 'generic' binaries, where we
-# do not have a dependancy on libgcc/libstdc++. This only works while we do
-# not require C++ features such as exceptions, and may need to be removed at
-# a later date.
-#
-
-# This is a hack, $RPM_OPT_FLAGS on ia64 hosts contains flags which break
-# the compile in cmd-line-utils/readline - needs investigation, but for now
-# we simply unset it and use those specified directly in cmake.
-%if "%{_arch}" == "ia64"
-RPM_OPT_FLAGS=
-%endif
-
-# This goes in sync with Patch19. "rm" is faster than "patch" for this.
-rm -rf %{src_dir}/mysql-test/lib/v1
-
-export PATH=${MYSQL_BUILD_PATH:-$PATH}
-export CC=${MYSQL_BUILD_CC:-${CC:-gcc}}
-export CXX=${MYSQL_BUILD_CXX:-${CXX:-gcc}}
-export CFLAGS=${MYSQL_BUILD_CFLAGS:-${CFLAGS:-$RPM_OPT_FLAGS}}
-# Following "%ifarch" developed by RedHat, MySQL/Oracle does not support/maintain Linux/Sparc:
-# gcc seems to have some bugs on sparc as of 4.4.1, back off optimization
-# submitted as bz #529298
-%ifarch sparc sparcv9 sparc64
-CFLAGS=`echo $CFLAGS| sed -e "s|-O2|-O1|g" `
-%endif
-export CXXFLAGS=${MYSQL_BUILD_CXXFLAGS:-${CXXFLAGS:-$RPM_OPT_FLAGS -felide-constructors -fno-exceptions -fno-rtti}}
-export LDFLAGS=${MYSQL_BUILD_LDFLAGS:-${LDFLAGS:-}}
-export CMAKE=${MYSQL_BUILD_CMAKE:-${CMAKE:-cmake}}
-export MAKE_JFLAG=${MYSQL_BUILD_MAKE_JFLAG:-%{?_smp_mflags}}
-
-# Build debug mysqld and libmysqld.a
-mkdir debug
-(
- cd debug
- # Attempt to remove any optimisation flags from the debug build
- CFLAGS=`echo " ${CFLAGS} " | \
- sed -e 's/ -O[0-9]* / /' \
- -e 's/ -unroll2 / /' \
- -e 's/ -ip / /' \
- -e 's/^ //' \
- -e 's/ $//'`
- CXXFLAGS=`echo " ${CXXFLAGS} " | \
- sed -e 's/ -O[0-9]* / /' \
- -e 's/ -unroll2 / /' \
- -e 's/ -ip / /' \
- -e 's/^ //' \
- -e 's/ $//'`
- # XXX: MYSQL_UNIX_ADDR should be in cmake/* but mysql_version is included before
- # XXX: install_layout so we can't just set it based on INSTALL_LAYOUT=RPM
- ${CMAKE} ../%{src_dir} -DBUILD_CONFIG=mysql_release -DINSTALL_LAYOUT=RPM \
- -DCMAKE_BUILD_TYPE=Debug \
- -DMYSQL_UNIX_ADDR="%{mysqldatadir}/mysql.sock" \
- -DFEATURE_SET="%{feature_set}" \
- -DCOMPILATION_COMMENT="%{compilation_comment_debug}" \
- -DMYSQL_SERVER_SUFFIX="%{server_suffix}"
- echo BEGIN_DEBUG_CONFIG ; egrep '^#define' include/config.h ; echo END_DEBUG_CONFIG
- make ${MAKE_JFLAG} VERBOSE=1
-)
-# Build full release
-mkdir release
-(
- cd release
- # XXX: MYSQL_UNIX_ADDR should be in cmake/* but mysql_version is included before
- # XXX: install_layout so we can't just set it based on INSTALL_LAYOUT=RPM
- ${CMAKE} ../%{src_dir} -DBUILD_CONFIG=mysql_release -DINSTALL_LAYOUT=RPM \
- -DCMAKE_BUILD_TYPE=RelWithDebInfo \
- -DMYSQL_UNIX_ADDR="%{mysqldatadir}/mysql.sock" \
- -DFEATURE_SET="%{feature_set}" \
- -DCOMPILATION_COMMENT="%{compilation_comment_release}" \
- -DMYSQL_SERVER_SUFFIX="%{server_suffix}"
- echo BEGIN_NORMAL_CONFIG ; egrep '^#define' include/config.h ; echo END_NORMAL_CONFIG
- make ${MAKE_JFLAG} VERBOSE=1
-)
-
-# TODO / FIXME: Do we need "scriptstub"?
-gcc $CFLAGS $LDFLAGS -o scriptstub "-DLIBDIR=\"%{_libdir}/mysql\"" %{SOURCE4}
-
-# TODO / FIXME: "libmysqld.so" should have been produced above
-# regular build will make libmysqld.a but not libmysqld.so :-(
-cd release
-mkdir libmysqld/work
-cd libmysqld/work
-# "libmysqld" provides the same ABI as "libmysqlclient", but it implements the server:
-# The shared object is identified by the full version,
-# for linkage selection the first two levels are sufficient so that upgrades are possible
-# (see "man ld", option "-soname").
-SO_FULL='%{mysql_version}'
-SO_USE=`echo $SO_FULL | sed -e 's/\([0-9]\.[0-9]\)\.[0-9]*/\1/'`
-# These two modules should pull everything else which is needed:
-ar -x ../libmysqld.a client.c.o signal_handler.cc.o
-gcc $CFLAGS $LDFLAGS -shared -Wl,-soname,libmysqld.so.$SO_USE -o libmysqld.so.$SO_FULL \
- *.o ../libmysqld.a \
- -lpthread -lcrypt -laio -lnsl -lssl -lcrypto -lz -lrt -lstdc++ -lm -lc
-# this is to check that we built a complete library
-cp %{SOURCE9} .
-PROGNAME=`basename %{SOURCE9} .c`
-ln -s libmysqld.so.$SO_FULL libmysqld.so.$SO_USE
-gcc -I../../include -I../../../%{src_dir}/include $CFLAGS -o $PROGNAME %{SOURCE9} libmysqld.so.$SO_USE
-LD_LIBRARY_PATH=. ldd $PROGNAME
-cd ../..
-cd ..
-
-# TODO / FIXME: autotools only?
-# make check
-
-# TODO / FIXME: Test suite is run elsewhere in release builds -
-# do we need this for users who want to build from source?
-# Also, check whether MTR_BUILD_THREAD=auto would solve all issues
-%if %runselftest
- # hack to let 32- and 64-bit tests run concurrently on same build machine
- case `uname -m` in
- ppc64 | s390x | x86_64 | sparc64 )
- MTR_BUILD_THREAD=7
- ;;
- *)
- MTR_BUILD_THREAD=11
- ;;
- esac
- export MTR_BUILD_THREAD
-
- # if you want to change which tests are run, look at mysql-5.5-testing.patch too.
- (cd release && make test-bt-fast )
-%endif
-
-%install
-RBR=$RPM_BUILD_ROOT
-MBD=$RPM_BUILD_DIR/%{src_dir}
-[ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
-
-# Ensure that needed directories exists
-# TODO / FIXME: needed ? install -d $RBR%{mysqldatadir}/mysql
-# TODO / FIXME: needed ? install -d $RBR%{_datadir}/mysql-test
-# TODO / FIXME: needed ? install -d $RBR%{_datadir}/mysql/SELinux/RHEL4
-# TODO / FIXME: needed ? install -d $RBR%{_includedir}
-# TODO / FIXME: needed ? install -d $RBR%{_libdir}
-# TODO / FIXME: needed ? install -d $RBR%{_mandir}
-# TODO / FIXME: needed ? install -d $RBR%{_sbindir}
-
-# Install all binaries
-(
- cd $MBD/release
- make DESTDIR=$RBR install
-)
-
-# For gcc builds, include libgcc.a in the devel subpackage (BUG 4921). Do
-# this in a sub-shell to ensure we don't pollute the install environment
-# with compiler bits.
-(
- PATH=${MYSQL_BUILD_PATH:-$PATH}
- CC=${MYSQL_BUILD_CC:-${CC:-gcc}}
- CFLAGS=${MYSQL_BUILD_CFLAGS:-${CFLAGS:-$RPM_OPT_FLAGS}}
- if "${CC}" -v 2>&1 | grep '^gcc.version' >/dev/null 2>&1; then
- libgcc=`${CC} ${CFLAGS} --print-libgcc-file`
- if [ -f ${libgcc} ]; then
- mkdir -p $RBR%{_libdir}/mysql
- install -m 644 ${libgcc} $RBR%{_libdir}/mysql/libmygcc.a
- echo "%{_libdir}/mysql/libmygcc.a" >>optional-files-devel
- fi
- fi
-)
-
-# multilib header hacks
-# we only apply this to known Red Hat multilib arches, per bug #181335
-case `uname -i` in
- i386 | x86_64 | ppc | ppc64 | s390 | s390x | sparc | sparc64 )
- mv $RPM_BUILD_ROOT/usr/include/mysql/my_config.h $RPM_BUILD_ROOT/usr/include/mysql/my_config_`uname -i`.h
- install -m 644 %{SOURCE5} $RPM_BUILD_ROOT/usr/include/mysql/
- ;;
- *)
- ;;
-esac
-
-mkdir -p $RPM_BUILD_ROOT/var/log
-touch $RPM_BUILD_ROOT/var/log/mysqld.log
-
-# List the installed tree for RPM package maintenance purposes.
-find $RPM_BUILD_ROOT -print | sed "s|^$RPM_BUILD_ROOT||" | sort > ROOTFILES
-
-mkdir -p $RPM_BUILD_ROOT/etc/rc.d/init.d
-mkdir -p $RPM_BUILD_ROOT/var/run/mysqld
-install -m 0755 -d $RPM_BUILD_ROOT/var/lib/mysql
-install -m 0755 %{SOURCE2} $RPM_BUILD_ROOT/etc/rc.d/init.d/mysqld
-install -m 0644 %{SOURCE3} $RPM_BUILD_ROOT/etc/my.cnf
-# obsolete: mv $RPM_BUILD_ROOT/usr/sql-bench $RPM_BUILD_ROOT%{_datadir}/sql-bench # 'sql-bench' is dropped
-# obsolete: mv $RPM_BUILD_ROOT/usr/mysql-test $RPM_BUILD_ROOT%{_datadir}/mysql-test # 'mysql-test' is there already
-# 5.1.32 forgets to install the mysql-test README file
-# obsolete: install -m 0644 mysql-test/README $RPM_BUILD_ROOT%{_datadir}/mysql-test/README # 'README' is there already
-
-mv ${RPM_BUILD_ROOT}%{_bindir}/mysqlbug ${RPM_BUILD_ROOT}%{_libdir}/mysql/mysqlbug
-install -m 0755 scriptstub ${RPM_BUILD_ROOT}%{_bindir}/mysqlbug
-mv ${RPM_BUILD_ROOT}%{_bindir}/mysql_config ${RPM_BUILD_ROOT}%{_libdir}/mysql/mysql_config
-install -m 0755 scriptstub ${RPM_BUILD_ROOT}%{_bindir}/mysql_config
-
-rm -f ${RPM_BUILD_ROOT}%{_libdir}/mysql/libmysqld.a
-SO_FULL='%{mysql_version}'
-SO_USE=`echo $SO_FULL | sed -e 's/\([0-9]\.[0-9]\)\.[0-9]*/\1/'`
-install -m 0755 release/libmysqld/work/libmysqld.so.$SO_FULL ${RPM_BUILD_ROOT}%{_libdir}/mysql/libmysqld.so.$SO_FULL
-ln -s libmysqld.so.$SO_FULL ${RPM_BUILD_ROOT}%{_libdir}/mysql/libmysqld.so.$SO_USE
-ln -s libmysqld.so.$SO_USE ${RPM_BUILD_ROOT}%{_libdir}/mysql/libmysqld.so
-
-rm -f ${RPM_BUILD_ROOT}%{_bindir}/comp_err
-rm -f ${RPM_BUILD_ROOT}%{_mandir}/man1/comp_err.1*
-rm -f ${RPM_BUILD_ROOT}%{_bindir}/make_win_binary_distribution
-rm -f ${RPM_BUILD_ROOT}%{_bindir}/make_win_src_distribution
-rm -f ${RPM_BUILD_ROOT}%{_mandir}/man1/make_win_bin_dist.1*
-rm -f ${RPM_BUILD_ROOT}%{_mandir}/man1/make_win_src_distribution.1*
-rm -f ${RPM_BUILD_ROOT}%{_libdir}/mysql/libmysqlclient*.la
-rm -f ${RPM_BUILD_ROOT}%{_libdir}/mysql/*.a
-rm -f ${RPM_BUILD_ROOT}%{_libdir}/mysql/plugin/*.la
-rm -f ${RPM_BUILD_ROOT}%{_libdir}/mysql/plugin/*.a
-rm -f ${RPM_BUILD_ROOT}%{_datadir}/mysql/binary-configure
-rm -f ${RPM_BUILD_ROOT}%{_datadir}/mysql/make_binary_distribution
-rm -f ${RPM_BUILD_ROOT}%{_datadir}/mysql/make_sharedlib_distribution
-rm -f ${RPM_BUILD_ROOT}%{_datadir}/mysql/mi_test_all*
-rm -f ${RPM_BUILD_ROOT}%{_datadir}/mysql/ndb-config-2-node.ini
-rm -f ${RPM_BUILD_ROOT}%{_datadir}/mysql/mysql.server
-rm -f ${RPM_BUILD_ROOT}%{_datadir}/mysql/mysqld_multi.server
-rm -f ${RPM_BUILD_ROOT}%{_datadir}/mysql/MySQL-shared-compat.spec
-rm -f ${RPM_BUILD_ROOT}%{_datadir}/mysql/*.plist
-rm -f ${RPM_BUILD_ROOT}%{_datadir}/mysql/preinstall
-rm -f ${RPM_BUILD_ROOT}%{_datadir}/mysql/postinstall
-rm -f ${RPM_BUILD_ROOT}%{_datadir}/mysql/mysql-*.spec
-rm -f ${RPM_BUILD_ROOT}%{_datadir}/mysql/mysql-log-rotate
-rm -f ${RPM_BUILD_ROOT}%{_datadir}/mysql/ChangeLog
-rm -f ${RPM_BUILD_ROOT}%{_mandir}/man1/mysql-stress-test.pl.1*
-rm -f ${RPM_BUILD_ROOT}%{_mandir}/man1/mysql-test-run.pl.1*
-rm -rf ${RPM_BUILD_ROOT}%{_datadir}/mysql/solaris
-
-mkdir -p $RPM_BUILD_ROOT/etc/ld.so.conf.d
-echo "%{_libdir}/mysql" > $RPM_BUILD_ROOT/etc/ld.so.conf.d/%{name}-%{_arch}.conf
-
-# The below *only* applies to builds not done by MySQL / Sun / Oracle:
-# copy additional docs into build tree so %%doc will find them
-# cp %{SOURCE6} README.mysql-docs
-
-%clean
-[ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
-
-%pre -n mysql-server%{product_suffix}
-
-# 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`
- myvendor='%{mysql_vendor}'
- myversion='%{mysql_version}'
-
- old_family=`echo $version \
- | sed -n -e 's,^\([1-9][0-9]*\.[0-9][0-9]*\)\..*$,\1,p'`
- new_family=`echo $myversion \
- | sed -n -e 's,^\([1-9][0-9]*\.[0-9][0-9]*\)\..*$,\1,p'`
-
- [ -z "$vendor" ] && vendor='<unknown>'
- [ -z "$old_family" ] && old_family="<unrecognized version $version>"
- [ -z "$new_family" ] && new_family="<bad package specification: version $myversion>"
-
- error_text=
- if [ "$vendor" != "$myvendor" ]; then
- error_text="$error_text
-The current MySQL server package is provided by a different
-vendor ($vendor) than $myvendor.
-Some files may be installed to different locations, including log
-files and the service startup script in %{_sysconfdir}/init.d/.
-"
- fi
-
- if [ "$old_family" != "$new_family" ]; then
- error_text="$error_text
-Upgrading directly from MySQL $old_family to MySQL $new_family may not
-be safe in all cases. A manual dump and restore using mysqldump is
-recommended. It is important to review the MySQL manual's Upgrading
-section for version-specific incompatibilities.
-"
- fi
-
- if [ -n "$error_text" ]; then
- cat <<HERE >&2
-
-******************************************************************
-A MySQL server package ($installed) is installed.
-$error_text
-A manual upgrade is required.
-
-- Ensure that you have a complete, working backup of your data and my.cnf
- files
-- Shut down the MySQL server cleanly
-- Remove the existing MySQL packages. Usually this command will
- list the packages you should remove:
- rpm -qa | grep -i '^mysql-'
-
- You may choose to use 'rpm --nodeps -ev <package-name>' to remove
- the package which contains the mysqlclient shared library. The
- library will be reinstalled by the MySQL-shared-compat package.
-- Install the new MySQL packages supplied by $myvendor
-- Ensure that the MySQL server is started
-- Run the 'mysql_upgrade' program
-
-This is a brief description of the upgrade process. Important details
-can be found in the MySQL manual, in the Upgrading section.
-******************************************************************
-HERE
- exit 1
- fi
-fi
-
-/usr/sbin/groupadd -g 27 -o -r mysql >/dev/null 2>&1 || :
-/usr/sbin/useradd -M -N -g mysql -o -r -d /var/lib/mysql -s /bin/bash \
- -c "MySQL Server" -u 27 mysql >/dev/null 2>&1 || :
-
-%post -n mysql-libs%{product_suffix}
-/sbin/ldconfig
-
-%post -n mysql-server%{product_suffix}
-if [ $1 = 1 ]; then
- /sbin/chkconfig --add mysqld
-fi
-/bin/chmod 0755 /var/lib/mysql
-/bin/touch /var/log/mysqld.log
-
-%preun -n mysql-server%{product_suffix}
-if [ $1 = 0 ]; then
- /sbin/service mysqld stop >/dev/null 2>&1
- /sbin/chkconfig --del mysqld
-fi
-
-%postun -n mysql-libs%{product_suffix}
-if [ $1 = 0 ] ; then
- /sbin/ldconfig
-fi
-
-%postun -n mysql-server%{product_suffix}
-if [ $1 -ge 1 ]; then
- /sbin/service mysqld condrestart >/dev/null 2>&1 || :
-fi
-
-
-%files -n mysql%{product_suffix}
-%defattr(-,root,root)
-%doc %{license_files_server}
-
-# The below file *only* applies to builds not done by MySQL / Sun / Oracle:
-# %doc README.mysql-docs
-
-%{_bindir}/msql2mysql
-%{_bindir}/mysql
-%{_bindir}/mysql_config
-%{_bindir}/mysql_find_rows
-%{_bindir}/mysql_waitpid
-%{_bindir}/mysqlaccess
-%{_bindir}/mysqlaccess.conf
-%{_bindir}/mysqladmin
-%{_bindir}/mysqlbinlog
-%{_bindir}/mysqlcheck
-%{_bindir}/mysqldump
-%{_bindir}/mysqlimport
-%{_bindir}/mysqlshow
-%{_bindir}/mysqlslap
-%{_bindir}/my_print_defaults
-
-%{_mandir}/man1/mysql.1*
-%{_mandir}/man1/mysql_config.1*
-%{_mandir}/man1/mysql_find_rows.1*
-%{_mandir}/man1/mysql_waitpid.1*
-%{_mandir}/man1/mysqlaccess.1*
-%{_mandir}/man1/mysqladmin.1*
-%{_mandir}/man1/mysqldump.1*
-%{_mandir}/man1/mysqlshow.1*
-%{_mandir}/man1/mysqlslap.1*
-%{_mandir}/man1/my_print_defaults.1*
-
-%{_libdir}/mysql/mysqlbug
-%{_libdir}/mysql/mysql_config
-
-%files -n mysql-libs%{product_suffix}
-%defattr(-,root,root)
-%doc %{license_files_server}
-# although the default my.cnf contains only server settings, we put it in the
-# libs package because it can be used for client settings too.
-%config(noreplace) /etc/my.cnf
-%dir %{_libdir}/mysql
-%{_libdir}/mysql/libmysqlclient*.so.*
-/etc/ld.so.conf.d/*
-
-%dir %{_datadir}/mysql
-%{_datadir}/mysql/english
-%lang(cs) %{_datadir}/mysql/czech
-%lang(da) %{_datadir}/mysql/danish
-%lang(nl) %{_datadir}/mysql/dutch
-%lang(et) %{_datadir}/mysql/estonian
-%lang(fr) %{_datadir}/mysql/french
-%lang(de) %{_datadir}/mysql/german
-%lang(el) %{_datadir}/mysql/greek
-%lang(hu) %{_datadir}/mysql/hungarian
-%lang(it) %{_datadir}/mysql/italian
-%lang(ja) %{_datadir}/mysql/japanese
-%lang(ko) %{_datadir}/mysql/korean
-%lang(no) %{_datadir}/mysql/norwegian
-%lang(no) %{_datadir}/mysql/norwegian-ny
-%lang(pl) %{_datadir}/mysql/polish
-%lang(pt) %{_datadir}/mysql/portuguese
-%lang(ro) %{_datadir}/mysql/romanian
-%lang(ru) %{_datadir}/mysql/russian
-%lang(sr) %{_datadir}/mysql/serbian
-%lang(sk) %{_datadir}/mysql/slovak
-%lang(es) %{_datadir}/mysql/spanish
-%lang(sv) %{_datadir}/mysql/swedish
-%lang(uk) %{_datadir}/mysql/ukrainian
-%{_datadir}/mysql/charsets
-
-%files -n mysql-server%{product_suffix} -f release/support-files/plugins.files
-%defattr(-,root,root)
-%doc release/support-files/*.cnf
-%if 0%{?commercial}
- %doc %{_datadir}/info/mysql.info*
-%endif
-%doc %{src_dir}/Docs/ChangeLog
-%doc %{src_dir}/Docs/INFO_SRC*
-%doc release/Docs/INFO_BIN*
-
-%{_bindir}/myisamchk
-%{_bindir}/myisam_ftdump
-%{_bindir}/myisamlog
-%{_bindir}/myisampack
-%{_bindir}/mysql_convert_table_format
-%{_bindir}/mysql_fix_extensions
-%{_bindir}/mysql_install_db
-%{_bindir}/mysql_plugin
-%{_bindir}/mysql_secure_installation
-%if %{commercial}
-%else
-%{_bindir}/mysql_setpermission
-%endif
-%{_bindir}/mysql_tzinfo_to_sql
-%{_bindir}/mysql_upgrade
-%{_bindir}/mysql_zap
-%{_bindir}/mysqlbug
-%{_bindir}/mysqldumpslow
-%{_bindir}/mysqld_multi
-%{_bindir}/mysqld_safe
-%{_bindir}/mysqlhotcopy
-%{_bindir}/mysqltest
-%{_bindir}/innochecksum
-%{_bindir}/perror
-%{_bindir}/replace
-%{_bindir}/resolve_stack_dump
-%{_bindir}/resolveip
-
-/usr/libexec/mysqld
-/usr/libexec/mysqld-debug
-%{_libdir}/mysql/plugin/daemon_example.ini
-
-%if %{WITH_TCMALLOC}
-%{_libdir}/mysql/%{malloc_lib_target}
-%endif
-
-# obsolete by "-f release/support-files/plugins.files" above
-# %{_libdir}/mysql/plugin
-
-%{_mandir}/man1/msql2mysql.1*
-%{_mandir}/man1/myisamchk.1*
-%{_mandir}/man1/myisamlog.1*
-%{_mandir}/man1/myisampack.1*
-%{_mandir}/man1/mysql_convert_table_format.1*
-%{_mandir}/man1/myisam_ftdump.1*
-%{_mandir}/man1/mysql.server.1*
-%{_mandir}/man1/mysql_fix_extensions.1*
-%{_mandir}/man1/mysql_install_db.1*
-%{_mandir}/man1/mysql_plugin.1*
-%{_mandir}/man1/mysql_secure_installation.1*
-%{_mandir}/man1/mysql_upgrade.1*
-%{_mandir}/man1/mysql_zap.1*
-%{_mandir}/man1/mysqlbug.1*
-%{_mandir}/man1/mysqldumpslow.1*
-%{_mandir}/man1/mysqlbinlog.1*
-%{_mandir}/man1/mysqlcheck.1*
-%{_mandir}/man1/mysqld_multi.1*
-%{_mandir}/man1/mysqld_safe.1*
-%{_mandir}/man1/mysqlhotcopy.1*
-%{_mandir}/man1/mysqlimport.1*
-%{_mandir}/man1/mysqlman.1*
-%if %{commercial}
-%else
-%{_mandir}/man1/mysql_setpermission.1*
-%endif
-%{_mandir}/man1/mysqltest.1*
-%{_mandir}/man1/innochecksum.1*
-%{_mandir}/man1/perror.1*
-%{_mandir}/man1/replace.1*
-%{_mandir}/man1/resolve_stack_dump.1*
-%{_mandir}/man1/resolveip.1*
-%{_mandir}/man1/mysql_tzinfo_to_sql.1*
-%{_mandir}/man8/mysqld.8*
-
-%{_datadir}/mysql/errmsg-utf8.txt
-%{_datadir}/mysql/fill_help_tables.sql
-%{_datadir}/mysql/magic
-%{_datadir}/mysql/mysql_system_tables.sql
-%{_datadir}/mysql/mysql_system_tables_data.sql
-%{_datadir}/mysql/mysql_test_data_timezone.sql
-%{_datadir}/mysql/my-*.cnf
-%{_datadir}/mysql/config.*.ini
-
-/etc/rc.d/init.d/mysqld
-%attr(0755,mysql,mysql) %dir /var/run/mysqld
-%attr(0755,mysql,mysql) %dir /var/lib/mysql
-%attr(0640,mysql,mysql) %config(noreplace) %verify(not md5 size mtime) /var/log/mysqld.log
-
-# TODO / FIXME: Do we need "libmygcc.a"? If yes, append "-f optional-files-devel"
-# and fix the "rm -f" list in the "install" section.
-%files -n mysql-devel%{product_suffix}
-%defattr(-,root,root)
-/usr/include/mysql
-/usr/share/aclocal/mysql.m4
-%{_libdir}/mysql/libmysqlclient*.so
-
-%files -n mysql-embedded%{product_suffix}
-%defattr(-,root,root)
-%doc %{license_files_server}
-%{_libdir}/mysql/libmysqld.so.*
-%{_bindir}/mysql_embedded
-
-%files -n mysql-embedded-devel%{product_suffix}
-%defattr(-,root,root)
-%{_libdir}/mysql/libmysqld.so
-%{_bindir}/mysql_client_test_embedded
-%{_bindir}/mysqltest_embedded
-%{_mandir}/man1/mysql_client_test_embedded.1*
-%{_mandir}/man1/mysqltest_embedded.1*
-
-%files -n mysql-test%{product_suffix}
-%defattr(-,root,root)
-%{_bindir}/mysql_client_test
-%attr(-,mysql,mysql) %{_datadir}/mysql-test
-
-%{_mandir}/man1/mysql_client_test.1*
-
-%changelog
-* Tue Nov 05 2013 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com>
-- Removed non gpl file mysql.info from community packages
-
-* Wed Jul 10 2013 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com>
-- Removed directory /usr/share/mysql/solaris/postinstall-solaris to resolve build
- error
-
-* Thu Dec 7 2012 Joerg Bruehe <joerg.bruehe@oracle.com>
-- Change the way in which "libmysqld.so" is created: Using all object modules
- was wrong, gcc / ld can resolve the dependencies from "libmysqld.a".
- Also, identify the ".so" version from the MySQL version, "0.0.1" was wrong.
- Bug#15972480
-
-* Tue Sep 18 2012 Joerg Bruehe <joerg.bruehe@oracle.com>
-- Restrict the vendor check to Oracle: There is no history here
- which we have to allow for.
-
-* Thu Jul 26 2012 Joerg Bruehe <joerg.bruehe@oracle.com>
-- Add the vendor and release series checks from the traditional MySQL RPM
- spec file, to protect against errors happening during upgrades.
-- Do some code alignment with the traditional MySQL RPM spec file,
- to make synchronous maintenance (and possibly even integration?) easier.
-
-* Mon Feb 13 2012 Joerg Bruehe <joerg.bruehe@oracle.com>
-- Add "Provides:" lines for the generic names of the subpackages,
- independent of "product_suffix".
-
-* Tue Feb 7 2012 Joerg Bruehe <joerg.bruehe@oracle.com>
-- Make "mysql_setpermission" and its man page appear in GPL builds only.
-
-* Thu Nov 24 2011 Joerg Bruehe <joerg.bruehe@oracle.com>
-- Add two patches (#18 + #19) regarding the test suite;
- version 1 of "mysql-test-run.pl" had to go because the auto-detection
- of Perl dependencies does not handle differences between run directory
- and delivery location.
-
-* Thu Nov 3 2011 Joerg Bruehe <joerg.bruehe@oracle.com>
-- Adapt from MySQL 5.1 to 5.5, tested using 5.5.17:
- - Done by the MySQL Build Team at Oracle:
- set as packager, set copyright owner and related info;
- - handle command line options, allowing different configurations, platforms, ...
- - configurations will show up in the file name as "product_suffix",
- - use "-n" for all subpackage specifications,
- - license may be GPL or commercial, mention that in the description,
- the license output and the included license files will vary,
- - commercial is "nosource",
- - improve "requires" listings for different platforms,
- - explicitly use "product_suffix" in the "requires" entries;
- - adapt to 5.5 changes in features and function:
- - remove "mysql-bench" package (files are outdated, not maintained),
- - no InnoDB plugin,
- - the set of plugins will vary by configuration, to control the "server"
- package contents use "-f release/support-files/plugins.files" in the
- "files" section,
- - remove "mysqlmanager", "mysql_fix_privilege_tables",
- - add "mysql_embedded", "mysql-plugin", "mysqlaccess.conf", "magic",
- - "errmsg.txt" is now in UTF8: "errmsg-utf8.txt",
- - adapt patches to changed code where needed, rename these to include "5.5",
- - stop using patches which are not applicable to 5.5;
- - 5.5 uses a different way of building:
- - autotools are replaced by cmake,
- - both a "release" and a "debug" server are built in separate subtrees
- ("out of source"!), this also affects path names in further handling,
- - the debug server is added to the "server" subpackage,
- - add "mysql-5.5-libdir.patch" to handle file placement at user site.
-
-* Mon Dec 20 2010 Tom Lane <tgl@redhat.com> 5.1.52-1.1
-- Update to MySQL 5.1.52, for various fixes described at
- http://dev.mysql.com/doc/refman/5.1/en/news-5-1-52.html
- including numerous small security issues
-Resolves: #652553
-- Sync with current Fedora package; this includes:
-- Duplicate COPYING and EXCEPTIONS-CLIENT in -libs and -embedded subpackages,
- to ensure they are available when any subset of mysql RPMs are installed,
- per revised packaging guidelines
-- Allow init script's STARTTIMEOUT/STOPTIMEOUT to be overridden from sysconfig
-
-* Thu Jul 15 2010 Tom Lane <tgl@redhat.com> 5.1.47-4
-- Add backported patch for CVE-2010-2008 (upstream bug 53804)
-Resolves: #614215
-- Add BuildRequires perl(Time::HiRes) ... seems to no longer be installed
- by just pulling in perl.
-
-* Mon Jun 28 2010 Tom Lane <tgl@redhat.com> 5.1.47-3
-- Add -p "$mypidfile" to initscript's status call to improve corner cases.
- (Note: can't be fixed in Fedora until 595597 is fixed there.)
-Resolves: #596008
-
-* Mon Jun 7 2010 Tom Lane <tgl@redhat.com> 5.1.47-2
-- Add back "partition" storage engine
-Resolves: #598585
-- Fix broken "federated" storage engine plugin
-Resolves: #587170
-- Read all certificates in SSL certificate files, to support chained certs
-Resolves: #598656
-
-* Mon May 24 2010 Tom Lane <tgl@redhat.com> 5.1.47-1
-- Update to MySQL 5.1.47, for various fixes described at
- http://dev.mysql.com/doc/refman/5.1/en/news-5-1-47.html
- http://dev.mysql.com/doc/refman/5.1/en/news-5-1-46.html
- http://dev.mysql.com/doc/refman/5.1/en/news-5-1-45.html
- including fixes for CVE-2010-1621, CVE-2010-1626,
- CVE-2010-1848, CVE-2010-1849, CVE-2010-1850
-Resolves: #590598
-- Create mysql group explicitly in pre-server script, to ensure correct GID
-
-* Mon Mar 8 2010 Tom Lane <tgl@redhat.com> 5.1.44-2
-- Update to MySQL 5.1.44, for various fixes described at
- http://dev.mysql.com/doc/refman/5.1/en/news-5-1-44.html
-Resolves: #565554
-- Remove mysql.info, which is not freely redistributable
-Related: #560181
-- Revert broken upstream fix for their bug 45058
-Related: #566547
-- Bring init script into some modicum of compliance with Fedora/LSB standards
-Resolves: #557711
-Resolves: #562749
-
-* Mon Feb 15 2010 Tom Lane <tgl@redhat.com> 5.1.43-2
-- Update to MySQL 5.1.43, for various fixes described at
- http://dev.mysql.com/doc/refman/5.1/en/news-5-1-43.html
-Resolves: #565554
-- Remove mysql-cluster, which is no longer supported by upstream in this
- source distribution. If we want it we'll need a separate SRPM for it.
-Resolves: #565210
-
-* Fri Jan 29 2010 Tom Lane <tgl@redhat.com> 5.1.42-7
-- Add backported patch for CVE-2008-7247 (upstream bug 39277)
-Resolves: #549329
-- Use non-expired certificates for SSL testing (upstream bug 50702)
-
-* Tue Jan 26 2010 Tom Lane <tgl@redhat.com> 5.1.42-6
-- Emit explicit error message if user tries to build RPM as root
-Resolves: #558915
-
-* Wed Jan 20 2010 Tom Lane <tgl@redhat.com> 5.1.42-5
-- Correct Source0: tag and comment to reflect how to get the tarball
-
-* Fri Jan 8 2010 Tom Lane <tgl@redhat.com> 5.1.42-4
-- Sync with current Fedora build, including:
-- Update to MySQL 5.1.42, for various fixes described at
- http://dev.mysql.com/doc/refman/5.1/en/news-5-1-42.html
-- Disable symbolic links by default in /etc/my.cnf
-Resolves: #553653
-- Remove static libraries (.a files) from package, per packaging guidelines
-- Change %%define to %%global, per packaging guidelines
-- Disable building the innodb plugin; it tickles assorted gcc bugs and
- doesn't seem entirely ready for prime time anyway.
-Resolves: #553632
-- Start mysqld_safe with --basedir=/usr, to avoid unwanted SELinux messages
- (see 547485)
-- Stop waiting during "service mysqld start" if mysqld_safe exits
-Resolves: #544095
-
-* Mon Nov 23 2009 Tom Lane <tgl@redhat.com> 5.1.41-1
-- Update to MySQL 5.1.41, for various fixes described at
- http://dev.mysql.com/doc/refman/5.1/en/news-5-1-41.html
- including fixes for CVE-2009-4019
-Resolves: #549327
-- Don't set old_passwords=1; we aren't being bug-compatible with 3.23 anymore
-Resolves: #540735
-
-* Tue Nov 10 2009 Tom Lane <tgl@redhat.com> 5.1.40-1
-- Update to MySQL 5.1.40, for various fixes described at
- http://dev.mysql.com/doc/refman/5.1/en/news-5-1-40.html
-- Do not force the --log-error setting in mysqld init script
-Resolves: #533736
-
-* Sat Oct 17 2009 Tom Lane <tgl@redhat.com> 5.1.39-4
-- Replace kluge fix for ndbd sparc crash with a real fix (mysql bug 48132)
-
-* Thu Oct 15 2009 Tom Lane <tgl@redhat.com> 5.1.39-3
-- Work around two different compiler bugs on sparc, one by backing off
- optimization from -O2 to -O1, and the other with a klugy patch
-Related: #529298, #529299
-- Clean up bogosity in multilib stub header support: ia64 should not be
- listed (it's not multilib), sparc and sparc64 should be
-
-* Wed Sep 23 2009 Tom Lane <tgl@redhat.com> 5.1.39-2
-- Work around upstream bug 46895 by disabling outfile_loaddata test
-
-* Tue Sep 22 2009 Tom Lane <tgl@redhat.com> 5.1.39-1
-- Update to MySQL 5.1.39, for various fixes described at
- http://dev.mysql.com/doc/refman/5.1/en/news-5-1-39.html
-
-* Mon Aug 31 2009 Tom Lane <tgl@redhat.com> 5.1.37-5
-- Work around unportable assumptions about stpcpy(); re-enable main.mysql test
-- Clean up some obsolete parameters to the configure script
-
-* Sat Aug 29 2009 Tom Lane <tgl@redhat.com> 5.1.37-4
-- Remove one misguided patch; turns out I was chasing a glibc bug
-- Temporarily disable "main.mysql" test; there's something broken there too,
- but we need to get mysql built in rawhide for dependency reasons
-
-* Fri Aug 21 2009 Tomas Mraz <tmraz@redhat.com> - 5.1.37-3
-- rebuilt with new openssl
-
-* Fri Aug 14 2009 Tom Lane <tgl@redhat.com> 5.1.37-2
-- Add a couple of patches to improve the probability of the regression tests
- completing in koji builds
-
-* Sun Aug 2 2009 Tom Lane <tgl@redhat.com> 5.1.37-1
-- Update to MySQL 5.1.37, for various fixes described at
- http://dev.mysql.com/doc/refman/5.1/en/news-5-1-37.html
-
-* Sat Jul 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 5.1.36-2
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
-
-* Fri Jul 10 2009 Tom Lane <tgl@redhat.com> 5.1.36-1
-- Update to MySQL 5.1.36, for various fixes described at
- http://dev.mysql.com/doc/refman/5.1/en/news-5-1-36.html
-
-* Sat Jun 6 2009 Tom Lane <tgl@redhat.com> 5.1.35-1
-- Update to MySQL 5.1.35, for various fixes described at
- http://dev.mysql.com/doc/refman/5.1/en/news-5-1-35.html
-- Ensure that /var/lib/mysql is created with the right SELinux context
-Resolves: #502966
-
-* Fri May 15 2009 Tom Lane <tgl@redhat.com> 5.1.34-1
-- Update to MySQL 5.1.34, for various fixes described at
- http://dev.mysql.com/doc/refman/5.1/en/news-5-1-34.html
-- Increase startup timeout per bug #472222
-
-* Wed Apr 15 2009 Tom Lane <tgl@redhat.com> 5.1.33-2
-- Increase stack size of ndbd threads for safety's sake.
-Related: #494631
-
-* Tue Apr 7 2009 Tom Lane <tgl@redhat.com> 5.1.33-1
-- Update to MySQL 5.1.33.
-- Disable use of pthread_setschedparam; doesn't work the way code expects.
-Related: #477624
-
-* Wed Mar 4 2009 Tom Lane <tgl@redhat.com> 5.1.32-1
-- Update to MySQL 5.1.32.
-
-* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 5.1.31-2
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
-
-* Fri Feb 13 2009 Tom Lane <tgl@redhat.com> 5.1.31-1
-- Update to MySQL 5.1.31.
-
-* Thu Jan 22 2009 Tom Lane <tgl@redhat.com> 5.1.30-2
-- hm, apparently --with-innodb and --with-ndbcluster are still needed
- even though no longer documented ...
-
-* Thu Jan 22 2009 Tom Lane <tgl@redhat.com> 5.1.30-1
-- Update to MySQL 5.1.30. Note that this includes an ABI break for
- libmysqlclient (it's now got .so major version 16).
-- This also updates mysql for new openssl build
-
-* Wed Oct 1 2008 Tom Lane <tgl@redhat.com> 5.0.67-2
-- Build the "embedded server" library, and package it in a new sub-RPM
- mysql-embedded, along with mysql-embedded-devel for devel support files.
-Resolves: #149829
-
-* Sat Aug 23 2008 Tom Lane <tgl@redhat.com> 5.0.67-1
-- Update to mysql version 5.0.67
-- Move mysql_config's man page to base package, again (apparently I synced
- that change the wrong way while importing specfile changes for ndbcluster)
-
-* Sun Jul 27 2008 Tom Lane <tgl@redhat.com> 5.0.51a-2
-- Enable ndbcluster support
-Resolves: #163758
-- Suppress odd crash messages during package build, caused by trying to
- build dbug manual (which we don't install anyway) with dbug disabled
-Resolves: #437053
-- Improve mysql.init to pass configured datadir to mysql_install_db,
- and to force user=mysql for both mysql_install_db and mysqld_safe.
-Related: #450178
-
-* Mon Mar 3 2008 Tom Lane <tgl@redhat.com> 5.0.51a-1
-- Update to mysql version 5.0.51a
-
-* Mon Mar 3 2008 Tom Lane <tgl@redhat.com> 5.0.45-11
-- Fix mysql-stack-guard patch to work correctly on IA64
-- Fix mysql.init to wait correctly when socket is not in default place
-Related: #435494
-
-* Mon Mar 03 2008 Dennis Gilmore <dennis@ausil.us> 5.0.45-10
-- add sparc64 to 64 bit arches for test suite checking
-- add sparc, sparcv9 and sparc64 to multilib handling
-
-* Thu Feb 28 2008 Tom Lane <tgl@redhat.com> 5.0.45-9
-- Fix the stack overflow problem encountered in January. It seems the real
-issue is that the buildfarm machines were moved to RHEL5, which uses 64K not
-4K pages on PPC, and because RHEL5 takes the guard area out of the requested
-thread stack size we no longer had enough headroom.
-Related: #435337
-
-* Tue Feb 19 2008 Fedora Release Engineering <rel-eng@fedoraproject.org> - 5.0.45-8
-- Autorebuild for GCC 4.3
-
-* Tue Jan 8 2008 Tom Lane <tgl@redhat.com> 5.0.45-7
-- Unbelievable ... upstream still thinks that it's a good idea to have a
- regression test that is guaranteed to begin failing come January 1.
-- ... and it seems we need to raise STACK_MIN_SIZE again too.
-
-* Thu Dec 13 2007 Tom Lane <tgl@redhat.com> 5.0.45-6
-- Back-port upstream fixes for CVE-2007-5925, CVE-2007-5969, CVE-2007-6303.
-Related: #422211
-
-* Wed Dec 5 2007 Tom Lane <tgl@redhat.com> 5.0.45-5
-- Rebuild for new openssl
-
-* Sat Aug 25 2007 Tom Lane <tgl@redhat.com> 5.0.45-4
-- Seems we need explicit BuildRequires on gawk and procps now
-- Rebuild to fix Fedora toolchain issues
-
-* Sun Aug 12 2007 Tom Lane <tgl@redhat.com> 5.0.45-3
-- Recent perl changes in rawhide mean we need a more specific BuildRequires
-
-* Thu Aug 2 2007 Tom Lane <tgl@redhat.com> 5.0.45-2
-- Update License tag to match code.
-- Work around recent Fedora change that makes "open" a macro name.
-
-* Sun Jul 22 2007 Tom Lane <tgl@redhat.com> 5.0.45-1
-- Update to MySQL 5.0.45
-Resolves: #246535
-- Move mysql_config's man page to base package
-Resolves: #245770
-- move my_print_defaults to base RPM, for consistency with Stacks packaging
-- mysql user is no longer deleted at RPM uninstall
-Resolves: #241912
-
-* Thu Mar 29 2007 Tom Lane <tgl@redhat.com> 5.0.37-2
-- Use a less hacky method of getting default values in initscript
-Related: #233771, #194596
-- Improve packaging of mysql-libs per suggestions from Remi Collet
-Resolves: #233731
-- Update default /etc/my.cnf ([mysql.server] has been bogus for a long time)
-
-* Mon Mar 12 2007 Tom Lane <tgl@redhat.com> 5.0.37-1
-- Update to MySQL 5.0.37
-Resolves: #231838
-- Put client library into a separate mysql-libs RPM to reduce dependencies
-Resolves: #205630
-
-* Fri Feb 9 2007 Tom Lane <tgl@redhat.com> 5.0.33-1
-- Update to MySQL 5.0.33
-- Install band-aid fix for "view" regression test designed to fail after 2006
-- Don't chmod -R the entire database directory tree on every startup
-Related: #221085
-- Fix unsafe use of install-info
-Resolves: #223713
-- Cope with new automake in F7
-Resolves: #224171
-
-* Thu Nov 9 2006 Tom Lane <tgl@redhat.com> 5.0.27-1
-- Update to MySQL 5.0.27 (see CVE-2006-4031, CVE-2006-4226, CVE-2006-4227)
-Resolves: #202247, #202675, #203427, #203428, #203432, #203434, #208641
-- Fix init script to return status 1 on server start timeout
-Resolves: #203910
-- Move mysqldumpslow from base package to mysql-server
-Resolves: #193559
-- Adjust link options for BDB module
-Resolves: #199368
-
-* Wed Jul 12 2006 Jesse Keating <jkeating@redhat.com> - 5.0.22-2.1
-- rebuild
-
-* Sat Jun 10 2006 Tom Lane <tgl@redhat.com> 5.0.22-2
-- Work around brew's tendency not to clean up failed builds completely,
- by adding code in mysql-testing.patch to kill leftover mysql daemons.
-
-* Thu Jun 8 2006 Tom Lane <tgl@redhat.com> 5.0.22-1
-- Update to MySQL 5.0.22 (fixes CVE-2006-2753)
-- Install temporary workaround for gcc bug on s390x (bz #193912)
-
-* Tue May 2 2006 Tom Lane <tgl@redhat.com> 5.0.21-2
-- Fix bogus perl Requires for mysql-test
-
-* Mon May 1 2006 Tom Lane <tgl@redhat.com> 5.0.21-1
-- Update to MySQL 5.0.21
-
-* Mon Mar 27 2006 Tom Lane <tgl@redhat.com> 5.0.18-4
-- Modify multilib header hack to not break non-RH arches, per bug #181335
-- Remove logrotate script, per bug #180639.
-- Add a new mysql-test RPM to carry the regression test files;
- hack up test scripts as needed to make them run in /usr/share/mysql-test.
-
-* Fri Feb 10 2006 Jesse Keating <jkeating@redhat.com> - 5.0.18-2.1
-- bump again for double-long bug on ppc(64)
-
-* Thu Feb 9 2006 Tom Lane <tgl@redhat.com> 5.0.18-2
-- err-log option has been renamed to log-error, fix my.cnf and initscript
-
-* Tue Feb 07 2006 Jesse Keating <jkeating@redhat.com> - 5.0.18-1.1
-- rebuilt for new gcc4.1 snapshot and glibc changes
-
-* Thu Jan 5 2006 Tom Lane <tgl@redhat.com> 5.0.18-1
-- Update to MySQL 5.0.18
-
-* Thu Dec 15 2005 Tom Lane <tgl@redhat.com> 5.0.16-4
-- fix my_config.h for ppc platforms
-
-* Thu Dec 15 2005 Tom Lane <tgl@redhat.com> 5.0.16-3
-- my_config.h needs to guard against 64-bit platforms that also define the
- 32-bit symbol
-
-* Wed Dec 14 2005 Tom Lane <tgl@redhat.com> 5.0.16-2
-- oops, looks like we want uname -i not uname -m
-
-* Mon Dec 12 2005 Tom Lane <tgl@redhat.com> 5.0.16-1
-- Update to MySQL 5.0.16
-- Add EXCEPTIONS-CLIENT license info to the shipped documentation
-- Make my_config.h architecture-independent for multilib installs;
- put the original my_config.h into my_config_$ARCH.h
-- Add -fwrapv to CFLAGS so that gcc 4.1 doesn't break it
-
-* Fri Dec 09 2005 Jesse Keating <jkeating@redhat.com>
-- rebuilt
-
-* Mon Nov 14 2005 Tom Lane <tgl@redhat.com> 5.0.15-3
-- Make stop script wait for daemon process to disappear (bz#172426)
-
-* Wed Nov 9 2005 Tom Lane <tgl@redhat.com> 5.0.15-2
-- Rebuild due to openssl library update.
-
-* Thu Nov 3 2005 Tom Lane <tgl@redhat.com> 5.0.15-1
-- Update to MySQL 5.0.15 (scratch build for now)
-
-* Wed Oct 5 2005 Tom Lane <tgl@redhat.com> 4.1.14-1
-- Update to MySQL 4.1.14
-
-* Tue Aug 23 2005 Tom Lane <tgl@redhat.com> 4.1.12-3
-- Use politically correct patch name.
-
-* Tue Jul 12 2005 Tom Lane <tgl@redhat.com> 4.1.12-2
-- Fix buffer overflow newly exposed in isam code; it's the same issue
- previously found in myisam, and not very exciting, but I'm tired of
- seeing build warnings.
-
-* Mon Jul 11 2005 Tom Lane <tgl@redhat.com> 4.1.12-1
-- Update to MySQL 4.1.12 (includes a fix for bz#158688, bz#158689)
-- Extend mysql-test-ssl.patch to solve rpl_openssl test failure (bz#155850)
-- Update mysql-lock-ssl.patch to match the upstream committed version
-- Add --with-isam to re-enable the old ISAM table type, per bz#159262
-- Add dependency on openssl-devel per bz#159569
-- Remove manual.txt, as upstream decided not to ship it anymore;
- it was redundant with the mysql.info file anyway.
-
-* Mon May 9 2005 Tom Lane <tgl@redhat.com> 4.1.11-4
-- Include proper locking for OpenSSL in the server, per bz#155850
-
-* Mon Apr 25 2005 Tom Lane <tgl@redhat.com> 4.1.11-3
-- Enable openssl tests during build, per bz#155850
-- Might as well turn on --disable-dependency-tracking
-
-* Fri Apr 8 2005 Tom Lane <tgl@redhat.com> 4.1.11-2
-- Avoid dependency on <asm/atomic.h>, cause it won't build anymore on ia64.
- This is probably a cleaner solution for bz#143537, too.
-
-* Thu Apr 7 2005 Tom Lane <tgl@redhat.com> 4.1.11-1
-- Update to MySQL 4.1.11 to fix bz#152911 as well as other issues
-- Move perl-DBI, perl-DBD-MySQL dependencies to server package (bz#154123)
-- Override configure thread library test to suppress HAVE_LINUXTHREADS check
-- Fix BDB failure on s390x (bz#143537)
-- At last we can enable "make test" on all arches
-
-* Fri Mar 11 2005 Tom Lane <tgl@redhat.com> 4.1.10a-1
-- Update to MySQL 4.1.10a to fix security vulnerabilities (bz#150868,
- for CAN-2005-0711, and bz#150871 for CAN-2005-0709, CAN-2005-0710).
-
-* Sun Mar 6 2005 Tom Lane <tgl@redhat.com> 4.1.10-3
-- Fix package Requires: interdependencies.
-
-* Sat Mar 5 2005 Tom Lane <tgl@redhat.com> 4.1.10-2
-- Need -fno-strict-aliasing in at least one place, probably more.
-- Work around some C spec violations in mysql.
-
-* Fri Feb 18 2005 Tom Lane <tgl@redhat.com> 4.1.10-1
-- Update to MySQL 4.1.10.
-
-* Sat Jan 15 2005 Tom Lane <tgl@redhat.com> 4.1.9-1
-- Update to MySQL 4.1.9.
-
-* Wed Jan 12 2005 Tom Lane <tgl@redhat.com> 4.1.7-10
-- Don't assume /etc/my.cnf will specify pid-file (bz#143724)
-
-* Wed Jan 12 2005 Tim Waugh <twaugh@redhat.com> 4.1.7-9
-- Rebuilt for new readline.
-
-* Tue Dec 21 2004 Tom Lane <tgl@redhat.com> 4.1.7-8
-- Run make test on all archs except s390x (which seems to have a bdb issue)
-
-* Mon Dec 13 2004 Tom Lane <tgl@redhat.com> 4.1.7-7
-- Suppress someone's silly idea that libtool overhead can be skipped
-
-* Sun Dec 12 2004 Tom Lane <tgl@redhat.com> 4.1.7-6
-- Fix init script to not need a valid username for startup check (bz#142328)
-- Fix init script to honor settings appearing in /etc/my.cnf (bz#76051)
-- Enable SSL (bz#142032)
-
-* Thu Dec 2 2004 Tom Lane <tgl@redhat.com> 4.1.7-5
-- Add a restorecon to keep the mysql.log file in the right context (bz#143887)
-
-* Tue Nov 23 2004 Tom Lane <tgl@redhat.com> 4.1.7-4
-- Turn off old_passwords in default /etc/my.cnf file, for better compatibility
- with mysql 3.x clients (per suggestion from Joe Orton).
-
-* Fri Oct 29 2004 Tom Lane <tgl@redhat.com> 4.1.7-3
-- Handle ldconfig more cleanly (put a file in /etc/ld.so.conf.d/).
-
-* Thu Oct 28 2004 Tom Lane <tgl@redhat.com> 4.1.7-2
-- rebuild in devel branch
-
-* Wed Oct 27 2004 Tom Lane <tgl@redhat.com> 4.1.7-1
-- Update to MySQL 4.1.x.
-
-* Tue Oct 12 2004 Tom Lane <tgl@redhat.com> 3.23.58-13
-- fix security issues CAN-2004-0835, CAN-2004-0836, CAN-2004-0837
- (bugs #135372, 135375, 135387)
-- fix privilege escalation on GRANT ALL ON `Foo\_Bar` (CAN-2004-0957)
-
-* Wed Oct 06 2004 Tom Lane <tgl@redhat.com> 3.23.58-12
-- fix multilib problem with mysqlbug and mysql_config
-- adjust chkconfig priority per bug #128852
-- remove bogus quoting per bug #129409 (MySQL 4.0 has done likewise)
-- add sleep to mysql.init restart(); may or may not fix bug #133993
-
-* Tue Oct 05 2004 Tom Lane <tgl@redhat.com> 3.23.58-11
-- fix low-priority security issues CAN-2004-0388, CAN-2004-0381, CAN-2004-0457
- (bugs #119442, 125991, 130347, 130348)
-- fix bug with dropping databases under recent kernels (bug #124352)
-
-* Tue Jun 15 2004 Elliot Lee <sopwith@redhat.com> 3.23.58-10
-- rebuilt
-
-* Sat Apr 17 2004 Warren Togami <wtogami@redhat.com> 3.23.58-9
-- remove redundant INSTALL-SOURCE, manual.*
-- compress manual.txt.bz2
-- BR time
-
-* Tue Mar 16 2004 Tom Lane <tgl@redhat.com> 3.23.58-8
-- repair logfile attributes in %%files, per bug #102190
-- repair quoting problem in mysqlhotcopy, per bug #112693
-- repair missing flush in mysql_setpermission, per bug #113960
-- repair broken error message printf, per bug #115165
-- delete mysql user during uninstall, per bug #117017
-- rebuilt
-
-* Tue Mar 02 2004 Elliot Lee <sopwith@redhat.com>
-- rebuilt
-
-* Tue Feb 24 2004 Tom Lane <tgl@redhat.com>
-- fix chown syntax in mysql.init
-- rebuild
-
-* Fri Feb 13 2004 Elliot Lee <sopwith@redhat.com>
-- rebuilt
-
-* Tue Nov 18 2003 Kim Ho <kho@redhat.com> 3.23.58-5
-- update mysql.init to use anonymous user (UNKNOWN_MYSQL_USER) for
- pinging mysql server (#108779)
-
-* Mon Oct 27 2003 Kim Ho <kho@redhat.com> 3.23.58-4
-- update mysql.init to wait (max 10 seconds) for mysql server to
- start (#58732)
-
-* Mon Oct 27 2003 Patrick Macdonald <patrickm@redhat.com> 3.23.58-3
-- re-enable Berkeley DB support (#106832)
-- re-enable ia64 testing
-
-* Fri Sep 19 2003 Patrick Macdonald <patrickm@redhat.com> 3.23.58-2
-- rebuilt
-
-* Mon Sep 15 2003 Patrick Macdonald <patrickm@redhat.com> 3.23.58-1
-- upgrade to 3.23.58 for security fix
-
-* Tue Aug 26 2003 Patrick Macdonald <patrickm@redhat.com> 3.23.57-2
-- rebuilt
-
-* Wed Jul 02 2003 Patrick Macdonald <patrickm@redhat.com> 3.23.57-1
-- revert to prior version of MySQL due to license incompatibilities
- with packages that link against the client. The MySQL folks are
- looking into the issue.
-
-* Wed Jun 18 2003 Patrick Macdonald <patrickm@redhat.com> 4.0.13-4
-- restrict test on ia64 (temporary)
-
-* Wed Jun 04 2003 Elliot Lee <sopwith@redhat.com> 4.0.13-3
-- rebuilt
-
-* Thu May 29 2003 Patrick Macdonald <patrickm@redhat.com> 4.0.13-2
-- fix filter-requires-mysql.sh with less restrictive for mysql-bench
-
-* Wed May 28 2003 Patrick Macdonald <patrickm@redhat.com> 4.0.13-1
-- update for MySQL 4.0
-- back-level shared libraries available in mysqlclient10 package
-
-* Fri May 09 2003 Patrick Macdonald <patrickm@redhat.com> 3.23.56-2
-- add sql-bench package (#90110)
-
-* Wed Mar 19 2003 Patrick Macdonald <patrickm@redhat.com> 3.23.56-1
-- upgrade to 3.23.56 for security fixes
-- remove patch for double-free (included in 3.23.56)
-
-* Tue Feb 18 2003 Patrick Macdonald <patrickm@redhat.com> 3.23.54a-11
-- enable thread safe client
-- add patch for double free fix
-
-* Wed Jan 22 2003 Tim Powers <timp@redhat.com>
-- rebuilt
-
-* Mon Jan 13 2003 Karsten Hopp <karsten@redhat.de> 3.23.54a-9
-- disable checks on s390x
-
-* Sat Jan 4 2003 Jeff Johnson <jbj@redhat.com> 3.23.54a-8
-- use internal dep generator.
-
-* Wed Jan 1 2003 Bill Nottingham <notting@redhat.com> 3.23.54a-7
-- fix mysql_config on hammer
-
-* Sun Dec 22 2002 Tim Powers <timp@redhat.com> 3.23.54a-6
-- don't use rpms internal dep generator
-
-* Tue Dec 17 2002 Elliot Lee <sopwith@redhat.com> 3.23.54a-5
-- Push it into the build system
-
-* Mon Dec 16 2002 Joe Orton <jorton@redhat.com> 3.23.54a-4
-- upgrade to 3.23.54a for safe_mysqld fix
-
-* Thu Dec 12 2002 Joe Orton <jorton@redhat.com> 3.23.54-3
-- upgrade to 3.23.54 for latest security fixes
-
-* Tue Nov 19 2002 Jakub Jelinek <jakub@redhat.com> 3.23.52-5
-- Always include <errno.h> for errno
-- Remove unpackaged files
-
-* Tue Nov 12 2002 Florian La Roche <Florian.LaRoche@redhat.de>
-- do not prereq userdel, not used at all
-
-* Mon Sep 9 2002 Trond Eivind Glomsrd <teg@redhat.com> 3.23.52-4
-- Use %%{_libdir}
-- Add patch for x86-64
-
-* Wed Sep 4 2002 Jakub Jelinek <jakub@redhat.com> 3.23.52-3
-- rebuilt with gcc-3.2-7
-
-* Thu Aug 29 2002 Trond Eivind Glomsrd <teg@redhat.com> 3.23.52-2
-- Add --enable-local-infile to configure - a new option
- which doesn't default to the old behaviour (#72885)
-
-* Fri Aug 23 2002 Trond Eivind Glomsrd <teg@redhat.com> 3.23.52-1
-- 3.23.52. Fixes a minor security problem, various bugfixes.
-
-* Sat Aug 10 2002 Elliot Lee <sopwith@redhat.com> 3.23.51-5
-- rebuilt with gcc-3.2 (we hope)
-
-* Mon Jul 22 2002 Trond Eivind Glomsrd <teg@redhat.com> 3.23.51-4
-- rebuild
-
-* Thu Jul 18 2002 Trond Eivind Glomsrd <teg@redhat.com> 3.23.51-3
-- Fix #63543 and #63542
-
-* Thu Jul 11 2002 Trond Eivind Glomsrd <teg@redhat.com> 3.23.51-2
-- Turn off bdb on PPC(#68591)
-- Turn off the assembly optimizations, for safety.
-
-* Wed Jun 26 2002 Trond Eivind Glomsrd <teg@redhat.com> 3.23.51-1
-- Work around annoying auto* thinking this is a crosscompile
-- 3.23.51
-
-* Fri Jun 21 2002 Tim Powers <timp@redhat.com>
-- automated rebuild
-
-* Mon Jun 10 2002 Trond Eivind Glomsrd <teg@redhat.com> 3.23.50-2
-- Add dependency on perl-DBI and perl-DBD-MySQL (#66349)
-
-* Thu May 30 2002 Trond Eivind Glomsrd <teg@redhat.com> 3.23.50-1
-- 3.23.50
-
-* Thu May 23 2002 Tim Powers <timp@redhat.com>
-- automated rebuild
-
-* Mon May 13 2002 Trond Eivind Glomsrd <teg@redhat.com> 3.23.49-4
-- Rebuild
-- Don't set CXX to gcc, it doesn't work anymore
-- Exclude Alpha
-
-* Mon Apr 8 2002 Trond Eivind Glomsrd <teg@redhat.com> 3.23.49-3
-- Add the various .cnf examples as doc files to mysql-server (#60349)
-- Don't include manual.ps, it's just 200 bytes with a URL inside (#60349)
-- Don't include random files in /usr/share/mysql (#60349)
-- langify (#60349)
-
-* Thu Feb 21 2002 Trond Eivind Glomsrd <teg@redhat.com> 3.23.49-2
-- Rebuild
-
-* Sun Feb 17 2002 Trond Eivind Glomsrd <teg@redhat.com> 3.23.49-1
-- 3.23.49
-
-* Thu Feb 14 2002 Trond Eivind Glomsrd <teg@redhat.com> 3.23.48-2
-- work around perl dependency bug.
-
-* Mon Feb 11 2002 Trond Eivind Glomsrd <teg@redhat.com> 3.23.48-1
-- 3.23.48
-
-* Thu Jan 17 2002 Trond Eivind Glomsrd <teg@redhat.com> 3.23.47-4
-- Use kill, not mysqladmin, to flush logs and shut down. Thus,
- an admin password can be set with no problems.
-- Remove reload from init script
-
-* Wed Jan 16 2002 Trond Eivind Glomsrd <teg@redhat.com> 3.23.47-3
-- remove db3-devel from buildrequires,
- MySQL has had its own bundled copy since the mid thirties
-
-* Sun Jan 6 2002 Trond Eivind Glomsrd <teg@redhat.com> 3.23.47-1
-- 3.23.47
-- Don't build for alpha, toolchain immature.
-
-* Mon Dec 3 2001 Trond Eivind Glomsrd <teg@redhat.com> 3.23.46-1
-- 3.23.46
-- use -fno-rtti and -fno-exceptions, and set CXX to increase stability.
- Recommended by mysql developers.
-
-* Sun Nov 25 2001 Trond Eivind Glomsrd <teg@redhat.com> 3.23.45-1
-- 3.23.45
-
-* Wed Nov 14 2001 Trond Eivind Glomsrd <teg@redhat.com> 3.23.44-2
-- centralize definition of datadir in the initscript (#55873)
-
-* Fri Nov 2 2001 Trond Eivind Glomsrd <teg@redhat.com> 3.23.44-1
-- 3.23.44
-
-* Thu Oct 4 2001 Trond Eivind Glomsrd <teg@redhat.com> 3.23.43-1
-- 3.23.43
-
-* Mon Sep 10 2001 Trond Eivind Glomsrd <teg@redhat.com> 3.23.42-1
-- 3.23.42
-- reenable innodb
-
-* Tue Aug 14 2001 Trond Eivind Glomsrd <teg@redhat.com> 3.23.41-1
-- 3.23.41 bugfix release
-- disable innodb, to avoid the broken updates
-- Use "mysqladmin flush_logs" instead of kill -HUP in logrotate
- script (#51711)
-
-* Sat Jul 21 2001 Trond Eivind Glomsrd <teg@redhat.com>
-- 3.23.40, bugfix release
-- Add zlib-devel to buildrequires:
-
-* Fri Jul 20 2001 Trond Eivind Glomsrd <teg@redhat.com>
-- BuildRequires-tweaking
-
-* Thu Jun 28 2001 Trond Eivind Glomsrd <teg@redhat.com>
-- Reenable test, but don't run them for s390, s390x or ia64
-- Make /etc/my.cnf config(noplace). Same for /etc/logrotate.d/mysqld
-
-* Thu Jun 14 2001 Trond Eivind Glomsrd <teg@redhat.com>
-- 3.23.29
-- enable innodb
-- enable assembly again
-- disable tests for now...
-
-* Tue May 15 2001 Trond Eivind Glomsrd <teg@redhat.com>
-- 3.23.38
-- Don't use BDB on Alpha - no fast mutexes
-
-* Tue Apr 24 2001 Trond Eivind Glomsrd <teg@redhat.com>
-- 3.23.37
-- Add _GNU_SOURCE to the compile flags
-
-* Wed Mar 28 2001 Trond Eivind Glomsrd <teg@redhat.com>
-- Make it obsolete our 6.2 PowerTools packages
-- 3.23.36 bugfix release - fixes some security issues
- which didn't apply to our standard configuration
-- Make "make test" part of the build process, except on IA64
- (it fails there)
-
-* Tue Mar 20 2001 Trond Eivind Glomsrd <teg@redhat.com>
-- 3.23.35 bugfix release
-- Don't delete the mysql user on uninstall
-
-* Tue Mar 13 2001 Trond Eivind Glomsrd <teg@redhat.com>
-- 3.23.34a bugfix release
-
-* Wed Feb 7 2001 Trond Eivind Glomsrd <teg@redhat.com>
-- added readline-devel to BuildRequires:
-
-* Tue Feb 6 2001 Trond Eivind Glomsrd <teg@redhat.com>
-- small i18n-fixes to initscript (action needs $)
-
-* Tue Jan 30 2001 Trond Eivind Glomsrd <teg@redhat.com>
-- make it shut down and rotate logs without using mysqladmin
- (from #24909)
-
-* Mon Jan 29 2001 Trond Eivind Glomsrd <teg@redhat.com>
-- conflict with "MySQL"
-
-* Tue Jan 23 2001 Trond Eivind Glomsrd <teg@redhat.com>
-- improve gettextizing
-
-* Mon Jan 22 2001 Trond Eivind Glomsrd <teg@redhat.com>
-- 3.23.32
-- fix logrotate script (#24589)
-
-* Wed Jan 17 2001 Trond Eivind Glomsrd <teg@redhat.com>
-- gettextize
-- move the items in Requires(post): to Requires: in preparation
- for an errata for 7.0 when 3.23.31 is released
-- 3.23.31
-
-* Tue Jan 16 2001 Trond Eivind Glomsrd <teg@redhat.com>
-- add the log file to the rpm database, and make it 0640
- (#24116)
-- as above in logrotate script
-- changes to the init sequence - put most of the data
- in /etc/my.cnf instead of hardcoding in the init script
-- use /var/run/mysqld/mysqld.pid instead of
- /var/run/mysqld/pid
-- use standard safe_mysqld
-- shut down cleaner
-
-* Mon Jan 08 2001 Trond Eivind Glomsrd <teg@redhat.com>
-- 3.23.30
-- do an explicit chmod on /var/lib/mysql in post, to avoid
- any problems with broken permissons. There is a report
- of rm not changing this on its own (#22989)
-
-* Mon Jan 01 2001 Trond Eivind Glomsrd <teg@redhat.com>
-- bzipped source
-- changed from 85 to 78 in startup, so it starts before
- apache (which can use modules requiring mysql)
-
-* Wed Dec 27 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- 3.23.29a
-
-* Tue Dec 19 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- add requirement for new libstdc++, build for errata
-
-* Mon Dec 18 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- 3.23.29
-
-* Mon Nov 27 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- 3.23.28 (gamma)
-- remove old patches, as they are now upstreamed
-
-* Thu Nov 14 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- Add a requirement for a new glibc (#20735)
-- build on IA64
-
-* Wed Nov 1 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- disable more assembly
-
-* Wed Nov 1 2000 Jakub Jelinek <jakub@redhat.com>
-- fix mysql on SPARC (#20124)
-
-* Tue Oct 31 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- 3.23.27
-
-* Wed Oct 25 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- add patch for fixing bogus aliasing in mysql from Jakub,
- which should fix #18905 and #18620
-
-* Mon Oct 23 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- check for negative niceness values, and negate it
- if present (#17899)
-- redefine optflags on IA32 FTTB
-
-* Wed Oct 18 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- 3.23.26, which among other fixes now uses mkstemp()
- instead of tempnam().
-- revert changes made yesterday, the problem is now
- isolated
-
-* Tue Oct 17 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- use the compat C++ compiler FTTB. Argh.
-- add requirement of ncurses4 (see above)
-
-* Sun Oct 01 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- 3.23.25
-- fix shutdown problem (#17956)
-
-* Tue Sep 26 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- Don't try to include no-longer-existing PUBLIC file
- as doc (#17532)
-
-* Thu Sep 12 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- rename config file to /etc/my.cnf, which is what
- mysqld wants... doh. (#17432)
-- include a changed safe_mysqld, so the pid file option
- works.
-- make mysql dir world readable to they can access the
- mysql socket. (#17432)
-- 3.23.24
-
-* Wed Sep 06 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- 3.23.23
-
-* Sun Aug 27 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- Add "|| :" to condrestart to avoid non-zero exit code
-
-* Thu Aug 24 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- it's mysql.com, not mysql.org and use correct path to
- source (#16830)
-
-* Wed Aug 16 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- source file from /etc/rc.d, not /etc/rd.d. Doh.
-
-* Sun Aug 13 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- don't run ldconfig -n, it doesn't update ld.so.cache
- (#16034)
-- include some missing binaries
-- use safe_mysqld to start the server (request from
- mysql developers)
-
-* Sat Aug 05 2000 Bill Nottingham <notting@redhat.com>
-- condrestart fixes
-
-* Mon Aug 01 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- 3.23.22. Disable the old patches, they're now in.
-
-* Thu Jul 27 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- bugfixes in the initscript
-- move the .so link to the devel package
-
-* Wed Jul 19 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- rebuild due to glibc changes
-
-* Tue Jul 18 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- disable compiler patch
-- don't include info directory file
-
-* Mon Jul 17 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- move back to /etc/rc.d/init.d
-
-* Fri Jul 14 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- more cleanups in initscript
-
-* Thu Jul 13 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- add a patch to work around compiler bug
- (from monty@mysql.com)
-
-* Wed Jul 12 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- don't build the SQL daemon statically (glibc problems)
-- fix the logrotate script - only flush log if mysql
- is running
-- change the reloading procedure
-- remove icon - glint is obsolete a long time ago
-
-* Wed Jul 12 2000 Prospector <bugzilla@redhat.com>
-- automatic rebuild
-
-* Mon Jul 10 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- try the new compiler again
-- build the SQL daemon statically
-- add compile time support for complex charsets
-- enable assembler
-- more cleanups in initscript
-
-* Sun Jul 09 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- use old C++ compiler
-- Exclusivearch x86
-
-* Sat Jul 08 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- move .so files to devel package
-- more cleanups
-- exclude sparc for now
-
-* Wed Jul 05 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- 3.23.21
-- remove file from /etc/sysconfig
-- Fix initscript a bit - initialization of databases doesn't
- work yet
-- specify the correct licenses
-- include a /etc/my.conf (empty, FTTB)
-- add conditional restart to spec file
-
-* Tue Jul 2 2000 Jakub Jelinek <jakub@redhat.com>
-- Rebuild with new C++
-
-* Fri Jun 30 2000 Trond Eivind Glomsrd <teg@redhat.com>
-- update to 3.23.20
-- use %%configure, %%makeinstall, %%{_tmppath}, %%{_mandir},
- %%{_infodir}, /etc/init.d
-- remove the bench package
-- change some of the descriptions a little bit
-- fix the init script
-- some compile fixes
-- specify mysql user
-- use mysql uid 27 (postgresql is 26)
-- don't build on ia64
-
-* Sat Feb 26 2000 Jos Vos <jos@xos.nl>
-- Version 3.22.32 release XOS.1 for LinuX/OS 1.8.0
-- Upgrade from version 3.22.27 to 3.22.32.
-- Do "make install" instead of "make install-strip", because "install -s"
- now appears to fail on various scripts. Afterwards, strip manually.
-- Reorganize subpackages, according to common Red Hat packages: the client
- program and shared library become the base package and the server and
- some accompanying files are now in a separate server package. The
- server package implicitly requires the base package (shared library),
- but we have added a manual require tag anyway (because of the shared
- config file, and more).
-- Rename the mysql-benchmark subpackage to mysql-bench.
-
-* Mon Jan 31 2000 Jos Vos <jos@xos.nl>
-- Version 3.22.27 release XOS.2 for LinuX/OS 1.7.1
-- Add post(un)install scripts for updating ld.so.conf (client subpackage).
-
-* Sun Nov 21 1999 Jos Vos <jos@xos.nl>
-- Version 3.22.27 release XOS.1 for LinuX/OS 1.7.0
-- Initial version.
-- Some ideas borrowed from Red Hat Powertools 6.1, although this spec
- file is a full rewrite from scratch.
diff --git a/packaging/rpm-uln/scriptstub.c b/packaging/rpm-uln/scriptstub.c
deleted file mode 100644
index de942c136e7..00000000000
--- a/packaging/rpm-uln/scriptstub.c
+++ /dev/null
@@ -1,32 +0,0 @@
-#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;
-}
diff --git a/plugin/win_auth_client/CMakeLists.txt b/plugin/win_auth_client/CMakeLists.txt
index a017410252d..75ee55117bd 100644
--- a/plugin/win_auth_client/CMakeLists.txt
+++ b/plugin/win_auth_client/CMakeLists.txt
@@ -31,7 +31,6 @@ IF(WIN32)
LINK_LIBRARIES Secur32
MODULE_ONLY COMPONENT SharedLibraries)
- #INSTALL_DEBUG_SYMBOLS(auth_win_client)
#IF(MSVC)
# INSTALL_DEBUG_TARGET(auth_win_client DESTINATION ${INSTALL_LIBDIR}/debug)
#ENDIF()
diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt
index ff4c098295a..7fb57802685 100644
--- a/scripts/CMakeLists.txt
+++ b/scripts/CMakeLists.txt
@@ -227,6 +227,7 @@ SET(libexecdir ${prefix}/${INSTALL_SBINDIR})
SET(scriptdir ${prefix}/${INSTALL_BINDIR})
SET(datadir ${prefix}/${INSTALL_MYSQLSHAREDIR})
SET(pkgdatadir ${prefix}/${INSTALL_MYSQLSHAREDIR})
+SET(libsubdir ${INSTALL_LIBDIR})
SET(pkgincludedir ${prefix}/${INSTALL_INCLUDEDIR})
SET(pkglibdir ${prefix}/${INSTALL_LIBDIR})
SET(pkgplugindir ${prefix}/${INSTALL_PLUGINDIR})
diff --git a/scripts/mysql_config.sh b/scripts/mysql_config.sh
index beff6e5eb5f..e4640961b34 100644
--- a/scripts/mysql_config.sh
+++ b/scripts/mysql_config.sh
@@ -76,7 +76,8 @@ get_full_path ()
me=`get_full_path $0`
-basedir=`echo $me | sed -e 's;/bin/mysql_config;;'`
+# Script might have been renamed but assume mysql_<something>config<something>
+basedir=`echo $me | sed -e 's;/bin/mysql_.*config.*;;'`
ldata='@localstatedir@'
execdir='@libexecdir@'
@@ -85,11 +86,11 @@ bindir='@bindir@'
# If installed, search for the compiled in directory first (might be "lib64")
pkglibdir='@pkglibdir@'
pkglibdir_rel=`echo $pkglibdir | sed -e "s;^$basedir/;;"`
-fix_path pkglibdir $pkglibdir_rel lib64/mysql lib64 lib/mysql lib
+fix_path pkglibdir $pkglibdir_rel @libsubdir@/mysql @libsubdir@
plugindir='@pkgplugindir@'
plugindir_rel=`echo $plugindir | sed -e "s;^$basedir/;;"`
-fix_path plugindir $plugindir_rel lib/mysql/plugin lib/plugin
+fix_path plugindir $plugindir_rel @libsubdir@/mysql/plugin @libsubdir@/plugin
pkgincludedir='@pkgincludedir@'
fix_path pkgincludedir include/mysql
diff --git a/scripts/mysqlaccess.conf b/scripts/mysqlaccess.conf
index faf47da5f6c..faf47da5f6c 100755..100644
--- a/scripts/mysqlaccess.conf
+++ b/scripts/mysqlaccess.conf
diff --git a/sql-bench/graph-compare-results.sh b/sql-bench/graph-compare-results.sh
index ddc9080acd6..ddc9080acd6 100644..100755
--- a/sql-bench/graph-compare-results.sh
+++ b/sql-bench/graph-compare-results.sh
diff --git a/sql-bench/innotest1.sh b/sql-bench/innotest1.sh
index 1c5450a1d9e..9e1ed32c273 100644
--- a/sql-bench/innotest1.sh
+++ b/sql-bench/innotest1.sh
@@ -1,142 +1,142 @@
-#!/usr/bin/perl
-############################################################################
-# Stress test for MySQL/InnoDB combined database
-# (c) 2002 Innobase Oy & MySQL AB
-#
-############################################################################
-
+#!/usr/bin/perl
+############################################################################
+# Stress test for MySQL/InnoDB combined database
+# (c) 2002 Innobase Oy & MySQL AB
+#
+############################################################################
+
use Cwd;
-use DBI;
-use Benchmark;
-
-$opt_loop_count = 100000;
-
+use DBI;
+use Benchmark;
+
+$opt_loop_count = 100000;
+
$pwd = cwd(); $pwd = "." if ($pwd eq '');
-require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n";
-
-print "Innotest1: MySQL/InnoDB stress test in Perl\n";
-print "-------------------------------------------\n";
-print "This is a randomized stress test for concurrent inserts,\n";
-print "updates, deletes, commits and rollbacks. The test will generate\n";
-print "also a lot of deadlocks, duplicate key errors, and other SQL errors.\n";
-print "\n";
-print "You should run innotest1, innotest1a, and innotest1b concurrently.\n";
-print "The thing to watch is that the server does not crash or does not\n";
-print "print to the .err log anything. Currently, due to a buglet in MySQL,\n";
-print "warnings about MySQL lock reservations can appear in the .err log.\n";
-print "The test will run very long, even several hours. You can kill\n";
-print "the perl processes running this test at any time and do CHECK\n";
-print "TABLE on table innotest1 in the 'test' database.\n";
-print "\n";
-print "Some of these stress tests will print a lot of SQL errors\n";
-print "to the standard output. That is not to be worried about.\n";
-print "You can direct the output to a file like this:\n";
-print "perl innotest1 > out1\n\n";
-
-print "Generating random keys\n";
-$random[$opt_loop_count] = 0;
-$rnd_str[$opt_loop_count] = "a";
-
-for ($i = 0; $i < $opt_loop_count; $i++) {
-
- $random[$i] = ($i * 63857) % $opt_loop_count;
-
- if (0 == ($random[$i] % 3)) {
- $rnd_str[$i] = "kjgclgrtfuylfluyfyufyulfulfyyulofuyolfyufyufuyfyufyufyufyufyyufujhfghd";
- } else { if (1 == ($random[$i] % 3)) {
- $rnd_str[$i] = "khd";
- } else { if (2 == ($random[$i] % 3)) {
- $rnd_str[$i] = "kh";
- }}}
-
- for ($j = 0; $j < (($i * 764877) % 20); $j++) {
- $rnd_str[$i] = $rnd_str[$i]."k";
- }
-}
-
-####
-#### Connect
-####
-
-$dbh = $server->connect()
-|| die $dbh->errstr;
-
-$dbh->do("set autocommit = 0");
-
-$n = 0;
-
-for ($i = 0; $i < 1; $i++) {
-
- print "Dropping table innotest1\n";
-
- $dbh->do("drop table innotest1");
-
- print "Creating table innotest1\n";
-
- $dbh->do(
- "create table innotest1 (A INT NOT NULL AUTO_INCREMENT, D INT NOT NULL, B VARCHAR(200) NOT NULL, C VARCHAR(175), E TIMESTAMP, F TIMESTAMP, G DATETIME, PRIMARY KEY (A, D), INDEX
-(B, C), INDEX (C), INDEX (D), INDEX(E), INDEX(G)) TYPE = INNODB")
- || die $dbh->errstr;
-
- for ($j = 2; $j < $opt_loop_count - 10; $j = $j + 2) {
-
- if ($j % 10 == 0) {
- $dbh->do(
- "insert into innotest1 (D, B, C, F, G) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."', NULL, NULL)");
- } else {
- $dbh->do(
- "insert into innotest1 (D, B, C, F, G) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."', NOW(), NOW())");
- }
-
- $dbh->do("update innotest1 set B = '".$rnd_str[$j + 7]."' where A = ".$random[$j + 5]);
-
- $dbh->do("update innotest1 SET D = D + 1 where A =".($j / 2 - 500));
-
- $dbh->do("update innotest1 set B = '".$rnd_str[$j + 1]."' where A =".($j / 2 - 505));
-
- $dbh->do("delete from innotest1 where A = ".$random[$random[$j]]);
-
- fetch_all_rows($dbh, "select b, c from innotest1 where a > ".$random[$j]." and a < ".($random[$j] + 7));
-
- if (0 == ($j % 10)) {
- $dbh->do("commit");
- }
-
- if (0 == ($j % 97)) {
- fetch_all_rows($dbh, "select c, e, f, g from innotest1 where c = '".$rnd_str[$j - 68]."'");
- fetch_all_rows($dbh, "select b, e, f, g from innotest1 where b = '".$rnd_str[$j - 677]."'");
- fetch_all_rows($dbh, "select b, c, e, f, g from innotest1 where c = '".$rnd_str[$j - 68]."'");
- fetch_all_rows($dbh, "select b, c, g from innotest1 where b = '".$rnd_str[$j - 677]."'");
- fetch_all_rows($dbh, "select a, b, c, e, f, g from innotest1 where c = '".$rnd_str[$j - 68]."'");
- fetch_all_rows($dbh, "select a, b, c, e, f, g from innotest1 where b = '".$rnd_str[$j - 677]."'");
- fetch_all_rows($dbh, "select d, b, c from innotest1 where c = '".$rnd_str[$j - 68]."'");
- fetch_all_rows($dbh, "select d, b, c, g from innotest1 where b = '".$rnd_str[$j - 677]."'");
-
- $dbh->do("rollback");
- }
-
- for ($k = 1; $k < 10; $k++) {
-
- $n += fetch_all_rows($dbh,
-"SELECT a, d from innotest1 where a = ".(($k * 1764767) % $j));
-
- $n += fetch_all_rows($dbh,
-"SELECT * from innotest1 where a = ".(($k * 187567) % $j));
-
- }
-
- if (0 == ($j % 1000)) {
- print "round $j, $n rows fetched\n";
- }
-
- if (0 == ($j % 20000)) {
- print "Checking table innotest1...\n";
- $dbh->do("check table innotest1");
- print "Table checked.\n";
- }
- }
-
- $dbh->do("commit");
-}
-
-$dbh->disconnect; # close connection
+require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n";
+
+print "Innotest1: MySQL/InnoDB stress test in Perl\n";
+print "-------------------------------------------\n";
+print "This is a randomized stress test for concurrent inserts,\n";
+print "updates, deletes, commits and rollbacks. The test will generate\n";
+print "also a lot of deadlocks, duplicate key errors, and other SQL errors.\n";
+print "\n";
+print "You should run innotest1, innotest1a, and innotest1b concurrently.\n";
+print "The thing to watch is that the server does not crash or does not\n";
+print "print to the .err log anything. Currently, due to a buglet in MySQL,\n";
+print "warnings about MySQL lock reservations can appear in the .err log.\n";
+print "The test will run very long, even several hours. You can kill\n";
+print "the perl processes running this test at any time and do CHECK\n";
+print "TABLE on table innotest1 in the 'test' database.\n";
+print "\n";
+print "Some of these stress tests will print a lot of SQL errors\n";
+print "to the standard output. That is not to be worried about.\n";
+print "You can direct the output to a file like this:\n";
+print "perl innotest1 > out1\n\n";
+
+print "Generating random keys\n";
+$random[$opt_loop_count] = 0;
+$rnd_str[$opt_loop_count] = "a";
+
+for ($i = 0; $i < $opt_loop_count; $i++) {
+
+ $random[$i] = ($i * 63857) % $opt_loop_count;
+
+ if (0 == ($random[$i] % 3)) {
+ $rnd_str[$i] = "kjgclgrtfuylfluyfyufyulfulfyyulofuyolfyufyufuyfyufyufyufyufyyufujhfghd";
+ } else { if (1 == ($random[$i] % 3)) {
+ $rnd_str[$i] = "khd";
+ } else { if (2 == ($random[$i] % 3)) {
+ $rnd_str[$i] = "kh";
+ }}}
+
+ for ($j = 0; $j < (($i * 764877) % 20); $j++) {
+ $rnd_str[$i] = $rnd_str[$i]."k";
+ }
+}
+
+####
+#### Connect
+####
+
+$dbh = $server->connect()
+|| die $dbh->errstr;
+
+$dbh->do("set autocommit = 0");
+
+$n = 0;
+
+for ($i = 0; $i < 1; $i++) {
+
+ print "Dropping table innotest1\n";
+
+ $dbh->do("drop table innotest1");
+
+ print "Creating table innotest1\n";
+
+ $dbh->do(
+ "create table innotest1 (A INT NOT NULL AUTO_INCREMENT, D INT NOT NULL, B VARCHAR(200) NOT NULL, C VARCHAR(175), E TIMESTAMP, F TIMESTAMP, G DATETIME, PRIMARY KEY (A, D), INDEX
+(B, C), INDEX (C), INDEX (D), INDEX(E), INDEX(G)) TYPE = INNODB")
+ || die $dbh->errstr;
+
+ for ($j = 2; $j < $opt_loop_count - 10; $j = $j + 2) {
+
+ if ($j % 10 == 0) {
+ $dbh->do(
+ "insert into innotest1 (D, B, C, F, G) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."', NULL, NULL)");
+ } else {
+ $dbh->do(
+ "insert into innotest1 (D, B, C, F, G) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."', NOW(), NOW())");
+ }
+
+ $dbh->do("update innotest1 set B = '".$rnd_str[$j + 7]."' where A = ".$random[$j + 5]);
+
+ $dbh->do("update innotest1 SET D = D + 1 where A =".($j / 2 - 500));
+
+ $dbh->do("update innotest1 set B = '".$rnd_str[$j + 1]."' where A =".($j / 2 - 505));
+
+ $dbh->do("delete from innotest1 where A = ".$random[$random[$j]]);
+
+ fetch_all_rows($dbh, "select b, c from innotest1 where a > ".$random[$j]." and a < ".($random[$j] + 7));
+
+ if (0 == ($j % 10)) {
+ $dbh->do("commit");
+ }
+
+ if (0 == ($j % 97)) {
+ fetch_all_rows($dbh, "select c, e, f, g from innotest1 where c = '".$rnd_str[$j - 68]."'");
+ fetch_all_rows($dbh, "select b, e, f, g from innotest1 where b = '".$rnd_str[$j - 677]."'");
+ fetch_all_rows($dbh, "select b, c, e, f, g from innotest1 where c = '".$rnd_str[$j - 68]."'");
+ fetch_all_rows($dbh, "select b, c, g from innotest1 where b = '".$rnd_str[$j - 677]."'");
+ fetch_all_rows($dbh, "select a, b, c, e, f, g from innotest1 where c = '".$rnd_str[$j - 68]."'");
+ fetch_all_rows($dbh, "select a, b, c, e, f, g from innotest1 where b = '".$rnd_str[$j - 677]."'");
+ fetch_all_rows($dbh, "select d, b, c from innotest1 where c = '".$rnd_str[$j - 68]."'");
+ fetch_all_rows($dbh, "select d, b, c, g from innotest1 where b = '".$rnd_str[$j - 677]."'");
+
+ $dbh->do("rollback");
+ }
+
+ for ($k = 1; $k < 10; $k++) {
+
+ $n += fetch_all_rows($dbh,
+"SELECT a, d from innotest1 where a = ".(($k * 1764767) % $j));
+
+ $n += fetch_all_rows($dbh,
+"SELECT * from innotest1 where a = ".(($k * 187567) % $j));
+
+ }
+
+ if (0 == ($j % 1000)) {
+ print "round $j, $n rows fetched\n";
+ }
+
+ if (0 == ($j % 20000)) {
+ print "Checking table innotest1...\n";
+ $dbh->do("check table innotest1");
+ print "Table checked.\n";
+ }
+ }
+
+ $dbh->do("commit");
+}
+
+$dbh->disconnect; # close connection
diff --git a/sql-bench/innotest1a.sh b/sql-bench/innotest1a.sh
index 876100e5de4..1e428e33dcf 100644
--- a/sql-bench/innotest1a.sh
+++ b/sql-bench/innotest1a.sh
@@ -1,108 +1,108 @@
-#!/usr/bin/perl
-############################################################################
-# Stress test for MySQL/InnoDB combined database
-# (c) 2002 Innobase Oy & MySQL AB
-#
-############################################################################
-
+#!/usr/bin/perl
+############################################################################
+# Stress test for MySQL/InnoDB combined database
+# (c) 2002 Innobase Oy & MySQL AB
+#
+############################################################################
+
use Cwd;
-use DBI;
-use Benchmark;
-
-$opt_loop_count = 200000;
-
+use DBI;
+use Benchmark;
+
+$opt_loop_count = 200000;
+
$pwd = cwd(); $pwd = "." if ($pwd eq '');
-require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n";
-
-print "Innotest1a: MySQL/InnoDB stress test in Perl\n";
-print "-------------------------------------------\n";
-print "This is a randomized stress test for concurrent inserts,\n";
-print "updates, deletes, commits and rollbacks. The test will generate\n";
-print "also a lot of deadlocks, duplicate key errors, and other SQL errors.\n";
-print "\n";
-print "You should run innotest1, innotest1a, and innotest1b concurrently.\n";
-print "The thing to watch is that the server does not crash or does not\n";
-print "print to the .err log anything. Currently, due to a buglet in MySQL,\n";
-print "warnings about MySQL lock reservations can appear in the .err log.\n";
-print "The test will run very long, even several hours. You can kill\n";
-print "the perl processes running this test at any time and do CHECK\n";
-print "TABLE on table innotest1 in the 'test' database.\n";
-print "\n";
-print "Some of these stress tests will print a lot of SQL errors\n";
-print "to the standard output. That is not to be worried about.\n";
-print "You can direct the output to a file like this:\n";
-print "perl innotest1 > out1\n\n";
-
-print "Generating random keys\n";
-$random[$opt_loop_count] = 0;
-$rnd_str[$opt_loop_count] = "a";
-
-for ($i = 0; $i < $opt_loop_count; $i++) {
-
- $random[$i] = ($i * 63857) % $opt_loop_count;
-
- if (0 == ($random[$i] % 3)) {
- $rnd_str[$i] = "kjgclgrtfuylfluyfyufyulfulfyyulofuyolfyufyufuyfyufyufyufyufyyufujhfghd";
- } else { if (1 == ($random[$i] % 3)) {
- $rnd_str[$i] = "khd";
- } else { if (2 == ($random[$i] % 3)) {
- $rnd_str[$i] = "kh";
- }}}
-
- for ($j = 0; $j < (($i * 764877) % 20); $j++) {
- $rnd_str[$i] = $rnd_str[$i]."k";
- }
-}
-
-####
-#### Connect
-####
-
-$dbh = $server->connect()
-|| die $dbh->errstr;
-
-
-$dbh->do("set autocommit = 0");
-
-for ($i = 0; $i < 1; $i++) {
- print "loop $i\n";
-
- for ($j = 1; $j < $opt_loop_count - 10; $j = $j + 2) {
- $dbh->do(
- "insert into innotest1 (D, B, C) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."')");
- $dbh->do("update innotest1 set B = '".$rnd_str[$j + 2]."' where A = ".$random[$j + 5]);
- $dbh->do("update innotest1 SET D = D + 1 where A =".(($j - 1) / 2 - 777));
- $dbh->do("update innotest1 set B = '".$rnd_str[$j + 8]."' where A =".(($j - 1) / 2 - 770));
- $dbh->do("delete from innotest1 where A = ".$random[$random[$j]]);
-
- fetch_all_rows($dbh, "select b, c from innotest1 where a > ".$random[$j]." and a < ".($random[$j] + 7));
-
- if (0 == ($j % 37)) {
- $dbh->do("commit");
- }
-
- if (0 == ($j % 533)) {
- $dbh->do("rollback");
- }
-
- if (0 == ($j % 537)) {
- print fetch_all_rows($dbh, "select c from innotest1 where c = '".$rnd_str[$j - 67]."'");
- print fetch_all_rows($dbh, "select b from innotest1 where b = '".$rnd_str[$j - 688]."'");
- print fetch_all_rows($dbh, "select b, c from innotest1 where c = '".$rnd_str[$j - 67]."'");
- print fetch_all_rows($dbh, "select b, c from innotest1 where b = '".$rnd_str[$j - 622]."'");
- print fetch_all_rows($dbh, "select a, b, c from innotest1 where c = '".$rnd_str[$j - 68]."'");
- print fetch_all_rows($dbh, "select a, b, c from innotest1 where b = '".$rnd_str[$j - 644]."'");
- print fetch_all_rows($dbh, "select d, b, c from innotest1 where c = '".$rnd_str[$j - 68]."'");
- print fetch_all_rows($dbh, "select d, b, c from innotest1 where b = '".$rnd_str[$j - 677]."'");
- print "\n";
- }
-
- if (0 == (($j - 1) % 1000)) {
- print "round $j\n";
- }
- }
-
- $dbh->do("commit");
-}
-
-$dbh->disconnect; # close connection
+require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n";
+
+print "Innotest1a: MySQL/InnoDB stress test in Perl\n";
+print "-------------------------------------------\n";
+print "This is a randomized stress test for concurrent inserts,\n";
+print "updates, deletes, commits and rollbacks. The test will generate\n";
+print "also a lot of deadlocks, duplicate key errors, and other SQL errors.\n";
+print "\n";
+print "You should run innotest1, innotest1a, and innotest1b concurrently.\n";
+print "The thing to watch is that the server does not crash or does not\n";
+print "print to the .err log anything. Currently, due to a buglet in MySQL,\n";
+print "warnings about MySQL lock reservations can appear in the .err log.\n";
+print "The test will run very long, even several hours. You can kill\n";
+print "the perl processes running this test at any time and do CHECK\n";
+print "TABLE on table innotest1 in the 'test' database.\n";
+print "\n";
+print "Some of these stress tests will print a lot of SQL errors\n";
+print "to the standard output. That is not to be worried about.\n";
+print "You can direct the output to a file like this:\n";
+print "perl innotest1 > out1\n\n";
+
+print "Generating random keys\n";
+$random[$opt_loop_count] = 0;
+$rnd_str[$opt_loop_count] = "a";
+
+for ($i = 0; $i < $opt_loop_count; $i++) {
+
+ $random[$i] = ($i * 63857) % $opt_loop_count;
+
+ if (0 == ($random[$i] % 3)) {
+ $rnd_str[$i] = "kjgclgrtfuylfluyfyufyulfulfyyulofuyolfyufyufuyfyufyufyufyufyyufujhfghd";
+ } else { if (1 == ($random[$i] % 3)) {
+ $rnd_str[$i] = "khd";
+ } else { if (2 == ($random[$i] % 3)) {
+ $rnd_str[$i] = "kh";
+ }}}
+
+ for ($j = 0; $j < (($i * 764877) % 20); $j++) {
+ $rnd_str[$i] = $rnd_str[$i]."k";
+ }
+}
+
+####
+#### Connect
+####
+
+$dbh = $server->connect()
+|| die $dbh->errstr;
+
+
+$dbh->do("set autocommit = 0");
+
+for ($i = 0; $i < 1; $i++) {
+ print "loop $i\n";
+
+ for ($j = 1; $j < $opt_loop_count - 10; $j = $j + 2) {
+ $dbh->do(
+ "insert into innotest1 (D, B, C) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."')");
+ $dbh->do("update innotest1 set B = '".$rnd_str[$j + 2]."' where A = ".$random[$j + 5]);
+ $dbh->do("update innotest1 SET D = D + 1 where A =".(($j - 1) / 2 - 777));
+ $dbh->do("update innotest1 set B = '".$rnd_str[$j + 8]."' where A =".(($j - 1) / 2 - 770));
+ $dbh->do("delete from innotest1 where A = ".$random[$random[$j]]);
+
+ fetch_all_rows($dbh, "select b, c from innotest1 where a > ".$random[$j]." and a < ".($random[$j] + 7));
+
+ if (0 == ($j % 37)) {
+ $dbh->do("commit");
+ }
+
+ if (0 == ($j % 533)) {
+ $dbh->do("rollback");
+ }
+
+ if (0 == ($j % 537)) {
+ print fetch_all_rows($dbh, "select c from innotest1 where c = '".$rnd_str[$j - 67]."'");
+ print fetch_all_rows($dbh, "select b from innotest1 where b = '".$rnd_str[$j - 688]."'");
+ print fetch_all_rows($dbh, "select b, c from innotest1 where c = '".$rnd_str[$j - 67]."'");
+ print fetch_all_rows($dbh, "select b, c from innotest1 where b = '".$rnd_str[$j - 622]."'");
+ print fetch_all_rows($dbh, "select a, b, c from innotest1 where c = '".$rnd_str[$j - 68]."'");
+ print fetch_all_rows($dbh, "select a, b, c from innotest1 where b = '".$rnd_str[$j - 644]."'");
+ print fetch_all_rows($dbh, "select d, b, c from innotest1 where c = '".$rnd_str[$j - 68]."'");
+ print fetch_all_rows($dbh, "select d, b, c from innotest1 where b = '".$rnd_str[$j - 677]."'");
+ print "\n";
+ }
+
+ if (0 == (($j - 1) % 1000)) {
+ print "round $j\n";
+ }
+ }
+
+ $dbh->do("commit");
+}
+
+$dbh->disconnect; # close connection
diff --git a/sql-bench/innotest1b.sh b/sql-bench/innotest1b.sh
index 3f6c9f5bd5f..524a6e0e145 100644
--- a/sql-bench/innotest1b.sh
+++ b/sql-bench/innotest1b.sh
@@ -1,101 +1,101 @@
-#!/usr/bin/perl
-############################################################################
-# Stress test for MySQL/InnoDB combined database
-# (c) 2002 Innobase Oy & MySQL AB
-#
-############################################################################
-
+#!/usr/bin/perl
+############################################################################
+# Stress test for MySQL/InnoDB combined database
+# (c) 2002 Innobase Oy & MySQL AB
+#
+############################################################################
+
use Cwd;
-use DBI;
-use Benchmark;
-
-$opt_loop_count = 200000;
-
+use DBI;
+use Benchmark;
+
+$opt_loop_count = 200000;
+
$pwd = cwd(); $pwd = "." if ($pwd eq '');
-require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n";
-
-print "Innotest1b: MySQL/InnoDB stress test in Perl\n";
-print "-------------------------------------------\n";
-print "This is a randomized stress test for concurrent inserts,\n";
-print "updates, deletes, commits and rollbacks. The test will generate\n";
-print "also a lot of deadlocks, duplicate key errors, and other SQL errors.\n";
-print "\n";
-print "You should run innotest1, innotest1a, and innotest1b concurrently.\n";
-print "The thing to watch is that the server does not crash or does not\n";
-print "print to the .err log anything. Currently, due to a buglet in MySQL,\n";
-print "warnings about MySQL lock reservations can appear in the .err log.\n";
-print "The test will run very long, even several hours. You can kill\n";
-print "the perl processes running this test at any time and do CHECK\n";
-print "TABLE on table innotest1 in the 'test' database.\n";
-print "\n";
-print "Some of these stress tests will print a lot of SQL errors\n";
-print "to the standard output. That is not to be worried about.\n";
-print "You can direct the output to a file like this:\n";
-print "perl innotest1 > out1\n\n";
-
-print "Generating random keys\n";
-$random[$opt_loop_count] = 0;
-$rnd_str[$opt_loop_count] = "a";
-
-for ($i = 0; $i < $opt_loop_count; $i++) {
-
- $random[$i] = ($i * 63857) % $opt_loop_count;
-
- if (0 == ($random[$i] % 3)) {
- $rnd_str[$i] = "kjgclgrtfuylfluyfyufyulfulfyyulofuyolfyufyufuyfyufyufyufyufyyufujhfghd";
- } else { if (1 == ($random[$i] % 3)) {
- $rnd_str[$i] = "khd";
- } else { if (2 == ($random[$i] % 3)) {
- $rnd_str[$i] = "kh";
- }}}
-
- for ($j = 0; $j < (($i * 764877) % 20); $j++) {
- $rnd_str[$i] = $rnd_str[$i]."k";
- }
-}
-
-####
-#### Connect
-####
-
-$dbh = $server->connect()
-|| die $dbh->errstr;
-
-$dbh->do("set autocommit = 0");
-
-for ($i = 0; $i < 5; $i++) {
- print "loop $i\n";
-
- for ($j = 1; $j < $opt_loop_count - 10; $j = $j + 2) {
-
- fetch_all_rows($dbh, "select b, c from innotest1 where a > ".$random[$j]." and a < ".($random[$j] + 7));
-
- if (0 == ($j % 37)) {
- $dbh->do("commit");
- }
-
- if (0 == ($j % 533)) {
- $dbh->do("rollback");
- }
-
- if (0 == ($j % 537)) {
- print fetch_all_rows($dbh, "select c from innotest1 where c = '".$rnd_str[$j - 67]."'");
- print fetch_all_rows($dbh, "select b from innotest1 where b = '".$rnd_str[$j - 688]."'");
- print fetch_all_rows($dbh, "select b, c from innotest1 where c = '".$rnd_str[$j - 67]."'");
- print fetch_all_rows($dbh, "select b, c from innotest1 where b = '".$rnd_str[$j - 622]."'");
- print fetch_all_rows($dbh, "select a, b, c from innotest1 where c = '".$rnd_str[$j - 68]."'");
- print fetch_all_rows($dbh, "select a, b, c from innotest1 where b = '".$rnd_str[$j - 644]."'");
- print fetch_all_rows($dbh, "select d, b, c from innotest1 where c = '".$rnd_str[$j - 68]."'");
- print fetch_all_rows($dbh, "select d, b, c from innotest1 where b = '".$rnd_str[$j - 677]."'");
- print "\n";
- }
-
- if (0 == (($j - 1) % 1000)) {
- print "round $j\n";
- }
- }
-
- $dbh->do("commit");
-}
-
-$dbh->disconnect; # close connection
+require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n";
+
+print "Innotest1b: MySQL/InnoDB stress test in Perl\n";
+print "-------------------------------------------\n";
+print "This is a randomized stress test for concurrent inserts,\n";
+print "updates, deletes, commits and rollbacks. The test will generate\n";
+print "also a lot of deadlocks, duplicate key errors, and other SQL errors.\n";
+print "\n";
+print "You should run innotest1, innotest1a, and innotest1b concurrently.\n";
+print "The thing to watch is that the server does not crash or does not\n";
+print "print to the .err log anything. Currently, due to a buglet in MySQL,\n";
+print "warnings about MySQL lock reservations can appear in the .err log.\n";
+print "The test will run very long, even several hours. You can kill\n";
+print "the perl processes running this test at any time and do CHECK\n";
+print "TABLE on table innotest1 in the 'test' database.\n";
+print "\n";
+print "Some of these stress tests will print a lot of SQL errors\n";
+print "to the standard output. That is not to be worried about.\n";
+print "You can direct the output to a file like this:\n";
+print "perl innotest1 > out1\n\n";
+
+print "Generating random keys\n";
+$random[$opt_loop_count] = 0;
+$rnd_str[$opt_loop_count] = "a";
+
+for ($i = 0; $i < $opt_loop_count; $i++) {
+
+ $random[$i] = ($i * 63857) % $opt_loop_count;
+
+ if (0 == ($random[$i] % 3)) {
+ $rnd_str[$i] = "kjgclgrtfuylfluyfyufyulfulfyyulofuyolfyufyufuyfyufyufyufyufyyufujhfghd";
+ } else { if (1 == ($random[$i] % 3)) {
+ $rnd_str[$i] = "khd";
+ } else { if (2 == ($random[$i] % 3)) {
+ $rnd_str[$i] = "kh";
+ }}}
+
+ for ($j = 0; $j < (($i * 764877) % 20); $j++) {
+ $rnd_str[$i] = $rnd_str[$i]."k";
+ }
+}
+
+####
+#### Connect
+####
+
+$dbh = $server->connect()
+|| die $dbh->errstr;
+
+$dbh->do("set autocommit = 0");
+
+for ($i = 0; $i < 5; $i++) {
+ print "loop $i\n";
+
+ for ($j = 1; $j < $opt_loop_count - 10; $j = $j + 2) {
+
+ fetch_all_rows($dbh, "select b, c from innotest1 where a > ".$random[$j]." and a < ".($random[$j] + 7));
+
+ if (0 == ($j % 37)) {
+ $dbh->do("commit");
+ }
+
+ if (0 == ($j % 533)) {
+ $dbh->do("rollback");
+ }
+
+ if (0 == ($j % 537)) {
+ print fetch_all_rows($dbh, "select c from innotest1 where c = '".$rnd_str[$j - 67]."'");
+ print fetch_all_rows($dbh, "select b from innotest1 where b = '".$rnd_str[$j - 688]."'");
+ print fetch_all_rows($dbh, "select b, c from innotest1 where c = '".$rnd_str[$j - 67]."'");
+ print fetch_all_rows($dbh, "select b, c from innotest1 where b = '".$rnd_str[$j - 622]."'");
+ print fetch_all_rows($dbh, "select a, b, c from innotest1 where c = '".$rnd_str[$j - 68]."'");
+ print fetch_all_rows($dbh, "select a, b, c from innotest1 where b = '".$rnd_str[$j - 644]."'");
+ print fetch_all_rows($dbh, "select d, b, c from innotest1 where c = '".$rnd_str[$j - 68]."'");
+ print fetch_all_rows($dbh, "select d, b, c from innotest1 where b = '".$rnd_str[$j - 677]."'");
+ print "\n";
+ }
+
+ if (0 == (($j - 1) % 1000)) {
+ print "round $j\n";
+ }
+ }
+
+ $dbh->do("commit");
+}
+
+$dbh->disconnect; # close connection
diff --git a/sql-bench/innotest2.sh b/sql-bench/innotest2.sh
index cfeb0527970..fa0fd418968 100644
--- a/sql-bench/innotest2.sh
+++ b/sql-bench/innotest2.sh
@@ -1,150 +1,150 @@
-#!/usr/bin/perl
-############################################################################
-# Stress test for MySQL/InnoDB combined database
-# (c) 2002 Innobase Oy & MySQL AB
-#
-############################################################################
-
+#!/usr/bin/perl
+############################################################################
+# Stress test for MySQL/InnoDB combined database
+# (c) 2002 Innobase Oy & MySQL AB
+#
+############################################################################
+
use Cwd;
-use DBI;
-use Benchmark;
-
-$opt_loop_count = 100000;
-
+use DBI;
+use Benchmark;
+
+$opt_loop_count = 100000;
+
$pwd = cwd(); $pwd = "." if ($pwd eq '');
-require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n";
-
-print "Innotest2: MySQL/InnoDB stress test in Perl for FOREIGN keys\n";
-print "------------------------------------------------------------\n";
-print "This is a randomized stress test for concurrent inserts,\n";
-print "updates, deletes, commits and rollbacks with foreign keys with\n";
-print "the ON DELETE ... clause. The test will generate\n";
-print "also a lot of deadlocks, duplicate key errors, and other SQL errors.\n";
-print "\n";
-print "You should run innotest2, innotest2a, and innotest2b concurrently.\n";
-print "The thing to watch is that the server does not crash or does not\n";
-print "print to the .err log anything. Currently, due to a buglet in MySQL,\n";
-print "warnings about MySQL lock reservations can appear in the .err log.\n";
-print "The test will run very long, even several hours. You can kill\n";
-print "the perl processes running this test at any time and do CHECK\n";
-print "TABLE on tables innotest2a, b, c, d in the 'test' database.\n";
-print "\n";
-print "Some of these stress tests will print a lot of SQL errors\n";
-print "to the standard output. That is not to be worried about.\n";
-print "You can direct the output to a file like this:\n";
-print "perl innotest2 > out2\n\n";
-
-print "Generating random keys\n";
-$random[$opt_loop_count] = 0;
-$rnd_str[$opt_loop_count] = "a";
-
-for ($i = 0; $i < $opt_loop_count; $i++) {
-
- $random[$i] = ($i * 63857) % $opt_loop_count;
-
- if (0 == ($random[$i] % 3)) {
- $rnd_str[$i] = "khD";
- } else { if (1 == ($random[$i] % 3)) {
- $rnd_str[$i] = "khd";
- } else { if (2 == ($random[$i] % 3)) {
- $rnd_str[$i] = "kHd";
- }}}
-
- for ($j = 0; $j < (($i * 764877) % 10); $j++) {
- $rnd_str[$i] = $rnd_str[$i]."k";
- }
-}
-
-####
-#### Connect
-####
-
-$dbh = $server->connect()
-|| die $dbh->errstr;
-
-$dbh->do("set autocommit = 0");
-
-for ($i = 0; $i < 1; $i++) {
- print "loop $i\n";
-
- print "dropping table innotest2a\n";
- $dbh->do("drop table innotest2a");
-
- print "dropping table innotest2b\n";
- $dbh->do("drop table innotest2b");
-
- print "dropping table innotest2c\n";
- $dbh->do("drop table innotest2c");
-
- print "dropping table innotest2d\n";
- $dbh->do("drop table innotest2d");
-
- print "creating table innotest2b\n";
- $dbh->do(
- "create table innotest2b (A INT NOT NULL AUTO_INCREMENT, D INT NOT NULL, B VARCHAR(200) NOT NULL, C VARCHAR(175), PRIMARY KEY (A, D, B), INDEX (B, C), INDEX (C)) TYPE = INNODB")
- || die $dbh->errstr;
-
- print "creating table innotest2a\n";
-
- $dbh->do(
- "create table innotest2a (A INT NOT NULL AUTO_INCREMENT, D INT NOT NULL, B VARCHAR(200) NOT NULL, C VARCHAR(175), PRIMARY KEY (A, D, B), INDEX (B, C), INDEX (C), FOREIGN KEY (A, D) REFERENCES innotest2b (A, D) ON DELETE CASCADE) TYPE = INNODB")
- || die $dbh->errstr;
-
- print "creating table innotest2c\n";
-
- $dbh->do(
- "create table innotest2c (A INT NOT NULL AUTO_INCREMENT, D INT NOT NULL, B VARCHAR(200) NOT NULL, C VARCHAR(175), PRIMARY KEY (A, D, B), INDEX (B, C), INDEX (C), FOREIGN KEY (A, D) REFERENCES innotest2a (A, D) ON DELETE CASCADE, FOREIGN KEY (B, C) REFERENCES innotest2a (B, C) ON DELETE CASCADE) TYPE = INNODB")
- || die $dbh->errstr;
-
- print "creating table innotest2d\n";
-
- $dbh->do(
- "create table innotest2d (A INT AUTO_INCREMENT, D INT, B VARCHAR(200), C VARCHAR(175), UNIQUE KEY (A, D, B), INDEX (B, C), INDEX (C), FOREIGN KEY (C) REFERENCES innotest2c (C) ON DELETE SET NULL, FOREIGN KEY (B, C) REFERENCES innotest2c (B, C) ON DELETE SET NULL) TYPE = INNODB")
- || die $dbh->errstr;
- print "created\n";
-
- for ($j = 0; $j < $opt_loop_count - 10; $j = $j + 2) {
- $dbh->do(
- "insert into innotest2b (D, B, C) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."')")
- || print $dbh->errstr;
-
- $dbh->do(
- "insert into innotest2a (D, B, C) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."')")
- || print $dbh->errstr;
-
- $dbh->do(
- "insert into innotest2c (D, B, C) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."')")
- || print $dbh->errstr;
-
- $dbh->do(
- "insert into innotest2d (D, B, C) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."')")
- || print $dbh->errstr;
-
- $dbh->do("delete from innotest2b where A = ".$random[$random[$j]])
- || print $dbh->errstr;
-
- if (0 == ($j % 10)) {
- $dbh->do("commit");
- }
-
- if (0 == ($j % 39)) {
- $dbh->do("rollback");
- }
-
- if (0 == ($j % 1000)) {
- print "round $j\n";
- }
- if (0 == ($j % 20000)) {
- print "Checking tables...\n";
- $dbh->do("check table innotest2a");
- $dbh->do("check table innotest2b");
- $dbh->do("check table innotest2c");
- $dbh->do("check table innotest2d");
- print "Tables checked.\n";
- }
- }
-
- $dbh->do("commit");
-}
-
-$dbh->disconnect; # close connection
+require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n";
+
+print "Innotest2: MySQL/InnoDB stress test in Perl for FOREIGN keys\n";
+print "------------------------------------------------------------\n";
+print "This is a randomized stress test for concurrent inserts,\n";
+print "updates, deletes, commits and rollbacks with foreign keys with\n";
+print "the ON DELETE ... clause. The test will generate\n";
+print "also a lot of deadlocks, duplicate key errors, and other SQL errors.\n";
+print "\n";
+print "You should run innotest2, innotest2a, and innotest2b concurrently.\n";
+print "The thing to watch is that the server does not crash or does not\n";
+print "print to the .err log anything. Currently, due to a buglet in MySQL,\n";
+print "warnings about MySQL lock reservations can appear in the .err log.\n";
+print "The test will run very long, even several hours. You can kill\n";
+print "the perl processes running this test at any time and do CHECK\n";
+print "TABLE on tables innotest2a, b, c, d in the 'test' database.\n";
+print "\n";
+print "Some of these stress tests will print a lot of SQL errors\n";
+print "to the standard output. That is not to be worried about.\n";
+print "You can direct the output to a file like this:\n";
+print "perl innotest2 > out2\n\n";
+
+print "Generating random keys\n";
+$random[$opt_loop_count] = 0;
+$rnd_str[$opt_loop_count] = "a";
+
+for ($i = 0; $i < $opt_loop_count; $i++) {
+
+ $random[$i] = ($i * 63857) % $opt_loop_count;
+
+ if (0 == ($random[$i] % 3)) {
+ $rnd_str[$i] = "khD";
+ } else { if (1 == ($random[$i] % 3)) {
+ $rnd_str[$i] = "khd";
+ } else { if (2 == ($random[$i] % 3)) {
+ $rnd_str[$i] = "kHd";
+ }}}
+
+ for ($j = 0; $j < (($i * 764877) % 10); $j++) {
+ $rnd_str[$i] = $rnd_str[$i]."k";
+ }
+}
+
+####
+#### Connect
+####
+
+$dbh = $server->connect()
+|| die $dbh->errstr;
+
+$dbh->do("set autocommit = 0");
+
+for ($i = 0; $i < 1; $i++) {
+ print "loop $i\n";
+
+ print "dropping table innotest2a\n";
+ $dbh->do("drop table innotest2a");
+
+ print "dropping table innotest2b\n";
+ $dbh->do("drop table innotest2b");
+
+ print "dropping table innotest2c\n";
+ $dbh->do("drop table innotest2c");
+
+ print "dropping table innotest2d\n";
+ $dbh->do("drop table innotest2d");
+
+ print "creating table innotest2b\n";
+ $dbh->do(
+ "create table innotest2b (A INT NOT NULL AUTO_INCREMENT, D INT NOT NULL, B VARCHAR(200) NOT NULL, C VARCHAR(175), PRIMARY KEY (A, D, B), INDEX (B, C), INDEX (C)) TYPE = INNODB")
+ || die $dbh->errstr;
+
+ print "creating table innotest2a\n";
+
+ $dbh->do(
+ "create table innotest2a (A INT NOT NULL AUTO_INCREMENT, D INT NOT NULL, B VARCHAR(200) NOT NULL, C VARCHAR(175), PRIMARY KEY (A, D, B), INDEX (B, C), INDEX (C), FOREIGN KEY (A, D) REFERENCES innotest2b (A, D) ON DELETE CASCADE) TYPE = INNODB")
+ || die $dbh->errstr;
+
+ print "creating table innotest2c\n";
+
+ $dbh->do(
+ "create table innotest2c (A INT NOT NULL AUTO_INCREMENT, D INT NOT NULL, B VARCHAR(200) NOT NULL, C VARCHAR(175), PRIMARY KEY (A, D, B), INDEX (B, C), INDEX (C), FOREIGN KEY (A, D) REFERENCES innotest2a (A, D) ON DELETE CASCADE, FOREIGN KEY (B, C) REFERENCES innotest2a (B, C) ON DELETE CASCADE) TYPE = INNODB")
+ || die $dbh->errstr;
+
+ print "creating table innotest2d\n";
+
+ $dbh->do(
+ "create table innotest2d (A INT AUTO_INCREMENT, D INT, B VARCHAR(200), C VARCHAR(175), UNIQUE KEY (A, D, B), INDEX (B, C), INDEX (C), FOREIGN KEY (C) REFERENCES innotest2c (C) ON DELETE SET NULL, FOREIGN KEY (B, C) REFERENCES innotest2c (B, C) ON DELETE SET NULL) TYPE = INNODB")
+ || die $dbh->errstr;
+ print "created\n";
+
+ for ($j = 0; $j < $opt_loop_count - 10; $j = $j + 2) {
+ $dbh->do(
+ "insert into innotest2b (D, B, C) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."')")
+ || print $dbh->errstr;
+
+ $dbh->do(
+ "insert into innotest2a (D, B, C) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."')")
+ || print $dbh->errstr;
+
+ $dbh->do(
+ "insert into innotest2c (D, B, C) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."')")
+ || print $dbh->errstr;
+
+ $dbh->do(
+ "insert into innotest2d (D, B, C) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."')")
+ || print $dbh->errstr;
+
+ $dbh->do("delete from innotest2b where A = ".$random[$random[$j]])
+ || print $dbh->errstr;
+
+ if (0 == ($j % 10)) {
+ $dbh->do("commit");
+ }
+
+ if (0 == ($j % 39)) {
+ $dbh->do("rollback");
+ }
+
+ if (0 == ($j % 1000)) {
+ print "round $j\n";
+ }
+ if (0 == ($j % 20000)) {
+ print "Checking tables...\n";
+ $dbh->do("check table innotest2a");
+ $dbh->do("check table innotest2b");
+ $dbh->do("check table innotest2c");
+ $dbh->do("check table innotest2d");
+ print "Tables checked.\n";
+ }
+ }
+
+ $dbh->do("commit");
+}
+
+$dbh->disconnect; # close connection
diff --git a/sql-bench/innotest2a.sh b/sql-bench/innotest2a.sh
index f77ed3ddadd..4a6e4b20a9a 100644
--- a/sql-bench/innotest2a.sh
+++ b/sql-bench/innotest2a.sh
@@ -1,94 +1,94 @@
-#!/usr/bin/perl
-############################################################################
-# Stress test for MySQL/Innobase combined database
-# (c) 2000 Innobase Oy & MySQL AB
-#
-############################################################################
-
+#!/usr/bin/perl
+############################################################################
+# Stress test for MySQL/Innobase combined database
+# (c) 2000 Innobase Oy & MySQL AB
+#
+############################################################################
+
use Cwd;
-use DBI;
-use Benchmark;
-
-$opt_loop_count = 100000;
-
+use DBI;
+use Benchmark;
+
+$opt_loop_count = 100000;
+
$pwd = cwd(); $pwd = "." if ($pwd eq '');
-require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n";
-
-print "Innotest2a: MySQL/InnoDB stress test in Perl for FOREIGN keys\n";
-print "------------------------------------------------------------\n";
-print "This is a randomized stress test for concurrent inserts,\n";
-print "updates, deletes, commits and rollbacks with foreign keys with\n";
-print "the ON DELETE ... clause. The test will generate\n";
-print "also a lot of deadlocks, duplicate key errors, and other SQL errors.\n";
-print "\n";
-print "You should run innotest2, innotest2a, and innotest2b concurrently.\n";
-print "The thing to watch is that the server does not crash or does not\n";
-print "print to the .err log anything. Currently, due to a buglet in MySQL,\n";
-print "warnings about MySQL lock reservations can appear in the .err log.\n";
-print "The test will run very long, even several hours. You can kill\n";
-print "the perl processes running this test at any time and do CHECK\n";
-print "TABLE on tables innotest2a, b, c, d in the 'test' database.\n";
-print "\n";
-print "Some of these stress tests will print a lot of SQL errors\n";
-print "to the standard output. That is not to be worried about.\n";
-print "You can direct the output to a file like this:\n";
-print "perl innotest2 > out2\n\n";
-
-print "Generating random keys\n";
-$random[$opt_loop_count] = 0;
-$rnd_str[$opt_loop_count] = "a";
-
-for ($i = 0; $i < $opt_loop_count; $i++) {
-
- $random[$i] = ($i * 63857) % $opt_loop_count;
-
- if (0 == ($random[$i] % 3)) {
- $rnd_str[$i] = "khD";
- } else { if (1 == ($random[$i] % 3)) {
- $rnd_str[$i] = "kHd";
- } else { if (2 == ($random[$i] % 3)) {
- $rnd_str[$i] = "khd";
- }}}
-
- for ($j = 0; $j < (($i * 764877) % 20); $j++) {
- $rnd_str[$i] = $rnd_str[$i]."k";
- }
-}
-
-####
-#### Connect
-####
-
-$dbh = $server->connect()
-|| die $dbh->errstr;
-
-$dbh->do("set autocommit = 0");
-
-for ($i = 0; $i < 5; $i++) {
- print "loop $i\n";
-
- for ($j = 0; $j < $opt_loop_count - 10; $j = $j + 1) {
-
- $dbh->do("update innotest2a set B = '".$rnd_str[$j + 1]."' where A = ".$random[$j + 5])
- || print $dbh->errstr;
-
- $dbh->do("delete from innotest2a where A = ".$random[$random[$j]])
- || print $dbh->errstr;
-
- if (0 == ($j % 10)) {
- $dbh->do("commit");
- }
-
- if (0 == ($j % 39)) {
- $dbh->do("rollback");
- }
-
- if (0 == ($j % 1000)) {
- print "round $j\n";
- }
- }
-
- $dbh->do("commit");
-}
-
-$dbh->disconnect; # close connection
+require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n";
+
+print "Innotest2a: MySQL/InnoDB stress test in Perl for FOREIGN keys\n";
+print "------------------------------------------------------------\n";
+print "This is a randomized stress test for concurrent inserts,\n";
+print "updates, deletes, commits and rollbacks with foreign keys with\n";
+print "the ON DELETE ... clause. The test will generate\n";
+print "also a lot of deadlocks, duplicate key errors, and other SQL errors.\n";
+print "\n";
+print "You should run innotest2, innotest2a, and innotest2b concurrently.\n";
+print "The thing to watch is that the server does not crash or does not\n";
+print "print to the .err log anything. Currently, due to a buglet in MySQL,\n";
+print "warnings about MySQL lock reservations can appear in the .err log.\n";
+print "The test will run very long, even several hours. You can kill\n";
+print "the perl processes running this test at any time and do CHECK\n";
+print "TABLE on tables innotest2a, b, c, d in the 'test' database.\n";
+print "\n";
+print "Some of these stress tests will print a lot of SQL errors\n";
+print "to the standard output. That is not to be worried about.\n";
+print "You can direct the output to a file like this:\n";
+print "perl innotest2 > out2\n\n";
+
+print "Generating random keys\n";
+$random[$opt_loop_count] = 0;
+$rnd_str[$opt_loop_count] = "a";
+
+for ($i = 0; $i < $opt_loop_count; $i++) {
+
+ $random[$i] = ($i * 63857) % $opt_loop_count;
+
+ if (0 == ($random[$i] % 3)) {
+ $rnd_str[$i] = "khD";
+ } else { if (1 == ($random[$i] % 3)) {
+ $rnd_str[$i] = "kHd";
+ } else { if (2 == ($random[$i] % 3)) {
+ $rnd_str[$i] = "khd";
+ }}}
+
+ for ($j = 0; $j < (($i * 764877) % 20); $j++) {
+ $rnd_str[$i] = $rnd_str[$i]."k";
+ }
+}
+
+####
+#### Connect
+####
+
+$dbh = $server->connect()
+|| die $dbh->errstr;
+
+$dbh->do("set autocommit = 0");
+
+for ($i = 0; $i < 5; $i++) {
+ print "loop $i\n";
+
+ for ($j = 0; $j < $opt_loop_count - 10; $j = $j + 1) {
+
+ $dbh->do("update innotest2a set B = '".$rnd_str[$j + 1]."' where A = ".$random[$j + 5])
+ || print $dbh->errstr;
+
+ $dbh->do("delete from innotest2a where A = ".$random[$random[$j]])
+ || print $dbh->errstr;
+
+ if (0 == ($j % 10)) {
+ $dbh->do("commit");
+ }
+
+ if (0 == ($j % 39)) {
+ $dbh->do("rollback");
+ }
+
+ if (0 == ($j % 1000)) {
+ print "round $j\n";
+ }
+ }
+
+ $dbh->do("commit");
+}
+
+$dbh->disconnect; # close connection
diff --git a/sql-bench/innotest2b.sh b/sql-bench/innotest2b.sh
index 72a71d06c73..b94325ff39e 100644
--- a/sql-bench/innotest2b.sh
+++ b/sql-bench/innotest2b.sh
@@ -1,104 +1,104 @@
-#!/usr/bin/perl
-############################################################################
-# Stress test for MySQL/Innobase combined database
-# (c) 2000 Innobase Oy & MySQL AB
-#
-############################################################################
-
+#!/usr/bin/perl
+############################################################################
+# Stress test for MySQL/Innobase combined database
+# (c) 2000 Innobase Oy & MySQL AB
+#
+############################################################################
+
use Cwd;
-use DBI;
-use Benchmark;
-
-$opt_loop_count = 100000;
-
+use DBI;
+use Benchmark;
+
+$opt_loop_count = 100000;
+
$pwd = cwd(); $pwd = "." if ($pwd eq '');
-require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n";
-
-print "Innotest2b: MySQL/InnoDB stress test in Perl for FOREIGN keys\n";
-print "------------------------------------------------------------\n";
-print "This is a randomized stress test for concurrent inserts,\n";
-print "updates, deletes, commits and rollbacks with foreign keys with\n";
-print "the ON DELETE ... clause. The test will generate\n";
-print "also a lot of deadlocks, duplicate key errors, and other SQL errors.\n";
-print "\n";
-print "You should run innotest2, innotest2a, and innotest2b concurrently.\n";
-print "The thing to watch is that the server does not crash or does not\n";
-print "print to the .err log anything. Currently, due to a buglet in MySQL,\n";
-print "warnings about MySQL lock reservations can appear in the .err log.\n";
-print "The test will run very long, even several hours. You can kill\n";
-print "the perl processes running this test at any time and do CHECK\n";
-print "TABLE on tables innotest2a, b, c, d in the 'test' database.\n";
-print "\n";
-print "Some of these stress tests will print a lot of SQL errors\n";
-print "to the standard output. That is not to be worried about.\n";
-print "You can direct the output to a file like this:\n";
-print "perl innotest2 > out2\n\n";
-
-print "Generating random keys\n";
-$random[$opt_loop_count] = 0;
-$rnd_str[$opt_loop_count] = "a";
-
-for ($i = 0; $i < $opt_loop_count; $i++) {
-
- $random[$i] = ($i * 98641) % $opt_loop_count;
-
- if (0 == ($random[$i] % 3)) {
- $rnd_str[$i] = "khD";
- } else { if (1 == ($random[$i] % 3)) {
- $rnd_str[$i] = "khd";
- } else { if (2 == ($random[$i] % 3)) {
- $rnd_str[$i] = "kHd";
- }}}
-
- for ($j = 0; $j < (($i * 764877) % 10); $j++) {
- $rnd_str[$i] = $rnd_str[$i]."k";
- }
-}
-
-####
-#### Connect
-####
-
-$dbh = $server->connect();
-
-$dbh->do("set autocommit = 0");
-
-for ($i = 0; $i < 1; $i++) {
- print "loop $i\n";
-
- for ($j = 0; $j < $opt_loop_count - 10; $j = $j + 2) {
- $dbh->do(
- "insert into innotest2b (D, B, C) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."')")
- || print $dbh->errstr;
-
- $dbh->do(
- "insert into innotest2a (D, B, C) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."')")
- || print $dbh->errstr;
-
- $dbh->do(
- "insert into innotest2c (D, B, C) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."')")
- || print $dbh->errstr;
-
- $dbh->do("delete from innotest2b where A = ".$random[$random[$j]])
- || print $dbh->errstr;
-
- $dbh->do("update innotest2b set A = A + 1 where A = ".$random[$j])
- || print $dbh->errstr;
-
- if (0 == ($j % 10)) {
- $dbh->do("commit");
- }
-
- if (0 == ($j % 39)) {
- $dbh->do("rollback");
- }
-
- if (0 == ($j % 1000)) {
- print "round $j\n";
- }
- }
-
- $dbh->do("commit");
-}
-
-$dbh->disconnect; # close connection
+require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n";
+
+print "Innotest2b: MySQL/InnoDB stress test in Perl for FOREIGN keys\n";
+print "------------------------------------------------------------\n";
+print "This is a randomized stress test for concurrent inserts,\n";
+print "updates, deletes, commits and rollbacks with foreign keys with\n";
+print "the ON DELETE ... clause. The test will generate\n";
+print "also a lot of deadlocks, duplicate key errors, and other SQL errors.\n";
+print "\n";
+print "You should run innotest2, innotest2a, and innotest2b concurrently.\n";
+print "The thing to watch is that the server does not crash or does not\n";
+print "print to the .err log anything. Currently, due to a buglet in MySQL,\n";
+print "warnings about MySQL lock reservations can appear in the .err log.\n";
+print "The test will run very long, even several hours. You can kill\n";
+print "the perl processes running this test at any time and do CHECK\n";
+print "TABLE on tables innotest2a, b, c, d in the 'test' database.\n";
+print "\n";
+print "Some of these stress tests will print a lot of SQL errors\n";
+print "to the standard output. That is not to be worried about.\n";
+print "You can direct the output to a file like this:\n";
+print "perl innotest2 > out2\n\n";
+
+print "Generating random keys\n";
+$random[$opt_loop_count] = 0;
+$rnd_str[$opt_loop_count] = "a";
+
+for ($i = 0; $i < $opt_loop_count; $i++) {
+
+ $random[$i] = ($i * 98641) % $opt_loop_count;
+
+ if (0 == ($random[$i] % 3)) {
+ $rnd_str[$i] = "khD";
+ } else { if (1 == ($random[$i] % 3)) {
+ $rnd_str[$i] = "khd";
+ } else { if (2 == ($random[$i] % 3)) {
+ $rnd_str[$i] = "kHd";
+ }}}
+
+ for ($j = 0; $j < (($i * 764877) % 10); $j++) {
+ $rnd_str[$i] = $rnd_str[$i]."k";
+ }
+}
+
+####
+#### Connect
+####
+
+$dbh = $server->connect();
+
+$dbh->do("set autocommit = 0");
+
+for ($i = 0; $i < 1; $i++) {
+ print "loop $i\n";
+
+ for ($j = 0; $j < $opt_loop_count - 10; $j = $j + 2) {
+ $dbh->do(
+ "insert into innotest2b (D, B, C) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."')")
+ || print $dbh->errstr;
+
+ $dbh->do(
+ "insert into innotest2a (D, B, C) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."')")
+ || print $dbh->errstr;
+
+ $dbh->do(
+ "insert into innotest2c (D, B, C) values (5, '".$rnd_str[$j]."' ,'".$rnd_str[$j]."')")
+ || print $dbh->errstr;
+
+ $dbh->do("delete from innotest2b where A = ".$random[$random[$j]])
+ || print $dbh->errstr;
+
+ $dbh->do("update innotest2b set A = A + 1 where A = ".$random[$j])
+ || print $dbh->errstr;
+
+ if (0 == ($j % 10)) {
+ $dbh->do("commit");
+ }
+
+ if (0 == ($j % 39)) {
+ $dbh->do("rollback");
+ }
+
+ if (0 == ($j % 1000)) {
+ print "round $j\n";
+ }
+ }
+
+ $dbh->do("commit");
+}
+
+$dbh->disconnect; # close connection
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index b0d7a346e83..66d980fb62d 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -193,16 +193,27 @@ String *Item_func_md5::val_str_ascii(String *str)
}
+/*
+ The MD5()/SHA() functions treat their parameter as being a case sensitive.
+ Thus we set binary collation on it so different instances of MD5() will be
+ compared properly.
+*/
+static CHARSET_INFO *get_checksum_charset(const char *csname)
+{
+ CHARSET_INFO *cs= get_charset_by_csname(csname, MY_CS_BINSORT, MYF(0));
+ if (!cs)
+ {
+ // Charset has no binary collation: use my_charset_bin.
+ cs= &my_charset_bin;
+ }
+ return cs;
+}
+
+
void Item_func_md5::fix_length_and_dec()
{
- /*
- The MD5() function treats its parameter as being a case sensitive. Thus
- we set binary collation on it so different instances of MD5() will be
- compared properly.
- */
- args[0]->collation.set(
- get_charset_by_csname(args[0]->collation.collation->csname,
- MY_CS_BINSORT,MYF(0)), DERIVATION_COERCIBLE);
+ CHARSET_INFO *cs= get_checksum_charset(args[0]->collation.collation->csname);
+ args[0]->collation.set(cs, DERIVATION_COERCIBLE);
fix_length_and_charset(32, default_charset());
}
@@ -238,14 +249,8 @@ String *Item_func_sha::val_str_ascii(String *str)
void Item_func_sha::fix_length_and_dec()
{
- /*
- The SHA() function treats its parameter as being a case sensitive. Thus
- we set binary collation on it so different instances of MD5() will be
- compared properly.
- */
- args[0]->collation.set(
- get_charset_by_csname(args[0]->collation.collation->csname,
- MY_CS_BINSORT,MYF(0)), DERIVATION_COERCIBLE);
+ CHARSET_INFO *cs= get_checksum_charset(args[0]->collation.collation->csname);
+ args[0]->collation.set(cs, DERIVATION_COERCIBLE);
// size of hex representation of hash
fix_length_and_charset(SHA1_HASH_SIZE * 2, default_charset());
}
@@ -368,18 +373,9 @@ void Item_func_sha2::fix_length_and_dec()
ER(ER_WRONG_PARAMETERS_TO_NATIVE_FCT), "sha2");
}
- /*
- The SHA2() function treats its parameter as being a case sensitive.
- Thus we set binary collation on it so different instances of SHA2()
- will be compared properly.
- */
+ CHARSET_INFO *cs= get_checksum_charset(args[0]->collation.collation->csname);
+ args[0]->collation.set(cs, DERIVATION_COERCIBLE);
- args[0]->collation.set(
- get_charset_by_csname(
- args[0]->collation.collation->csname,
- MY_CS_BINSORT,
- MYF(0)),
- DERIVATION_COERCIBLE);
#else
push_warning_printf(current_thd,
MYSQL_ERROR::WARN_LEVEL_WARN,
diff --git a/sql/log_event.cc b/sql/log_event.cc
index c1949391b18..74d04234c0c 100644
--- a/sql/log_event.cc
+++ b/sql/log_event.cc
@@ -7835,9 +7835,9 @@ void Execute_load_query_log_event::print(FILE* file,
if (local_fname)
{
my_b_write(&cache, (uchar*) query, fn_pos_start);
- my_b_printf(&cache, " LOCAL INFILE \'");
- my_b_printf(&cache, "%s", local_fname);
- my_b_printf(&cache, "\'");
+ my_b_printf(&cache, " LOCAL INFILE ");
+ pretty_print_str(&cache, local_fname, strlen(local_fname));
+
if (dup_handling == LOAD_DUP_REPLACE)
my_b_printf(&cache, " REPLACE");
my_b_printf(&cache, " INTO");
diff --git a/sql/opt_range.cc b/sql/opt_range.cc
index 83fbd83207a..04481b39d2f 100644
--- a/sql/opt_range.cc
+++ b/sql/opt_range.cc
@@ -1,5 +1,5 @@
-/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
- Copyright (c) 2008, 2013, Monty Program Ab.
+/* Copyright (c) 2000, 2014, Oracle and/or its affiliates.
+ Copyright (c) 2008, 2014, Monty Program Ab.
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
@@ -358,31 +358,54 @@ public:
elements(1),use_count(1),left(0),right(0),
next_key_part(0), color(BLACK), type(type_arg)
{}
- inline bool is_same(SEL_ARG *arg)
+ /**
+ returns true if a range predicate is equal. Use all_same()
+ to check for equality of all the predicates on this keypart.
+ */
+ inline bool is_same(const SEL_ARG *arg) const
{
if (type != arg->type || part != arg->part)
- return 0;
+ return false;
if (type != KEY_RANGE)
- return 1;
+ return true;
return cmp_min_to_min(arg) == 0 && cmp_max_to_max(arg) == 0;
}
+ /**
+ returns true if all the predicates in the keypart tree are equal
+ */
+ bool all_same(const SEL_ARG *arg) const
+ {
+ if (type != arg->type || part != arg->part)
+ return false;
+ if (type != KEY_RANGE)
+ return true;
+ if (arg == this)
+ return true;
+ const SEL_ARG *cmp_arg= arg->first();
+ const SEL_ARG *cur_arg= first();
+ for (; cur_arg && cmp_arg && cur_arg->is_same(cmp_arg);
+ cur_arg= cur_arg->next, cmp_arg= cmp_arg->next) ;
+ if (cur_arg || cmp_arg)
+ return false;
+ return true;
+ }
inline void merge_flags(SEL_ARG *arg) { maybe_flag|=arg->maybe_flag; }
inline void maybe_smaller() { maybe_flag=1; }
/* Return true iff it's a single-point null interval */
inline bool is_null_interval() { return maybe_null && max_value[0] == 1; }
- inline int cmp_min_to_min(SEL_ARG* arg)
+ inline int cmp_min_to_min(const SEL_ARG* arg) const
{
return sel_cmp(field,min_value, arg->min_value, min_flag, arg->min_flag);
}
- inline int cmp_min_to_max(SEL_ARG* arg)
+ inline int cmp_min_to_max(const SEL_ARG* arg) const
{
return sel_cmp(field,min_value, arg->max_value, min_flag, arg->max_flag);
}
- inline int cmp_max_to_max(SEL_ARG* arg)
+ inline int cmp_max_to_max(const SEL_ARG* arg) const
{
return sel_cmp(field,max_value, arg->max_value, max_flag, arg->max_flag);
}
- inline int cmp_max_to_min(SEL_ARG* arg)
+ inline int cmp_max_to_min(const SEL_ARG* arg) const
{
return sel_cmp(field,max_value, arg->min_value, max_flag, arg->min_flag);
}
@@ -562,6 +585,7 @@ public:
void test_use_count(SEL_ARG *root);
#endif
SEL_ARG *first();
+ const SEL_ARG *first() const;
SEL_ARG *last();
void make_root();
inline bool simple_key()
@@ -651,6 +675,18 @@ public:
SEL_ARG *clone_tree(RANGE_OPT_PARAM *param);
};
+/**
+ Helper function to compare two SEL_ARG's.
+*/
+static bool all_same(const SEL_ARG *sa1, const SEL_ARG *sa2)
+{
+ if (sa1 == NULL && sa2 == NULL)
+ return true;
+ if ((sa1 != NULL && sa2 == NULL) || (sa1 == NULL && sa2 != NULL))
+ return false;
+ return sa1->all_same(sa2);
+}
+
class SEL_IMERGE;
#define CLONE_KEY1_MAYBE 1
@@ -2476,6 +2512,13 @@ SEL_ARG *SEL_ARG::clone(RANGE_OPT_PARAM *param, SEL_ARG *new_parent,
return tmp;
}
+/**
+ This gives the first SEL_ARG in the interval list, and the minimal element
+ in the red-black tree
+
+ @return
+ SEL_ARG first SEL_ARG in the interval list
+*/
SEL_ARG *SEL_ARG::first()
{
SEL_ARG *next_arg=this;
@@ -2486,6 +2529,11 @@ SEL_ARG *SEL_ARG::first()
return next_arg;
}
+const SEL_ARG *SEL_ARG::first() const
+{
+ return const_cast<SEL_ARG*>(this)->first();
+}
+
SEL_ARG *SEL_ARG::last()
{
SEL_ARG *next_arg=this;
@@ -11830,6 +11878,8 @@ void QUICK_ROR_UNION_SELECT::add_used_key_part_to_set(MY_BITMAP *col_set)
static inline uint get_field_keypart(KEY *index, Field *field);
static inline SEL_ARG * get_index_range_tree(uint index, SEL_TREE* range_tree,
PARAM *param, uint *param_idx);
+static bool get_sel_arg_for_keypart(Field *field, SEL_ARG *index_range_tree,
+ SEL_ARG **cur_range);
static bool get_constant_key_infix(KEY *index_info, SEL_ARG *index_range_tree,
KEY_PART_INFO *first_non_group_part,
KEY_PART_INFO *min_max_arg_part,
@@ -11895,6 +11945,16 @@ cost_group_min_max(TABLE* table, KEY *index_info, uint used_key_parts,
never stored after a unique key lookup in the clustered index and
furhter index_next/prev calls can not be used. So loose index scan
optimization can not be used in this case.
+ SA7. If Q has both AGG_FUNC(DISTINCT ...) and MIN/MAX() functions then this
+ access method is not used.
+ For above queries MIN/MAX() aggregation has to be done at
+ nested_loops_join (end_send_group). But with current design MIN/MAX()
+ is always set as part of loose index scan. Because of this mismatch
+ MIN() and MAX() values will be set incorrectly. For such queries to
+ work we need a new interface for loose index scan. This new interface
+ should only fetch records with min and max values and let
+ end_send_group to do aggregation. Until then do not use
+ loose_index_scan.
GA1. If Q has a GROUP BY clause, then GA is a prefix of I. That is, if
G_i = A_j => i = j.
GA2. If Q has a DISTINCT clause, then there is a permutation of SA that
@@ -11926,6 +11986,8 @@ cost_group_min_max(TABLE* table, KEY *index_info, uint used_key_parts,
above tests. By transitivity then it also follows that each WA_i
participates in the index I (if this was already tested for GA, NGA
and C).
+ WA2. If there is a predicate on C, then it must be in conjunction
+ to all predicates on all earlier keyparts in I.
C) Overall query form:
SELECT EXPR([A_1,...,A_k], [B_1,...,B_m], [MIN(C)], [MAX(C)])
@@ -12060,6 +12122,13 @@ get_best_group_min_max(PARAM *param, SEL_TREE *tree, double read_time)
DBUG_RETURN(NULL);
}
}
+
+ /* Check (SA7). */
+ if (is_agg_distinct && (have_max || have_min))
+ {
+ DBUG_RETURN(NULL);
+ }
+
/* Check (SA5). */
if (join->select_distinct)
{
@@ -12345,6 +12414,25 @@ get_best_group_min_max(PARAM *param, SEL_TREE *tree, double read_time)
}
}
+ /**
+ Test WA2:If there are conditions on a column C participating in
+ MIN/MAX, those conditions must be conjunctions to all earlier
+ keyparts. Otherwise, Loose Index Scan cannot be used.
+ */
+ if (tree && min_max_arg_item)
+ {
+ uint dummy;
+ SEL_ARG *index_range_tree= get_index_range_tree(cur_index, tree, param,
+ &dummy);
+ SEL_ARG *cur_range= NULL;
+ if (get_sel_arg_for_keypart(min_max_arg_part->field,
+ index_range_tree, &cur_range) ||
+ (cur_range && cur_range->type != SEL_ARG::KEY_RANGE))
+ {
+ goto next_index;
+ }
+ }
+
/* If we got to this point, cur_index_info passes the test. */
key_infix_parts= cur_key_infix_len ? (uint)
(first_non_infix_part - first_non_group_part) : 0;
@@ -12662,73 +12750,75 @@ check_group_min_max_predicates(Item *cond, Item_field *min_max_arg_item,
/*
- Get SEL_ARG tree, if any, for the keypart covering non grouping
- attribute (NGA) field 'nga_field'.
+ Get the SEL_ARG tree 'tree' for the keypart covering 'field', if
+ any. 'tree' must be a unique conjunction to ALL predicates in earlier
+ keyparts of 'keypart_tree'.
- This function enforces the NGA3 test: If 'keypart_tree' contains a
- condition for 'nga_field', there can only be one range. In the
- opposite case, this function returns with error and 'cur_range'
- should not be used.
+ E.g., if 'keypart_tree' is for a composite index (kp1,kp2) and kp2
+ covers 'field', all these conditions satisfies the requirement:
- Note that the NGA1 and NGA2 requirements, like whether or not the
- range predicate for 'nga_field' is equality, is not tested by this
- function.
+ 1. "(kp1=2 OR kp1=3) AND kp2=10" => returns "kp2=10"
+ 2. "(kp1=2 AND kp2=10) OR (kp1=3 AND kp2=10)" => returns "kp2=10"
+ 3. "(kp1=2 AND (kp2=10 OR kp2=11)) OR (kp1=3 AND (kp2=10 OR kp2=11))"
+ => returns "kp2=10 OR kp2=11"
- @param[in] nga_field The NGA field we want the SEL_ARG tree for
+ whereas these do not
+ 1. "(kp1=2 AND kp2=10) OR kp1=3"
+ 2. "(kp1=2 AND kp2=10) OR (kp1=3 AND kp2=11)"
+ 3. "(kp1=2 AND kp2=10) OR (kp1=3 AND (kp2=10 OR kp2=11))"
+
+ This function effectively tests requirement WA2. In combination with
+ a test that the returned tree has no more than one range it is also
+ a test of NGA3.
+
+ @param[in] field The field we want the SEL_ARG tree for
@param[in] keypart_tree Root node of the SEL_ARG* tree for the index
@param[out] cur_range The SEL_ARG tree, if any, for the keypart
covering field 'keypart_field'
- @retval true 'keypart_tree' contained a predicate for 'nga_field' but
- multiple ranges exists. 'cur_range' should not be used.
+ @retval true 'keypart_tree' contained a predicate for 'field' that
+ is not conjunction to all predicates on earlier keyparts
@retval false otherwise
*/
static bool
-get_sel_arg_for_keypart(Field *nga_field,
+get_sel_arg_for_keypart(Field *field,
SEL_ARG *keypart_tree,
SEL_ARG **cur_range)
{
- if(keypart_tree == NULL)
+ if (keypart_tree == NULL)
return false;
- if(keypart_tree->field->eq(nga_field))
+ if (keypart_tree->field->eq(field))
{
- /*
- Enforce NGA3: If a condition for nga_field has been found, only
- a single range is allowed.
- */
- if (keypart_tree->prev || keypart_tree->next)
- return true; // There are multiple ranges
-
*cur_range= keypart_tree;
return false;
}
- SEL_ARG *found_tree= NULL;
+ SEL_ARG *tree_first_range= NULL;
SEL_ARG *first_kp= keypart_tree->first();
- for (SEL_ARG *cur_kp= first_kp; cur_kp && !found_tree;
- cur_kp= cur_kp->next)
+ for (SEL_ARG *cur_kp= first_kp; cur_kp; cur_kp= cur_kp->next)
{
+ SEL_ARG *curr_tree= NULL;
if (cur_kp->next_key_part)
{
- if (get_sel_arg_for_keypart(nga_field,
+ if (get_sel_arg_for_keypart(field,
cur_kp->next_key_part,
- &found_tree))
+ &curr_tree))
return true;
-
}
/*
- Enforce NGA3: If a condition for nga_field has been found,only
- a single range is allowed.
- */
- if (found_tree && first_kp->next)
- return true; // There are multiple ranges
+ Check if the SEL_ARG tree for 'field' is identical for all ranges in
+ 'keypart_tree
+ */
+ if (cur_kp == first_kp)
+ tree_first_range= curr_tree;
+ else if (!all_same(tree_first_range, curr_tree))
+ return true;
}
- *cur_range= found_tree;
+ *cur_range= tree_first_range;
return false;
}
-
/*
Extract a sequence of constants from a conjunction of equality predicates.
@@ -12751,7 +12841,8 @@ get_sel_arg_for_keypart(Field *nga_field,
(const_ci = NG_i).. In addition, there can only be one range when there is
such a gap.
Thus all the NGF_i attributes must fill the 'gap' between the last group-by
- attribute and the MIN/MAX attribute in the index (if present). If these
+ attribute and the MIN/MAX attribute in the index (if present). Also ensure
+ that there is only a single range on NGF_i (NGA3). If these
conditions hold, copy each constant from its corresponding predicate into
key_infix, in the order its NG_i attribute appears in the index, and update
key_infix_len with the total length of the key parts in key_infix.
@@ -12760,7 +12851,6 @@ get_sel_arg_for_keypart(Field *nga_field,
TRUE if the index passes the test
FALSE o/w
*/
-
static bool
get_constant_key_infix(KEY *index_info, SEL_ARG *index_range_tree,
KEY_PART_INFO *first_non_group_part,
@@ -12780,32 +12870,42 @@ get_constant_key_infix(KEY *index_info, SEL_ARG *index_range_tree,
{
cur_range= NULL;
/*
- Find the range tree for the current keypart. We assume that
- index_range_tree points to the first keypart in the index.
+ Check NGA3:
+ 1. get_sel_arg_for_keypart gets the range tree for the 'field' and also
+ checks for a unique conjunction of this tree with all the predicates
+ on the earlier keyparts in the index.
+ 2. Check for multiple ranges on the found keypart tree.
+
+ We assume that index_range_tree points to the leftmost keypart in
+ the index.
*/
- if(get_sel_arg_for_keypart(cur_part->field, index_range_tree, &cur_range))
+ if (get_sel_arg_for_keypart(cur_part->field, index_range_tree,
+ &cur_range))
+ return false;
+
+ if (cur_range && cur_range->elements > 1)
return false;
if (!cur_range || cur_range->type != SEL_ARG::KEY_RANGE)
{
if (min_max_arg_part)
- return FALSE; /* The current keypart has no range predicates at all. */
+ return false; /* The current keypart has no range predicates at all. */
else
{
*first_non_infix_part= cur_part;
- return TRUE;
+ return true;
}
}
if ((cur_range->min_flag & NO_MIN_RANGE) ||
(cur_range->max_flag & NO_MAX_RANGE) ||
(cur_range->min_flag & NEAR_MIN) || (cur_range->max_flag & NEAR_MAX))
- return FALSE;
+ return false;
uint field_length= cur_part->store_length;
if (cur_range->maybe_null &&
cur_range->min_value[0] && cur_range->max_value[0])
- {
+ {
/*
cur_range specifies 'IS NULL'. In this case the argument points
to a "null value" (is_null_string) that may not always be long
@@ -12824,7 +12924,7 @@ get_constant_key_infix(KEY *index_info, SEL_ARG *index_range_tree,
*key_infix_len+= field_length;
}
else
- return FALSE;
+ return false;
}
if (!min_max_arg_part && (cur_part == last_part))
diff --git a/sql/scheduler.cc b/sql/scheduler.cc
index 06e8ffb2b5e..1cdda089a6b 100644
--- a/sql/scheduler.cc
+++ b/sql/scheduler.cc
@@ -1,5 +1,5 @@
-/* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
- Copyright (c) 2012, Monty Program Ab
+/* Copyright (c) 2007, 2013, Oracle and/or its affiliates.
+ Copyright (c) 2012, 2014, SkySQL Ab.
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
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 16c484977d7..475069d5ea2 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -1,6 +1,6 @@
/*
Copyright (c) 2000, 2013, Oracle and/or its affiliates.
- Copyright (c) 2008, 2013, Monty Program Ab.
+ Copyright (c) 2008, 2014, SkySQL Ab.
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
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc
index 0bc1453ddef..ccfdf352f53 100644
--- a/sql/sql_insert.cc
+++ b/sql/sql_insert.cc
@@ -1,6 +1,6 @@
/*
Copyright (c) 2000, 2013, Oracle and/or its affiliates.
- Copyright (c) 2010, 2013, Monty Program Ab.
+ Copyright (c) 2010, 2014, SkySQL Ab.
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
diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc
index b9f84ac542d..8aeb2e6c516 100644
--- a/sql/sql_lex.cc
+++ b/sql/sql_lex.cc
@@ -1,5 +1,5 @@
-/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
- Copyright (c) 2009, 2013, Monty Program Ab.
+/* Copyright (c) 2000, 2014, Oracle and/or its affiliates.
+ Copyright (c) 2009, 2014, Monty Program Ab.
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
@@ -30,7 +30,7 @@
#include "sp.h"
#include "sql_select.h"
-static int lex_one_token(void *arg, THD *thd);
+static int lex_one_token(YYSTYPE *yylval, THD *thd);
/*
We are using pointer to this variable for distinguishing between assignment
@@ -951,15 +951,17 @@ bool consume_comment(Lex_input_stream *lip, int remaining_recursions_permitted)
/*
MYSQLlex remember the following states from the following MYSQLlex()
+ @param yylval [out] semantic value of the token being parsed (yylval)
+ @param thd THD
+
- MY_LEX_EOQ Found end of query
- MY_LEX_OPERATOR_OR_IDENT Last state was an ident, text or number
(which can't be followed by a signed number)
*/
-int MYSQLlex(void *arg, THD *thd)
+int MYSQLlex(YYSTYPE *yylval, THD *thd)
{
Lex_input_stream *lip= & thd->m_parser_state->m_lip;
- YYSTYPE *yylval=(YYSTYPE*) arg;
int token;
if (lip->lookahead_token >= 0)
@@ -975,7 +977,7 @@ int MYSQLlex(void *arg, THD *thd)
return token;
}
- token= lex_one_token(arg, thd);
+ token= lex_one_token(yylval, thd);
switch(token) {
case WITH:
@@ -986,7 +988,7 @@ int MYSQLlex(void *arg, THD *thd)
to transform the grammar into a LALR(1) grammar,
which sql_yacc.yy can process.
*/
- token= lex_one_token(arg, thd);
+ token= lex_one_token(yylval, thd);
switch(token) {
case CUBE_SYM:
return WITH_CUBE_SYM;
@@ -1009,7 +1011,7 @@ int MYSQLlex(void *arg, THD *thd)
return token;
}
-int lex_one_token(void *arg, THD *thd)
+static int lex_one_token(YYSTYPE *yylval, THD *thd)
{
reg1 uchar c;
bool comment_closed;
@@ -1018,7 +1020,6 @@ int lex_one_token(void *arg, THD *thd)
enum my_lex_states state;
Lex_input_stream *lip= & thd->m_parser_state->m_lip;
LEX *lex= thd->lex;
- YYSTYPE *yylval=(YYSTYPE*) arg;
CHARSET_INFO *const cs= thd->charset();
const uchar *const state_map= cs->state_map;
const uchar *const ident_map= cs->ident_map;
diff --git a/sql/sql_lex.h b/sql/sql_lex.h
index 458e990f043..e0bb5d11cbc 100644
--- a/sql/sql_lex.h
+++ b/sql/sql_lex.h
@@ -1,5 +1,5 @@
-/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
- Copyright (c) 2010, 2013, Monty Program Ab.
+/* Copyright (c) 2000, 2014, Oracle and/or its affiliates.
+ Copyright (c) 2010, 2014, Monty Program Ab.
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
@@ -2932,7 +2932,7 @@ extern void lex_start(THD *thd);
extern void lex_end(LEX *lex);
void end_lex_with_single_table(THD *thd, TABLE *table, LEX *old_lex);
int init_lex_with_single_table(THD *thd, TABLE *table, LEX *lex);
-extern int MYSQLlex(void *arg, THD *thd);
+extern int MYSQLlex(union YYSTYPE *yylval, THD *thd);
extern void trim_whitespace(CHARSET_INFO *cs, LEX_STRING *str);
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 95a152bd848..e6b67e57f09 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -1,5 +1,5 @@
/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
- Copyright (c) 2008, 2013, Monty Program Ab
+ Copyright (c) 2008, 2014, SkySQL Ab.
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
diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc
index 3eff6ee5cf4..b0fb38bf748 100644
--- a/sql/sql_partition.cc
+++ b/sql/sql_partition.cc
@@ -1,5 +1,5 @@
-/* Copyright (c) 2005, 2013, Oracle and/or its affiliates.
- Copyright (c) 2009, 2011, Monty Program Ab.
+/* Copyright (c) 2005, 2014, Oracle and/or its affiliates.
+ Copyright (c) 2009, 2014, SkySQL Ab.
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
@@ -3232,19 +3232,28 @@ uint32 get_partition_id_cols_list_for_endpoint(partition_info *part_info,
uint num_columns= part_info->part_field_list.elements;
uint list_index;
uint min_list_index= 0;
+ int cmp;
+ /* Notice that max_list_index = last_index + 1 here! */
uint max_list_index= part_info->num_list_values;
DBUG_ENTER("get_partition_id_cols_list_for_endpoint");
/* Find the matching partition (including taking endpoint into account). */
do
{
- /* Midpoint, adjusted down, so it can never be > last index. */
+ /* Midpoint, adjusted down, so it can never be >= max_list_index. */
list_index= (max_list_index + min_list_index) >> 1;
- if (cmp_rec_and_tuple_prune(list_col_array + list_index*num_columns,
- nparts, left_endpoint, include_endpoint) > 0)
+ cmp= cmp_rec_and_tuple_prune(list_col_array + list_index*num_columns,
+ nparts, left_endpoint, include_endpoint);
+ if (cmp > 0)
+ {
min_list_index= list_index + 1;
+ }
else
+ {
max_list_index= list_index;
+ if (cmp == 0)
+ break;
+ }
} while (max_list_index > min_list_index);
list_index= max_list_index;
@@ -3261,17 +3270,10 @@ uint32 get_partition_id_cols_list_for_endpoint(partition_info *part_info,
nparts, left_endpoint,
include_endpoint)));
- if (!left_endpoint && list_index < part_info->num_list_values)
- {
- /*
- Set the end after this list tuple if it is not already after the last
- and it matches. ???
- */
- int cmp = cmp_rec_and_tuple_prune(list_col_array + list_index*num_columns,
- nparts, left_endpoint, include_endpoint);
- if (cmp >= 0)
- list_index++;
- }
+ /* Include the right endpoint if not already passed end of array. */
+ if (!left_endpoint && include_endpoint && cmp == 0 &&
+ list_index < part_info->num_list_values)
+ list_index++;
DBUG_RETURN(list_index);
}
@@ -5499,7 +5501,9 @@ the generated partition syntax in a correct manner.
There was no partitioning before and no partitioning defined.
Obviously no work needed.
*/
- if (table->part_info)
+ partition_info *tab_part_info= table->part_info;
+
+ if (tab_part_info)
{
if (alter_info->flags & ALTER_REMOVE_PARTITIONING)
{
@@ -5507,7 +5511,7 @@ the generated partition syntax in a correct manner.
if (!(create_info->used_fields & HA_CREATE_USED_ENGINE))
{
DBUG_PRINT("info", ("No explicit engine used"));
- create_info->db_type= table->part_info->default_engine_type;
+ create_info->db_type= tab_part_info->default_engine_type;
}
DBUG_PRINT("info", ("New engine type: %s",
ha_resolve_storage_engine_name(create_info->db_type)));
@@ -5519,16 +5523,20 @@ the generated partition syntax in a correct manner.
/*
Retain partitioning but possibly with a new storage engine
beneath.
+
+ Create a copy of TABLE::part_info to be able to modify it freely.
*/
- thd->work_part_info= table->part_info;
+ if (!(tab_part_info= tab_part_info->get_clone()))
+ DBUG_RETURN(TRUE);
+ thd->work_part_info= tab_part_info;
if (create_info->used_fields & HA_CREATE_USED_ENGINE &&
- create_info->db_type != table->part_info->default_engine_type)
+ create_info->db_type != tab_part_info->default_engine_type)
{
/*
Make sure change of engine happens to all partitions.
*/
DBUG_PRINT("info", ("partition changed"));
- if (table->part_info->is_auto_partitioned)
+ if (tab_part_info->is_auto_partitioned)
{
/*
If the user originally didn't specify partitioning to be
@@ -5556,7 +5564,7 @@ the generated partition syntax in a correct manner.
Need to cater for engine types that can handle partition without
using the partition handler.
*/
- if (part_info != table->part_info)
+ if (part_info != tab_part_info)
{
if (part_info->fix_parser_data(thd))
{
@@ -5584,8 +5592,8 @@ the generated partition syntax in a correct manner.
part_info->default_engine_type= create_info->db_type;
else
{
- if (table->part_info)
- part_info->default_engine_type= table->part_info->default_engine_type;
+ if (tab_part_info)
+ part_info->default_engine_type= tab_part_info->default_engine_type;
else
part_info->default_engine_type= create_info->db_type;
}
@@ -7428,15 +7436,13 @@ static int cmp_rec_and_tuple_prune(part_column_list_val *val,
field= val->part_info->part_field_array + n_vals_in_rec;
if (!(*field))
{
- /*
- Full match, if right endpoint and not including the endpoint,
- (rec < part) return lesser.
- */
- if (!is_left_endpoint && !include_endpoint)
- return -4;
+ /* Full match. Only equal if including endpoint. */
+ if (include_endpoint)
+ return 0;
- /* Otherwise they are equal! */
- return 0;
+ if (is_left_endpoint)
+ return +4; /* Start of range, part_tuple < rec, return higher. */
+ return -4; /* End of range, rec < part_tupe, return lesser. */
}
/*
The prefix is equal and there are more partition columns to compare.
diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc
index dac4077430c..5aea3f6d0de 100644
--- a/sql/sql_repl.cc
+++ b/sql/sql_repl.cc
@@ -1,5 +1,5 @@
/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
- Copyright (c) 2008, 2012, Monty Program Ab.
+ Copyright (c) 2008, 2014, SkySQL Ab.
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
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 6d8c1677166..dc6e842879d 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -1,6 +1,6 @@
/*
Copyright (c) 2000, 2013, Oracle and/or its affiliates.
- Copyright (c) 2010, 2013, Monty Program Ab.
+ Copyright (c) 2010, 2014, SkySQL Ab.
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
@@ -74,6 +74,7 @@ static bool check_engine(THD *, const char *, const char *, HA_CREATE_INFO *);
static int mysql_prepare_create_table(THD *, HA_CREATE_INFO *, Alter_info *,
bool, uint *, handler *, KEY **, uint *,
int);
+static uint blob_length_by_type(enum_field_types type);
/**
@brief Helper function for explain_filename
@@ -3475,7 +3476,6 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info,
CHARSET_INFO *ft_key_charset=0; // for FULLTEXT
for (uint column_nr=0 ; (column=cols++) ; column_nr++)
{
- uint length;
Key_part_spec *dup_column;
it.rewind();
@@ -3552,7 +3552,7 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info,
}
if (f_is_geom(sql_field->pack_flag) && sql_field->geom_type ==
Field::GEOM_POINT)
- column->length= 25;
+ column->length= MAX_LEN_GEOM_POINT_FIELD;
if (!column->length)
{
my_error(ER_BLOB_KEY_WITHOUT_LENGTH, MYF(0), column->field_name.str);
@@ -3618,30 +3618,31 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info,
key_part_info->fieldnr= field;
key_part_info->offset= (uint16) sql_field->offset;
key_part_info->key_type=sql_field->pack_flag;
- length= sql_field->key_length;
+ uint key_part_length= sql_field->key_length;
if (column->length)
{
if (f_is_blob(sql_field->pack_flag))
{
- if ((length=column->length) > max_key_length ||
- length > file->max_key_part_length())
+ key_part_length= min(column->length,
+ blob_length_by_type(sql_field->sql_type)
+ * sql_field->charset->mbmaxlen);
+ if (key_part_length > max_key_length ||
+ key_part_length > file->max_key_part_length())
{
- length=min(max_key_length, file->max_key_part_length());
+ key_part_length= min(max_key_length, file->max_key_part_length());
if (key->type == Key::MULTIPLE)
{
/* not a critical problem */
- char warn_buff[MYSQL_ERRMSG_SIZE];
- my_snprintf(warn_buff, sizeof(warn_buff), ER(ER_TOO_LONG_KEY),
- length);
- push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
- ER_TOO_LONG_KEY, warn_buff);
+ push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+ ER_TOO_LONG_KEY, ER(ER_TOO_LONG_KEY),
+ key_part_length);
/* Align key length to multibyte char boundary */
- length-= length % sql_field->charset->mbmaxlen;
+ key_part_length-= key_part_length % sql_field->charset->mbmaxlen;
}
else
{
- my_error(ER_TOO_LONG_KEY,MYF(0),length);
+ my_error(ER_TOO_LONG_KEY, MYF(0), key_part_length);
DBUG_RETURN(TRUE);
}
}
@@ -3649,9 +3650,9 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info,
// Catch invalid use of partial keys
else if (!f_is_geom(sql_field->pack_flag) &&
// is the key partial?
- column->length != length &&
+ column->length != key_part_length &&
// is prefix length bigger than field length?
- (column->length > length ||
+ (column->length > key_part_length ||
// can the field have a partial key?
!Field::type_can_have_key_part (sql_field->sql_type) ||
// a packed field can't be used in a partial key
@@ -3660,43 +3661,42 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info,
((file->ha_table_flags() & HA_NO_PREFIX_CHAR_KEYS) &&
// and is this a 'unique' key?
(key_info->flags & HA_NOSAME))))
- {
+ {
my_message(ER_WRONG_SUB_KEY, ER(ER_WRONG_SUB_KEY), MYF(0));
DBUG_RETURN(TRUE);
}
else if (!(file->ha_table_flags() & HA_NO_PREFIX_CHAR_KEYS))
- length=column->length;
+ key_part_length= column->length;
}
- else if (length == 0 && (sql_field->flags & NOT_NULL_FLAG))
+ else if (key_part_length == 0 && (sql_field->flags & NOT_NULL_FLAG))
{
my_error(ER_WRONG_KEY_COLUMN, MYF(0), column->field_name.str);
DBUG_RETURN(TRUE);
}
- if (length > file->max_key_part_length() && key->type != Key::FULLTEXT)
+ if (key_part_length > file->max_key_part_length() &&
+ key->type != Key::FULLTEXT)
{
- length= file->max_key_part_length();
+ key_part_length= file->max_key_part_length();
if (key->type == Key::MULTIPLE)
{
/* not a critical problem */
- char warn_buff[MYSQL_ERRMSG_SIZE];
- my_snprintf(warn_buff, sizeof(warn_buff), ER(ER_TOO_LONG_KEY),
- length);
- push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
- ER_TOO_LONG_KEY, warn_buff);
+ push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+ ER_TOO_LONG_KEY, ER(ER_TOO_LONG_KEY),
+ key_part_length);
/* Align key length to multibyte char boundary */
- length-= length % sql_field->charset->mbmaxlen;
+ key_part_length-= key_part_length % sql_field->charset->mbmaxlen;
}
else
{
- my_error(ER_TOO_LONG_KEY,MYF(0),length);
+ my_error(ER_TOO_LONG_KEY, MYF(0), key_part_length);
DBUG_RETURN(TRUE);
}
}
- key_part_info->length=(uint16) length;
+ key_part_info->length= (uint16) key_part_length;
/* Use packed keys for long strings on the first column */
if (!((*db_options) & HA_OPTION_NO_PACK_KEYS) &&
!((create_info->table_options & HA_OPTION_NO_PACK_KEYS)) &&
- (length >= KEY_DEFAULT_PACK_LENGTH &&
+ (key_part_length >= KEY_DEFAULT_PACK_LENGTH &&
(sql_field->sql_type == MYSQL_TYPE_STRING ||
sql_field->sql_type == MYSQL_TYPE_VARCHAR ||
sql_field->pack_flag & FIELDFLAG_BLOB)))
@@ -3708,10 +3708,10 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info,
key_info->flags|= HA_PACK_KEY;
}
/* Check if the key segment is partial, set the key flag accordingly */
- if (length != sql_field->key_length)
+ if (key_part_length != sql_field->key_length)
key_info->flags|= HA_KEY_HAS_PART_KEY_SEG;
- key_length+=length;
+ key_length+= key_part_length;
key_part_info++;
/* Create the key name based on the first column (if not given) */
diff --git a/sql/sql_table.h b/sql/sql_table.h
index c8ecb3ced4f..838d763cbc8 100644
--- a/sql/sql_table.h
+++ b/sql/sql_table.h
@@ -104,6 +104,9 @@ enum enum_explain_filename_mode
EXPLAIN_PARTITIONS_AS_COMMENT
};
+/* Maximum length of GEOM_POINT Field */
+#define MAX_LEN_GEOM_POINT_FIELD 25
+
/* depends on errmsg.txt Database `db`, Table `t` ... */
#define EXPLAIN_FILENAME_MAX_EXTRA_LENGTH 63
diff --git a/sql/sql_union.cc b/sql/sql_union.cc
index 1d4ceb6245d..1bbd2eb6c29 100644
--- a/sql/sql_union.cc
+++ b/sql/sql_union.cc
@@ -1,4 +1,5 @@
-/* Copyright (c) 2000, 2011, Oracle and/or its affiliates.
+/* Copyright (c) 2000, 2014, Oracle and/or its affiliates.
+ Copyright (c) 2010, 2014, SkySQL Ab.
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
@@ -692,6 +693,11 @@ bool st_select_lex_unit::exec()
0);
if (!saved_error)
{
+ /*
+ Save the current examined row count locally and clear the global
+ counter, so that we can accumulate the number of evaluated rows for
+ the current query block.
+ */
examined_rows+= thd->examined_row_count;
thd->examined_row_count= 0;
if (union_result->flush())
diff --git a/sql/sql_view.cc b/sql/sql_view.cc
index 25bada09fba..b711f05be02 100644
--- a/sql/sql_view.cc
+++ b/sql/sql_view.cc
@@ -404,9 +404,7 @@ bool mysql_create_view(THD *thd, TABLE_LIST *views,
TABLE_LIST *tables= lex->query_tables;
TABLE_LIST *tbl;
SELECT_LEX *select_lex= &lex->select_lex;
-#ifndef NO_EMBEDDED_ACCESS_CHECKS
SELECT_LEX *sl;
-#endif
SELECT_LEX_UNIT *unit= &lex->unit;
bool res= FALSE;
DBUG_ENTER("mysql_create_view");
@@ -601,7 +599,8 @@ bool mysql_create_view(THD *thd, TABLE_LIST *views,
}
/* Check if the auto generated column names are conforming. */
- make_valid_column_names(select_lex->item_list);
+ for (sl= select_lex; sl; sl= sl->next_select())
+ make_valid_column_names(sl->item_list);
if (check_duplicate_names(select_lex->item_list, 1))
{
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index 0a116b41308..47bd3994fd3 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -72,7 +72,7 @@ int yylex(void *yylval, void *yythd);
ulong val= *(F); \
if (my_yyoverflow((B), (D), &val)) \
{ \
- yyerror(current_thd, (char*) (A)); \
+ yyerror(thd, (char*) (A)); \
return 2; \
} \
else \
@@ -5764,7 +5764,8 @@ spatial_type:
| GEOMETRYCOLLECTION { $$= Field::GEOM_GEOMETRYCOLLECTION; }
| POINT_SYM
{
- Lex->length= (char*)"25";
+ Lex->length= const_cast<char*>(STRINGIFY_ARG
+ (MAX_LEN_GEOM_POINT_FIELD));
$$= Field::GEOM_POINT;
}
| MULTIPOINT { $$= Field::GEOM_MULTIPOINT; }
diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc
index d82c8f30ed2..cb35d334f9d 100644
--- a/sql/sys_vars.cc
+++ b/sql/sys_vars.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2002, 2013, Oracle and/or its affiliates.
+/* Copyright (c) 2002, 2014, Oracle and/or its affiliates.
Copyright (c) 2012, 2014, SkySQL Ab.
This program is free software; you can redistribute it and/or modify
@@ -2444,9 +2444,10 @@ static Sys_var_ulonglong Sys_tmp_table_size(
static Sys_var_mybool Sys_timed_mutexes(
"timed_mutexes",
- "Specify whether to time mutexes (only InnoDB mutexes are currently "
- "supported)",
- GLOBAL_VAR(timed_mutexes), CMD_LINE(OPT_ARG), DEFAULT(0));
+ "Specify whether to time mutexes. Deprecated, has no effect.",
+ GLOBAL_VAR(timed_mutexes), CMD_LINE(OPT_ARG), DEFAULT(0),
+ NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(NULL), ON_UPDATE(NULL),
+ DEPRECATED(""));
static char *server_version_ptr;
static Sys_var_charptr Sys_version(
diff --git a/sql/table.cc b/sql/table.cc
index aa63f79c9bd..501e5e21982 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -1749,13 +1749,25 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head,
key_part= keyinfo->key_part;
for (i=0 ; i < keyinfo->key_parts ;i++)
{
- uint fieldnr= key_part[i].fieldnr;
- if (!fieldnr ||
- share->field[fieldnr-1]->null_ptr ||
- share->field[fieldnr-1]->key_length() !=
- key_part[i].length)
+ DBUG_ASSERT(key_part[i].fieldnr > 0);
+ // Table field corresponding to the i'th key part.
+ Field *table_field= share->field[key_part[i].fieldnr - 1];
+
+ /*
+ If the key column is of NOT NULL BLOB type, then it
+ will definitly have key prefix. And if key part prefix size
+ is equal to the BLOB column max size, then we can promote
+ it to primary key.
+ */
+ if (!table_field->real_maybe_null() &&
+ table_field->type() == MYSQL_TYPE_BLOB &&
+ table_field->field_length == key_part[i].length)
+ continue;
+
+ if (table_field->real_maybe_null() ||
+ table_field->key_length() != key_part[i].length)
{
- primary_key=MAX_KEY; // Can't be used
+ primary_key= MAX_KEY; // Can't be used
break;
}
}
diff --git a/storage/heap/hp_block.c b/storage/heap/hp_block.c
index 01978e2b4e8..3d92707a98a 100644
--- a/storage/heap/hp_block.c
+++ b/storage/heap/hp_block.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2000, 2014, 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
@@ -75,8 +75,8 @@ int hp_get_new_block(HP_BLOCK *block, size_t *alloc_length)
When level 1 is full, we allocate data for HPTRS_IN_NODE at level 2 and 1
+ X rows at level 0.
*/
- *alloc_length= (sizeof(HP_PTRS)* ((i == block->levels) ? i : i - 1) +
- block->records_in_block* block->recbuffer);
+ *alloc_length= (sizeof(HP_PTRS) * ((i == block->levels) ? i : i - 1) +
+ (ulonglong)block->records_in_block * block->recbuffer);
if (!(root=(HP_PTRS*) my_malloc(*alloc_length,MYF(MY_WME))))
return 1;
diff --git a/storage/heap/hp_create.c b/storage/heap/hp_create.c
index 5e0caf2fa24..2b705b0e3d7 100644
--- a/storage/heap/hp_create.c
+++ b/storage/heap/hp_create.c
@@ -1,4 +1,5 @@
-/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2000, 2011, Oracle and/or its affiliates.
+ Copyright (c) 2010, 2014, SkySQL Ab.
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
diff --git a/storage/innobase/dict/dict0crea.c b/storage/innobase/dict/dict0crea.c
index eeebbe9bbd2..ac8a1eac03c 100644
--- a/storage/innobase/dict/dict0crea.c
+++ b/storage/innobase/dict/dict0crea.c
@@ -1,6 +1,6 @@
/*****************************************************************************
-Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 1996, 2014, 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
@@ -1441,6 +1441,8 @@ dict_create_add_foreign_to_dictionary(
ulint i;
pars_info_t* info;
+ ut_ad(mutex_own(&(dict_sys->mutex)));
+
if (foreign->id == NULL) {
/* Generate a new constraint id */
ulint namelen = strlen(table->name);
@@ -1519,6 +1521,37 @@ dict_create_add_foreign_to_dictionary(
"END;\n"
, table, foreign, trx);
+ if (error == DB_SUCCESS) {
+
+
+ if (foreign->foreign_table != NULL) {
+ ib_rbt_t* rbt
+ = foreign->foreign_table->foreign_rbt;
+
+ if (rbt == NULL) {
+ rbt = dict_table_init_foreign_rbt(
+ foreign->foreign_table);
+ } else {
+ rbt_delete(rbt, foreign->id);
+ }
+
+ rbt_insert(rbt, foreign->id, &foreign);
+ }
+
+ if (foreign->referenced_table != NULL) {
+ ib_rbt_t* rbt
+ = foreign->referenced_table->referenced_rbt;
+
+ if (rbt == NULL) {
+ rbt = dict_table_init_referenced_rbt(
+ foreign->referenced_table);
+ } else {
+ rbt_delete(rbt, foreign->id);
+ }
+ rbt_insert(rbt, foreign->id, &foreign);
+ }
+ }
+
return(error);
}
@@ -1543,6 +1576,7 @@ dict_create_add_foreigns_to_dictionary(
dict_foreign_t* foreign;
ulint number = start_id + 1;
ulint error;
+ DBUG_ENTER("dict_create_add_foreigns_to_dictionary");
ut_ad(mutex_own(&(dict_sys->mutex)));
@@ -1551,7 +1585,7 @@ dict_create_add_foreigns_to_dictionary(
"InnoDB: table SYS_FOREIGN not found"
" in internal data dictionary\n");
- return(DB_ERROR);
+ DBUG_RETURN(DB_ERROR);
}
for (foreign = UT_LIST_GET_FIRST(table->foreign_list);
@@ -1563,9 +1597,9 @@ dict_create_add_foreigns_to_dictionary(
if (error != DB_SUCCESS) {
- return(error);
+ DBUG_RETURN(error);
}
}
- return(DB_SUCCESS);
+ DBUG_RETURN(DB_SUCCESS);
}
diff --git a/storage/innobase/dict/dict0dict.c b/storage/innobase/dict/dict0dict.c
index 546794be26c..4ed0051b77a 100644
--- a/storage/innobase/dict/dict0dict.c
+++ b/storage/innobase/dict/dict0dict.c
@@ -1,6 +1,6 @@
/*****************************************************************************
-Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 1996, 2014, 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
@@ -26,6 +26,7 @@ Created 1/8/1996 Heikki Tuuri
#include <my_sys.h>
#include "dict0dict.h"
+#include "ut0rbt.h"
#ifdef UNIV_NONINL
#include "dict0dict.ic"
@@ -191,6 +192,7 @@ UNIV_INTERN FILE* dict_foreign_err_file = NULL;
/* mutex protecting the foreign and unique error buffers */
UNIV_INTERN mutex_t dict_foreign_err_mutex;
#endif /* !UNIV_HOTBACKUP */
+
/******************************************************************//**
Makes all characters in a NUL-terminated UTF-8 string lower case. */
UNIV_INTERN
@@ -1103,6 +1105,10 @@ dict_table_rename_in_cache(
UT_LIST_INIT(table->referenced_list);
+ if (table->referenced_rbt != NULL) {
+ rbt_clear(table->referenced_rbt);
+ }
+
return(TRUE);
}
@@ -1113,6 +1119,10 @@ dict_table_rename_in_cache(
foreign = UT_LIST_GET_FIRST(table->foreign_list);
while (foreign != NULL) {
+
+ /* The id will be changed. So remove old one */
+ rbt_delete(foreign->foreign_table->foreign_rbt, foreign->id);
+
if (ut_strlen(foreign->foreign_table_name)
< ut_strlen(table->name)) {
/* Allocate a longer name buffer;
@@ -1260,6 +1270,9 @@ dict_table_rename_in_cache(
mem_free(old_id);
}
+ rbt_insert(foreign->foreign_table->foreign_rbt,
+ foreign->id, &foreign);
+
foreign = UT_LIST_GET_NEXT(foreign_list, foreign);
}
@@ -2480,22 +2493,40 @@ dict_foreign_remove_from_cache(
/*===========================*/
dict_foreign_t* foreign) /*!< in, own: foreign constraint */
{
+ DBUG_ENTER("dict_foreign_remove_from_cache");
+
ut_ad(mutex_own(&(dict_sys->mutex)));
ut_a(foreign);
if (foreign->referenced_table) {
+ ib_rbt_t* rbt;
+
UT_LIST_REMOVE(referenced_list,
foreign->referenced_table->referenced_list,
foreign);
+
+ rbt = foreign->referenced_table->referenced_rbt;
+ if (rbt != NULL) {
+ rbt_delete(rbt, foreign->id);
+ }
}
if (foreign->foreign_table) {
+ ib_rbt_t* rbt;
+
UT_LIST_REMOVE(foreign_list,
foreign->foreign_table->foreign_list,
foreign);
+ rbt = foreign->foreign_table->foreign_rbt;
+
+ if (rbt != NULL) {
+ rbt_delete(rbt, foreign->id);
+ }
}
dict_foreign_free(foreign);
+
+ DBUG_VOID_RETURN;
}
/**********************************************************************//**
@@ -2509,33 +2540,36 @@ dict_foreign_find(
dict_table_t* table, /*!< in: table object */
const char* id) /*!< in: foreign constraint id */
{
- dict_foreign_t* foreign;
-
- ut_ad(mutex_own(&(dict_sys->mutex)));
-
- foreign = UT_LIST_GET_FIRST(table->foreign_list);
+ const ib_rbt_node_t* node;
- while (foreign) {
- if (ut_strcmp(id, foreign->id) == 0) {
+ DBUG_ENTER("dict_foreign_find");
- return(foreign);
+ ut_ad(mutex_own(&(dict_sys->mutex)));
+ ut_ad(dict_table_check_foreign_keys(table));
+
+ if (table->foreign_rbt != NULL) {
+ ut_a(UT_LIST_GET_LEN(table->foreign_list)
+ == rbt_size(table->foreign_rbt));
+ node = rbt_lookup(table->foreign_rbt, id);
+ if (node != NULL) {
+ DBUG_RETURN(*(dict_foreign_t**) node->value);
}
-
- foreign = UT_LIST_GET_NEXT(foreign_list, foreign);
+ } else {
+ ut_a(UT_LIST_GET_LEN(table->foreign_list) == 0);
}
- foreign = UT_LIST_GET_FIRST(table->referenced_list);
-
- while (foreign) {
- if (ut_strcmp(id, foreign->id) == 0) {
-
- return(foreign);
+ if (table->referenced_rbt != NULL) {
+ ut_a(UT_LIST_GET_LEN(table->referenced_list)
+ == rbt_size(table->referenced_rbt));
+ node = rbt_lookup(table->referenced_rbt, id);
+ if (node != NULL) {
+ DBUG_RETURN(*(dict_foreign_t**) node->value);
}
-
- foreign = UT_LIST_GET_NEXT(referenced_list, foreign);
+ } else {
+ ut_a(UT_LIST_GET_LEN(table->referenced_list) == 0);
}
- return(NULL);
+ DBUG_RETURN(NULL);
}
/*********************************************************************//**
@@ -2773,6 +2807,8 @@ dict_foreign_add_to_cache(
ibool added_to_referenced_list= FALSE;
FILE* ef = dict_foreign_err_file;
+ DBUG_ENTER("dict_foreign_add_to_cache");
+
ut_ad(mutex_own(&(dict_sys->mutex)));
for_table = dict_table_check_if_in_cache_low(
@@ -2782,7 +2818,14 @@ dict_foreign_add_to_cache(
foreign->referenced_table_name_lookup);
ut_a(for_table || ref_table);
+ if (ref_table != NULL && ref_table->referenced_rbt == NULL) {
+ dict_table_init_referenced_rbt(ref_table);
+ }
+
if (for_table) {
+ if (for_table->foreign_rbt == NULL) {
+ dict_table_init_foreign_rbt(for_table);
+ }
for_in_cache = dict_foreign_find(for_table, foreign->id);
}
@@ -2819,18 +2862,22 @@ dict_foreign_add_to_cache(
mem_heap_free(foreign->heap);
}
- return(DB_CANNOT_ADD_CONSTRAINT);
+ DBUG_RETURN(DB_CANNOT_ADD_CONSTRAINT);
}
for_in_cache->referenced_table = ref_table;
for_in_cache->referenced_index = index;
+
UT_LIST_ADD_LAST(referenced_list,
- ref_table->referenced_list,
- for_in_cache);
+ ref_table->referenced_list, for_in_cache);
added_to_referenced_list = TRUE;
+
+ rbt_insert(ref_table->referenced_rbt,
+ for_in_cache->id, &for_in_cache);
}
if (for_in_cache->foreign_table == NULL && for_table) {
+
index = dict_foreign_find_index(
for_table,
for_in_cache->foreign_col_names,
@@ -2859,22 +2906,28 @@ dict_foreign_add_to_cache(
referenced_list,
ref_table->referenced_list,
for_in_cache);
+ rbt_delete(ref_table->referenced_rbt,
+ for_in_cache->id);
}
mem_heap_free(foreign->heap);
}
- return(DB_CANNOT_ADD_CONSTRAINT);
+ DBUG_RETURN(DB_CANNOT_ADD_CONSTRAINT);
}
for_in_cache->foreign_table = for_table;
for_in_cache->foreign_index = index;
+
UT_LIST_ADD_LAST(foreign_list,
for_table->foreign_list,
for_in_cache);
+
+ rbt_insert(for_table->foreign_rbt, for_in_cache->id,
+ &for_in_cache);
}
- return(DB_SUCCESS);
+ DBUG_RETURN(DB_SUCCESS);
}
#endif /* !UNIV_HOTBACKUP */
diff --git a/storage/innobase/dict/dict0load.c b/storage/innobase/dict/dict0load.c
index eb4fe7bfd7d..92b24d138a4 100644
--- a/storage/innobase/dict/dict0load.c
+++ b/storage/innobase/dict/dict0load.c
@@ -1759,6 +1759,8 @@ dict_load_table(
const char* err_msg;
mtr_t mtr;
+ DBUG_ENTER("dict_load_table");
+
ut_ad(mutex_own(&(dict_sys->mutex)));
heap = mem_heap_create(32000);
@@ -1792,7 +1794,7 @@ err_exit:
mtr_commit(&mtr);
mem_heap_free(heap);
- return(NULL);
+ DBUG_RETURN(NULL);
}
field = rec_get_nth_field_old(rec, 0, &len);
@@ -1954,8 +1956,8 @@ err_exit:
#endif /* 0 */
func_exit:
mem_heap_free(heap);
-
- return(table);
+ ut_ad(table == NULL || dict_table_check_foreign_keys(table));
+ DBUG_RETURN(table);
}
/***********************************************************************//**
@@ -2197,6 +2199,8 @@ dict_load_foreign(
dict_table_t* for_table;
dict_table_t* ref_table;
+ DBUG_ENTER("dict_load_foreign");
+
ut_ad(mutex_own(&(dict_sys->mutex)));
heap2 = mem_heap_create(1000);
@@ -2229,7 +2233,7 @@ dict_load_foreign(
mtr_commit(&mtr);
mem_heap_free(heap2);
- return(DB_ERROR);
+ DBUG_RETURN(DB_ERROR);
}
field = rec_get_nth_field_old(rec, 0, &len);
@@ -2245,7 +2249,7 @@ dict_load_foreign(
mtr_commit(&mtr);
mem_heap_free(heap2);
- return(DB_ERROR);
+ DBUG_RETURN(DB_ERROR);
}
/* Read the table names and the number of columns associated
@@ -2342,7 +2346,7 @@ dict_load_foreign(
a new foreign key constraint but loading one from the data
dictionary. */
- return(dict_foreign_add_to_cache(foreign, check_charsets, ignore_err));
+ DBUG_RETURN(dict_foreign_add_to_cache(foreign, check_charsets, ignore_err));
}
/***********************************************************************//**
@@ -2377,6 +2381,8 @@ dict_load_foreigns(
ulint err;
mtr_t mtr;
+ DBUG_ENTER("dict_load_foreigns");
+
ut_ad(mutex_own(&(dict_sys->mutex)));
sys_foreign = dict_table_get_low("SYS_FOREIGN", DICT_ERR_IGNORE_NONE);
@@ -2388,7 +2394,7 @@ dict_load_foreigns(
"InnoDB: Error: no foreign key system tables"
" in the database\n");
- return(DB_ERROR);
+ DBUG_RETURN(DB_ERROR);
}
ut_a(!dict_table_is_comp(sys_foreign));
@@ -2468,7 +2474,7 @@ loop:
if (err != DB_SUCCESS) {
btr_pcur_close(&pcur);
- return(err);
+ DBUG_RETURN(err);
}
mtr_start(&mtr);
@@ -2497,5 +2503,74 @@ load_next_index:
goto start_load;
}
- return(DB_SUCCESS);
+ DBUG_RETURN(DB_SUCCESS);
+}
+
+/********************************************************************//**
+Check if dict_table_t::foreign_rbt and dict_table::foreign_list
+contain the same set of foreign key objects; and check if
+dict_table_t::referenced_rbt and dict_table::referenced_list contain
+the same set of foreign key objects.
+@return TRUE if correct, FALSE otherwise. */
+ibool
+dict_table_check_foreign_keys(
+/*==========================*/
+ const dict_table_t* table) /* in: table object to check */
+{
+ dict_foreign_t* foreign;
+ const ib_rbt_node_t* node;
+
+ ut_ad(mutex_own(&(dict_sys->mutex)));
+
+ if (table->foreign_rbt == NULL) {
+
+ if (UT_LIST_GET_LEN(table->foreign_list) > 0) {
+ return(FALSE);
+ }
+
+ } else {
+
+ if (UT_LIST_GET_LEN(table->foreign_list)
+ != rbt_size(table->foreign_rbt)) {
+ return(FALSE);
+ }
+
+ foreign = UT_LIST_GET_FIRST(table->foreign_list);
+
+ while (foreign != NULL) {
+
+ node = rbt_lookup(table->foreign_rbt, foreign->id);
+ if (node == NULL) {
+ return(FALSE);
+ }
+ foreign = UT_LIST_GET_NEXT(foreign_list, foreign);
+ }
+ }
+
+ if (table->referenced_rbt == NULL ) {
+
+ if (UT_LIST_GET_LEN(table->referenced_list) > 0) {
+ return(FALSE);
+ }
+
+ } else {
+
+ if (UT_LIST_GET_LEN(table->referenced_list)
+ != rbt_size(table->referenced_rbt)) {
+ return(FALSE);
+ }
+
+ foreign = UT_LIST_GET_FIRST(table->referenced_list);
+
+ while (foreign != NULL) {
+
+ node = rbt_lookup(table->referenced_rbt, foreign->id);
+ if (node == NULL) {
+ return(FALSE);
+ }
+ foreign = UT_LIST_GET_NEXT(referenced_list, foreign);
+ }
+ }
+
+ return(TRUE);
}
diff --git a/storage/innobase/dict/dict0mem.c b/storage/innobase/dict/dict0mem.c
index 5be5c1b5543..cea7a253ba0 100644
--- a/storage/innobase/dict/dict0mem.c
+++ b/storage/innobase/dict/dict0mem.c
@@ -66,6 +66,7 @@ dict_mem_table_create(
{
dict_table_t* table;
mem_heap_t* heap;
+ DBUG_ENTER("dict_mem_table_create");
ut_ad(name);
ut_a(!(flags & (~0 << DICT_TF2_BITS)));
@@ -98,8 +99,11 @@ dict_mem_table_create(
table->n_waiting_or_granted_auto_inc_locks = 0;
#endif /* !UNIV_HOTBACKUP */
+ table->foreign_rbt = NULL;
+ table->referenced_rbt = NULL;
+
ut_d(table->magic_n = DICT_TABLE_MAGIC_N);
- return(table);
+ DBUG_RETURN(table);
}
/****************************************************************//**
@@ -117,6 +121,15 @@ dict_mem_table_free(
#ifndef UNIV_HOTBACKUP
mutex_free(&(table->autoinc_mutex));
#endif /* UNIV_HOTBACKUP */
+
+ if (table->foreign_rbt != NULL) {
+ rbt_free(table->foreign_rbt);
+ }
+
+ if (table->referenced_rbt != NULL) {
+ rbt_free(table->referenced_rbt);
+ }
+
ut_free(table->name);
mem_heap_free(table->heap);
}
diff --git a/storage/innobase/handler/i_s.cc b/storage/innobase/handler/i_s.cc
index 24589be030f..9fec09da564 100644
--- a/storage/innobase/handler/i_s.cc
+++ b/storage/innobase/handler/i_s.cc
@@ -2692,6 +2692,19 @@ i_s_innodb_buffer_page_fill(
table_name = mem_heap_strdup(heap,
index->table_name);
+ DBUG_EXECUTE_IF("mysql_test_print_index_type",
+ {
+ char idx_type[3];
+
+ ut_snprintf(idx_type,
+ sizeof(idx_type),
+ "%d",
+ index->type);
+
+ index_name=mem_heap_strcat(heap,
+ index_name,
+ idx_type);
+ };);
}
mutex_exit(&dict_sys->mutex);
diff --git a/storage/innobase/include/dict0dict.h b/storage/innobase/include/dict0dict.h
index deabbfcbe92..254d4e149ca 100644
--- a/storage/innobase/include/dict0dict.h
+++ b/storage/innobase/include/dict0dict.h
@@ -1,6 +1,6 @@
/*****************************************************************************
-Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 1996, 2014, 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
@@ -39,6 +39,7 @@ Created 1/8/1996 Heikki Tuuri
#include "ut0rnd.h"
#include "ut0byte.h"
#include "trx0types.h"
+#include "ut0rbt.h"
#ifndef UNIV_HOTBACKUP
# include "sync0sync.h"
@@ -1331,6 +1332,42 @@ dict_set_corrupted_by_space(
/*========================*/
ulint space_id); /*!< in: space ID */
+/**********************************************************************//**
+Compares the given foreign key identifier (the key in rb-tree) and the
+foreign key identifier in the given fk object (value in rb-tree).
+@return negative, 0, or positive if foreign_id is smaller, equal,
+or greater than foreign_obj->id, respectively. */
+UNIV_INLINE
+int
+dict_foreign_rbt_cmp(
+/*=================*/
+ const void* foreign_id, /*!< in: the foreign key identifier
+ which is used as a key in rb-tree. */
+ const void* foreign_obj); /*!< in: the foreign object itself
+ which is used as value in rb-tree. */
+
+/**********************************************************************//**
+Allocate the table->foreign_rbt, which stores all the foreign objects
+that is available in table->foreign_list.
+@return the allocated rbt object */
+UNIV_INLINE
+ib_rbt_t*
+dict_table_init_foreign_rbt(
+/*========================*/
+ dict_table_t* table); /*!< in: the table object whose
+ table->foreign_rbt will be initialized */
+
+/**********************************************************************//**
+Allocate the table->referened_rbt, which stores all the foreign objects
+that is available in table->referenced_list.
+@return the allocated rbt object */
+UNIV_INLINE
+ib_rbt_t*
+dict_table_init_referenced_rbt(
+/*===========================*/
+ dict_table_t* table); /*!< in: the table object whose
+ table->referenced_rbt will be initialized */
+
#ifndef UNIV_NONINL
#include "dict0dict.ic"
#endif
diff --git a/storage/innobase/include/dict0dict.ic b/storage/innobase/include/dict0dict.ic
index 9b0c9e5c001..a63e1d16427 100644
--- a/storage/innobase/include/dict0dict.ic
+++ b/storage/innobase/include/dict0dict.ic
@@ -1,6 +1,6 @@
/*****************************************************************************
-Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 1996, 2014, 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
@@ -945,3 +945,62 @@ dict_index_is_corrupted(
}
#endif /* !UNIV_HOTBACKUP */
+/**********************************************************************//**
+Compares the given foreign key identifier (the key in rb-tree) and the
+foreign key identifier in the given fk object (value in rb-tree).
+@return negative, 0, or positive if foreign_id is smaller, equal,
+or greater than foreign_obj->id, respectively. */
+UNIV_INLINE
+int
+dict_foreign_rbt_cmp(
+/*=================*/
+ const void* foreign_id, /*!< in: the foreign key identifier
+ which is used as a key in rb-tree. */
+ const void* foreign_obj) /*!< in: the foreign object itself
+ which is used as value in rb-tree. */
+{
+ return(ut_strcmp((const char*) foreign_id,
+ (*(dict_foreign_t**) foreign_obj)->id));
+}
+
+/**********************************************************************//**
+Allocate the table->foreign_rbt, which stores all the foreign objects
+that is available in table->foreign_list. The caller must hold the
+dict_sys->mutex.
+@return the allocated rbt object */
+UNIV_INLINE
+ib_rbt_t*
+dict_table_init_foreign_rbt(
+/*========================*/
+ dict_table_t* table) /*!< in: the table object whose
+ table->foreign_rbt will be initialized */
+{
+ ut_a(table->foreign_rbt == NULL);
+ ut_ad(mutex_own(&(dict_sys->mutex)));
+
+ table->foreign_rbt = rbt_create(sizeof(dict_foreign_t*),
+ dict_foreign_rbt_cmp);
+ ut_a(table->foreign_rbt != NULL);
+ return(table->foreign_rbt);
+}
+
+/**********************************************************************//**
+Allocate the table->referened_rbt, which stores all the foreign objects
+that is available in table->referenced_list. The caller must hold the
+dict_sys->mutex.
+@return the allocated rbt object */
+UNIV_INLINE
+ib_rbt_t*
+dict_table_init_referenced_rbt(
+/*===========================*/
+ dict_table_t* table) /*!< in: the table object whose
+ table->referenced_rbt will be initialized */
+{
+ ut_a(table->referenced_rbt == NULL);
+ ut_ad(mutex_own(&(dict_sys->mutex)));
+
+ table->referenced_rbt = rbt_create(sizeof(dict_foreign_t*),
+ dict_foreign_rbt_cmp);
+ ut_a(table->referenced_rbt != NULL);
+ return(table->referenced_rbt);
+}
diff --git a/storage/innobase/include/dict0load.h b/storage/innobase/include/dict0load.h
index bdc6a2b995c..772f36de850 100644
--- a/storage/innobase/include/dict0load.h
+++ b/storage/innobase/include/dict0load.h
@@ -32,6 +32,7 @@ Created 4/24/1996 Heikki Tuuri
#include "ut0byte.h"
#include "mem0mem.h"
#include "btr0types.h"
+#include "ut0rbt.h"
/** enum that defines all 6 system table IDs */
enum dict_system_table_id {
@@ -329,6 +330,17 @@ dict_process_sys_foreign_col_rec(
const char** ref_col_name, /*!< out: referenced column name
in referenced table */
ulint* pos); /*!< out: column position */
+/********************************************************************//**
+Check if dict_table_t::foreign_rbt and dict_table::foreign_list
+contains the same set of foreign key objects; and check if
+dict_table_t::referenced_rbt and dict_table::referenced_list contains
+the same set of foreign key objects.
+@return TRUE if correct, FALSE otherwise. */
+ibool
+dict_table_check_foreign_keys(
+/*==========================*/
+ const dict_table_t* table); /* in: table object to check */
+
#ifndef UNIV_NONINL
#include "dict0load.ic"
#endif
diff --git a/storage/innobase/include/dict0mem.h b/storage/innobase/include/dict0mem.h
index 0ee5721d34b..a58bb914be2 100644
--- a/storage/innobase/include/dict0mem.h
+++ b/storage/innobase/include/dict0mem.h
@@ -1,6 +1,6 @@
/*****************************************************************************
-Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 1996, 2014, 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
@@ -43,6 +43,7 @@ Created 1/8/1996 Heikki Tuuri
#include "ut0byte.h"
#include "hash0hash.h"
#include "trx0types.h"
+#include "ut0rbt.h"
/** Type flags of an index: OR'ing of the flags is allowed to define a
combination of types */
@@ -506,7 +507,6 @@ a foreign key constraint is enforced, therefore RESTRICT just means no flag */
#define DICT_FOREIGN_ON_UPDATE_NO_ACTION 32 /*!< ON UPDATE NO ACTION */
/* @} */
-
/** Data structure for a database table. Most fields will be
initialized to 0, NULL or FALSE in dict_mem_table_create(). */
struct dict_table_struct{
@@ -558,6 +558,14 @@ struct dict_table_struct{
UT_LIST_BASE_NODE_T(dict_foreign_t)
referenced_list;/*!< list of foreign key constraints
which refer to this table */
+
+ ib_rbt_t* foreign_rbt; /*!< a rb-tree of all foreign keys
+ listed in foreign_list, sorted by
+ foreign->id */
+ ib_rbt_t* referenced_rbt; /*!< a rb-tree of all foreign keys
+ listed in referenced_list, sorted by
+ foreign->id */
+
UT_LIST_NODE_T(dict_table_t)
table_LRU; /*!< node of the LRU list of tables */
ulint n_mysql_handles_opened;
diff --git a/storage/myisam/ha_myisam.cc b/storage/myisam/ha_myisam.cc
index 04879f4b26c..7cb5ae02e6d 100644
--- a/storage/myisam/ha_myisam.cc
+++ b/storage/myisam/ha_myisam.cc
@@ -1072,7 +1072,6 @@ int ha_myisam::repair(THD *thd, HA_CHECK &param, bool do_optimize)
param.db_name= table->s->db.str;
param.table_name= table->alias.c_ptr();
- param.tmpfile_createflag= O_RDWR | O_TRUNC | O_EXCL;
param.using_global_keycache = 1;
param.thd= thd;
param.tmpdir= &mysql_tmpdir_list;
diff --git a/strings/CMakeLists.txt b/strings/CMakeLists.txt
index cafd3292930..3e0c0612c57 100644
--- a/strings/CMakeLists.txt
+++ b/strings/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2006, 2013, Oracle and/or its affiliates
+# Copyright (c) 2006, 2014, Oracle and/or its affiliates
#
# 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
@@ -33,7 +33,6 @@ ENDIF()
ADD_DEFINITIONS(-DDISABLE_MYSQL_THREAD_H)
ADD_CONVENIENCE_LIBRARY(strings ${STRINGS_SOURCES})
-INSTALL_DEBUG_SYMBOLS(strings)
IF(MSVC)
INSTALL_DEBUG_TARGET(strings DESTINATION ${INSTALL_LIBDIR}/debug)
ENDIF()
diff --git a/strings/ctype-bin.c b/strings/ctype-bin.c
index 07cf9d45f07..77b7e0e18c3 100644
--- a/strings/ctype-bin.c
+++ b/strings/ctype-bin.c
@@ -1,5 +1,6 @@
/* Copyright (c) 2002-2007 MySQL AB & tommy@valley.ne.jp
- Copyright (c) 2009-2011, Monty Program Ab
+ Copyright (c) 2002, 2014, Oracle and/or its affiliates.
+ Copyright (c) 2009, 2014, SkySQL Ab.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
diff --git a/strings/ctype-eucjpms.c b/strings/ctype-eucjpms.c
index fe6bb744706..73698290b06 100644
--- a/strings/ctype-eucjpms.c
+++ b/strings/ctype-eucjpms.c
@@ -1,5 +1,6 @@
-/* Copyright (c) 2005, 2011, Oracle and/or its affiliates.
- Copyright (c) 2009-2011, Monty Program Ab
+/* Copyright (c) 2002 MySQL AB & tommy@valley.ne.jp
+ Copyright (c) 2002, 2014, Oracle and/or its affiliates.
+ Copyright (c) 2009, 2014, SkySQL Ab.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
diff --git a/strings/ctype-ujis.c b/strings/ctype-ujis.c
index 2743efc4087..46d4819b46e 100644
--- a/strings/ctype-ujis.c
+++ b/strings/ctype-ujis.c
@@ -1,6 +1,6 @@
-/* Copyright tommy@valley.ne.jp.
- Copyright (c) 2002, 2011, Oracle and/or its affiliates.
- Copyright (c) 2009-2011, Monty Program Ab
+/* Copyright (c) 2002 MySQL AB & tommy@valley.ne.jp
+ Copyright (c) 2002, 2014, Oracle and/or its affiliates.
+ Copyright (c) 2009, 2014, SkySQL Ab.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
diff --git a/support-files/CMakeLists.txt b/support-files/CMakeLists.txt
index 98e1560f5fb..4677bd59415 100644
--- a/support-files/CMakeLists.txt
+++ b/support-files/CMakeLists.txt
@@ -1,5 +1,5 @@
-# Copyright (c) 2006, 2010, Oracle and/or its affiliates.
-# Copyright (c) 2012, Monty Program Ab
+# Copyright (c) 2006, 2014, Oracle and/or its affiliates.
+# Copyright (c) 2012, 2014, SkySQL Ab.
#
# 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
@@ -56,12 +56,14 @@ IF(UNIX)
IF(script MATCHES ".ini")
SET(comp IniFiles)
+ SET(permissions OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
ELSE()
SET(comp Server_Scripts)
+ SET(permissions OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
ENDIF()
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${script}
DESTINATION ${inst_location} COMPONENT ${comp}
- PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
+ PERMISSIONS ${permissions})
ENDFOREACH()
IF(INSTALL_SUPPORTFILESDIR)
INSTALL(FILES magic DESTINATION ${inst_location} COMPONENT SupportFiles)
diff --git a/support-files/mysql.spec.sh b/support-files/mysql.spec.sh
index d8de3a41e7f..7908e1b5d50 100644
--- a/support-files/mysql.spec.sh
+++ b/support-files/mysql.spec.sh
@@ -30,7 +30,7 @@
%global mysqld_group mysql
%global mysqldatadir /var/lib/mysql
-%global release 1
+%global release 2
#
@@ -511,6 +511,7 @@ mkdir debug
# XXX: install_layout so we can't just set it based on INSTALL_LAYOUT=RPM
${CMAKE} ../%{src_dir} -DBUILD_CONFIG=mysql_release -DINSTALL_LAYOUT=RPM \
-DCMAKE_BUILD_TYPE=Debug \
+ -DENABLE_DTRACE=OFF \
-DMYSQL_UNIX_ADDR="%{mysqldatadir}/mysql.sock" \
-DFEATURE_SET="%{feature_set}" \
-DCOMPILATION_COMMENT="%{compilation_comment_debug}" \
@@ -526,6 +527,7 @@ mkdir release
# XXX: install_layout so we can't just set it based on INSTALL_LAYOUT=RPM
${CMAKE} ../%{src_dir} -DBUILD_CONFIG=mysql_release -DINSTALL_LAYOUT=RPM \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
+ -DENABLE_DTRACE=OFF \
-DMYSQL_UNIX_ADDR="%{mysqldatadir}/mysql.sock" \
-DFEATURE_SET="%{feature_set}" \
-DCOMPILATION_COMMENT="%{compilation_comment_release}" \
@@ -1217,6 +1219,9 @@ echo "=====" >> $STATUS_HISTORY
# merging BK trees)
##############################################################################
%changelog
+* Wed Jul 02 2014 Bjorn Munch <bjorn.munch@oracle.com>
+- Disable dtrace unconditionally, breaks after we install Oracle dtrace
+
* Wed Oct 30 2013 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com>
- Removed non gpl file docs/mysql.info from community packages
diff --git a/vio/CMakeLists.txt b/vio/CMakeLists.txt
index ab763ccc28a..b83518cd749 100644
--- a/vio/CMakeLists.txt
+++ b/vio/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2006, 2014, 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
@@ -21,7 +21,6 @@ SET(VIO_SOURCES vio.c viosocket.c viossl.c viosslfactories.c)
ADD_CONVENIENCE_LIBRARY(vio ${VIO_SOURCES})
TARGET_LINK_LIBRARIES(vio ${LIBSOCKET})
-INSTALL_DEBUG_SYMBOLS(vio)
IF(MSVC)
INSTALL_DEBUG_TARGET(vio DESTINATION ${INSTALL_LIBDIR}/debug)
ENDIF()
diff --git a/zlib/CMakeLists.txt b/zlib/CMakeLists.txt
index 0be1f976b39..7668ce723b8 100644
--- a/zlib/CMakeLists.txt
+++ b/zlib/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2006, 2014, 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
@@ -23,7 +23,6 @@ SET(ZLIB_SOURCES adler32.c compress.c crc32.c crc32.h deflate.c deflate.h gzio.
ADD_CONVENIENCE_LIBRARY(zlib ${ZLIB_SOURCES})
RESTRICT_SYMBOL_EXPORTS(zlib)
-INSTALL_DEBUG_SYMBOLS(zlib)
IF(MSVC)
INSTALL_DEBUG_TARGET(zlib DESTINATION ${INSTALL_LIBDIR}/debug)
ENDIF()