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
This commit is contained in:
commit
1c6ad62a26
@ -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()
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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 */
|
||||
|
@ -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()
|
||||
|
@ -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 "")
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
|
@ -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);
|
||||
|
@ -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()
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
0
mysql-test/collections/default.weekly
Executable file → Normal file
0
mysql-test/collections/default.weekly
Executable file → Normal file
@ -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;
|
||||
}
|
||||
|
32
mysql-test/include/stop_dump_threads.inc
Normal file
32
mysql-test/include/stop_dump_threads.inc
Normal file
@ -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
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
#
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
#
|
||||
|
@ -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
|
||||
|
@ -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 );
|
||||
|
0
mysql-test/std_data/checkDBI_DBD-mysql.pl
Normal file → Executable file
0
mysql-test/std_data/checkDBI_DBD-mysql.pl
Normal file → Executable file
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
15
mysql-test/suite/innodb/r/blob_unique2pk.result
Normal file
15
mysql-test/suite/innodb/r/blob_unique2pk.result
Normal file
@ -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;
|
35
mysql-test/suite/innodb/r/innodb-fk.result
Normal file
35
mysql-test/suite/innodb/r/innodb-fk.result
Normal file
@ -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;
|
20
mysql-test/suite/innodb/t/blob_unique2pk.test
Normal file
20
mysql-test/suite/innodb/t/blob_unique2pk.test
Normal file
@ -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;
|
||||
|
||||
|
86
mysql-test/suite/innodb/t/innodb-fk.test
Normal file
86
mysql-test/suite/innodb/t/innodb-fk.test
Normal file
@ -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;
|
||||
|
@ -1 +1 @@
|
||||
--lower-case-table-names=2
|
||||
--lower-case-table-names=2
|
||||
|
@ -1,3 +1,4 @@
|
||||
rpl_semi_sync_uninstall_plugin: waiting for the fix
|
||||
##############################################################################
|
||||
#
|
||||
# List the test cases that are to be disabled temporarily.
|
||||
|
@ -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;
|
||||
|
36
mysql-test/suite/rpl/r/rpl_semi_sync_uninstall_plugin.result
Normal file
36
mysql-test/suite/rpl/r/rpl_semi_sync_uninstall_plugin.result
Normal file
@ -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
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
145
mysql-test/suite/rpl/t/rpl_semi_sync_uninstall_plugin.test
Normal file
145
mysql-test/suite/rpl/t/rpl_semi_sync_uninstall_plugin.test
Normal file
@ -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;
|
@ -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;
|
||||
|
||||
# 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
|
||||
--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;
|
||||
--disable_query_log
|
||||
eval SET GLOBAL debug_dbug= '$debug_save';
|
||||
--enable_query_log
|
||||
--source include/rpl_end.inc
|
||||
SET DEBUG_SYNC= 'RESET';
|
||||
|
@ -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
|
||||
|
@ -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 #
|
||||
|
@ -1403,6 +1403,31 @@ explain SELECT f1, COUNT(DISTINCT f2) FROM t1 GROUP BY f1;
|
||||
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 #
|
||||
|
@ -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;
|
||||
|
0
mysql-test/t/long_tmpdir-master.sh
Normal file → Executable file
0
mysql-test/t/long_tmpdir-master.sh
Normal file → Executable file
0
mysql-test/t/lowercase_mixed_tmpdir-master.sh
Normal file → Executable file
0
mysql-test/t/lowercase_mixed_tmpdir-master.sh
Normal file → Executable file
@ -1 +1 @@
|
||||
--lower-case-table-names=2
|
||||
--lower-case-table-names=2
|
||||
|
@ -1414,6 +1414,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 #
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
|
@ -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 *);
|
||||
|
@ -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'
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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()
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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/
|
@ -1,3 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
/usr/lib/rpm/perl.req $* | grep -v -e "perl(th" -e "perl(lib::mtr" -e "perl(mtr"
|
@ -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
|
@ -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
|
@ -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
|
@ -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 */
|
@ -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)
|
||||
|
@ -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()
|
||||
#
|
||||
|
@ -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 )
|
||||
{
|
||||
|
@ -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
|
||||
|
@ -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 ; \
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
@ -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-----
|
||||
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-psQ6R4FsxZt6SAK7EsdPo8OYTrY1i4iPZd/eKhnEu2srEZgsKRwY5H1mvDH5fWCc
|
||||
-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
-+LFdt4N0cdII4gBgJAfLuuA2yrDXRq4P6cgpVMy0R+0dEYE8zzm8zf1a+Ud273LS
|
||||
-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
-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
-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
-JTt8Mx2ihgVcdGy9//shCSmgJwR1oWrhgC10AEL2fKeRnYUal1i+IxFPp7nb8uwx
|
||||
-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
-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
-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
-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
-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
-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
-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
-+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
-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
-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
-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
-+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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
|
||||
-/w8pMRr8gEuRqpL2WdJiKGG6lhMHLVFo
|
||||
+MIIDIjCCAgqgAwIBAgIBBTANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJTRTEQ
|
||||
+MA4GA1UECBMHVXBwc2FsYTEQMA4GA1UEBxMHVXBwc2FsYTERMA8GA1UEChMITXlT
|
||||
+UUwgQUIwHhcNMTAwMjIwMDMwMDU0WhcNMzAwOTAzMDMwMDU0WjBDMQswCQYDVQQG
|
||||
+EwJTRTEQMA4GA1UECBMHVXBwc2FsYTERMA8GA1UEChMITXlTUUwgQUIxDzANBgNV
|
||||
+BAMTBnNlcnZlcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAxdpElQZ3FiGv
|
||||
+oMQ86fgdLZX5Y5CMP4a6d3ZKUktrryn1HKrUPz5Cn21GuoaQsS3M28YzFaP0r1Mz
|
||||
+T6FW0ao7JhD3ZLX5vxuxR47MptYNqkp346NjnSrcZfR/kRc4LdbNTo1TUpduh/xk
|
||||
+YKahAKyWbORClHUXRm+Rtd0GR+0F49sCAwEAAaOBozCBoDAJBgNVHRMEAjAAMB0G
|
||||
+A1UdDgQWBBRuYD8pE2CZ7Qz3FbXbexz7b2AZ7TB0BgNVHSMEbTBrgBSx+353tUCN
|
||||
+aBF+2RHlw8baTaxRsKFIpEYwRDELMAkGA1UEBhMCU0UxEDAOBgNVBAgTB1VwcHNh
|
||||
+bGExEDAOBgNVBAcTB1VwcHNhbGExETAPBgNVBAoTCE15U1FMIEFCggkAvlitTB89
|
||||
+JZUwDQYJKoZIhvcNAQEFBQADggEBAGMuDwcUBs90kD03QvJIcGAhvDRSMfGHcNKy
|
||||
++/8TONzwXkPX7qfHH6yq0oxP+jxMc/a2wgyg6qLJ4nNhwy54QA8q02NQm7j5iUDt
|
||||
+mAiXwwckFzS1eIkKu4NM4lwuE9YhMK0wSLVwEv9Kb0Lw+J+xS72JK/Cd4kkrNWkY
|
||||
+H3ZAtHa9y90nL8DB4jM+bt9oVBmSirsTnM/WF1bavw1kcDpFt6pf4/WWrjTyFzcn
|
||||
+0EvoMErAAkLi0jDr68fX7NjfXENY4m+3WFQNxAFxLVmPRMehbAtBKPq3Y6do00/D
|
||||
+DxeesjJQ5guHPeI5R8DYCjv2r1BoD53vbjQNOgeU+KTXJIYy07Q=
|
||||
-----END CERTIFICATE-----
|
||||
diff -Naur mysql-5.1.50.orig/mysql-test/std_data/server8k-key.pem mysql-5.1.50/mysql-test/std_data/server8k-key.pem
|
||||
--- mysql-5.1.50.orig/mysql-test/std_data/server8k-key.pem 2010-08-03 13:55:08.000000000 -0400
|
||||
+++ mysql-5.1.50/mysql-test/std_data/server8k-key.pem 2010-08-27 23:43:10.165365998 -0400
|
||||
@@ -1,99 +1,15 @@
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
-MIISKQIBAAKCBAEA6h3v1OWb9I9U/Z8diBu/xYGS8NCTD3ZESboHxVI2qSECPgxN
|
||||
-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
-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
-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
-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
-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
-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
-1qgxCdstWXHiWwRyI8vOLWENPXPFqA/rJwwqNdWTogy38aqVXxGYR8PIwjA2OaIw
|
||||
-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
-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
-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
-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
-+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
-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
-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
-Mx2ihgVcdGy9//shCSmgJwR1oWrhgC10AEL2fKeRnYUal1i+IxFPp7nb8uwxUADg
|
||||
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-2Q8nH1SVTuyGFREMp/zsiAEaGfdd0hI2r1J7OdNPBBCtmhITsy9ZYHqm5vrGvy3s
|
||||
-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
-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
-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
-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
-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
-zh+o6SrVWT6Yve7KGiYv06fuRz1m/lLQO/Arbd9ntSjgn+ZEXGOkbhnHUX3DJ4ny
|
||||
-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
-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
-+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
-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
-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
-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
-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
-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
-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
-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
-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
-Gc9tzqKI4wP2X9g+u3+Oof1QaBcZ4UbZEU9ITN87Pa6XVJmpNx7A81BafWoEPFeE
|
||||
-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
-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
-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
-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
-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
-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
-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
-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
-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
-+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
-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
-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
-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
-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
-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
-G9CgXAE3snFWX67tWphupKrbjdMSWcQTmPD2OTg6q6zWL4twsIi6dcMooHAHsFC7
|
||||
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
|
||||
-----END RSA PRIVATE KEY-----
|
@ -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
|
@ -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[];
|
@ -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 $?
|
File diff suppressed because it is too large
Load Diff
@ -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;
|
||||
}
|
@ -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()
|
||||
|
@ -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})
|
||||
|
@ -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
|
||||
|
0
scripts/mysqlaccess.conf
Executable file → Normal file
0
scripts/mysqlaccess.conf
Executable file → Normal file
0
sql-bench/graph-compare-results.sh
Normal file → Executable file
0
sql-bench/graph-compare-results.sh
Normal file → Executable file
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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");
|
||||
|
208
sql/opt_range.cc
208
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))
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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) */
|
||||
|
@ -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
|
||||
|
||||
|
@ -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())
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user