mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
merge
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@ -317,6 +317,24 @@ CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/include/mysql_version.h.in
|
||||
${CMAKE_BINARY_DIR}/include/mysql_version.h )
|
||||
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/sql/sql_builtin.cc.in
|
||||
${CMAKE_BINARY_DIR}/sql/sql_builtin.cc)
|
||||
CONFIGURE_FILE(
|
||||
${CMAKE_SOURCE_DIR}/cmake/info_macros.cmake.in ${CMAKE_BINARY_DIR}/info_macros.cmake @ONLY)
|
||||
|
||||
# Handle the "INFO_*" files.
|
||||
INCLUDE(${CMAKE_BINARY_DIR}/info_macros.cmake)
|
||||
# Source: This can be done during the cmake phase, all information is
|
||||
# available, but should be repeated on each "make" just in case someone
|
||||
# does "cmake ; make ; bzr pull ; make".
|
||||
CREATE_INFO_SRC(${CMAKE_BINARY_DIR}/Docs)
|
||||
ADD_CUSTOM_TARGET(INFO_SRC ALL
|
||||
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/cmake/info_src.cmake
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
)
|
||||
# Build flags: This must be postponed to the make phase.
|
||||
ADD_CUSTOM_TARGET(INFO_BIN ALL
|
||||
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/cmake/info_bin.cmake
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
)
|
||||
|
||||
# Packaging
|
||||
IF(WIN32)
|
||||
@ -344,6 +362,7 @@ IF(NOT INSTALL_LAYOUT MATCHES "RPM")
|
||||
OPTIONAL
|
||||
)
|
||||
INSTALL(FILES README DESTINATION ${INSTALL_DOCREADMEDIR} COMPONENT Readme)
|
||||
INSTALL(FILES ${CMAKE_BINARY_DIR}/Docs/INFO_SRC ${CMAKE_BINARY_DIR}/Docs/INFO_BIN DESTINATION ${INSTALL_DOCDIR})
|
||||
IF(UNIX)
|
||||
INSTALL(FILES Docs/INSTALL-BINARY DESTINATION ${INSTALL_DOCREADMEDIR} COMPONENT Readme)
|
||||
ENDIF()
|
||||
|
21
README
21
README
@ -3,18 +3,29 @@ MySQL Server
|
||||
This is a release of MySQL, a dual-license SQL database server.
|
||||
For the avoidance of doubt, this particular copy of the software
|
||||
is released under the version 2 of the GNU General Public License.
|
||||
MySQL is brought to you by the MySQL team at Oracle.
|
||||
MySQL is brought to you by Oracle.
|
||||
|
||||
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
|
||||
License information can be found in the COPYING file.
|
||||
|
||||
MySQL FOSS License Exception
|
||||
We want free and open source software applications under certain
|
||||
licenses to be able to use specified GPL-licensed MySQL client
|
||||
libraries despite the fact that not all such FOSS licenses are
|
||||
compatible with version 2 of the GNU General Public License.
|
||||
Therefore there are special exceptions to the terms and conditions
|
||||
of the GPLv2 as applied to these client libraries, which are
|
||||
identified and described in more detail in the FOSS License
|
||||
Exception at
|
||||
<http://www.mysql.com/about/legal/licensing/foss-exception.html>.
|
||||
|
||||
This distribution may include materials developed by third
|
||||
parties. For license and attribution notices for these
|
||||
materials, please refer to the documentation that accompanies
|
||||
this distribution (see the Licenses for Third-Party Components
|
||||
appendix). A copy of the license/notices is also reproduced
|
||||
below.
|
||||
this distribution (see the "Licenses for Third-Party Components"
|
||||
appendix) or view the online documentation at
|
||||
<http://dev.mysql.com/doc/>.
|
||||
|
||||
GPLv2 Disclaimer
|
||||
For the avoidance of doubt, except that if any license choice
|
||||
@ -38,8 +49,6 @@ Some Reference Manual sections of special interest:
|
||||
chapter.
|
||||
- For the new features/bugfix history, see the MySQL Change History
|
||||
appendix.
|
||||
- For currently known bugs, see the Errors and Common Problems
|
||||
appendix.
|
||||
|
||||
You can browse the MySQL Reference Manual online or download it
|
||||
in any of several formats at the URL given earlier in this file.
|
||||
|
2
VERSION
2
VERSION
@ -1,4 +1,4 @@
|
||||
MYSQL_VERSION_MAJOR=5
|
||||
MYSQL_VERSION_MINOR=5
|
||||
MYSQL_VERSION_PATCH=10
|
||||
MYSQL_VERSION_PATCH=11
|
||||
MYSQL_VERSION_EXTRA=
|
||||
|
@ -50,9 +50,6 @@ enum options_client
|
||||
OPT_OPEN_FILES_LIMIT, OPT_SET_CHARSET, OPT_SERVER_ARG,
|
||||
OPT_STOP_POSITION, OPT_START_DATETIME, OPT_STOP_DATETIME,
|
||||
OPT_SIGINT_IGNORE, OPT_HEXBLOB, OPT_ORDER_BY_PRIMARY, OPT_COUNT,
|
||||
#ifdef HAVE_NDBCLUSTER_DB
|
||||
OPT_NDBCLUSTER, OPT_NDB_CONNECTSTRING,
|
||||
#endif
|
||||
OPT_TRIGGERS,
|
||||
OPT_MYSQL_ONLY_PRINT,
|
||||
OPT_MYSQL_LOCK_DIRECTORY,
|
||||
|
@ -1153,6 +1153,9 @@ static int switch_db_collation(FILE *sql_file,
|
||||
{
|
||||
if (strcmp(current_db_cl_name, required_db_cl_name) != 0)
|
||||
{
|
||||
char quoted_db_buf[NAME_LEN * 2 + 3];
|
||||
char *quoted_db_name= quote_name(db_name, quoted_db_buf, FALSE);
|
||||
|
||||
CHARSET_INFO *db_cl= get_charset_by_name(required_db_cl_name, MYF(0));
|
||||
|
||||
if (!db_cl)
|
||||
@ -1160,7 +1163,7 @@ static int switch_db_collation(FILE *sql_file,
|
||||
|
||||
fprintf(sql_file,
|
||||
"ALTER DATABASE %s CHARACTER SET %s COLLATE %s %s\n",
|
||||
(const char *) db_name,
|
||||
(const char *) quoted_db_name,
|
||||
(const char *) db_cl->csname,
|
||||
(const char *) db_cl->name,
|
||||
(const char *) delimiter);
|
||||
@ -1181,6 +1184,9 @@ static int restore_db_collation(FILE *sql_file,
|
||||
const char *delimiter,
|
||||
const char *db_cl_name)
|
||||
{
|
||||
char quoted_db_buf[NAME_LEN * 2 + 3];
|
||||
char *quoted_db_name= quote_name(db_name, quoted_db_buf, FALSE);
|
||||
|
||||
CHARSET_INFO *db_cl= get_charset_by_name(db_cl_name, MYF(0));
|
||||
|
||||
if (!db_cl)
|
||||
@ -1188,7 +1194,7 @@ static int restore_db_collation(FILE *sql_file,
|
||||
|
||||
fprintf(sql_file,
|
||||
"ALTER DATABASE %s CHARACTER SET %s COLLATE %s %s\n",
|
||||
(const char *) db_name,
|
||||
(const char *) quoted_db_name,
|
||||
(const char *) db_cl->csname,
|
||||
(const char *) db_cl->name,
|
||||
(const char *) delimiter);
|
||||
|
30
cmake/info_bin.cmake
Normal file
30
cmake/info_bin.cmake
Normal file
@ -0,0 +1,30 @@
|
||||
# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; version 2 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
|
||||
# The sole purpose of this cmake control file is to create the "INFO_BIN" file.
|
||||
|
||||
# By having a separate cmake file for this, it is ensured this happens
|
||||
# only in the build (Unix: "make") phase, not when cmake runs.
|
||||
# This, in turn, avoids creating stuff in the source directory -
|
||||
# it should get into the binary directory only.
|
||||
|
||||
|
||||
# Get the macros which the "INFO_*" files.
|
||||
INCLUDE(${CMAKE_BINARY_DIR}/info_macros.cmake)
|
||||
|
||||
# Here is where the action is.
|
||||
CREATE_INFO_BIN()
|
||||
|
132
cmake/info_macros.cmake.in
Normal file
132
cmake/info_macros.cmake.in
Normal file
@ -0,0 +1,132 @@
|
||||
# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; version 2 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
|
||||
# Handle/create the "INFO_*" files describing a MySQL (server) binary.
|
||||
# This is part of the fix for bug#42969.
|
||||
|
||||
|
||||
# Several of cmake's variables need to be translated from '@' notation
|
||||
# to '${}', this is done by the "configure" call in top level "CMakeLists.txt".
|
||||
# If further variables are used in this file, add them to this list.
|
||||
|
||||
SET(VERSION "@VERSION@")
|
||||
SET(CMAKE_SOURCE_DIR "@CMAKE_SOURCE_DIR@")
|
||||
SET(CMAKE_BINARY_DIR "@CMAKE_BINARY_DIR@")
|
||||
SET(CMAKE_GENERATOR "@CMAKE_GENERATOR@")
|
||||
SET(CMAKE_SIZEOF_VOID_P "@CMAKE_SIZEOF_VOID_P@")
|
||||
SET(BZR_EXECUTABLE "@BZR_EXECUTABLE@")
|
||||
SET(CMAKE_CROSSCOMPILING "@CMAKE_CROSSCOMPILING@")
|
||||
SET(CMAKE_HOST_SYSTEM "@CMAKE_HOST_SYSTEM@")
|
||||
SET(CMAKE_HOST_SYSTEM_PROCESSOR "@CMAKE_HOST_SYSTEM_PROCESSOR@")
|
||||
SET(CMAKE_SYSTEM "@CMAKE_SYSTEM@")
|
||||
SET(CMAKE_SYSTEM_PROCESSOR "@CMAKE_SYSTEM_PROCESSOR@")
|
||||
|
||||
|
||||
# Create an "INFO_SRC" file with information about the source (only).
|
||||
# We use "bzr version-info", if possible, and the "VERSION" contents.
|
||||
#
|
||||
# Outside development (BZR tree), the "INFO_SRC" file will not be modified
|
||||
# provided it exists (from "make dist" or a source tarball creation).
|
||||
|
||||
MACRO(CREATE_INFO_SRC target_dir)
|
||||
SET(INFO_SRC "${target_dir}/INFO_SRC")
|
||||
|
||||
IF(EXISTS ${CMAKE_SOURCE_DIR}/.bzr)
|
||||
# Sources are in a BZR repository: Always update.
|
||||
EXECUTE_PROCESS(
|
||||
COMMAND ${BZR_EXECUTABLE} version-info ${CMAKE_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE VERSION_INFO
|
||||
RESULT_VARIABLE RESULT
|
||||
)
|
||||
FILE(WRITE ${INFO_SRC} "${VERSION_INFO}\n")
|
||||
# to debug, add: FILE(APPEND ${INFO_SRC} "\nResult ${RESULT}\n")
|
||||
# For better readability ...
|
||||
FILE(APPEND ${INFO_SRC} "\nMySQL source ${VERSION}\n")
|
||||
ELSEIF(EXISTS ${INFO_SRC})
|
||||
# Outside a BZR tree, there is no need to change an existing "INFO_SRC",
|
||||
# it cannot be improved.
|
||||
ELSEIF(EXISTS ${CMAKE_SOURCE_DIR}/Docs/INFO_SRC)
|
||||
# If we are building from a source distribution, it also contains "INFO_SRC".
|
||||
# Similar, the export used for a release build already has the file.
|
||||
FILE(READ ${CMAKE_SOURCE_DIR}/Docs/INFO_SRC SOURCE_INFO)
|
||||
FILE(WRITE ${INFO_SRC} "${SOURCE_INFO}\n")
|
||||
ELSEIF(EXISTS ${CMAKE_SOURCE_DIR}/INFO_SRC)
|
||||
# This is not the proper location, but who knows ...
|
||||
FILE(READ ${CMAKE_SOURCE_DIR}/INFO_SRC SOURCE_INFO)
|
||||
FILE(WRITE ${INFO_SRC} "${SOURCE_INFO}\n")
|
||||
ELSE()
|
||||
# This is a fall-back.
|
||||
FILE(WRITE ${INFO_SRC} "\nMySQL source ${VERSION}\n")
|
||||
ENDIF()
|
||||
ENDMACRO(CREATE_INFO_SRC)
|
||||
|
||||
|
||||
# This is for the "real" build, must be run again with each cmake run
|
||||
# to make sure we report the current flags (not those of some previous run).
|
||||
|
||||
MACRO(CREATE_INFO_BIN)
|
||||
SET(INFO_BIN "Docs/INFO_BIN")
|
||||
|
||||
FILE(WRITE ${INFO_BIN} "===== Information about the build process: =====\n")
|
||||
IF (WIN32)
|
||||
EXECUTE_PROCESS(COMMAND cmd /c date /T OUTPUT_VARIABLE TMP_DATE)
|
||||
ELSEIF(UNIX)
|
||||
EXECUTE_PROCESS(COMMAND date "+%Y-%m-%d %H:%M:%S" OUTPUT_VARIABLE TMP_DATE OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
ELSE()
|
||||
SET(TMP_DATE "(no date command known for this platform)")
|
||||
ENDIF()
|
||||
SITE_NAME(HOSTNAME)
|
||||
FILE(APPEND ${INFO_BIN} "Build was run at ${TMP_DATE} on host '${HOSTNAME}'\n\n")
|
||||
|
||||
# According to the cmake docs, these variables should always be set.
|
||||
# However, they are empty in my tests, using cmake 2.6.4 on Linux, various Unix, and Windows.
|
||||
# Still, include this code, so we will profit if a build environment does provide that info.
|
||||
IF(CMAKE_HOST_SYSTEM)
|
||||
FILE(APPEND ${INFO_BIN} "Build was done on ${CMAKE_HOST_SYSTEM} using ${CMAKE_HOST_SYSTEM_PROCESSOR}\n")
|
||||
ENDIF()
|
||||
IF(CMAKE_CROSSCOMPILING)
|
||||
FILE(APPEND ${INFO_BIN} "Build was done for ${CMAKE_SYSTEM} using ${CMAKE_SYSTEM_PROCESSOR}\n")
|
||||
ENDIF()
|
||||
|
||||
# ${CMAKE_VERSION} doesn't work in 2.6.0, use the separate components.
|
||||
FILE(APPEND ${INFO_BIN} "Build was done using cmake ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} \n\n")
|
||||
|
||||
IF (WIN32)
|
||||
FILE(APPEND ${INFO_BIN} "===== Compiler / generator used: =====\n")
|
||||
FILE(APPEND ${INFO_BIN} ${CMAKE_GENERATOR} "\n\n")
|
||||
ELSEIF(UNIX)
|
||||
FILE(APPEND ${INFO_BIN} "===== Compiler flags used (from the 'sql/' subdirectory): =====\n")
|
||||
IF(EXISTS sql/CMakeFiles/sql.dir/flags.make)
|
||||
EXECUTE_PROCESS(COMMAND egrep "^# compile|^C_|^CXX_" sql/CMakeFiles/sql.dir/flags.make OUTPUT_VARIABLE COMPILE_FLAGS)
|
||||
FILE(APPEND ${INFO_BIN} ${COMPILE_FLAGS} "\n")
|
||||
ELSE()
|
||||
FILE(APPEND ${INFO_BIN} "File 'sql/CMakeFiles/sql.dir/flags.make' is not yet found.\n\n")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
FILE(APPEND ${INFO_BIN} "Pointer size: ${CMAKE_SIZEOF_VOID_P}\n\n")
|
||||
|
||||
FILE(APPEND ${INFO_BIN} "===== Feature flags used: =====\n")
|
||||
IF(EXISTS ${CMAKE_BINARY_DIR}/CMakeCache.txt)
|
||||
# Attention: "-N" prevents cmake from entering a recursion, and it must be a separate flag from "-L".
|
||||
EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -N -L ${CMAKE_BINARY_DIR} OUTPUT_VARIABLE FEATURE_FLAGS)
|
||||
FILE(APPEND ${INFO_BIN} ${FEATURE_FLAGS} "\n")
|
||||
ELSE()
|
||||
FILE(APPEND ${INFO_BIN} "File 'CMakeCache.txt' is not yet found.\n\n")
|
||||
ENDIF()
|
||||
|
||||
FILE(APPEND ${INFO_BIN} "===== EOF =====\n")
|
||||
ENDMACRO(CREATE_INFO_BIN)
|
||||
|
31
cmake/info_src.cmake
Normal file
31
cmake/info_src.cmake
Normal file
@ -0,0 +1,31 @@
|
||||
# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; version 2 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
|
||||
# The sole purpose of this cmake control file is to create the "INFO_SRC" file.
|
||||
|
||||
# As long as and "bzr pull" (or "bzr commit") is followed by a "cmake",
|
||||
# the call in top level "CMakeLists.txt" is sufficient.
|
||||
# This file is to provide a separate target for the "make" phase,
|
||||
# to ensure the BZR revision-id is correct even after a sequence
|
||||
# cmake ; make ; bzr pull ; make
|
||||
|
||||
|
||||
# Get the macros which handle the "INFO_*" files.
|
||||
INCLUDE(${CMAKE_BINARY_DIR}/info_macros.cmake)
|
||||
|
||||
# Here is where the action is.
|
||||
CREATE_INFO_SRC(${CMAKE_BINARY_DIR}/Docs)
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Copyright (C) 2009 Sun Microsystems, Inc
|
||||
# Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@ -29,6 +29,8 @@ SET(CMAKE_GENERATOR "@CMAKE_GENERATOR@")
|
||||
SET(CMAKE_MAKE_PROGRAM "@CMAKE_MAKE_PROGRAM@")
|
||||
SET(CMAKE_SYSTEM_NAME "@CMAKE_SYSTEM_NAME@")
|
||||
|
||||
SET(VERSION "@VERSION@")
|
||||
|
||||
SET(MYSQL_DOCS_LOCATION "@MYSQL_DOCS_LOCATION@")
|
||||
|
||||
|
||||
@ -100,12 +102,22 @@ CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql/sql_yacc.h
|
||||
CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql/sql_yacc.cc
|
||||
${PACKAGE_DIR}/sql/sql_yacc.cc COPYONLY)
|
||||
|
||||
# Copy spec files
|
||||
CONFIGURE_FILE(${CMAKE_BINARY_DIR}/support-files/mysql.${VERSION}.spec
|
||||
${PACKAGE_DIR}/support-files/mysql.${VERSION}.spec COPYONLY)
|
||||
|
||||
# Add documentation, if user has specified where to find them
|
||||
IF(MYSQL_DOCS_LOCATION)
|
||||
MESSAGE("Copying documentation files from " ${MYSQL_DOCS_LOCATION})
|
||||
EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy_directory "${MYSQL_DOCS_LOCATION}" "${PACKAGE_DIR}")
|
||||
ENDIF()
|
||||
|
||||
# Ensure there is an "INFO_SRC" file.
|
||||
INCLUDE(${CMAKE_BINARY_DIR}/info_macros.cmake)
|
||||
IF(NOT EXISTS ${PACKAGE_DIR}/Docs/INFO_SRC)
|
||||
CREATE_INFO_SRC(${PACKAGE_DIR}/Docs)
|
||||
ENDIF()
|
||||
|
||||
# In case we used CPack, it could have copied some
|
||||
# extra files that are not usable on different machines.
|
||||
FILE(REMOVE ${PACKAGE_DIR}/CMakeCache.txt)
|
||||
|
@ -219,14 +219,13 @@ static void print_escaped_string(FILE *f, const char *str)
|
||||
|
||||
static int create_header_files(struct errors *error_head)
|
||||
{
|
||||
uint er_last;
|
||||
uint er_last= 0;
|
||||
FILE *er_definef, *sql_statef, *er_namef;
|
||||
struct errors *tmp_error;
|
||||
struct message *er_msg;
|
||||
const char *er_text;
|
||||
|
||||
DBUG_ENTER("create_header_files");
|
||||
LINT_INIT(er_last);
|
||||
|
||||
if (!(er_definef= my_fopen(HEADERFILE, O_WRONLY, MYF(MY_WME))))
|
||||
{
|
||||
|
@ -1,3 +1,18 @@
|
||||
/* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; version 2 of the License.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
|
||||
|
||||
#ifndef MY_BIT_INCLUDED
|
||||
#define MY_BIT_INCLUDED
|
||||
|
||||
@ -44,9 +59,12 @@ static inline uint my_count_bits(ulonglong v)
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline uint my_count_bits_ushort(ushort v)
|
||||
static inline uint my_count_bits_uint32(uint32 v)
|
||||
{
|
||||
return _my_bits_nbits[v];
|
||||
return (uint) (uchar) (_my_bits_nbits[(uchar) v] +
|
||||
_my_bits_nbits[(uchar) (v >> 8)] +
|
||||
_my_bits_nbits[(uchar) (v >> 16)] +
|
||||
_my_bits_nbits[(uchar) (v >> 24)]);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2000 MySQL AB, 2009 Sun Microsystems, Inc
|
||||
/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -125,9 +125,10 @@ bitmap_is_set(const MY_BITMAP *map,uint bit)
|
||||
|
||||
static inline my_bool bitmap_cmp(const MY_BITMAP *map1, const MY_BITMAP *map2)
|
||||
{
|
||||
*(map1)->last_word_ptr|= (map1)->last_word_mask;
|
||||
*(map2)->last_word_ptr|= (map2)->last_word_mask;
|
||||
return memcmp((map1)->bitmap, (map2)->bitmap, 4*no_words_in_map((map1)))==0;
|
||||
if (memcmp(map1->bitmap, map2->bitmap, 4*(no_words_in_map(map1)-1)) != 0)
|
||||
return FALSE;
|
||||
return ((*map1->last_word_ptr | map1->last_word_mask) ==
|
||||
(*map2->last_word_ptr | map2->last_word_mask));
|
||||
}
|
||||
|
||||
#define bitmap_clear_all(MAP) \
|
||||
|
@ -1476,7 +1476,6 @@ static inline double rint(double x)
|
||||
|
||||
#undef HAVE_OPENSSL
|
||||
#undef HAVE_SMEM /* No shared memory */
|
||||
#undef HAVE_NDBCLUSTER_DB /* No NDB cluster */
|
||||
|
||||
#endif /* EMBEDDED_LIBRARY */
|
||||
|
||||
|
@ -806,8 +806,7 @@ extern pthread_mutexattr_t my_errorcheck_mutexattr;
|
||||
typedef ulong my_thread_id;
|
||||
|
||||
extern my_bool my_thread_global_init(void);
|
||||
extern my_bool my_thread_basic_global_init(void);
|
||||
extern void my_thread_basic_global_reinit(void);
|
||||
extern void my_thread_global_reinit(void);
|
||||
extern void my_thread_global_end(void);
|
||||
extern my_bool my_thread_init(void);
|
||||
extern void my_thread_end(void);
|
||||
|
@ -643,7 +643,6 @@ extern int my_error_register(const char** (*get_errmsgs) (),
|
||||
extern const char **my_error_unregister(int first, int last);
|
||||
extern void my_message(uint my_err, const char *str,myf MyFlags);
|
||||
extern void my_message_stderr(uint my_err, const char *str, myf MyFlags);
|
||||
extern my_bool my_basic_init(void);
|
||||
extern my_bool my_init(void);
|
||||
extern void my_end(int infoflag);
|
||||
extern int my_redel(const char *from, const char *to, int MyFlags);
|
||||
|
@ -25,7 +25,6 @@
|
||||
|
||||
#undef HAVE_DLOPEN /* No udf functions */
|
||||
#undef HAVE_SMEM /* No shared memory */
|
||||
#undef HAVE_NDBCLUSTER_DB /* No NDB cluster */
|
||||
|
||||
#endif /* EMBEDDED_LIBRARY */
|
||||
#endif /* MYSQL_EMBED_INCLUDED */
|
||||
|
@ -5,8 +5,6 @@ binlog.binlog_multi_engine # joro : NDB tests marked as experiment
|
||||
|
||||
funcs_1.charset_collation_1 # depends on compile-time decisions
|
||||
|
||||
innodb.innodb_information_schema # Bug#48883 2010-05-11 alik Test "innodb_information_schema" takes fewer locks than expected
|
||||
|
||||
main.func_math @freebsd # Bug#43020 2010-05-04 alik main.func_math fails on FreeBSD in PB2
|
||||
main.gis-rtree @freebsd # Bug#38965 2010-05-04 alik test cases gis-rtree, type_float, type_newdecimal fail in embedded server
|
||||
main.lock_multi_bug38499 # Bug#47448 2009-09-19 alik main.lock_multi_bug38499 times out sporadically
|
||||
@ -16,8 +14,6 @@ main.sp @solaris # Bug#47791 2010-01-20 alik Several tes
|
||||
main.type_float @freebsd # Bug#38965 2010-05-04 alik test cases gis-rtree, type_float, type_newdecimal fail in embedded server
|
||||
main.wait_timeout @solaris # Bug#51244 2010-04-26 alik wait_timeout fails on OpenSolaris
|
||||
|
||||
rpl.rpl_heartbeat_basic # BUG#54820 2010-06-26 alik rpl.rpl_heartbeat_basic fails sporadically again
|
||||
rpl.rpl_heartbeat_2slaves # BUG#43828 2009-10-22 luis fails sporadically
|
||||
rpl.rpl_innodb_bug28430 # Bug#46029
|
||||
|
||||
sys_vars.max_sp_recursion_depth_func @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
||||
|
9
mysql-test/collections/disabled-daily.list
Normal file
9
mysql-test/collections/disabled-daily.list
Normal file
@ -0,0 +1,9 @@
|
||||
rpl.rpl_semi_sync_event : lsoares 2011-02-11 BUG#11769332 Anitha asked me to disable this until plugin issues on windows are fixed.
|
||||
rpl.rpl_semi_sync : lsoares 2011-02-11 BUG#11769332 Anitha asked me to disable this until plugin issues on windows are fixed.
|
||||
sys_vars.rpl_semi_sync_master_enabled_basic : lsoares 2011-02-11 BUG#11769332 Anitha asked me to disable this until plugin issues on windows are fixed.
|
||||
sys_vars.rpl_semi_sync_master_timeout_basic : lsoares 2011-02-11 BUG#11769332 Anitha asked me to disable this until plugin issues on windows are fixed.
|
||||
sys_vars.rpl_semi_sync_master_trace_level_basic : lsoares 2011-02-11 BUG#11769332 Anitha asked me to disable this until plugin issues on windows are fixed.
|
||||
sys_vars.rpl_semi_sync_master_wait_no_slave_basic : lsoares 2011-02-11 BUG#11769332 Anitha asked me to disable this until plugin issues on windows are fixed.
|
||||
sys_vars.rpl_semi_sync_slave_enabled_basic : lsoares 2011-02-11 BUG#11769332 Anitha asked me to disable this until plugin issues on windows are fixed.
|
||||
sys_vars.rpl_semi_sync_slave_trace_level_basic : lsoares 2011-02-11 BUG#11769332 Anitha asked me to disable this until plugin issues on windows are fixed.
|
||||
sys_vars.all_vars : lsoares 2011-02-11 BUG#11769332 Anitha asked me to disable this until plugin issues on windows are fixed.
|
9
mysql-test/collections/disabled-weekly.list
Normal file
9
mysql-test/collections/disabled-weekly.list
Normal file
@ -0,0 +1,9 @@
|
||||
rpl.rpl_semi_sync_event : lsoares 2011-02-11 BUG#11769332 Anitha asked me to disable this until plugin issues on windows are fixed.
|
||||
rpl.rpl_semi_sync : lsoares 2011-02-11 BUG#11769332 Anitha asked me to disable this until plugin issues on windows are fixed.
|
||||
sys_vars.rpl_semi_sync_master_enabled_basic : lsoares 2011-02-11 BUG#11769332 Anitha asked me to disable this until plugin issues on windows are fixed.
|
||||
sys_vars.rpl_semi_sync_master_timeout_basic : lsoares 2011-02-11 BUG#11769332 Anitha asked me to disable this until plugin issues on windows are fixed.
|
||||
sys_vars.rpl_semi_sync_master_trace_level_basic : lsoares 2011-02-11 BUG#11769332 Anitha asked me to disable this until plugin issues on windows are fixed.
|
||||
sys_vars.rpl_semi_sync_master_wait_no_slave_basic : lsoares 2011-02-11 BUG#11769332 Anitha asked me to disable this until plugin issues on windows are fixed.
|
||||
sys_vars.rpl_semi_sync_slave_enabled_basic : lsoares 2011-02-11 BUG#11769332 Anitha asked me to disable this until plugin issues on windows are fixed.
|
||||
sys_vars.rpl_semi_sync_slave_trace_level_basic : lsoares 2011-02-11 BUG#11769332 Anitha asked me to disable this until plugin issues on windows are fixed.
|
||||
sys_vars.all_vars : lsoares 2011-02-11 BUG#11769332 Anitha asked me to disable this until plugin issues on windows are fixed.
|
@ -2,22 +2,24 @@
|
||||
|
||||
#
|
||||
# BUG#5551 "Failed OPTIMIZE TABLE is logged to binary log"
|
||||
# Replication should work when OPTIMIZE TABLE timeouts, and
|
||||
# when OPTIMIZE TABLE is executed on a non-existing table
|
||||
# Replication should work when when OPTIMIZE TABLE is
|
||||
# executed on a non-existing table.
|
||||
#
|
||||
# Due to patch for BUG#989, checking that an OPTIMIZE
|
||||
# that fails due to a lock wait timeout on an InnoDB table
|
||||
# is not valid anymore, as an mdl lock is hit before,
|
||||
# thence no timeout occurs, but instead a deadlock.
|
||||
#
|
||||
|
||||
|
||||
eval CREATE TABLE t1 ( a int ) ENGINE=$engine_type;
|
||||
BEGIN;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
connection master1;
|
||||
OPTIMIZE TABLE t1;
|
||||
|
||||
OPTIMIZE TABLE non_existing;
|
||||
sync_slave_with_master;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
connection master;
|
||||
select * from t1;
|
||||
commit;
|
||||
|
@ -61,7 +61,7 @@ let $_show_status_value= query_get_value("SHOW $status_type STATUS LIKE '$status
|
||||
|
||||
# Set way of comparing
|
||||
let $_query= SELECT NOT('$_show_status_value' $_status_var_comparsion '$status_var_value');
|
||||
if ($is_number)
|
||||
if ($_is_number)
|
||||
{
|
||||
let $_query= SELECT NOT($_show_status_value $_status_var_comparsion $status_var_value);
|
||||
}
|
||||
@ -70,7 +70,7 @@ while (`$_query`)
|
||||
{
|
||||
if (!$_status_timeout_counter)
|
||||
{
|
||||
--echo **** ERROR: failed while waiting for $status_type $status_var $_status_var_comparison $status_var_value ****
|
||||
--echo **** ERROR: failed while waiting for $status_type $status_var $_status_var_comparsion $status_var_value ****
|
||||
--echo Note: the following output may have changed since the failure was detected
|
||||
--echo **** Showing STATUS, PROCESSLIST ****
|
||||
eval SHOW $status_type STATUS LIKE '$status_var';
|
||||
|
@ -1560,12 +1560,6 @@ sub command_line_setup {
|
||||
$debug_d= "d,query,info,error,enter,exit";
|
||||
}
|
||||
|
||||
if ($opt_debug && $opt_debug ne "1")
|
||||
{
|
||||
$debug_d= "d,$opt_debug";
|
||||
$debug_d= "d,query,info,error,enter,exit" if $opt_debug eq "std";
|
||||
}
|
||||
|
||||
mtr_report("Checking supported features...");
|
||||
|
||||
check_ndbcluster_support(\%mysqld_variables);
|
||||
@ -2166,6 +2160,7 @@ sub environment_setup {
|
||||
$ENV{'MYSQL_TMP_DIR'}= $opt_tmpdir;
|
||||
$ENV{'MYSQLTEST_VARDIR'}= $opt_vardir;
|
||||
$ENV{'MYSQL_LIBDIR'}= "$basedir/lib";
|
||||
$ENV{'MYSQL_BINDIR'}= "$bindir";
|
||||
$ENV{'MYSQL_SHAREDIR'}= $path_language;
|
||||
$ENV{'MYSQL_CHARSETSDIR'}= $path_charsetsdir;
|
||||
|
||||
|
@ -1383,3 +1383,11 @@ ALTER TABLE t1 CHANGE a id INT;
|
||||
affected rows: 0
|
||||
info: Records: 0 Duplicates: 0 Warnings: 0
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#11754461 CANNOT ALTER TABLE WHEN KEY PREFIX TOO LONG
|
||||
#
|
||||
DROP DATABASE IF EXISTS db1;
|
||||
CREATE DATABASE db1 CHARACTER SET utf8;
|
||||
CREATE TABLE db1.t1 (bar TINYTEXT, KEY (bar(100)));
|
||||
ALTER TABLE db1.t1 ADD baz INT;
|
||||
DROP DATABASE db1;
|
||||
|
@ -238,3 +238,6 @@ select a from t1 where a like "abcdefgh
|
||||
a
|
||||
abcdefgh<EFBFBD>
|
||||
drop table t1;
|
||||
set global LC_MESSAGES=convert((@@global.log_bin_trust_function_creators)
|
||||
using cp1250);
|
||||
ERROR HY000: Unknown locale: '1'
|
||||
|
@ -386,6 +386,8 @@ FD FD FD D18D FD
|
||||
FE FE FE D18E FE
|
||||
FF FF FF D18F FF
|
||||
DROP TABLE t1;
|
||||
set global LC_TIME_NAMES=convert((-8388608) using cp1251);
|
||||
ERROR HY000: Unknown locale: '-8388608'
|
||||
#
|
||||
# End of 5.1 tests
|
||||
#
|
||||
@ -3217,5 +3219,20 @@ maketime(`a`,`a`,`a`)
|
||||
DROP TABLE t1;
|
||||
SET sql_mode=default;
|
||||
#
|
||||
# Bug#60101 COALESCE with cp1251 tables causes [Err] 1267 - Illegal mix of collations
|
||||
#
|
||||
CREATE TABLE t1 (test1 INT, test2 VARCHAR(255));
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`test1` int(11) DEFAULT NULL,
|
||||
`test2` varchar(255) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
SELECT COALESCE(IF(test1=1, 1, NULL), test2) FROM t1;
|
||||
COALESCE(IF(test1=1, 1, NULL), test2)
|
||||
SELECT COALESCE(IF(test1=1, NULL, 1), test2) FROM t1;
|
||||
COALESCE(IF(test1=1, NULL, 1), test2)
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# End of 5.5 tests
|
||||
#
|
||||
|
@ -9859,6 +9859,8 @@ hex(convert(_eucjpms 0xA5FE41 using ucs2))
|
||||
select hex(convert(_eucjpms 0x8FABF841 using ucs2));
|
||||
hex(convert(_eucjpms 0x8FABF841 using ucs2))
|
||||
003F0041
|
||||
set global LC_TIME_NAMES=convert((convert((0x63) using eucjpms)) using utf8);
|
||||
ERROR HY000: Unknown locale: 'c'
|
||||
#
|
||||
# Start of 5.5 tests
|
||||
#
|
||||
|
@ -218,6 +218,12 @@ hex(a) hex(lower(a)) hex(upper(a))
|
||||
8352835E 8352835E 8352835E
|
||||
8372835E 8372835E 8372835E
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#11766519 - Bug#59648: MY_STRTOLL10_MB2: ASSERTION `(*ENDPTR - S) % 2 == 0' FAILED.
|
||||
#
|
||||
SELECT QUOTE('<27>\');
|
||||
QUOTE('<27>\')
|
||||
'<27>\'
|
||||
# End of 5.1 tests
|
||||
#
|
||||
# Start of 5.5 tests
|
||||
|
@ -990,8 +990,8 @@ old_password(name)
|
||||
14e500b131773991
|
||||
select quote(name) from bug20536;
|
||||
quote(name)
|
||||
????????
|
||||
????????????????
|
||||
'test1'
|
||||
'\'test\\_2\''
|
||||
drop table bug20536;
|
||||
set names ucs2;
|
||||
ERROR 42000: Variable 'character_set_client' can't be set to the value of 'ucs2'
|
||||
@ -1238,6 +1238,17 @@ CREATE VIEW v1 AS SELECT 1 from t1
|
||||
WHERE t1.b <=> (SELECT a FROM t1 WHERE a < SOME(SELECT '1'));
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#59648 my_strtoll10_mb2: Assertion `(*endptr - s) % 2 == 0' failed.
|
||||
#
|
||||
SELECT HEX(CHAR(COALESCE(NULL, CHAR(COUNT('%s') USING ucs2), 1, @@global.license, NULL) USING cp850));
|
||||
HEX(CHAR(COALESCE(NULL, CHAR(COUNT('%s') USING ucs2), 1, @@global.license, NULL) USING cp850))
|
||||
00
|
||||
SELECT CONVERT(QUOTE(CHAR(0xf5 using ucs2)), SIGNED);
|
||||
CONVERT(QUOTE(CHAR(0xf5 using ucs2)), SIGNED)
|
||||
0
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect INTEGER value: ''
|
||||
End of 5.0 tests
|
||||
#
|
||||
# Start of 5.5 tests
|
||||
|
@ -30,13 +30,13 @@ binary 'a a' > 'a' binary 'a \0' > 'a' binary 'a\0' > 'a'
|
||||
1 1 1
|
||||
select hex(_utf16 0x44);
|
||||
hex(_utf16 0x44)
|
||||
00000044
|
||||
0044
|
||||
select hex(_utf16 0x3344);
|
||||
hex(_utf16 0x3344)
|
||||
3344
|
||||
select hex(_utf16 0x113344);
|
||||
hex(_utf16 0x113344)
|
||||
000000113344
|
||||
00113344
|
||||
CREATE TABLE t1 (word VARCHAR(64), word2 CHAR(64)) CHARACTER SET utf16;
|
||||
INSERT INTO t1 VALUES (_koi8r 0xF2, _koi8r 0xF2), (X'2004',X'2004');
|
||||
SELECT hex(word) FROM t1 ORDER BY word;
|
||||
@ -434,10 +434,10 @@ aardvarz
|
||||
DROP TABLE t1;
|
||||
SELECT hex(cast(0xAA as char character set utf16));
|
||||
hex(cast(0xAA as char character set utf16))
|
||||
000000AA
|
||||
00AA
|
||||
SELECT hex(convert(0xAA using utf16));
|
||||
hex(convert(0xAA using utf16))
|
||||
000000AA
|
||||
00AA
|
||||
CREATE TABLE t1 (a char(10) character set utf16);
|
||||
INSERT INTO t1 VALUES (0x1),(0x11),(0x111),(0x1111),(0x11111);
|
||||
SELECT HEX(a) FROM t1;
|
||||
@ -1102,5 +1102,20 @@ t2 CREATE TABLE `t2` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1, t2;
|
||||
#
|
||||
# Bug#11753363 (Bug#44793) Character sets: case clause, ucs2 or utf32, failure
|
||||
#
|
||||
SELECT CASE _latin1'a' WHEN _utf16'a' THEN 'A' END;
|
||||
CASE _latin1'a' WHEN _utf16'a' THEN 'A' END
|
||||
A
|
||||
SELECT CASE _utf16'a' WHEN _latin1'a' THEN 'A' END;
|
||||
CASE _utf16'a' WHEN _latin1'a' THEN 'A' END
|
||||
A
|
||||
CREATE TABLE t1 (s1 CHAR(5) CHARACTER SET utf16);
|
||||
INSERT INTO t1 VALUES ('a');
|
||||
SELECT CASE s1 WHEN 'a' THEN 'b' ELSE 'c' END FROM t1;
|
||||
CASE s1 WHEN 'a' THEN 'b' ELSE 'c' END
|
||||
b
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# End of 5.5 tests
|
||||
#
|
||||
|
@ -1152,5 +1152,20 @@ d
|
||||
f
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#11753363 (Bug#44793) Character sets: case clause, ucs2 or utf32, failure
|
||||
#
|
||||
SELECT CASE _latin1'a' WHEN _utf32'a' THEN 'A' END;
|
||||
CASE _latin1'a' WHEN _utf32'a' THEN 'A' END
|
||||
A
|
||||
SELECT CASE _utf32'a' WHEN _latin1'a' THEN 'A' END;
|
||||
CASE _utf32'a' WHEN _latin1'a' THEN 'A' END
|
||||
A
|
||||
CREATE TABLE t1 (s1 CHAR(5) CHARACTER SET utf32);
|
||||
INSERT INTO t1 VALUES ('a');
|
||||
SELECT CASE s1 WHEN 'a' THEN 'b' ELSE 'c' END FROM t1;
|
||||
CASE s1 WHEN 'a' THEN 'b' ELSE 'c' END
|
||||
b
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# End of 5.5 tests
|
||||
#
|
||||
|
@ -724,7 +724,7 @@ utf8_general_ci utf8_general_ci
|
||||
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `mysqltest1` /*!40100 DEFAULT CHARACTER SET cp866 */;
|
||||
|
||||
USE `mysqltest1`;
|
||||
ALTER DATABASE mysqltest1 CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
ALTER DATABASE `mysqltest1` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
|
||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
|
||||
@ -757,8 +757,8 @@ DELIMITER ;
|
||||
/*!50003 SET character_set_client = @saved_cs_client */ ;
|
||||
/*!50003 SET character_set_results = @saved_cs_results */ ;
|
||||
/*!50003 SET collation_connection = @saved_col_connection */ ;
|
||||
ALTER DATABASE mysqltest1 CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
ALTER DATABASE mysqltest1 CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
ALTER DATABASE `mysqltest1` CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
ALTER DATABASE `mysqltest1` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
|
||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
|
||||
@ -791,7 +791,7 @@ DELIMITER ;
|
||||
/*!50003 SET character_set_client = @saved_cs_client */ ;
|
||||
/*!50003 SET character_set_results = @saved_cs_results */ ;
|
||||
/*!50003 SET collation_connection = @saved_col_connection */ ;
|
||||
ALTER DATABASE mysqltest1 CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
ALTER DATABASE `mysqltest1` CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
|
||||
---> Dumping mysqltest1 to ddl_i18n_koi8r.sp.mysqltest1.sql
|
||||
|
||||
@ -800,7 +800,7 @@ ALTER DATABASE mysqltest1 CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `mysqltest2` /*!40100 DEFAULT CHARACTER SET cp866 */;
|
||||
|
||||
USE `mysqltest2`;
|
||||
ALTER DATABASE mysqltest2 CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
ALTER DATABASE `mysqltest2` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
|
||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
|
||||
@ -833,8 +833,8 @@ DELIMITER ;
|
||||
/*!50003 SET character_set_client = @saved_cs_client */ ;
|
||||
/*!50003 SET character_set_results = @saved_cs_results */ ;
|
||||
/*!50003 SET collation_connection = @saved_col_connection */ ;
|
||||
ALTER DATABASE mysqltest2 CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
ALTER DATABASE mysqltest2 CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
ALTER DATABASE `mysqltest2` CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
ALTER DATABASE `mysqltest2` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
|
||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
|
||||
@ -867,7 +867,7 @@ DELIMITER ;
|
||||
/*!50003 SET character_set_client = @saved_cs_client */ ;
|
||||
/*!50003 SET character_set_results = @saved_cs_results */ ;
|
||||
/*!50003 SET collation_connection = @saved_col_connection */ ;
|
||||
ALTER DATABASE mysqltest2 CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
ALTER DATABASE `mysqltest2` CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
|
||||
---> Dumping mysqltest2 to ddl_i18n_koi8r.sp.mysqltest2.sql
|
||||
|
||||
@ -1742,7 +1742,7 @@ CREATE TABLE `t1` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
INSERT INTO `t1` VALUES (1),(0),(1);
|
||||
ALTER DATABASE mysqltest1 CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
ALTER DATABASE `mysqltest1` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
|
||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
|
||||
@ -1770,8 +1770,8 @@ DELIMITER ;
|
||||
/*!50003 SET character_set_client = @saved_cs_client */ ;
|
||||
/*!50003 SET character_set_results = @saved_cs_results */ ;
|
||||
/*!50003 SET collation_connection = @saved_col_connection */ ;
|
||||
ALTER DATABASE mysqltest1 CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
ALTER DATABASE mysqltest1 CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
ALTER DATABASE `mysqltest1` CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
ALTER DATABASE `mysqltest1` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
|
||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
|
||||
@ -1799,7 +1799,7 @@ DELIMITER ;
|
||||
/*!50003 SET character_set_client = @saved_cs_client */ ;
|
||||
/*!50003 SET character_set_results = @saved_cs_results */ ;
|
||||
/*!50003 SET collation_connection = @saved_col_connection */ ;
|
||||
ALTER DATABASE mysqltest1 CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
ALTER DATABASE `mysqltest1` CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
|
||||
---> Dumping mysqltest1 to ddl_i18n_koi8r.triggers.mysqltest1.sql
|
||||
|
||||
@ -1821,7 +1821,7 @@ CREATE TABLE `t1` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
INSERT INTO `t1` VALUES (1),(0),(1);
|
||||
ALTER DATABASE mysqltest2 CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
ALTER DATABASE `mysqltest2` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
|
||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
|
||||
@ -1849,8 +1849,8 @@ DELIMITER ;
|
||||
/*!50003 SET character_set_client = @saved_cs_client */ ;
|
||||
/*!50003 SET character_set_results = @saved_cs_results */ ;
|
||||
/*!50003 SET collation_connection = @saved_col_connection */ ;
|
||||
ALTER DATABASE mysqltest2 CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
ALTER DATABASE mysqltest2 CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
ALTER DATABASE `mysqltest2` CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
ALTER DATABASE `mysqltest2` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
|
||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
|
||||
@ -1878,7 +1878,7 @@ DELIMITER ;
|
||||
/*!50003 SET character_set_client = @saved_cs_client */ ;
|
||||
/*!50003 SET character_set_results = @saved_cs_results */ ;
|
||||
/*!50003 SET collation_connection = @saved_col_connection */ ;
|
||||
ALTER DATABASE mysqltest2 CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
ALTER DATABASE `mysqltest2` CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
|
||||
---> Dumping mysqltest2 to ddl_i18n_koi8r.triggers.mysqltest2.sql
|
||||
|
||||
@ -2486,7 +2486,7 @@ CREATE DATABASE /*!32312 IF NOT EXISTS*/ `mysqltest1` /*!40100 DEFAULT CHARACTER
|
||||
USE `mysqltest1`;
|
||||
/*!50106 SET @save_time_zone= @@TIME_ZONE */ ;
|
||||
DELIMITER ;;
|
||||
ALTER DATABASE mysqltest1 CHARACTER SET utf8 COLLATE utf8_unicode_ci ;;
|
||||
ALTER DATABASE `mysqltest1` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;;
|
||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;;
|
||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;;
|
||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;;
|
||||
@ -2512,9 +2512,9 @@ END */ ;;
|
||||
/*!50003 SET character_set_client = @saved_cs_client */ ;;
|
||||
/*!50003 SET character_set_results = @saved_cs_results */ ;;
|
||||
/*!50003 SET collation_connection = @saved_col_connection */ ;;
|
||||
ALTER DATABASE mysqltest1 CHARACTER SET cp866 COLLATE cp866_general_ci ;;
|
||||
ALTER DATABASE `mysqltest1` CHARACTER SET cp866 COLLATE cp866_general_ci ;;
|
||||
DELIMITER ;;
|
||||
ALTER DATABASE mysqltest1 CHARACTER SET utf8 COLLATE utf8_unicode_ci ;;
|
||||
ALTER DATABASE `mysqltest1` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;;
|
||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;;
|
||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;;
|
||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;;
|
||||
@ -2540,7 +2540,7 @@ END */ ;;
|
||||
/*!50003 SET character_set_client = @saved_cs_client */ ;;
|
||||
/*!50003 SET character_set_results = @saved_cs_results */ ;;
|
||||
/*!50003 SET collation_connection = @saved_col_connection */ ;;
|
||||
ALTER DATABASE mysqltest1 CHARACTER SET cp866 COLLATE cp866_general_ci ;;
|
||||
ALTER DATABASE `mysqltest1` CHARACTER SET cp866 COLLATE cp866_general_ci ;;
|
||||
DELIMITER ;
|
||||
/*!50106 SET TIME_ZONE= @save_time_zone */ ;
|
||||
|
||||
@ -2553,7 +2553,7 @@ CREATE DATABASE /*!32312 IF NOT EXISTS*/ `mysqltest2` /*!40100 DEFAULT CHARACTER
|
||||
USE `mysqltest2`;
|
||||
/*!50106 SET @save_time_zone= @@TIME_ZONE */ ;
|
||||
DELIMITER ;;
|
||||
ALTER DATABASE mysqltest2 CHARACTER SET utf8 COLLATE utf8_unicode_ci ;;
|
||||
ALTER DATABASE `mysqltest2` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;;
|
||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;;
|
||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;;
|
||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;;
|
||||
@ -2579,9 +2579,9 @@ END */ ;;
|
||||
/*!50003 SET character_set_client = @saved_cs_client */ ;;
|
||||
/*!50003 SET character_set_results = @saved_cs_results */ ;;
|
||||
/*!50003 SET collation_connection = @saved_col_connection */ ;;
|
||||
ALTER DATABASE mysqltest2 CHARACTER SET cp866 COLLATE cp866_general_ci ;;
|
||||
ALTER DATABASE `mysqltest2` CHARACTER SET cp866 COLLATE cp866_general_ci ;;
|
||||
DELIMITER ;;
|
||||
ALTER DATABASE mysqltest2 CHARACTER SET utf8 COLLATE utf8_unicode_ci ;;
|
||||
ALTER DATABASE `mysqltest2` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;;
|
||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;;
|
||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;;
|
||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;;
|
||||
@ -2607,7 +2607,7 @@ END */ ;;
|
||||
/*!50003 SET character_set_client = @saved_cs_client */ ;;
|
||||
/*!50003 SET character_set_results = @saved_cs_results */ ;;
|
||||
/*!50003 SET collation_connection = @saved_col_connection */ ;;
|
||||
ALTER DATABASE mysqltest2 CHARACTER SET cp866 COLLATE cp866_general_ci ;;
|
||||
ALTER DATABASE `mysqltest2` CHARACTER SET cp866 COLLATE cp866_general_ci ;;
|
||||
DELIMITER ;
|
||||
/*!50106 SET TIME_ZONE= @save_time_zone */ ;
|
||||
|
||||
|
@ -724,7 +724,7 @@ utf8_general_ci utf8_general_ci
|
||||
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `mysqltest1` /*!40100 DEFAULT CHARACTER SET cp866 */;
|
||||
|
||||
USE `mysqltest1`;
|
||||
ALTER DATABASE mysqltest1 CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
ALTER DATABASE `mysqltest1` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
|
||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
|
||||
@ -757,8 +757,8 @@ DELIMITER ;
|
||||
/*!50003 SET character_set_client = @saved_cs_client */ ;
|
||||
/*!50003 SET character_set_results = @saved_cs_results */ ;
|
||||
/*!50003 SET collation_connection = @saved_col_connection */ ;
|
||||
ALTER DATABASE mysqltest1 CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
ALTER DATABASE mysqltest1 CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
ALTER DATABASE `mysqltest1` CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
ALTER DATABASE `mysqltest1` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
|
||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
|
||||
@ -791,7 +791,7 @@ DELIMITER ;
|
||||
/*!50003 SET character_set_client = @saved_cs_client */ ;
|
||||
/*!50003 SET character_set_results = @saved_cs_results */ ;
|
||||
/*!50003 SET collation_connection = @saved_col_connection */ ;
|
||||
ALTER DATABASE mysqltest1 CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
ALTER DATABASE `mysqltest1` CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
|
||||
---> Dumping mysqltest1 to ddl_i18n_utf8sp.mysqltest1.sql
|
||||
|
||||
@ -800,7 +800,7 @@ ALTER DATABASE mysqltest1 CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `mysqltest2` /*!40100 DEFAULT CHARACTER SET cp866 */;
|
||||
|
||||
USE `mysqltest2`;
|
||||
ALTER DATABASE mysqltest2 CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
ALTER DATABASE `mysqltest2` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
|
||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
|
||||
@ -833,8 +833,8 @@ DELIMITER ;
|
||||
/*!50003 SET character_set_client = @saved_cs_client */ ;
|
||||
/*!50003 SET character_set_results = @saved_cs_results */ ;
|
||||
/*!50003 SET collation_connection = @saved_col_connection */ ;
|
||||
ALTER DATABASE mysqltest2 CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
ALTER DATABASE mysqltest2 CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
ALTER DATABASE `mysqltest2` CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
ALTER DATABASE `mysqltest2` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
|
||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
|
||||
@ -867,7 +867,7 @@ DELIMITER ;
|
||||
/*!50003 SET character_set_client = @saved_cs_client */ ;
|
||||
/*!50003 SET character_set_results = @saved_cs_results */ ;
|
||||
/*!50003 SET collation_connection = @saved_col_connection */ ;
|
||||
ALTER DATABASE mysqltest2 CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
ALTER DATABASE `mysqltest2` CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
|
||||
---> Dumping mysqltest2 to ddl_i18n_utf8sp.mysqltest2.sql
|
||||
|
||||
@ -1742,7 +1742,7 @@ CREATE TABLE `t1` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
INSERT INTO `t1` VALUES (1),(0),(1);
|
||||
ALTER DATABASE mysqltest1 CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
ALTER DATABASE `mysqltest1` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
|
||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
|
||||
@ -1770,8 +1770,8 @@ DELIMITER ;
|
||||
/*!50003 SET character_set_client = @saved_cs_client */ ;
|
||||
/*!50003 SET character_set_results = @saved_cs_results */ ;
|
||||
/*!50003 SET collation_connection = @saved_col_connection */ ;
|
||||
ALTER DATABASE mysqltest1 CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
ALTER DATABASE mysqltest1 CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
ALTER DATABASE `mysqltest1` CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
ALTER DATABASE `mysqltest1` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
|
||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
|
||||
@ -1799,7 +1799,7 @@ DELIMITER ;
|
||||
/*!50003 SET character_set_client = @saved_cs_client */ ;
|
||||
/*!50003 SET character_set_results = @saved_cs_results */ ;
|
||||
/*!50003 SET collation_connection = @saved_col_connection */ ;
|
||||
ALTER DATABASE mysqltest1 CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
ALTER DATABASE `mysqltest1` CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
|
||||
---> Dumping mysqltest1 to ddl_i18n_utf8triggers.mysqltest1.sql
|
||||
|
||||
@ -1821,7 +1821,7 @@ CREATE TABLE `t1` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
INSERT INTO `t1` VALUES (1),(0),(1);
|
||||
ALTER DATABASE mysqltest2 CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
ALTER DATABASE `mysqltest2` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
|
||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
|
||||
@ -1849,8 +1849,8 @@ DELIMITER ;
|
||||
/*!50003 SET character_set_client = @saved_cs_client */ ;
|
||||
/*!50003 SET character_set_results = @saved_cs_results */ ;
|
||||
/*!50003 SET collation_connection = @saved_col_connection */ ;
|
||||
ALTER DATABASE mysqltest2 CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
ALTER DATABASE mysqltest2 CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
ALTER DATABASE `mysqltest2` CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
ALTER DATABASE `mysqltest2` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
|
||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
|
||||
@ -1878,7 +1878,7 @@ DELIMITER ;
|
||||
/*!50003 SET character_set_client = @saved_cs_client */ ;
|
||||
/*!50003 SET character_set_results = @saved_cs_results */ ;
|
||||
/*!50003 SET collation_connection = @saved_col_connection */ ;
|
||||
ALTER DATABASE mysqltest2 CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
ALTER DATABASE `mysqltest2` CHARACTER SET cp866 COLLATE cp866_general_ci ;
|
||||
|
||||
---> Dumping mysqltest2 to ddl_i18n_utf8triggers.mysqltest2.sql
|
||||
|
||||
@ -2486,7 +2486,7 @@ CREATE DATABASE /*!32312 IF NOT EXISTS*/ `mysqltest1` /*!40100 DEFAULT CHARACTER
|
||||
USE `mysqltest1`;
|
||||
/*!50106 SET @save_time_zone= @@TIME_ZONE */ ;
|
||||
DELIMITER ;;
|
||||
ALTER DATABASE mysqltest1 CHARACTER SET utf8 COLLATE utf8_unicode_ci ;;
|
||||
ALTER DATABASE `mysqltest1` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;;
|
||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;;
|
||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;;
|
||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;;
|
||||
@ -2512,9 +2512,9 @@ END */ ;;
|
||||
/*!50003 SET character_set_client = @saved_cs_client */ ;;
|
||||
/*!50003 SET character_set_results = @saved_cs_results */ ;;
|
||||
/*!50003 SET collation_connection = @saved_col_connection */ ;;
|
||||
ALTER DATABASE mysqltest1 CHARACTER SET cp866 COLLATE cp866_general_ci ;;
|
||||
ALTER DATABASE `mysqltest1` CHARACTER SET cp866 COLLATE cp866_general_ci ;;
|
||||
DELIMITER ;;
|
||||
ALTER DATABASE mysqltest1 CHARACTER SET utf8 COLLATE utf8_unicode_ci ;;
|
||||
ALTER DATABASE `mysqltest1` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;;
|
||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;;
|
||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;;
|
||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;;
|
||||
@ -2540,7 +2540,7 @@ END */ ;;
|
||||
/*!50003 SET character_set_client = @saved_cs_client */ ;;
|
||||
/*!50003 SET character_set_results = @saved_cs_results */ ;;
|
||||
/*!50003 SET collation_connection = @saved_col_connection */ ;;
|
||||
ALTER DATABASE mysqltest1 CHARACTER SET cp866 COLLATE cp866_general_ci ;;
|
||||
ALTER DATABASE `mysqltest1` CHARACTER SET cp866 COLLATE cp866_general_ci ;;
|
||||
DELIMITER ;
|
||||
/*!50106 SET TIME_ZONE= @save_time_zone */ ;
|
||||
|
||||
@ -2553,7 +2553,7 @@ CREATE DATABASE /*!32312 IF NOT EXISTS*/ `mysqltest2` /*!40100 DEFAULT CHARACTER
|
||||
USE `mysqltest2`;
|
||||
/*!50106 SET @save_time_zone= @@TIME_ZONE */ ;
|
||||
DELIMITER ;;
|
||||
ALTER DATABASE mysqltest2 CHARACTER SET utf8 COLLATE utf8_unicode_ci ;;
|
||||
ALTER DATABASE `mysqltest2` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;;
|
||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;;
|
||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;;
|
||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;;
|
||||
@ -2579,9 +2579,9 @@ END */ ;;
|
||||
/*!50003 SET character_set_client = @saved_cs_client */ ;;
|
||||
/*!50003 SET character_set_results = @saved_cs_results */ ;;
|
||||
/*!50003 SET collation_connection = @saved_col_connection */ ;;
|
||||
ALTER DATABASE mysqltest2 CHARACTER SET cp866 COLLATE cp866_general_ci ;;
|
||||
ALTER DATABASE `mysqltest2` CHARACTER SET cp866 COLLATE cp866_general_ci ;;
|
||||
DELIMITER ;;
|
||||
ALTER DATABASE mysqltest2 CHARACTER SET utf8 COLLATE utf8_unicode_ci ;;
|
||||
ALTER DATABASE `mysqltest2` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;;
|
||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;;
|
||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;;
|
||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;;
|
||||
@ -2607,7 +2607,7 @@ END */ ;;
|
||||
/*!50003 SET character_set_client = @saved_cs_client */ ;;
|
||||
/*!50003 SET character_set_results = @saved_cs_results */ ;;
|
||||
/*!50003 SET collation_connection = @saved_col_connection */ ;;
|
||||
ALTER DATABASE mysqltest2 CHARACTER SET cp866 COLLATE cp866_general_ci ;;
|
||||
ALTER DATABASE `mysqltest2` CHARACTER SET cp866 COLLATE cp866_general_ci ;;
|
||||
DELIMITER ;
|
||||
/*!50106 SET TIME_ZONE= @save_time_zone */ ;
|
||||
|
||||
|
6
mysql-test/r/file_contents.result
Normal file
6
mysql-test/r/file_contents.result
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
Checking 'INFO_SRC' and 'INFO_BIN'
|
||||
INFO_SRC: Found MySQL version number / Found BZR revision id
|
||||
INFO_BIN: Found 'Compiler ... used' line / Found 'Feature flags' line
|
||||
|
||||
End of tests
|
@ -14,3 +14,20 @@ DELETE FROM t1 ORDER BY (f1(10)) LIMIT 1;
|
||||
ERROR 42000: Incorrect number of arguments for FUNCTION test.f1; expected 0, got 1
|
||||
DROP TABLE t1;
|
||||
DROP FUNCTION f1;
|
||||
#
|
||||
# Bug #11747102
|
||||
# 30771: LOG MORE INFO ABOUT THREADS KILL'D AND SORT ABORTED MESSAGES
|
||||
#
|
||||
# connection 1
|
||||
CREATE TABLE t1(f0 int auto_increment primary key, f1 int);
|
||||
INSERT INTO t1(f1) VALUES (0),(1),(2),(3),(4),(5);
|
||||
SET DEBUG_SYNC='filesort_start SIGNAL filesort_started WAIT_FOR filesort_killed';
|
||||
# Sending: (not reaped since connection is killed later)
|
||||
SELECT * FROM t1 ORDER BY f1 ASC, f0;
|
||||
# connection 2
|
||||
SET DEBUG_SYNC='now WAIT_FOR filesort_started';
|
||||
KILL @id;
|
||||
SET DEBUG_SYNC='now SIGNAL filesort_killed';
|
||||
# connection default
|
||||
SET DEBUG_SYNC= "RESET";
|
||||
DROP TABLE t1;
|
||||
|
19
mysql-test/r/func_encrypt_ucs2.result
Normal file
19
mysql-test/r/func_encrypt_ucs2.result
Normal file
@ -0,0 +1,19 @@
|
||||
#
|
||||
# Bug#59648 my_strtoll10_mb2: Assertion `(*endptr - s) % 2 == 0' failed.
|
||||
#
|
||||
SELECT CHAR_LENGTH(DES_ENCRYPT(0, CHAR('1' USING ucs2)));
|
||||
CHAR_LENGTH(DES_ENCRYPT(0, CHAR('1' USING ucs2)))
|
||||
9
|
||||
SELECT CONVERT(DES_ENCRYPT(0, CHAR('1' USING ucs2)),UNSIGNED);
|
||||
CONVERT(DES_ENCRYPT(0, CHAR('1' USING ucs2)),UNSIGNED)
|
||||
0
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect INTEGER value: ''
|
||||
SELECT CHAR_LENGTH(DES_DECRYPT(0xFF0DC9FC9537CA75F4, CHAR('1' USING ucs2)));
|
||||
CHAR_LENGTH(DES_DECRYPT(0xFF0DC9FC9537CA75F4, CHAR('1' USING ucs2)))
|
||||
4
|
||||
SELECT CONVERT(DES_DECRYPT(0xFF0DC9FC9537CA75F4, CHAR('1' using ucs2)), UNSIGNED);
|
||||
CONVERT(DES_DECRYPT(0xFF0DC9FC9537CA75F4, CHAR('1' using ucs2)), UNSIGNED)
|
||||
0
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect INTEGER value: 'test'
|
@ -136,7 +136,7 @@ dayname("1962-03-03") dayname("1962-03-03")+0
|
||||
Saturday 5
|
||||
select monthname("1972-03-04"),monthname("1972-03-04")+0;
|
||||
monthname("1972-03-04") monthname("1972-03-04")+0
|
||||
March 3
|
||||
March 0
|
||||
select time_format(19980131000000,'%H|%I|%k|%l|%i|%p|%r|%S|%T');
|
||||
time_format(19980131000000,'%H|%I|%k|%l|%i|%p|%r|%S|%T')
|
||||
00|12|0|12|00|AM|12:00:00 AM|00|00:00:00
|
||||
@ -1368,3 +1368,11 @@ SELECT SUBDATE(STR_TO_DATE(NULL,0), INTERVAL 1 HOUR);
|
||||
SUBDATE(STR_TO_DATE(NULL,0), INTERVAL 1 HOUR)
|
||||
NULL
|
||||
#
|
||||
# BUG#59895 - setting storage engine to null segfaults mysqld
|
||||
#
|
||||
SELECT MONTHNAME(0), MONTHNAME(0) IS NULL, MONTHNAME(0) + 1;
|
||||
MONTHNAME(0) MONTHNAME(0) IS NULL MONTHNAME(0) + 1
|
||||
NULL 1 NULL
|
||||
SET storage_engine=NULL;
|
||||
ERROR 42000: Variable 'storage_engine' can't be set to the value of 'NULL'
|
||||
#
|
||||
|
@ -1034,6 +1034,14 @@ p
|
||||
NULL
|
||||
NULL
|
||||
drop table t1;
|
||||
#
|
||||
# Test for bug #59888 "debug assertion when attempt to create spatial index
|
||||
# on char > 31 bytes".
|
||||
#
|
||||
create table t1(a char(32) not null) engine=myisam;
|
||||
create spatial index i on t1 (a);
|
||||
ERROR 42000: A SPATIAL index may only contain a geometrical type column
|
||||
drop table t1;
|
||||
End of 5.1 tests
|
||||
CREATE TABLE t1(
|
||||
col0 BINARY NOT NULL,
|
||||
|
@ -1856,6 +1856,42 @@ ON 1 WHERE t2.f1 > 1 GROUP BY t2.f1;
|
||||
COUNT(*)
|
||||
2
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#59839: Aggregation followed by subquery yields wrong result
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
a INT,
|
||||
b INT,
|
||||
c INT,
|
||||
KEY (a, b)
|
||||
);
|
||||
INSERT INTO t1 VALUES
|
||||
( 1, 1, 1 ),
|
||||
( 1, 2, 2 ),
|
||||
( 1, 3, 3 ),
|
||||
( 1, 4, 6 ),
|
||||
( 1, 5, 5 ),
|
||||
( 1, 9, 13 ),
|
||||
( 2, 1, 6 ),
|
||||
( 2, 2, 7 ),
|
||||
( 2, 3, 8 );
|
||||
EXPLAIN
|
||||
SELECT a, AVG(t1.b),
|
||||
(SELECT t11.c FROM t1 t11 WHERE t11.a = t1.a AND t11.b = AVG(t1.b)) AS t11c,
|
||||
(SELECT t12.c FROM t1 t12 WHERE t12.a = t1.a AND t12.b = AVG(t1.b)) AS t12c
|
||||
FROM t1 GROUP BY a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 index NULL a 10 NULL 9 Using index
|
||||
3 DEPENDENT SUBQUERY t12 ref a a 10 func,func 2 Using where
|
||||
2 DEPENDENT SUBQUERY t11 ref a a 10 func,func 2 Using where
|
||||
SELECT a, AVG(t1.b),
|
||||
(SELECT t11.c FROM t1 t11 WHERE t11.a = t1.a AND t11.b = AVG(t1.b)) AS t11c,
|
||||
(SELECT t12.c FROM t1 t12 WHERE t12.a = t1.a AND t12.b = AVG(t1.b)) AS t12c
|
||||
FROM t1 GROUP BY a;
|
||||
a AVG(t1.b) t11c t12c
|
||||
1 4.0000 6 6
|
||||
2 2.0000 7 7
|
||||
DROP TABLE t1;
|
||||
# End of 5.1 tests
|
||||
#
|
||||
# Bug#49771: Incorrect MIN (date) when minimum value is 0000-00-00
|
||||
|
@ -842,7 +842,7 @@ SET max_heap_table_size = 16384;
|
||||
SET @old_myisam_data_pointer_size = @@myisam_data_pointer_size;
|
||||
SET GLOBAL myisam_data_pointer_size = 2;
|
||||
INSERT INTO t1 VALUES (1), (2), (3), (4), (5);
|
||||
call mtr.add_suppression("mysqld: The table '.*#sql.*' is full");
|
||||
call mtr.add_suppression("mysqld.*: The table '.*#sql.*' is full");
|
||||
INSERT IGNORE INTO t1 SELECT t1.a FROM t1,t1 t2,t1 t3,t1 t4,t1 t5,t1 t6,t1 t7;
|
||||
Got one of the listed errors
|
||||
SET GLOBAL myisam_data_pointer_size = @old_myisam_data_pointer_size;
|
||||
|
@ -680,4 +680,21 @@ Warnings:
|
||||
Warning 1292 Truncated incorrect datetime value: '1'
|
||||
DROP FUNCTION f1;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# BUG#57373: Multi update+InnoDB reports ER_KEY_NOT_FOUND if a
|
||||
# table is updated twice
|
||||
#
|
||||
CREATE TABLE t1(
|
||||
pk INT,
|
||||
a INT,
|
||||
PRIMARY KEY (pk)
|
||||
) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES (0,0);
|
||||
UPDATE t1 AS A, t1 AS B SET A.pk = 1, B.a = 2;
|
||||
|
||||
# Should be (1,2)
|
||||
SELECT * FROM t1;
|
||||
pk a
|
||||
1 2
|
||||
DROP TABLE t1;
|
||||
end of tests
|
||||
|
29
mysql-test/r/multi_update_innodb.result
Normal file
29
mysql-test/r/multi_update_innodb.result
Normal file
@ -0,0 +1,29 @@
|
||||
#
|
||||
# BUG#57373: Multi update+InnoDB reports ER_KEY_NOT_FOUND if a
|
||||
# table is updated twice
|
||||
#
|
||||
CREATE TABLE t1(
|
||||
pk INT,
|
||||
a INT,
|
||||
b INT,
|
||||
PRIMARY KEY (pk)
|
||||
) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (0,0,0);
|
||||
UPDATE t1 AS A, t1 AS B SET A.pk = 1, B.a = 2;
|
||||
ERROR HY000: Primary key/partition key update is not allowed since the table is updated both as 'A' and 'B'.
|
||||
SELECT * FROM t1;
|
||||
pk a b
|
||||
0 0 0
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
UPDATE v1 AS A, t1 AS B SET A.pk = 1, B.a = 2;
|
||||
ERROR HY000: Primary key/partition key update is not allowed since the table is updated both as 'A' and 'B'.
|
||||
SELECT * FROM t1;
|
||||
pk a b
|
||||
0 0 0
|
||||
UPDATE t1 AS A, t1 AS B SET A.a = 1, B.b = 2;
|
||||
# Should be (0,1,2)
|
||||
SELECT * FROM t1;
|
||||
pk a b
|
||||
0 1 2
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
@ -4591,5 +4591,41 @@ CREATE TABLE `comment_table` (i INT COMMENT 'FIELD COMMENT') COMMENT = 'TABLE CO
|
||||
</mysqldump>
|
||||
DROP TABLE `comment_table`;
|
||||
#
|
||||
# BUG#11766310 : 59398: MYSQLDUMP 5.1 CAN'T HANDLE A DASH ("-") IN
|
||||
# DATABASE NAMES IN ALTER DATABASE
|
||||
#
|
||||
CREATE DATABASE `test-database`;
|
||||
USE `test-database`;
|
||||
CREATE TABLE `test` (`c1` VARCHAR(10)) ENGINE=MYISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
CREATE TRIGGER `trig` BEFORE INSERT ON `test` FOR EACH ROW BEGIN
|
||||
END |
|
||||
ALTER DATABASE `test-database` CHARACTER SET latin1 COLLATE latin1_swedish_ci;
|
||||
ALTER DATABASE `test-database` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `test` (
|
||||
`c1` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
ALTER DATABASE `test-database` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
|
||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
|
||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
|
||||
/*!50003 SET character_set_client = latin1 */ ;
|
||||
/*!50003 SET character_set_results = latin1 */ ;
|
||||
/*!50003 SET collation_connection = latin1_swedish_ci */ ;
|
||||
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
|
||||
/*!50003 SET sql_mode = '' */ ;
|
||||
DELIMITER ;;
|
||||
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER `trig` BEFORE INSERT ON `test` FOR EACH ROW BEGIN
|
||||
END */;;
|
||||
DELIMITER ;
|
||||
/*!50003 SET sql_mode = @saved_sql_mode */ ;
|
||||
/*!50003 SET character_set_client = @saved_cs_client */ ;
|
||||
/*!50003 SET character_set_results = @saved_cs_results */ ;
|
||||
/*!50003 SET collation_connection = @saved_col_connection */ ;
|
||||
ALTER DATABASE `test-database` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
DROP DATABASE `test-database`;
|
||||
#
|
||||
# End of 5.1 tests
|
||||
#
|
||||
|
@ -2264,3 +2264,51 @@ INSERT INTO t1 VALUES(0);
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL myisam_use_mmap=default;
|
||||
End of 5.1 tests
|
||||
#
|
||||
# BUG#55385: UPDATE statement throws an error, but still updates
|
||||
# the table entries
|
||||
CREATE TABLE t1_part (
|
||||
partkey int,
|
||||
nokey int
|
||||
) PARTITION BY LINEAR HASH(partkey) PARTITIONS 3;
|
||||
INSERT INTO t1_part VALUES (1, 1) , (10, 10);
|
||||
CREATE VIEW v1 AS SELECT * FROM t1_part;
|
||||
|
||||
# Should be (1,1),(10,10)
|
||||
SELECT * FROM t1_part;
|
||||
partkey nokey
|
||||
1 1
|
||||
10 10
|
||||
|
||||
# Case 1
|
||||
# Update is refused because partitioning key is updated
|
||||
UPDATE t1_part AS A NATURAL JOIN t1_part B SET A.partkey = 2, B.nokey = 3;
|
||||
ERROR HY000: Primary key/partition key update is not allowed since the table is updated both as 'A' and 'B'.
|
||||
UPDATE t1_part AS A NATURAL JOIN t1_part B SET A.nokey = 2, B.partkey = 3;
|
||||
ERROR HY000: Primary key/partition key update is not allowed since the table is updated both as 'A' and 'B'.
|
||||
|
||||
# Case 2
|
||||
# Like 1, but partition accessed through a view
|
||||
UPDATE t1_part AS A NATURAL JOIN v1 as B SET A.nokey = 2 , B.partkey = 3;
|
||||
ERROR HY000: Primary key/partition key update is not allowed since the table is updated both as 'A' and 'B'.
|
||||
UPDATE v1 AS A NATURAL JOIN t1_part as B SET A.nokey = 2 , B.partkey = 3;
|
||||
ERROR HY000: Primary key/partition key update is not allowed since the table is updated both as 'A' and 'B'.
|
||||
|
||||
# Should be (1,1),(10,10)
|
||||
SELECT * FROM t1_part;
|
||||
partkey nokey
|
||||
1 1
|
||||
10 10
|
||||
|
||||
# Case 3
|
||||
# Update is accepted because partitioning key is not updated
|
||||
UPDATE t1_part AS A NATURAL JOIN t1_part B SET A.nokey = 2 , B.nokey = 3;
|
||||
|
||||
# Should be (1,3),(10,3)
|
||||
SELECT * FROM t1_part;
|
||||
partkey nokey
|
||||
1 3
|
||||
10 3
|
||||
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1_part;
|
||||
|
@ -20,16 +20,16 @@ return 0;
|
||||
end $$
|
||||
show procedure code signal_proc;
|
||||
Pos Instruction
|
||||
0 stmt 131 "SIGNAL foo"
|
||||
1 stmt 131 "SIGNAL foo SET MESSAGE_TEXT = "This i..."
|
||||
2 stmt 132 "RESIGNAL foo"
|
||||
3 stmt 132 "RESIGNAL foo SET MESSAGE_TEXT = "This..."
|
||||
0 stmt 130 "SIGNAL foo"
|
||||
1 stmt 130 "SIGNAL foo SET MESSAGE_TEXT = "This i..."
|
||||
2 stmt 131 "RESIGNAL foo"
|
||||
3 stmt 131 "RESIGNAL foo SET MESSAGE_TEXT = "This..."
|
||||
drop procedure signal_proc;
|
||||
show function code signal_func;
|
||||
Pos Instruction
|
||||
0 stmt 131 "SIGNAL foo"
|
||||
1 stmt 131 "SIGNAL foo SET MESSAGE_TEXT = "This i..."
|
||||
2 stmt 132 "RESIGNAL foo"
|
||||
3 stmt 132 "RESIGNAL foo SET MESSAGE_TEXT = "This..."
|
||||
0 stmt 130 "SIGNAL foo"
|
||||
1 stmt 130 "SIGNAL foo SET MESSAGE_TEXT = "This i..."
|
||||
2 stmt 131 "RESIGNAL foo"
|
||||
3 stmt 131 "RESIGNAL foo SET MESSAGE_TEXT = "This..."
|
||||
4 freturn 3 0
|
||||
drop function signal_func;
|
||||
|
@ -155,11 +155,11 @@ Pos Instruction
|
||||
0 stmt 9 "drop temporary table if exists sudoku..."
|
||||
1 stmt 1 "create temporary table sudoku_work ( ..."
|
||||
2 stmt 1 "create temporary table sudoku_schedul..."
|
||||
3 stmt 89 "call sudoku_init()"
|
||||
3 stmt 88 "call sudoku_init()"
|
||||
4 jump_if_not 7(8) p_naive@0
|
||||
5 stmt 4 "update sudoku_work set cnt = 0 where ..."
|
||||
6 jump 8
|
||||
7 stmt 89 "call sudoku_count()"
|
||||
7 stmt 88 "call sudoku_count()"
|
||||
8 stmt 6 "insert into sudoku_schedule (row,col)..."
|
||||
9 set v_scounter@2 0
|
||||
10 set v_i@3 1
|
||||
|
@ -142,3 +142,27 @@ XA PREPARE 'x';
|
||||
XA PREPARE 'x';
|
||||
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the PREPARED state
|
||||
XA ROLLBACK 'x';
|
||||
#
|
||||
# Bug#59986 Assert in Diagnostics_area::set_ok_status() for XA COMMIT
|
||||
#
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a)) engine=InnoDB;
|
||||
INSERT INTO t1 VALUES (1, 1), (2, 2);
|
||||
# Connection con1
|
||||
XA START 'a';
|
||||
UPDATE t1 SET b= 3 WHERE a=1;
|
||||
# Connection default
|
||||
XA START 'b';
|
||||
UPDATE t1 SET b=4 WHERE a=2;
|
||||
# Sending:
|
||||
UPDATE t1 SET b=5 WHERE a=1;
|
||||
# Connection con1
|
||||
UPDATE t1 SET b=6 WHERE a=2;
|
||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||
XA COMMIT 'a';
|
||||
ERROR XA102: XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected
|
||||
# Connection default
|
||||
# Reaping: UPDATE t1 SET b=5 WHERE a=1
|
||||
XA END 'b';
|
||||
XA ROLLBACK 'b';
|
||||
DROP TABLE t1;
|
||||
|
@ -1124,6 +1124,14 @@ Warning 1525 Incorrect XML value: 'parse error at line 1 pos 2: END-OF-INPUT une
|
||||
SELECT UPDATEXML(CONVERT(_latin1'<!--' USING utf8),'1','1');
|
||||
UPDATEXML(CONVERT(_latin1'<!--' USING utf8),'1','1')
|
||||
NULL
|
||||
#
|
||||
# Bug#11766725 (bug#59901): EXTRACTVALUE STILL BROKEN AFTER FIX FOR BUG #44332
|
||||
#
|
||||
SELECT ExtractValue(CONVERT('<\"', BINARY(10)), 1);
|
||||
ExtractValue(CONVERT('<\"', BINARY(10)), 1)
|
||||
NULL
|
||||
Warnings:
|
||||
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 11: STRING unexpected (ident or '/' wanted)'
|
||||
End of 5.1 tests
|
||||
#
|
||||
# Start of 5.5 tests
|
||||
|
@ -2431,7 +2431,7 @@ c1 c2 c3 c4
|
||||
2155 2155 1998-12-26 1998-12-26 11:30:45
|
||||
SELECT count(*) as total_rows, min(c2) as min_value, max(c2) FROM t3;
|
||||
total_rows min_value max(c2)
|
||||
21 1901 2155
|
||||
21 0 2155
|
||||
SELECT * FROM t3 WHERE c3 = '1998-12-11';
|
||||
c1 c2 c3 c4
|
||||
1990 1990 1998-12-11 1998-12-11 11:30:45
|
||||
@ -2838,7 +2838,7 @@ c1 c2 c3 c4
|
||||
2155 2155 1998-12-26 1998-12-26 11:30:45
|
||||
SELECT count(*) as total_rows, min(c2) as min_value, max(c2) FROM t3;
|
||||
total_rows min_value max(c2)
|
||||
21 1901 2155
|
||||
21 0 2155
|
||||
SELECT * FROM t3 WHERE c3 = '1998-12-11';
|
||||
c1 c2 c3 c4
|
||||
1990 1990 1998-12-11 1998-12-11 11:30:45
|
||||
|
118
mysql-test/suite/innodb/r/innodb_bug53756.result
Normal file
118
mysql-test/suite/innodb/r/innodb_bug53756.result
Normal file
@ -0,0 +1,118 @@
|
||||
DROP TABLE IF EXISTS bug_53756 ;
|
||||
CREATE TABLE bug_53756 (pk INT, c1 INT) ENGINE=InnoDB;
|
||||
ALTER TABLE bug_53756 ADD PRIMARY KEY (pk);
|
||||
INSERT INTO bug_53756 VALUES(1, 11), (2, 22), (3, 33), (4, 44);
|
||||
|
||||
# Select a less restrictive isolation level.
|
||||
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
COMMIT;
|
||||
|
||||
# Start a transaction in the default connection for isolation.
|
||||
START TRANSACTION;
|
||||
SELECT @@tx_isolation;
|
||||
@@tx_isolation
|
||||
READ-COMMITTED
|
||||
SELECT * FROM bug_53756;
|
||||
pk c1
|
||||
1 11
|
||||
2 22
|
||||
3 33
|
||||
4 44
|
||||
|
||||
# connection con1 deletes row 1
|
||||
START TRANSACTION;
|
||||
SELECT @@tx_isolation;
|
||||
@@tx_isolation
|
||||
READ-COMMITTED
|
||||
DELETE FROM bug_53756 WHERE pk=1;
|
||||
|
||||
# connection con2 deletes row 2
|
||||
START TRANSACTION;
|
||||
SELECT @@tx_isolation;
|
||||
@@tx_isolation
|
||||
READ-COMMITTED
|
||||
DELETE FROM bug_53756 WHERE pk=2;
|
||||
|
||||
# connection con3 updates row 3
|
||||
START TRANSACTION;
|
||||
SELECT @@tx_isolation;
|
||||
@@tx_isolation
|
||||
READ-COMMITTED
|
||||
UPDATE bug_53756 SET c1=77 WHERE pk=3;
|
||||
|
||||
# connection con4 updates row 4
|
||||
START TRANSACTION;
|
||||
SELECT @@tx_isolation;
|
||||
@@tx_isolation
|
||||
READ-COMMITTED
|
||||
UPDATE bug_53756 SET c1=88 WHERE pk=4;
|
||||
|
||||
# connection con5 inserts row 5
|
||||
START TRANSACTION;
|
||||
SELECT @@tx_isolation;
|
||||
@@tx_isolation
|
||||
READ-COMMITTED
|
||||
INSERT INTO bug_53756 VALUES(5, 55);
|
||||
|
||||
# connection con6 inserts row 6
|
||||
START TRANSACTION;
|
||||
SELECT @@tx_isolation;
|
||||
@@tx_isolation
|
||||
READ-COMMITTED
|
||||
INSERT INTO bug_53756 VALUES(6, 66);
|
||||
|
||||
# connection con1 commits.
|
||||
COMMIT;
|
||||
|
||||
# connection con3 commits.
|
||||
COMMIT;
|
||||
|
||||
# connection con4 rolls back.
|
||||
ROLLBACK;
|
||||
|
||||
# connection con6 rolls back.
|
||||
ROLLBACK;
|
||||
|
||||
# The connections 2 and 5 stay open.
|
||||
|
||||
# connection default selects resulting data.
|
||||
# Delete of row 1 was committed.
|
||||
# Update of row 3 was committed.
|
||||
# Due to isolation level read committed, these should be included.
|
||||
# All other changes should not be included.
|
||||
SELECT * FROM bug_53756;
|
||||
pk c1
|
||||
2 22
|
||||
3 77
|
||||
4 44
|
||||
|
||||
# connection default
|
||||
#
|
||||
# Crash server.
|
||||
START TRANSACTION;
|
||||
INSERT INTO bug_53756 VALUES (666,666);
|
||||
SET SESSION debug="+d,crash_commit_before";
|
||||
COMMIT;
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
|
||||
#
|
||||
# disconnect con1, con2, con3, con4, con5, con6.
|
||||
#
|
||||
# Restart server.
|
||||
|
||||
#
|
||||
# Select recovered data.
|
||||
# Delete of row 1 was committed.
|
||||
# Update of row 3 was committed.
|
||||
# These should be included.
|
||||
# All other changes should not be included.
|
||||
# Delete of row 2 and insert of row 5 should be rolled back
|
||||
SELECT * FROM bug_53756;
|
||||
pk c1
|
||||
2 22
|
||||
3 77
|
||||
4 44
|
||||
|
||||
# Clean up.
|
||||
DROP TABLE bug_53756;
|
28
mysql-test/suite/innodb/r/innodb_bug59307.result
Normal file
28
mysql-test/suite/innodb/r/innodb_bug59307.result
Normal file
@ -0,0 +1,28 @@
|
||||
CREATE TABLE t1 (
|
||||
t1_int INT,
|
||||
t1_time TIME
|
||||
) ENGINE=innodb;
|
||||
CREATE TABLE t2 (
|
||||
t2_int int PRIMARY KEY,
|
||||
t2_int2 INT
|
||||
) ENGINE=INNODB;
|
||||
INSERT INTO t2 VALUES ();
|
||||
Warnings:
|
||||
Warning 1364 Field 't2_int' doesn't have a default value
|
||||
INSERT INTO t1 VALUES ();
|
||||
SELECT *
|
||||
FROM t1 AS t1a
|
||||
WHERE NOT EXISTS
|
||||
(SELECT *
|
||||
FROM t1 AS t1b
|
||||
WHERE t1b.t1_int NOT IN
|
||||
(SELECT t2.t2_int
|
||||
FROM t2
|
||||
WHERE t1b.t1_time LIKE t1b.t1_int
|
||||
OR t1b.t1_time <> t2.t2_int2
|
||||
AND 6=7
|
||||
)
|
||||
)
|
||||
;
|
||||
t1_int t1_time
|
||||
DROP TABLE t1,t2;
|
8
mysql-test/suite/innodb/r/innodb_bug60049.result
Normal file
8
mysql-test/suite/innodb/r/innodb_bug60049.result
Normal file
@ -0,0 +1,8 @@
|
||||
CREATE TABLE t(a INT)ENGINE=InnoDB;
|
||||
RENAME TABLE t TO u;
|
||||
DROP TABLE u;
|
||||
SELECT @@innodb_fast_shutdown;
|
||||
@@innodb_fast_shutdown
|
||||
0
|
||||
Last record of ID_IND root page (9):
|
||||
1808000018050074000000000000000c5359535f464f524549474e5f434f4c53
|
1
mysql-test/suite/innodb/t/innodb_bug53756-master.opt
Normal file
1
mysql-test/suite/innodb/t/innodb_bug53756-master.opt
Normal file
@ -0,0 +1 @@
|
||||
--skip-stack-trace --skip-core-file
|
184
mysql-test/suite/innodb/t/innodb_bug53756.test
Normal file
184
mysql-test/suite/innodb/t/innodb_bug53756.test
Normal file
@ -0,0 +1,184 @@
|
||||
# This is the test case for bug #53756. Alter table operation could
|
||||
# leave a deleted record for the temp table (later renamed to the altered
|
||||
# table) in the SYS_TABLES secondary index, we should ignore this row and
|
||||
# find the first non-deleted row for the specified table_id when load table
|
||||
# metadata in the function dict_load_table_on_id() during crash recovery.
|
||||
|
||||
#
|
||||
# innobackup needs to connect to the server. Not supported in embedded.
|
||||
--source include/not_embedded.inc
|
||||
#
|
||||
# This test case needs to crash the server. Needs a debug server.
|
||||
--source include/have_debug.inc
|
||||
#
|
||||
# Don't test this under valgrind, memory leaks will occur.
|
||||
--source include/not_valgrind.inc
|
||||
#
|
||||
# This test case needs InnoDB.
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
#
|
||||
# Precautionary clean up.
|
||||
#
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS bug_53756 ;
|
||||
--enable_warnings
|
||||
|
||||
#
|
||||
# Create test data.
|
||||
#
|
||||
CREATE TABLE bug_53756 (pk INT, c1 INT) ENGINE=InnoDB;
|
||||
ALTER TABLE bug_53756 ADD PRIMARY KEY (pk);
|
||||
INSERT INTO bug_53756 VALUES(1, 11), (2, 22), (3, 33), (4, 44);
|
||||
|
||||
--echo
|
||||
--echo # Select a less restrictive isolation level.
|
||||
# Don't use user variables. They won't survive server crash.
|
||||
--let $global_isolation= `SELECT @@global.tx_isolation`
|
||||
--let $session_isolation= `SELECT @@session.tx_isolation`
|
||||
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
COMMIT;
|
||||
|
||||
--echo
|
||||
--echo # Start a transaction in the default connection for isolation.
|
||||
START TRANSACTION;
|
||||
SELECT @@tx_isolation;
|
||||
SELECT * FROM bug_53756;
|
||||
|
||||
--echo
|
||||
--echo # connection con1 deletes row 1
|
||||
--connect (con1,localhost,root,,)
|
||||
START TRANSACTION;
|
||||
SELECT @@tx_isolation;
|
||||
DELETE FROM bug_53756 WHERE pk=1;
|
||||
|
||||
--echo
|
||||
--echo # connection con2 deletes row 2
|
||||
--connect (con2,localhost,root,,)
|
||||
START TRANSACTION;
|
||||
SELECT @@tx_isolation;
|
||||
DELETE FROM bug_53756 WHERE pk=2;
|
||||
|
||||
--echo
|
||||
--echo # connection con3 updates row 3
|
||||
--connect (con3,localhost,root,,)
|
||||
START TRANSACTION;
|
||||
SELECT @@tx_isolation;
|
||||
UPDATE bug_53756 SET c1=77 WHERE pk=3;
|
||||
|
||||
--echo
|
||||
--echo # connection con4 updates row 4
|
||||
--connect (con4,localhost,root,,)
|
||||
START TRANSACTION;
|
||||
SELECT @@tx_isolation;
|
||||
UPDATE bug_53756 SET c1=88 WHERE pk=4;
|
||||
|
||||
--echo
|
||||
--echo # connection con5 inserts row 5
|
||||
--connect (con5,localhost,root,,)
|
||||
START TRANSACTION;
|
||||
SELECT @@tx_isolation;
|
||||
INSERT INTO bug_53756 VALUES(5, 55);
|
||||
|
||||
--echo
|
||||
--echo # connection con6 inserts row 6
|
||||
--connect (con6,localhost,root,,)
|
||||
START TRANSACTION;
|
||||
SELECT @@tx_isolation;
|
||||
INSERT INTO bug_53756 VALUES(6, 66);
|
||||
|
||||
--echo
|
||||
--echo # connection con1 commits.
|
||||
--connection con1
|
||||
COMMIT;
|
||||
|
||||
--echo
|
||||
--echo # connection con3 commits.
|
||||
--connection con3
|
||||
COMMIT;
|
||||
|
||||
--echo
|
||||
--echo # connection con4 rolls back.
|
||||
--connection con4
|
||||
ROLLBACK;
|
||||
|
||||
--echo
|
||||
--echo # connection con6 rolls back.
|
||||
--connection con6
|
||||
ROLLBACK;
|
||||
|
||||
--echo
|
||||
--echo # The connections 2 and 5 stay open.
|
||||
|
||||
--echo
|
||||
--echo # connection default selects resulting data.
|
||||
--echo # Delete of row 1 was committed.
|
||||
--echo # Update of row 3 was committed.
|
||||
--echo # Due to isolation level read committed, these should be included.
|
||||
--echo # All other changes should not be included.
|
||||
--connection default
|
||||
SELECT * FROM bug_53756;
|
||||
|
||||
--echo
|
||||
--echo # connection default
|
||||
--connection default
|
||||
--echo #
|
||||
--echo # Crash server.
|
||||
#
|
||||
# Write file to make mysql-test-run.pl expect the "crash", but don't start
|
||||
# it until it's told to
|
||||
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
#
|
||||
START TRANSACTION;
|
||||
INSERT INTO bug_53756 VALUES (666,666);
|
||||
#
|
||||
# Request a crash on next execution of commit.
|
||||
SET SESSION debug="+d,crash_commit_before";
|
||||
#
|
||||
# Execute the statement that causes the crash.
|
||||
--error 2013
|
||||
COMMIT;
|
||||
--echo
|
||||
--echo #
|
||||
--echo # disconnect con1, con2, con3, con4, con5, con6.
|
||||
--disconnect con1
|
||||
--disconnect con2
|
||||
--disconnect con3
|
||||
--disconnect con4
|
||||
--disconnect con5
|
||||
--disconnect con6
|
||||
--echo #
|
||||
--echo # Restart server.
|
||||
#
|
||||
# Write file to make mysql-test-run.pl start up the server again
|
||||
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
#
|
||||
# Turn on reconnect
|
||||
--enable_reconnect
|
||||
#
|
||||
# Call script that will poll the server waiting for it to be back online again
|
||||
--source include/wait_until_connected_again.inc
|
||||
#
|
||||
# Turn off reconnect again
|
||||
--disable_reconnect
|
||||
--echo
|
||||
|
||||
--echo #
|
||||
--echo # Select recovered data.
|
||||
--echo # Delete of row 1 was committed.
|
||||
--echo # Update of row 3 was committed.
|
||||
--echo # These should be included.
|
||||
--echo # All other changes should not be included.
|
||||
--echo # Delete of row 2 and insert of row 5 should be rolled back
|
||||
SELECT * FROM bug_53756;
|
||||
|
||||
--echo
|
||||
--echo # Clean up.
|
||||
DROP TABLE bug_53756;
|
||||
|
||||
--disable_query_log
|
||||
eval SET GLOBAL tx_isolation= '$global_isolation';
|
||||
eval SET SESSION tx_isolation= '$session_isolation';
|
||||
--enable_query_log
|
||||
|
32
mysql-test/suite/innodb/t/innodb_bug59307.test
Normal file
32
mysql-test/suite/innodb/t/innodb_bug59307.test
Normal file
@ -0,0 +1,32 @@
|
||||
-- source include/have_innodb.inc
|
||||
# Bug #59307 uninitialized value in rw_lock_set_writer_id_and_recursion_flag()
|
||||
# when Valgrind instrumentation (UNIV_DEBUG_VALGRIND) is not enabled
|
||||
|
||||
CREATE TABLE t1 (
|
||||
t1_int INT,
|
||||
t1_time TIME
|
||||
) ENGINE=innodb;
|
||||
|
||||
CREATE TABLE t2 (
|
||||
t2_int int PRIMARY KEY,
|
||||
t2_int2 INT
|
||||
) ENGINE=INNODB;
|
||||
|
||||
INSERT INTO t2 VALUES ();
|
||||
INSERT INTO t1 VALUES ();
|
||||
|
||||
SELECT *
|
||||
FROM t1 AS t1a
|
||||
WHERE NOT EXISTS
|
||||
(SELECT *
|
||||
FROM t1 AS t1b
|
||||
WHERE t1b.t1_int NOT IN
|
||||
(SELECT t2.t2_int
|
||||
FROM t2
|
||||
WHERE t1b.t1_time LIKE t1b.t1_int
|
||||
OR t1b.t1_time <> t2.t2_int2
|
||||
AND 6=7
|
||||
)
|
||||
)
|
||||
;
|
||||
DROP TABLE t1,t2;
|
1
mysql-test/suite/innodb/t/innodb_bug60049-master.opt
Normal file
1
mysql-test/suite/innodb/t/innodb_bug60049-master.opt
Normal file
@ -0,0 +1 @@
|
||||
--innodb_fast_shutdown=0
|
39
mysql-test/suite/innodb/t/innodb_bug60049.test
Normal file
39
mysql-test/suite/innodb/t/innodb_bug60049.test
Normal file
@ -0,0 +1,39 @@
|
||||
# Bug #60049 Verify that purge leaves no garbage in unique secondary indexes
|
||||
# This test requires a fresh server start-up and a slow shutdown.
|
||||
# This was a suspected bug (not a bug).
|
||||
|
||||
-- source include/not_embedded.inc
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
CREATE TABLE t(a INT)ENGINE=InnoDB;
|
||||
RENAME TABLE t TO u;
|
||||
DROP TABLE u;
|
||||
SELECT @@innodb_fast_shutdown;
|
||||
let $MYSQLD_DATADIR=`select @@datadir`;
|
||||
|
||||
# Shut down the server
|
||||
-- exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
-- shutdown_server 30
|
||||
-- source include/wait_until_disconnected.inc
|
||||
|
||||
# Check the tail of ID_IND (SYS_TABLES.ID)
|
||||
let IBDATA1=$MYSQLD_DATADIR/ibdata1;
|
||||
perl;
|
||||
my $file = $ENV{'IBDATA1'};
|
||||
open(FILE, "<$file") || die "Unable to open $file";
|
||||
# Read DICT_HDR_TABLE_IDS, the root page number of ID_IND (SYS_TABLES.ID).
|
||||
seek(FILE, 7*16384+38+36, 0) || die "Unable to seek $file";
|
||||
die unless read(FILE, $_, 4) == 4;
|
||||
my $sys_tables_id_root = unpack("N", $_);
|
||||
print "Last record of ID_IND root page ($sys_tables_id_root):\n";
|
||||
# This should be the last record in ID_IND. Dump it in hexadecimal.
|
||||
seek(FILE, $sys_tables_id_root*16384 + 152, 0) || die "Unable to seek $file";
|
||||
read(FILE, $_, 32) || die "Unable to read $file";
|
||||
close(FILE);
|
||||
print unpack("H*", $_), "\n";
|
||||
EOF
|
||||
|
||||
# Restart the server.
|
||||
-- exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
-- enable_reconnect
|
||||
-- source include/wait_until_connected_again.inc
|
@ -118,11 +118,29 @@ SELECT * FROM ```t'\"_str` WHERE c1 = '4' FOR UPDATE;
|
||||
# executes before some of them, resulting in less than expected number
|
||||
# of rows being selected from innodb_locks. If there is a bug and there
|
||||
# are no 14 rows in innodb_locks then this test will fail with timeout.
|
||||
let $count = 14;
|
||||
let $table = INFORMATION_SCHEMA.INNODB_LOCKS;
|
||||
-- source include/wait_until_rows_count.inc
|
||||
# the above enables the query log, re-disable it
|
||||
-- disable_query_log
|
||||
# Notice that if we query INNODB_LOCKS more often than once per 0.1 sec
|
||||
# then its contents will never change because the cache from which it is
|
||||
# filled is updated only if it has not been read for 0.1 seconds. See
|
||||
# CACHE_MIN_IDLE_TIME_US in trx/trx0i_s.c.
|
||||
let $cnt=10;
|
||||
while ($cnt)
|
||||
{
|
||||
let $success=`SELECT COUNT(*) = 14 FROM INFORMATION_SCHEMA.INNODB_LOCKS`;
|
||||
if ($success)
|
||||
{
|
||||
let $cnt=0;
|
||||
}
|
||||
if (!$success)
|
||||
{
|
||||
real_sleep 0.2;
|
||||
dec $cnt;
|
||||
}
|
||||
}
|
||||
if (!$success)
|
||||
{
|
||||
-- echo Timeout waiting for rows in INNODB_LOCKS to appear
|
||||
}
|
||||
|
||||
SELECT lock_mode, lock_type, lock_table, lock_index, lock_rec, lock_data
|
||||
FROM INFORMATION_SCHEMA.INNODB_LOCKS ORDER BY lock_data;
|
||||
|
||||
|
@ -1,6 +1,16 @@
|
||||
#
|
||||
# Bug#24509 cannot use more than 2048 file descriptors on windows
|
||||
#
|
||||
|
||||
#
|
||||
# This test requires approximately 6000 of files to be open simultaneously.
|
||||
# Let us skip it on platforms where open files limit is too low.
|
||||
let $max_open_files_limit= `SELECT @@open_files_limit < 6100`;
|
||||
if ($max_open_files_limit)
|
||||
{
|
||||
skip Need open_files_limit to be greater than 6100;
|
||||
}
|
||||
|
||||
--disable_query_log
|
||||
create database many_tables;
|
||||
use many_tables;
|
||||
@ -19,14 +29,14 @@ while ($i)
|
||||
}
|
||||
|
||||
#lock all tables we just created (resembles mysqldump startup is doing with --all-databases operation)
|
||||
#There will be 3 descriptors for each table (table.FRM, table.MYI and table.MYD files) means 9000 files
|
||||
#There will be 2 descriptors for each table (table.MYI and table.MYD files) means 6000 files
|
||||
#descriptors altogether. For Microsoft C runtime, this is way too many.
|
||||
|
||||
eval LOCK TABLES $table_list;
|
||||
unlock tables;
|
||||
|
||||
drop database many_tables;
|
||||
--disable_query_log
|
||||
--enable_query_log
|
||||
--echo all done
|
||||
|
||||
|
||||
|
@ -3,13 +3,6 @@ include/master-slave.inc
|
||||
CREATE TABLE t1 ( a int ) ENGINE=InnoDB;
|
||||
BEGIN;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
OPTIMIZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
|
||||
test.t1 optimize error Lock wait timeout exceeded; try restarting transaction
|
||||
test.t1 optimize status Operation failed
|
||||
Warnings:
|
||||
Error 1205 Lock wait timeout exceeded; try restarting transaction
|
||||
OPTIMIZE TABLE non_existing;
|
||||
Table Op Msg_type Msg_text
|
||||
test.non_existing optimize Error Table 'test.non_existing' doesn't exist
|
||||
|
@ -27,15 +27,26 @@ a
|
||||
2001
|
||||
set global read_only=0;
|
||||
BEGIN;
|
||||
BEGIN;
|
||||
select @@read_only;
|
||||
@@read_only
|
||||
0
|
||||
set global read_only=1;
|
||||
*** On SUPER USER connection ***
|
||||
insert into t1 values(1002);
|
||||
insert into t2 values(2002);
|
||||
BEGIN;
|
||||
*** On regular USER connection ***
|
||||
insert into t1 values(1003);
|
||||
insert into t2 values(2003);
|
||||
set global read_only=1;
|
||||
COMMIT;
|
||||
COMMIT;
|
||||
ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
|
||||
insert into t2 values(2003);
|
||||
ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
|
||||
*** SUPER USER COMMIT (must succeed) ***
|
||||
COMMIT;
|
||||
*** regular USER COMMIT (must succeed - nothing to commit) ***
|
||||
COMMIT;
|
||||
select @@read_only;
|
||||
@@read_only
|
||||
1
|
||||
set global read_only=0;
|
||||
insert into t1 values(1004);
|
||||
insert into t2 values(2004);
|
||||
@ -48,7 +59,6 @@ select * from t2;
|
||||
a
|
||||
2001
|
||||
2002
|
||||
2003
|
||||
2004
|
||||
select * from t1;
|
||||
a
|
||||
@ -59,7 +69,6 @@ select * from t2;
|
||||
a
|
||||
2001
|
||||
2002
|
||||
2003
|
||||
2004
|
||||
set global read_only=1;
|
||||
select @@read_only;
|
||||
@ -87,7 +96,6 @@ select * from t2;
|
||||
a
|
||||
2001
|
||||
2002
|
||||
2003
|
||||
2004
|
||||
2005
|
||||
select * from t1;
|
||||
@ -100,7 +108,6 @@ select * from t2;
|
||||
a
|
||||
2001
|
||||
2002
|
||||
2003
|
||||
2004
|
||||
2005
|
||||
insert into t1 values(1006);
|
||||
|
@ -10,8 +10,6 @@
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
rpl_failed_optimize : WL#4284: Can't optimize table used by a pending transaction (there is metadata lock on the table).
|
||||
rpl_read_only : WL#4284: Setting Read only won't succeed until all metadata locks are released.
|
||||
rpl_row_create_table : Bug#51574 2010-02-27 andrei failed different way than earlier with bug#45576
|
||||
rpl_spec_variables : BUG#47661 2009-10-27 jasonh rpl_spec_variables fails on PB2 hpux
|
||||
rpl_get_master_version_and_clock : Bug#59178 Jan 05 2011 joro Valgrind warnings rpl_get_master_version_and_clock
|
||||
|
@ -1 +0,0 @@
|
||||
--loose-innodb-lock-wait-timeout=1
|
@ -41,30 +41,39 @@ set global read_only=0;
|
||||
|
||||
connection master1;
|
||||
BEGIN;
|
||||
|
||||
connection master2;
|
||||
BEGIN;
|
||||
|
||||
connection master;
|
||||
select @@read_only;
|
||||
set global read_only=1;
|
||||
|
||||
connection master1;
|
||||
-- echo *** On SUPER USER connection ***
|
||||
insert into t1 values(1002);
|
||||
--disable_warnings
|
||||
insert into t2 values(2002);
|
||||
--enable_warnings
|
||||
|
||||
connection master2;
|
||||
BEGIN;
|
||||
-- echo *** On regular USER connection ***
|
||||
--error ER_OPTION_PREVENTS_STATEMENT
|
||||
insert into t1 values(1003);
|
||||
--disable_warnings
|
||||
--error ER_OPTION_PREVENTS_STATEMENT
|
||||
insert into t2 values(2003);
|
||||
--enable_warnings
|
||||
|
||||
connection master;
|
||||
set global read_only=1;
|
||||
|
||||
connection master1;
|
||||
## works even with read_only=1, because master1 is root
|
||||
-- echo *** SUPER USER COMMIT (must succeed) ***
|
||||
COMMIT;
|
||||
|
||||
connection master2;
|
||||
--error ER_OPTION_PREVENTS_STATEMENT
|
||||
-- echo *** regular USER COMMIT (must succeed - nothing to commit) ***
|
||||
COMMIT;
|
||||
|
||||
connection master;
|
||||
select @@read_only;
|
||||
set global read_only=0;
|
||||
|
||||
connection master1;
|
||||
|
@ -13,6 +13,7 @@
|
||||
--source include/have_debug.inc
|
||||
--source include/master-slave.inc
|
||||
--source include/not_embedded.inc
|
||||
--source include/not_var_link.inc
|
||||
|
||||
##########################################################################
|
||||
# Loading data
|
||||
|
@ -11,8 +11,10 @@ There should be *no* long test name listed below:
|
||||
select variable_name as `There should be *no* variables listed below:` from t2
|
||||
left join t1 on variable_name=test_name where test_name is null;
|
||||
There should be *no* variables listed below:
|
||||
INNODB_ROLLBACK_SEGMENTS
|
||||
INNODB_STATS_METHOD
|
||||
INNODB_FILE_FORMAT_MAX
|
||||
INNODB_ROLLBACK_SEGMENTS
|
||||
INNODB_STATS_METHOD
|
||||
INNODB_FILE_FORMAT_MAX
|
||||
drop table t1;
|
||||
|
@ -1144,3 +1144,18 @@ INSERT INTO t1 VALUES (1, 1), (2, 2);
|
||||
ALTER TABLE t1 CHANGE a id INT;
|
||||
--disable_info
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Bug#11754461 CANNOT ALTER TABLE WHEN KEY PREFIX TOO LONG
|
||||
--echo #
|
||||
|
||||
--disable_warnings
|
||||
DROP DATABASE IF EXISTS db1;
|
||||
--enable_warnings
|
||||
|
||||
CREATE DATABASE db1 CHARACTER SET utf8;
|
||||
CREATE TABLE db1.t1 (bar TINYTEXT, KEY (bar(100)));
|
||||
ALTER TABLE db1.t1 ADD baz INT;
|
||||
|
||||
DROP DATABASE db1;
|
||||
|
@ -72,3 +72,13 @@ select a from t1 where a like "abcdefgh
|
||||
drop table t1;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
#
|
||||
# Bug #48053 String::c_ptr has a race and/or does an invalid
|
||||
# memory reference
|
||||
# (triggered by Valgrind tests)
|
||||
# (see also ctype_eucjpms.test, ctype_cp1250.test, ctype_cp1251.test)
|
||||
#
|
||||
--error 1649
|
||||
set global LC_MESSAGES=convert((@@global.log_bin_trust_function_creators)
|
||||
using cp1250);
|
||||
|
@ -65,6 +65,16 @@ DROP TABLE t1;
|
||||
|
||||
--source include/ctype_8bit.inc
|
||||
|
||||
#
|
||||
# Bug #48053 String::c_ptr has a race and/or does an invalid
|
||||
# memory reference
|
||||
# (triggered by Valgrind tests)
|
||||
# (see also ctype_eucjpms.test, ctype_cp1250.test, ctype_cp1251.test)
|
||||
#
|
||||
--error 1649
|
||||
set global LC_TIME_NAMES=convert((-8388608) using cp1251);
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # End of 5.1 tests
|
||||
--echo #
|
||||
@ -75,6 +85,16 @@ DROP TABLE t1;
|
||||
|
||||
--source include/ctype_numconv.inc
|
||||
|
||||
--echo #
|
||||
--echo # Bug#60101 COALESCE with cp1251 tables causes [Err] 1267 - Illegal mix of collations
|
||||
--echo #
|
||||
CREATE TABLE t1 (test1 INT, test2 VARCHAR(255));
|
||||
SHOW CREATE TABLE t1;
|
||||
SELECT COALESCE(IF(test1=1, 1, NULL), test2) FROM t1;
|
||||
SELECT COALESCE(IF(test1=1, NULL, 1), test2) FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # End of 5.5 tests
|
||||
--echo #
|
||||
|
@ -382,6 +382,16 @@ select hex(convert(_eucjpms 0xA5FE41 using ucs2));
|
||||
select hex(convert(_eucjpms 0x8FABF841 using ucs2));
|
||||
|
||||
|
||||
#
|
||||
# Bug #48053 String::c_ptr has a race and/or does an invalid
|
||||
# memory reference
|
||||
# (triggered by Valgrind tests)
|
||||
# (see also ctype_eucjpms.test, ctype_cp1250.test, ctype_cp1251.test)
|
||||
#
|
||||
--error 1649
|
||||
set global LC_TIME_NAMES=convert((convert((0x63) using eucjpms)) using utf8);
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Start of 5.5 tests
|
||||
--echo #
|
||||
|
@ -92,6 +92,14 @@ INSERT INTO t1 VALUES (0x8372835E),(0x8352835E);
|
||||
SELECT hex(a), hex(lower(a)), hex(upper(a)) FROM t1 ORDER BY binary(a);
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # Bug#11766519 - Bug#59648: MY_STRTOLL10_MB2: ASSERTION `(*ENDPTR - S) % 2 == 0' FAILED.
|
||||
--echo #
|
||||
# In the below string backslash (0x5C) is a part of a multi-byte
|
||||
# character, so it should not be quoted.
|
||||
SELECT QUOTE('<27>\');
|
||||
|
||||
|
||||
--echo # End of 5.1 tests
|
||||
|
||||
|
||||
|
@ -741,6 +741,12 @@ WHERE t1.b <=> (SELECT a FROM t1 WHERE a < SOME(SELECT '1'));
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # Bug#59648 my_strtoll10_mb2: Assertion `(*endptr - s) % 2 == 0' failed.
|
||||
--echo #
|
||||
SELECT HEX(CHAR(COALESCE(NULL, CHAR(COUNT('%s') USING ucs2), 1, @@global.license, NULL) USING cp850));
|
||||
SELECT CONVERT(QUOTE(CHAR(0xf5 using ucs2)), SIGNED);
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
|
||||
|
@ -745,6 +745,15 @@ CREATE TABLE t2 AS SELECT CONCAT(s1) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
--echo #
|
||||
--echo # Bug#11753363 (Bug#44793) Character sets: case clause, ucs2 or utf32, failure
|
||||
--echo #
|
||||
SELECT CASE _latin1'a' WHEN _utf16'a' THEN 'A' END;
|
||||
SELECT CASE _utf16'a' WHEN _latin1'a' THEN 'A' END;
|
||||
CREATE TABLE t1 (s1 CHAR(5) CHARACTER SET utf16);
|
||||
INSERT INTO t1 VALUES ('a');
|
||||
SELECT CASE s1 WHEN 'a' THEN 'b' ELSE 'c' END FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
## TODO: add tests for all engines
|
||||
|
@ -830,6 +830,16 @@ INSERT INTO t1 VALUES ('d'),('f');
|
||||
SELECT * FROM t1 WHERE b BETWEEN 'a' AND 'z';
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # Bug#11753363 (Bug#44793) Character sets: case clause, ucs2 or utf32, failure
|
||||
--echo #
|
||||
SELECT CASE _latin1'a' WHEN _utf32'a' THEN 'A' END;
|
||||
SELECT CASE _utf32'a' WHEN _latin1'a' THEN 'A' END;
|
||||
CREATE TABLE t1 (s1 CHAR(5) CHARACTER SET utf32);
|
||||
INSERT INTO t1 VALUES ('a');
|
||||
SELECT CASE s1 WHEN 'a' THEN 'b' ELSE 'c' END FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # End of 5.5 tests
|
||||
--echo #
|
||||
|
56
mysql-test/t/file_contents.test
Normal file
56
mysql-test/t/file_contents.test
Normal file
@ -0,0 +1,56 @@
|
||||
#
|
||||
# Testing files that were built to be packaged, both for existence and for contents
|
||||
#
|
||||
|
||||
#
|
||||
# Bug #42969: Create MANIFEST files
|
||||
#
|
||||
# Use a Perl script to verify that files "docs/INFO_BIN" and "docs/INFO_SRC" do exist
|
||||
# and have the expected contents.
|
||||
|
||||
--perl
|
||||
print "\nChecking 'INFO_SRC' and 'INFO_BIN'\n";
|
||||
$dir_docs = $ENV{'MYSQL_BINDIR'};
|
||||
if($dir_docs =~ m|/usr/|) {
|
||||
# RPM package
|
||||
$dir_docs =~ s|/lib|/share/doc|;
|
||||
if(-d "$dir_docs/packages/MySQL-server") {
|
||||
# SuSE
|
||||
$dir_docs = "$dir_docs/packages/MySQL-server";
|
||||
} else {
|
||||
# RedHat: version number in directory name
|
||||
$dir_docs = glob "$dir_docs/MySQL-server*";
|
||||
}
|
||||
} else {
|
||||
# tar.gz package, Windows, or developer work (in BZR)
|
||||
$dir_docs =~ s|/lib||;
|
||||
if(-d "$dir_docs/docs") {
|
||||
$dir_docs = "$dir_docs/docs"; # package
|
||||
} else {
|
||||
$dir_docs = "$dir_docs/Docs"; # development tree
|
||||
}
|
||||
}
|
||||
$found_version = "No line 'MySQL source #.#.#'";
|
||||
$found_revision = "No line 'revision-id: .....'";
|
||||
open(I_SRC,"<","$dir_docs/INFO_SRC") or print "Cannot open 'INFO_SRC' in '$dir_docs'\n";
|
||||
while(defined ($line = <I_SRC>)) {
|
||||
if ($line =~ m|^MySQL source \d\.\d\.\d+|) {$found_version = "Found MySQL version number";}
|
||||
if ($line =~ m|^revision-id: .*@.*-2\d{13}-\w+$|) {$found_revision = "Found BZR revision id";}
|
||||
}
|
||||
close I_SRC;
|
||||
print "INFO_SRC: $found_version / $found_revision\n";
|
||||
$found_compiler = "No line about compiler information";
|
||||
$found_features = "No line 'Feature flags'";
|
||||
open(I_BIN,"<","$dir_docs/INFO_BIN") or print "Cannot open 'INFO_BIN' in '$dir_docs'\n";
|
||||
while(defined ($line = <I_BIN>)) {
|
||||
# "generator" on Windows, "flags" on Unix:
|
||||
if (($line =~ m| Compiler / generator used: |) ||
|
||||
($line =~ m| Compiler flags used |)) {$found_compiler = "Found 'Compiler ... used' line";}
|
||||
if ($line =~ m| Feature flags used:|) {$found_features = "Found 'Feature flags' line";}
|
||||
}
|
||||
close I_BIN;
|
||||
print "INFO_BIN: $found_compiler / $found_features\n";
|
||||
EOF
|
||||
|
||||
--echo
|
||||
--echo End of tests
|
@ -1,4 +1,6 @@
|
||||
--source include/have_debug.inc
|
||||
--source include/have_debug_sync.inc
|
||||
--source include/count_sessions.inc
|
||||
|
||||
SET @old_debug= @@session.debug;
|
||||
|
||||
@ -21,3 +23,37 @@ DELETE FROM t1 ORDER BY (f1(10)) LIMIT 1;
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP FUNCTION f1;
|
||||
|
||||
--echo #
|
||||
--echo # Bug #11747102
|
||||
--echo # 30771: LOG MORE INFO ABOUT THREADS KILL'D AND SORT ABORTED MESSAGES
|
||||
--echo #
|
||||
|
||||
connect (con1, localhost, root);
|
||||
connect (con2, localhost, root);
|
||||
|
||||
--echo # connection 1
|
||||
connection con1;
|
||||
CREATE TABLE t1(f0 int auto_increment primary key, f1 int);
|
||||
INSERT INTO t1(f1) VALUES (0),(1),(2),(3),(4),(5);
|
||||
|
||||
let $ID= `SELECT @id := CONNECTION_ID()`;
|
||||
|
||||
SET DEBUG_SYNC='filesort_start SIGNAL filesort_started WAIT_FOR filesort_killed';
|
||||
--echo # Sending: (not reaped since connection is killed later)
|
||||
--send SELECT * FROM t1 ORDER BY f1 ASC, f0
|
||||
|
||||
--echo # connection 2
|
||||
connection con2;
|
||||
let $ignore= `SELECT @id := $ID`;
|
||||
SET DEBUG_SYNC='now WAIT_FOR filesort_started';
|
||||
KILL @id;
|
||||
SET DEBUG_SYNC='now SIGNAL filesort_killed';
|
||||
|
||||
--echo # connection default
|
||||
connection default;
|
||||
disconnect con1;
|
||||
disconnect con2;
|
||||
--source include/wait_until_count_sessions.inc
|
||||
SET DEBUG_SYNC= "RESET";
|
||||
DROP TABLE t1;
|
||||
|
12
mysql-test/t/func_encrypt_ucs2.test
Normal file
12
mysql-test/t/func_encrypt_ucs2.test
Normal file
@ -0,0 +1,12 @@
|
||||
-- source include/have_ssl_crypto_functs.inc
|
||||
-- source include/have_ucs2.inc
|
||||
|
||||
--echo #
|
||||
--echo # Bug#59648 my_strtoll10_mb2: Assertion `(*endptr - s) % 2 == 0' failed.
|
||||
--echo #
|
||||
|
||||
SELECT CHAR_LENGTH(DES_ENCRYPT(0, CHAR('1' USING ucs2)));
|
||||
SELECT CONVERT(DES_ENCRYPT(0, CHAR('1' USING ucs2)),UNSIGNED);
|
||||
|
||||
SELECT CHAR_LENGTH(DES_DECRYPT(0xFF0DC9FC9537CA75F4, CHAR('1' USING ucs2)));
|
||||
SELECT CONVERT(DES_DECRYPT(0xFF0DC9FC9537CA75F4, CHAR('1' using ucs2)), UNSIGNED);
|
@ -881,4 +881,11 @@ SELECT WEEK(STR_TO_DATE(NULL,0));
|
||||
SELECT SUBDATE(STR_TO_DATE(NULL,0), INTERVAL 1 HOUR);
|
||||
|
||||
--echo #
|
||||
--echo # BUG#59895 - setting storage engine to null segfaults mysqld
|
||||
--echo #
|
||||
SELECT MONTHNAME(0), MONTHNAME(0) IS NULL, MONTHNAME(0) + 1;
|
||||
--error ER_WRONG_VALUE_FOR_VAR
|
||||
SET storage_engine=NULL;
|
||||
|
||||
--echo #
|
||||
|
||||
|
@ -757,6 +757,17 @@ insert into t1 values (geomfromtext("point(1 0)"));
|
||||
select * from (select polygon(t1.a) as p from t1 order by t1.a) d;
|
||||
drop table t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Test for bug #59888 "debug assertion when attempt to create spatial index
|
||||
--echo # on char > 31 bytes".
|
||||
--echo #
|
||||
create table t1(a char(32) not null) engine=myisam;
|
||||
--error ER_SPATIAL_MUST_HAVE_GEOM_COL
|
||||
create spatial index i on t1 (a);
|
||||
drop table t1;
|
||||
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
||||
#
|
||||
|
@ -1248,6 +1248,43 @@ ON 1 WHERE t2.f1 > 1 GROUP BY t2.f1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # Bug#59839: Aggregation followed by subquery yields wrong result
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (
|
||||
a INT,
|
||||
b INT,
|
||||
c INT,
|
||||
KEY (a, b)
|
||||
);
|
||||
|
||||
INSERT INTO t1 VALUES
|
||||
( 1, 1, 1 ),
|
||||
( 1, 2, 2 ),
|
||||
( 1, 3, 3 ),
|
||||
( 1, 4, 6 ),
|
||||
( 1, 5, 5 ),
|
||||
( 1, 9, 13 ),
|
||||
|
||||
( 2, 1, 6 ),
|
||||
( 2, 2, 7 ),
|
||||
( 2, 3, 8 );
|
||||
|
||||
EXPLAIN
|
||||
SELECT a, AVG(t1.b),
|
||||
(SELECT t11.c FROM t1 t11 WHERE t11.a = t1.a AND t11.b = AVG(t1.b)) AS t11c,
|
||||
(SELECT t12.c FROM t1 t12 WHERE t12.a = t1.a AND t12.b = AVG(t1.b)) AS t12c
|
||||
FROM t1 GROUP BY a;
|
||||
|
||||
SELECT a, AVG(t1.b),
|
||||
(SELECT t11.c FROM t1 t11 WHERE t11.a = t1.a AND t11.b = AVG(t1.b)) AS t11c,
|
||||
(SELECT t12.c FROM t1 t12 WHERE t12.a = t1.a AND t12.b = AVG(t1.b)) AS t12c
|
||||
FROM t1 GROUP BY a;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo # End of 5.1 tests
|
||||
|
||||
--echo #
|
||||
|
@ -407,7 +407,7 @@ SET GLOBAL myisam_data_pointer_size = 2;
|
||||
|
||||
INSERT INTO t1 VALUES (1), (2), (3), (4), (5);
|
||||
|
||||
call mtr.add_suppression("mysqld: The table '.*#sql.*' is full");
|
||||
call mtr.add_suppression("mysqld.*: The table '.*#sql.*' is full");
|
||||
--error ER_RECORD_FILE_FULL,ER_RECORD_FILE_FULL
|
||||
INSERT IGNORE INTO t1 SELECT t1.a FROM t1,t1 t2,t1 t3,t1 t4,t1 t5,t1 t6,t1 t7;
|
||||
|
||||
|
@ -683,4 +683,24 @@ UPDATE (SELECT 1 FROM t1 WHERE f1 = (SELECT f1() FROM t1)) x, t1 SET f1 = 1;
|
||||
DROP FUNCTION f1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # BUG#57373: Multi update+InnoDB reports ER_KEY_NOT_FOUND if a
|
||||
--echo # table is updated twice
|
||||
--echo #
|
||||
|
||||
# Results differ between storage engines.
|
||||
# See multi_update_innodb.test for the InnoDB variant of this test
|
||||
CREATE TABLE t1(
|
||||
pk INT,
|
||||
a INT,
|
||||
PRIMARY KEY (pk)
|
||||
) ENGINE=MyISAM;
|
||||
|
||||
INSERT INTO t1 VALUES (0,0);
|
||||
UPDATE t1 AS A, t1 AS B SET A.pk = 1, B.a = 2;
|
||||
--echo
|
||||
--echo # Should be (1,2)
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo end of tests
|
||||
|
33
mysql-test/t/multi_update_innodb.test
Normal file
33
mysql-test/t/multi_update_innodb.test
Normal file
@ -0,0 +1,33 @@
|
||||
--source include/have_innodb.inc
|
||||
|
||||
--echo #
|
||||
--echo # BUG#57373: Multi update+InnoDB reports ER_KEY_NOT_FOUND if a
|
||||
--echo # table is updated twice
|
||||
--echo #
|
||||
|
||||
# Results differ between storage engines.
|
||||
# See multi_update.test for the MyISAM variant of this test
|
||||
CREATE TABLE t1(
|
||||
pk INT,
|
||||
a INT,
|
||||
b INT,
|
||||
PRIMARY KEY (pk)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO t1 VALUES (0,0,0);
|
||||
--error ER_MULTI_UPDATE_KEY_CONFLICT
|
||||
UPDATE t1 AS A, t1 AS B SET A.pk = 1, B.a = 2;
|
||||
SELECT * FROM t1;
|
||||
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
--error ER_MULTI_UPDATE_KEY_CONFLICT
|
||||
UPDATE v1 AS A, t1 AS B SET A.pk = 1, B.a = 2;
|
||||
SELECT * FROM t1;
|
||||
|
||||
UPDATE t1 AS A, t1 AS B SET A.a = 1, B.b = 2;
|
||||
--echo # Should be (0,1,2)
|
||||
SELECT * FROM t1;
|
||||
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
|
@ -2178,6 +2178,27 @@ CREATE TABLE `comment_table` (i INT COMMENT 'FIELD COMMENT') COMMENT = 'TABLE CO
|
||||
--exec $MYSQL_DUMP --compact --skip-create --xml test
|
||||
DROP TABLE `comment_table`;
|
||||
|
||||
--echo #
|
||||
--echo # BUG#11766310 : 59398: MYSQLDUMP 5.1 CAN'T HANDLE A DASH ("-") IN
|
||||
--echo # DATABASE NAMES IN ALTER DATABASE
|
||||
--echo #
|
||||
|
||||
CREATE DATABASE `test-database`;
|
||||
USE `test-database`;
|
||||
CREATE TABLE `test` (`c1` VARCHAR(10)) ENGINE=MYISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
|
||||
DELIMITER |;
|
||||
CREATE TRIGGER `trig` BEFORE INSERT ON `test` FOR EACH ROW BEGIN
|
||||
END |
|
||||
DELIMITER ;|
|
||||
|
||||
ALTER DATABASE `test-database` CHARACTER SET latin1 COLLATE latin1_swedish_ci;
|
||||
ALTER DATABASE `test-database` CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
|
||||
|
||||
--exec $MYSQL_DUMP --quote-names --compact test-database
|
||||
|
||||
DROP DATABASE `test-database`;
|
||||
|
||||
--echo #
|
||||
--echo # End of 5.1 tests
|
||||
--echo #
|
||||
|
@ -2267,3 +2267,53 @@ DROP TABLE t1;
|
||||
SET GLOBAL myisam_use_mmap=default;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
||||
--echo #
|
||||
--echo # BUG#55385: UPDATE statement throws an error, but still updates
|
||||
--echo # the table entries
|
||||
|
||||
CREATE TABLE t1_part (
|
||||
partkey int,
|
||||
nokey int
|
||||
) PARTITION BY LINEAR HASH(partkey) PARTITIONS 3;
|
||||
|
||||
INSERT INTO t1_part VALUES (1, 1) , (10, 10);
|
||||
CREATE VIEW v1 AS SELECT * FROM t1_part;
|
||||
|
||||
--echo
|
||||
--echo # Should be (1,1),(10,10)
|
||||
SELECT * FROM t1_part;
|
||||
|
||||
--echo
|
||||
--echo # Case 1
|
||||
--echo # Update is refused because partitioning key is updated
|
||||
--error ER_MULTI_UPDATE_KEY_CONFLICT
|
||||
UPDATE t1_part AS A NATURAL JOIN t1_part B SET A.partkey = 2, B.nokey = 3;
|
||||
--error ER_MULTI_UPDATE_KEY_CONFLICT
|
||||
UPDATE t1_part AS A NATURAL JOIN t1_part B SET A.nokey = 2, B.partkey = 3;
|
||||
|
||||
--echo
|
||||
--echo # Case 2
|
||||
--echo # Like 1, but partition accessed through a view
|
||||
--error ER_MULTI_UPDATE_KEY_CONFLICT
|
||||
UPDATE t1_part AS A NATURAL JOIN v1 as B SET A.nokey = 2 , B.partkey = 3;
|
||||
--error ER_MULTI_UPDATE_KEY_CONFLICT
|
||||
UPDATE v1 AS A NATURAL JOIN t1_part as B SET A.nokey = 2 , B.partkey = 3;
|
||||
|
||||
--echo
|
||||
--echo # Should be (1,1),(10,10)
|
||||
SELECT * FROM t1_part;
|
||||
|
||||
--echo
|
||||
--echo # Case 3
|
||||
--echo # Update is accepted because partitioning key is not updated
|
||||
UPDATE t1_part AS A NATURAL JOIN t1_part B SET A.nokey = 2 , B.nokey = 3;
|
||||
|
||||
--echo
|
||||
--echo # Should be (1,3),(10,3)
|
||||
SELECT * FROM t1_part;
|
||||
|
||||
--echo
|
||||
# Cleanup
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1_part;
|
||||
|
@ -245,6 +245,48 @@ XA PREPARE 'x';
|
||||
XA ROLLBACK 'x';
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Bug#59986 Assert in Diagnostics_area::set_ok_status() for XA COMMIT
|
||||
--echo #
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
|
||||
CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a)) engine=InnoDB;
|
||||
INSERT INTO t1 VALUES (1, 1), (2, 2);
|
||||
|
||||
--echo # Connection con1
|
||||
connect (con1, localhost, root);
|
||||
XA START 'a';
|
||||
UPDATE t1 SET b= 3 WHERE a=1;
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
XA START 'b';
|
||||
UPDATE t1 SET b=4 WHERE a=2;
|
||||
--echo # Sending:
|
||||
--send UPDATE t1 SET b=5 WHERE a=1
|
||||
|
||||
--echo # Connection con1
|
||||
connection con1;
|
||||
--sleep 1
|
||||
--error ER_LOCK_DEADLOCK
|
||||
UPDATE t1 SET b=6 WHERE a=2;
|
||||
# This used to trigger the assert
|
||||
--error ER_XA_RBDEADLOCK
|
||||
XA COMMIT 'a';
|
||||
|
||||
--echo # Connection default
|
||||
connection default;
|
||||
--echo # Reaping: UPDATE t1 SET b=5 WHERE a=1
|
||||
--reap
|
||||
XA END 'b';
|
||||
XA ROLLBACK 'b';
|
||||
DROP TABLE t1;
|
||||
disconnect con1;
|
||||
|
||||
|
||||
# Wait till all disconnects are completed
|
||||
--source include/wait_until_count_sessions.inc
|
||||
|
||||
|
@ -646,6 +646,11 @@ SELECT EXTRACTVALUE('', LPAD(0.1111E-15, '2011', 1));
|
||||
SELECT UPDATEXML(CONVERT(_latin1'<' USING utf8),'1','1');
|
||||
SELECT UPDATEXML(CONVERT(_latin1'<!--' USING utf8),'1','1');
|
||||
|
||||
--echo #
|
||||
--echo # Bug#11766725 (bug#59901): EXTRACTVALUE STILL BROKEN AFTER FIX FOR BUG #44332
|
||||
--echo #
|
||||
SELECT ExtractValue(CONVERT('<\"', BINARY(10)), 1);
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
||||
|
||||
|
@ -875,5 +875,4 @@
|
||||
fun:buf_buddy_relocate
|
||||
fun:buf_buddy_free_low
|
||||
fun:buf_buddy_free
|
||||
fun:buf_LRU_block_remove_hashed_page
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2000 MySQL AB, 2008-2009 Sun Microsystems, Inc
|
||||
/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -86,6 +86,7 @@ static inline void bitmap_lock(MY_BITMAP *map __attribute__((unused)))
|
||||
mysql_mutex_lock(map->mutex);
|
||||
}
|
||||
|
||||
|
||||
static inline void bitmap_unlock(MY_BITMAP *map __attribute__((unused)))
|
||||
{
|
||||
if (map->mutex)
|
||||
@ -93,6 +94,46 @@ static inline void bitmap_unlock(MY_BITMAP *map __attribute__((unused)))
|
||||
}
|
||||
|
||||
|
||||
static inline uint get_first_set(uint32 value, uint word_pos)
|
||||
{
|
||||
uchar *byte_ptr= (uchar*)&value;
|
||||
uchar byte_value;
|
||||
uint byte_pos, bit_pos;
|
||||
|
||||
for (byte_pos=0; byte_pos < 4; byte_pos++, byte_ptr++)
|
||||
{
|
||||
byte_value= *byte_ptr;
|
||||
if (byte_value)
|
||||
{
|
||||
for (bit_pos=0; ; bit_pos++)
|
||||
if (byte_value & (1 << bit_pos))
|
||||
return (word_pos*32) + (byte_pos*8) + bit_pos;
|
||||
}
|
||||
}
|
||||
return MY_BIT_NONE;
|
||||
}
|
||||
|
||||
|
||||
static inline uint get_first_not_set(uint32 value, uint word_pos)
|
||||
{
|
||||
uchar *byte_ptr= (uchar*)&value;
|
||||
uchar byte_value;
|
||||
uint byte_pos, bit_pos;
|
||||
|
||||
for (byte_pos=0; byte_pos < 4; byte_pos++, byte_ptr++)
|
||||
{
|
||||
byte_value= *byte_ptr;
|
||||
if (byte_value != 0xFF)
|
||||
{
|
||||
for (bit_pos=0; ; bit_pos++)
|
||||
if (!(byte_value & (1 << bit_pos)))
|
||||
return (word_pos*32) + (byte_pos*8) + bit_pos;
|
||||
}
|
||||
}
|
||||
return MY_BIT_NONE;
|
||||
}
|
||||
|
||||
|
||||
my_bool bitmap_init(MY_BITMAP *map, my_bitmap_map *buf, uint n_bits,
|
||||
my_bool thread_safe __attribute__((unused)))
|
||||
{
|
||||
@ -251,7 +292,7 @@ void bitmap_set_prefix(MY_BITMAP *map, uint prefix_size)
|
||||
memset(m, 0xff, prefix_bytes);
|
||||
m+= prefix_bytes;
|
||||
if ((prefix_bits= prefix_size & 7))
|
||||
*m++= (1 << prefix_bits)-1;
|
||||
*(m++)= (1 << prefix_bits)-1;
|
||||
if ((d= no_bytes_in_map(map)-prefix_bytes))
|
||||
bzero(m, d);
|
||||
}
|
||||
@ -259,28 +300,43 @@ void bitmap_set_prefix(MY_BITMAP *map, uint prefix_size)
|
||||
|
||||
my_bool bitmap_is_prefix(const MY_BITMAP *map, uint prefix_size)
|
||||
{
|
||||
uint prefix_bits= prefix_size & 0x7, res;
|
||||
uchar *m= (uchar*)map->bitmap;
|
||||
uchar *end_prefix= m+prefix_size/8;
|
||||
uchar *end;
|
||||
DBUG_ASSERT(m && prefix_size <= map->n_bits);
|
||||
end= m+no_bytes_in_map(map);
|
||||
uint prefix_bits= prefix_size % 32;
|
||||
my_bitmap_map *word_ptr= map->bitmap, last_word;
|
||||
my_bitmap_map *end_prefix= word_ptr + prefix_size / 32;
|
||||
DBUG_ASSERT(word_ptr && prefix_size <= map->n_bits);
|
||||
|
||||
while (m < end_prefix)
|
||||
if (*m++ != 0xff)
|
||||
return 0;
|
||||
/* 1: Words that should be filled with 1 */
|
||||
for (; word_ptr < end_prefix; word_ptr++)
|
||||
if (*word_ptr != 0xFFFFFFFF)
|
||||
return FALSE;
|
||||
|
||||
*map->last_word_ptr&= ~map->last_word_mask; /*Clear bits*/
|
||||
res= 0;
|
||||
if (prefix_bits && *m++ != (1 << prefix_bits)-1)
|
||||
goto ret;
|
||||
last_word= *map->last_word_ptr & ~map->last_word_mask;
|
||||
|
||||
while (m < end)
|
||||
if (*m++ != 0)
|
||||
goto ret;
|
||||
res= 1;
|
||||
ret:
|
||||
return res;
|
||||
/* 2: Word which contains the end of the prefix (if any) */
|
||||
if (prefix_bits)
|
||||
{
|
||||
if (word_ptr == map->last_word_ptr)
|
||||
return uint4korr((uchar*)&last_word) == (uint32)((1 << prefix_bits) - 1);
|
||||
else if (uint4korr((uchar*)word_ptr) != (uint32)((1 << prefix_bits) - 1))
|
||||
return FALSE;
|
||||
word_ptr++;
|
||||
}
|
||||
|
||||
/* 3: Words that should be filled with 0 */
|
||||
for (; word_ptr < map->last_word_ptr; word_ptr++)
|
||||
if (*word_ptr != 0)
|
||||
return FALSE;
|
||||
|
||||
/*
|
||||
We can end up here in two situations:
|
||||
1) We went through the whole bitmap in step 1. This will happen if the
|
||||
whole bitmap is filled with 1 and prefix_size is a multiple of 32
|
||||
(i.e. the prefix does not end in the middle of a word).
|
||||
In this case word_ptr will be larger than map->last_word_ptr.
|
||||
2) We have gone through steps 1-3 and just need to check that also
|
||||
the last word is 0.
|
||||
*/
|
||||
return word_ptr > map->last_word_ptr || last_word == 0;
|
||||
}
|
||||
|
||||
|
||||
@ -288,10 +344,12 @@ my_bool bitmap_is_set_all(const MY_BITMAP *map)
|
||||
{
|
||||
my_bitmap_map *data_ptr= map->bitmap;
|
||||
my_bitmap_map *end= map->last_word_ptr;
|
||||
*map->last_word_ptr |= map->last_word_mask;
|
||||
for (; data_ptr <= end; data_ptr++)
|
||||
|
||||
for (; data_ptr < end; data_ptr++)
|
||||
if (*data_ptr != 0xFFFFFFFF)
|
||||
return FALSE;
|
||||
if ((*map->last_word_ptr | map->last_word_mask) != 0xFFFFFFFF)
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -299,13 +357,13 @@ my_bool bitmap_is_set_all(const MY_BITMAP *map)
|
||||
my_bool bitmap_is_clear_all(const MY_BITMAP *map)
|
||||
{
|
||||
my_bitmap_map *data_ptr= map->bitmap;
|
||||
my_bitmap_map *end;
|
||||
if (*map->last_word_ptr & ~map->last_word_mask)
|
||||
return FALSE;
|
||||
end= map->last_word_ptr;
|
||||
my_bitmap_map *end= map->last_word_ptr;
|
||||
|
||||
for (; data_ptr < end; data_ptr++)
|
||||
if (*data_ptr)
|
||||
return FALSE;
|
||||
if (*map->last_word_ptr & ~map->last_word_mask)
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -319,14 +377,14 @@ my_bool bitmap_is_subset(const MY_BITMAP *map1, const MY_BITMAP *map2)
|
||||
map1->n_bits==map2->n_bits);
|
||||
|
||||
end= map1->last_word_ptr;
|
||||
*map1->last_word_ptr &= ~map1->last_word_mask;
|
||||
*map2->last_word_ptr &= ~map2->last_word_mask;
|
||||
while (m1 <= end)
|
||||
{
|
||||
if ((*m1++) & ~(*m2++))
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
for (; m1 < end; m1++, m2++)
|
||||
if (*m1 & ~(*m2))
|
||||
return FALSE;
|
||||
|
||||
if ((*map1->last_word_ptr & ~map1->last_word_mask) &
|
||||
~(*map2->last_word_ptr & ~map2->last_word_mask))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* True if bitmaps has any common bits */
|
||||
@ -339,14 +397,14 @@ my_bool bitmap_is_overlapping(const MY_BITMAP *map1, const MY_BITMAP *map2)
|
||||
map1->n_bits==map2->n_bits);
|
||||
|
||||
end= map1->last_word_ptr;
|
||||
*map1->last_word_ptr &= ~map1->last_word_mask;
|
||||
*map2->last_word_ptr &= ~map2->last_word_mask;
|
||||
while (m1 <= end)
|
||||
{
|
||||
if ((*m1++) & (*m2++))
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
for (; m1 < end; m1++, m2++)
|
||||
if (*m1 & *m2)
|
||||
return TRUE;
|
||||
|
||||
if ((*map1->last_word_ptr & ~map1->last_word_mask) &
|
||||
(*map2->last_word_ptr & ~map2->last_word_mask))
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
@ -358,15 +416,17 @@ void bitmap_intersect(MY_BITMAP *map, const MY_BITMAP *map2)
|
||||
DBUG_ASSERT(map->bitmap && map2->bitmap);
|
||||
|
||||
end= to+min(len,len2);
|
||||
*map2->last_word_ptr&= ~map2->last_word_mask; /*Clear last bits in map2*/
|
||||
while (to < end)
|
||||
*to++ &= *from++;
|
||||
for (; to < end; to++, from++)
|
||||
*to &= *from;
|
||||
|
||||
if (len >= len2)
|
||||
map->bitmap[len2 - 1] &= ~map2->last_word_mask;
|
||||
|
||||
if (len2 < len)
|
||||
{
|
||||
end+=len-len2;
|
||||
while (to < end)
|
||||
*to++=0;
|
||||
for (; to < end; to++)
|
||||
*to= 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -397,8 +457,8 @@ void bitmap_set_above(MY_BITMAP *map, uint from_byte, uint use_bit)
|
||||
uchar *to= (uchar *)map->bitmap + from_byte;
|
||||
uchar *end= (uchar *)map->bitmap + (map->n_bits+7)/8;
|
||||
|
||||
while (to < end)
|
||||
*to++= use_byte;
|
||||
for (; to < end; to++)
|
||||
*to= use_byte;
|
||||
}
|
||||
|
||||
|
||||
@ -407,59 +467,60 @@ void bitmap_subtract(MY_BITMAP *map, const MY_BITMAP *map2)
|
||||
my_bitmap_map *to= map->bitmap, *from= map2->bitmap, *end;
|
||||
DBUG_ASSERT(map->bitmap && map2->bitmap &&
|
||||
map->n_bits==map2->n_bits);
|
||||
|
||||
end= map->last_word_ptr;
|
||||
|
||||
while (to <= end)
|
||||
*to++ &= ~(*from++);
|
||||
for (; to <= end; to++, from++)
|
||||
*to &= ~(*from);
|
||||
}
|
||||
|
||||
|
||||
void bitmap_union(MY_BITMAP *map, const MY_BITMAP *map2)
|
||||
{
|
||||
my_bitmap_map *to= map->bitmap, *from= map2->bitmap, *end;
|
||||
|
||||
DBUG_ASSERT(map->bitmap && map2->bitmap &&
|
||||
map->n_bits==map2->n_bits);
|
||||
end= map->last_word_ptr;
|
||||
|
||||
while (to <= end)
|
||||
*to++ |= *from++;
|
||||
for (; to <= end; to++, from++)
|
||||
*to |= *from;
|
||||
}
|
||||
|
||||
|
||||
void bitmap_xor(MY_BITMAP *map, const MY_BITMAP *map2)
|
||||
{
|
||||
my_bitmap_map *to= map->bitmap, *from= map2->bitmap, *end= map->last_word_ptr;
|
||||
my_bitmap_map *to= map->bitmap, *from= map2->bitmap, *end;
|
||||
DBUG_ASSERT(map->bitmap && map2->bitmap &&
|
||||
map->n_bits==map2->n_bits);
|
||||
while (to <= end)
|
||||
*to++ ^= *from++;
|
||||
end= map->last_word_ptr;
|
||||
|
||||
for (; to <= end; to++, from++)
|
||||
*to ^= *from;
|
||||
}
|
||||
|
||||
|
||||
void bitmap_invert(MY_BITMAP *map)
|
||||
{
|
||||
my_bitmap_map *to= map->bitmap, *end;
|
||||
|
||||
DBUG_ASSERT(map->bitmap);
|
||||
end= map->last_word_ptr;
|
||||
|
||||
while (to <= end)
|
||||
*to++ ^= 0xFFFFFFFF;
|
||||
for (; to <= end; to++)
|
||||
*to ^= 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
|
||||
uint bitmap_bits_set(const MY_BITMAP *map)
|
||||
{
|
||||
uchar *m= (uchar*)map->bitmap;
|
||||
uchar *end= m + no_bytes_in_map(map);
|
||||
{
|
||||
my_bitmap_map *data_ptr= map->bitmap;
|
||||
my_bitmap_map *end= map->last_word_ptr;
|
||||
uint res= 0;
|
||||
|
||||
DBUG_ASSERT(map->bitmap);
|
||||
*map->last_word_ptr&= ~map->last_word_mask; /*Reset last bits to zero*/
|
||||
while (m < end)
|
||||
res+= my_count_bits_ushort(*m++);
|
||||
|
||||
for (; data_ptr < end; data_ptr++)
|
||||
res+= my_count_bits_uint32(*data_ptr);
|
||||
|
||||
/*Reset last bits to zero*/
|
||||
res+= my_count_bits_uint32(*map->last_word_ptr & ~map->last_word_mask);
|
||||
return res;
|
||||
}
|
||||
|
||||
@ -467,76 +528,44 @@ uint bitmap_bits_set(const MY_BITMAP *map)
|
||||
void bitmap_copy(MY_BITMAP *map, const MY_BITMAP *map2)
|
||||
{
|
||||
my_bitmap_map *to= map->bitmap, *from= map2->bitmap, *end;
|
||||
|
||||
DBUG_ASSERT(map->bitmap && map2->bitmap &&
|
||||
map->n_bits==map2->n_bits);
|
||||
end= map->last_word_ptr;
|
||||
while (to <= end)
|
||||
*to++ = *from++;
|
||||
|
||||
for (; to <= end; to++, from++)
|
||||
*to = *from;
|
||||
}
|
||||
|
||||
|
||||
uint bitmap_get_first_set(const MY_BITMAP *map)
|
||||
{
|
||||
uchar *byte_ptr;
|
||||
uint i,j,k;
|
||||
uint word_pos;
|
||||
my_bitmap_map *data_ptr, *end= map->last_word_ptr;
|
||||
|
||||
DBUG_ASSERT(map->bitmap);
|
||||
data_ptr= map->bitmap;
|
||||
*map->last_word_ptr &= ~map->last_word_mask;
|
||||
|
||||
for (i=0; data_ptr <= end; data_ptr++, i++)
|
||||
{
|
||||
for (word_pos=0; data_ptr < end; data_ptr++, word_pos++)
|
||||
if (*data_ptr)
|
||||
{
|
||||
byte_ptr= (uchar*)data_ptr;
|
||||
for (j=0; ; j++, byte_ptr++)
|
||||
{
|
||||
if (*byte_ptr)
|
||||
{
|
||||
for (k=0; ; k++)
|
||||
{
|
||||
if (*byte_ptr & (1 << k))
|
||||
return (i*32) + (j*8) + k;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return MY_BIT_NONE;
|
||||
return get_first_set(*data_ptr, word_pos);
|
||||
|
||||
return get_first_set(*map->last_word_ptr & ~map->last_word_mask, word_pos);
|
||||
}
|
||||
|
||||
|
||||
uint bitmap_get_first(const MY_BITMAP *map)
|
||||
{
|
||||
uchar *byte_ptr;
|
||||
uint i,j,k;
|
||||
uint word_pos;
|
||||
my_bitmap_map *data_ptr, *end= map->last_word_ptr;
|
||||
|
||||
DBUG_ASSERT(map->bitmap);
|
||||
data_ptr= map->bitmap;
|
||||
*map->last_word_ptr|= map->last_word_mask;
|
||||
|
||||
for (i=0; data_ptr <= end; data_ptr++, i++)
|
||||
{
|
||||
for (word_pos=0; data_ptr < end; data_ptr++, word_pos++)
|
||||
if (*data_ptr != 0xFFFFFFFF)
|
||||
{
|
||||
byte_ptr= (uchar*)data_ptr;
|
||||
for (j=0; ; j++, byte_ptr++)
|
||||
{
|
||||
if (*byte_ptr != 0xFF)
|
||||
{
|
||||
for (k=0; ; k++)
|
||||
{
|
||||
if (!(*byte_ptr & (1 << k)))
|
||||
return (i*32) + (j*8) + k;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return MY_BIT_NONE;
|
||||
return get_first_not_set(*data_ptr, word_pos);
|
||||
|
||||
return get_first_not_set(*map->last_word_ptr | map->last_word_mask, word_pos);
|
||||
}
|
||||
|
||||
|
||||
@ -557,376 +586,3 @@ void bitmap_lock_clear_bit(MY_BITMAP *map, uint bitmap_bit)
|
||||
bitmap_clear_bit(map, bitmap_bit);
|
||||
bitmap_unlock(map);
|
||||
}
|
||||
|
||||
#ifdef MAIN
|
||||
|
||||
uint get_rand_bit(uint bitsize)
|
||||
{
|
||||
return (rand() % bitsize);
|
||||
}
|
||||
|
||||
bool test_set_get_clear_bit(MY_BITMAP *map, uint bitsize)
|
||||
{
|
||||
uint i, test_bit;
|
||||
uint no_loops= bitsize > 128 ? 128 : bitsize;
|
||||
for (i=0; i < no_loops; i++)
|
||||
{
|
||||
test_bit= get_rand_bit(bitsize);
|
||||
bitmap_set_bit(map, test_bit);
|
||||
if (!bitmap_is_set(map, test_bit))
|
||||
goto error1;
|
||||
bitmap_clear_bit(map, test_bit);
|
||||
if (bitmap_is_set(map, test_bit))
|
||||
goto error2;
|
||||
}
|
||||
return FALSE;
|
||||
error1:
|
||||
printf("Error in set bit, bit %u, bitsize = %u", test_bit, bitsize);
|
||||
return TRUE;
|
||||
error2:
|
||||
printf("Error in clear bit, bit %u, bitsize = %u", test_bit, bitsize);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool test_flip_bit(MY_BITMAP *map, uint bitsize)
|
||||
{
|
||||
uint i, test_bit;
|
||||
uint no_loops= bitsize > 128 ? 128 : bitsize;
|
||||
for (i=0; i < no_loops; i++)
|
||||
{
|
||||
test_bit= get_rand_bit(bitsize);
|
||||
bitmap_flip_bit(map, test_bit);
|
||||
if (!bitmap_is_set(map, test_bit))
|
||||
goto error1;
|
||||
bitmap_flip_bit(map, test_bit);
|
||||
if (bitmap_is_set(map, test_bit))
|
||||
goto error2;
|
||||
}
|
||||
return FALSE;
|
||||
error1:
|
||||
printf("Error in flip bit 1, bit %u, bitsize = %u", test_bit, bitsize);
|
||||
return TRUE;
|
||||
error2:
|
||||
printf("Error in flip bit 2, bit %u, bitsize = %u", test_bit, bitsize);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool test_operators(MY_BITMAP *map __attribute__((unused)),
|
||||
uint bitsize __attribute__((unused)))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool test_get_all_bits(MY_BITMAP *map, uint bitsize)
|
||||
{
|
||||
uint i;
|
||||
bitmap_set_all(map);
|
||||
if (!bitmap_is_set_all(map))
|
||||
goto error1;
|
||||
if (!bitmap_is_prefix(map, bitsize))
|
||||
goto error5;
|
||||
bitmap_clear_all(map);
|
||||
if (!bitmap_is_clear_all(map))
|
||||
goto error2;
|
||||
if (!bitmap_is_prefix(map, 0))
|
||||
goto error6;
|
||||
for (i=0; i<bitsize;i++)
|
||||
bitmap_set_bit(map, i);
|
||||
if (!bitmap_is_set_all(map))
|
||||
goto error3;
|
||||
for (i=0; i<bitsize;i++)
|
||||
bitmap_clear_bit(map, i);
|
||||
if (!bitmap_is_clear_all(map))
|
||||
goto error4;
|
||||
return FALSE;
|
||||
error1:
|
||||
printf("Error in set_all, bitsize = %u", bitsize);
|
||||
return TRUE;
|
||||
error2:
|
||||
printf("Error in clear_all, bitsize = %u", bitsize);
|
||||
return TRUE;
|
||||
error3:
|
||||
printf("Error in bitmap_is_set_all, bitsize = %u", bitsize);
|
||||
return TRUE;
|
||||
error4:
|
||||
printf("Error in bitmap_is_clear_all, bitsize = %u", bitsize);
|
||||
return TRUE;
|
||||
error5:
|
||||
printf("Error in set_all through set_prefix, bitsize = %u", bitsize);
|
||||
return TRUE;
|
||||
error6:
|
||||
printf("Error in clear_all through set_prefix, bitsize = %u", bitsize);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool test_compare_operators(MY_BITMAP *map, uint bitsize)
|
||||
{
|
||||
uint i, j, test_bit1, test_bit2, test_bit3,test_bit4;
|
||||
uint no_loops= bitsize > 128 ? 128 : bitsize;
|
||||
MY_BITMAP map2_obj, map3_obj;
|
||||
MY_BITMAP *map2= &map2_obj, *map3= &map3_obj;
|
||||
my_bitmap_map map2buf[1024];
|
||||
my_bitmap_map map3buf[1024];
|
||||
bitmap_init(&map2_obj, map2buf, bitsize, FALSE);
|
||||
bitmap_init(&map3_obj, map3buf, bitsize, FALSE);
|
||||
bitmap_clear_all(map2);
|
||||
bitmap_clear_all(map3);
|
||||
for (i=0; i < no_loops; i++)
|
||||
{
|
||||
test_bit1=get_rand_bit(bitsize);
|
||||
bitmap_set_prefix(map, test_bit1);
|
||||
test_bit2=get_rand_bit(bitsize);
|
||||
bitmap_set_prefix(map2, test_bit2);
|
||||
bitmap_intersect(map, map2);
|
||||
test_bit3= test_bit2 < test_bit1 ? test_bit2 : test_bit1;
|
||||
bitmap_set_prefix(map3, test_bit3);
|
||||
if (!bitmap_cmp(map, map3))
|
||||
goto error1;
|
||||
bitmap_clear_all(map);
|
||||
bitmap_clear_all(map2);
|
||||
bitmap_clear_all(map3);
|
||||
test_bit1=get_rand_bit(bitsize);
|
||||
test_bit2=get_rand_bit(bitsize);
|
||||
test_bit3=get_rand_bit(bitsize);
|
||||
bitmap_set_prefix(map, test_bit1);
|
||||
bitmap_set_prefix(map2, test_bit2);
|
||||
test_bit3= test_bit2 > test_bit1 ? test_bit2 : test_bit1;
|
||||
bitmap_set_prefix(map3, test_bit3);
|
||||
bitmap_union(map, map2);
|
||||
if (!bitmap_cmp(map, map3))
|
||||
goto error2;
|
||||
bitmap_clear_all(map);
|
||||
bitmap_clear_all(map2);
|
||||
bitmap_clear_all(map3);
|
||||
test_bit1=get_rand_bit(bitsize);
|
||||
test_bit2=get_rand_bit(bitsize);
|
||||
test_bit3=get_rand_bit(bitsize);
|
||||
bitmap_set_prefix(map, test_bit1);
|
||||
bitmap_set_prefix(map2, test_bit2);
|
||||
bitmap_xor(map, map2);
|
||||
test_bit3= test_bit2 > test_bit1 ? test_bit2 : test_bit1;
|
||||
test_bit4= test_bit2 < test_bit1 ? test_bit2 : test_bit1;
|
||||
bitmap_set_prefix(map3, test_bit3);
|
||||
for (j=0; j < test_bit4; j++)
|
||||
bitmap_clear_bit(map3, j);
|
||||
if (!bitmap_cmp(map, map3))
|
||||
goto error3;
|
||||
bitmap_clear_all(map);
|
||||
bitmap_clear_all(map2);
|
||||
bitmap_clear_all(map3);
|
||||
test_bit1=get_rand_bit(bitsize);
|
||||
test_bit2=get_rand_bit(bitsize);
|
||||
test_bit3=get_rand_bit(bitsize);
|
||||
bitmap_set_prefix(map, test_bit1);
|
||||
bitmap_set_prefix(map2, test_bit2);
|
||||
bitmap_subtract(map, map2);
|
||||
if (test_bit2 < test_bit1)
|
||||
{
|
||||
bitmap_set_prefix(map3, test_bit1);
|
||||
for (j=0; j < test_bit2; j++)
|
||||
bitmap_clear_bit(map3, j);
|
||||
}
|
||||
if (!bitmap_cmp(map, map3))
|
||||
goto error4;
|
||||
bitmap_clear_all(map);
|
||||
bitmap_clear_all(map2);
|
||||
bitmap_clear_all(map3);
|
||||
test_bit1=get_rand_bit(bitsize);
|
||||
bitmap_set_prefix(map, test_bit1);
|
||||
bitmap_invert(map);
|
||||
bitmap_set_all(map3);
|
||||
for (j=0; j < test_bit1; j++)
|
||||
bitmap_clear_bit(map3, j);
|
||||
if (!bitmap_cmp(map, map3))
|
||||
goto error5;
|
||||
bitmap_clear_all(map);
|
||||
bitmap_clear_all(map3);
|
||||
}
|
||||
return FALSE;
|
||||
error1:
|
||||
printf("intersect error bitsize=%u,size1=%u,size2=%u", bitsize,
|
||||
test_bit1,test_bit2);
|
||||
return TRUE;
|
||||
error2:
|
||||
printf("union error bitsize=%u,size1=%u,size2=%u", bitsize,
|
||||
test_bit1,test_bit2);
|
||||
return TRUE;
|
||||
error3:
|
||||
printf("xor error bitsize=%u,size1=%u,size2=%u", bitsize,
|
||||
test_bit1,test_bit2);
|
||||
return TRUE;
|
||||
error4:
|
||||
printf("subtract error bitsize=%u,size1=%u,size2=%u", bitsize,
|
||||
test_bit1,test_bit2);
|
||||
return TRUE;
|
||||
error5:
|
||||
printf("invert error bitsize=%u,size=%u", bitsize,
|
||||
test_bit1);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool test_count_bits_set(MY_BITMAP *map, uint bitsize)
|
||||
{
|
||||
uint i, bit_count=0, test_bit;
|
||||
uint no_loops= bitsize > 128 ? 128 : bitsize;
|
||||
for (i=0; i < no_loops; i++)
|
||||
{
|
||||
test_bit=get_rand_bit(bitsize);
|
||||
if (!bitmap_is_set(map, test_bit))
|
||||
{
|
||||
bitmap_set_bit(map, test_bit);
|
||||
bit_count++;
|
||||
}
|
||||
}
|
||||
if (bit_count==0 && bitsize > 0)
|
||||
goto error1;
|
||||
if (bitmap_bits_set(map) != bit_count)
|
||||
goto error2;
|
||||
return FALSE;
|
||||
error1:
|
||||
printf("No bits set bitsize = %u", bitsize);
|
||||
return TRUE;
|
||||
error2:
|
||||
printf("Wrong count of bits set, bitsize = %u", bitsize);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool test_get_first_bit(MY_BITMAP *map, uint bitsize)
|
||||
{
|
||||
uint i, test_bit;
|
||||
uint no_loops= bitsize > 128 ? 128 : bitsize;
|
||||
for (i=0; i < no_loops; i++)
|
||||
{
|
||||
test_bit=get_rand_bit(bitsize);
|
||||
bitmap_set_bit(map, test_bit);
|
||||
if (bitmap_get_first_set(map) != test_bit)
|
||||
goto error1;
|
||||
bitmap_set_all(map);
|
||||
bitmap_clear_bit(map, test_bit);
|
||||
if (bitmap_get_first(map) != test_bit)
|
||||
goto error2;
|
||||
bitmap_clear_all(map);
|
||||
}
|
||||
return FALSE;
|
||||
error1:
|
||||
printf("get_first_set error bitsize=%u,prefix_size=%u",bitsize,test_bit);
|
||||
return TRUE;
|
||||
error2:
|
||||
printf("get_first error bitsize= %u, prefix_size= %u",bitsize,test_bit);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool test_get_next_bit(MY_BITMAP *map, uint bitsize)
|
||||
{
|
||||
uint i, j, test_bit;
|
||||
uint no_loops= bitsize > 128 ? 128 : bitsize;
|
||||
for (i=0; i < no_loops; i++)
|
||||
{
|
||||
test_bit=get_rand_bit(bitsize);
|
||||
for (j=0; j < test_bit; j++)
|
||||
bitmap_set_next(map);
|
||||
if (!bitmap_is_prefix(map, test_bit))
|
||||
goto error1;
|
||||
bitmap_clear_all(map);
|
||||
}
|
||||
return FALSE;
|
||||
error1:
|
||||
printf("get_next error bitsize= %u, prefix_size= %u", bitsize,test_bit);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool test_prefix(MY_BITMAP *map, uint bitsize)
|
||||
{
|
||||
uint i, j, test_bit;
|
||||
uint no_loops= bitsize > 128 ? 128 : bitsize;
|
||||
for (i=0; i < no_loops; i++)
|
||||
{
|
||||
test_bit=get_rand_bit(bitsize);
|
||||
bitmap_set_prefix(map, test_bit);
|
||||
if (!bitmap_is_prefix(map, test_bit))
|
||||
goto error1;
|
||||
bitmap_clear_all(map);
|
||||
for (j=0; j < test_bit; j++)
|
||||
bitmap_set_bit(map, j);
|
||||
if (!bitmap_is_prefix(map, test_bit))
|
||||
goto error2;
|
||||
bitmap_set_all(map);
|
||||
for (j=bitsize - 1; ~(j-test_bit); j--)
|
||||
bitmap_clear_bit(map, j);
|
||||
if (!bitmap_is_prefix(map, test_bit))
|
||||
goto error3;
|
||||
bitmap_clear_all(map);
|
||||
}
|
||||
return FALSE;
|
||||
error1:
|
||||
printf("prefix1 error bitsize = %u, prefix_size = %u", bitsize,test_bit);
|
||||
return TRUE;
|
||||
error2:
|
||||
printf("prefix2 error bitsize = %u, prefix_size = %u", bitsize,test_bit);
|
||||
return TRUE;
|
||||
error3:
|
||||
printf("prefix3 error bitsize = %u, prefix_size = %u", bitsize,test_bit);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
bool do_test(uint bitsize)
|
||||
{
|
||||
MY_BITMAP map;
|
||||
my_bitmap_map buf[1024];
|
||||
if (bitmap_init(&map, buf, bitsize, FALSE))
|
||||
{
|
||||
printf("init error for bitsize %d", bitsize);
|
||||
goto error;
|
||||
}
|
||||
if (test_set_get_clear_bit(&map,bitsize))
|
||||
goto error;
|
||||
bitmap_clear_all(&map);
|
||||
if (test_flip_bit(&map,bitsize))
|
||||
goto error;
|
||||
bitmap_clear_all(&map);
|
||||
if (test_operators(&map,bitsize))
|
||||
goto error;
|
||||
bitmap_clear_all(&map);
|
||||
if (test_get_all_bits(&map, bitsize))
|
||||
goto error;
|
||||
bitmap_clear_all(&map);
|
||||
if (test_compare_operators(&map,bitsize))
|
||||
goto error;
|
||||
bitmap_clear_all(&map);
|
||||
if (test_count_bits_set(&map,bitsize))
|
||||
goto error;
|
||||
bitmap_clear_all(&map);
|
||||
if (test_get_first_bit(&map,bitsize))
|
||||
goto error;
|
||||
bitmap_clear_all(&map);
|
||||
if (test_get_next_bit(&map,bitsize))
|
||||
goto error;
|
||||
if (test_prefix(&map,bitsize))
|
||||
goto error;
|
||||
return FALSE;
|
||||
error:
|
||||
printf("\n");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int i;
|
||||
for (i= 1; i < 4096; i++)
|
||||
{
|
||||
printf("Start test for bitsize=%u\n",i);
|
||||
if (do_test(i))
|
||||
return -1;
|
||||
}
|
||||
printf("OK\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
In directory mysys:
|
||||
make test_bitmap
|
||||
will build the bitmap tests and ./test_bitmap will execute it
|
||||
*/
|
||||
|
||||
#endif
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2000-2003 MySQL AB, 2008-2009 Sun Microsystems, Inc
|
||||
/* Copyright (c) 2000, 2011 Oracle and/or its affiliates. All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -37,8 +37,6 @@ static my_bool win32_init_tcp_ip();
|
||||
#define SCALE_USEC 10000
|
||||
|
||||
my_bool my_init_done= 0;
|
||||
/** True if @c my_basic_init() has been called. */
|
||||
my_bool my_basic_init_done= 0;
|
||||
uint mysys_usage_id= 0; /* Incremented for each my_init() */
|
||||
ulong my_thread_stack_size= 65536;
|
||||
|
||||
@ -56,23 +54,22 @@ static ulong atoi_octal(const char *str)
|
||||
MYSQL_FILE *mysql_stdin= NULL;
|
||||
static MYSQL_FILE instrumented_stdin;
|
||||
|
||||
/**
|
||||
Perform a limited initialisation of mysys.
|
||||
This initialisation is sufficient to:
|
||||
- allocate memory,
|
||||
- read configuration files,
|
||||
- parse command lines arguments.
|
||||
To complete the mysys initialisation,
|
||||
call my_init().
|
||||
@return 0 on success
|
||||
*/
|
||||
my_bool my_basic_init(void)
|
||||
{
|
||||
char * str;
|
||||
|
||||
if (my_basic_init_done)
|
||||
/**
|
||||
Initialize my_sys functions, resources and variables
|
||||
|
||||
@return Initialization result
|
||||
@retval 0 Success
|
||||
@retval 1 Error. Couldn't initialize environment
|
||||
*/
|
||||
my_bool my_init(void)
|
||||
{
|
||||
char *str;
|
||||
|
||||
if (my_init_done)
|
||||
return 0;
|
||||
my_basic_init_done= 1;
|
||||
|
||||
my_init_done= 1;
|
||||
|
||||
mysys_usage_id++;
|
||||
my_umask= 0660; /* Default umask for new files */
|
||||
@ -105,41 +102,11 @@ my_bool my_basic_init(void)
|
||||
#if defined(HAVE_PTHREAD_INIT)
|
||||
pthread_init(); /* Must be called before DBUG_ENTER */
|
||||
#endif
|
||||
if (my_thread_basic_global_init())
|
||||
return 1;
|
||||
|
||||
/* $HOME is needed early to parse configuration files located in ~/ */
|
||||
if ((home_dir= getenv("HOME")) != 0)
|
||||
home_dir= intern_filename(home_dir_buff, home_dir);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Init my_sys functions and my_sys variabels
|
||||
|
||||
SYNOPSIS
|
||||
my_init()
|
||||
|
||||
RETURN
|
||||
0 ok
|
||||
1 Couldn't initialize environment
|
||||
*/
|
||||
|
||||
my_bool my_init(void)
|
||||
{
|
||||
if (my_init_done)
|
||||
return 0;
|
||||
|
||||
my_init_done= 1;
|
||||
|
||||
if (my_basic_init())
|
||||
return 1;
|
||||
|
||||
if (my_thread_global_init())
|
||||
return 1;
|
||||
|
||||
{
|
||||
DBUG_ENTER("my_init");
|
||||
DBUG_PROCESS((char*) (my_progname ? my_progname : "unknown"));
|
||||
@ -256,7 +223,6 @@ Voluntary context switches %ld, Involuntary context switches %ld\n",
|
||||
#endif /* __WIN__ */
|
||||
|
||||
my_init_done=0;
|
||||
my_basic_init_done= 0;
|
||||
} /* my_end */
|
||||
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2000 MySQL AB, 2008-2009 Sun Microsystems, Inc
|
||||
/* Copyright (c) 2000, 2011 Oracle and/or its affiliates. All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -66,26 +66,83 @@ nptl_pthread_exit_hack_handler(void *arg __attribute((unused)))
|
||||
|
||||
static uint get_thread_lib(void);
|
||||
|
||||
/** True if @c my_thread_basic_global_init() has been called. */
|
||||
static my_bool my_thread_basic_global_init_done= 0;
|
||||
/** True if @c my_thread_global_init() has been called. */
|
||||
static my_bool my_thread_global_init_done= 0;
|
||||
|
||||
|
||||
/**
|
||||
Perform a minimal initialisation of mysys, when compiled with threads.
|
||||
The initialisation performed is sufficient to:
|
||||
- allocate memory
|
||||
- perform file operations
|
||||
- use charsets
|
||||
- use my_errno
|
||||
@sa my_basic_init
|
||||
@sa my_thread_basic_global_reinit
|
||||
Re-initialize components initialized early with @c my_thread_global_init.
|
||||
Some mutexes were initialized before the instrumentation.
|
||||
Destroy + create them again, now that the instrumentation
|
||||
is in place.
|
||||
This is safe, since this function() is called before creating new threads,
|
||||
so the mutexes are not in use.
|
||||
*/
|
||||
my_bool my_thread_basic_global_init(void)
|
||||
void my_thread_global_reinit(void)
|
||||
{
|
||||
struct st_my_thread_var *tmp;
|
||||
|
||||
DBUG_ASSERT(my_thread_global_init_done);
|
||||
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
my_init_mysys_psi_keys();
|
||||
#endif
|
||||
|
||||
mysql_mutex_destroy(&THR_LOCK_isam);
|
||||
mysql_mutex_init(key_THR_LOCK_isam, &THR_LOCK_isam, MY_MUTEX_INIT_SLOW);
|
||||
|
||||
mysql_mutex_destroy(&THR_LOCK_heap);
|
||||
mysql_mutex_init(key_THR_LOCK_heap, &THR_LOCK_heap, MY_MUTEX_INIT_FAST);
|
||||
|
||||
mysql_mutex_destroy(&THR_LOCK_net);
|
||||
mysql_mutex_init(key_THR_LOCK_net, &THR_LOCK_net, MY_MUTEX_INIT_FAST);
|
||||
|
||||
mysql_mutex_destroy(&THR_LOCK_myisam);
|
||||
mysql_mutex_init(key_THR_LOCK_myisam, &THR_LOCK_myisam, MY_MUTEX_INIT_SLOW);
|
||||
|
||||
mysql_mutex_destroy(&THR_LOCK_malloc);
|
||||
mysql_mutex_init(key_THR_LOCK_malloc, &THR_LOCK_malloc, MY_MUTEX_INIT_FAST);
|
||||
|
||||
mysql_mutex_destroy(&THR_LOCK_open);
|
||||
mysql_mutex_init(key_THR_LOCK_open, &THR_LOCK_open, MY_MUTEX_INIT_FAST);
|
||||
|
||||
mysql_mutex_destroy(&THR_LOCK_charset);
|
||||
mysql_mutex_init(key_THR_LOCK_charset, &THR_LOCK_charset, MY_MUTEX_INIT_FAST);
|
||||
|
||||
mysql_mutex_destroy(&THR_LOCK_threads);
|
||||
mysql_mutex_init(key_THR_LOCK_threads, &THR_LOCK_threads, MY_MUTEX_INIT_FAST);
|
||||
|
||||
mysql_cond_destroy(&THR_COND_threads);
|
||||
mysql_cond_init(key_THR_COND_threads, &THR_COND_threads, NULL);
|
||||
|
||||
tmp= my_pthread_getspecific(struct st_my_thread_var*, THR_KEY_mysys);
|
||||
DBUG_ASSERT(tmp);
|
||||
|
||||
mysql_mutex_destroy(&tmp->mutex);
|
||||
mysql_mutex_init(key_my_thread_var_mutex, &tmp->mutex, MY_MUTEX_INIT_FAST);
|
||||
|
||||
mysql_cond_destroy(&tmp->suspend);
|
||||
mysql_cond_init(key_my_thread_var_suspend, &tmp->suspend, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
initialize thread environment
|
||||
|
||||
SYNOPSIS
|
||||
my_thread_global_init()
|
||||
|
||||
RETURN
|
||||
0 ok
|
||||
1 error (Couldn't create THR_KEY_mysys)
|
||||
*/
|
||||
|
||||
my_bool my_thread_global_init(void)
|
||||
{
|
||||
int pth_ret;
|
||||
|
||||
if (my_thread_basic_global_init_done)
|
||||
if (my_thread_global_init_done)
|
||||
return 0;
|
||||
my_thread_basic_global_init_done= 1;
|
||||
my_thread_global_init_done= 1;
|
||||
|
||||
#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
|
||||
/*
|
||||
@ -111,77 +168,18 @@ my_bool my_thread_basic_global_init(void)
|
||||
PTHREAD_MUTEX_ERRORCHECK);
|
||||
#endif
|
||||
|
||||
mysql_mutex_init(key_THR_LOCK_malloc, &THR_LOCK_malloc, MY_MUTEX_INIT_FAST);
|
||||
mysql_mutex_init(key_THR_LOCK_open, &THR_LOCK_open, MY_MUTEX_INIT_FAST);
|
||||
mysql_mutex_init(key_THR_LOCK_charset, &THR_LOCK_charset, MY_MUTEX_INIT_FAST);
|
||||
mysql_mutex_init(key_THR_LOCK_threads, &THR_LOCK_threads, MY_MUTEX_INIT_FAST);
|
||||
|
||||
if ((pth_ret= pthread_key_create(&THR_KEY_mysys, NULL)) != 0)
|
||||
{
|
||||
fprintf(stderr, "Can't initialize threads: error %d\n", pth_ret);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (my_thread_init())
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
Re-initialize components initialized early with @c my_thread_basic_global_init.
|
||||
Some mutexes were initialized before the instrumentation.
|
||||
Destroy + create them again, now that the instrumentation
|
||||
is in place.
|
||||
This is safe, since this function() is called before creating new threads,
|
||||
so the mutexes are not in use.
|
||||
*/
|
||||
void my_thread_basic_global_reinit(void)
|
||||
{
|
||||
struct st_my_thread_var *tmp;
|
||||
|
||||
DBUG_ASSERT(my_thread_basic_global_init_done);
|
||||
|
||||
#ifdef HAVE_PSI_INTERFACE
|
||||
my_init_mysys_psi_keys();
|
||||
#endif
|
||||
|
||||
mysql_mutex_destroy(&THR_LOCK_malloc);
|
||||
mysql_mutex_init(key_THR_LOCK_malloc, &THR_LOCK_malloc, MY_MUTEX_INIT_FAST);
|
||||
|
||||
mysql_mutex_destroy(&THR_LOCK_open);
|
||||
mysql_mutex_init(key_THR_LOCK_open, &THR_LOCK_open, MY_MUTEX_INIT_FAST);
|
||||
|
||||
mysql_mutex_destroy(&THR_LOCK_charset);
|
||||
mysql_mutex_init(key_THR_LOCK_charset, &THR_LOCK_charset, MY_MUTEX_INIT_FAST);
|
||||
|
||||
mysql_mutex_destroy(&THR_LOCK_threads);
|
||||
mysql_mutex_init(key_THR_LOCK_threads, &THR_LOCK_threads, MY_MUTEX_INIT_FAST);
|
||||
|
||||
tmp= my_pthread_getspecific(struct st_my_thread_var*, THR_KEY_mysys);
|
||||
DBUG_ASSERT(tmp);
|
||||
|
||||
mysql_mutex_destroy(&tmp->mutex);
|
||||
mysql_mutex_init(key_my_thread_var_mutex, &tmp->mutex, MY_MUTEX_INIT_FAST);
|
||||
|
||||
mysql_cond_destroy(&tmp->suspend);
|
||||
mysql_cond_init(key_my_thread_var_suspend, &tmp->suspend, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
initialize thread environment
|
||||
|
||||
SYNOPSIS
|
||||
my_thread_global_init()
|
||||
|
||||
RETURN
|
||||
0 ok
|
||||
1 error (Couldn't create THR_KEY_mysys)
|
||||
*/
|
||||
|
||||
my_bool my_thread_global_init(void)
|
||||
{
|
||||
if (my_thread_basic_global_init())
|
||||
if (my_thread_init())
|
||||
return 1;
|
||||
|
||||
thd_lib_detected= get_thread_lib();
|
||||
@ -233,11 +231,6 @@ my_bool my_thread_global_init(void)
|
||||
install_sigabrt_handler();
|
||||
#endif
|
||||
|
||||
if (my_thread_init())
|
||||
{
|
||||
my_thread_global_end(); /* Clean up */
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -300,7 +293,7 @@ void my_thread_global_end(void)
|
||||
mysql_mutex_destroy(&LOCK_gethostbyname_r);
|
||||
#endif
|
||||
|
||||
my_thread_basic_global_init_done= 0;
|
||||
my_thread_global_init_done= 0;
|
||||
}
|
||||
|
||||
static my_thread_id thread_id= 0;
|
||||
|
@ -704,11 +704,11 @@ void my_safe_print_str(const char *val, int len)
|
||||
{
|
||||
__try
|
||||
{
|
||||
fprintf(stderr,"=%.*s\n", len, val);
|
||||
fprintf(stderr, "%.*s\n", len, val);
|
||||
}
|
||||
__except(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
fprintf(stderr,"is an invalid string pointer\n");
|
||||
fprintf(stderr, "is an invalid string pointer\n");
|
||||
}
|
||||
}
|
||||
#endif /*__WIN__*/
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include "probes_mysql.h"
|
||||
#include "sql_test.h" // TEST_filesort
|
||||
#include "opt_range.h" // SQL_SELECT
|
||||
#include "debug_sync.h"
|
||||
|
||||
/// How to write record_ref.
|
||||
#define WRITE_REF(file,from) \
|
||||
@ -123,6 +124,7 @@ ha_rows filesort(THD *thd, TABLE *table, SORT_FIELD *sortorder, uint s_length,
|
||||
Item_subselect *subselect= tab ? tab->containing_subselect() : 0;
|
||||
|
||||
MYSQL_FILESORT_START(table->s->db.str, table->s->table_name.str);
|
||||
DEBUG_SYNC(thd, "filesort_start");
|
||||
|
||||
/*
|
||||
Release InnoDB's adaptive hash index latch (if holding) before
|
||||
@ -325,12 +327,13 @@ ha_rows filesort(THD *thd, TABLE *table, SORT_FIELD *sortorder, uint s_length,
|
||||
}
|
||||
if (error)
|
||||
{
|
||||
DBUG_ASSERT(thd->is_error());
|
||||
int kill_errno= thd->killed_errno();
|
||||
DBUG_ASSERT(thd->is_error() || kill_errno);
|
||||
my_printf_error(ER_FILSORT_ABORT,
|
||||
"%s: %s",
|
||||
MYF(ME_ERROR + ME_WAITTANG),
|
||||
ER_THD(thd, ER_FILSORT_ABORT),
|
||||
thd->stmt_da->message());
|
||||
kill_errno ? ER(kill_errno) : thd->stmt_da->message());
|
||||
|
||||
if (global_system_variables.log_warnings > 1)
|
||||
{
|
||||
|
@ -1472,4 +1472,4 @@ int ha_ndbcluster_cond::generate_scan_filter_from_key(NdbScanOperation *op,
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
#endif /* HAVE_NDBCLUSTER_DB */
|
||||
#endif
|
||||
|
@ -2700,6 +2700,7 @@ void handler::print_error(int error, myf errflag)
|
||||
break;
|
||||
case HA_ERR_KEY_NOT_FOUND:
|
||||
case HA_ERR_NO_ACTIVE_RECORD:
|
||||
case HA_ERR_RECORD_DELETED:
|
||||
case HA_ERR_END_OF_FILE:
|
||||
textno=ER_KEY_NOT_FOUND;
|
||||
break;
|
||||
|
@ -2640,7 +2640,7 @@ Item_func_if::fix_length_and_dec()
|
||||
if (null1)
|
||||
{
|
||||
cached_result_type= arg2_type;
|
||||
collation.set(args[2]->collation.collation);
|
||||
collation.set(args[2]->collation);
|
||||
cached_field_type= args[2]->field_type();
|
||||
max_length= args[2]->max_length;
|
||||
return;
|
||||
@ -2649,7 +2649,7 @@ Item_func_if::fix_length_and_dec()
|
||||
if (null2)
|
||||
{
|
||||
cached_result_type= arg1_type;
|
||||
collation.set(args[1]->collation.collation);
|
||||
collation.set(args[1]->collation);
|
||||
cached_field_type= args[1]->field_type();
|
||||
max_length= args[1]->max_length;
|
||||
return;
|
||||
@ -3054,20 +3054,59 @@ void Item_func_case::fix_length_and_dec()
|
||||
agg[0]= args[first_expr_num];
|
||||
left_result_type= agg[0]->result_type();
|
||||
|
||||
/*
|
||||
As the first expression and WHEN expressions
|
||||
are intermixed in args[] array THEN and ELSE items,
|
||||
extract the first expression and all WHEN expressions into
|
||||
a temporary array, to process them easier.
|
||||
*/
|
||||
for (nagg= 0; nagg < ncases/2 ; nagg++)
|
||||
agg[nagg+1]= args[nagg*2];
|
||||
nagg++;
|
||||
if (!(found_types= collect_cmp_types(agg, nagg)))
|
||||
return;
|
||||
if (found_types & (1 << STRING_RESULT))
|
||||
{
|
||||
/*
|
||||
If we'll do string comparison, we also need to aggregate
|
||||
character set and collation for first/WHEN items and
|
||||
install converters for some of them to cmp_collation when necessary.
|
||||
This is done because cmp_item compatators cannot compare
|
||||
strings in two different character sets.
|
||||
Some examples when we install converters:
|
||||
|
||||
1. Converter installed for the first expression:
|
||||
|
||||
CASE latin1_item WHEN utf16_item THEN ... END
|
||||
|
||||
is replaced to:
|
||||
|
||||
CASE CONVERT(latin1_item USING utf16) WHEN utf16_item THEN ... END
|
||||
|
||||
2. Converter installed for the left WHEN item:
|
||||
|
||||
CASE utf16_item WHEN latin1_item THEN ... END
|
||||
|
||||
is replaced to:
|
||||
|
||||
CASE utf16_item WHEN CONVERT(latin1_item USING utf16) THEN ... END
|
||||
*/
|
||||
if (agg_arg_charsets_for_comparison(cmp_collation, agg, nagg))
|
||||
return;
|
||||
/*
|
||||
Now copy first expression and all WHEN expressions back to args[]
|
||||
arrray, because some of the items might have been changed to converters
|
||||
(e.g. Item_func_conv_charset, or Item_string for constants).
|
||||
*/
|
||||
args[first_expr_num]= agg[0];
|
||||
for (nagg= 0; nagg < ncases / 2; nagg++)
|
||||
args[nagg * 2]= agg[nagg + 1];
|
||||
}
|
||||
for (i= 0; i <= (uint)DECIMAL_RESULT; i++)
|
||||
{
|
||||
if (found_types & (1 << i) && !cmp_items[i])
|
||||
{
|
||||
DBUG_ASSERT((Item_result)i != ROW_RESULT);
|
||||
if ((Item_result)i == STRING_RESULT &&
|
||||
agg_arg_charsets_for_comparison(cmp_collation, agg, nagg))
|
||||
return;
|
||||
if (!(cmp_items[i]=
|
||||
cmp_item::get_comparator((Item_result)i,
|
||||
cmp_collation.collation)))
|
||||
|
@ -868,7 +868,7 @@ longlong Item_func_numhybrid::val_int()
|
||||
return 0;
|
||||
|
||||
char *end= (char*) res->ptr() + res->length();
|
||||
CHARSET_INFO *cs= str_value.charset();
|
||||
CHARSET_INFO *cs= res->charset();
|
||||
return (*(cs->cset->strtoll10))(cs, res->ptr(), &end, &err_not_used);
|
||||
}
|
||||
default:
|
||||
|
@ -699,6 +699,7 @@ String *Item_func_des_encrypt::val_str(String *str)
|
||||
tmp_arg[res_length-1]=tail; // save extra length
|
||||
tmp_value.realloc(res_length+1);
|
||||
tmp_value.length(res_length+1);
|
||||
tmp_value.set_charset(&my_charset_bin);
|
||||
tmp_value[0]=(char) (128 | key_number);
|
||||
// Real encryption
|
||||
bzero((char*) &ivec,sizeof(ivec));
|
||||
@ -786,6 +787,7 @@ String *Item_func_des_decrypt::val_str(String *str)
|
||||
if ((tail=(uint) (uchar) tmp_value[length-2]) > 8)
|
||||
goto wrong_key; // Wrong key
|
||||
tmp_value.length(length-1-tail);
|
||||
tmp_value.set_charset(&my_charset_bin);
|
||||
return &tmp_value;
|
||||
|
||||
error:
|
||||
@ -3448,14 +3450,68 @@ String *Item_func_quote::val_str(String *str)
|
||||
}
|
||||
|
||||
arg_length= arg->length();
|
||||
new_length= arg_length+2; /* for beginning and ending ' signs */
|
||||
|
||||
for (from= (char*) arg->ptr(), end= from + arg_length; from < end; from++)
|
||||
new_length+= get_esc_bit(escmask, (uchar) *from);
|
||||
if (collation.collation->mbmaxlen == 1)
|
||||
{
|
||||
new_length= arg_length + 2; /* for beginning and ending ' signs */
|
||||
for (from= (char*) arg->ptr(), end= from + arg_length; from < end; from++)
|
||||
new_length+= get_esc_bit(escmask, (uchar) *from);
|
||||
}
|
||||
else
|
||||
{
|
||||
new_length= (arg_length * 2) + /* For string characters */
|
||||
(2 * collation.collation->mbmaxlen); /* For quotes */
|
||||
}
|
||||
|
||||
if (tmp_value.alloc(new_length))
|
||||
goto null;
|
||||
|
||||
if (collation.collation->mbmaxlen > 1)
|
||||
{
|
||||
CHARSET_INFO *cs= collation.collation;
|
||||
int mblen;
|
||||
uchar *to_end;
|
||||
to= (char*) tmp_value.ptr();
|
||||
to_end= (uchar*) to + new_length;
|
||||
|
||||
/* Put leading quote */
|
||||
if ((mblen= cs->cset->wc_mb(cs, '\'', (uchar *) to, to_end)) <= 0)
|
||||
goto null;
|
||||
to+= mblen;
|
||||
|
||||
for (start= (char*) arg->ptr(), end= start + arg_length; start < end; )
|
||||
{
|
||||
my_wc_t wc;
|
||||
bool escape;
|
||||
if ((mblen= cs->cset->mb_wc(cs, &wc, (uchar*) start, (uchar*) end)) <= 0)
|
||||
goto null;
|
||||
start+= mblen;
|
||||
switch (wc) {
|
||||
case 0: escape= 1; wc= '0'; break;
|
||||
case '\032': escape= 1; wc= 'Z'; break;
|
||||
case '\'': escape= 1; break;
|
||||
case '\\': escape= 1; break;
|
||||
default: escape= 0; break;
|
||||
}
|
||||
if (escape)
|
||||
{
|
||||
if ((mblen= cs->cset->wc_mb(cs, '\\', (uchar*) to, to_end)) <= 0)
|
||||
goto null;
|
||||
to+= mblen;
|
||||
}
|
||||
if ((mblen= cs->cset->wc_mb(cs, wc, (uchar*) to, to_end)) <= 0)
|
||||
goto null;
|
||||
to+= mblen;
|
||||
}
|
||||
|
||||
/* Put trailing quote */
|
||||
if ((mblen= cs->cset->wc_mb(cs, '\'', (uchar *) to, to_end)) <= 0)
|
||||
goto null;
|
||||
to+= mblen;
|
||||
new_length= to - tmp_value.ptr();
|
||||
goto ret;
|
||||
}
|
||||
|
||||
/*
|
||||
We replace characters from the end to the beginning
|
||||
*/
|
||||
@ -3487,6 +3543,8 @@ String *Item_func_quote::val_str(String *str)
|
||||
}
|
||||
}
|
||||
*to= '\'';
|
||||
|
||||
ret:
|
||||
tmp_value.length(new_length);
|
||||
tmp_value.set_charset(collation.collation);
|
||||
null_value= 0;
|
||||
|
@ -787,9 +787,10 @@ public:
|
||||
String *val_str(String *);
|
||||
void fix_length_and_dec()
|
||||
{
|
||||
ulonglong max_result_length= (ulonglong) args[0]->max_length * 2 + 2;
|
||||
max_length= (uint32) min(max_result_length, MAX_BLOB_WIDTH);
|
||||
collation.set(args[0]->collation);
|
||||
ulonglong max_result_length= (ulonglong) args[0]->max_length * 2 +
|
||||
2 * collation.collation->mbmaxlen;
|
||||
max_length= (uint32) min(max_result_length, MAX_BLOB_WIDTH);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -1133,16 +1133,13 @@ String* Item_func_monthname::val_str(String* str)
|
||||
{
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
const char *month_name;
|
||||
uint month= (uint) val_int();
|
||||
uint err;
|
||||
MYSQL_TIME ltime;
|
||||
|
||||
if (null_value || !month)
|
||||
{
|
||||
null_value=1;
|
||||
return (String*) 0;
|
||||
}
|
||||
null_value=0;
|
||||
month_name= locale->month_names->type_names[month-1];
|
||||
if ((null_value= (get_arg0_date(<ime, TIME_FUZZY_DATE) || !ltime.month)))
|
||||
return (String *) 0;
|
||||
|
||||
month_name= locale->month_names->type_names[ltime.month - 1];
|
||||
str->copy(month_name, (uint) strlen(month_name), &my_charset_utf8_bin,
|
||||
collation.collation, &err);
|
||||
return str;
|
||||
|
@ -163,16 +163,19 @@ public:
|
||||
};
|
||||
|
||||
|
||||
class Item_func_monthname :public Item_func_month
|
||||
class Item_func_monthname :public Item_str_func
|
||||
{
|
||||
MY_LOCALE *locale;
|
||||
public:
|
||||
Item_func_monthname(Item *a) :Item_func_month(a) {}
|
||||
Item_func_monthname(Item *a) :Item_str_func(a) {}
|
||||
const char *func_name() const { return "monthname"; }
|
||||
String *val_str(String *str);
|
||||
enum Item_result result_type () const { return STRING_RESULT; }
|
||||
void fix_length_and_dec();
|
||||
bool check_partition_func_processor(uchar *int_arg) {return TRUE;}
|
||||
bool check_valid_arguments_processor(uchar *int_arg)
|
||||
{
|
||||
return !has_date_args();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user