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)
|
CMAKE_POLICY(SET CMP0022 OLD)
|
||||||
ENDIF()
|
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}")
|
MESSAGE(STATUS "Running cmake version ${CMAKE_VERSION}")
|
||||||
|
|
||||||
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
|
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)
|
IF(EXISTS ${CMAKE_SOURCE_DIR}/internal/CMakeLists.txt)
|
||||||
ADD_SUBDIRECTORY(internal)
|
ADD_SUBDIRECTORY(internal)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ADD_SUBDIRECTORY(packaging/rpm-uln)
|
|
||||||
ADD_SUBDIRECTORY(packaging/rpm-oel)
|
ADD_SUBDIRECTORY(packaging/rpm-oel)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2000, 2012, Oracle and/or its affiliates.
|
Copyright (c) 2000, 2014, Oracle and/or its affiliates.
|
||||||
Copyright (c) 2010, 2012, Monty Program Ab.
|
Copyright (c) 2010, 2014, Monty Program Ab.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -70,6 +70,7 @@ extern "C" my_bool get_one_option(int optid, const struct my_option *opt,
|
|||||||
char *argument);
|
char *argument);
|
||||||
static my_bool sql_connect(MYSQL *mysql, uint wait);
|
static my_bool sql_connect(MYSQL *mysql, uint wait);
|
||||||
static int execute_commands(MYSQL *mysql,int argc, char **argv);
|
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);
|
static int drop_db(MYSQL *mysql,const char *db);
|
||||||
extern "C" sig_handler endprog(int signal_number);
|
extern "C" sig_handler endprog(int signal_number);
|
||||||
static void nice_time(ulong sec,char *buff);
|
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 main(int argc,char *argv[])
|
||||||
{
|
{
|
||||||
int error= 0;
|
int error= 0, temp_argc;
|
||||||
MYSQL mysql;
|
MYSQL mysql;
|
||||||
char **commands, **save_argv;
|
char **commands, **save_argv, **temp_argv;
|
||||||
|
|
||||||
MY_INIT(argv[0]);
|
MY_INIT(argv[0]);
|
||||||
mysql_init(&mysql);
|
mysql_init(&mysql);
|
||||||
@ -313,8 +314,12 @@ int main(int argc,char *argv[])
|
|||||||
if ((error= load_defaults("my",load_default_groups,&argc,&argv)))
|
if ((error= load_defaults("my",load_default_groups,&argc,&argv)))
|
||||||
goto err1;
|
goto err1;
|
||||||
save_argv = argv; /* Save for free_defaults */
|
save_argv = argv; /* Save for free_defaults */
|
||||||
|
|
||||||
if ((error=handle_options(&argc, &argv, my_long_options, get_one_option)))
|
if ((error=handle_options(&argc, &argv, my_long_options, get_one_option)))
|
||||||
goto err2;
|
goto err2;
|
||||||
|
temp_argv= mask_password(argc, &argv);
|
||||||
|
temp_argc= argc;
|
||||||
|
|
||||||
if (debug_info_flag)
|
if (debug_info_flag)
|
||||||
my_end_arg= MY_CHECK_ERROR | MY_GIVE_INFO;
|
my_end_arg= MY_CHECK_ERROR | MY_GIVE_INFO;
|
||||||
if (debug_check_flag)
|
if (debug_check_flag)
|
||||||
@ -325,7 +330,7 @@ int main(int argc,char *argv[])
|
|||||||
usage();
|
usage();
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
commands = argv;
|
commands = temp_argv;
|
||||||
if (tty_password)
|
if (tty_password)
|
||||||
opt_password = get_tty_password(NullS);
|
opt_password = get_tty_password(NullS);
|
||||||
|
|
||||||
@ -465,6 +470,13 @@ int main(int argc,char *argv[])
|
|||||||
} /* got connection */
|
} /* got connection */
|
||||||
|
|
||||||
mysql_close(&mysql);
|
mysql_close(&mysql);
|
||||||
|
temp_argc--;
|
||||||
|
while(temp_argc >= 0)
|
||||||
|
{
|
||||||
|
my_free(temp_argv[temp_argc]);
|
||||||
|
temp_argc--;
|
||||||
|
}
|
||||||
|
my_free(temp_argv);
|
||||||
err2:
|
err2:
|
||||||
mysql_library_end();
|
mysql_library_end();
|
||||||
my_free(opt_password);
|
my_free(opt_password);
|
||||||
@ -1165,6 +1177,47 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
|||||||
return 0;
|
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)
|
static void print_version(void)
|
||||||
{
|
{
|
||||||
|
@ -5645,19 +5645,36 @@ int main(int argc, char **argv)
|
|||||||
dump_all_tablespaces();
|
dump_all_tablespaces();
|
||||||
dump_all_databases();
|
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
|
else
|
||||||
{
|
{
|
||||||
/* One or more databases, all tables */
|
// Check all arguments meet length condition. Currently database and table
|
||||||
if (!opt_alltspcs && !opt_notspcs)
|
// names are limited to NAME_LEN bytes and stack-based buffers assumes
|
||||||
dump_tablespaces_for_databases(argv);
|
// that escaped name will be not longer than NAME_LEN*2 + 2 bytes long.
|
||||||
dump_databases(argv);
|
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 */
|
/* 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
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
@ -80,13 +80,6 @@ IF(ENABLE_DTRACE)
|
|||||||
${CMAKE_BINARY_DIR}/include/probes_mysql_dtrace.h
|
${CMAKE_BINARY_DIR}/include/probes_mysql_dtrace.h
|
||||||
${CMAKE_BINARY_DIR}/include/probes_mysql_nodtrace.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
|
ADD_CUSTOM_TARGET(gen_dtrace_header
|
||||||
DEPENDS
|
DEPENDS
|
||||||
${CMAKE_BINARY_DIR}/include/probes_mysql.d
|
${CMAKE_BINARY_DIR}/include/probes_mysql.d
|
||||||
@ -105,12 +98,7 @@ FUNCTION(DTRACE_INSTRUMENT target)
|
|||||||
IF(ENABLE_DTRACE)
|
IF(ENABLE_DTRACE)
|
||||||
ADD_DEPENDENCIES(${target} gen_dtrace_header)
|
ADD_DEPENDENCIES(${target} gen_dtrace_header)
|
||||||
|
|
||||||
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
# Invoke dtrace to generate object file and link it together with target.
|
||||||
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.
|
|
||||||
IF(CMAKE_SYSTEM_NAME MATCHES "SunOS")
|
IF(CMAKE_SYSTEM_NAME MATCHES "SunOS")
|
||||||
SET(objdir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${target}.dir)
|
SET(objdir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${target}.dir)
|
||||||
SET(outfile ${objdir}/${target}_dtrace.o)
|
SET(outfile ${objdir}/${target}_dtrace.o)
|
||||||
@ -127,6 +115,21 @@ FUNCTION(DTRACE_INSTRUMENT target)
|
|||||||
-P ${CMAKE_SOURCE_DIR}/cmake/dtrace_prelink.cmake
|
-P ${CMAKE_SOURCE_DIR}/cmake/dtrace_prelink.cmake
|
||||||
WORKING_DIRECTORY ${objdir}
|
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
|
# Add full object path to linker flags
|
||||||
GET_TARGET_PROPERTY(target_type ${target} TYPE)
|
GET_TARGET_PROPERTY(target_type ${target} TYPE)
|
||||||
IF(NOT target_type MATCHES "STATIC")
|
IF(NOT target_type MATCHES "STATIC")
|
||||||
@ -138,12 +141,12 @@ FUNCTION(DTRACE_INSTRUMENT target)
|
|||||||
# but maybe one day this will be fixed.
|
# but maybe one day this will be fixed.
|
||||||
GET_TARGET_PROPERTY(target_location ${target} LOCATION)
|
GET_TARGET_PROPERTY(target_location ${target} LOCATION)
|
||||||
ADD_CUSTOM_COMMAND(
|
ADD_CUSTOM_COMMAND(
|
||||||
TARGET ${target} POST_BUILD
|
TARGET ${target} POST_BUILD
|
||||||
COMMAND ${CMAKE_AR} r ${target_location} ${outfile}
|
COMMAND ${CMAKE_AR} r ${target_location} ${outfile}
|
||||||
COMMAND ${CMAKE_RANLIB} ${target_location}
|
COMMAND ${CMAKE_RANLIB} ${target_location}
|
||||||
)
|
)
|
||||||
# Used in DTRACE_INSTRUMENT_WITH_STATIC_LIBS
|
# Used in DTRACE_INSTRUMENT_WITH_STATIC_LIBS
|
||||||
SET(TARGET_OBJECT_DIRECTORY_${target} ${objdir} CACHE INTERNAL "")
|
SET(TARGET_OBJECT_DIRECTORY_${target} ${objdir} CACHE INTERNAL "")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
@ -38,7 +38,9 @@ FUNCTION (INSTALL_DEBUG_SYMBOLS)
|
|||||||
STRING(REPLACE ".dll" ".pdb" pdb_location ${pdb_location})
|
STRING(REPLACE ".dll" ".pdb" pdb_location ${pdb_location})
|
||||||
STRING(REPLACE ".lib" ".pdb" pdb_location ${pdb_location})
|
STRING(REPLACE ".lib" ".pdb" pdb_location ${pdb_location})
|
||||||
IF(CMAKE_GENERATOR MATCHES "Visual Studio")
|
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()
|
ENDIF()
|
||||||
|
|
||||||
set(comp "")
|
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
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
@ -62,22 +62,30 @@ IF(MINGW AND CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF(MSVC)
|
IF(MSVC)
|
||||||
# Enable debug info also in Release build, and create PDB to be able to analyze
|
# Enable debug info also in Release build,
|
||||||
# crashes
|
# and create PDB to be able to analyze crashes.
|
||||||
FOREACH(lang C CXX)
|
|
||||||
SET(CMAKE_${lang}_FLAGS_RELEASE "${CMAKE_${lang}_FLAGS_RELEASE} /Zi")
|
|
||||||
ENDFOREACH()
|
|
||||||
FOREACH(type EXE SHARED MODULE)
|
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()
|
ENDFOREACH()
|
||||||
|
|
||||||
# Force static runtime libraries
|
# 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
|
FOREACH(flag
|
||||||
CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO
|
CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO
|
||||||
CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_DEBUG_INIT
|
CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_DEBUG_INIT
|
||||||
CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELWITHDEBINFO
|
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 "/MD" "/MT" "${flag}" "${${flag}}")
|
||||||
|
STRING(REPLACE "/Zi" "/Z7" "${flag}" "${${flag}}")
|
||||||
ENDFOREACH()
|
ENDFOREACH()
|
||||||
|
|
||||||
# Remove support for exceptions
|
# Remove support for exceptions
|
||||||
@ -109,7 +117,6 @@ IF(MSVC)
|
|||||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4800 /wd4805 /wd4996")
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4800 /wd4805 /wd4996")
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4800 /wd4805 /wd4996 /we4099")
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4800 /wd4805 /wd4996 /we4099")
|
||||||
|
|
||||||
|
|
||||||
IF(CMAKE_SIZEOF_VOID_P MATCHES 8)
|
IF(CMAKE_SIZEOF_VOID_P MATCHES 8)
|
||||||
# _WIN64 is defined by the compiler itself.
|
# _WIN64 is defined by the compiler itself.
|
||||||
# Yet, we define it here again to work around a bug with Intellisense
|
# 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
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
@ -37,7 +37,6 @@ ENDIF()
|
|||||||
ADD_CONVENIENCE_LIBRARY(yassl ${YASSL_SOURCES})
|
ADD_CONVENIENCE_LIBRARY(yassl ${YASSL_SOURCES})
|
||||||
RESTRICT_SYMBOL_EXPORTS(yassl)
|
RESTRICT_SYMBOL_EXPORTS(yassl)
|
||||||
|
|
||||||
INSTALL_DEBUG_SYMBOLS(yassl)
|
|
||||||
IF(MSVC)
|
IF(MSVC)
|
||||||
INSTALL_DEBUG_TARGET(yassl DESTINATION ${INSTALL_LIBDIR}/debug)
|
INSTALL_DEBUG_TARGET(yassl DESTINATION ${INSTALL_LIBDIR}/debug)
|
||||||
ENDIF()
|
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
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -790,7 +790,10 @@ int SSL_CTX_load_verify_locations(SSL_CTX* ctx, const char* file,
|
|||||||
strncpy(name, path, MAX_PATH - 1 - HALF_PATH);
|
strncpy(name, path, MAX_PATH - 1 - HALF_PATH);
|
||||||
strncat(name, "/", 1);
|
strncat(name, "/", 1);
|
||||||
strncat(name, entry->d_name, HALF_PATH);
|
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))
|
if (S_ISREG(buf.st_mode))
|
||||||
ret = read_file(ctx, name, SSL_FILETYPE_PEM, CA);
|
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
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
@ -36,7 +36,6 @@ ENDIF()
|
|||||||
ADD_CONVENIENCE_LIBRARY(taocrypt ${TAOCRYPT_SOURCES})
|
ADD_CONVENIENCE_LIBRARY(taocrypt ${TAOCRYPT_SOURCES})
|
||||||
RESTRICT_SYMBOL_EXPORTS(taocrypt)
|
RESTRICT_SYMBOL_EXPORTS(taocrypt)
|
||||||
|
|
||||||
INSTALL_DEBUG_SYMBOLS(taocrypt)
|
|
||||||
IF(MSVC)
|
IF(MSVC)
|
||||||
INSTALL_DEBUG_TARGET(taocrypt DESTINATION ${INSTALL_LIBDIR}/debug)
|
INSTALL_DEBUG_TARGET(taocrypt DESTINATION ${INSTALL_LIBDIR}/debug)
|
||||||
ENDIF()
|
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
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -294,9 +294,9 @@ private:
|
|||||||
byte* signature_;
|
byte* signature_;
|
||||||
char issuer_[ASN_NAME_MAX]; // Names
|
char issuer_[ASN_NAME_MAX]; // Names
|
||||||
char subject_[ASN_NAME_MAX]; // Names
|
char subject_[ASN_NAME_MAX]; // Names
|
||||||
char beforeDate_[MAX_DATE_SZ]; // valid before date
|
char beforeDate_[MAX_DATE_SZ+1]; // valid before date, +null term
|
||||||
char afterDate_[MAX_DATE_SZ]; // valid after date
|
char afterDate_[MAX_DATE_SZ+1]; // valid after date, +null term
|
||||||
bool verify_; // Default to yes, but could be off
|
bool verify_; // Default to yes, but could be off
|
||||||
|
|
||||||
void ReadHeader();
|
void ReadHeader();
|
||||||
void Decode(SignerList*, CertType);
|
void Decode(SignerList*, CertType);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#error don't use
|
#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
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -50,6 +50,8 @@ void thd_clear_errors(THD *thd);
|
|||||||
void thd_set_thread_stack(THD *thd, char *stack_start);
|
void thd_set_thread_stack(THD *thd, char *stack_start);
|
||||||
void thd_lock_thread_count(THD *thd);
|
void thd_lock_thread_count(THD *thd);
|
||||||
void thd_unlock_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);
|
void thd_close_connection(THD *thd);
|
||||||
THD *thd_get_current_thd();
|
THD *thd_get_current_thd();
|
||||||
void thd_lock_data(THD *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)
|
MERGE_LIBRARIES(mysqlclient STATIC ${LIBS} COMPONENT Development)
|
||||||
|
|
||||||
# Visual Studio users need debug static library for debug projects
|
# Visual Studio users need debug static library for debug projects
|
||||||
INSTALL_DEBUG_SYMBOLS(clientlib)
|
|
||||||
IF(MSVC)
|
IF(MSVC)
|
||||||
INSTALL_DEBUG_TARGET(mysqlclient DESTINATION ${INSTALL_LIBDIR}/debug)
|
INSTALL_DEBUG_TARGET(mysqlclient DESTINATION ${INSTALL_LIBDIR}/debug)
|
||||||
INSTALL_DEBUG_TARGET(clientlib 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)
|
if ($value == No such row)
|
||||||
{
|
{
|
||||||
SET sql_log_bin = 0;
|
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 GLOBAL rpl_semi_sync_master_enabled = 1;
|
||||||
SET sql_log_bin = 1;
|
SET sql_log_bin = 1;
|
||||||
}
|
}
|
||||||
@ -28,7 +28,7 @@ if ($value == No such row)
|
|||||||
if ($value == No such row)
|
if ($value == No such row)
|
||||||
{
|
{
|
||||||
SET sql_log_bin = 0;
|
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 GLOBAL rpl_semi_sync_slave_enabled = 1;
|
||||||
SET sql_log_bin = 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;
|
UNINSTALL PLUGIN rpl_semi_sync_slave;
|
||||||
|
|
||||||
--connection master
|
--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;
|
UNINSTALL PLUGIN rpl_semi_sync_master;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
|
|
||||||
|
@ -2950,6 +2950,9 @@ replace(var, '00000000', table_name)
|
|||||||
(( t2 ++ t2 ))
|
(( t2 ++ t2 ))
|
||||||
drop procedure foo;
|
drop procedure foo;
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
select md5(_filename "a"), sha(_filename "a");
|
||||||
|
md5(_filename "a") sha(_filename "a")
|
||||||
|
0cc175b9c0f1b6a831c399e269772661 86f7e437faa5a7fce15d1ddcb9eaeaea377667b8
|
||||||
#
|
#
|
||||||
# End of 5.5 tests
|
# End of 5.5 tests
|
||||||
#
|
#
|
||||||
|
@ -3506,7 +3506,7 @@ COUNT(DISTINCT a, b) SUM(DISTINCT a)
|
|||||||
0 NULL
|
0 NULL
|
||||||
EXPLAIN SELECT SUM(DISTINCT a), MAX(b) FROM t2 GROUP BY a;
|
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
|
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;
|
SELECT SUM(DISTINCT a), MAX(b) FROM t2 GROUP BY a;
|
||||||
SUM(DISTINCT a) MAX(b)
|
SUM(DISTINCT a) MAX(b)
|
||||||
1 8
|
1 8
|
||||||
@ -3534,7 +3534,7 @@ SELECT 42 * (a + c + COUNT(DISTINCT c, a, b)) FROM t2 GROUP BY a, b, c;
|
|||||||
168
|
168
|
||||||
EXPLAIN SELECT (SUM(DISTINCT a) + MAX(b)) FROM t2 GROUP BY a;
|
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
|
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;
|
SELECT (SUM(DISTINCT a) + MAX(b)) FROM t2 GROUP BY a;
|
||||||
(SUM(DISTINCT a) + MAX(b))
|
(SUM(DISTINCT a) + MAX(b))
|
||||||
9
|
9
|
||||||
@ -3563,6 +3563,58 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
# End of test#50539.
|
# 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)
|
# MDEV-4219 A simple select query returns random data (upstream bug#68473)
|
||||||
#
|
#
|
||||||
drop table if exists faulty;
|
drop table if exists faulty;
|
||||||
|
@ -118,3 +118,171 @@ COUNT(DISTINCT a)
|
|||||||
1
|
1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
End of 5.5 tests
|
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
|
How many threads we should keep in a cache for reuse
|
||||||
--thread-stack=# The stack size for each thread
|
--thread-stack=# The stack size for each thread
|
||||||
--time-format=name The TIME format (ignored)
|
--time-format=name The TIME format (ignored)
|
||||||
--timed-mutexes Specify whether to time mutexes (only InnoDB mutexes are
|
--timed-mutexes Specify whether to time mutexes. Deprecated, has no
|
||||||
currently supported)
|
effect.
|
||||||
--tmp-table-size=# If an internal in-memory temporary table exceeds this
|
--tmp-table-size=# If an internal in-memory temporary table exceeds this
|
||||||
size, MySQL will automatically convert it to an on-disk
|
size, MySQL will automatically convert it to an on-disk
|
||||||
MyISAM or Aria table
|
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
|
1 SIMPLE t1 p0,p1,p2 ALL NULL NULL NULL NULL 100 Using where
|
||||||
drop table t0, t1;
|
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
|
# MDEV-6239: Partition pruning is not working as expected in an inner query
|
||||||
#
|
#
|
||||||
create table t1
|
create table t1
|
||||||
|
@ -1876,6 +1876,40 @@ SELECT(SELECT 1 AS a FROM dual ORDER BY a DESC LIMIT 1) AS dev;
|
|||||||
dev
|
dev
|
||||||
1
|
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
|
# lp:1010729: Unexpected syntax error from UNION
|
||||||
# (bug #54382) with single-table join nest
|
# (bug #54382) with single-table join nest
|
||||||
#
|
#
|
||||||
|
@ -189,6 +189,8 @@ select @@concurrent_insert;
|
|||||||
@@concurrent_insert
|
@@concurrent_insert
|
||||||
AUTO
|
AUTO
|
||||||
set global timed_mutexes=ON;
|
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';
|
show variables like 'timed_mutexes';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
timed_mutexes ON
|
timed_mutexes ON
|
||||||
@ -196,6 +198,8 @@ select * from information_schema.session_variables where variable_name like 'tim
|
|||||||
VARIABLE_NAME VARIABLE_VALUE
|
VARIABLE_NAME VARIABLE_VALUE
|
||||||
TIMED_MUTEXES ON
|
TIMED_MUTEXES ON
|
||||||
set global timed_mutexes=0;
|
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';
|
show variables like 'timed_mutexes';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
timed_mutexes OFF
|
timed_mutexes OFF
|
||||||
|
@ -4791,6 +4791,45 @@ DROP DATABASE IF EXISTS nodb;
|
|||||||
CREATE VIEW nodb.a AS SELECT 1;
|
CREATE VIEW nodb.a AS SELECT 1;
|
||||||
ERROR 42000: Unknown database 'nodb'
|
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)
|
# lp:833600 Wrong result with view + outer join + uncorrelated subquery (non-semijoin)
|
||||||
#
|
#
|
||||||
CREATE TABLE t1 ( a int, b int );
|
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(*)
|
count(*)
|
||||||
100
|
100
|
||||||
drop table t1;
|
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;
|
select count(*) from t1;
|
||||||
drop table 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
|
# common cleanup
|
||||||
#
|
#
|
||||||
|
|
||||||
|
connection default;
|
||||||
|
disconnect con1;
|
||||||
|
disconnect con2;
|
||||||
|
|
||||||
drop table t1,t2,t3;
|
drop table t1,t2,t3;
|
||||||
|
|
||||||
--echo end of the tests
|
--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,3 +1,4 @@
|
|||||||
|
rpl_semi_sync_uninstall_plugin: waiting for the fix
|
||||||
##############################################################################
|
##############################################################################
|
||||||
#
|
#
|
||||||
# List the test cases that are to be disabled temporarily.
|
# List the test cases that are to be disabled temporarily.
|
||||||
|
@ -386,6 +386,7 @@ Rpl_semi_sync_slave_status ON
|
|||||||
include/stop_slave.inc
|
include/stop_slave.inc
|
||||||
[ on master ]
|
[ on master ]
|
||||||
set sql_log_bin=0;
|
set sql_log_bin=0;
|
||||||
|
include/stop_dump_threads.inc
|
||||||
UNINSTALL PLUGIN rpl_semi_sync_master;
|
UNINSTALL PLUGIN rpl_semi_sync_master;
|
||||||
set sql_log_bin=1;
|
set sql_log_bin=1;
|
||||||
SHOW VARIABLES LIKE 'rpl_semi_sync_master_enabled';
|
SHOW VARIABLES LIKE 'rpl_semi_sync_master_enabled';
|
||||||
@ -439,9 +440,8 @@ Rpl_semi_sync_slave_status OFF
|
|||||||
#
|
#
|
||||||
# Clean up
|
# Clean up
|
||||||
#
|
#
|
||||||
|
include/uninstall_semisync.inc
|
||||||
include/stop_slave.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='';
|
change master to master_user='root',master_password='';
|
||||||
include/start_slave.inc
|
include/start_slave.inc
|
||||||
drop table t1;
|
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 t1 (c1 INT KEY, c2 INT) ENGINE=InnoDB;
|
||||||
CREATE TABLE t2 (c1 INT) ENGINE=MyISAM;
|
CREATE TABLE t2 (c1 INT) ENGINE=MyISAM;
|
||||||
INSERT INTO t1 VALUES(1, 1);
|
INSERT INTO t1 VALUES(1, 1);
|
||||||
|
include/stop_slave.inc
|
||||||
[connection master]
|
[connection master]
|
||||||
|
include/stop_dump_threads.inc
|
||||||
SET GLOBAL debug_dbug= '+d,dump_thread_wait_before_send_xid,*';
|
SET GLOBAL debug_dbug= '+d,dump_thread_wait_before_send_xid,*';
|
||||||
[connection slave]
|
[connection slave]
|
||||||
include/restart_slave.inc
|
include/start_slave.inc
|
||||||
BEGIN;
|
BEGIN;
|
||||||
UPDATE t1 SET c2 = 2 WHERE c1 = 1;
|
UPDATE t1 SET c2 = 2 WHERE c1 = 1;
|
||||||
[connection master]
|
[connection master]
|
||||||
@ -116,6 +118,9 @@ SET DEBUG_SYNC= 'now WAIT_FOR signal.continued';
|
|||||||
[connection slave]
|
[connection slave]
|
||||||
include/wait_for_slave_to_stop.inc
|
include/wait_for_slave_to_stop.inc
|
||||||
[connection slave1]
|
[connection slave1]
|
||||||
|
[connection master]
|
||||||
|
include/stop_dump_threads.inc
|
||||||
|
[connection slave1]
|
||||||
include/start_slave.inc
|
include/start_slave.inc
|
||||||
[connection master]
|
[connection master]
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
@ -548,6 +548,7 @@ source include/stop_slave.inc;
|
|||||||
connection master;
|
connection master;
|
||||||
echo [ on master ];
|
echo [ on master ];
|
||||||
set sql_log_bin=0;
|
set sql_log_bin=0;
|
||||||
|
--source include/stop_dump_threads.inc
|
||||||
UNINSTALL PLUGIN rpl_semi_sync_master;
|
UNINSTALL PLUGIN rpl_semi_sync_master;
|
||||||
set sql_log_bin=1;
|
set sql_log_bin=1;
|
||||||
enable_query_log;
|
enable_query_log;
|
||||||
@ -601,19 +602,10 @@ SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
|
|||||||
--echo #
|
--echo #
|
||||||
--echo # Clean up
|
--echo # Clean up
|
||||||
--echo #
|
--echo #
|
||||||
|
--source include/uninstall_semisync.inc
|
||||||
|
|
||||||
connection slave;
|
connection slave;
|
||||||
source include/stop_slave.inc;
|
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='';
|
change master to master_user='root',master_password='';
|
||||||
source include/start_slave.inc;
|
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);
|
INSERT INTO t1 VALUES(1, 1);
|
||||||
|
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
|
--source include/stop_slave.inc
|
||||||
|
|
||||||
--source include/rpl_connection_master.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`;
|
let $debug_save= `SELECT @@GLOBAL.debug`;
|
||||||
SET GLOBAL debug_dbug= '+d,dump_thread_wait_before_send_xid,*';
|
SET GLOBAL debug_dbug= '+d,dump_thread_wait_before_send_xid,*';
|
||||||
|
|
||||||
--source include/rpl_connection_slave.inc
|
--source include/rpl_connection_slave.inc
|
||||||
source include/restart_slave_sql.inc;
|
--source include/start_slave.inc
|
||||||
|
|
||||||
BEGIN;
|
BEGIN;
|
||||||
UPDATE t1 SET c2 = 2 WHERE c1 = 1;
|
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;
|
UPDATE t1 SET c2 = 3 WHERE c1 = 1;
|
||||||
COMMIT;
|
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
|
--source include/rpl_connection_slave1.inc
|
||||||
let $show_statement= SHOW PROCESSLIST;
|
let $show_statement= SHOW PROCESSLIST;
|
||||||
let $field= Info;
|
let $field= Info;
|
||||||
@ -105,6 +112,7 @@ send STOP SLAVE;
|
|||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
|
|
||||||
--source include/rpl_connection_master.inc
|
--source include/rpl_connection_master.inc
|
||||||
|
|
||||||
SET DEBUG_SYNC= 'now SIGNAL signal.continue';
|
SET DEBUG_SYNC= 'now SIGNAL signal.continue';
|
||||||
SET DEBUG_SYNC= 'now WAIT_FOR signal.continued';
|
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
|
--source include/rpl_connection_slave1.inc
|
||||||
reap;
|
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/start_slave.inc;
|
||||||
|
|
||||||
--source include/rpl_connection_master.inc
|
--source include/rpl_connection_master.inc
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
--disable_query_log
|
|
||||||
eval SET GLOBAL debug_dbug= '$debug_save';
|
|
||||||
--enable_query_log
|
|
||||||
--source include/rpl_end.inc
|
--source include/rpl_end.inc
|
||||||
SET DEBUG_SYNC= 'RESET';
|
SET DEBUG_SYNC= 'RESET';
|
||||||
|
@ -4,7 +4,11 @@ SELECT @global_start_value;
|
|||||||
0
|
0
|
||||||
'#--------------------FN_DYNVARS_177_01------------------------#'
|
'#--------------------FN_DYNVARS_177_01------------------------#'
|
||||||
SET @@global.timed_mutexes = 1;
|
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;
|
SET @@global.timed_mutexes = DEFAULT;
|
||||||
|
Warnings:
|
||||||
|
Warning 1287 '@@timed_mutexes' is deprecated and will be removed in a future release.
|
||||||
SELECT @@global.timed_mutexes;
|
SELECT @@global.timed_mutexes;
|
||||||
@@global.timed_mutexes
|
@@global.timed_mutexes
|
||||||
0
|
0
|
||||||
@ -17,15 +21,21 @@ SELECT @@timed_mutexes;
|
|||||||
SELECT global.timed_mutexes;
|
SELECT global.timed_mutexes;
|
||||||
ERROR 42S02: Unknown table 'global' in field list
|
ERROR 42S02: Unknown table 'global' in field list
|
||||||
SET global timed_mutexes = 1;
|
SET global timed_mutexes = 1;
|
||||||
|
Warnings:
|
||||||
|
Warning 1287 '@@timed_mutexes' is deprecated and will be removed in a future release.
|
||||||
SELECT @@global.timed_mutexes;
|
SELECT @@global.timed_mutexes;
|
||||||
@@global.timed_mutexes
|
@@global.timed_mutexes
|
||||||
1
|
1
|
||||||
'#--------------------FN_DYNVARS_177_03------------------------#'
|
'#--------------------FN_DYNVARS_177_03------------------------#'
|
||||||
SET @@global.timed_mutexes = 0;
|
SET @@global.timed_mutexes = 0;
|
||||||
|
Warnings:
|
||||||
|
Warning 1287 '@@timed_mutexes' is deprecated and will be removed in a future release.
|
||||||
SELECT @@global.timed_mutexes;
|
SELECT @@global.timed_mutexes;
|
||||||
@@global.timed_mutexes
|
@@global.timed_mutexes
|
||||||
0
|
0
|
||||||
SET @@global.timed_mutexes = 1;
|
SET @@global.timed_mutexes = 1;
|
||||||
|
Warnings:
|
||||||
|
Warning 1287 '@@timed_mutexes' is deprecated and will be removed in a future release.
|
||||||
SELECT @@global.timed_mutexes;
|
SELECT @@global.timed_mutexes;
|
||||||
@@global.timed_mutexes
|
@@global.timed_mutexes
|
||||||
1
|
1
|
||||||
@ -82,23 +92,33 @@ VARIABLE_VALUE
|
|||||||
ON
|
ON
|
||||||
'#---------------------FN_DYNVARS_177_08-------------------------#'
|
'#---------------------FN_DYNVARS_177_08-------------------------#'
|
||||||
SET @@global.timed_mutexes = OFF;
|
SET @@global.timed_mutexes = OFF;
|
||||||
|
Warnings:
|
||||||
|
Warning 1287 '@@timed_mutexes' is deprecated and will be removed in a future release.
|
||||||
SELECT @@global.timed_mutexes;
|
SELECT @@global.timed_mutexes;
|
||||||
@@global.timed_mutexes
|
@@global.timed_mutexes
|
||||||
0
|
0
|
||||||
SET @@global.timed_mutexes = ON;
|
SET @@global.timed_mutexes = ON;
|
||||||
|
Warnings:
|
||||||
|
Warning 1287 '@@timed_mutexes' is deprecated and will be removed in a future release.
|
||||||
SELECT @@global.timed_mutexes;
|
SELECT @@global.timed_mutexes;
|
||||||
@@global.timed_mutexes
|
@@global.timed_mutexes
|
||||||
1
|
1
|
||||||
'#---------------------FN_DYNVARS_177_09----------------------#'
|
'#---------------------FN_DYNVARS_177_09----------------------#'
|
||||||
SET @@global.timed_mutexes = TRUE;
|
SET @@global.timed_mutexes = TRUE;
|
||||||
|
Warnings:
|
||||||
|
Warning 1287 '@@timed_mutexes' is deprecated and will be removed in a future release.
|
||||||
SELECT @@global.timed_mutexes;
|
SELECT @@global.timed_mutexes;
|
||||||
@@global.timed_mutexes
|
@@global.timed_mutexes
|
||||||
1
|
1
|
||||||
SET @@global.timed_mutexes = FALSE;
|
SET @@global.timed_mutexes = FALSE;
|
||||||
|
Warnings:
|
||||||
|
Warning 1287 '@@timed_mutexes' is deprecated and will be removed in a future release.
|
||||||
SELECT @@global.timed_mutexes;
|
SELECT @@global.timed_mutexes;
|
||||||
@@global.timed_mutexes
|
@@global.timed_mutexes
|
||||||
0
|
0
|
||||||
SET @@global.timed_mutexes = @global_start_value;
|
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;
|
SELECT @@global.timed_mutexes;
|
||||||
@@global.timed_mutexes
|
@@global.timed_mutexes
|
||||||
0
|
0
|
||||||
|
@ -1583,6 +1583,11 @@ call foo('(( 00000000 ++ 00000000 ))');
|
|||||||
drop procedure foo;
|
drop procedure foo;
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#18786138 SHA/MD5 HASHING FUNCTIONS DIE WITH "FILENAME" CHARACTER SET
|
||||||
|
#
|
||||||
|
select md5(_filename "a"), sha(_filename "a");
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 5.5 tests
|
--echo # End of 5.5 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -1403,6 +1403,31 @@ explain SELECT f1, COUNT(DISTINCT f2) FROM t1 GROUP BY f1;
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
--echo # End of test#50539.
|
--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 #
|
||||||
--echo # MDEV-4219 A simple select query returns random data (upstream bug#68473)
|
--echo # MDEV-4219 A simple select query returns random data (upstream bug#68473)
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -137,3 +137,96 @@ SELECT COUNT(DISTINCT a) FROM t1 WHERE b = 'b';
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo End of 5.5 tests
|
--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
@ -1414,6 +1414,54 @@ explain partitions select * from t1 where a between 10 and 10+33;
|
|||||||
|
|
||||||
drop table t0, t1;
|
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 #
|
||||||
--echo # MDEV-6239: Partition pruning is not working as expected in an inner query
|
--echo # MDEV-6239: Partition pruning is not working as expected in an inner query
|
||||||
--echo #
|
--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 LIMIT 1) AS dev;
|
||||||
SELECT(SELECT 1 AS a FROM dual ORDER BY a DESC 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 #
|
||||||
--echo # lp:1010729: Unexpected syntax error from UNION
|
--echo # lp:1010729: Unexpected syntax error from UNION
|
||||||
--echo # (bug #54382) with single-table join nest
|
--echo # (bug #54382) with single-table join nest
|
||||||
|
@ -4700,6 +4700,47 @@ DROP DATABASE IF EXISTS nodb;
|
|||||||
--error ER_BAD_DB_ERROR
|
--error ER_BAD_DB_ERROR
|
||||||
CREATE VIEW nodb.a AS SELECT 1;
|
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
|
# 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.
|
# gone so execution of other tests won't be affected by their presence.
|
||||||
--source include/wait_until_count_sessions.inc
|
--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
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
@ -87,7 +87,6 @@ ADD_EXECUTABLE(thr_lock thr_lock.c)
|
|||||||
TARGET_LINK_LIBRARIES(thr_lock mysys)
|
TARGET_LINK_LIBRARIES(thr_lock mysys)
|
||||||
SET_TARGET_PROPERTIES(thr_lock PROPERTIES COMPILE_FLAGS "-DMAIN")
|
SET_TARGET_PROPERTIES(thr_lock PROPERTIES COMPILE_FLAGS "-DMAIN")
|
||||||
|
|
||||||
INSTALL_DEBUG_SYMBOLS(mysys)
|
|
||||||
IF(MSVC)
|
IF(MSVC)
|
||||||
INSTALL_DEBUG_TARGET(mysys DESTINATION ${INSTALL_LIBDIR}/debug)
|
INSTALL_DEBUG_TARGET(mysys DESTINATION ${INSTALL_LIBDIR}/debug)
|
||||||
ENDIF()
|
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
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -456,6 +456,13 @@ process_flags:
|
|||||||
goto err;
|
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 */
|
else if (*fmt == 'b') /* Sized buffer parameter, only precision makes sense */
|
||||||
{
|
{
|
||||||
char *par = va_arg(args, char *);
|
char *par = va_arg(args, char *);
|
||||||
|
@ -2,5 +2,5 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
/usr/lib/rpm/perl.req $* |
|
/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
|
Summary: A very fast and reliable SQL database server
|
||||||
Group: Applications/Databases
|
Group: Applications/Databases
|
||||||
Version: @VERSION@
|
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.
|
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
|
Source0: https://cdn.mysql.com/Downloads/MySQL-@MYSQL_BASE_VERSION@/%{src_dir}.tar.gz
|
||||||
URL: http://www.mysql.com/
|
URL: http://www.mysql.com/
|
||||||
@ -118,7 +118,7 @@ BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
|
|||||||
|
|
||||||
%if 0%{?rhel} > 6
|
%if 0%{?rhel} > 6
|
||||||
# For rpm => 4.9 only: https://fedoraproject.org/wiki/Packaging:AutoProvidesAndRequiresFiltering
|
# 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)$
|
%global __provides_exclude_from ^(/usr/share/(mysql|mysql-test)/.*|%{_libdir}/mysql/plugin/.*\\.so)$
|
||||||
%else
|
%else
|
||||||
# https://fedoraproject.org/wiki/EPEL:Packaging#Generic_Filtering_on_EPEL6
|
# 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: mysql-server < %{version}-%{release}
|
Obsoletes: mysql-server < %{version}-%{release}
|
||||||
Obsoletes: mariadb-server
|
Obsoletes: mariadb-server
|
||||||
|
Obsoletes: mariadb-galera-server
|
||||||
Provides: mysql-server = %{version}-%{release}
|
Provides: mysql-server = %{version}-%{release}
|
||||||
Provides: mysql-server%{?_isa} = %{version}-%{release}
|
Provides: mysql-server%{?_isa} = %{version}-%{release}
|
||||||
%if 0%{?systemd}
|
%if 0%{?systemd}
|
||||||
@ -262,6 +263,25 @@ This package contains the MySQL regression test suite for MySQL
|
|||||||
database server.
|
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
|
%package devel
|
||||||
Summary: Development header files and libraries for MySQL database client applications
|
Summary: Development header files and libraries for MySQL database client applications
|
||||||
Group: Applications/Databases
|
Group: Applications/Databases
|
||||||
@ -344,6 +364,7 @@ Requires: mysql-enterprise-common%{?_isa} = %{version}-%{release}
|
|||||||
Provides: MySQL-embedded%{?_isa} = %{version}-%{release}
|
Provides: MySQL-embedded%{?_isa} = %{version}-%{release}
|
||||||
Requires: mysql-community-common%{?_isa} = %{version}-%{release}
|
Requires: mysql-community-common%{?_isa} = %{version}-%{release}
|
||||||
%endif
|
%endif
|
||||||
|
Obsoletes: mariadb-embedded
|
||||||
Obsoletes: MySQL-embedded < %{version}-%{release}
|
Obsoletes: MySQL-embedded < %{version}-%{release}
|
||||||
Obsoletes: mysql-embedded < %{version}-%{release}
|
Obsoletes: mysql-embedded < %{version}-%{release}
|
||||||
Provides: 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-devel%{?_isa} = %{version}-%{release}
|
||||||
Requires: mysql-community-embedded%{?_isa} = %{version}-%{release}
|
Requires: mysql-community-embedded%{?_isa} = %{version}-%{release}
|
||||||
%endif
|
%endif
|
||||||
|
Obsoletes: mariadb-embedded-devel
|
||||||
Obsoletes: mysql-embedded-devel < %{version}-%{release}
|
Obsoletes: mysql-embedded-devel < %{version}-%{release}
|
||||||
Provides: mysql-embedded-devel = %{version}-%{release}
|
Provides: mysql-embedded-devel = %{version}-%{release}
|
||||||
Provides: mysql-embedded-devel%{?_isa} = %{version}-%{release}
|
Provides: mysql-embedded-devel%{?_isa} = %{version}-%{release}
|
||||||
@ -472,11 +494,13 @@ mkdir debug
|
|||||||
cmake ../%{src_dir} \
|
cmake ../%{src_dir} \
|
||||||
-DBUILD_CONFIG=mysql_release \
|
-DBUILD_CONFIG=mysql_release \
|
||||||
-DINSTALL_LAYOUT=RPM \
|
-DINSTALL_LAYOUT=RPM \
|
||||||
-DCMAKE_BUILD_TYPE=Debug %{?el7:-DENABLE_DTRACE=OFF} \
|
-DCMAKE_BUILD_TYPE=Debug \
|
||||||
|
-DENABLE_DTRACE=OFF \
|
||||||
-DCMAKE_C_FLAGS="$optflags" \
|
-DCMAKE_C_FLAGS="$optflags" \
|
||||||
-DCMAKE_CXX_FLAGS="$optflags" \
|
-DCMAKE_CXX_FLAGS="$optflags" \
|
||||||
-DINSTALL_LIBDIR="%{_lib}/mysql" \
|
-DINSTALL_LIBDIR="%{_lib}/mysql" \
|
||||||
-DINSTALL_PLUGINDIR="%{_lib}/mysql/plugin" \
|
-DINSTALL_PLUGINDIR="%{_lib}/mysql/plugin" \
|
||||||
|
-DINSTALL_SQLBENCHDIR=share \
|
||||||
-DMYSQL_UNIX_ADDR="%{mysqldatadir}/mysql.sock" \
|
-DMYSQL_UNIX_ADDR="%{mysqldatadir}/mysql.sock" \
|
||||||
-DFEATURE_SET="%{feature_set}" \
|
-DFEATURE_SET="%{feature_set}" \
|
||||||
-DWITH_EMBEDDED_SERVER=1 \
|
-DWITH_EMBEDDED_SERVER=1 \
|
||||||
@ -495,11 +519,13 @@ mkdir release
|
|||||||
cmake ../%{src_dir} \
|
cmake ../%{src_dir} \
|
||||||
-DBUILD_CONFIG=mysql_release \
|
-DBUILD_CONFIG=mysql_release \
|
||||||
-DINSTALL_LAYOUT=RPM \
|
-DINSTALL_LAYOUT=RPM \
|
||||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo %{?el7:-DENABLE_DTRACE=OFF} \
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||||
|
-DENABLE_DTRACE=OFF \
|
||||||
-DCMAKE_C_FLAGS="%{optflags}" \
|
-DCMAKE_C_FLAGS="%{optflags}" \
|
||||||
-DCMAKE_CXX_FLAGS="%{optflags}" \
|
-DCMAKE_CXX_FLAGS="%{optflags}" \
|
||||||
-DINSTALL_LIBDIR="%{_lib}/mysql" \
|
-DINSTALL_LIBDIR="%{_lib}/mysql" \
|
||||||
-DINSTALL_PLUGINDIR="%{_lib}/mysql/plugin" \
|
-DINSTALL_PLUGINDIR="%{_lib}/mysql/plugin" \
|
||||||
|
-DINSTALL_SQLBENCHDIR=share \
|
||||||
-DMYSQL_UNIX_ADDR="%{mysqldatadir}/mysql.sock" \
|
-DMYSQL_UNIX_ADDR="%{mysqldatadir}/mysql.sock" \
|
||||||
-DFEATURE_SET="%{feature_set}" \
|
-DFEATURE_SET="%{feature_set}" \
|
||||||
-DWITH_EMBEDDED_SERVER=1 \
|
-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/mysql_client_test_embedded.1*
|
||||||
%attr(644, root, root) %{_mandir}/man1/mysqltest_embedded.1*
|
%attr(644, root, root) %{_mandir}/man1/mysqltest_embedded.1*
|
||||||
|
|
||||||
|
%files bench
|
||||||
|
%defattr(-, root, root, -)
|
||||||
|
%{_datadir}/sql-bench
|
||||||
|
|
||||||
%files embedded
|
%files embedded
|
||||||
%defattr(-, root, root, -)
|
%defattr(-, root, root, -)
|
||||||
%dir %attr(755, root, root) %{_libdir}/mysql
|
%dir %attr(755, root, root) %{_libdir}/mysql
|
||||||
@ -881,6 +911,19 @@ fi
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%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
|
* Sun May 11 2014 Balasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com> - 5.5.38-2
|
||||||
- Increment release version to resolve upgrade conflict issue
|
- 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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
-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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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
-kK9pX0BY4AGOd23XM3K/uLawdmf67kkftim7aVaqXFHPiWsJVtlzmidKvNSmbmZe
|
|
||||||
-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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-----
|
|
||||||
-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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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
-bMvlF4cNLAbIKYVyOG0ruOfd2I7Unsc/CvD1u5vlRVuUd8OO0JZLIZR7hlRX+A58
|
|
||||||
-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
-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
-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
-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
-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
-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
-rqCtmojsWCqmpWSu7P+Wu4+O3XkUMPdQUuQ5rJFESEBB3yEJcxqk/RItTcKNElNC
|
|
||||||
-PASrPrMD9cli7S/pJ+frbhu1Gna1ArXzXQE9pMozPaBpjCig7+15R0lL3pmOKO6e
|
|
||||||
-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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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
-vi2GuB2RAoICAQD/oWUsg4eTJxHifTJLz/tVSTXnw7DhfbFVa1K1rUV63/MRQAFW
|
|
||||||
-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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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
-ahoO4XDwlHZazDuSlOseEShxXcVwaIiqySy7OBEPBVuYdEd2Qw/z3JTx9Kw8MKnf
|
|
||||||
-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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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
-nVV8Q2FMxBa/SlzSOkhRtCg2q1gXkzhaMnIVUleRZFGQ2uWBToxKMjcoUifIyN1J
|
|
||||||
-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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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
-cHq7nBkX72veEevnHUY8Z2rHE2G2jdmRfOtwm4sjL0VBV9fRRoxzJWRduKyeOtDL
|
|
||||||
-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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
|
LINK_LIBRARIES Secur32
|
||||||
MODULE_ONLY COMPONENT SharedLibraries)
|
MODULE_ONLY COMPONENT SharedLibraries)
|
||||||
|
|
||||||
#INSTALL_DEBUG_SYMBOLS(auth_win_client)
|
|
||||||
#IF(MSVC)
|
#IF(MSVC)
|
||||||
# INSTALL_DEBUG_TARGET(auth_win_client DESTINATION ${INSTALL_LIBDIR}/debug)
|
# INSTALL_DEBUG_TARGET(auth_win_client DESTINATION ${INSTALL_LIBDIR}/debug)
|
||||||
#ENDIF()
|
#ENDIF()
|
||||||
|
@ -227,6 +227,7 @@ SET(libexecdir ${prefix}/${INSTALL_SBINDIR})
|
|||||||
SET(scriptdir ${prefix}/${INSTALL_BINDIR})
|
SET(scriptdir ${prefix}/${INSTALL_BINDIR})
|
||||||
SET(datadir ${prefix}/${INSTALL_MYSQLSHAREDIR})
|
SET(datadir ${prefix}/${INSTALL_MYSQLSHAREDIR})
|
||||||
SET(pkgdatadir ${prefix}/${INSTALL_MYSQLSHAREDIR})
|
SET(pkgdatadir ${prefix}/${INSTALL_MYSQLSHAREDIR})
|
||||||
|
SET(libsubdir ${INSTALL_LIBDIR})
|
||||||
SET(pkgincludedir ${prefix}/${INSTALL_INCLUDEDIR})
|
SET(pkgincludedir ${prefix}/${INSTALL_INCLUDEDIR})
|
||||||
SET(pkglibdir ${prefix}/${INSTALL_LIBDIR})
|
SET(pkglibdir ${prefix}/${INSTALL_LIBDIR})
|
||||||
SET(pkgplugindir ${prefix}/${INSTALL_PLUGINDIR})
|
SET(pkgplugindir ${prefix}/${INSTALL_PLUGINDIR})
|
||||||
|
@ -76,7 +76,8 @@ get_full_path ()
|
|||||||
|
|
||||||
me=`get_full_path $0`
|
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@'
|
ldata='@localstatedir@'
|
||||||
execdir='@libexecdir@'
|
execdir='@libexecdir@'
|
||||||
@ -85,11 +86,11 @@ bindir='@bindir@'
|
|||||||
# If installed, search for the compiled in directory first (might be "lib64")
|
# If installed, search for the compiled in directory first (might be "lib64")
|
||||||
pkglibdir='@pkglibdir@'
|
pkglibdir='@pkglibdir@'
|
||||||
pkglibdir_rel=`echo $pkglibdir | sed -e "s;^$basedir/;;"`
|
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='@pkgplugindir@'
|
||||||
plugindir_rel=`echo $plugindir | sed -e "s;^$basedir/;;"`
|
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@'
|
pkgincludedir='@pkgincludedir@'
|
||||||
fix_path pkgincludedir include/mysql
|
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
@ -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()
|
void Item_func_md5::fix_length_and_dec()
|
||||||
{
|
{
|
||||||
/*
|
CHARSET_INFO *cs= get_checksum_charset(args[0]->collation.collation->csname);
|
||||||
The MD5() function treats its parameter as being a case sensitive. Thus
|
args[0]->collation.set(cs, DERIVATION_COERCIBLE);
|
||||||
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);
|
|
||||||
fix_length_and_charset(32, default_charset());
|
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()
|
void Item_func_sha::fix_length_and_dec()
|
||||||
{
|
{
|
||||||
/*
|
CHARSET_INFO *cs= get_checksum_charset(args[0]->collation.collation->csname);
|
||||||
The SHA() function treats its parameter as being a case sensitive. Thus
|
args[0]->collation.set(cs, DERIVATION_COERCIBLE);
|
||||||
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);
|
|
||||||
// size of hex representation of hash
|
// size of hex representation of hash
|
||||||
fix_length_and_charset(SHA1_HASH_SIZE * 2, default_charset());
|
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");
|
ER(ER_WRONG_PARAMETERS_TO_NATIVE_FCT), "sha2");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
CHARSET_INFO *cs= get_checksum_charset(args[0]->collation.collation->csname);
|
||||||
The SHA2() function treats its parameter as being a case sensitive.
|
args[0]->collation.set(cs, DERIVATION_COERCIBLE);
|
||||||
Thus we set binary collation on it so different instances of SHA2()
|
|
||||||
will be compared properly.
|
|
||||||
*/
|
|
||||||
|
|
||||||
args[0]->collation.set(
|
|
||||||
get_charset_by_csname(
|
|
||||||
args[0]->collation.collation->csname,
|
|
||||||
MY_CS_BINSORT,
|
|
||||||
MYF(0)),
|
|
||||||
DERIVATION_COERCIBLE);
|
|
||||||
#else
|
#else
|
||||||
push_warning_printf(current_thd,
|
push_warning_printf(current_thd,
|
||||||
MYSQL_ERROR::WARN_LEVEL_WARN,
|
MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||||
|
@ -7835,9 +7835,9 @@ void Execute_load_query_log_event::print(FILE* file,
|
|||||||
if (local_fname)
|
if (local_fname)
|
||||||
{
|
{
|
||||||
my_b_write(&cache, (uchar*) query, fn_pos_start);
|
my_b_write(&cache, (uchar*) query, fn_pos_start);
|
||||||
my_b_printf(&cache, " LOCAL INFILE \'");
|
my_b_printf(&cache, " LOCAL INFILE ");
|
||||||
my_b_printf(&cache, "%s", local_fname);
|
pretty_print_str(&cache, local_fname, strlen(local_fname));
|
||||||
my_b_printf(&cache, "\'");
|
|
||||||
if (dup_handling == LOAD_DUP_REPLACE)
|
if (dup_handling == LOAD_DUP_REPLACE)
|
||||||
my_b_printf(&cache, " REPLACE");
|
my_b_printf(&cache, " REPLACE");
|
||||||
my_b_printf(&cache, " INTO");
|
my_b_printf(&cache, " INTO");
|
||||||
|
206
sql/opt_range.cc
206
sql/opt_range.cc
@ -1,5 +1,5 @@
|
|||||||
/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
|
/* Copyright (c) 2000, 2014, Oracle and/or its affiliates.
|
||||||
Copyright (c) 2008, 2013, Monty Program Ab.
|
Copyright (c) 2008, 2014, Monty Program Ab.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -358,31 +358,54 @@ public:
|
|||||||
elements(1),use_count(1),left(0),right(0),
|
elements(1),use_count(1),left(0),right(0),
|
||||||
next_key_part(0), color(BLACK), type(type_arg)
|
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)
|
if (type != arg->type || part != arg->part)
|
||||||
return 0;
|
return false;
|
||||||
if (type != KEY_RANGE)
|
if (type != KEY_RANGE)
|
||||||
return 1;
|
return true;
|
||||||
return cmp_min_to_min(arg) == 0 && cmp_max_to_max(arg) == 0;
|
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 merge_flags(SEL_ARG *arg) { maybe_flag|=arg->maybe_flag; }
|
||||||
inline void maybe_smaller() { maybe_flag=1; }
|
inline void maybe_smaller() { maybe_flag=1; }
|
||||||
/* Return true iff it's a single-point null interval */
|
/* Return true iff it's a single-point null interval */
|
||||||
inline bool is_null_interval() { return maybe_null && max_value[0] == 1; }
|
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);
|
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);
|
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);
|
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);
|
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);
|
void test_use_count(SEL_ARG *root);
|
||||||
#endif
|
#endif
|
||||||
SEL_ARG *first();
|
SEL_ARG *first();
|
||||||
|
const SEL_ARG *first() const;
|
||||||
SEL_ARG *last();
|
SEL_ARG *last();
|
||||||
void make_root();
|
void make_root();
|
||||||
inline bool simple_key()
|
inline bool simple_key()
|
||||||
@ -651,6 +675,18 @@ public:
|
|||||||
SEL_ARG *clone_tree(RANGE_OPT_PARAM *param);
|
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;
|
class SEL_IMERGE;
|
||||||
|
|
||||||
#define CLONE_KEY1_MAYBE 1
|
#define CLONE_KEY1_MAYBE 1
|
||||||
@ -2476,6 +2512,13 @@ SEL_ARG *SEL_ARG::clone(RANGE_OPT_PARAM *param, SEL_ARG *new_parent,
|
|||||||
return tmp;
|
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 *SEL_ARG::first()
|
||||||
{
|
{
|
||||||
SEL_ARG *next_arg=this;
|
SEL_ARG *next_arg=this;
|
||||||
@ -2486,6 +2529,11 @@ SEL_ARG *SEL_ARG::first()
|
|||||||
return next_arg;
|
return next_arg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const SEL_ARG *SEL_ARG::first() const
|
||||||
|
{
|
||||||
|
return const_cast<SEL_ARG*>(this)->first();
|
||||||
|
}
|
||||||
|
|
||||||
SEL_ARG *SEL_ARG::last()
|
SEL_ARG *SEL_ARG::last()
|
||||||
{
|
{
|
||||||
SEL_ARG *next_arg=this;
|
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 uint get_field_keypart(KEY *index, Field *field);
|
||||||
static inline SEL_ARG * get_index_range_tree(uint index, SEL_TREE* range_tree,
|
static inline SEL_ARG * get_index_range_tree(uint index, SEL_TREE* range_tree,
|
||||||
PARAM *param, uint *param_idx);
|
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,
|
static bool get_constant_key_infix(KEY *index_info, SEL_ARG *index_range_tree,
|
||||||
KEY_PART_INFO *first_non_group_part,
|
KEY_PART_INFO *first_non_group_part,
|
||||||
KEY_PART_INFO *min_max_arg_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
|
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
|
furhter index_next/prev calls can not be used. So loose index scan
|
||||||
optimization can not be used in this case.
|
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
|
GA1. If Q has a GROUP BY clause, then GA is a prefix of I. That is, if
|
||||||
G_i = A_j => i = j.
|
G_i = A_j => i = j.
|
||||||
GA2. If Q has a DISTINCT clause, then there is a permutation of SA that
|
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
|
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
|
participates in the index I (if this was already tested for GA, NGA
|
||||||
and C).
|
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:
|
C) Overall query form:
|
||||||
SELECT EXPR([A_1,...,A_k], [B_1,...,B_m], [MIN(C)], [MAX(C)])
|
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);
|
DBUG_RETURN(NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check (SA7). */
|
||||||
|
if (is_agg_distinct && (have_max || have_min))
|
||||||
|
{
|
||||||
|
DBUG_RETURN(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
/* Check (SA5). */
|
/* Check (SA5). */
|
||||||
if (join->select_distinct)
|
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. */
|
/* If we got to this point, cur_index_info passes the test. */
|
||||||
key_infix_parts= cur_key_infix_len ? (uint)
|
key_infix_parts= cur_key_infix_len ? (uint)
|
||||||
(first_non_infix_part - first_non_group_part) : 0;
|
(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
|
Get the SEL_ARG tree 'tree' for the keypart covering 'field', if
|
||||||
attribute (NGA) field 'nga_field'.
|
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
|
E.g., if 'keypart_tree' is for a composite index (kp1,kp2) and kp2
|
||||||
condition for 'nga_field', there can only be one range. In the
|
covers 'field', all these conditions satisfies the requirement:
|
||||||
opposite case, this function returns with error and 'cur_range'
|
|
||||||
should not be used.
|
|
||||||
|
|
||||||
Note that the NGA1 and NGA2 requirements, like whether or not the
|
1. "(kp1=2 OR kp1=3) AND kp2=10" => returns "kp2=10"
|
||||||
range predicate for 'nga_field' is equality, is not tested by this
|
2. "(kp1=2 AND kp2=10) OR (kp1=3 AND kp2=10)" => returns "kp2=10"
|
||||||
function.
|
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[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
|
@param[out] cur_range The SEL_ARG tree, if any, for the keypart
|
||||||
covering field 'keypart_field'
|
covering field 'keypart_field'
|
||||||
@retval true 'keypart_tree' contained a predicate for 'nga_field' but
|
@retval true 'keypart_tree' contained a predicate for 'field' that
|
||||||
multiple ranges exists. 'cur_range' should not be used.
|
is not conjunction to all predicates on earlier keyparts
|
||||||
@retval false otherwise
|
@retval false otherwise
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
get_sel_arg_for_keypart(Field *nga_field,
|
get_sel_arg_for_keypart(Field *field,
|
||||||
SEL_ARG *keypart_tree,
|
SEL_ARG *keypart_tree,
|
||||||
SEL_ARG **cur_range)
|
SEL_ARG **cur_range)
|
||||||
{
|
{
|
||||||
if(keypart_tree == NULL)
|
if (keypart_tree == NULL)
|
||||||
return false;
|
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;
|
*cur_range= keypart_tree;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
SEL_ARG *found_tree= NULL;
|
SEL_ARG *tree_first_range= NULL;
|
||||||
SEL_ARG *first_kp= keypart_tree->first();
|
SEL_ARG *first_kp= keypart_tree->first();
|
||||||
|
|
||||||
for (SEL_ARG *cur_kp= first_kp; cur_kp && !found_tree;
|
for (SEL_ARG *cur_kp= first_kp; cur_kp; cur_kp= cur_kp->next)
|
||||||
cur_kp= cur_kp->next)
|
|
||||||
{
|
{
|
||||||
|
SEL_ARG *curr_tree= NULL;
|
||||||
if (cur_kp->next_key_part)
|
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,
|
cur_kp->next_key_part,
|
||||||
&found_tree))
|
&curr_tree))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
Enforce NGA3: If a condition for nga_field has been found,only
|
Check if the SEL_ARG tree for 'field' is identical for all ranges in
|
||||||
a single range is allowed.
|
'keypart_tree
|
||||||
*/
|
*/
|
||||||
if (found_tree && first_kp->next)
|
if (cur_kp == first_kp)
|
||||||
return true; // There are multiple ranges
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Extract a sequence of constants from a conjunction of equality predicates.
|
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
|
(const_ci = NG_i).. In addition, there can only be one range when there is
|
||||||
such a gap.
|
such a gap.
|
||||||
Thus all the NGF_i attributes must fill the 'gap' between the last group-by
|
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
|
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, 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.
|
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
|
TRUE if the index passes the test
|
||||||
FALSE o/w
|
FALSE o/w
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
get_constant_key_infix(KEY *index_info, SEL_ARG *index_range_tree,
|
get_constant_key_infix(KEY *index_info, SEL_ARG *index_range_tree,
|
||||||
KEY_PART_INFO *first_non_group_part,
|
KEY_PART_INFO *first_non_group_part,
|
||||||
@ -12780,27 +12870,37 @@ get_constant_key_infix(KEY *index_info, SEL_ARG *index_range_tree,
|
|||||||
{
|
{
|
||||||
cur_range= NULL;
|
cur_range= NULL;
|
||||||
/*
|
/*
|
||||||
Find the range tree for the current keypart. We assume that
|
Check NGA3:
|
||||||
index_range_tree points to the first keypart in the index.
|
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;
|
return false;
|
||||||
|
|
||||||
if (!cur_range || cur_range->type != SEL_ARG::KEY_RANGE)
|
if (!cur_range || cur_range->type != SEL_ARG::KEY_RANGE)
|
||||||
{
|
{
|
||||||
if (min_max_arg_part)
|
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
|
else
|
||||||
{
|
{
|
||||||
*first_non_infix_part= cur_part;
|
*first_non_infix_part= cur_part;
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((cur_range->min_flag & NO_MIN_RANGE) ||
|
if ((cur_range->min_flag & NO_MIN_RANGE) ||
|
||||||
(cur_range->max_flag & NO_MAX_RANGE) ||
|
(cur_range->max_flag & NO_MAX_RANGE) ||
|
||||||
(cur_range->min_flag & NEAR_MIN) || (cur_range->max_flag & NEAR_MAX))
|
(cur_range->min_flag & NEAR_MIN) || (cur_range->max_flag & NEAR_MAX))
|
||||||
return FALSE;
|
return false;
|
||||||
|
|
||||||
uint field_length= cur_part->store_length;
|
uint field_length= cur_part->store_length;
|
||||||
if (cur_range->maybe_null &&
|
if (cur_range->maybe_null &&
|
||||||
@ -12824,7 +12924,7 @@ get_constant_key_infix(KEY *index_info, SEL_ARG *index_range_tree,
|
|||||||
*key_infix_len+= field_length;
|
*key_infix_len+= field_length;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!min_max_arg_part && (cur_part == last_part))
|
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) 2007, 2013, Oracle and/or its affiliates.
|
||||||
Copyright (c) 2012, Monty Program Ab
|
Copyright (c) 2012, 2014, SkySQL Ab.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2000, 2013, Oracle and/or its affiliates.
|
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
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2000, 2013, Oracle and/or its affiliates.
|
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
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
|
/* Copyright (c) 2000, 2014, Oracle and/or its affiliates.
|
||||||
Copyright (c) 2009, 2013, Monty Program Ab.
|
Copyright (c) 2009, 2014, Monty Program Ab.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -30,7 +30,7 @@
|
|||||||
#include "sp.h"
|
#include "sp.h"
|
||||||
#include "sql_select.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
|
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()
|
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_EOQ Found end of query
|
||||||
- MY_LEX_OPERATOR_OR_IDENT Last state was an ident, text or number
|
- MY_LEX_OPERATOR_OR_IDENT Last state was an ident, text or number
|
||||||
(which can't be followed by a signed 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;
|
Lex_input_stream *lip= & thd->m_parser_state->m_lip;
|
||||||
YYSTYPE *yylval=(YYSTYPE*) arg;
|
|
||||||
int token;
|
int token;
|
||||||
|
|
||||||
if (lip->lookahead_token >= 0)
|
if (lip->lookahead_token >= 0)
|
||||||
@ -975,7 +977,7 @@ int MYSQLlex(void *arg, THD *thd)
|
|||||||
return token;
|
return token;
|
||||||
}
|
}
|
||||||
|
|
||||||
token= lex_one_token(arg, thd);
|
token= lex_one_token(yylval, thd);
|
||||||
|
|
||||||
switch(token) {
|
switch(token) {
|
||||||
case WITH:
|
case WITH:
|
||||||
@ -986,7 +988,7 @@ int MYSQLlex(void *arg, THD *thd)
|
|||||||
to transform the grammar into a LALR(1) grammar,
|
to transform the grammar into a LALR(1) grammar,
|
||||||
which sql_yacc.yy can process.
|
which sql_yacc.yy can process.
|
||||||
*/
|
*/
|
||||||
token= lex_one_token(arg, thd);
|
token= lex_one_token(yylval, thd);
|
||||||
switch(token) {
|
switch(token) {
|
||||||
case CUBE_SYM:
|
case CUBE_SYM:
|
||||||
return WITH_CUBE_SYM;
|
return WITH_CUBE_SYM;
|
||||||
@ -1009,7 +1011,7 @@ int MYSQLlex(void *arg, THD *thd)
|
|||||||
return token;
|
return token;
|
||||||
}
|
}
|
||||||
|
|
||||||
int lex_one_token(void *arg, THD *thd)
|
static int lex_one_token(YYSTYPE *yylval, THD *thd)
|
||||||
{
|
{
|
||||||
reg1 uchar c;
|
reg1 uchar c;
|
||||||
bool comment_closed;
|
bool comment_closed;
|
||||||
@ -1018,7 +1020,6 @@ int lex_one_token(void *arg, THD *thd)
|
|||||||
enum my_lex_states state;
|
enum my_lex_states state;
|
||||||
Lex_input_stream *lip= & thd->m_parser_state->m_lip;
|
Lex_input_stream *lip= & thd->m_parser_state->m_lip;
|
||||||
LEX *lex= thd->lex;
|
LEX *lex= thd->lex;
|
||||||
YYSTYPE *yylval=(YYSTYPE*) arg;
|
|
||||||
CHARSET_INFO *const cs= thd->charset();
|
CHARSET_INFO *const cs= thd->charset();
|
||||||
const uchar *const state_map= cs->state_map;
|
const uchar *const state_map= cs->state_map;
|
||||||
const uchar *const ident_map= cs->ident_map;
|
const uchar *const ident_map= cs->ident_map;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
|
/* Copyright (c) 2000, 2014, Oracle and/or its affiliates.
|
||||||
Copyright (c) 2010, 2013, Monty Program Ab.
|
Copyright (c) 2010, 2014, Monty Program Ab.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -2932,7 +2932,7 @@ extern void lex_start(THD *thd);
|
|||||||
extern void lex_end(LEX *lex);
|
extern void lex_end(LEX *lex);
|
||||||
void end_lex_with_single_table(THD *thd, TABLE *table, LEX *old_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);
|
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);
|
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) 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
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Copyright (c) 2005, 2013, Oracle and/or its affiliates.
|
/* Copyright (c) 2005, 2014, Oracle and/or its affiliates.
|
||||||
Copyright (c) 2009, 2011, Monty Program Ab.
|
Copyright (c) 2009, 2014, SkySQL Ab.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -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 num_columns= part_info->part_field_list.elements;
|
||||||
uint list_index;
|
uint list_index;
|
||||||
uint min_list_index= 0;
|
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;
|
uint max_list_index= part_info->num_list_values;
|
||||||
DBUG_ENTER("get_partition_id_cols_list_for_endpoint");
|
DBUG_ENTER("get_partition_id_cols_list_for_endpoint");
|
||||||
|
|
||||||
/* Find the matching partition (including taking endpoint into account). */
|
/* Find the matching partition (including taking endpoint into account). */
|
||||||
do
|
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;
|
list_index= (max_list_index + min_list_index) >> 1;
|
||||||
if (cmp_rec_and_tuple_prune(list_col_array + list_index*num_columns,
|
cmp= cmp_rec_and_tuple_prune(list_col_array + list_index*num_columns,
|
||||||
nparts, left_endpoint, include_endpoint) > 0)
|
nparts, left_endpoint, include_endpoint);
|
||||||
|
if (cmp > 0)
|
||||||
|
{
|
||||||
min_list_index= list_index + 1;
|
min_list_index= list_index + 1;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
max_list_index= list_index;
|
max_list_index= list_index;
|
||||||
|
if (cmp == 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
} while (max_list_index > min_list_index);
|
} while (max_list_index > min_list_index);
|
||||||
list_index= max_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,
|
nparts, left_endpoint,
|
||||||
include_endpoint)));
|
include_endpoint)));
|
||||||
|
|
||||||
if (!left_endpoint && list_index < part_info->num_list_values)
|
/* 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)
|
||||||
Set the end after this list tuple if it is not already after the last
|
list_index++;
|
||||||
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++;
|
|
||||||
}
|
|
||||||
|
|
||||||
DBUG_RETURN(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.
|
There was no partitioning before and no partitioning defined.
|
||||||
Obviously no work needed.
|
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)
|
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))
|
if (!(create_info->used_fields & HA_CREATE_USED_ENGINE))
|
||||||
{
|
{
|
||||||
DBUG_PRINT("info", ("No explicit engine used"));
|
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",
|
DBUG_PRINT("info", ("New engine type: %s",
|
||||||
ha_resolve_storage_engine_name(create_info->db_type)));
|
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
|
Retain partitioning but possibly with a new storage engine
|
||||||
beneath.
|
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 &&
|
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.
|
Make sure change of engine happens to all partitions.
|
||||||
*/
|
*/
|
||||||
DBUG_PRINT("info", ("partition changed"));
|
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
|
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
|
Need to cater for engine types that can handle partition without
|
||||||
using the partition handler.
|
using the partition handler.
|
||||||
*/
|
*/
|
||||||
if (part_info != table->part_info)
|
if (part_info != tab_part_info)
|
||||||
{
|
{
|
||||||
if (part_info->fix_parser_data(thd))
|
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;
|
part_info->default_engine_type= create_info->db_type;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (table->part_info)
|
if (tab_part_info)
|
||||||
part_info->default_engine_type= table->part_info->default_engine_type;
|
part_info->default_engine_type= tab_part_info->default_engine_type;
|
||||||
else
|
else
|
||||||
part_info->default_engine_type= create_info->db_type;
|
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;
|
field= val->part_info->part_field_array + n_vals_in_rec;
|
||||||
if (!(*field))
|
if (!(*field))
|
||||||
{
|
{
|
||||||
/*
|
/* Full match. Only equal if including endpoint. */
|
||||||
Full match, if right endpoint and not including the endpoint,
|
if (include_endpoint)
|
||||||
(rec < part) return lesser.
|
return 0;
|
||||||
*/
|
|
||||||
if (!is_left_endpoint && !include_endpoint)
|
|
||||||
return -4;
|
|
||||||
|
|
||||||
/* Otherwise they are equal! */
|
if (is_left_endpoint)
|
||||||
return 0;
|
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.
|
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) 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
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2000, 2013, Oracle and/or its affiliates.
|
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
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -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 *,
|
static int mysql_prepare_create_table(THD *, HA_CREATE_INFO *, Alter_info *,
|
||||||
bool, uint *, handler *, KEY **, uint *,
|
bool, uint *, handler *, KEY **, uint *,
|
||||||
int);
|
int);
|
||||||
|
static uint blob_length_by_type(enum_field_types type);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@brief Helper function for explain_filename
|
@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
|
CHARSET_INFO *ft_key_charset=0; // for FULLTEXT
|
||||||
for (uint column_nr=0 ; (column=cols++) ; column_nr++)
|
for (uint column_nr=0 ; (column=cols++) ; column_nr++)
|
||||||
{
|
{
|
||||||
uint length;
|
|
||||||
Key_part_spec *dup_column;
|
Key_part_spec *dup_column;
|
||||||
|
|
||||||
it.rewind();
|
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 ==
|
if (f_is_geom(sql_field->pack_flag) && sql_field->geom_type ==
|
||||||
Field::GEOM_POINT)
|
Field::GEOM_POINT)
|
||||||
column->length= 25;
|
column->length= MAX_LEN_GEOM_POINT_FIELD;
|
||||||
if (!column->length)
|
if (!column->length)
|
||||||
{
|
{
|
||||||
my_error(ER_BLOB_KEY_WITHOUT_LENGTH, MYF(0), column->field_name.str);
|
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->fieldnr= field;
|
||||||
key_part_info->offset= (uint16) sql_field->offset;
|
key_part_info->offset= (uint16) sql_field->offset;
|
||||||
key_part_info->key_type=sql_field->pack_flag;
|
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 (column->length)
|
||||||
{
|
{
|
||||||
if (f_is_blob(sql_field->pack_flag))
|
if (f_is_blob(sql_field->pack_flag))
|
||||||
{
|
{
|
||||||
if ((length=column->length) > max_key_length ||
|
key_part_length= min(column->length,
|
||||||
length > file->max_key_part_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)
|
if (key->type == Key::MULTIPLE)
|
||||||
{
|
{
|
||||||
/* not a critical problem */
|
/* not a critical problem */
|
||||||
char warn_buff[MYSQL_ERRMSG_SIZE];
|
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||||
my_snprintf(warn_buff, sizeof(warn_buff), ER(ER_TOO_LONG_KEY),
|
ER_TOO_LONG_KEY, ER(ER_TOO_LONG_KEY),
|
||||||
length);
|
key_part_length);
|
||||||
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
|
||||||
ER_TOO_LONG_KEY, warn_buff);
|
|
||||||
/* Align key length to multibyte char boundary */
|
/* Align key length to multibyte char boundary */
|
||||||
length-= length % sql_field->charset->mbmaxlen;
|
key_part_length-= key_part_length % sql_field->charset->mbmaxlen;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
my_error(ER_TOO_LONG_KEY,MYF(0),length);
|
my_error(ER_TOO_LONG_KEY, MYF(0), key_part_length);
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3649,9 +3650,9 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info,
|
|||||||
// Catch invalid use of partial keys
|
// Catch invalid use of partial keys
|
||||||
else if (!f_is_geom(sql_field->pack_flag) &&
|
else if (!f_is_geom(sql_field->pack_flag) &&
|
||||||
// is the key partial?
|
// is the key partial?
|
||||||
column->length != length &&
|
column->length != key_part_length &&
|
||||||
// is prefix length bigger than field length?
|
// is prefix length bigger than field length?
|
||||||
(column->length > length ||
|
(column->length > key_part_length ||
|
||||||
// can the field have a partial key?
|
// can the field have a partial key?
|
||||||
!Field::type_can_have_key_part (sql_field->sql_type) ||
|
!Field::type_can_have_key_part (sql_field->sql_type) ||
|
||||||
// a packed field can't be used in a partial key
|
// a packed field can't be used in a partial key
|
||||||
@ -3665,38 +3666,37 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info,
|
|||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
else if (!(file->ha_table_flags() & HA_NO_PREFIX_CHAR_KEYS))
|
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);
|
my_error(ER_WRONG_KEY_COLUMN, MYF(0), column->field_name.str);
|
||||||
DBUG_RETURN(TRUE);
|
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)
|
if (key->type == Key::MULTIPLE)
|
||||||
{
|
{
|
||||||
/* not a critical problem */
|
/* not a critical problem */
|
||||||
char warn_buff[MYSQL_ERRMSG_SIZE];
|
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||||
my_snprintf(warn_buff, sizeof(warn_buff), ER(ER_TOO_LONG_KEY),
|
ER_TOO_LONG_KEY, ER(ER_TOO_LONG_KEY),
|
||||||
length);
|
key_part_length);
|
||||||
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
|
||||||
ER_TOO_LONG_KEY, warn_buff);
|
|
||||||
/* Align key length to multibyte char boundary */
|
/* Align key length to multibyte char boundary */
|
||||||
length-= length % sql_field->charset->mbmaxlen;
|
key_part_length-= key_part_length % sql_field->charset->mbmaxlen;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
my_error(ER_TOO_LONG_KEY,MYF(0),length);
|
my_error(ER_TOO_LONG_KEY, MYF(0), key_part_length);
|
||||||
DBUG_RETURN(TRUE);
|
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 */
|
/* Use packed keys for long strings on the first column */
|
||||||
if (!((*db_options) & HA_OPTION_NO_PACK_KEYS) &&
|
if (!((*db_options) & HA_OPTION_NO_PACK_KEYS) &&
|
||||||
!((create_info->table_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_STRING ||
|
||||||
sql_field->sql_type == MYSQL_TYPE_VARCHAR ||
|
sql_field->sql_type == MYSQL_TYPE_VARCHAR ||
|
||||||
sql_field->pack_flag & FIELDFLAG_BLOB)))
|
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;
|
key_info->flags|= HA_PACK_KEY;
|
||||||
}
|
}
|
||||||
/* Check if the key segment is partial, set the key flag accordingly */
|
/* 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_info->flags|= HA_KEY_HAS_PART_KEY_SEG;
|
||||||
|
|
||||||
key_length+=length;
|
key_length+= key_part_length;
|
||||||
key_part_info++;
|
key_part_info++;
|
||||||
|
|
||||||
/* Create the key name based on the first column (if not given) */
|
/* 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
|
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` ... */
|
/* depends on errmsg.txt Database `db`, Table `t` ... */
|
||||||
#define EXPLAIN_FILENAME_MAX_EXTRA_LENGTH 63
|
#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
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -692,6 +693,11 @@ bool st_select_lex_unit::exec()
|
|||||||
0);
|
0);
|
||||||
if (!saved_error)
|
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;
|
examined_rows+= thd->examined_row_count;
|
||||||
thd->examined_row_count= 0;
|
thd->examined_row_count= 0;
|
||||||
if (union_result->flush())
|
if (union_result->flush())
|
||||||
|
@ -404,9 +404,7 @@ bool mysql_create_view(THD *thd, TABLE_LIST *views,
|
|||||||
TABLE_LIST *tables= lex->query_tables;
|
TABLE_LIST *tables= lex->query_tables;
|
||||||
TABLE_LIST *tbl;
|
TABLE_LIST *tbl;
|
||||||
SELECT_LEX *select_lex= &lex->select_lex;
|
SELECT_LEX *select_lex= &lex->select_lex;
|
||||||
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
|
||||||
SELECT_LEX *sl;
|
SELECT_LEX *sl;
|
||||||
#endif
|
|
||||||
SELECT_LEX_UNIT *unit= &lex->unit;
|
SELECT_LEX_UNIT *unit= &lex->unit;
|
||||||
bool res= FALSE;
|
bool res= FALSE;
|
||||||
DBUG_ENTER("mysql_create_view");
|
DBUG_ENTER("mysql_create_view");
|
||||||
@ -601,7 +599,8 @@ bool mysql_create_view(THD *thd, TABLE_LIST *views,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Check if the auto generated column names are conforming. */
|
/* Check if the auto generated column names are conforming. */
|
||||||
make_valid_column_names(select_lex->item_list);
|
for (sl= select_lex; sl; sl= sl->next_select())
|
||||||
|
make_valid_column_names(sl->item_list);
|
||||||
|
|
||||||
if (check_duplicate_names(select_lex->item_list, 1))
|
if (check_duplicate_names(select_lex->item_list, 1))
|
||||||
{
|
{
|
||||||
|
@ -72,7 +72,7 @@ int yylex(void *yylval, void *yythd);
|
|||||||
ulong val= *(F); \
|
ulong val= *(F); \
|
||||||
if (my_yyoverflow((B), (D), &val)) \
|
if (my_yyoverflow((B), (D), &val)) \
|
||||||
{ \
|
{ \
|
||||||
yyerror(current_thd, (char*) (A)); \
|
yyerror(thd, (char*) (A)); \
|
||||||
return 2; \
|
return 2; \
|
||||||
} \
|
} \
|
||||||
else \
|
else \
|
||||||
@ -5764,7 +5764,8 @@ spatial_type:
|
|||||||
| GEOMETRYCOLLECTION { $$= Field::GEOM_GEOMETRYCOLLECTION; }
|
| GEOMETRYCOLLECTION { $$= Field::GEOM_GEOMETRYCOLLECTION; }
|
||||||
| POINT_SYM
|
| POINT_SYM
|
||||||
{
|
{
|
||||||
Lex->length= (char*)"25";
|
Lex->length= const_cast<char*>(STRINGIFY_ARG
|
||||||
|
(MAX_LEN_GEOM_POINT_FIELD));
|
||||||
$$= Field::GEOM_POINT;
|
$$= Field::GEOM_POINT;
|
||||||
}
|
}
|
||||||
| MULTIPOINT { $$= Field::GEOM_MULTIPOINT; }
|
| MULTIPOINT { $$= Field::GEOM_MULTIPOINT; }
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (c) 2002, 2013, Oracle and/or its affiliates.
|
/* Copyright (c) 2002, 2014, Oracle and/or its affiliates.
|
||||||
Copyright (c) 2012, 2014, SkySQL Ab.
|
Copyright (c) 2012, 2014, SkySQL Ab.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
@ -2444,9 +2444,10 @@ static Sys_var_ulonglong Sys_tmp_table_size(
|
|||||||
|
|
||||||
static Sys_var_mybool Sys_timed_mutexes(
|
static Sys_var_mybool Sys_timed_mutexes(
|
||||||
"timed_mutexes",
|
"timed_mutexes",
|
||||||
"Specify whether to time mutexes (only InnoDB mutexes are currently "
|
"Specify whether to time mutexes. Deprecated, has no effect.",
|
||||||
"supported)",
|
GLOBAL_VAR(timed_mutexes), CMD_LINE(OPT_ARG), DEFAULT(0),
|
||||||
GLOBAL_VAR(timed_mutexes), CMD_LINE(OPT_ARG), DEFAULT(0));
|
NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(NULL), ON_UPDATE(NULL),
|
||||||
|
DEPRECATED(""));
|
||||||
|
|
||||||
static char *server_version_ptr;
|
static char *server_version_ptr;
|
||||||
static Sys_var_charptr Sys_version(
|
static Sys_var_charptr Sys_version(
|
||||||
|
24
sql/table.cc
24
sql/table.cc
@ -1749,13 +1749,25 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head,
|
|||||||
key_part= keyinfo->key_part;
|
key_part= keyinfo->key_part;
|
||||||
for (i=0 ; i < keyinfo->key_parts ;i++)
|
for (i=0 ; i < keyinfo->key_parts ;i++)
|
||||||
{
|
{
|
||||||
uint fieldnr= key_part[i].fieldnr;
|
DBUG_ASSERT(key_part[i].fieldnr > 0);
|
||||||
if (!fieldnr ||
|
// Table field corresponding to the i'th key part.
|
||||||
share->field[fieldnr-1]->null_ptr ||
|
Field *table_field= share->field[key_part[i].fieldnr - 1];
|
||||||
share->field[fieldnr-1]->key_length() !=
|
|
||||||
key_part[i].length)
|
/*
|
||||||
|
If the key column is of NOT NULL BLOB type, then it
|
||||||
|
will definitly have key prefix. And if key part prefix size
|
||||||
|
is equal to the BLOB column max size, then we can promote
|
||||||
|
it to primary key.
|
||||||
|
*/
|
||||||
|
if (!table_field->real_maybe_null() &&
|
||||||
|
table_field->type() == MYSQL_TYPE_BLOB &&
|
||||||
|
table_field->field_length == key_part[i].length)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (table_field->real_maybe_null() ||
|
||||||
|
table_field->key_length() != key_part[i].length)
|
||||||
{
|
{
|
||||||
primary_key=MAX_KEY; // Can't be used
|
primary_key= MAX_KEY; // Can't be used
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -75,8 +75,8 @@ int hp_get_new_block(HP_BLOCK *block, size_t *alloc_length)
|
|||||||
When level 1 is full, we allocate data for HPTRS_IN_NODE at level 2 and 1
|
When level 1 is full, we allocate data for HPTRS_IN_NODE at level 2 and 1
|
||||||
+ X rows at level 0.
|
+ X rows at level 0.
|
||||||
*/
|
*/
|
||||||
*alloc_length= (sizeof(HP_PTRS)* ((i == block->levels) ? i : i - 1) +
|
*alloc_length= (sizeof(HP_PTRS) * ((i == block->levels) ? i : i - 1) +
|
||||||
block->records_in_block* block->recbuffer);
|
(ulonglong)block->records_in_block * block->recbuffer);
|
||||||
if (!(root=(HP_PTRS*) my_malloc(*alloc_length,MYF(MY_WME))))
|
if (!(root=(HP_PTRS*) my_malloc(*alloc_length,MYF(MY_WME))))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
/* Copyright (c) 2000, 2011, Oracle and/or its affiliates.
|
||||||
|
Copyright (c) 2010, 2014, SkySQL Ab.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1996, 2014, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
the terms of the GNU General Public License as published by the Free Software
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -1441,6 +1441,8 @@ dict_create_add_foreign_to_dictionary(
|
|||||||
ulint i;
|
ulint i;
|
||||||
pars_info_t* info;
|
pars_info_t* info;
|
||||||
|
|
||||||
|
ut_ad(mutex_own(&(dict_sys->mutex)));
|
||||||
|
|
||||||
if (foreign->id == NULL) {
|
if (foreign->id == NULL) {
|
||||||
/* Generate a new constraint id */
|
/* Generate a new constraint id */
|
||||||
ulint namelen = strlen(table->name);
|
ulint namelen = strlen(table->name);
|
||||||
@ -1519,6 +1521,37 @@ dict_create_add_foreign_to_dictionary(
|
|||||||
"END;\n"
|
"END;\n"
|
||||||
, table, foreign, trx);
|
, table, foreign, trx);
|
||||||
|
|
||||||
|
if (error == DB_SUCCESS) {
|
||||||
|
|
||||||
|
|
||||||
|
if (foreign->foreign_table != NULL) {
|
||||||
|
ib_rbt_t* rbt
|
||||||
|
= foreign->foreign_table->foreign_rbt;
|
||||||
|
|
||||||
|
if (rbt == NULL) {
|
||||||
|
rbt = dict_table_init_foreign_rbt(
|
||||||
|
foreign->foreign_table);
|
||||||
|
} else {
|
||||||
|
rbt_delete(rbt, foreign->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
rbt_insert(rbt, foreign->id, &foreign);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (foreign->referenced_table != NULL) {
|
||||||
|
ib_rbt_t* rbt
|
||||||
|
= foreign->referenced_table->referenced_rbt;
|
||||||
|
|
||||||
|
if (rbt == NULL) {
|
||||||
|
rbt = dict_table_init_referenced_rbt(
|
||||||
|
foreign->referenced_table);
|
||||||
|
} else {
|
||||||
|
rbt_delete(rbt, foreign->id);
|
||||||
|
}
|
||||||
|
rbt_insert(rbt, foreign->id, &foreign);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return(error);
|
return(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1543,6 +1576,7 @@ dict_create_add_foreigns_to_dictionary(
|
|||||||
dict_foreign_t* foreign;
|
dict_foreign_t* foreign;
|
||||||
ulint number = start_id + 1;
|
ulint number = start_id + 1;
|
||||||
ulint error;
|
ulint error;
|
||||||
|
DBUG_ENTER("dict_create_add_foreigns_to_dictionary");
|
||||||
|
|
||||||
ut_ad(mutex_own(&(dict_sys->mutex)));
|
ut_ad(mutex_own(&(dict_sys->mutex)));
|
||||||
|
|
||||||
@ -1551,7 +1585,7 @@ dict_create_add_foreigns_to_dictionary(
|
|||||||
"InnoDB: table SYS_FOREIGN not found"
|
"InnoDB: table SYS_FOREIGN not found"
|
||||||
" in internal data dictionary\n");
|
" in internal data dictionary\n");
|
||||||
|
|
||||||
return(DB_ERROR);
|
DBUG_RETURN(DB_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (foreign = UT_LIST_GET_FIRST(table->foreign_list);
|
for (foreign = UT_LIST_GET_FIRST(table->foreign_list);
|
||||||
@ -1563,9 +1597,9 @@ dict_create_add_foreigns_to_dictionary(
|
|||||||
|
|
||||||
if (error != DB_SUCCESS) {
|
if (error != DB_SUCCESS) {
|
||||||
|
|
||||||
return(error);
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return(DB_SUCCESS);
|
DBUG_RETURN(DB_SUCCESS);
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1996, 2013, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1996, 2014, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
the terms of the GNU General Public License as published by the Free Software
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -26,6 +26,7 @@ Created 1/8/1996 Heikki Tuuri
|
|||||||
#include <my_sys.h>
|
#include <my_sys.h>
|
||||||
|
|
||||||
#include "dict0dict.h"
|
#include "dict0dict.h"
|
||||||
|
#include "ut0rbt.h"
|
||||||
|
|
||||||
#ifdef UNIV_NONINL
|
#ifdef UNIV_NONINL
|
||||||
#include "dict0dict.ic"
|
#include "dict0dict.ic"
|
||||||
@ -191,6 +192,7 @@ UNIV_INTERN FILE* dict_foreign_err_file = NULL;
|
|||||||
/* mutex protecting the foreign and unique error buffers */
|
/* mutex protecting the foreign and unique error buffers */
|
||||||
UNIV_INTERN mutex_t dict_foreign_err_mutex;
|
UNIV_INTERN mutex_t dict_foreign_err_mutex;
|
||||||
#endif /* !UNIV_HOTBACKUP */
|
#endif /* !UNIV_HOTBACKUP */
|
||||||
|
|
||||||
/******************************************************************//**
|
/******************************************************************//**
|
||||||
Makes all characters in a NUL-terminated UTF-8 string lower case. */
|
Makes all characters in a NUL-terminated UTF-8 string lower case. */
|
||||||
UNIV_INTERN
|
UNIV_INTERN
|
||||||
@ -1103,6 +1105,10 @@ dict_table_rename_in_cache(
|
|||||||
|
|
||||||
UT_LIST_INIT(table->referenced_list);
|
UT_LIST_INIT(table->referenced_list);
|
||||||
|
|
||||||
|
if (table->referenced_rbt != NULL) {
|
||||||
|
rbt_clear(table->referenced_rbt);
|
||||||
|
}
|
||||||
|
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1113,6 +1119,10 @@ dict_table_rename_in_cache(
|
|||||||
foreign = UT_LIST_GET_FIRST(table->foreign_list);
|
foreign = UT_LIST_GET_FIRST(table->foreign_list);
|
||||||
|
|
||||||
while (foreign != NULL) {
|
while (foreign != NULL) {
|
||||||
|
|
||||||
|
/* The id will be changed. So remove old one */
|
||||||
|
rbt_delete(foreign->foreign_table->foreign_rbt, foreign->id);
|
||||||
|
|
||||||
if (ut_strlen(foreign->foreign_table_name)
|
if (ut_strlen(foreign->foreign_table_name)
|
||||||
< ut_strlen(table->name)) {
|
< ut_strlen(table->name)) {
|
||||||
/* Allocate a longer name buffer;
|
/* Allocate a longer name buffer;
|
||||||
@ -1260,6 +1270,9 @@ dict_table_rename_in_cache(
|
|||||||
mem_free(old_id);
|
mem_free(old_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rbt_insert(foreign->foreign_table->foreign_rbt,
|
||||||
|
foreign->id, &foreign);
|
||||||
|
|
||||||
foreign = UT_LIST_GET_NEXT(foreign_list, foreign);
|
foreign = UT_LIST_GET_NEXT(foreign_list, foreign);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2480,22 +2493,40 @@ dict_foreign_remove_from_cache(
|
|||||||
/*===========================*/
|
/*===========================*/
|
||||||
dict_foreign_t* foreign) /*!< in, own: foreign constraint */
|
dict_foreign_t* foreign) /*!< in, own: foreign constraint */
|
||||||
{
|
{
|
||||||
|
DBUG_ENTER("dict_foreign_remove_from_cache");
|
||||||
|
|
||||||
ut_ad(mutex_own(&(dict_sys->mutex)));
|
ut_ad(mutex_own(&(dict_sys->mutex)));
|
||||||
ut_a(foreign);
|
ut_a(foreign);
|
||||||
|
|
||||||
if (foreign->referenced_table) {
|
if (foreign->referenced_table) {
|
||||||
|
ib_rbt_t* rbt;
|
||||||
|
|
||||||
UT_LIST_REMOVE(referenced_list,
|
UT_LIST_REMOVE(referenced_list,
|
||||||
foreign->referenced_table->referenced_list,
|
foreign->referenced_table->referenced_list,
|
||||||
foreign);
|
foreign);
|
||||||
|
|
||||||
|
rbt = foreign->referenced_table->referenced_rbt;
|
||||||
|
if (rbt != NULL) {
|
||||||
|
rbt_delete(rbt, foreign->id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (foreign->foreign_table) {
|
if (foreign->foreign_table) {
|
||||||
|
ib_rbt_t* rbt;
|
||||||
|
|
||||||
UT_LIST_REMOVE(foreign_list,
|
UT_LIST_REMOVE(foreign_list,
|
||||||
foreign->foreign_table->foreign_list,
|
foreign->foreign_table->foreign_list,
|
||||||
foreign);
|
foreign);
|
||||||
|
rbt = foreign->foreign_table->foreign_rbt;
|
||||||
|
|
||||||
|
if (rbt != NULL) {
|
||||||
|
rbt_delete(rbt, foreign->id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dict_foreign_free(foreign);
|
dict_foreign_free(foreign);
|
||||||
|
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**********************************************************************//**
|
/**********************************************************************//**
|
||||||
@ -2509,33 +2540,36 @@ dict_foreign_find(
|
|||||||
dict_table_t* table, /*!< in: table object */
|
dict_table_t* table, /*!< in: table object */
|
||||||
const char* id) /*!< in: foreign constraint id */
|
const char* id) /*!< in: foreign constraint id */
|
||||||
{
|
{
|
||||||
dict_foreign_t* foreign;
|
const ib_rbt_node_t* node;
|
||||||
|
|
||||||
|
DBUG_ENTER("dict_foreign_find");
|
||||||
|
|
||||||
ut_ad(mutex_own(&(dict_sys->mutex)));
|
ut_ad(mutex_own(&(dict_sys->mutex)));
|
||||||
|
ut_ad(dict_table_check_foreign_keys(table));
|
||||||
|
|
||||||
foreign = UT_LIST_GET_FIRST(table->foreign_list);
|
if (table->foreign_rbt != NULL) {
|
||||||
|
ut_a(UT_LIST_GET_LEN(table->foreign_list)
|
||||||
while (foreign) {
|
== rbt_size(table->foreign_rbt));
|
||||||
if (ut_strcmp(id, foreign->id) == 0) {
|
node = rbt_lookup(table->foreign_rbt, id);
|
||||||
|
if (node != NULL) {
|
||||||
return(foreign);
|
DBUG_RETURN(*(dict_foreign_t**) node->value);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
foreign = UT_LIST_GET_NEXT(foreign_list, foreign);
|
ut_a(UT_LIST_GET_LEN(table->foreign_list) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreign = UT_LIST_GET_FIRST(table->referenced_list);
|
if (table->referenced_rbt != NULL) {
|
||||||
|
ut_a(UT_LIST_GET_LEN(table->referenced_list)
|
||||||
while (foreign) {
|
== rbt_size(table->referenced_rbt));
|
||||||
if (ut_strcmp(id, foreign->id) == 0) {
|
node = rbt_lookup(table->referenced_rbt, id);
|
||||||
|
if (node != NULL) {
|
||||||
return(foreign);
|
DBUG_RETURN(*(dict_foreign_t**) node->value);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
foreign = UT_LIST_GET_NEXT(referenced_list, foreign);
|
ut_a(UT_LIST_GET_LEN(table->referenced_list) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(NULL);
|
DBUG_RETURN(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************************************************//**
|
/*********************************************************************//**
|
||||||
@ -2773,6 +2807,8 @@ dict_foreign_add_to_cache(
|
|||||||
ibool added_to_referenced_list= FALSE;
|
ibool added_to_referenced_list= FALSE;
|
||||||
FILE* ef = dict_foreign_err_file;
|
FILE* ef = dict_foreign_err_file;
|
||||||
|
|
||||||
|
DBUG_ENTER("dict_foreign_add_to_cache");
|
||||||
|
|
||||||
ut_ad(mutex_own(&(dict_sys->mutex)));
|
ut_ad(mutex_own(&(dict_sys->mutex)));
|
||||||
|
|
||||||
for_table = dict_table_check_if_in_cache_low(
|
for_table = dict_table_check_if_in_cache_low(
|
||||||
@ -2782,7 +2818,14 @@ dict_foreign_add_to_cache(
|
|||||||
foreign->referenced_table_name_lookup);
|
foreign->referenced_table_name_lookup);
|
||||||
ut_a(for_table || ref_table);
|
ut_a(for_table || ref_table);
|
||||||
|
|
||||||
|
if (ref_table != NULL && ref_table->referenced_rbt == NULL) {
|
||||||
|
dict_table_init_referenced_rbt(ref_table);
|
||||||
|
}
|
||||||
|
|
||||||
if (for_table) {
|
if (for_table) {
|
||||||
|
if (for_table->foreign_rbt == NULL) {
|
||||||
|
dict_table_init_foreign_rbt(for_table);
|
||||||
|
}
|
||||||
for_in_cache = dict_foreign_find(for_table, foreign->id);
|
for_in_cache = dict_foreign_find(for_table, foreign->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2819,18 +2862,22 @@ dict_foreign_add_to_cache(
|
|||||||
mem_heap_free(foreign->heap);
|
mem_heap_free(foreign->heap);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(DB_CANNOT_ADD_CONSTRAINT);
|
DBUG_RETURN(DB_CANNOT_ADD_CONSTRAINT);
|
||||||
}
|
}
|
||||||
|
|
||||||
for_in_cache->referenced_table = ref_table;
|
for_in_cache->referenced_table = ref_table;
|
||||||
for_in_cache->referenced_index = index;
|
for_in_cache->referenced_index = index;
|
||||||
|
|
||||||
UT_LIST_ADD_LAST(referenced_list,
|
UT_LIST_ADD_LAST(referenced_list,
|
||||||
ref_table->referenced_list,
|
ref_table->referenced_list, for_in_cache);
|
||||||
for_in_cache);
|
|
||||||
added_to_referenced_list = TRUE;
|
added_to_referenced_list = TRUE;
|
||||||
|
|
||||||
|
rbt_insert(ref_table->referenced_rbt,
|
||||||
|
for_in_cache->id, &for_in_cache);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (for_in_cache->foreign_table == NULL && for_table) {
|
if (for_in_cache->foreign_table == NULL && for_table) {
|
||||||
|
|
||||||
index = dict_foreign_find_index(
|
index = dict_foreign_find_index(
|
||||||
for_table,
|
for_table,
|
||||||
for_in_cache->foreign_col_names,
|
for_in_cache->foreign_col_names,
|
||||||
@ -2859,22 +2906,28 @@ dict_foreign_add_to_cache(
|
|||||||
referenced_list,
|
referenced_list,
|
||||||
ref_table->referenced_list,
|
ref_table->referenced_list,
|
||||||
for_in_cache);
|
for_in_cache);
|
||||||
|
rbt_delete(ref_table->referenced_rbt,
|
||||||
|
for_in_cache->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
mem_heap_free(foreign->heap);
|
mem_heap_free(foreign->heap);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(DB_CANNOT_ADD_CONSTRAINT);
|
DBUG_RETURN(DB_CANNOT_ADD_CONSTRAINT);
|
||||||
}
|
}
|
||||||
|
|
||||||
for_in_cache->foreign_table = for_table;
|
for_in_cache->foreign_table = for_table;
|
||||||
for_in_cache->foreign_index = index;
|
for_in_cache->foreign_index = index;
|
||||||
|
|
||||||
UT_LIST_ADD_LAST(foreign_list,
|
UT_LIST_ADD_LAST(foreign_list,
|
||||||
for_table->foreign_list,
|
for_table->foreign_list,
|
||||||
for_in_cache);
|
for_in_cache);
|
||||||
|
|
||||||
|
rbt_insert(for_table->foreign_rbt, for_in_cache->id,
|
||||||
|
&for_in_cache);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(DB_SUCCESS);
|
DBUG_RETURN(DB_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* !UNIV_HOTBACKUP */
|
#endif /* !UNIV_HOTBACKUP */
|
||||||
|
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