mirror of
https://github.com/MariaDB/server.git
synced 2025-04-18 21:44:20 +03:00
Merge branch '10.4' into 10.5
This commit is contained in:
commit
ae6bdc6769
@ -153,6 +153,7 @@ IF (NOT CPACK_GENERATOR)
|
||||
ENDIF(WIN32)
|
||||
ENDIF(NOT CPACK_GENERATOR)
|
||||
|
||||
INCLUDE(FeatureSummary)
|
||||
INCLUDE(misc)
|
||||
INCLUDE(mysql_version)
|
||||
INCLUDE(cpack_source_ignore_files)
|
||||
@ -450,12 +451,15 @@ ADD_SUBDIRECTORY(tpool)
|
||||
IF(NOT WITHOUT_SERVER)
|
||||
ADD_SUBDIRECTORY(tests)
|
||||
ADD_SUBDIRECTORY(sql)
|
||||
OPTION (WITH_EMBEDDED_SERVER "Compile MySQL with embedded server" OFF)
|
||||
IF(WITH_EMBEDDED_SERVER)
|
||||
ADD_SUBDIRECTORY(libmysqld)
|
||||
ADD_SUBDIRECTORY(libmysqld/examples)
|
||||
ADD_SUBDIRECTORY(unittest/embedded)
|
||||
OPTION (WITH_EMBEDDED_SERVER "Compile MariaDB with embedded server" OFF)
|
||||
IF(WITH_EMBEDDED_SERVER)
|
||||
ADD_SUBDIRECTORY(libmysqld)
|
||||
ADD_SUBDIRECTORY(libmysqld/examples)
|
||||
ADD_SUBDIRECTORY(unittest/embedded)
|
||||
ENDIF(WITH_EMBEDDED_SERVER)
|
||||
IF(NOT WIN32)
|
||||
ADD_FEATURE_INFO(EMBEDDED_SERVER WITH_EMBEDDED_SERVER "Embedded MariaDB Server Library")
|
||||
ENDIF()
|
||||
|
||||
ADD_SUBDIRECTORY(mysql-test)
|
||||
ADD_SUBDIRECTORY(mysql-test/lib/My/SafeProcess)
|
||||
@ -549,6 +553,13 @@ IF(WIN32 AND SIGNCODE)
|
||||
INSTALL(SCRIPT ${PROJECT_BINARY_DIR}/sign.cmake)
|
||||
ENDIF()
|
||||
|
||||
FEATURE_SUMMARY(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES VAR MARIADB_FEATURE_SUMMARY)
|
||||
|
||||
OPTION(FEATURE_SUMMARY "Print feature summary at the end of configure step" ON)
|
||||
IF (FEATURE_SUMMARY)
|
||||
MESSAGE_ONCE(SUMMARY "${MARIADB_FEATURE_SUMMARY}")
|
||||
ENDIF()
|
||||
|
||||
IF(NON_DISTRIBUTABLE_WARNING)
|
||||
MESSAGE(WARNING "
|
||||
You have linked MariaDB with ${NON_DISTRIBUTABLE_WARNING} libraries! You may not distribute the resulting binary. If you do, you will put yourself into a legal problem with the Free Software Foundation.")
|
||||
|
@ -45,6 +45,7 @@ FUNCTION (CHECK_AWS_SDK RETVAL REASON)
|
||||
IF(UNIX)
|
||||
# Check librairies required for building SDK
|
||||
FIND_PACKAGE(CURL)
|
||||
SET_PACKAGE_PROPERTIES(CURL PROPERTIES TYPE REQUIRED)
|
||||
IF(NOT CURL_FOUND)
|
||||
SKIP_AWS_SDK("AWS C++ SDK requires libcurl development package")
|
||||
ENDIF()
|
||||
@ -54,10 +55,12 @@ FUNCTION (CHECK_AWS_SDK RETVAL REASON)
|
||||
ENDIF()
|
||||
IF(NOT APPLE)
|
||||
FIND_LIBRARY(UUID_LIBRARIES uuid)
|
||||
SET_PACKAGE_PROPERTIES(UUID_LIBRARIES PROPERTIES TYPE REQUIRED)
|
||||
IF(NOT UUID_LIBRARIES)
|
||||
SKIP_AWS_SDK("AWS C++ SDK requires uuid development package")
|
||||
ENDIF()
|
||||
FIND_PACKAGE(OpenSSL)
|
||||
SET_PACKAGE_PROPERTIES(OpenSSL PROPERTIES TYPE REQUIRED)
|
||||
IF(NOT OPENSSL_FOUND)
|
||||
SKIP_AWS_SDK("AWS C++ SDK requires openssl development package")
|
||||
ENDIF()
|
||||
|
@ -21,7 +21,7 @@ MACRO(EXTRACT_LINK_LIBRARIES target var)
|
||||
FOREACH(lib ${${target}_LIB_DEPENDS})
|
||||
# Filter out "general", it is not a library, just CMake hint
|
||||
# Also, remove duplicates
|
||||
IF(NOT lib STREQUAL "general" AND NOT ${var} MATCHES "-l${lib} ")
|
||||
IF(NOT lib STREQUAL "general" AND NOT ${var} MATCHES "-l${lib} " AND NOT lib STREQUAL "zlib")
|
||||
IF (lib MATCHES "^\\-")
|
||||
SET(${var} "${${var}} ${lib} ")
|
||||
ELSEIF(lib MATCHES "^/")
|
||||
|
@ -37,5 +37,6 @@ MACRO (CHECK_JEMALLOC)
|
||||
IF (NOT LIBJEMALLOC AND NOT WITH_JEMALLOC STREQUAL "auto")
|
||||
MESSAGE(FATAL_ERROR "jemalloc is not found")
|
||||
ENDIF()
|
||||
ADD_FEATURE_INFO(JEMALLOC LIBJEMALLOC "Use the JeMalloc memory allocator")
|
||||
ENDIF()
|
||||
ENDMACRO()
|
||||
|
@ -33,6 +33,7 @@ MACRO (MYSQL_CHECK_NUMA)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
ADD_FEATURE_INFO(NUMA HAVE_LIBNUMA "NUMA memory allocation policy")
|
||||
IF(WITH_NUMA_LOWERCASE STREQUAL "auto" AND HAVE_LIBNUMA)
|
||||
MESSAGE_ONCE(numa "WITH_NUMA=AUTO: NUMA memory allocation policy enabled")
|
||||
ELSEIF(WITH_NUMA_LOWERCASE STREQUAL "auto" AND NOT HAVE_LIBNUMA)
|
||||
|
@ -53,7 +53,7 @@ MACRO(MYSQL_ADD_PLUGIN)
|
||||
LIST(REMOVE_AT SOURCES 0)
|
||||
STRING(TOUPPER ${plugin} plugin)
|
||||
STRING(TOLOWER ${plugin} target)
|
||||
|
||||
|
||||
IF (ARG_MANDATORY)
|
||||
UNSET(PLUGIN_${plugin} CACHE)
|
||||
SET(PLUGIN_${plugin} "YES")
|
||||
@ -114,7 +114,7 @@ MACRO(MYSQL_ADD_PLUGIN)
|
||||
SET(with_var "WITH_${plugin}")
|
||||
ENDIF()
|
||||
UNSET(${with_var} CACHE)
|
||||
|
||||
|
||||
IF(NOT ARG_DEPENDENCIES)
|
||||
SET(ARG_DEPENDENCIES)
|
||||
ENDIF()
|
||||
@ -285,6 +285,16 @@ MACRO(MYSQL_ADD_PLUGIN)
|
||||
INSTALL_MYSQL_TEST("${CMAKE_CURRENT_SOURCE_DIR}/mysql-test/" "plugin/${subpath}")
|
||||
ENDIF()
|
||||
|
||||
GET_TARGET_PROPERTY(plugin_type ${target} TYPE)
|
||||
STRING(REGEX REPLACE "_LIBRARY$" "" plugin_type ${plugin_type})
|
||||
STRING(REGEX REPLACE "^NO$" "" plugin_type ${plugin_type})
|
||||
IF(ARG_STORAGE_ENGINE)
|
||||
ADD_FEATURE_INFO(${plugin} PLUGIN_${plugin} "Storage Engine ${plugin_type}")
|
||||
ELSEIF(ARG_CLIENT)
|
||||
ADD_FEATURE_INFO(${plugin} PLUGIN_${plugin} "Client plugin ${plugin_type}")
|
||||
ELSE()
|
||||
ADD_FEATURE_INFO(${plugin} PLUGIN_${plugin} "Server plugin ${plugin_type}")
|
||||
ENDIF()
|
||||
ENDIF(NOT WITHOUT_SERVER OR ARG_CLIENT)
|
||||
ENDMACRO()
|
||||
|
||||
|
@ -52,7 +52,7 @@ MACRO (MYSQL_CHECK_MULTIBYTE)
|
||||
ENDMACRO()
|
||||
|
||||
MACRO (FIND_CURSES)
|
||||
FIND_PACKAGE(Curses)
|
||||
FIND_PACKAGE(Curses REQUIRED)
|
||||
MARK_AS_ADVANCED(CURSES_CURSES_H_PATH CURSES_FORM_LIBRARY CURSES_HAVE_CURSES_H)
|
||||
IF(NOT CURSES_FOUND)
|
||||
SET(ERRORMSG "Curses library not found. Please install appropriate package,
|
||||
|
@ -117,6 +117,7 @@ MACRO (MYSQL_CHECK_SSL)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
FIND_PACKAGE(OpenSSL)
|
||||
SET_PACKAGE_PROPERTIES(OpenSSL PROPERTIES TYPE RECOMMENDED)
|
||||
IF(OPENSSL_FOUND)
|
||||
SET(OPENSSL_LIBRARY ${OPENSSL_SSL_LIBRARY})
|
||||
INCLUDE(CheckSymbolExists)
|
||||
|
@ -65,5 +65,6 @@ MACRO(CHECK_SYSTEMD)
|
||||
ELSEIF(NOT WITH_SYSTEMD STREQUAL "no")
|
||||
MESSAGE(FATAL_ERROR "Invalid value for WITH_SYSTEMD. Must be 'yes', 'no', or 'auto'.")
|
||||
ENDIF()
|
||||
ADD_FEATURE_INFO(SYSTEMD LIBSYSTEMD "Systemd scripts and notification support")
|
||||
ENDIF()
|
||||
ENDMACRO()
|
||||
|
@ -64,4 +64,7 @@ Then restart the build.
|
||||
ADD_SUBDIRECTORY(wsrep-lib)
|
||||
SET(BUILD_SHARED_LIBS ${old_BUILD_SHARED_LIBS})
|
||||
ENDIF()
|
||||
IF (NOT WIN32)
|
||||
ADD_FEATURE_INFO(WSREP WITH_WSREP "WSREP replication API (to use, e.g. Galera Replication library)")
|
||||
ENDIF()
|
||||
ENDIF(NOT WITHOUT_SERVER)
|
||||
|
@ -170,6 +170,7 @@ IF(UNIX)
|
||||
SET(LIBWRAP "wrap")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ADD_FEATURE_INFO(LIBWRAP HAVE_LIBWRAP "Support for tcp wrappers")
|
||||
ENDIF()
|
||||
|
||||
#
|
||||
|
@ -60,9 +60,9 @@ The parts not included are excluded by #ifndef UNIV_INNOCHECKSUM. */
|
||||
/* Global variables */
|
||||
static bool verbose;
|
||||
static bool just_count;
|
||||
static unsigned long long start_page;
|
||||
static unsigned long long end_page;
|
||||
static unsigned long long do_page;
|
||||
static uint32_t start_page;
|
||||
static uint32_t end_page;
|
||||
static uint32_t do_page;
|
||||
static bool use_end_page;
|
||||
static bool do_one_page;
|
||||
static my_bool do_leaf;
|
||||
@ -73,9 +73,9 @@ static ulint physical_page_size; /* Page size in bytes on disk. */
|
||||
ulong srv_page_size;
|
||||
ulong srv_page_size_shift;
|
||||
/* Current page number (0 based). */
|
||||
unsigned long long cur_page_num;
|
||||
uint32_t cur_page_num;
|
||||
/* Current space. */
|
||||
unsigned long long cur_space;
|
||||
uint32_t cur_space;
|
||||
/* Skip the checksum verification. */
|
||||
static bool no_check;
|
||||
/* Enabled for strict checksum verification. */
|
||||
@ -465,11 +465,11 @@ is_page_corrupted(
|
||||
/* enable if page is corrupted. */
|
||||
bool is_corrupted;
|
||||
/* use to store LSN values. */
|
||||
ulint logseq;
|
||||
ulint logseqfield;
|
||||
const uint16_t page_type = fil_page_get_type(buf);
|
||||
uint key_version = buf_page_get_key_version(buf, flags);
|
||||
ulint space_id = mach_read_from_4(
|
||||
uint32_t logseq;
|
||||
uint32_t logseqfield;
|
||||
const uint16_t page_type = mach_read_from_2(buf+FIL_PAGE_TYPE);
|
||||
uint32_t key_version = buf_page_get_key_version(buf, flags);
|
||||
uint32_t space_id = mach_read_from_4(
|
||||
buf + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID);
|
||||
ulint zip_size = fil_space_t::zip_size(flags);
|
||||
ulint is_compressed = fil_space_t::is_compressed(flags);
|
||||
@ -487,8 +487,8 @@ is_page_corrupted(
|
||||
|
||||
if (is_log_enabled) {
|
||||
fprintf(log_file,
|
||||
"page id mismatch space::" ULINTPF
|
||||
" page::%llu \n",
|
||||
"page id mismatch space::" UINT32PF
|
||||
" page::" UINT32PF " \n",
|
||||
space_id, cur_page_num);
|
||||
}
|
||||
|
||||
@ -517,13 +517,14 @@ is_page_corrupted(
|
||||
|
||||
if (is_log_enabled) {
|
||||
fprintf(log_file,
|
||||
"space::" ULINTPF " page::%llu"
|
||||
"; log sequence number:first = " ULINTPF
|
||||
"; second = " ULINTPF "\n",
|
||||
"space::" UINT32PF " page::" UINT32PF
|
||||
"; log sequence number:first = " UINT32PF
|
||||
"; second = " UINT32PF "\n",
|
||||
space_id, cur_page_num, logseq, logseqfield);
|
||||
if (logseq != logseqfield) {
|
||||
fprintf(log_file,
|
||||
"Fail; space::" ULINTPF " page::%llu"
|
||||
"Fail; space::" UINT32PF
|
||||
" page::" UINT32PF
|
||||
" invalid (fails log "
|
||||
"sequence number check)\n",
|
||||
space_id, cur_page_num);
|
||||
@ -547,9 +548,9 @@ is_page_corrupted(
|
||||
|
||||
if (is_corrupted && log_file) {
|
||||
fprintf(log_file,
|
||||
"[page id: space=" ULINTPF
|
||||
", page_number=%llu] may be corrupted;"
|
||||
" key_version=%u\n",
|
||||
"[page id: space=" UINT32PF
|
||||
", page_number=" UINT32PF "] may be corrupted;"
|
||||
" key_version=" UINT32PF "\n",
|
||||
space_id, cur_page_num, key_version);
|
||||
}
|
||||
} else {
|
||||
@ -653,8 +654,8 @@ static bool update_checksum(byte* page, ulint flags)
|
||||
|
||||
mach_write_to_4(page + FIL_PAGE_SPACE_OR_CHKSUM, checksum);
|
||||
if (is_log_enabled) {
|
||||
fprintf(log_file, "page::%llu; Updated checksum ="
|
||||
" %u\n", cur_page_num, checksum);
|
||||
fprintf(log_file, "page::" UINT32PF "; Updated checksum ="
|
||||
" " UINT32PF "\n", cur_page_num, checksum);
|
||||
}
|
||||
|
||||
} else if (use_full_crc32) {
|
||||
@ -665,7 +666,7 @@ static bool update_checksum(byte* page, ulint flags)
|
||||
if (mach_read_from_4(c) == checksum) return false;
|
||||
mach_write_to_4(c, checksum);
|
||||
if (is_log_enabled) {
|
||||
fprintf(log_file, "page::%llu; Updated checksum"
|
||||
fprintf(log_file, "page::" UINT32PF "; Updated checksum"
|
||||
" = %u\n", cur_page_num, checksum);
|
||||
}
|
||||
return true;
|
||||
@ -699,8 +700,8 @@ static bool update_checksum(byte* page, ulint flags)
|
||||
|
||||
mach_write_to_4(page + FIL_PAGE_SPACE_OR_CHKSUM, checksum);
|
||||
if (is_log_enabled) {
|
||||
fprintf(log_file, "page::%llu; Updated checksum field1"
|
||||
" = %u\n", cur_page_num, checksum);
|
||||
fprintf(log_file, "page::" UINT32PF "; Updated checksum field1"
|
||||
" = " UINT32PF "\n", cur_page_num, checksum);
|
||||
}
|
||||
|
||||
if (write_check == SRV_CHECKSUM_ALGORITHM_STRICT_INNODB
|
||||
@ -713,8 +714,8 @@ static bool update_checksum(byte* page, ulint flags)
|
||||
FIL_PAGE_END_LSN_OLD_CHKSUM,checksum);
|
||||
|
||||
if (is_log_enabled) {
|
||||
fprintf(log_file, "page::%llu; Updated checksum "
|
||||
"field2 = %u\n", cur_page_num, checksum);
|
||||
fprintf(log_file, "page::" UINT32PF "; Updated checksum "
|
||||
"field2 = " UINT32PF "\n", cur_page_num, checksum);
|
||||
}
|
||||
|
||||
}
|
||||
@ -786,7 +787,8 @@ write_file(
|
||||
if (physical_page_size
|
||||
!= fwrite(buf, 1, physical_page_size,
|
||||
file == stdin ? stdout : file)) {
|
||||
fprintf(stderr, "Failed to write page::%llu to %s: %s\n",
|
||||
fprintf(stderr,
|
||||
"Failed to write page::" UINT32PF " to %s: %s\n",
|
||||
cur_page_num, filename, strerror(errno));
|
||||
|
||||
return(false);
|
||||
@ -803,6 +805,16 @@ write_file(
|
||||
return(true);
|
||||
}
|
||||
|
||||
// checks using current xdes page whether the page is free
|
||||
static inline bool is_page_free(const byte *xdes, ulint physical_page_size,
|
||||
uint32_t page_no)
|
||||
{
|
||||
const byte *des=
|
||||
xdes + XDES_ARR_OFFSET +
|
||||
XDES_SIZE * ((page_no & (physical_page_size - 1)) / FSP_EXTENT_SIZE);
|
||||
return xdes_is_free(des, page_no % FSP_EXTENT_SIZE);
|
||||
}
|
||||
|
||||
/*
|
||||
Parse the page and collect/dump the information about page type
|
||||
@param [in] page buffer page
|
||||
@ -818,12 +830,10 @@ parse_page(
|
||||
bool is_encrypted)
|
||||
{
|
||||
unsigned long long id;
|
||||
ulint undo_page_type;
|
||||
uint16_t undo_page_type;
|
||||
char str[20]={'\0'};
|
||||
ulint n_recs;
|
||||
ulint page_no;
|
||||
ulint left_page_no;
|
||||
ulint right_page_no;
|
||||
uint32_t page_no, left_page_no, right_page_no;
|
||||
ulint data_bytes;
|
||||
bool is_leaf;
|
||||
ulint size_range_id;
|
||||
@ -838,7 +848,7 @@ parse_page(
|
||||
switch (fil_page_get_type(page)) {
|
||||
|
||||
case FIL_PAGE_INDEX: {
|
||||
uint key_version = mach_read_from_4(page + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION);
|
||||
uint32_t key_version = mach_read_from_4(page + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION);
|
||||
page_type.n_fil_page_index++;
|
||||
|
||||
/* If page is encrypted we can't read index header */
|
||||
@ -862,7 +872,7 @@ parse_page(
|
||||
is_leaf = (!*(const uint16*) (page + (PAGE_HEADER + PAGE_LEVEL)));
|
||||
|
||||
if (page_type_dump) {
|
||||
fprintf(file, "#::%llu\t\t|\t\tIndex page\t\t\t|"
|
||||
fprintf(file, "#::" UINT32PF "\t\t|\t\tIndex page\t\t\t|"
|
||||
"\tindex id=%llu,", cur_page_num, id);
|
||||
|
||||
fprintf(file,
|
||||
@ -880,22 +890,13 @@ parse_page(
|
||||
size_range_id = SIZE_RANGES_FOR_PAGE + 1;
|
||||
}
|
||||
if (per_page_details) {
|
||||
printf("index id=%llu page " ULINTPF " leaf %d n_recs " ULINTPF " data_bytes " ULINTPF
|
||||
printf("index id=%llu page " UINT32PF " leaf %d n_recs " ULINTPF " data_bytes " ULINTPF
|
||||
"\n", id, page_no, is_leaf, n_recs, data_bytes);
|
||||
}
|
||||
/* update per-index statistics */
|
||||
{
|
||||
if (index_ids.count(id) == 0) {
|
||||
index_ids[id] = per_index_stats();
|
||||
}
|
||||
std::map<unsigned long long, per_index_stats>::iterator it;
|
||||
it = index_ids.find(id);
|
||||
per_index_stats &index = (it->second);
|
||||
const byte* des = xdes + XDES_ARR_OFFSET
|
||||
+ XDES_SIZE * ((page_no & (physical_page_size - 1))
|
||||
/ FSP_EXTENT_SIZE);
|
||||
if (xdes_is_free(des,
|
||||
page_no % FSP_EXTENT_SIZE)) {
|
||||
per_index_stats &index = index_ids[id];
|
||||
if (is_page_free(xdes, physical_page_size, page_no)) {
|
||||
index.free_pages++;
|
||||
return;
|
||||
}
|
||||
@ -923,8 +924,8 @@ parse_page(
|
||||
index.pages_in_size_range[size_range_id] ++;
|
||||
}
|
||||
} else {
|
||||
fprintf(file, "#::%llu\t\t|\t\tEncrypted Index page\t\t\t|"
|
||||
"\tkey_version %u,%s\n", cur_page_num, key_version, str);
|
||||
fprintf(file, "#::" UINT32PF "\t\t|\t\tEncrypted Index page\t\t\t|"
|
||||
"\tkey_version " UINT32PF ",%s\n", cur_page_num, key_version, str);
|
||||
}
|
||||
|
||||
break;
|
||||
@ -934,7 +935,7 @@ parse_page(
|
||||
undo_page_type = mach_read_from_2(page +
|
||||
TRX_UNDO_PAGE_HDR + TRX_UNDO_PAGE_TYPE);
|
||||
if (page_type_dump) {
|
||||
fprintf(file, "#::%llu\t\t|\t\tUndo log page\t\t\t|",
|
||||
fprintf(file, "#::" UINT32PF "\t\t|\t\tUndo log page\t\t\t|",
|
||||
cur_page_num);
|
||||
}
|
||||
page_type.n_undo++;
|
||||
@ -986,7 +987,7 @@ parse_page(
|
||||
case FIL_PAGE_INODE:
|
||||
page_type.n_fil_page_inode++;
|
||||
if (page_type_dump) {
|
||||
fprintf(file, "#::%llu\t\t|\t\tInode page\t\t\t|"
|
||||
fprintf(file, "#::" UINT32PF "\t\t|\t\tInode page\t\t\t|"
|
||||
"\t%s\n",cur_page_num, str);
|
||||
}
|
||||
break;
|
||||
@ -994,7 +995,7 @@ parse_page(
|
||||
case FIL_PAGE_IBUF_FREE_LIST:
|
||||
page_type.n_fil_page_ibuf_free_list++;
|
||||
if (page_type_dump) {
|
||||
fprintf(file, "#::%llu\t\t|\t\tInsert buffer free list"
|
||||
fprintf(file, "#::" UINT32PF "\t\t|\t\tInsert buffer free list"
|
||||
" page\t|\t%s\n", cur_page_num, str);
|
||||
}
|
||||
break;
|
||||
@ -1002,7 +1003,7 @@ parse_page(
|
||||
case FIL_PAGE_TYPE_ALLOCATED:
|
||||
page_type.n_fil_page_type_allocated++;
|
||||
if (page_type_dump) {
|
||||
fprintf(file, "#::%llu\t\t|\t\tFreshly allocated "
|
||||
fprintf(file, "#::" UINT32PF "\t\t|\t\tFreshly allocated "
|
||||
"page\t\t|\t%s\n", cur_page_num, str);
|
||||
}
|
||||
break;
|
||||
@ -1010,7 +1011,7 @@ parse_page(
|
||||
case FIL_PAGE_IBUF_BITMAP:
|
||||
page_type.n_fil_page_ibuf_bitmap++;
|
||||
if (page_type_dump) {
|
||||
fprintf(file, "#::%llu\t\t|\t\tInsert Buffer "
|
||||
fprintf(file, "#::" UINT32PF "\t\t|\t\tInsert Buffer "
|
||||
"Bitmap\t\t|\t%s\n", cur_page_num, str);
|
||||
}
|
||||
break;
|
||||
@ -1018,33 +1019,31 @@ parse_page(
|
||||
case FIL_PAGE_TYPE_SYS:
|
||||
page_type.n_fil_page_type_sys++;
|
||||
if (page_type_dump) {
|
||||
fprintf(file, "#::%llu\t\t|\t\tSystem page\t\t\t|"
|
||||
"\t%s\n",cur_page_num, str);
|
||||
fprintf(file, "#::" UINT32PF "\t\t|\t\tSystem page\t\t\t|"
|
||||
"\t%s\n", cur_page_num, str);
|
||||
}
|
||||
break;
|
||||
|
||||
case FIL_PAGE_TYPE_TRX_SYS:
|
||||
page_type.n_fil_page_type_trx_sys++;
|
||||
if (page_type_dump) {
|
||||
fprintf(file, "#::%llu\t\t|\t\tTransaction system "
|
||||
fprintf(file, "#::" UINT32PF "\t\t|\t\tTransaction system "
|
||||
"page\t\t|\t%s\n", cur_page_num, str);
|
||||
}
|
||||
break;
|
||||
|
||||
case FIL_PAGE_TYPE_FSP_HDR:
|
||||
page_type.n_fil_page_type_fsp_hdr++;
|
||||
memcpy(xdes, page, physical_page_size);
|
||||
if (page_type_dump) {
|
||||
fprintf(file, "#::%llu\t\t|\t\tFile Space "
|
||||
fprintf(file, "#::" UINT32PF "\t\t|\t\tFile Space "
|
||||
"Header\t\t|\t%s\n", cur_page_num, str);
|
||||
}
|
||||
break;
|
||||
|
||||
case FIL_PAGE_TYPE_XDES:
|
||||
page_type.n_fil_page_type_xdes++;
|
||||
memcpy(xdes, page, physical_page_size);
|
||||
if (page_type_dump) {
|
||||
fprintf(file, "#::%llu\t\t|\t\tExtent descriptor "
|
||||
fprintf(file, "#::" UINT32PF "\t\t|\t\tExtent descriptor "
|
||||
"page\t\t|\t%s\n", cur_page_num, str);
|
||||
}
|
||||
break;
|
||||
@ -1052,7 +1051,7 @@ parse_page(
|
||||
case FIL_PAGE_TYPE_BLOB:
|
||||
page_type.n_fil_page_type_blob++;
|
||||
if (page_type_dump) {
|
||||
fprintf(file, "#::%llu\t\t|\t\tBLOB page\t\t\t|\t%s\n",
|
||||
fprintf(file, "#::" UINT32PF "\t\t|\t\tBLOB page\t\t\t|\t%s\n",
|
||||
cur_page_num, str);
|
||||
}
|
||||
break;
|
||||
@ -1060,7 +1059,7 @@ parse_page(
|
||||
case FIL_PAGE_TYPE_ZBLOB:
|
||||
page_type.n_fil_page_type_zblob++;
|
||||
if (page_type_dump) {
|
||||
fprintf(file, "#::%llu\t\t|\t\tCompressed BLOB "
|
||||
fprintf(file, "#::" UINT32PF "\t\t|\t\tCompressed BLOB "
|
||||
"page\t\t|\t%s\n", cur_page_num, str);
|
||||
}
|
||||
break;
|
||||
@ -1068,7 +1067,7 @@ parse_page(
|
||||
case FIL_PAGE_TYPE_ZBLOB2:
|
||||
page_type.n_fil_page_type_zblob2++;
|
||||
if (page_type_dump) {
|
||||
fprintf(file, "#::%llu\t\t|\t\tSubsequent Compressed "
|
||||
fprintf(file, "#::" UINT32PF "\t\t|\t\tSubsequent Compressed "
|
||||
"BLOB page\t|\t%s\n", cur_page_num, str);
|
||||
}
|
||||
break;
|
||||
@ -1076,7 +1075,7 @@ parse_page(
|
||||
case FIL_PAGE_PAGE_COMPRESSED:
|
||||
page_type.n_fil_page_type_page_compressed++;
|
||||
if (page_type_dump) {
|
||||
fprintf(file, "#::%llu\t\t|\t\tPage compressed "
|
||||
fprintf(file, "#::" UINT32PF "\t\t|\t\tPage compressed "
|
||||
"page\t|\t%s\n", cur_page_num, str);
|
||||
}
|
||||
break;
|
||||
@ -1084,7 +1083,7 @@ parse_page(
|
||||
case FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED:
|
||||
page_type.n_fil_page_type_page_compressed_encrypted++;
|
||||
if (page_type_dump) {
|
||||
fprintf(file, "#::%llu\t\t|\t\tPage compressed encrypted "
|
||||
fprintf(file, "#::" UINT32PF "\t\t|\t\tPage compressed encrypted "
|
||||
"page\t|\t%s\n", cur_page_num, str);
|
||||
}
|
||||
break;
|
||||
@ -1236,14 +1235,14 @@ static struct my_option innochecksum_options[] = {
|
||||
{"count", 'c', "Print the count of pages in the file and exits.",
|
||||
&just_count, &just_count, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"start_page", 's', "Start on this page number (0 based).",
|
||||
&start_page, &start_page, 0, GET_ULL, REQUIRED_ARG,
|
||||
0, 0, ULLONG_MAX, 0, 1, 0},
|
||||
&start_page, &start_page, 0, GET_UINT, REQUIRED_ARG,
|
||||
0, 0, FIL_NULL, 0, 1, 0},
|
||||
{"end_page", 'e', "End at this page number (0 based).",
|
||||
&end_page, &end_page, 0, GET_ULL, REQUIRED_ARG,
|
||||
0, 0, ULLONG_MAX, 0, 1, 0},
|
||||
&end_page, &end_page, 0, GET_UINT, REQUIRED_ARG,
|
||||
0, 0, FIL_NULL, 0, 1, 0},
|
||||
{"page", 'p', "Check only this page (0 based).",
|
||||
&do_page, &do_page, 0, GET_ULL, REQUIRED_ARG,
|
||||
0, 0, ULLONG_MAX, 0, 1, 0},
|
||||
&do_page, &do_page, 0, GET_UINT, REQUIRED_ARG,
|
||||
0, 0, FIL_NULL, 0, 1, 0},
|
||||
{"strict-check", 'C', "Specify the strict checksum algorithm by the user.",
|
||||
&strict_check, &strict_check, &innochecksum_algorithms_typelib,
|
||||
GET_ENUM, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
@ -1439,14 +1438,14 @@ static bool check_encryption(const char* filename, const byte* page)
|
||||
return false;
|
||||
}
|
||||
|
||||
uint min_key_version = mach_read_from_4
|
||||
uint32_t min_key_version = mach_read_from_4
|
||||
(page + offset + MAGIC_SZ + 2 + iv_length);
|
||||
|
||||
uint key_id = mach_read_from_4
|
||||
uint32_t key_id = mach_read_from_4
|
||||
(page + offset + MAGIC_SZ + 2 + iv_length + 4);
|
||||
|
||||
if (type == CRYPT_SCHEME_1 && is_log_enabled) {
|
||||
fprintf(log_file,"Tablespace %s encrypted key_version %u key_id %u\n",
|
||||
fprintf(log_file,"Tablespace %s encrypted key_version " UINT32PF " key_id " UINT32PF "\n",
|
||||
filename, min_key_version, key_id);
|
||||
}
|
||||
|
||||
@ -1468,7 +1467,7 @@ static int verify_checksum(
|
||||
{
|
||||
int exit_status = 0;
|
||||
if (is_page_corrupted(buf, is_encrypted, flags)) {
|
||||
fprintf(stderr, "Fail: page::%llu invalid\n",
|
||||
fprintf(stderr, "Fail: page::" UINT32PF " invalid\n",
|
||||
cur_page_num);
|
||||
|
||||
(*mismatch_count)++;
|
||||
@ -1542,7 +1541,7 @@ int main(
|
||||
/* size of file (has to be 64 bits) */
|
||||
unsigned long long int size = 0;
|
||||
/* number of pages in file */
|
||||
ulint pages;
|
||||
uint32_t pages;
|
||||
|
||||
off_t offset = 0;
|
||||
/* count the no. of page corrupted. */
|
||||
@ -1742,36 +1741,38 @@ int main(
|
||||
}
|
||||
|
||||
if (per_page_details) {
|
||||
printf("page %llu ", cur_page_num);
|
||||
printf("page " UINT32PF " ", cur_page_num);
|
||||
}
|
||||
|
||||
memcpy(xdes, buf, physical_page_size);
|
||||
|
||||
if (page_type_summary || page_type_dump) {
|
||||
parse_page(buf, xdes, fil_page_type, is_encrypted);
|
||||
}
|
||||
|
||||
pages = (ulint) (size / physical_page_size);
|
||||
pages = uint32_t(size / physical_page_size);
|
||||
|
||||
if (just_count) {
|
||||
if (read_from_stdin) {
|
||||
fprintf(stderr, "Number of pages:" ULINTPF "\n", pages);
|
||||
} else {
|
||||
printf("Number of pages:" ULINTPF "\n", pages);
|
||||
}
|
||||
fprintf(read_from_stdin ? stderr : stdout,
|
||||
"Number of pages:" UINT32PF "\n", pages);
|
||||
continue;
|
||||
} else if (verbose && !read_from_stdin) {
|
||||
if (is_log_enabled) {
|
||||
fprintf(log_file, "file %s = %llu bytes "
|
||||
"(" ULINTPF " pages)\n", filename, size, pages);
|
||||
"(" UINT32PF " pages)\n",
|
||||
filename, size, pages);
|
||||
if (do_one_page) {
|
||||
fprintf(log_file, "Innochecksum: "
|
||||
"checking page::%llu;\n",
|
||||
"checking page::"
|
||||
UINT32PF ";\n",
|
||||
do_page);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (is_log_enabled) {
|
||||
fprintf(log_file, "Innochecksum: checking "
|
||||
"pages in range::%llu to %llu\n",
|
||||
"pages in range::" UINT32PF
|
||||
" to " UINT32PF "\n",
|
||||
start_page, use_end_page ?
|
||||
end_page : (pages - 1));
|
||||
}
|
||||
@ -1815,8 +1816,8 @@ int main(
|
||||
the desired page. */
|
||||
partial_page_read = false;
|
||||
|
||||
offset = (off_t) start_page
|
||||
* (off_t) physical_page_size;
|
||||
offset = off_t(ulonglong(start_page)
|
||||
* physical_page_size);
|
||||
if (IF_WIN(_fseeki64,fseeko)(fil_in, offset,
|
||||
SEEK_SET)) {
|
||||
perror("Error: Unable to seek to "
|
||||
@ -1857,12 +1858,7 @@ int main(
|
||||
count++;
|
||||
|
||||
if (!bytes || feof(fil_in)) {
|
||||
fprintf(stderr, "Error: Unable "
|
||||
"to seek to necessary "
|
||||
"offset");
|
||||
|
||||
exit_status = 1;
|
||||
goto my_exit;
|
||||
goto unexpected_eof;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1878,6 +1874,15 @@ int main(
|
||||
partial_page_read = false;
|
||||
|
||||
if (!bytes && feof(fil_in)) {
|
||||
if (cur_page_num == start_page) {
|
||||
unexpected_eof:
|
||||
fputs("Error: Unable "
|
||||
"to seek to necessary offset\n",
|
||||
stderr);
|
||||
|
||||
exit_status = 1;
|
||||
goto my_exit;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1919,6 +1924,7 @@ first_non_zero:
|
||||
checksum verification.*/
|
||||
if (!no_check
|
||||
&& !skip_page
|
||||
&& !is_page_free(xdes, physical_page_size, cur_page_num)
|
||||
&& (exit_status = verify_checksum(
|
||||
buf, is_encrypted,
|
||||
&mismatch_count, flags))) {
|
||||
@ -1937,7 +1943,11 @@ first_non_zero:
|
||||
}
|
||||
|
||||
if (per_page_details) {
|
||||
printf("page %llu ", cur_page_num);
|
||||
printf("page " UINT32PF " ", cur_page_num);
|
||||
}
|
||||
|
||||
if (page_get_page_no(buf) % physical_page_size == 0) {
|
||||
memcpy(xdes, buf, physical_page_size);
|
||||
}
|
||||
|
||||
if (page_type_summary || page_type_dump) {
|
||||
@ -1953,10 +1963,10 @@ first_non_zero:
|
||||
if (!lastt) {
|
||||
lastt= now;
|
||||
} else if (now - lastt >= 1 && is_log_enabled) {
|
||||
fprintf(log_file, "page::%llu "
|
||||
fprintf(log_file, "page::" UINT32PF " "
|
||||
"okay: %.3f%% done\n",
|
||||
(cur_page_num - 1),
|
||||
(float) cur_page_num / pages * 100);
|
||||
(double) cur_page_num / pages * 100);
|
||||
lastt = now;
|
||||
}
|
||||
}
|
||||
|
@ -15,6 +15,7 @@
|
||||
|
||||
|
||||
OPTION(WITH_MARIABACKUP "Include mariabackup" ON)
|
||||
ADD_FEATURE_INFO(MARIABACKUP WITH_MARIABACKUP "MariaDB Backup Utility")
|
||||
IF(NOT WITH_MARIABACKUP)
|
||||
RETURN()
|
||||
ENDIF()
|
||||
|
@ -920,7 +920,7 @@ bool lock_tables(MYSQL *connection)
|
||||
|
||||
if (have_galera_enabled)
|
||||
{
|
||||
xb_mysql_query(connection, "SET SESSION wsrep_causal_reads=0", false);
|
||||
xb_mysql_query(connection, "SET SESSION wsrep_sync_wait=0", false);
|
||||
}
|
||||
|
||||
xb_mysql_query(connection, "BACKUP STAGE START", true);
|
||||
|
@ -309,7 +309,7 @@ static struct my_option ibx_long_options[] =
|
||||
{"force-non-empty-directories", OPT_FORCE_NON_EMPTY_DIRS, "This "
|
||||
"option, when specified, makes --copy-back or --move-back transfer "
|
||||
"files to non-empty directories. Note that no existing files will be "
|
||||
"overwritten. If --copy-back or --nove-back has to copy a file from "
|
||||
"overwritten. If --copy-back or --move-back has to copy a file from "
|
||||
"the backup directory which already exists in the destination "
|
||||
"directory, it will still fail with an error.",
|
||||
(uchar *) &opt_ibx_force_non_empty_dirs,
|
||||
|
@ -51,7 +51,7 @@ Street, Fifth Floor, Boston, MA 02110-1335 USA
|
||||
#include <my_getopt.h>
|
||||
#include <mysql_com.h>
|
||||
#include <my_default.h>
|
||||
#include <mysqld.h>
|
||||
#include <sql_class.h>
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <string.h>
|
||||
@ -1241,7 +1241,7 @@ struct my_option xb_client_options[]= {
|
||||
"This "
|
||||
"option, when specified, makes --copy-back or --move-back transfer "
|
||||
"files to non-empty directories. Note that no existing files will be "
|
||||
"overwritten. If --copy-back or --nove-back has to copy a file from "
|
||||
"overwritten. If --copy-back or --move-back has to copy a file from "
|
||||
"the backup directory which already exists in the destination "
|
||||
"directory, it will still fail with an error.",
|
||||
(uchar *) &opt_force_non_empty_dirs, (uchar *) &opt_force_non_empty_dirs,
|
||||
|
@ -50,7 +50,9 @@ SET(WOLFSSL_SOURCES
|
||||
${WOLFSSL_SRCDIR}/tls.c
|
||||
${WOLFSSL_SRCDIR}/wolfio.c
|
||||
${WOLFSSL_SRCDIR}/ocsp.c
|
||||
${WOLFSSL_SRCDIR}/ssl.c)
|
||||
${WOLFSSL_SRCDIR}/ssl.c
|
||||
${WOLFSSL_SRCDIR}/tls13.c)
|
||||
|
||||
ADD_DEFINITIONS(-DWOLFSSL_LIB -DBUILDING_WOLFSSL)
|
||||
|
||||
INCLUDE_DIRECTORIES(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/wolfssl)
|
||||
@ -105,8 +107,9 @@ ${WOLFCRYPT_SRCDIR}/wolfmath.c
|
||||
)
|
||||
|
||||
# Use fastmath large number math library.
|
||||
IF(NOT (MSVC AND CMAKE_C_COMPILER_ID MATCHES Clang)
|
||||
AND (CMAKE_SIZEOF_VOID_P EQUAL 8))
|
||||
IF(NOT (MSVC AND CMAKE_C_COMPILER_ID MATCHES Clang))
|
||||
# Can't use clang-cl with WOLFSSL_FASTMATH
|
||||
# due to https://bugs.llvm.org/show_bug.cgi?id=25305
|
||||
SET(WOLFSSL_FASTMATH 1)
|
||||
ENDIF()
|
||||
|
||||
@ -117,6 +120,21 @@ IF(WOLFSSL_FASTMATH)
|
||||
# WolfSSL will use more stack space with it
|
||||
SET(FP_MAX_BITS 16384)
|
||||
SET(WOLFCRYPT_SOURCES ${WOLFCRYPT_SOURCES} ${WOLFCRYPT_SRCDIR}/tfm.c)
|
||||
IF((CMAKE_SIZEOF_VOID_P MATCHES 4) AND (CMAKE_SYSTEM_PROCESSOR MATCHES "86")
|
||||
AND (NOT MSVC))
|
||||
# Workaround https://github.com/wolfSSL/wolfssl/issues/4245
|
||||
# On 32bit Intel, to satisfy inline assembly's wish for free registers
|
||||
# 1. use -fomit-frame-pointer
|
||||
# 2. With GCC 4, additionally use -fno-PIC, which works on x86
|
||||
# (modern GCC has PIC optimizations, that make it unnecessary)
|
||||
# The following assumes GCC or Clang
|
||||
SET(TFM_COMPILE_FLAGS "-fomit-frame-pointer")
|
||||
IF(CMAKE_C_COMPILER_VERSION VERSION_LESS "5")
|
||||
SET(TFM_COMPILE_FLAGS "${TFM_COMPILE_FLAGS} -fno-PIC")
|
||||
ENDIF()
|
||||
SET_SOURCE_FILES_PROPERTIES(${WOLFCRYPT_SRCDIR}/tfm.c
|
||||
PROPERTIES COMPILE_FLAGS ${TFM_COMPILE_FLAGS})
|
||||
ENDIF()
|
||||
ELSE()
|
||||
SET(WOLFCRYPT_SOURCES ${WOLFCRYPT_SOURCES} ${WOLFCRYPT_SRCDIR}/integer.c)
|
||||
ENDIF()
|
||||
|
@ -23,12 +23,29 @@
|
||||
#define OPENSSL_ALL
|
||||
#define WOLFSSL_ALLOW_TLSV10
|
||||
#define NO_OLD_TIMEVAL_NAME
|
||||
|
||||
/* TLSv1.3 definitions (all needed to build) */
|
||||
#define WOLFSSL_TLS13
|
||||
#define HAVE_HKDF
|
||||
#define HAVE_TLS_EXTENSIONS
|
||||
#define HAVE_SUPPORTED_CURVES
|
||||
#define HAVE_FFDHE_2048
|
||||
#define WC_RSA_PSS
|
||||
/* End of TLSv1.3 defines */
|
||||
|
||||
/* Features we exclude */
|
||||
#define NO_DSA
|
||||
#define NO_HC128
|
||||
#define NO_MD4
|
||||
#define NO_PSK
|
||||
#define NO_RABBIT
|
||||
#define NO_RC4
|
||||
|
||||
/*
|
||||
FP_MAX_BITS is set high solely to satisfy ssl_8k_key.test
|
||||
WolfSSL will use more stack space with it, with fastmath
|
||||
*/
|
||||
#define FP_MAX_BITS 16384
|
||||
|
||||
#cmakedefine FP_MAX_BITS 16384
|
||||
#cmakedefine WOLFSSL_AESNI
|
||||
#cmakedefine USE_FAST_MATH
|
||||
#cmakedefine TFM_TIMING_RESISTANT
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 9c87f979a7f1d3a6d786b260653d566c1d31a1c4
|
||||
Subproject commit add4a68465bcdad238bcf3e5f2771d8da05e6285
|
@ -1,5 +1,5 @@
|
||||
/* Copyright (c) 2000, 2013, Oracle and/or its affiliates.
|
||||
Copyright (c) 2010, 2020, MariaDB Corporation.
|
||||
Copyright (c) 2010, 2021, MariaDB Corporation.
|
||||
|
||||
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
|
||||
@ -266,7 +266,8 @@ extern int my_umask_dir,
|
||||
extern my_bool my_use_symdir;
|
||||
|
||||
extern ulong my_default_record_cache_size;
|
||||
extern my_bool my_disable_locking, my_disable_async_io,
|
||||
extern MYSQL_PLUGIN_IMPORT my_bool my_disable_locking;
|
||||
extern my_bool my_disable_async_io,
|
||||
my_disable_flush_key_blocks, my_disable_symlinks;
|
||||
extern my_bool my_disable_sync, my_disable_copystat_in_redel;
|
||||
extern char wild_many,wild_one,wild_prefix;
|
||||
|
@ -20,23 +20,25 @@
|
||||
@file
|
||||
json service
|
||||
|
||||
Esports JSON parsing methods for plugins to use.
|
||||
Exports JSON parsing methods for plugins to use.
|
||||
|
||||
Fuctions of the service:
|
||||
js_type - returns the type of the JSON argument,
|
||||
Functions of the service:
|
||||
json_type - returns the type of the JSON argument,
|
||||
and the parsed value if it's scalar (not object or array)
|
||||
|
||||
js_get_array_item - expecs JSON array as an argument,
|
||||
and returns the n_item's item's type and value
|
||||
json_get_array_item - expects JSON array as an argument,
|
||||
and returns the type of the element at index `n_item`.
|
||||
Returns JSV_NOTHING type if the array is shorter
|
||||
than n_item and the actual length of the array in v_len.
|
||||
than n_item and the actual length of the array in value_len.
|
||||
If successful, then `value` up till `value[value_len]` contains the array
|
||||
element at the desired index (n_item).
|
||||
|
||||
js_get_object_key - expects JSON object as an argument,
|
||||
searches for a key in the object, return it's type and value.
|
||||
json_get_object_key - expects JSON object as an argument,
|
||||
searches for a key in the object, return it's type and stores its value in `value`.
|
||||
JSV_NOTHING if no such key found, the number of keys
|
||||
in v_len.
|
||||
|
||||
js_get_object_nkey - expects JSON object as an argument.
|
||||
json_get_object_nkey - expects JSON object as an argument.
|
||||
finds n_key's key in the object, returns it's name, type and value.
|
||||
JSV_NOTHING if object has less keys than n_key.
|
||||
*/
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 802ce584a26fdc0ba67fcf35e277bf3c7440956a
|
||||
Subproject commit 0cc16f18c1d87bbe6e360eaf578fcedeb9479114
|
@ -155,32 +155,34 @@ END
|
||||
sub gcov_one_file {
|
||||
return unless /\.gcda$/;
|
||||
unless ($opt_skip_gcov) {
|
||||
$cmd= "gcov -i '$_' 2>/dev/null >/dev/null";
|
||||
$cmd= "gcov -il '$_' 2>/dev/null >/dev/null";
|
||||
print STDERR ++$file_no,"\r" if not $opt_verbose and -t STDERR;
|
||||
logv "Running: $cmd";
|
||||
system($cmd)==0 or die "system($cmd): $? $!";
|
||||
}
|
||||
|
||||
# now, read the generated file
|
||||
open FH, '<', "$_.gcov" or die "open(<$_.gcov): $!";
|
||||
my $fname;
|
||||
while (<FH>) {
|
||||
chomp;
|
||||
if (/^function:/) {
|
||||
next;
|
||||
for my $gcov_file (<$_*.gcov>) {
|
||||
open FH, '<', "$gcov_file" or die "open(<$gcov_file): $!";
|
||||
my $fname;
|
||||
while (<FH>) {
|
||||
chomp;
|
||||
if (/^function:/) {
|
||||
next;
|
||||
}
|
||||
if (/^file:/) {
|
||||
$fname=realpath(-f $' ? $' : $root.$');
|
||||
next;
|
||||
}
|
||||
next if /^lcount:\d+,-\d+/; # whatever that means
|
||||
unless (/^lcount:(\d+),(\d+)/ and $fname) {
|
||||
warn "unknown line '$_' in $gcov_file";
|
||||
next;
|
||||
}
|
||||
$cov{$fname}->{$1}+=$2;
|
||||
}
|
||||
if (/^file:/) {
|
||||
$fname=realpath($');
|
||||
next;
|
||||
}
|
||||
next if /^lcount:\d+,-\d+/; # whatever that means
|
||||
unless (/^lcount:(\d+),(\d+)/ and $fname) {
|
||||
warn "unknown line '$_' after running '$cmd'";
|
||||
next;
|
||||
}
|
||||
$cov{$fname}->{$1}+=$2;
|
||||
close(FH);
|
||||
}
|
||||
close(FH);
|
||||
}
|
||||
|
||||
sub write_coverage {
|
||||
|
@ -15,7 +15,7 @@ while (!$mysql_errno)
|
||||
dec $counter;
|
||||
if (!$counter)
|
||||
{
|
||||
--die Server failed to dissapear
|
||||
--die Server failed to disappear
|
||||
}
|
||||
--real_sleep 0.1
|
||||
}
|
||||
|
@ -389,10 +389,10 @@ sub _collect {
|
||||
# 1 Still running
|
||||
#
|
||||
sub wait_one {
|
||||
my ($self, $timeout)= @_;
|
||||
croak "usage: \$safe_proc->wait_one([timeout])" unless ref $self;
|
||||
my ($self, $timeout, $keep)= @_;
|
||||
croak "usage: \$safe_proc->wait_one([timeout] [, keep])" unless ref $self;
|
||||
|
||||
_verbose("wait_one $self, $timeout");
|
||||
_verbose("wait_one $self, $timeout, $keep");
|
||||
|
||||
if ( ! defined($self->{SAFE_PID}) ) {
|
||||
# No pid => not running
|
||||
@ -466,16 +466,16 @@ sub wait_one {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ( not $blocking and $retpid == -1 ) {
|
||||
# still running
|
||||
_verbose("still running");
|
||||
return 1;
|
||||
}
|
||||
#if ( not $blocking and $retpid == -1 ) {
|
||||
# # still running
|
||||
# _verbose("still running");
|
||||
# return 1;
|
||||
#}
|
||||
|
||||
#warn "wait_one: expected pid $pid but got $retpid"
|
||||
# unless( $retpid == $pid );
|
||||
|
||||
$self->_collect($exit_code);
|
||||
$self->_collect($exit_code) unless $keep;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -40,7 +40,7 @@ BEGIN
|
||||
eval 'sub USE_NETPING { $use_netping }';
|
||||
}
|
||||
|
||||
sub sleep_until_file_created ($$$$);
|
||||
sub sleep_until_file_created ($$$$$);
|
||||
sub mtr_ping_port ($);
|
||||
|
||||
sub mtr_ping_port ($) {
|
||||
@ -102,8 +102,9 @@ sub mtr_ping_port ($) {
|
||||
|
||||
# FIXME check that the pidfile contains the expected pid!
|
||||
|
||||
sub sleep_until_file_created ($$$$) {
|
||||
sub sleep_until_file_created ($$$$$) {
|
||||
my $pidfile= shift;
|
||||
my $expectfile = shift;
|
||||
my $timeout= shift;
|
||||
my $proc= shift;
|
||||
my $warn_seconds = shift;
|
||||
@ -120,8 +121,9 @@ sub sleep_until_file_created ($$$$) {
|
||||
my $seconds= ($loop * $sleeptime) / 1000;
|
||||
|
||||
# Check if it died after the fork() was successful
|
||||
if ( defined $proc and ! $proc->wait_one(0) )
|
||||
if ( defined $proc and ! $proc->wait_one(0, 1) )
|
||||
{
|
||||
return 1 if -r $expectfile;
|
||||
mtr_warning("Process $proc died after mysql-test-run waited $seconds " .
|
||||
"seconds for $pidfile to be created.");
|
||||
return 0;
|
||||
|
@ -2019,6 +2019,73 @@ drop procedure sp1;
|
||||
drop procedure sp2;
|
||||
drop procedure sp3;
|
||||
drop table t1;
|
||||
#
|
||||
# MDEV-26095: missing RECURSIVE for the recursive definition of CTE
|
||||
# embedded into another CTE definition
|
||||
#
|
||||
create table t1 (a int);
|
||||
insert into t1 values (5), (7);
|
||||
with cte_e as (
|
||||
with recursive cte_r as (
|
||||
select a from t1 union select a+1 as a from cte_r r where a < 10
|
||||
) select * from cte_r
|
||||
) select * from cte_e;
|
||||
a
|
||||
5
|
||||
7
|
||||
6
|
||||
8
|
||||
9
|
||||
10
|
||||
with cte_e as (
|
||||
with cte_r as (
|
||||
select a from t1 union select a+1 as a from cte_r r where a < 10
|
||||
) select * from cte_r
|
||||
) select * from cte_e;
|
||||
ERROR 42S02: Table 'test.cte_r' doesn't exist
|
||||
drop table t1;
|
||||
#
|
||||
# MDEV-26025: query with two usage of a CTE executing via PS /SP
|
||||
#
|
||||
create table t1 (a int, b int);
|
||||
insert into t1 value (1,3), (3,2), (1,3), (4,1);
|
||||
prepare stmt from "with
|
||||
cte1 as ( select a,b from t1 where a = 1 AND b = 3 ),
|
||||
cte2 as ( select a,b from cte1 ),
|
||||
cte3 as ( select a,b from cte2 )
|
||||
select * from cte3, cte2";
|
||||
execute stmt;
|
||||
a b a b
|
||||
1 3 1 3
|
||||
1 3 1 3
|
||||
1 3 1 3
|
||||
1 3 1 3
|
||||
execute stmt;
|
||||
a b a b
|
||||
1 3 1 3
|
||||
1 3 1 3
|
||||
1 3 1 3
|
||||
1 3 1 3
|
||||
deallocate prepare stmt;
|
||||
create procedure sp() with
|
||||
cte1 as ( select a,b from t1 where a = 1 AND b = 3 ),
|
||||
cte2 as ( select a,b from cte1 ),
|
||||
cte3 as ( select a,b from cte2 )
|
||||
select * from cte3, cte2;
|
||||
call sp();
|
||||
a b a b
|
||||
1 3 1 3
|
||||
1 3 1 3
|
||||
1 3 1 3
|
||||
1 3 1 3
|
||||
call sp();
|
||||
a b a b
|
||||
1 3 1 3
|
||||
1 3 1 3
|
||||
1 3 1 3
|
||||
1 3 1 3
|
||||
drop procedure sp;
|
||||
drop table t1;
|
||||
# End of 10.2 tests
|
||||
#
|
||||
# MDEV-21673: several references to CTE that uses
|
||||
|
@ -1504,6 +1504,56 @@ drop procedure sp3;
|
||||
|
||||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-26095: missing RECURSIVE for the recursive definition of CTE
|
||||
--echo # embedded into another CTE definition
|
||||
--echo #
|
||||
|
||||
create table t1 (a int);
|
||||
insert into t1 values (5), (7);
|
||||
|
||||
with cte_e as (
|
||||
with recursive cte_r as (
|
||||
select a from t1 union select a+1 as a from cte_r r where a < 10
|
||||
) select * from cte_r
|
||||
) select * from cte_e;
|
||||
|
||||
--ERROR ER_NO_SUCH_TABLE
|
||||
with cte_e as (
|
||||
with cte_r as (
|
||||
select a from t1 union select a+1 as a from cte_r r where a < 10
|
||||
) select * from cte_r
|
||||
) select * from cte_e;
|
||||
|
||||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-26025: query with two usage of a CTE executing via PS /SP
|
||||
--echo #
|
||||
|
||||
create table t1 (a int, b int);
|
||||
insert into t1 value (1,3), (3,2), (1,3), (4,1);
|
||||
|
||||
let $q=
|
||||
with
|
||||
cte1 as ( select a,b from t1 where a = 1 AND b = 3 ),
|
||||
cte2 as ( select a,b from cte1 ),
|
||||
cte3 as ( select a,b from cte2 )
|
||||
select * from cte3, cte2;
|
||||
|
||||
eval prepare stmt from "$q";
|
||||
execute stmt;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
|
||||
eval create procedure sp() $q;
|
||||
|
||||
call sp();
|
||||
call sp();
|
||||
|
||||
drop procedure sp;
|
||||
drop table t1;
|
||||
|
||||
--echo # End of 10.2 tests
|
||||
|
||||
--echo #
|
||||
|
@ -3735,7 +3735,7 @@ select * from t1 as t;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY t ALL NULL NULL NULL NULL 4 100.00
|
||||
Warnings:
|
||||
Note 1003 with recursive cte as (/* select#2 */ select `*` AS `*` from `test`.`t1` where `a` = 1 union /* select#3 */ select `a` + 1 AS `a+1` from `cte` where `a` < 3)/* select#1 */ select `test`.`t`.`a` AS `a` from `test`.`t1` `t`
|
||||
Note 1003 with recursive cte as (/* select#2 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` = 1 union /* select#3 */ select `cte`.`a` + 1 AS `a+1` from `cte` where `cte`.`a` < 3)/* select#1 */ select `test`.`t`.`a` AS `a` from `test`.`t1` `t`
|
||||
with recursive cte as
|
||||
(select * from t1 where a=1 union select a+1 from cte where a<3)
|
||||
select * from t1 as t;
|
||||
@ -3748,10 +3748,10 @@ create table t2 ( i1 int, i2 int);
|
||||
insert into t2 values (1,1),(2,2);
|
||||
explain
|
||||
with recursive cte as
|
||||
( select * from t1 union select s1.* from t1 as s1, cte where s1.i1 = cte.i2 )
|
||||
select * from t1 as t;
|
||||
( select * from t2 union select s1.* from t2 as s1, cte where s1.i1 = cte.i2 )
|
||||
select * from t2 as t;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t ALL NULL NULL NULL NULL 4
|
||||
1 PRIMARY t ALL NULL NULL NULL NULL 2
|
||||
drop table t1,t2;
|
||||
#
|
||||
# MDEV-22042: ANALYZE of query using stored function and recursive CTE
|
||||
@ -4499,6 +4499,93 @@ set big_tables=@save_big_tables;
|
||||
Warnings:
|
||||
Warning 1287 '@@big_tables' is deprecated and will be removed in a future release
|
||||
#
|
||||
# MDEV-26135: execution of PS for query with hanging recursive CTE
|
||||
#
|
||||
create table t1 (a int);
|
||||
insert into t1 values (5), (7);
|
||||
create table t2 (b int);
|
||||
insert into t2 values (3), (7), (1);
|
||||
with recursive r as (select a from t1 union select a+1 from r where a < 10)
|
||||
select * from t2;
|
||||
b
|
||||
3
|
||||
7
|
||||
1
|
||||
prepare stmt from "with recursive r as (select a from t1 union select a+1 from r where a < 10)
|
||||
select * from t2";
|
||||
execute stmt;
|
||||
b
|
||||
3
|
||||
7
|
||||
1
|
||||
execute stmt;
|
||||
b
|
||||
3
|
||||
7
|
||||
1
|
||||
deallocate prepare stmt;
|
||||
drop table t1,t2;
|
||||
#
|
||||
# MDEV-26189: Unknown column reference within hanging recursive CTE
|
||||
#
|
||||
create table t1 (a int);
|
||||
insert into t1 values (3), (7), (1);
|
||||
with recursive
|
||||
r as (select * from t1 union select s1.* from t1 as s1, r where s1.a = r.b)
|
||||
select * from t1 as t;
|
||||
ERROR 42S22: Unknown column 'r.b' in 'where clause'
|
||||
explain with recursive
|
||||
r as (select * from t1 union select s1.* from t1 as s1, r where s1.a = r.b)
|
||||
select * from t1 as t;
|
||||
ERROR 42S22: Unknown column 'r.b' in 'where clause'
|
||||
create procedure sp1() with recursive
|
||||
r as (select * from t1 union select s1.* from t1 as s1, r where s1.a = r.b)
|
||||
select * from t1 as t;
|
||||
call sp1();
|
||||
ERROR 42S22: Unknown column 'r.b' in 'where clause'
|
||||
call sp1();
|
||||
ERROR 42S22: Unknown column 'r.b' in 'where clause'
|
||||
with recursive
|
||||
r as (select * from t1 union select s1.* from t1 as s1, r where s1.b = r.a)
|
||||
select * from t1 as t;
|
||||
ERROR 42S22: Unknown column 's1.b' in 'where clause'
|
||||
explain with recursive
|
||||
r as (select * from t1 union select s1.* from t1 as s1, r where s1.b = r.a)
|
||||
select * from t1 as t;
|
||||
ERROR 42S22: Unknown column 's1.b' in 'where clause'
|
||||
create procedure sp2() with recursive
|
||||
r as (select * from t1 union select s1.* from t1 as s1, r where s1.b = r.a)
|
||||
select * from t1 as t;
|
||||
call sp2();
|
||||
ERROR 42S22: Unknown column 's1.b' in 'where clause'
|
||||
call sp2();
|
||||
ERROR 42S22: Unknown column 's1.b' in 'where clause'
|
||||
drop procedure sp1;
|
||||
drop procedure sp2;
|
||||
drop table t1;
|
||||
#
|
||||
# MDEV-26202: Recursive CTE used indirectly twice
|
||||
# (fixed by the patch forMDEV-26025)
|
||||
#
|
||||
with recursive
|
||||
rcte as ( SELECT 1 AS a
|
||||
UNION ALL
|
||||
SELECT cast(a + 1 as unsigned int) FROM rcte WHERE a < 3),
|
||||
cte1 AS (SELECT a FROM rcte),
|
||||
cte2 AS (SELECT a FROM cte1),
|
||||
cte3 AS ( SELECT a FROM cte2)
|
||||
SELECT * FROM cte2, cte3;
|
||||
a a
|
||||
1 1
|
||||
2 1
|
||||
3 1
|
||||
1 2
|
||||
2 2
|
||||
3 2
|
||||
1 3
|
||||
2 3
|
||||
3 3
|
||||
#
|
||||
# End of 10.2 tests
|
||||
#
|
||||
#
|
||||
|
@ -2590,8 +2590,8 @@ insert into t2 values (1,1),(2,2);
|
||||
|
||||
explain
|
||||
with recursive cte as
|
||||
( select * from t1 union select s1.* from t1 as s1, cte where s1.i1 = cte.i2 )
|
||||
select * from t1 as t;
|
||||
( select * from t2 union select s1.* from t2 as s1, cte where s1.i1 = cte.i2 )
|
||||
select * from t2 as t;
|
||||
|
||||
drop table t1,t2;
|
||||
|
||||
@ -2854,6 +2854,85 @@ drop table folks;
|
||||
|
||||
set big_tables=@save_big_tables;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-26135: execution of PS for query with hanging recursive CTE
|
||||
--echo #
|
||||
|
||||
create table t1 (a int);
|
||||
insert into t1 values (5), (7);
|
||||
create table t2 (b int);
|
||||
insert into t2 values (3), (7), (1);
|
||||
|
||||
let $q=
|
||||
with recursive r as (select a from t1 union select a+1 from r where a < 10)
|
||||
select * from t2;
|
||||
|
||||
eval $q;
|
||||
eval prepare stmt from "$q";
|
||||
execute stmt;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
|
||||
drop table t1,t2;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-26189: Unknown column reference within hanging recursive CTE
|
||||
--echo #
|
||||
|
||||
create table t1 (a int);
|
||||
insert into t1 values (3), (7), (1);
|
||||
|
||||
let $q1=
|
||||
with recursive
|
||||
r as (select * from t1 union select s1.* from t1 as s1, r where s1.a = r.b)
|
||||
select * from t1 as t;
|
||||
|
||||
--ERROR ER_BAD_FIELD_ERROR
|
||||
eval $q1;
|
||||
--ERROR ER_BAD_FIELD_ERROR
|
||||
eval explain $q1;
|
||||
|
||||
eval create procedure sp1() $q1;
|
||||
--ERROR ER_BAD_FIELD_ERROR
|
||||
call sp1();
|
||||
--ERROR ER_BAD_FIELD_ERROR
|
||||
call sp1();
|
||||
|
||||
let $q2=
|
||||
with recursive
|
||||
r as (select * from t1 union select s1.* from t1 as s1, r where s1.b = r.a)
|
||||
select * from t1 as t;
|
||||
|
||||
--ERROR ER_BAD_FIELD_ERROR
|
||||
eval $q2;
|
||||
--ERROR ER_BAD_FIELD_ERROR
|
||||
eval explain $q2;
|
||||
|
||||
eval create procedure sp2() $q2;
|
||||
--ERROR ER_BAD_FIELD_ERROR
|
||||
call sp2();
|
||||
--ERROR ER_BAD_FIELD_ERROR
|
||||
call sp2();
|
||||
|
||||
drop procedure sp1;
|
||||
drop procedure sp2;
|
||||
|
||||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-26202: Recursive CTE used indirectly twice
|
||||
--echo # (fixed by the patch forMDEV-26025)
|
||||
--echo #
|
||||
|
||||
with recursive
|
||||
rcte as ( SELECT 1 AS a
|
||||
UNION ALL
|
||||
SELECT cast(a + 1 as unsigned int) FROM rcte WHERE a < 3),
|
||||
cte1 AS (SELECT a FROM rcte),
|
||||
cte2 AS (SELECT a FROM cte1),
|
||||
cte3 AS ( SELECT a FROM cte2)
|
||||
SELECT * FROM cte2, cte3;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.2 tests
|
||||
--echo #
|
||||
|
@ -5158,6 +5158,19 @@ c1
|
||||
42
|
||||
DROP TABLE t1, t2;
|
||||
#
|
||||
# MDEV-25560 Creating table with certain generated column crashes server
|
||||
#
|
||||
CREATE TABLE t1 (i int, b int AS (RPAD(123,1)) stored);
|
||||
# Original case from the reporter
|
||||
CREATE TABLE crash_test_2 (
|
||||
DATA_VALUE CHAR(10) NULL,
|
||||
HAS_DATA BIT NOT NULL,
|
||||
TEST_COLUMN CHAR(10) AS (RPAD(CASE WHEN HAS_DATA = 1
|
||||
THEN DATA_VALUE ELSE NULL END, 10)) STORED);
|
||||
ERROR HY000: Function or expression 'rpad(case when `HAS_DATA` = 1 then `DATA_VALUE` else NULL end,10)' cannot be used in the GENERATED ALWAYS AS clause of `TEST_COLUMN`
|
||||
# Cleanup
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# End of 10.3 tests
|
||||
#
|
||||
#
|
||||
|
@ -2093,6 +2093,24 @@ SELECT c1 FROM t2;
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-25560 Creating table with certain generated column crashes server
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (i int, b int AS (RPAD(123,1)) stored);
|
||||
|
||||
--echo # Original case from the reporter
|
||||
--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
|
||||
CREATE TABLE crash_test_2 (
|
||||
DATA_VALUE CHAR(10) NULL,
|
||||
HAS_DATA BIT NOT NULL,
|
||||
TEST_COLUMN CHAR(10) AS (RPAD(CASE WHEN HAS_DATA = 1
|
||||
THEN DATA_VALUE ELSE NULL END, 10)) STORED);
|
||||
|
||||
--echo # Cleanup
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.3 tests
|
||||
--echo #
|
||||
|
@ -49,7 +49,7 @@ SHOW GRANTS FOR test_user;
|
||||
Grants for test_user@%
|
||||
GRANT `test_role` TO `test_user`@`%`
|
||||
GRANT USAGE ON *.* TO `test_user`@`%`
|
||||
SET DEFAULT ROLE test_role FOR 'test_user'@'%'
|
||||
SET DEFAULT ROLE `test_role` FOR `test_user`@`%`
|
||||
SET DEFAULT ROLE NONE for test_user;
|
||||
SHOW GRANTS FOR test_user;
|
||||
Grants for test_user@%
|
||||
@ -63,7 +63,7 @@ Grants for test_user@%
|
||||
GRANT `test_role` TO `test_user`@`%`
|
||||
GRANT USAGE ON *.* TO `test_user`@`%`
|
||||
GRANT USAGE ON *.* TO `test_role`
|
||||
SET DEFAULT ROLE test_role FOR 'test_user'@'%'
|
||||
SET DEFAULT ROLE `test_role` FOR `test_user`@`%`
|
||||
SET DEFAULT ROLE NONE;
|
||||
SHOW GRANTS;
|
||||
Grants for test_user@%
|
||||
@ -168,6 +168,23 @@ drop user 'user1'@'localhost';
|
||||
drop user 'fetch'@'localhost';
|
||||
drop user 'user-1'@'localhost';
|
||||
drop user 'O\'Brien'@'localhost';
|
||||
#
|
||||
# MDEV-26080 SHOW GRANTS does not quote role names properly for DEFAULT ROLE
|
||||
#
|
||||
CREATE USER 'test-user';
|
||||
CREATE ROLE `r``o'l"e`;
|
||||
select user from mysql.user where is_role='Y';
|
||||
User
|
||||
r`o'l"e
|
||||
GRANT `r``o'l"e` TO 'test-user';
|
||||
SET DEFAULT ROLE `r``o'l"e` FOR 'test-user';
|
||||
SHOW GRANTS FOR 'test-user';
|
||||
Grants for test-user@%
|
||||
GRANT `r``o'l"e` TO `test-user`@`%`
|
||||
GRANT USAGE ON *.* TO `test-user`@`%`
|
||||
SET DEFAULT ROLE `r``o'l"e` FOR `test-user`@`%`
|
||||
DROP ROLE `r``o'l"e`;
|
||||
DROP USER 'test-user';
|
||||
# End of 10.3 tests
|
||||
create user u1@h identified with 'mysql_native_password' using 'pwd';
|
||||
ERROR HY000: Password hash should be a 41-digit hexadecimal number
|
||||
|
@ -124,6 +124,20 @@ drop user 'fetch'@'localhost';
|
||||
drop user 'user-1'@'localhost';
|
||||
drop user 'O\'Brien'@'localhost';
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-26080 SHOW GRANTS does not quote role names properly for DEFAULT ROLE
|
||||
--echo #
|
||||
|
||||
CREATE USER 'test-user';
|
||||
CREATE ROLE `r``o'l"e`;
|
||||
select user from mysql.user where is_role='Y';
|
||||
GRANT `r``o'l"e` TO 'test-user';
|
||||
SET DEFAULT ROLE `r``o'l"e` FOR 'test-user';
|
||||
# it is expected that quotes won't be shown correctly
|
||||
SHOW GRANTS FOR 'test-user';
|
||||
DROP ROLE `r``o'l"e`;
|
||||
DROP USER 'test-user';
|
||||
|
||||
--echo # End of 10.3 tests
|
||||
|
||||
#
|
||||
|
@ -2,6 +2,9 @@
|
||||
# MySQL >= 5.0
|
||||
#
|
||||
|
||||
# The test can take hours with valgrind
|
||||
--source include/not_valgrind.inc
|
||||
|
||||
# Save the initial number of concurrent sessions
|
||||
--source include/count_sessions.inc
|
||||
|
||||
|
@ -4,6 +4,8 @@
|
||||
# MySQL >= 5.0
|
||||
#
|
||||
|
||||
# The test can take hours with valgrind
|
||||
--source include/not_valgrind.inc
|
||||
|
||||
# Save the initial number of concurrent sessions
|
||||
--source include/count_sessions.inc
|
||||
|
@ -127,6 +127,11 @@ Data:
|
||||
EOF
|
||||
mysql_stmt_next_result(): 0; field_count: 0
|
||||
# ------------------------------------
|
||||
# cat MYSQL_TMP_DIR/test_mdev26145.out.log
|
||||
# ------------------------------------
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def MAX(a) MAX(a) 3 11 0 Y 32768 0 63
|
||||
# ------------------------------------
|
||||
|
||||
|
||||
# cat MYSQL_TMP_DIR/test_explain_meta.out.log
|
||||
|
@ -36,6 +36,10 @@ echo ok;
|
||||
--echo # ------------------------------------
|
||||
--cat_file $MYSQL_TMP_DIR/test_wl4435.out.log
|
||||
--echo # ------------------------------------
|
||||
--echo # cat MYSQL_TMP_DIR/test_mdev26145.out.log
|
||||
--echo # ------------------------------------
|
||||
--cat_file $MYSQL_TMP_DIR/test_mdev26145.out.log
|
||||
--echo # ------------------------------------
|
||||
--echo
|
||||
|
||||
--echo
|
||||
|
@ -758,7 +758,7 @@ GRANT `aRole` TO `root`@`localhost` WITH ADMIN OPTION
|
||||
GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` WITH GRANT OPTION
|
||||
GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION
|
||||
GRANT USAGE ON *.* TO `aRole`
|
||||
SET DEFAULT ROLE aRole FOR 'root'@'localhost'
|
||||
SET DEFAULT ROLE `aRole` FOR `root`@`localhost`
|
||||
SET DEFAULT ROLE NONE;
|
||||
SHOW GRANTS;
|
||||
Grants for root@localhost
|
||||
|
@ -147,4 +147,56 @@ i n
|
||||
656 eight
|
||||
set optimizer_switch= @save_optimizer_switch;
|
||||
DROP TABLE t1,t2,t3;
|
||||
#
|
||||
# MDEV-25858: Query results are incorrect when indexes are added
|
||||
#
|
||||
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY) engine=innodb;
|
||||
insert into t1 values (1),(2),(3);
|
||||
CREATE TABLE t2 (
|
||||
id int NOT NULL PRIMARY KEY,
|
||||
id2 int NOT NULL,
|
||||
d1 datetime,
|
||||
d2 timestamp NOT NULL,
|
||||
KEY id2 (id2)
|
||||
) engine=innodb;
|
||||
insert into t2 values
|
||||
(1,2,'2019-03-05 00:00:00','2019-03-06 00:00:00'),
|
||||
(2,3,'2019-03-05 00:00:00','2019-03-06 00:00:00'),
|
||||
(3,3,'2019-03-06 00:00:00','2019-03-05 00:00:00');
|
||||
select
|
||||
t1.id,t2.id
|
||||
from
|
||||
t1 left join
|
||||
t2 on t2.id2 = t1.id and
|
||||
t2.id = (select dd.id
|
||||
from t2 dd
|
||||
where
|
||||
dd.id2 = t1.id and
|
||||
d1 > '2019-02-06 00:00:00'
|
||||
order by
|
||||
dd.d1 desc, dd.d2 desc, dd.id desc limit 1
|
||||
);
|
||||
id id
|
||||
1 NULL
|
||||
2 1
|
||||
3 3
|
||||
create index for_latest_sort on t2 (d1 desc, d2 desc, id desc);
|
||||
select
|
||||
t1.id,t2.id
|
||||
from
|
||||
t1 left join
|
||||
t2 on t2.id2 = t1.id and
|
||||
t2.id = (select dd.id
|
||||
from t2 dd
|
||||
where
|
||||
dd.id2 = t1.id and
|
||||
d1 > '2019-02-06 00:00:00'
|
||||
order by
|
||||
dd.d1 desc, dd.d2 desc, dd.id desc limit 1
|
||||
);
|
||||
id id
|
||||
1 NULL
|
||||
2 1
|
||||
3 3
|
||||
drop table t1,t2;
|
||||
# End of 10.2 tests
|
||||
|
@ -135,4 +135,55 @@ set optimizer_switch= @save_optimizer_switch;
|
||||
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-25858: Query results are incorrect when indexes are added
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY) engine=innodb;
|
||||
insert into t1 values (1),(2),(3);
|
||||
|
||||
CREATE TABLE t2 (
|
||||
id int NOT NULL PRIMARY KEY,
|
||||
id2 int NOT NULL,
|
||||
d1 datetime,
|
||||
d2 timestamp NOT NULL,
|
||||
KEY id2 (id2)
|
||||
) engine=innodb;
|
||||
|
||||
insert into t2 values
|
||||
(1,2,'2019-03-05 00:00:00','2019-03-06 00:00:00'),
|
||||
(2,3,'2019-03-05 00:00:00','2019-03-06 00:00:00'),
|
||||
(3,3,'2019-03-06 00:00:00','2019-03-05 00:00:00');
|
||||
|
||||
select
|
||||
t1.id,t2.id
|
||||
from
|
||||
t1 left join
|
||||
t2 on t2.id2 = t1.id and
|
||||
t2.id = (select dd.id
|
||||
from t2 dd
|
||||
where
|
||||
dd.id2 = t1.id and
|
||||
d1 > '2019-02-06 00:00:00'
|
||||
order by
|
||||
dd.d1 desc, dd.d2 desc, dd.id desc limit 1
|
||||
);
|
||||
|
||||
create index for_latest_sort on t2 (d1 desc, d2 desc, id desc);
|
||||
|
||||
select
|
||||
t1.id,t2.id
|
||||
from
|
||||
t1 left join
|
||||
t2 on t2.id2 = t1.id and
|
||||
t2.id = (select dd.id
|
||||
from t2 dd
|
||||
where
|
||||
dd.id2 = t1.id and
|
||||
d1 > '2019-02-06 00:00:00'
|
||||
order by
|
||||
dd.d1 desc, dd.d2 desc, dd.id desc limit 1
|
||||
);
|
||||
drop table t1,t2;
|
||||
|
||||
--echo # End of 10.2 tests
|
||||
|
@ -50,3 +50,17 @@ t1_first
|
||||
deallocate prepare stmt1;
|
||||
deallocate prepare stmt2;
|
||||
drop table t1;
|
||||
#
|
||||
# MDEV-25808 PREPARE/EXECUTE makes signed integer out of unsigned
|
||||
#
|
||||
prepare p1 from 'select concat(?)';
|
||||
execute p1 using 17864960750176564435;
|
||||
concat(?)
|
||||
17864960750176564435
|
||||
prepare p1 from 'select SQRT(?) is not null';
|
||||
execute p1 using 17864960750176564435;
|
||||
SQRT(?) is not null
|
||||
1
|
||||
#
|
||||
# End of 10.3 tests
|
||||
#
|
||||
|
@ -40,3 +40,15 @@ execute stmt2;
|
||||
deallocate prepare stmt1;
|
||||
deallocate prepare stmt2;
|
||||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-25808 PREPARE/EXECUTE makes signed integer out of unsigned
|
||||
--echo #
|
||||
prepare p1 from 'select concat(?)';
|
||||
execute p1 using 17864960750176564435;
|
||||
prepare p1 from 'select SQRT(?) is not null';
|
||||
execute p1 using 17864960750176564435;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.3 tests
|
||||
--echo #
|
||||
|
@ -5572,6 +5572,20 @@ DROP TABLE t1, t2, t3;
|
||||
# End of 10.2 tests
|
||||
#
|
||||
#
|
||||
# MDEV-26147: The test main.sp-row fails in case it is run in PS mode
|
||||
#
|
||||
CREATE PROCEDURE p1(a ROW(a INT,b INT))
|
||||
BEGIN
|
||||
SELECT a.a, a.b;
|
||||
END;
|
||||
$$
|
||||
PREPARE stmt FROM 'CALL p1(ROW(10, 20))';
|
||||
EXECUTE stmt;
|
||||
a.a a.b
|
||||
10 20
|
||||
DEALLOCATE PREPARE stmt;
|
||||
DROP PROCEDURE p1;
|
||||
#
|
||||
# MDEV-19263: Server crashes in mysql_handle_single_derived
|
||||
# upon 2nd execution of PS
|
||||
#
|
||||
|
@ -4993,6 +4993,22 @@ DROP TABLE t1, t2, t3;
|
||||
--echo # End of 10.2 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-26147: The test main.sp-row fails in case it is run in PS mode
|
||||
--echo #
|
||||
DELIMITER $$;
|
||||
CREATE PROCEDURE p1(a ROW(a INT,b INT))
|
||||
BEGIN
|
||||
SELECT a.a, a.b;
|
||||
END;
|
||||
$$
|
||||
DELIMITER ;$$
|
||||
PREPARE stmt FROM 'CALL p1(ROW(10, 20))';
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
DROP PROCEDURE p1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-19263: Server crashes in mysql_handle_single_derived
|
||||
--echo # upon 2nd execution of PS
|
||||
|
@ -2098,6 +2098,57 @@ drop view v1;
|
||||
#
|
||||
# End of 10.1 tests
|
||||
#
|
||||
#
|
||||
# MDEV-17783: AddressSanitizer: stack-buffer-overflow in table_cond_selectivity
|
||||
#
|
||||
set
|
||||
@tmp_jcl=@@join_cache_level,
|
||||
@tmp_sel=@@optimizer_use_condition_selectivity;
|
||||
set
|
||||
join_cache_level=3,
|
||||
optimizer_use_condition_selectivity=2;
|
||||
CREATE TABLE t1 (
|
||||
c1 int, c2 int, c3 int, c4 int, c5 int, c6 int, c7 int, c8 int, c9 int, c10 int,
|
||||
c11 int, c12 int, c13 int, c14 int, c15 int, c16 int, c17 int, c18 int, c19 int,
|
||||
c20 int, c21 int, c22 int, c23 int, c24 int, c25 int, c26 int, c27 int, c28 int,
|
||||
c29 int, c30 int, c31 int, c32 int, c33 int, c34 int
|
||||
) ENGINE=InnoDB;
|
||||
SELECT * FROM t1
|
||||
WHERE
|
||||
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10,
|
||||
c11, c12, c13, c14, c15, c16, c17, c18, c19,
|
||||
c20, c21, c22, c23, c24, c25, c26, c27, c28, c29,
|
||||
c30, c31, c32, c33, c34) IN (SELECT * FROM t1) ;
|
||||
c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34
|
||||
set
|
||||
join_cache_level=@tmp_jcl,
|
||||
optimizer_use_condition_selectivity=@tmp_sel;
|
||||
drop table t1;
|
||||
#
|
||||
# MDEV-25013: SIGSEGV in best_extension_by_limited_search | SIGSEGV in restore_prev_nj_state
|
||||
#
|
||||
SET join_cache_level=3;
|
||||
CREATE TABLE t1 (
|
||||
TEXT1 TEXT, TEXT2 TEXT, TEXT3 TEXT, TEXT4 TEXT, TEXT5 TEXT,
|
||||
TEXT6 TEXT, TEXT7 TEXT, TEXT8 TEXT, TEXT9 TEXT, TEXT10 TEXT,
|
||||
TEXT11 TEXT, TEXT12 TEXT,TEXT13 TEXT,TEXT14 TEXT,TEXT15 TEXT,
|
||||
TEXT16 TEXT,TEXT17 TEXT,TEXT18 TEXT,TEXT19 TEXT,TEXT20 TEXT,
|
||||
TEXT21 TEXT,TEXT22 TEXT,TEXT23 TEXT,TEXT24 TEXT,TEXT25 TEXT,
|
||||
TEXT26 TEXT,TEXT27 TEXT,TEXT28 TEXT,TEXT29 TEXT,TEXT30 TEXT,
|
||||
TEXT31 TEXT,TEXT32 TEXT,TEXT33 TEXT,TEXT34 TEXT,TEXT35 TEXT,
|
||||
TEXT36 TEXT,TEXT37 TEXT,TEXT38 TEXT,TEXT39 TEXT,TEXT40 TEXT,
|
||||
TEXT41 TEXT,TEXT42 TEXT,TEXT43 TEXT,TEXT44 TEXT,TEXT45 TEXT,
|
||||
TEXT46 TEXT,TEXT47 TEXT,TEXT48 TEXT,TEXT49 TEXT,TEXT50 TEXT
|
||||
) ENGINE=InnoDB;
|
||||
EXPLAIN SELECT 1 FROM t1 NATURAL JOIN t1 AS t2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 1 Using where
|
||||
1 SIMPLE t2 hash_ALL NULL #hash#$hj 150 test.t1.TEXT1,test.t1.TEXT2,test.t1.TEXT3,test.t1.TEXT4,test.t1.TEXT5,test.t1.TEXT6,test.t1.TEXT7,test.t1.TEXT8,test.t1.TEXT9,test.t1.TEXT10,test.t1.TEXT11,test.t1.TEXT12,test.t1.TEXT13,test.t1.TEXT14,test.t1.TEXT15,test.t1.TEXT16,test.t1.TEXT17,test.t1.TEXT18,test.t1.TEXT19,test.t1.TEXT20,test.t1.TEXT21,test.t1.TEXT22,test.t1.TEXT23,test.t1.TEXT24,test.t1.TEXT25,test.t1.TEXT26,test.t1.TEXT27,test.t1.TEXT28,test.t1.TEXT29,test.t1.TEXT30,test.t1.TEXT31,test.t1.TEXT32,test.t1.TEXT33,test.t1.TEXT34,test.t1.TEXT35,test.t1.TEXT36,test.t1.TEXT37,test.t1.TEXT38,test.t1.TEXT39,test.t1.TEXT40,test.t1.TEXT41,test.t1.TEXT42,test.t1.TEXT43,test.t1.TEXT44,test.t1.TEXT45,test.t1.TEXT46,test.t1.TEXT47,test.t1.TEXT48,test.t1.TEXT49,test.t1.TEXT50 1 Using where; Using join buffer (flat, BNLH join)
|
||||
set join_cache_level=@tmp_jcl;
|
||||
drop table t1;
|
||||
#
|
||||
# End of 10.1 tests
|
||||
#
|
||||
set use_stat_tables= @tmp_ust;
|
||||
set optimizer_use_condition_selectivity= @tmp_oucs;
|
||||
set @@global.histogram_size=@save_histogram_size;
|
||||
|
@ -174,6 +174,61 @@ drop view v1;
|
||||
--echo # End of 10.1 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-17783: AddressSanitizer: stack-buffer-overflow in table_cond_selectivity
|
||||
--echo #
|
||||
|
||||
set
|
||||
@tmp_jcl=@@join_cache_level,
|
||||
@tmp_sel=@@optimizer_use_condition_selectivity;
|
||||
set
|
||||
join_cache_level=3,
|
||||
optimizer_use_condition_selectivity=2;
|
||||
|
||||
CREATE TABLE t1 (
|
||||
c1 int, c2 int, c3 int, c4 int, c5 int, c6 int, c7 int, c8 int, c9 int, c10 int,
|
||||
c11 int, c12 int, c13 int, c14 int, c15 int, c16 int, c17 int, c18 int, c19 int,
|
||||
c20 int, c21 int, c22 int, c23 int, c24 int, c25 int, c26 int, c27 int, c28 int,
|
||||
c29 int, c30 int, c31 int, c32 int, c33 int, c34 int
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
SELECT * FROM t1
|
||||
WHERE
|
||||
(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10,
|
||||
c11, c12, c13, c14, c15, c16, c17, c18, c19,
|
||||
c20, c21, c22, c23, c24, c25, c26, c27, c28, c29,
|
||||
c30, c31, c32, c33, c34) IN (SELECT * FROM t1) ;
|
||||
|
||||
set
|
||||
join_cache_level=@tmp_jcl,
|
||||
optimizer_use_condition_selectivity=@tmp_sel;
|
||||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-25013: SIGSEGV in best_extension_by_limited_search | SIGSEGV in restore_prev_nj_state
|
||||
--echo #
|
||||
|
||||
SET join_cache_level=3;
|
||||
CREATE TABLE t1 (
|
||||
TEXT1 TEXT, TEXT2 TEXT, TEXT3 TEXT, TEXT4 TEXT, TEXT5 TEXT,
|
||||
TEXT6 TEXT, TEXT7 TEXT, TEXT8 TEXT, TEXT9 TEXT, TEXT10 TEXT,
|
||||
TEXT11 TEXT, TEXT12 TEXT,TEXT13 TEXT,TEXT14 TEXT,TEXT15 TEXT,
|
||||
TEXT16 TEXT,TEXT17 TEXT,TEXT18 TEXT,TEXT19 TEXT,TEXT20 TEXT,
|
||||
TEXT21 TEXT,TEXT22 TEXT,TEXT23 TEXT,TEXT24 TEXT,TEXT25 TEXT,
|
||||
TEXT26 TEXT,TEXT27 TEXT,TEXT28 TEXT,TEXT29 TEXT,TEXT30 TEXT,
|
||||
TEXT31 TEXT,TEXT32 TEXT,TEXT33 TEXT,TEXT34 TEXT,TEXT35 TEXT,
|
||||
TEXT36 TEXT,TEXT37 TEXT,TEXT38 TEXT,TEXT39 TEXT,TEXT40 TEXT,
|
||||
TEXT41 TEXT,TEXT42 TEXT,TEXT43 TEXT,TEXT44 TEXT,TEXT45 TEXT,
|
||||
TEXT46 TEXT,TEXT47 TEXT,TEXT48 TEXT,TEXT49 TEXT,TEXT50 TEXT
|
||||
) ENGINE=InnoDB;
|
||||
EXPLAIN SELECT 1 FROM t1 NATURAL JOIN t1 AS t2;
|
||||
|
||||
set join_cache_level=@tmp_jcl;
|
||||
drop table t1;
|
||||
--echo #
|
||||
--echo # End of 10.1 tests
|
||||
--echo #
|
||||
|
||||
set use_stat_tables= @tmp_ust;
|
||||
set optimizer_use_condition_selectivity= @tmp_oucs;
|
||||
set @@global.histogram_size=@save_histogram_size;
|
||||
|
@ -294,6 +294,26 @@ SELECT * FROM t1 WHERE t1.d = 0 AND t1.p = '1' AND t1.i != '-1' AND t1.n = 'some
|
||||
i n d p
|
||||
set optimizer_use_condition_selectivity= @tmp_mdev8779;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-23937: SIGSEGV in looped best_extension_by_limited_search from greedy_search
|
||||
# (Testcase only)
|
||||
#
|
||||
set
|
||||
@tmp_jcl= @@join_cache_level,
|
||||
@tmp_ucs= @@optimizer_use_condition_selectivity;
|
||||
set
|
||||
join_cache_level=3,
|
||||
optimizer_use_condition_selectivity=2;
|
||||
CREATE TABLE t1 AS SELECT * FROM mysql.user;
|
||||
CREATE TABLE t3 (b VARCHAR (1));
|
||||
CREATE TABLE t2 (c2 INT);
|
||||
INSERT INTO t2 VALUES (1);
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 AS a NATURAL JOIN t1 AS b;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE a ALL NULL NULL NULL NULL 5 Using where
|
||||
1 SIMPLE b hash_ALL NULL #hash#$hj 612 test.a.Host,test.a.User,test.a.Password,test.a.Select_priv,test.a.Insert_priv,test.a.Update_priv,test.a.Delete_priv,test.a.Create_priv,test.a.Drop_priv,test.a.Reload_priv,test.a.Shutdown_priv,test.a.Process_priv,test.a.File_priv,test.a.Grant_priv,test.a.References_priv,test.a.Index_priv,test.a.Alter_priv,test.a.Show_db_priv,test.a.Super_priv,test.a.Create_tmp_table_priv,test.a.Lock_tables_priv,test.a.Execute_priv,test.a.Repl_slave_priv,test.a.Repl_client_priv,test.a.Create_view_priv,test.a.Show_view_priv,test.a.Create_routine_priv,test.a.Alter_routine_priv,test.a.Create_user_priv,test.a.Event_priv,test.a.Trigger_priv,test.a.Create_tablespace_priv,test.a.Delete_history_priv,test.a.ssl_type,test.a.ssl_cipher,test.a.x509_issuer,test.a.x509_subject,test.a.max_questions,test.a.max_updates,test.a.max_connections,test.a.max_user_connections,test.a.plugin,test.a.authentication_string,test.a.password_expired,test.a.is_role,test.a.default_role,test.a.max_statement_time 5 Using where; Using join buffer (flat, BNLH join)
|
||||
DROP TABLE t1,t2,t3;
|
||||
#
|
||||
# End of the test file
|
||||
#
|
||||
|
@ -229,6 +229,27 @@ SELECT * FROM t1 WHERE t1.d = 0 AND t1.p = '1' AND t1.i != '-1' AND t1.n = 'some
|
||||
set optimizer_use_condition_selectivity= @tmp_mdev8779;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-23937: SIGSEGV in looped best_extension_by_limited_search from greedy_search
|
||||
--echo # (Testcase only)
|
||||
--echo #
|
||||
set
|
||||
@tmp_jcl= @@join_cache_level,
|
||||
@tmp_ucs= @@optimizer_use_condition_selectivity;
|
||||
set
|
||||
join_cache_level=3,
|
||||
optimizer_use_condition_selectivity=2;
|
||||
|
||||
CREATE TABLE t1 AS SELECT * FROM mysql.user;
|
||||
CREATE TABLE t3 (b VARCHAR (1));
|
||||
CREATE TABLE t2 (c2 INT);
|
||||
INSERT INTO t2 VALUES (1);
|
||||
|
||||
EXPLAIN
|
||||
SELECT * FROM t1 AS a NATURAL JOIN t1 AS b;
|
||||
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
||||
--echo #
|
||||
--echo # End of the test file
|
||||
--echo #
|
||||
|
5
mysql-test/main/shutdown_not_windows.combinations
Normal file
5
mysql-test/main/shutdown_not_windows.combinations
Normal file
@ -0,0 +1,5 @@
|
||||
[1tpc]
|
||||
--thread-handling=one-thread-per-connection
|
||||
|
||||
[pot]
|
||||
--thread-handling=pool-of-threads
|
8
mysql-test/main/shutdown_not_windows.result
Normal file
8
mysql-test/main/shutdown_not_windows.result
Normal file
@ -0,0 +1,8 @@
|
||||
#
|
||||
# MDEV-18353 Shutdown may miss to wait for connection thread
|
||||
#
|
||||
call mtr.add_suppression('Thread .* did not exit');
|
||||
set @old_dbug=@@global.debug_dbug;
|
||||
set global debug_dbug='+d,CONNECT_wait';
|
||||
select variable_value into @cons from information_schema.global_status where variable_name='connections';
|
||||
# restart
|
14
mysql-test/main/shutdown_not_windows.test
Normal file
14
mysql-test/main/shutdown_not_windows.test
Normal file
@ -0,0 +1,14 @@
|
||||
source include/not_windows.inc;
|
||||
source include/not_embedded.inc;
|
||||
source include/have_debug.inc;
|
||||
--echo #
|
||||
--echo # MDEV-18353 Shutdown may miss to wait for connection thread
|
||||
--echo #
|
||||
call mtr.add_suppression('Thread .* did not exit');
|
||||
set @old_dbug=@@global.debug_dbug;
|
||||
set global debug_dbug='+d,CONNECT_wait';
|
||||
select variable_value into @cons from information_schema.global_status where variable_name='connections';
|
||||
exec $MYSQL -e 'select sleep(3600)' >/dev/null 2>&1 &;
|
||||
let $wait_condition= select variable_value>@cons from information_schema.global_status where variable_name='connections';
|
||||
source include/wait_condition.inc;
|
||||
source include/restart_mysqld.inc;
|
@ -39,4 +39,24 @@ SET @@LOCAL.skip_name_resolve=0;
|
||||
ERROR HY000: Variable 'skip_name_resolve' is a read only variable
|
||||
SET @@GLOBAL.skip_name_resolve=0;
|
||||
ERROR HY000: Variable 'skip_name_resolve' is a read only variable
|
||||
End of 5.1 tests
|
||||
#
|
||||
# End of 5.1 tests
|
||||
#
|
||||
#
|
||||
# MDEV-26081 set role crashes when a hostname cannot be resolved
|
||||
#
|
||||
create user u1@`%`;
|
||||
create role r1;
|
||||
create role r2;
|
||||
grant r2 to r1;
|
||||
grant r1 to u1@`%`;
|
||||
connect u1,127.0.0.1,u1,,,$MASTER_MYPORT;
|
||||
set role r2;
|
||||
ERROR OP000: User `u1`@`%` has not been granted role `r2`
|
||||
disconnect u1;
|
||||
connection default;
|
||||
drop user u1@`%`;
|
||||
drop role r1, r2;
|
||||
#
|
||||
# End of 10.2 tests
|
||||
#
|
||||
|
@ -50,4 +50,28 @@ SET @@LOCAL.skip_name_resolve=0;
|
||||
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||
SET @@GLOBAL.skip_name_resolve=0;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
--echo #
|
||||
--echo # End of 5.1 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-26081 set role crashes when a hostname cannot be resolved
|
||||
--echo #
|
||||
|
||||
create user u1@`%`;
|
||||
create role r1;
|
||||
create role r2;
|
||||
grant r2 to r1;
|
||||
grant r1 to u1@`%`;
|
||||
|
||||
connect u1,127.0.0.1,u1,,,$MASTER_MYPORT;
|
||||
error ER_INVALID_ROLE;
|
||||
set role r2;
|
||||
disconnect u1;
|
||||
connection default;
|
||||
drop user u1@`%`;
|
||||
drop role r1, r2;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.2 tests
|
||||
--echo #
|
||||
|
1
mysql-test/main/ssl_cipher.opt
Normal file
1
mysql-test/main/ssl_cipher.opt
Normal file
@ -0,0 +1 @@
|
||||
--loose-tls-version=TLSv1.0,TLSv1.1,TLSv1.2
|
@ -3060,6 +3060,44 @@ a
|
||||
2
|
||||
3
|
||||
drop table t1;
|
||||
#
|
||||
# MDEV-25484: Derived table using TVC with LIMIT and ORDER BY
|
||||
#
|
||||
create table t1 (a int);
|
||||
insert into t1 values (3), (7), (1);
|
||||
select * from ( (select * from t1 limit 2) order by 1 desc) as dt;
|
||||
a
|
||||
3
|
||||
7
|
||||
(values (3), (7), (1) limit 2) order by 1 desc;
|
||||
3
|
||||
7
|
||||
3
|
||||
select * from ( (values (3), (7), (1) limit 2) order by 1 desc) as dt;
|
||||
3
|
||||
3
|
||||
7
|
||||
select * from ( select * from t1 order by 1 limit 2 ) as dt;
|
||||
a
|
||||
1
|
||||
3
|
||||
values (3),(7),(1) order by 1 limit 2;
|
||||
3
|
||||
1
|
||||
3
|
||||
select * from ( values (3),(7),(1) order by 1 limit 2 ) as dt;
|
||||
3
|
||||
1
|
||||
3
|
||||
values (3),(7),(1) union values (2),(4) order by 1 limit 2;
|
||||
3
|
||||
1
|
||||
2
|
||||
select * from (values (3),(7),(1) union values (2),(4) order by 1 limit 2) as dt;
|
||||
3
|
||||
1
|
||||
2
|
||||
drop table t1;
|
||||
End of 10.3 tests
|
||||
#
|
||||
# MDEV-22610 Crash in INSERT INTO t1 (VALUES (DEFAULT) UNION VALUES (DEFAULT))
|
||||
|
@ -1628,6 +1628,28 @@ select * from t1;
|
||||
|
||||
drop table t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-25484: Derived table using TVC with LIMIT and ORDER BY
|
||||
--echo #
|
||||
|
||||
create table t1 (a int);
|
||||
insert into t1 values (3), (7), (1);
|
||||
|
||||
select * from ( (select * from t1 limit 2) order by 1 desc) as dt;
|
||||
(values (3), (7), (1) limit 2) order by 1 desc;
|
||||
select * from ( (values (3), (7), (1) limit 2) order by 1 desc) as dt;
|
||||
|
||||
|
||||
select * from ( select * from t1 order by 1 limit 2 ) as dt;
|
||||
values (3),(7),(1) order by 1 limit 2;
|
||||
select * from ( values (3),(7),(1) order by 1 limit 2 ) as dt;
|
||||
|
||||
values (3),(7),(1) union values (2),(4) order by 1 limit 2;
|
||||
select * from (values (3),(7),(1) union values (2),(4) order by 1 limit 2) as dt;
|
||||
|
||||
drop table t1;
|
||||
|
||||
--echo End of 10.3 tests
|
||||
|
||||
--echo #
|
||||
|
@ -1612,7 +1612,7 @@ NULL binary(0) YES NULL
|
||||
CREATE TABLE t5 SELECT NULL UNION SELECT NULL;
|
||||
DESC t5;
|
||||
Field Type Null Key Default Extra
|
||||
NULL null YES NULL
|
||||
NULL binary(0) YES NULL
|
||||
CREATE TABLE t6
|
||||
SELECT * FROM (SELECT * FROM (SELECT NULL)a) b UNION SELECT a FROM t1;
|
||||
DESC t6;
|
||||
@ -2650,5 +2650,34 @@ CAST(1 AS UNSIGNED)
|
||||
1
|
||||
1
|
||||
#
|
||||
# MDEV-24511 null field is created with CREATE..SELECT
|
||||
#
|
||||
set @save_default_storage_engine=@@default_storage_engine;
|
||||
SET @@default_storage_engine=MEMORY;
|
||||
CREATE TABLE t1 SELECT NULL UNION SELECT NULL;
|
||||
ALTER TABLE t1 ADD INDEX (`PRIMARY`);
|
||||
ERROR 42000: Key column 'PRIMARY' doesn't exist in table
|
||||
CREATE TABLE t2 SELECT NULL;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`NULL` binary(0) DEFAULT NULL
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
CREATE TABLE t3 SELECT NULL UNION SELECT NULL;
|
||||
SHOW CREATE TABLE t3;
|
||||
Table Create Table
|
||||
t3 CREATE TABLE `t3` (
|
||||
`NULL` binary(0) DEFAULT NULL
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
CREATE OR REPLACE TABLE t4 SELECT NULL UNION SELECT NULL;
|
||||
SHOW CREATE TABLE t4;
|
||||
Table Create Table
|
||||
t4 CREATE TABLE `t4` (
|
||||
`NULL` binary(0) DEFAULT NULL
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
ALTER TABLE t4 ADD INDEX (`NULL`);
|
||||
DROP TABLE t1, t2, t3, t4;
|
||||
set @@default_storage_engine=@save_default_storage_engine;
|
||||
#
|
||||
# End of 10.3 tests
|
||||
#
|
||||
|
@ -1883,6 +1883,31 @@ SELECT CAST(1 AS UNSIGNED) UNION ALL SELECT CAST(1 AS SIGNED);
|
||||
--disable_metadata
|
||||
--enable_ps_protocol
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-24511 null field is created with CREATE..SELECT
|
||||
--echo #
|
||||
|
||||
set @save_default_storage_engine=@@default_storage_engine;
|
||||
SET @@default_storage_engine=MEMORY;
|
||||
|
||||
CREATE TABLE t1 SELECT NULL UNION SELECT NULL;
|
||||
--error ER_KEY_COLUMN_DOES_NOT_EXITS
|
||||
ALTER TABLE t1 ADD INDEX (`PRIMARY`);
|
||||
|
||||
CREATE TABLE t2 SELECT NULL;
|
||||
SHOW CREATE TABLE t2;
|
||||
|
||||
CREATE TABLE t3 SELECT NULL UNION SELECT NULL;
|
||||
SHOW CREATE TABLE t3;
|
||||
|
||||
CREATE OR REPLACE TABLE t4 SELECT NULL UNION SELECT NULL;
|
||||
SHOW CREATE TABLE t4;
|
||||
ALTER TABLE t4 ADD INDEX (`NULL`);
|
||||
|
||||
DROP TABLE t1, t2, t3, t4;
|
||||
|
||||
set @@default_storage_engine=@save_default_storage_engine;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.3 tests
|
||||
--echo #
|
||||
|
@ -3912,6 +3912,293 @@ sum(i) over () IN ( SELECT 1 FROM t1 a)
|
||||
0
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-25565: 2-nd call of SP with SELECT from view / derived table / CTE
|
||||
# returning the result of calculation of 2 window
|
||||
# functions that use the same window specification
|
||||
#
|
||||
create table t1 (a int);
|
||||
insert into t1 values (3), (7), (1), (7), (1), (1), (3), (1), (5);
|
||||
create view v2 as select a from t1 group by a;
|
||||
create view v1 as select * from v2;
|
||||
create procedure sp1() select v1.a,
|
||||
sum(v1.a) over (partition by v1.a order by v1.a) as k,
|
||||
avg(v1.a) over (partition by v1.a order by v1.a) as m
|
||||
from v1;
|
||||
call sp1();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
call sp1();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
prepare stmt from "select v1.a,
|
||||
sum(v1.a) over (partition by v1.a order by v1.a) as k,
|
||||
avg(v1.a) over (partition by v1.a order by v1.a) as m
|
||||
from v1";
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
deallocate prepare stmt;
|
||||
create procedure sp2() select * from
|
||||
( select dt1.a,
|
||||
sum(dt1.a) over (partition by dt1.a order by dt1.a) as k,
|
||||
avg(dt1.a) over (partition by dt1.a order by dt1.a) as m
|
||||
from (select * from v2) as dt1
|
||||
) as dt;
|
||||
call sp2();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
call sp2();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
prepare stmt from "select * from
|
||||
( select dt1.a,
|
||||
sum(dt1.a) over (partition by dt1.a order by dt1.a) as k,
|
||||
avg(dt1.a) over (partition by dt1.a order by dt1.a) as m
|
||||
from (select * from v2) as dt1
|
||||
) as dt";
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
deallocate prepare stmt;
|
||||
create procedure sp3() select * from
|
||||
( select dt1.a,
|
||||
sum(dt1.a) over (partition by dt1.a order by dt1.a) as k,
|
||||
avg(dt1.a) over (partition by dt1.a order by dt1.a) as m
|
||||
from ( select * from (select * from t1 group by a) as dt2 ) as dt1
|
||||
) as dt;
|
||||
call sp3();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
call sp3();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
prepare stmt from "select * from
|
||||
( select dt1.a,
|
||||
sum(dt1.a) over (partition by dt1.a order by dt1.a) as k,
|
||||
avg(dt1.a) over (partition by dt1.a order by dt1.a) as m
|
||||
from ( select * from (select * from t1 group by a) as dt2 ) as dt1
|
||||
) as dt";
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
deallocate prepare stmt;
|
||||
create procedure sp4() with cte1 as (select * from (select * from t1 group by a) as dt2),
|
||||
cte as
|
||||
( select cte1.a,
|
||||
sum(cte1.a) over (partition by cte1.a order by cte1.a) as k,
|
||||
avg(cte1.a) over (partition by cte1.a order by cte1.a) as m
|
||||
from cte1 )
|
||||
select * from cte;
|
||||
call sp4();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
call sp4();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
prepare stmt from "with cte1 as (select * from (select * from t1 group by a) as dt2),
|
||||
cte as
|
||||
( select cte1.a,
|
||||
sum(cte1.a) over (partition by cte1.a order by cte1.a) as k,
|
||||
avg(cte1.a) over (partition by cte1.a order by cte1.a) as m
|
||||
from cte1 )
|
||||
select * from cte";
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
deallocate prepare stmt;
|
||||
create procedure sp5() with cte1 as (select * from v2),
|
||||
cte as
|
||||
( select cte1.a,
|
||||
sum(cte1.a) over (partition by cte1.a order by cte1.a) as k,
|
||||
avg(cte1.a) over (partition by cte1.a order by cte1.a) as m
|
||||
from cte1 )
|
||||
select * from cte;
|
||||
call sp5();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
call sp5();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
prepare stmt from "with cte1 as (select * from v2),
|
||||
cte as
|
||||
( select cte1.a,
|
||||
sum(cte1.a) over (partition by cte1.a order by cte1.a) as k,
|
||||
avg(cte1.a) over (partition by cte1.a order by cte1.a) as m
|
||||
from cte1 )
|
||||
select * from cte";
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
deallocate prepare stmt;
|
||||
create procedure sp6() with
|
||||
cte1 as (with cte2 as (select * from t1 group by a) select * from cte2),
|
||||
cte as
|
||||
( select cte1.a,
|
||||
sum(cte1.a) over (partition by cte1.a order by cte1.a) as k,
|
||||
avg(cte1.a) over (partition by cte1.a order by cte1.a) as m
|
||||
from cte1 )
|
||||
select * from cte;
|
||||
call sp6();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
call sp6();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
prepare stmt from "with
|
||||
cte1 as (with cte2 as (select * from t1 group by a) select * from cte2),
|
||||
cte as
|
||||
( select cte1.a,
|
||||
sum(cte1.a) over (partition by cte1.a order by cte1.a) as k,
|
||||
avg(cte1.a) over (partition by cte1.a order by cte1.a) as m
|
||||
from cte1 )
|
||||
select * from cte";
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
deallocate prepare stmt;
|
||||
create procedure sp7() with
|
||||
cte2 as (select * from v1),
|
||||
cte1 as (select * from cte2),
|
||||
cte as
|
||||
( select cte1.a,
|
||||
sum(cte1.a) over (partition by cte1.a order by cte1.a) as k,
|
||||
avg(cte1.a) over (partition by cte1.a order by cte1.a) as m
|
||||
from cte1 )
|
||||
select * from cte;
|
||||
call sp7();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
call sp7();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
prepare stmt from "with
|
||||
cte2 as (select * from v1),
|
||||
cte1 as (select * from cte2),
|
||||
cte as
|
||||
( select cte1.a,
|
||||
sum(cte1.a) over (partition by cte1.a order by cte1.a) as k,
|
||||
avg(cte1.a) over (partition by cte1.a order by cte1.a) as m
|
||||
from cte1 )
|
||||
select * from cte";
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
deallocate prepare stmt;
|
||||
drop procedure sp1;
|
||||
drop procedure sp2;
|
||||
drop procedure sp3;
|
||||
drop procedure sp4;
|
||||
drop procedure sp5;
|
||||
drop procedure sp6;
|
||||
drop procedure sp7;
|
||||
drop view v1,v2;
|
||||
drop table t1;
|
||||
#
|
||||
# End of 10.2 tests
|
||||
#
|
||||
#
|
||||
|
@ -2555,6 +2555,153 @@ INSERT INTO t1 VALUES (1),(2),(3);
|
||||
SELECT sum(i) over () IN ( SELECT 1 FROM t1 a) FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-25565: 2-nd call of SP with SELECT from view / derived table / CTE
|
||||
--echo # returning the result of calculation of 2 window
|
||||
--echo # functions that use the same window specification
|
||||
--echo #
|
||||
|
||||
create table t1 (a int);
|
||||
insert into t1 values (3), (7), (1), (7), (1), (1), (3), (1), (5);
|
||||
|
||||
create view v2 as select a from t1 group by a;
|
||||
create view v1 as select * from v2;
|
||||
|
||||
let $q1=
|
||||
select v1.a,
|
||||
sum(v1.a) over (partition by v1.a order by v1.a) as k,
|
||||
avg(v1.a) over (partition by v1.a order by v1.a) as m
|
||||
from v1;
|
||||
|
||||
eval create procedure sp1() $q1;
|
||||
call sp1();
|
||||
call sp1();
|
||||
|
||||
eval prepare stmt from "$q1";
|
||||
execute stmt;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
|
||||
let $q2=
|
||||
select * from
|
||||
( select dt1.a,
|
||||
sum(dt1.a) over (partition by dt1.a order by dt1.a) as k,
|
||||
avg(dt1.a) over (partition by dt1.a order by dt1.a) as m
|
||||
from (select * from v2) as dt1
|
||||
) as dt;
|
||||
|
||||
eval create procedure sp2() $q2;
|
||||
call sp2();
|
||||
call sp2();
|
||||
|
||||
eval prepare stmt from "$q2";
|
||||
execute stmt;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
|
||||
let $q3=
|
||||
select * from
|
||||
( select dt1.a,
|
||||
sum(dt1.a) over (partition by dt1.a order by dt1.a) as k,
|
||||
avg(dt1.a) over (partition by dt1.a order by dt1.a) as m
|
||||
from ( select * from (select * from t1 group by a) as dt2 ) as dt1
|
||||
) as dt;
|
||||
|
||||
eval create procedure sp3() $q3;
|
||||
call sp3();
|
||||
call sp3();
|
||||
|
||||
eval prepare stmt from "$q3";
|
||||
execute stmt;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
|
||||
let $q4=
|
||||
with cte1 as (select * from (select * from t1 group by a) as dt2),
|
||||
cte as
|
||||
( select cte1.a,
|
||||
sum(cte1.a) over (partition by cte1.a order by cte1.a) as k,
|
||||
avg(cte1.a) over (partition by cte1.a order by cte1.a) as m
|
||||
from cte1 )
|
||||
select * from cte;
|
||||
|
||||
eval create procedure sp4() $q4;
|
||||
call sp4();
|
||||
call sp4();
|
||||
|
||||
eval prepare stmt from "$q4";
|
||||
execute stmt;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
|
||||
let $q5=
|
||||
with cte1 as (select * from v2),
|
||||
cte as
|
||||
( select cte1.a,
|
||||
sum(cte1.a) over (partition by cte1.a order by cte1.a) as k,
|
||||
avg(cte1.a) over (partition by cte1.a order by cte1.a) as m
|
||||
from cte1 )
|
||||
select * from cte;
|
||||
|
||||
eval create procedure sp5() $q5;
|
||||
call sp5();
|
||||
call sp5();
|
||||
|
||||
eval prepare stmt from "$q5";
|
||||
execute stmt;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
|
||||
let $q6=
|
||||
with
|
||||
cte1 as (with cte2 as (select * from t1 group by a) select * from cte2),
|
||||
cte as
|
||||
( select cte1.a,
|
||||
sum(cte1.a) over (partition by cte1.a order by cte1.a) as k,
|
||||
avg(cte1.a) over (partition by cte1.a order by cte1.a) as m
|
||||
from cte1 )
|
||||
select * from cte;
|
||||
|
||||
eval create procedure sp6() $q6;
|
||||
call sp6();
|
||||
call sp6();
|
||||
|
||||
eval prepare stmt from "$q6";
|
||||
execute stmt;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
|
||||
let $q7=
|
||||
with
|
||||
cte2 as (select * from v1),
|
||||
cte1 as (select * from cte2),
|
||||
cte as
|
||||
( select cte1.a,
|
||||
sum(cte1.a) over (partition by cte1.a order by cte1.a) as k,
|
||||
avg(cte1.a) over (partition by cte1.a order by cte1.a) as m
|
||||
from cte1 )
|
||||
select * from cte;
|
||||
|
||||
eval create procedure sp7() $q7;
|
||||
call sp7();
|
||||
call sp7();
|
||||
|
||||
eval prepare stmt from "$q7";
|
||||
execute stmt;
|
||||
execute stmt;
|
||||
deallocate prepare stmt;
|
||||
|
||||
|
||||
drop procedure sp1;
|
||||
drop procedure sp2;
|
||||
drop procedure sp3;
|
||||
drop procedure sp4;
|
||||
drop procedure sp5;
|
||||
drop procedure sp6;
|
||||
drop procedure sp7;
|
||||
drop view v1,v2;
|
||||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.2 tests
|
||||
--echo #
|
||||
|
@ -2719,7 +2719,9 @@ sub mysql_server_start($) {
|
||||
|
||||
if (!$opt_embedded_server)
|
||||
{
|
||||
mysqld_start($mysqld,$extra_opts);
|
||||
mysqld_start($mysqld, $extra_opts) or
|
||||
mtr_error("Failed to start mysqld ".$mysqld->name()." with command "
|
||||
. $ENV{MYSQLD_LAST_CMD});
|
||||
|
||||
# Save this test case information, so next can examine it
|
||||
$mysqld->{'started_tinfo'}= $tinfo;
|
||||
@ -2742,10 +2744,10 @@ sub mysql_server_start($) {
|
||||
|
||||
sub mysql_server_wait {
|
||||
my ($mysqld, $tinfo) = @_;
|
||||
my $expect_file= "$opt_vardir/tmp/".$mysqld->name().".expect";
|
||||
|
||||
if (!sleep_until_file_created($mysqld->value('pid-file'),
|
||||
$opt_start_timeout,
|
||||
$mysqld->{'proc'},
|
||||
if (!sleep_until_file_created($mysqld->value('pid-file'), $expect_file,
|
||||
$opt_start_timeout, $mysqld->{'proc'},
|
||||
$warn_seconds))
|
||||
{
|
||||
$tinfo->{comment}= "Failed to start ".$mysqld->name() . "\n";
|
||||
@ -4059,9 +4061,12 @@ sub run_testcase ($$) {
|
||||
# ----------------------------------------------------
|
||||
# Check if it was an expected crash
|
||||
# ----------------------------------------------------
|
||||
my $check_crash = check_expected_crash_and_restart($wait_for_proc);
|
||||
my @mysqld = grep($wait_for_proc eq $_->{proc}, mysqlds());
|
||||
goto SRVDIED unless @mysqld;
|
||||
my $check_crash = check_expected_crash_and_restart($mysqld[0]);
|
||||
if ($check_crash == 0) # unexpected exit/crash of $wait_for_proc
|
||||
{
|
||||
$proc= $mysqld[0]->{proc};
|
||||
goto SRVDIED;
|
||||
}
|
||||
elsif ($check_crash == 1) # $wait_for_proc was started again by check_expected_crash_and_restart()
|
||||
@ -4629,61 +4634,52 @@ sub check_warnings_post_shutdown {
|
||||
}
|
||||
|
||||
#
|
||||
# Loop through our list of processes and look for and entry
|
||||
# with the provided pid, if found check for the file indicating
|
||||
# expected crash and restart it.
|
||||
# Check for the file indicating expected crash and restart it.
|
||||
#
|
||||
sub check_expected_crash_and_restart {
|
||||
my ($proc)= @_;
|
||||
my $mysqld = shift;
|
||||
|
||||
foreach my $mysqld ( mysqlds() )
|
||||
# Check if crash expected by looking at the .expect file
|
||||
# in var/tmp
|
||||
my $expect_file= "$opt_vardir/tmp/".$mysqld->name().".expect";
|
||||
if ( -f $expect_file )
|
||||
{
|
||||
next unless ( $mysqld->{proc} and $mysqld->{proc} eq $proc );
|
||||
mtr_verbose("Crash was expected, file '$expect_file' exists");
|
||||
|
||||
# Check if crash expected by looking at the .expect file
|
||||
# in var/tmp
|
||||
my $expect_file= "$opt_vardir/tmp/".$mysqld->name().".expect";
|
||||
if ( -f $expect_file )
|
||||
for (my $waits = 0; $waits < 50; mtr_milli_sleep(100), $waits++)
|
||||
{
|
||||
mtr_verbose("Crash was expected, file '$expect_file' exists");
|
||||
|
||||
for (my $waits = 0; $waits < 50; mtr_milli_sleep(100), $waits++)
|
||||
# Race condition seen on Windows: try again until file not empty
|
||||
next if -z $expect_file;
|
||||
# If last line in expect file starts with "wait"
|
||||
# sleep a little and try again, thus allowing the
|
||||
# test script to control when the server should start
|
||||
# up again. Keep trying for up to 5s at a time.
|
||||
my $last_line= mtr_lastlinesfromfile($expect_file, 1);
|
||||
if ($last_line =~ /^wait/ )
|
||||
{
|
||||
# Race condition seen on Windows: try again until file not empty
|
||||
next if -z $expect_file;
|
||||
# If last line in expect file starts with "wait"
|
||||
# sleep a little and try again, thus allowing the
|
||||
# test script to control when the server should start
|
||||
# up again. Keep trying for up to 5s at a time.
|
||||
my $last_line= mtr_lastlinesfromfile($expect_file, 1);
|
||||
if ($last_line =~ /^wait/ )
|
||||
{
|
||||
mtr_verbose("Test says wait before restart") if $waits == 0;
|
||||
next;
|
||||
}
|
||||
|
||||
# Ignore any partial or unknown command
|
||||
next unless $last_line =~ /^restart/;
|
||||
# If last line begins "restart:", the rest of the line is read as
|
||||
# extra command line options to add to the restarted mysqld.
|
||||
# Anything other than 'wait' or 'restart:' (with a colon) will
|
||||
# result in a restart with original mysqld options.
|
||||
if ($last_line =~ /restart:(.+)/) {
|
||||
my @rest_opt= split(' ', $1);
|
||||
$mysqld->{'restart_opts'}= \@rest_opt;
|
||||
} else {
|
||||
delete $mysqld->{'restart_opts'};
|
||||
}
|
||||
unlink($expect_file);
|
||||
|
||||
# Start server with same settings as last time
|
||||
mysqld_start($mysqld, $mysqld->{'started_opts'});
|
||||
|
||||
return 1;
|
||||
mtr_verbose("Test says wait before restart") if $waits == 0;
|
||||
next;
|
||||
}
|
||||
# Loop ran through: we should keep waiting after a re-check
|
||||
return 2;
|
||||
|
||||
# Ignore any partial or unknown command
|
||||
next unless $last_line =~ /^restart/;
|
||||
# If last line begins "restart:", the rest of the line is read as
|
||||
# extra command line options to add to the restarted mysqld.
|
||||
# Anything other than 'wait' or 'restart:' (with a colon) will
|
||||
# result in a restart with original mysqld options.
|
||||
if ($last_line =~ /restart:(.+)/) {
|
||||
my @rest_opt= split(' ', $1);
|
||||
$mysqld->{'restart_opts'}= \@rest_opt;
|
||||
} else {
|
||||
delete $mysqld->{'restart_opts'};
|
||||
}
|
||||
unlink($expect_file);
|
||||
|
||||
# Start server with same settings as last time
|
||||
return mysqld_start($mysqld, $mysqld->{'started_opts'});
|
||||
}
|
||||
# Loop ran through: we should keep waiting after a re-check
|
||||
return 2;
|
||||
}
|
||||
|
||||
# Not an expected crash
|
||||
@ -5040,6 +5036,7 @@ sub mysqld_start ($$) {
|
||||
|
||||
if ( defined $exe )
|
||||
{
|
||||
mtr_tofile($output, "\$ $exe @$args\n");
|
||||
pre_write_errorlog($output);
|
||||
$mysqld->{'proc'}= My::SafeProcess->new
|
||||
(
|
||||
@ -5058,17 +5055,11 @@ sub mysqld_start ($$) {
|
||||
mtr_verbose("Started $mysqld->{proc}");
|
||||
}
|
||||
|
||||
if (!sleep_until_file_created($mysqld->value('pid-file'),
|
||||
$opt_start_timeout, $mysqld->{'proc'}, $warn_seconds))
|
||||
{
|
||||
my $mname= $mysqld->name();
|
||||
mtr_error("Failed to start mysqld $mname with command $exe");
|
||||
}
|
||||
|
||||
# Remember options used when starting
|
||||
$mysqld->{'started_opts'}= $extra_opts;
|
||||
|
||||
return;
|
||||
my $expect_file= "$opt_vardir/tmp/".$mysqld->name().".expect";
|
||||
return sleep_until_file_created($mysqld->value('pid-file'), $expect_file,
|
||||
$opt_start_timeout, $mysqld->{'proc'}, $warn_seconds);
|
||||
}
|
||||
|
||||
|
||||
|
@ -406,4 +406,22 @@ SHOW SESSION VARIABLES LIKE "unique_checks";
|
||||
DROP TABLE t1;
|
||||
|
||||
disconnect fresh;
|
||||
connection default;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-25595 DROP part of failed CREATE OR REPLACE is not written into binary log
|
||||
--echo #
|
||||
reset master;
|
||||
--error ER_DUP_FIELDNAME
|
||||
create table t as select 1 as b, 2 as b;
|
||||
create table t (old_table_field int);
|
||||
--error ER_DUP_FIELDNAME
|
||||
create or replace table t as select 1 as b, 2 as b;
|
||||
--error ER_DUP_FIELDNAME
|
||||
create or replace temporary table t as select 1 as b, 2 as b;
|
||||
create table t (new_table_field int);
|
||||
|
||||
--source include/show_binlog_events.inc
|
||||
|
||||
# cleanup
|
||||
drop table t;
|
||||
|
@ -1073,3 +1073,26 @@ Variable_name Value
|
||||
unique_checks OFF
|
||||
DROP TABLE t1;
|
||||
disconnect fresh;
|
||||
connection default;
|
||||
#
|
||||
# MDEV-25595 DROP part of failed CREATE OR REPLACE is not written into binary log
|
||||
#
|
||||
reset master;
|
||||
create table t as select 1 as b, 2 as b;
|
||||
ERROR 42S21: Duplicate column name 'b'
|
||||
create table t (old_table_field int);
|
||||
create or replace table t as select 1 as b, 2 as b;
|
||||
ERROR 42S21: Duplicate column name 'b'
|
||||
create or replace temporary table t as select 1 as b, 2 as b;
|
||||
ERROR 42S21: Duplicate column name 'b'
|
||||
create table t (new_table_field int);
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; create table t (old_table_field int)
|
||||
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS `test`.`t`/* Generated to handle failed CREATE OR REPLACE */
|
||||
master-bin.000001 # Query # # ROLLBACK
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; create table t (new_table_field int)
|
||||
drop table t;
|
||||
|
@ -669,3 +669,27 @@ Variable_name Value
|
||||
unique_checks OFF
|
||||
DROP TABLE t1;
|
||||
disconnect fresh;
|
||||
connection default;
|
||||
#
|
||||
# MDEV-25595 DROP part of failed CREATE OR REPLACE is not written into binary log
|
||||
#
|
||||
reset master;
|
||||
create table t as select 1 as b, 2 as b;
|
||||
ERROR 42S21: Duplicate column name 'b'
|
||||
create table t (old_table_field int);
|
||||
create or replace table t as select 1 as b, 2 as b;
|
||||
ERROR 42S21: Duplicate column name 'b'
|
||||
create or replace temporary table t as select 1 as b, 2 as b;
|
||||
ERROR 42S21: Duplicate column name 'b'
|
||||
create table t (new_table_field int);
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; create table t (old_table_field int)
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS `test`.`t`/* Generated to handle failed CREATE OR REPLACE */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`t`/* Generated to handle failed CREATE OR REPLACE */
|
||||
master-bin.000001 # Gtid # # GTID #-#-#
|
||||
master-bin.000001 # Query # # use `test`; create table t (new_table_field int)
|
||||
drop table t;
|
||||
|
@ -18,6 +18,9 @@
|
||||
# - with annotated events, default checksums and minimal binlog row image
|
||||
#
|
||||
|
||||
# The test can take very long time with valgrind
|
||||
--source include/not_valgrind.inc
|
||||
|
||||
--source include/have_partition.inc
|
||||
--source encryption_algorithms.inc
|
||||
--source include/have_innodb.inc
|
||||
|
@ -3918,6 +3918,293 @@ sum(i) over () IN ( SELECT 1 FROM t1 a)
|
||||
0
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-25565: 2-nd call of SP with SELECT from view / derived table / CTE
|
||||
# returning the result of calculation of 2 window
|
||||
# functions that use the same window specification
|
||||
#
|
||||
create table t1 (a int);
|
||||
insert into t1 values (3), (7), (1), (7), (1), (1), (3), (1), (5);
|
||||
create view v2 as select a from t1 group by a;
|
||||
create view v1 as select * from v2;
|
||||
create procedure sp1() select v1.a,
|
||||
sum(v1.a) over (partition by v1.a order by v1.a) as k,
|
||||
avg(v1.a) over (partition by v1.a order by v1.a) as m
|
||||
from v1;
|
||||
call sp1();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
call sp1();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
prepare stmt from "select v1.a,
|
||||
sum(v1.a) over (partition by v1.a order by v1.a) as k,
|
||||
avg(v1.a) over (partition by v1.a order by v1.a) as m
|
||||
from v1";
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
deallocate prepare stmt;
|
||||
create procedure sp2() select * from
|
||||
( select dt1.a,
|
||||
sum(dt1.a) over (partition by dt1.a order by dt1.a) as k,
|
||||
avg(dt1.a) over (partition by dt1.a order by dt1.a) as m
|
||||
from (select * from v2) as dt1
|
||||
) as dt;
|
||||
call sp2();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
call sp2();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
prepare stmt from "select * from
|
||||
( select dt1.a,
|
||||
sum(dt1.a) over (partition by dt1.a order by dt1.a) as k,
|
||||
avg(dt1.a) over (partition by dt1.a order by dt1.a) as m
|
||||
from (select * from v2) as dt1
|
||||
) as dt";
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
deallocate prepare stmt;
|
||||
create procedure sp3() select * from
|
||||
( select dt1.a,
|
||||
sum(dt1.a) over (partition by dt1.a order by dt1.a) as k,
|
||||
avg(dt1.a) over (partition by dt1.a order by dt1.a) as m
|
||||
from ( select * from (select * from t1 group by a) as dt2 ) as dt1
|
||||
) as dt;
|
||||
call sp3();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
call sp3();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
prepare stmt from "select * from
|
||||
( select dt1.a,
|
||||
sum(dt1.a) over (partition by dt1.a order by dt1.a) as k,
|
||||
avg(dt1.a) over (partition by dt1.a order by dt1.a) as m
|
||||
from ( select * from (select * from t1 group by a) as dt2 ) as dt1
|
||||
) as dt";
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
deallocate prepare stmt;
|
||||
create procedure sp4() with cte1 as (select * from (select * from t1 group by a) as dt2),
|
||||
cte as
|
||||
( select cte1.a,
|
||||
sum(cte1.a) over (partition by cte1.a order by cte1.a) as k,
|
||||
avg(cte1.a) over (partition by cte1.a order by cte1.a) as m
|
||||
from cte1 )
|
||||
select * from cte;
|
||||
call sp4();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
call sp4();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
prepare stmt from "with cte1 as (select * from (select * from t1 group by a) as dt2),
|
||||
cte as
|
||||
( select cte1.a,
|
||||
sum(cte1.a) over (partition by cte1.a order by cte1.a) as k,
|
||||
avg(cte1.a) over (partition by cte1.a order by cte1.a) as m
|
||||
from cte1 )
|
||||
select * from cte";
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
deallocate prepare stmt;
|
||||
create procedure sp5() with cte1 as (select * from v2),
|
||||
cte as
|
||||
( select cte1.a,
|
||||
sum(cte1.a) over (partition by cte1.a order by cte1.a) as k,
|
||||
avg(cte1.a) over (partition by cte1.a order by cte1.a) as m
|
||||
from cte1 )
|
||||
select * from cte;
|
||||
call sp5();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
call sp5();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
prepare stmt from "with cte1 as (select * from v2),
|
||||
cte as
|
||||
( select cte1.a,
|
||||
sum(cte1.a) over (partition by cte1.a order by cte1.a) as k,
|
||||
avg(cte1.a) over (partition by cte1.a order by cte1.a) as m
|
||||
from cte1 )
|
||||
select * from cte";
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
deallocate prepare stmt;
|
||||
create procedure sp6() with
|
||||
cte1 as (with cte2 as (select * from t1 group by a) select * from cte2),
|
||||
cte as
|
||||
( select cte1.a,
|
||||
sum(cte1.a) over (partition by cte1.a order by cte1.a) as k,
|
||||
avg(cte1.a) over (partition by cte1.a order by cte1.a) as m
|
||||
from cte1 )
|
||||
select * from cte;
|
||||
call sp6();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
call sp6();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
prepare stmt from "with
|
||||
cte1 as (with cte2 as (select * from t1 group by a) select * from cte2),
|
||||
cte as
|
||||
( select cte1.a,
|
||||
sum(cte1.a) over (partition by cte1.a order by cte1.a) as k,
|
||||
avg(cte1.a) over (partition by cte1.a order by cte1.a) as m
|
||||
from cte1 )
|
||||
select * from cte";
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
deallocate prepare stmt;
|
||||
create procedure sp7() with
|
||||
cte2 as (select * from v1),
|
||||
cte1 as (select * from cte2),
|
||||
cte as
|
||||
( select cte1.a,
|
||||
sum(cte1.a) over (partition by cte1.a order by cte1.a) as k,
|
||||
avg(cte1.a) over (partition by cte1.a order by cte1.a) as m
|
||||
from cte1 )
|
||||
select * from cte;
|
||||
call sp7();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
call sp7();
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
prepare stmt from "with
|
||||
cte2 as (select * from v1),
|
||||
cte1 as (select * from cte2),
|
||||
cte as
|
||||
( select cte1.a,
|
||||
sum(cte1.a) over (partition by cte1.a order by cte1.a) as k,
|
||||
avg(cte1.a) over (partition by cte1.a order by cte1.a) as m
|
||||
from cte1 )
|
||||
select * from cte";
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
execute stmt;
|
||||
a k m
|
||||
1 1 1.0000
|
||||
3 3 3.0000
|
||||
5 5 5.0000
|
||||
7 7 7.0000
|
||||
deallocate prepare stmt;
|
||||
drop procedure sp1;
|
||||
drop procedure sp2;
|
||||
drop procedure sp3;
|
||||
drop procedure sp4;
|
||||
drop procedure sp5;
|
||||
drop procedure sp6;
|
||||
drop procedure sp7;
|
||||
drop view v1,v2;
|
||||
drop table t1;
|
||||
#
|
||||
# End of 10.2 tests
|
||||
#
|
||||
#
|
||||
|
@ -1,6 +1,9 @@
|
||||
-- source include/have_innodb.inc
|
||||
-- source include/have_file_key_management_plugin.inc
|
||||
|
||||
# The test can take very long time with valgrind
|
||||
--source include/not_valgrind.inc
|
||||
|
||||
create table innodb_normal(c1 bigint not null, b char(200)) engine=innodb;
|
||||
show warnings;
|
||||
create table innodb_compact(c1 bigint not null, b char(200)) engine=innodb row_format=compact encrypted=yes encryption_key_id=1;
|
||||
|
@ -2,14 +2,14 @@ connection node_2;
|
||||
connection node_1;
|
||||
FLUSH TABLES WITH READ LOCK;
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
ERROR 08S01: Aborting TOI: Global Read-Lock (FTWRL) in place.
|
||||
ERROR 08S01: Aborting TOI: Replication paused on node for FTWRL/BACKUP STAGE.
|
||||
SET wsrep_OSU_method=RSU;
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
ERROR 08S01: Aborting TOI: Global Read-Lock (FTWRL) in place.
|
||||
ERROR 08S01: Aborting TOI: Replication paused on node for FTWRL/BACKUP STAGE.
|
||||
SET wsrep_OSU_method=TOI;
|
||||
connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
ERROR 08S01: Aborting TOI: Global Read-Lock (FTWRL) in place.
|
||||
ERROR 08S01: Aborting TOI: Replication paused on node for FTWRL/BACKUP STAGE.
|
||||
connection node_1;
|
||||
UNLOCK TABLES;
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
|
7
mysql-test/suite/galera/r/MDEV-22421.result
Normal file
7
mysql-test/suite/galera/r/MDEV-22421.result
Normal file
@ -0,0 +1,7 @@
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
SET @@local.sql_mode='no_field_options';
|
||||
CREATE TABLE t1 (f1 INT, ROW_START BIGINT UNSIGNED AS ROW START INVISIBLE, ROW_END BIGINT UNSIGNED AS ROW END INVISIBLE, PERIOD FOR SYSTEM_TIME(ROW_START, ROW_END)) WITH SYSTEM VERSIONING ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
UPDATE t1 SET f1 = 1 WHERE f1 = 1;
|
||||
DROP TABLE t1;
|
9
mysql-test/suite/galera/r/MDEV-25740.result
Normal file
9
mysql-test/suite/galera/r/MDEV-25740.result
Normal file
@ -0,0 +1,9 @@
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
SET AUTOCOMMIT = OFF;
|
||||
SET completion_type = CHAIN;
|
||||
CREATE TABLE t1(f1 INT) ENGINE=InnoDB;
|
||||
BEGIN;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
ROLLBACK;
|
||||
DROP TABLE t1;
|
78
mysql-test/suite/galera/r/galera_backup_stage.result
Normal file
78
mysql-test/suite/galera/r/galera_backup_stage.result
Normal file
@ -0,0 +1,78 @@
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
connection node_1;
|
||||
CREATE TABLE t1 (f1 varchar(10)) ENGINE=InnoDB;
|
||||
BACKUP STAGE START;
|
||||
BACKUP STAGE FLUSH;
|
||||
BACKUP STAGE END;
|
||||
BACKUP STAGE START;
|
||||
BACKUP STAGE FLUSH;
|
||||
connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||
connection node_1a;
|
||||
SET SESSION wsrep_sync_wait=0;
|
||||
SET SESSION wsrep_retry_autocommit=0;
|
||||
INSERT INTO t1 (f1) values ("node1_1");
|
||||
ALTER TABLE t1 ADD COLUMN (f2 int(10));
|
||||
connection node_2;
|
||||
INSERT INTO t1 (f1) values ("node2_1");
|
||||
ALTER TABLE t1 ADD COLUMN (f3 int(10));
|
||||
connection node_1;
|
||||
BACKUP STAGE BLOCK_DDL;
|
||||
connect node_1c, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||
connection node_1c;
|
||||
SET SESSION wsrep_sync_wait=0;
|
||||
connection node_2;
|
||||
INSERT INTO t1 (f1) values("node2_2");
|
||||
ALTER TABLE t1 ADD COLUMN (f5 int(10));
|
||||
connection node_1a;
|
||||
ALTER TABLE t1 ADD COLUMN (f4 int(10));
|
||||
ERROR 08S01: Aborting TOI: Replication paused on node for FTWRL/BACKUP STAGE.
|
||||
INSERT INTO t1 (f1) values("node1a");;
|
||||
connection node_1c;
|
||||
connection node_1;
|
||||
BACKUP STAGE BLOCK_COMMIT;
|
||||
connection node_1c;
|
||||
SELECT variable_value="Donor/Desynced" FROM information_schema.global_status WHERE variable_name="wsrep_local_state_comment";
|
||||
variable_value="Donor/Desynced"
|
||||
1
|
||||
connection node_2;
|
||||
INSERT INTO t1 (f1) values("node2_3");
|
||||
ALTER TABLE t1 ADD COLUMN (f6 int(10));
|
||||
connect node_1b, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||
connection node_1b;
|
||||
SET SESSION wsrep_sync_wait=0;
|
||||
SET SESSION wsrep_retry_autocommit=0;
|
||||
ALTER TABLE t1 ADD COLUMN (f4 int(10));
|
||||
ERROR 08S01: Aborting TOI: Replication paused on node for FTWRL/BACKUP STAGE.
|
||||
INSERT INTO t1 (f1) values("node1b");;
|
||||
connection node_1c;
|
||||
SELECT COUNT(*)=2 FROM t1;
|
||||
COUNT(*)=2
|
||||
1
|
||||
SELECT COUNT(*)=3 FROM information_schema.columns WHERE table_name = 't1';
|
||||
COUNT(*)=3
|
||||
1
|
||||
connection node_1;
|
||||
BACKUP STAGE END;
|
||||
connection node_1a;
|
||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||
connection node_1b;
|
||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||
connection node_1;
|
||||
SELECT COUNT(*)=4 FROM t1;
|
||||
COUNT(*)=4
|
||||
1
|
||||
SELECT COUNT(*)=5 FROM information_schema.columns WHERE table_name = 't1';
|
||||
COUNT(*)=5
|
||||
1
|
||||
connection node_2;
|
||||
SELECT COUNT(*)=4 FROM t1;
|
||||
COUNT(*)=4
|
||||
1
|
||||
SELECT COUNT(*)=5 FROM information_schema.columns WHERE table_name = 't1';
|
||||
COUNT(*)=5
|
||||
1
|
||||
connection node_1;
|
||||
DROP TABLE t1;
|
||||
call mtr.add_suppression("WSREP: ALTER TABLE isolation failure");
|
||||
call mtr.add_suppression("greater than drain seqno");
|
54
mysql-test/suite/galera/r/galera_fk_lock_wait.result
Normal file
54
mysql-test/suite/galera/r/galera_fk_lock_wait.result
Normal file
@ -0,0 +1,54 @@
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
CREATE TABLE parent(parent_id int not null AUTO_INCREMENT PRIMARY KEY,
|
||||
parent_name varchar(80)) ENGINE=InnoDB;
|
||||
CREATE TABLE child(child_id int not null AUTO_INCREMENT PRIMARY KEY,
|
||||
child_name varchar(80),
|
||||
child_parent_id int not null,
|
||||
CONSTRAINT `fk_child_parent`
|
||||
FOREIGN KEY (child_parent_id) REFERENCES parent (parent_id)
|
||||
ON DELETE CASCADE
|
||||
ON UPDATE CASCADE) ENGINE=InnoDB;
|
||||
INSERT INTO parent VALUES (1, 'first'),(2,'second'),(3,'foo'),(4,'tmp');
|
||||
INSERT INTO child VALUES (NULL,'first_child',1);
|
||||
INSERT INTO child VALUES (NULL,'second_child',1);
|
||||
INSERT INTO child VALUES (NULL,'first_child2',2);
|
||||
INSERT INTO child VALUES (NULL,'first_child3',2);
|
||||
INSERT INTO child VALUES (NULL,'first_child4',3);
|
||||
BEGIN;
|
||||
UPDATE parent SET parent_name = 'bar' WHERE parent_id = 2;
|
||||
connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||
SET SESSION innodb_lock_wait_timeout=2;
|
||||
UPDATE child SET child_parent_id = 5 where child_parent_id = 2;
|
||||
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
||||
connection node_1;
|
||||
COMMIT;
|
||||
SELECT * FROM parent;
|
||||
parent_id parent_name
|
||||
1 first
|
||||
2 bar
|
||||
3 foo
|
||||
4 tmp
|
||||
SELECT * FROM child;
|
||||
child_id child_name child_parent_id
|
||||
1 first_child 1
|
||||
3 second_child 1
|
||||
5 first_child2 2
|
||||
7 first_child3 2
|
||||
9 first_child4 3
|
||||
connection node_2;
|
||||
SELECT * FROM parent;
|
||||
parent_id parent_name
|
||||
1 first
|
||||
2 bar
|
||||
3 foo
|
||||
4 tmp
|
||||
SELECT * FROM child;
|
||||
child_id child_name child_parent_id
|
||||
1 first_child 1
|
||||
3 second_child 1
|
||||
5 first_child2 2
|
||||
7 first_child3 2
|
||||
9 first_child4 3
|
||||
DROP TABLE child, parent;
|
||||
disconnect node_1a;
|
12
mysql-test/suite/galera/t/MDEV-22421.test
Normal file
12
mysql-test/suite/galera/t/MDEV-22421.test
Normal file
@ -0,0 +1,12 @@
|
||||
#
|
||||
# Tables with system versioning should not append keys to wsrep.
|
||||
#
|
||||
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
SET @@local.sql_mode='no_field_options';
|
||||
CREATE TABLE t1 (f1 INT, ROW_START BIGINT UNSIGNED AS ROW START INVISIBLE, ROW_END BIGINT UNSIGNED AS ROW END INVISIBLE, PERIOD FOR SYSTEM_TIME(ROW_START, ROW_END)) WITH SYSTEM VERSIONING ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
UPDATE t1 SET f1 = 1 WHERE f1 = 1;
|
||||
DROP TABLE t1;
|
14
mysql-test/suite/galera/t/MDEV-25740.test
Normal file
14
mysql-test/suite/galera/t/MDEV-25740.test
Normal file
@ -0,0 +1,14 @@
|
||||
#
|
||||
# When `completion_type = CHAIN` is used, transaction started should not have previous writeset.
|
||||
#
|
||||
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
SET AUTOCOMMIT = OFF;
|
||||
SET completion_type = CHAIN;
|
||||
CREATE TABLE t1(f1 INT) ENGINE=InnoDB;
|
||||
BEGIN;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
ROLLBACK;
|
||||
DROP TABLE t1;
|
120
mysql-test/suite/galera/t/galera_backup_stage.test
Normal file
120
mysql-test/suite/galera/t/galera_backup_stage.test
Normal file
@ -0,0 +1,120 @@
|
||||
#
|
||||
# Check that BACKUP STAGE BLOCK_DDL desyncs and pauses the node until BACKUP STAGE END:
|
||||
# - Local DDLs will fail immediately
|
||||
# - Local DMLs will block until resync
|
||||
# - Remote txns will be applied after resync (STAGE END).
|
||||
#
|
||||
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_metadata_lock_info.inc
|
||||
|
||||
--connection node_1
|
||||
CREATE TABLE t1 (f1 varchar(10)) ENGINE=InnoDB;
|
||||
|
||||
# First, check that BACKUP STAGE END skipping desyncing stages is fine
|
||||
BACKUP STAGE START;
|
||||
BACKUP STAGE FLUSH;
|
||||
BACKUP STAGE END;
|
||||
|
||||
BACKUP STAGE START;
|
||||
BACKUP STAGE FLUSH;
|
||||
|
||||
--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
|
||||
--connection node_1a
|
||||
SET SESSION wsrep_sync_wait=0;
|
||||
SET SESSION wsrep_retry_autocommit=0;
|
||||
INSERT INTO t1 (f1) values ("node1_1");
|
||||
ALTER TABLE t1 ADD COLUMN (f2 int(10));
|
||||
|
||||
--connection node_2
|
||||
INSERT INTO t1 (f1) values ("node2_1");
|
||||
ALTER TABLE t1 ADD COLUMN (f3 int(10));
|
||||
|
||||
# BLOCK_DDL desyncs and pauses the node
|
||||
--connection node_1
|
||||
BACKUP STAGE BLOCK_DDL;
|
||||
|
||||
--connect node_1c, 127.0.0.1, root, , test, $NODE_MYPORT_1
|
||||
--connection node_1c
|
||||
SET SESSION wsrep_sync_wait=0;
|
||||
--let $wait_condition = SELECT variable_value="Donor/Desynced" FROM information_schema.global_status WHERE variable_name="wsrep_local_state_comment"
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--connection node_2
|
||||
INSERT INTO t1 (f1) values("node2_2");
|
||||
ALTER TABLE t1 ADD COLUMN (f5 int(10));
|
||||
|
||||
--connection node_1a
|
||||
--error ER_UNKNOWN_COM_ERROR
|
||||
ALTER TABLE t1 ADD COLUMN (f4 int(10));
|
||||
--let $insert_id = `SELECT CONNECTION_ID()`
|
||||
--send INSERT INTO t1 (f1) values("node1a");
|
||||
|
||||
# the insert will block during commit inside the provider, in certify. We can't
|
||||
# check for sure it is blocked there, so we wait for the thread to at least
|
||||
# reach commit stage. In the unlikely case the interleaving is different, the
|
||||
# result of the test should not change.
|
||||
--connection node_1c
|
||||
--let $wait_condition = SELECT COUNT(*)=1 FROM information_schema.processlist WHERE State='Commit' AND ID=$insert_id
|
||||
--source include/wait_condition.inc
|
||||
--let $wait_condition = SELECT COUNT(*)=1 FROM information_schema.metadata_lock_info WHERE TABLE_NAME='t1' AND THREAD_ID=$insert_id
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--connection node_1
|
||||
BACKUP STAGE BLOCK_COMMIT;
|
||||
|
||||
# node only resumes/resyncs upon STAGE END
|
||||
--connection node_1c
|
||||
SELECT variable_value="Donor/Desynced" FROM information_schema.global_status WHERE variable_name="wsrep_local_state_comment";
|
||||
|
||||
--connection node_2
|
||||
INSERT INTO t1 (f1) values("node2_3");
|
||||
ALTER TABLE t1 ADD COLUMN (f6 int(10));
|
||||
|
||||
--connect node_1b, 127.0.0.1, root, , test, $NODE_MYPORT_1
|
||||
--connection node_1b
|
||||
SET SESSION wsrep_sync_wait=0;
|
||||
SET SESSION wsrep_retry_autocommit=0;
|
||||
--error ER_UNKNOWN_COM_ERROR
|
||||
ALTER TABLE t1 ADD COLUMN (f4 int(10));
|
||||
--let $insert_id = `SELECT CONNECTION_ID()`
|
||||
--send INSERT INTO t1 (f1) values("node1b");
|
||||
|
||||
# wait for insert to get blocked
|
||||
--connection node_1c
|
||||
--let $wait_condition = SELECT COUNT(*)=1 FROM information_schema.processlist WHERE State='Commit' AND ID=$insert_id
|
||||
--source include/wait_condition.inc
|
||||
--let $wait_condition = SELECT COUNT(*)=1 FROM information_schema.metadata_lock_info WHERE TABLE_NAME='t1' AND THREAD_ID=$insert_id
|
||||
--source include/wait_condition.inc
|
||||
--let $wait_condition = SELECT COUNT(*)=2 FROM information_schema.processlist WHERE Info like 'INSERT INTO t1 (f1) values("node1%")' AND State = 'Commit'
|
||||
--source include/wait_condition.inc
|
||||
|
||||
# nothing after BLOCK_DDL is applied
|
||||
SELECT COUNT(*)=2 FROM t1;
|
||||
SELECT COUNT(*)=3 FROM information_schema.columns WHERE table_name = 't1';
|
||||
|
||||
# STAGE END resumes and resyncs the node
|
||||
--connection node_1
|
||||
BACKUP STAGE END;
|
||||
|
||||
# Upon resume, blocked inserts will continue but conflict with the applying alters
|
||||
--connection node_1a
|
||||
--error ER_LOCK_DEADLOCK
|
||||
--reap
|
||||
--connection node_1b
|
||||
--error ER_LOCK_DEADLOCK
|
||||
--reap
|
||||
|
||||
--connection node_1
|
||||
SELECT COUNT(*)=4 FROM t1;
|
||||
SELECT COUNT(*)=5 FROM information_schema.columns WHERE table_name = 't1';
|
||||
|
||||
--connection node_2
|
||||
SELECT COUNT(*)=4 FROM t1;
|
||||
SELECT COUNT(*)=5 FROM information_schema.columns WHERE table_name = 't1';
|
||||
|
||||
--connection node_1
|
||||
DROP TABLE t1;
|
||||
call mtr.add_suppression("WSREP: ALTER TABLE isolation failure");
|
||||
call mtr.add_suppression("greater than drain seqno");
|
40
mysql-test/suite/galera/t/galera_fk_lock_wait.test
Normal file
40
mysql-test/suite/galera/t/galera_fk_lock_wait.test
Normal file
@ -0,0 +1,40 @@
|
||||
--source include/galera_cluster.inc
|
||||
|
||||
CREATE TABLE parent(parent_id int not null AUTO_INCREMENT PRIMARY KEY,
|
||||
parent_name varchar(80)) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE child(child_id int not null AUTO_INCREMENT PRIMARY KEY,
|
||||
child_name varchar(80),
|
||||
child_parent_id int not null,
|
||||
CONSTRAINT `fk_child_parent`
|
||||
FOREIGN KEY (child_parent_id) REFERENCES parent (parent_id)
|
||||
ON DELETE CASCADE
|
||||
ON UPDATE CASCADE) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO parent VALUES (1, 'first'),(2,'second'),(3,'foo'),(4,'tmp');
|
||||
INSERT INTO child VALUES (NULL,'first_child',1);
|
||||
INSERT INTO child VALUES (NULL,'second_child',1);
|
||||
INSERT INTO child VALUES (NULL,'first_child2',2);
|
||||
INSERT INTO child VALUES (NULL,'first_child3',2);
|
||||
INSERT INTO child VALUES (NULL,'first_child4',3);
|
||||
|
||||
BEGIN;
|
||||
UPDATE parent SET parent_name = 'bar' WHERE parent_id = 2;
|
||||
|
||||
--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
|
||||
SET SESSION innodb_lock_wait_timeout=2;
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
UPDATE child SET child_parent_id = 5 where child_parent_id = 2;
|
||||
|
||||
--connection node_1
|
||||
COMMIT;
|
||||
SELECT * FROM parent;
|
||||
SELECT * FROM child;
|
||||
|
||||
--connection node_2
|
||||
|
||||
SELECT * FROM parent;
|
||||
SELECT * FROM child;
|
||||
DROP TABLE child, parent;
|
||||
|
||||
--disconnect node_1a
|
@ -613,4 +613,78 @@ DELETE FROM t1;
|
||||
|
||||
DROP TEMPORARY TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # Original test case from MDEV-17890
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (
|
||||
pk BIGINT AUTO_INCREMENT,
|
||||
b BIT(15),
|
||||
v BIT(10) AS (b) VIRTUAL,
|
||||
PRIMARY KEY(pk),
|
||||
UNIQUE(v)
|
||||
);
|
||||
|
||||
INSERT IGNORE INTO t1 (b) VALUES (b'101110001110100'),(b'011101');
|
||||
SELECT pk, b INTO OUTFILE 'load.data' FROM t1;
|
||||
--error ER_DATA_TOO_LONG
|
||||
LOAD DATA INFILE 'load.data' REPLACE INTO TABLE t1 (pk, b);
|
||||
|
||||
# Cleanup
|
||||
DROP TABLE t1;
|
||||
--let $datadir= `SELECT @@datadir`
|
||||
--remove_file $datadir/test/load.data
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-18166 ASSERT_COLUMN_MARKED_FOR_READ failed on tables with vcols
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (
|
||||
id INT NOT NULL AUTO_INCREMENT,
|
||||
f ENUM('a','b','c'),
|
||||
v ENUM('a','b','c') AS (f),
|
||||
KEY(v,id)
|
||||
) ENGINE=MyISAM;
|
||||
INSERT INTO t1 (f) VALUES ('a'),('b');
|
||||
INSERT IGNORE INTO t1 SELECT * FROM t1;
|
||||
|
||||
# Cleanup
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
CREATE TABLE t1 (
|
||||
id INT NOT NULL AUTO_INCREMENT,
|
||||
f ENUM('a','b','c'),
|
||||
v ENUM('a','b','c') AS (f),
|
||||
KEY(v,id)
|
||||
) ENGINE=MyISAM;
|
||||
INSERT INTO t1 (f) VALUES ('a'),('b');
|
||||
INSERT IGNORE INTO t1 SELECT * FROM t1;
|
||||
|
||||
# Cleanup
|
||||
DROP TABLE t1;
|
||||
|
||||
}
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-23597 Assertion `marked_for_read()' failed while evaluating DEFAULT
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (a INT UNIQUE, b INT DEFAULT (c+1), c int);
|
||||
INSERT INTO t1 VALUES (1,1,1);
|
||||
UPDATE t1 SET b=DEFAULT;
|
||||
SELECT * from t1;
|
||||
|
||||
REPLACE t1 VALUES(1,1,1);
|
||||
INSERT INTO t1 VALUES (1,1,1) ON DUPLICATE KEY UPDATE b= DEFAULT;
|
||||
SELECT * from t1;
|
||||
|
||||
REPLACE t1 VALUES(1,1,1);
|
||||
CREATE TABLE t2 (a INT, b INT DEFAULT (c+1), c int);
|
||||
INSERT INTO t2 VALUES (5,5,5);
|
||||
UPDATE t1 join t2 set t1.b= DEFAULT, t2.b= DEFAULT;
|
||||
SELECT * from t1, t2;
|
||||
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
|
@ -812,7 +812,7 @@ DROP TABLE t1;
|
||||
|
||||
--echo # MDEV-19011 Assertion `file->s->base.reclength < file->s->vreclength'
|
||||
--echo # failed in ha_myisam::setup_vcols_for_repair
|
||||
CREATE TABLE t1 (a INT GENERATED ALWAYS AS (1) VIRTUAL) ENGINE=MyISAM;
|
||||
CREATE TABLE t1 (a INT GENERATED ALWAYS AS (1) VIRTUAL);
|
||||
ALTER TABLE t1 ADD KEY (a);
|
||||
|
||||
DROP TABLE t1;
|
||||
|
@ -153,3 +153,19 @@ CHECK TABLE t EXTENDED;
|
||||
FLUSH TABLES;
|
||||
CHECK TABLE t EXTENDED;
|
||||
DROP TABLE t;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-18166 ASSERT_COLUMN_MARKED_FOR_READ failed on tables with vcols
|
||||
--echo #
|
||||
CREATE TABLE t1 (
|
||||
a INT,
|
||||
b INT,
|
||||
c BIT(4) NOT NULL DEFAULT b'0',
|
||||
pk INTEGER AUTO_INCREMENT,
|
||||
d BIT(4) AS (c) VIRTUAL,
|
||||
PRIMARY KEY(pk),
|
||||
KEY (b,d)
|
||||
) PARTITION BY HASH(pk);
|
||||
INSERT INTO t1 () VALUES (),();
|
||||
UPDATE t1 SET a = 0 WHERE b IS NULL ORDER BY pk;
|
||||
DROP TABLE t1;
|
||||
|
@ -221,3 +221,58 @@ select * from t1;
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-18166 ASSERT_COLUMN_MARKED_FOR_READ failed on tables with vcols
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (d DATETIME(3), v DATETIME(2) AS (d));
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
|
||||
INSERT INTO t1 (d) VALUES ('2004-04-19 15:37:39.123'),
|
||||
('1985-12-24 10:15:08.456');
|
||||
DELETE FROM v1 ORDER BY v LIMIT 4;
|
||||
|
||||
# Cleanup
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # [duplicate] MDEV-19306 Assertion `marked_for_read()' failed in
|
||||
--echo # Field_blob::val_str with virtual columns and views
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (a BLOB, b TEXT AS (a) VIRTUAL);
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
INSERT INTO t1 (a) VALUES ('foo'),('bar');
|
||||
DELETE FROM v1 ORDER BY b LIMIT 2;
|
||||
|
||||
# Cleanup
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (d INT, v TINYINT AS (d));
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
INSERT INTO t1 (d) VALUES ('2004'),('1985') ;
|
||||
DELETE FROM v1 ORDER BY v LIMIT 4;
|
||||
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
CREATE TABLE t1 (d VARCHAR(64), v VARCHAR(63) AS (d));
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
INSERT INTO t1 (d) VALUES ('2004-04-19 15:37:39.123'),('1985-12-24 10:15:08.456') ;
|
||||
DELETE FROM v1 ORDER BY v LIMIT 4;
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP VIEW v1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-18249 ASSERT_COLUMN_MARKED_FOR_READ failed in ANALYZE TABLE
|
||||
--echo #
|
||||
|
||||
create table t1 (c varchar(3) not null, v varchar(4) as (c) virtual);
|
||||
insert into t1 (c) values ('a'),('b');
|
||||
analyze table t1 persistent for columns (v) indexes ();
|
||||
|
||||
|
@ -435,6 +435,26 @@ UPDATE t1 SET col1 = 2;
|
||||
UPDATE t1 SET col7 = DEFAULT;
|
||||
UPDATE t1 SET col8 = DEFAULT;
|
||||
DROP TABLE t1;
|
||||
Bug#20797344: WL#8149: ALLOCATED SPACE FOR INDEXED BLOB VGC CAN BE
|
||||
OVERWRITTEN FOR UPDATE
|
||||
#
|
||||
CREATE TABLE t (a varchar(100), b blob,
|
||||
c blob GENERATED ALWAYS AS (concat(a,b)) VIRTUAL,
|
||||
d blob GENERATED ALWAYS AS (b) VIRTUAL,
|
||||
e int(11) GENERATED ALWAYS AS (10) VIRTUAL,
|
||||
h int(11) NOT NULL, PRIMARY KEY (h), key(c(20)));
|
||||
INSERT INTO t(a,b,h) VALUES('aaaaaaa','1111111', 11);
|
||||
INSERT INTO t(a,b,h) VALUES('bbbbbbb','2222222', 22);
|
||||
SELECT c FROM t;
|
||||
c
|
||||
aaaaaaa1111111
|
||||
bbbbbbb2222222
|
||||
UPDATE t SET a='ccccccc';
|
||||
SELECT c FROM t;
|
||||
c
|
||||
ccccccc1111111
|
||||
ccccccc2222222
|
||||
DROP TABLE t;
|
||||
# Bug#21081742: ASSERTION !TABLE || (!TABLE->WRITE_SET ||
|
||||
# BITMAP_IS_SET(TABLE->WRITE_SET
|
||||
#
|
||||
@ -491,6 +511,21 @@ SELECT * FROM t;
|
||||
x y gc
|
||||
2 1 3
|
||||
DROP TABLE t;
|
||||
CREATE TABLE t (
|
||||
x INT, y INT, gc INT GENERATED ALWAYS AS (x+1), KEY (x,gc)
|
||||
);
|
||||
INSERT INTO t VALUES ();
|
||||
UPDATE t t1, t t2 SET t1.x = 1, t2.y = 2;
|
||||
SELECT * FROM t;
|
||||
x y gc
|
||||
1 2 2
|
||||
SELECT gc FROM t;
|
||||
gc
|
||||
2
|
||||
CHECK TABLE t;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t check status OK
|
||||
DROP TABLE t;
|
||||
# stored
|
||||
CREATE TABLE C (
|
||||
col_varchar_nokey VARCHAR(1),
|
||||
@ -552,6 +587,100 @@ SELECT * from C;
|
||||
col_varchar_nokey col_varchar_key
|
||||
a aa
|
||||
DROP TABLE C;
|
||||
# virtual, indexed
|
||||
CREATE TABLE C (
|
||||
col_varchar_nokey VARCHAR(1),
|
||||
col_varchar_key VARCHAR(2) GENERATED ALWAYS AS
|
||||
(CONCAT(col_varchar_nokey, col_varchar_nokey)) VIRTUAL,
|
||||
KEY (col_varchar_key, col_varchar_nokey)
|
||||
);
|
||||
INSERT INTO C (col_varchar_nokey) VALUES ('c');
|
||||
EXPLAIN UPDATE C AS OUTR1, C AS OUTR2
|
||||
SET OUTR1.`col_varchar_nokey` = 'f',
|
||||
OUTR2.`col_varchar_nokey` = "a";
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE OUTR1 ALL NULL NULL NULL NULL 1
|
||||
1 SIMPLE OUTR2 ALL NULL NULL NULL NULL 1
|
||||
UPDATE C AS OUTR1, C AS OUTR2
|
||||
SET OUTR1.`col_varchar_nokey` = 'f',
|
||||
OUTR2.`col_varchar_nokey` = "a";
|
||||
SELECT * from C;
|
||||
col_varchar_nokey col_varchar_key
|
||||
a aa
|
||||
DROP TABLE C;
|
||||
#
|
||||
# Bug #21530366 CRASH/ASSERTION, CORRUPTION WITH INDEXES +
|
||||
# VIRTUAL COLUMNS, BLOB
|
||||
#
|
||||
CREATE TABLE t (
|
||||
a INTEGER,
|
||||
b BLOB GENERATED ALWAYS AS (a) VIRTUAL,
|
||||
INDEX (b(57))
|
||||
);
|
||||
INSERT INTO t (a) VALUES (9);
|
||||
UPDATE t SET a = 10;
|
||||
DELETE FROM t WHERE a = 10;
|
||||
DROP TABLE t;
|
||||
# Bug#21807818: Generated columns not updated with empty insert list
|
||||
CREATE TABLE t (
|
||||
a BLOB GENERATED ALWAYS AS ('') VIRTUAL,
|
||||
b TIMESTAMP(4) GENERATED ALWAYS AS ('') VIRTUAL,
|
||||
KEY (a(183),b)
|
||||
);
|
||||
ERROR HY000: Function or expression '''' cannot be used in the GENERATED ALWAYS AS clause of `b`
|
||||
CREATE TABLE t (
|
||||
a BLOB GENERATED ALWAYS AS ('') VIRTUAL,
|
||||
b TIMESTAMP(4) GENERATED ALWAYS AS ('') VIRTUAL
|
||||
);
|
||||
INSERT IGNORE INTO t VALUES(), (), ();
|
||||
DELETE IGNORE FROM t;
|
||||
DROP TABLE t;
|
||||
#
|
||||
# Bug#22195458:GCOLS: ASSERTION 0 AND CORRUPTION...
|
||||
#
|
||||
CREATE TABLE t (
|
||||
a INT,
|
||||
b YEAR GENERATED ALWAYS AS ('a') VIRTUAL,
|
||||
c YEAR GENERATED ALWAYS AS ('aaaa') VIRTUAL,
|
||||
b1 YEAR GENERATED ALWAYS AS ('a') STORED,
|
||||
c1 YEAR GENERATED ALWAYS AS ('aaaa') STORED,
|
||||
UNIQUE(b),
|
||||
UNIQUE(b1)
|
||||
);
|
||||
INSERT IGNORE INTO t VALUES();
|
||||
SELECT b from t;
|
||||
b
|
||||
0000
|
||||
SELECT b1 from t;
|
||||
b1
|
||||
0000
|
||||
SELECT * from t;
|
||||
a b c b1 c1
|
||||
NULL 0000 0000 0000 0000
|
||||
DELETE FROM t;
|
||||
CHECK TABLE t EXTENDED;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t check status OK
|
||||
DROP TABLE t;
|
||||
# Bug#22195364:GCOLS: FAILING ASSERTION:
|
||||
# DFIELD_IS_NULL(DFIELD2) || DFIELD2->DATA
|
||||
CREATE TABLE t (
|
||||
a INT,
|
||||
c BLOB GENERATED ALWAYS AS ('') VIRTUAL,
|
||||
UNIQUE KEY(c(1),a)
|
||||
);
|
||||
INSERT INTO t(a) VALUES(1) ON DUPLICATE KEY UPDATE a=2;
|
||||
SELECT * FROM t;
|
||||
a c
|
||||
1
|
||||
INSERT INTO t(a) VALUES(1) ON DUPLICATE KEY UPDATE a=2;
|
||||
SELECT * FROM t;
|
||||
a c
|
||||
2
|
||||
SELECT GROUP_CONCAT(c ORDER BY c) FROM t;
|
||||
GROUP_CONCAT(c ORDER BY c)
|
||||
|
||||
DROP TABLE t;
|
||||
#Bug#21929967:GCOLS:GCOL VALUE CHANGES WHEN SESSION CHANGES SQL_MODE
|
||||
CREATE TABLE t(c1 INT GENERATED ALWAYS AS (1) VIRTUAL,
|
||||
c2 INT GENERATED ALWAYS AS(2) STORED);
|
||||
@ -593,6 +722,98 @@ i1 i2
|
||||
5 10
|
||||
5 10
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
# Bug#22070021 GCOL:ASSERTION `!TABLE || (!TABLE->WRITE_SET ||
|
||||
# BITMAP_IS_SET(TABLE->WRITE_SET,
|
||||
#
|
||||
CREATE TABLE t1(
|
||||
c1 INT,
|
||||
c2 INT GENERATED ALWAYS AS (c1 + c1) VIRTUAL,
|
||||
KEY(c2)
|
||||
);
|
||||
INSERT INTO t1(c1) VALUES(0);
|
||||
DELETE O1.* FROM t1 AS O1, t1 AS O2;
|
||||
SELECT * FROM t1;
|
||||
c1 c2
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#21944199 SIMPLE DELETE QUERY CAUSES INNODB: FAILING ASSERTION: 0
|
||||
# & DATA CORRUPTION
|
||||
#
|
||||
CREATE TEMPORARY TABLE t1 (
|
||||
a INTEGER NOT NULL,
|
||||
b INTEGER GENERATED ALWAYS AS (a+1) VIRTUAL
|
||||
);
|
||||
INSERT INTO t1 (a) VALUES (0), (0), (0);
|
||||
ALTER TABLE t1 ADD INDEX idx (b);
|
||||
DELETE FROM t1;
|
||||
DROP TEMPORARY TABLE t1;
|
||||
#
|
||||
# Original test case from MDEV-17890
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
pk BIGINT AUTO_INCREMENT,
|
||||
b BIT(15),
|
||||
v BIT(10) AS (b) VIRTUAL,
|
||||
PRIMARY KEY(pk),
|
||||
UNIQUE(v)
|
||||
);
|
||||
INSERT IGNORE INTO t1 (b) VALUES (b'101110001110100'),(b'011101');
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'v' at row 1
|
||||
SELECT pk, b INTO OUTFILE 'load.data' FROM t1;
|
||||
LOAD DATA INFILE 'load.data' REPLACE INTO TABLE t1 (pk, b);
|
||||
ERROR 22001: Data too long for column 'v' at row 1
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-18166 ASSERT_COLUMN_MARKED_FOR_READ failed on tables with vcols
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
id INT NOT NULL AUTO_INCREMENT,
|
||||
f ENUM('a','b','c'),
|
||||
v ENUM('a','b','c') AS (f),
|
||||
KEY(v,id)
|
||||
) ENGINE=MyISAM;
|
||||
INSERT INTO t1 (f) VALUES ('a'),('b');
|
||||
INSERT IGNORE INTO t1 SELECT * FROM t1;
|
||||
Warnings:
|
||||
Warning 1906 The value specified for generated column 'v' in table 't1' has been ignored
|
||||
Warning 1906 The value specified for generated column 'v' in table 't1' has been ignored
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (
|
||||
id INT NOT NULL AUTO_INCREMENT,
|
||||
f ENUM('a','b','c'),
|
||||
v ENUM('a','b','c') AS (f),
|
||||
KEY(v,id)
|
||||
) ENGINE=MyISAM;
|
||||
INSERT INTO t1 (f) VALUES ('a'),('b');
|
||||
INSERT IGNORE INTO t1 SELECT * FROM t1;
|
||||
Warnings:
|
||||
Warning 1906 The value specified for generated column 'v' in table 't1' has been ignored
|
||||
Warning 1906 The value specified for generated column 'v' in table 't1' has been ignored
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-23597 Assertion `marked_for_read()' failed while evaluating DEFAULT
|
||||
#
|
||||
CREATE TABLE t1 (a INT UNIQUE, b INT DEFAULT (c+1), c int);
|
||||
INSERT INTO t1 VALUES (1,1,1);
|
||||
UPDATE t1 SET b=DEFAULT;
|
||||
SELECT * from t1;
|
||||
a b c
|
||||
1 2 1
|
||||
REPLACE t1 VALUES(1,1,1);
|
||||
INSERT INTO t1 VALUES (1,1,1) ON DUPLICATE KEY UPDATE b= DEFAULT;
|
||||
SELECT * from t1;
|
||||
a b c
|
||||
1 2 1
|
||||
REPLACE t1 VALUES(1,1,1);
|
||||
CREATE TABLE t2 (a INT, b INT DEFAULT (c+1), c int);
|
||||
INSERT INTO t2 VALUES (5,5,5);
|
||||
UPDATE t1 join t2 set t1.b= DEFAULT, t2.b= DEFAULT;
|
||||
SELECT * from t1, t2;
|
||||
a b c a b c
|
||||
1 2 1 5 6 5
|
||||
DROP TABLE t1, t2;
|
||||
DROP VIEW IF EXISTS v1,v2;
|
||||
DROP TABLE IF EXISTS t1,t2,t3;
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
|
@ -572,13 +572,13 @@ UNIQUE(b1)
|
||||
INSERT IGNORE INTO t VALUES();
|
||||
SELECT b from t;
|
||||
b
|
||||
2000
|
||||
0000
|
||||
SELECT b1 from t;
|
||||
b1
|
||||
0000
|
||||
SELECT * from t;
|
||||
a b c b1 c1
|
||||
NULL 2000 0000 0000 0000
|
||||
NULL 0000 0000 0000 0000
|
||||
DELETE FROM t;
|
||||
CHECK TABLE t EXTENDED;
|
||||
Table Op Msg_type Msg_text
|
||||
@ -670,6 +670,72 @@ INSERT INTO t1 (a) VALUES (0), (0), (0);
|
||||
ALTER TABLE t1 ADD INDEX idx (b);
|
||||
DELETE FROM t1;
|
||||
DROP TEMPORARY TABLE t1;
|
||||
#
|
||||
# Original test case from MDEV-17890
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
pk BIGINT AUTO_INCREMENT,
|
||||
b BIT(15),
|
||||
v BIT(10) AS (b) VIRTUAL,
|
||||
PRIMARY KEY(pk),
|
||||
UNIQUE(v)
|
||||
);
|
||||
INSERT IGNORE INTO t1 (b) VALUES (b'101110001110100'),(b'011101');
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'v' at row 1
|
||||
SELECT pk, b INTO OUTFILE 'load.data' FROM t1;
|
||||
LOAD DATA INFILE 'load.data' REPLACE INTO TABLE t1 (pk, b);
|
||||
ERROR 22001: Data too long for column 'v' at row 1
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-18166 ASSERT_COLUMN_MARKED_FOR_READ failed on tables with vcols
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
id INT NOT NULL AUTO_INCREMENT,
|
||||
f ENUM('a','b','c'),
|
||||
v ENUM('a','b','c') AS (f),
|
||||
KEY(v,id)
|
||||
) ENGINE=MyISAM;
|
||||
INSERT INTO t1 (f) VALUES ('a'),('b');
|
||||
INSERT IGNORE INTO t1 SELECT * FROM t1;
|
||||
Warnings:
|
||||
Warning 1906 The value specified for generated column 'v' in table 't1' has been ignored
|
||||
Warning 1906 The value specified for generated column 'v' in table 't1' has been ignored
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (
|
||||
id INT NOT NULL AUTO_INCREMENT,
|
||||
f ENUM('a','b','c'),
|
||||
v ENUM('a','b','c') AS (f),
|
||||
KEY(v,id)
|
||||
) ENGINE=MyISAM;
|
||||
INSERT INTO t1 (f) VALUES ('a'),('b');
|
||||
INSERT IGNORE INTO t1 SELECT * FROM t1;
|
||||
Warnings:
|
||||
Warning 1906 The value specified for generated column 'v' in table 't1' has been ignored
|
||||
Warning 1906 The value specified for generated column 'v' in table 't1' has been ignored
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-23597 Assertion `marked_for_read()' failed while evaluating DEFAULT
|
||||
#
|
||||
CREATE TABLE t1 (a INT UNIQUE, b INT DEFAULT (c+1), c int);
|
||||
INSERT INTO t1 VALUES (1,1,1);
|
||||
UPDATE t1 SET b=DEFAULT;
|
||||
SELECT * from t1;
|
||||
a b c
|
||||
1 2 1
|
||||
REPLACE t1 VALUES(1,1,1);
|
||||
INSERT INTO t1 VALUES (1,1,1) ON DUPLICATE KEY UPDATE b= DEFAULT;
|
||||
SELECT * from t1;
|
||||
a b c
|
||||
1 2 1
|
||||
REPLACE t1 VALUES(1,1,1);
|
||||
CREATE TABLE t2 (a INT, b INT DEFAULT (c+1), c int);
|
||||
INSERT INTO t2 VALUES (5,5,5);
|
||||
UPDATE t1 join t2 set t1.b= DEFAULT, t2.b= DEFAULT;
|
||||
SELECT * from t1, t2;
|
||||
a b c a b c
|
||||
1 2 1 5 6 5
|
||||
DROP TABLE t1, t2;
|
||||
DROP VIEW IF EXISTS v1,v2;
|
||||
DROP TABLE IF EXISTS t1,t2,t3;
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
|
@ -885,7 +885,7 @@ ERROR 22003: Out of range value for column 'vi' at row 1
|
||||
DROP TABLE t1;
|
||||
# MDEV-19011 Assertion `file->s->base.reclength < file->s->vreclength'
|
||||
# failed in ha_myisam::setup_vcols_for_repair
|
||||
CREATE TABLE t1 (a INT GENERATED ALWAYS AS (1) VIRTUAL) ENGINE=MyISAM;
|
||||
CREATE TABLE t1 (a INT GENERATED ALWAYS AS (1) VIRTUAL);
|
||||
ALTER TABLE t1 ADD KEY (a);
|
||||
DROP TABLE t1;
|
||||
#
|
||||
|
@ -885,7 +885,7 @@ ERROR 22003: Out of range value for column 'vi' at row 1
|
||||
DROP TABLE t1;
|
||||
# MDEV-19011 Assertion `file->s->base.reclength < file->s->vreclength'
|
||||
# failed in ha_myisam::setup_vcols_for_repair
|
||||
CREATE TABLE t1 (a INT GENERATED ALWAYS AS (1) VIRTUAL) ENGINE=MyISAM;
|
||||
CREATE TABLE t1 (a INT GENERATED ALWAYS AS (1) VIRTUAL);
|
||||
ALTER TABLE t1 ADD KEY (a);
|
||||
DROP TABLE t1;
|
||||
DROP VIEW IF EXISTS v1,v2;
|
||||
|
@ -89,6 +89,21 @@ Table Op Msg_type Msg_text
|
||||
test.t check status OK
|
||||
DROP TABLE t;
|
||||
#
|
||||
# MDEV-18166 ASSERT_COLUMN_MARKED_FOR_READ failed on tables with vcols
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
a INT,
|
||||
b INT,
|
||||
c BIT(4) NOT NULL DEFAULT b'0',
|
||||
pk INTEGER AUTO_INCREMENT,
|
||||
d BIT(4) AS (c) VIRTUAL,
|
||||
PRIMARY KEY(pk),
|
||||
KEY (b,d)
|
||||
) PARTITION BY HASH(pk);
|
||||
INSERT INTO t1 () VALUES (),();
|
||||
UPDATE t1 SET a = 0 WHERE b IS NULL ORDER BY pk;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-16980 Wrongly set tablename len while opening the
|
||||
# table for purge thread
|
||||
#
|
||||
|
@ -86,6 +86,21 @@ CHECK TABLE t EXTENDED;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t check status OK
|
||||
DROP TABLE t;
|
||||
#
|
||||
# MDEV-18166 ASSERT_COLUMN_MARKED_FOR_READ failed on tables with vcols
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
a INT,
|
||||
b INT,
|
||||
c BIT(4) NOT NULL DEFAULT b'0',
|
||||
pk INTEGER AUTO_INCREMENT,
|
||||
d BIT(4) AS (c) VIRTUAL,
|
||||
PRIMARY KEY(pk),
|
||||
KEY (b,d)
|
||||
) PARTITION BY HASH(pk);
|
||||
INSERT INTO t1 () VALUES (),();
|
||||
UPDATE t1 SET a = 0 WHERE b IS NULL ORDER BY pk;
|
||||
DROP TABLE t1;
|
||||
DROP VIEW IF EXISTS v1,v2;
|
||||
DROP TABLE IF EXISTS t1,t2,t3;
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
|
@ -272,6 +272,47 @@ a b c
|
||||
1 -1 -1
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
#
|
||||
# MDEV-18166 ASSERT_COLUMN_MARKED_FOR_READ failed on tables with vcols
|
||||
#
|
||||
CREATE TABLE t1 (d DATETIME(3), v DATETIME(2) AS (d));
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
INSERT INTO t1 (d) VALUES ('2004-04-19 15:37:39.123'),
|
||||
('1985-12-24 10:15:08.456');
|
||||
DELETE FROM v1 ORDER BY v LIMIT 4;
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# [duplicate] MDEV-19306 Assertion `marked_for_read()' failed in
|
||||
# Field_blob::val_str with virtual columns and views
|
||||
#
|
||||
CREATE TABLE t1 (a BLOB, b TEXT AS (a) VIRTUAL);
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
INSERT INTO t1 (a) VALUES ('foo'),('bar');
|
||||
DELETE FROM v1 ORDER BY b LIMIT 2;
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (d INT, v TINYINT AS (d));
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
INSERT INTO t1 (d) VALUES ('2004'),('1985') ;
|
||||
DELETE FROM v1 ORDER BY v LIMIT 4;
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (d VARCHAR(64), v VARCHAR(63) AS (d));
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
INSERT INTO t1 (d) VALUES ('2004-04-19 15:37:39.123'),('1985-12-24 10:15:08.456') ;
|
||||
DELETE FROM v1 ORDER BY v LIMIT 4;
|
||||
DROP TABLE t1;
|
||||
DROP VIEW v1;
|
||||
#
|
||||
# MDEV-18249 ASSERT_COLUMN_MARKED_FOR_READ failed in ANALYZE TABLE
|
||||
#
|
||||
create table t1 (c varchar(3) not null, v varchar(4) as (c) virtual);
|
||||
insert into t1 (c) values ('a'),('b');
|
||||
analyze table t1 persistent for columns (v) indexes ();
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
DROP VIEW IF EXISTS v1,v2;
|
||||
DROP TABLE IF EXISTS t1,t2,t3;
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
|
@ -272,6 +272,47 @@ a b c
|
||||
1 -1 -1
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
#
|
||||
# MDEV-18166 ASSERT_COLUMN_MARKED_FOR_READ failed on tables with vcols
|
||||
#
|
||||
CREATE TABLE t1 (d DATETIME(3), v DATETIME(2) AS (d));
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
INSERT INTO t1 (d) VALUES ('2004-04-19 15:37:39.123'),
|
||||
('1985-12-24 10:15:08.456');
|
||||
DELETE FROM v1 ORDER BY v LIMIT 4;
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# [duplicate] MDEV-19306 Assertion `marked_for_read()' failed in
|
||||
# Field_blob::val_str with virtual columns and views
|
||||
#
|
||||
CREATE TABLE t1 (a BLOB, b TEXT AS (a) VIRTUAL);
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
INSERT INTO t1 (a) VALUES ('foo'),('bar');
|
||||
DELETE FROM v1 ORDER BY b LIMIT 2;
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (d INT, v TINYINT AS (d));
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
INSERT INTO t1 (d) VALUES ('2004'),('1985') ;
|
||||
DELETE FROM v1 ORDER BY v LIMIT 4;
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (d VARCHAR(64), v VARCHAR(63) AS (d));
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
INSERT INTO t1 (d) VALUES ('2004-04-19 15:37:39.123'),('1985-12-24 10:15:08.456') ;
|
||||
DELETE FROM v1 ORDER BY v LIMIT 4;
|
||||
DROP TABLE t1;
|
||||
DROP VIEW v1;
|
||||
#
|
||||
# MDEV-18249 ASSERT_COLUMN_MARKED_FOR_READ failed in ANALYZE TABLE
|
||||
#
|
||||
create table t1 (c varchar(3) not null, v varchar(4) as (c) virtual);
|
||||
insert into t1 (c) values ('a'),('b');
|
||||
analyze table t1 persistent for columns (v) indexes ();
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
DROP VIEW IF EXISTS v1,v2;
|
||||
DROP TABLE IF EXISTS t1,t2,t3;
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
|
@ -809,15 +809,18 @@ generated_email_id int as (email_id),
|
||||
PRIMARY KEY (id),
|
||||
KEY mautic_generated_sent_date_email_id (generated_email_id),
|
||||
FOREIGN KEY (email_id) REFERENCES emails (id) ON DELETE SET NULL
|
||||
ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
CREATE TABLE emails_metadata (
|
||||
email_id int,
|
||||
PRIMARY KEY (email_id),
|
||||
CONSTRAINT FK FOREIGN KEY (email_id) REFERENCES emails (id) ON DELETE CASCADE
|
||||
ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
INSERT INTO emails VALUES (1);
|
||||
INSERT INTO email_stats (id, email_id, date_sent) VALUES (1,1,'Jan');
|
||||
INSERT INTO emails_metadata VALUES (1);
|
||||
UPDATE emails SET id=2;
|
||||
DELETE FROM emails;
|
||||
DROP TABLE email_stats;
|
||||
DROP TABLE emails_metadata;
|
||||
|
@ -36,7 +36,7 @@ eval SET @@session.default_storage_engine = 'InnoDB';
|
||||
|
||||
#------------------------------------------------------------------------------#
|
||||
# Execute the tests to be applied to all storage engines
|
||||
let $support_virtual_index= 0;
|
||||
let $support_virtual_index= 1;
|
||||
--source suite/gcol/inc/gcol_ins_upd.inc
|
||||
|
||||
#------------------------------------------------------------------------------#
|
||||
|
@ -670,6 +670,7 @@ CREATE TABLE email_stats (
|
||||
PRIMARY KEY (id),
|
||||
KEY mautic_generated_sent_date_email_id (generated_email_id),
|
||||
FOREIGN KEY (email_id) REFERENCES emails (id) ON DELETE SET NULL
|
||||
ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
|
||||
@ -677,6 +678,7 @@ CREATE TABLE emails_metadata (
|
||||
email_id int,
|
||||
PRIMARY KEY (email_id),
|
||||
CONSTRAINT FK FOREIGN KEY (email_id) REFERENCES emails (id) ON DELETE CASCADE
|
||||
ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
|
||||
@ -684,6 +686,7 @@ INSERT INTO emails VALUES (1);
|
||||
INSERT INTO email_stats (id, email_id, date_sent) VALUES (1,1,'Jan');
|
||||
INSERT INTO emails_metadata VALUES (1);
|
||||
|
||||
UPDATE emails SET id=2;
|
||||
DELETE FROM emails;
|
||||
|
||||
DROP TABLE email_stats;
|
||||
|
@ -107,6 +107,16 @@ alter table t1 engine=innodb;
|
||||
alter table t1 add column b int;
|
||||
drop table t1,t2;
|
||||
#
|
||||
# MDEV-19272 Assertion unireg_check...Field::NEXT_NUMBER failed
|
||||
#
|
||||
CREATE TABLE t1 (c INT AUTO_INCREMENT NULL UNIQUE) ENGINE=InnoDB;
|
||||
ALTER TABLE t1 MODIFY c INT NOT NULL, ALGORITHM=INPLACE;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (c TIMESTAMP AUTO_INCREMENT UNIQUE) ENGINE=InnoDB;
|
||||
ERROR 42000: Incorrect column specifier for column 'c'
|
||||
CREATE TABLE t1 (c DATETIME AUTO_INCREMENT UNIQUE) ENGINE=InnoDB;
|
||||
ERROR 42000: Incorrect column specifier for column 'c'
|
||||
#
|
||||
# End of 10.4 tests
|
||||
#
|
||||
#
|
||||
|
@ -23,6 +23,7 @@ INSERT INTO t1 VALUES (1, 'abc');
|
||||
SHOW TABLE STATUS LIKE 't1';
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment Max_index_length Temporary
|
||||
t1 InnoDB # Compact # # # # # # NULL # # NULL latin1_swedish_ci NULL 0 N
|
||||
CREATE TABLE t2 (b VARCHAR(255) CHARACTER SET utf8mb4 NOT NULL) ENGINE=InnoDB;
|
||||
SET GLOBAL innodb_default_row_format = DYNAMIC;
|
||||
ALTER TABLE t1 DROP PRIMARY KEY, ADD COLUMN c INT PRIMARY KEY;
|
||||
# Here we expect DYNAMIC because there is no explicit ROW_FORMAT and the
|
||||
@ -31,6 +32,10 @@ SHOW TABLE STATUS LIKE 't1';
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment Max_index_length Temporary
|
||||
t1 InnoDB # Dynamic # # # # # # NULL # # NULL latin1_swedish_ci NULL 0 N
|
||||
DROP TABLE t1;
|
||||
ALTER TABLE t2 ADD INDEX(b);
|
||||
ERROR HY000: Index column size too large. The maximum column size is 767 bytes
|
||||
ALTER TABLE t2 FORCE, ADD INDEX(b);
|
||||
DROP TABLE t2;
|
||||
####################################
|
||||
# Check the row_format effect on ALTER, ALGORITHM=COPY
|
||||
SET GLOBAL innodb_default_row_format = REDUNDANT;
|
||||
@ -39,6 +44,7 @@ INSERT INTO t1 VALUES (1, REPEAT('abc',1000));
|
||||
SHOW TABLE STATUS LIKE 't1';
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment Max_index_length Temporary
|
||||
t1 InnoDB # Redundant # # # # # # NULL # # NULL latin1_swedish_ci NULL 0 N
|
||||
CREATE TABLE t2 (b VARCHAR(255) CHARACTER SET utf8mb4 NOT NULL) ENGINE=InnoDB;
|
||||
SET GLOBAL innoDB_default_row_format = COMPACT;
|
||||
ALTER TABLE t1 ADD COLUMN c2 BLOB, ALGORITHM=COPY;
|
||||
# Because of ALGORITHM=COPY, there is TABLE REBUILD and the table isn't
|
||||
@ -47,9 +53,18 @@ SHOW TABLE STATUS LIKE 't1';
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment Max_index_length Temporary
|
||||
t1 InnoDB # Compact # # # # # # NULL # # NULL latin1_swedish_ci NULL 0 N
|
||||
DROP TABLE t1;
|
||||
ALTER TABLE t2 ADD INDEX(b);
|
||||
ERROR HY000: Index column size too large. The maximum column size is 767 bytes
|
||||
ALTER TABLE t2 FORCE, ADD INDEX(b);
|
||||
ERROR HY000: Index column size too large. The maximum column size is 767 bytes
|
||||
SET GLOBAL innodb_default_row_format = DYNAMIC;
|
||||
ALTER TABLE t2 ADD INDEX(b);
|
||||
ERROR HY000: Index column size too large. The maximum column size is 767 bytes
|
||||
ALTER TABLE t2 FORCE, ADD INDEX(b);
|
||||
DROP TABLE t2;
|
||||
|
||||
###################################
|
||||
# Check the row_format effect on ALTER, ALGORITH=COPY on
|
||||
# Check the row_format effect on ALTER, ALGORITHM=COPY on
|
||||
# create table with explicit row_format
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT) ROW_FORMAT=REDUNDANT ENGINE=INNODB;
|
||||
INSERT INTO t1 VALUES (1, REPEAT('abc',1000));
|
||||
|
12
mysql-test/suite/innodb/r/import_bugs.result
Normal file
12
mysql-test/suite/innodb/r/import_bugs.result
Normal file
@ -0,0 +1,12 @@
|
||||
call mtr.add_suppression("Index for table 'imp_t1' is corrupt; try to repair it");
|
||||
SET @save_innodb_checksum_algorithm=@@GLOBAL.innodb_checksum_algorithm;
|
||||
SET GLOBAL innodb_checksum_algorithm=full_crc32;
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
|
||||
CREATE TABLE imp_t1 (a INT PRIMARY KEY) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
|
||||
ALTER TABLE imp_t1 DISCARD TABLESPACE ;
|
||||
FLUSH TABLES t1 FOR EXPORT;
|
||||
UNLOCK TABLES;
|
||||
ALTER TABLE imp_t1 IMPORT TABLESPACE;
|
||||
ERROR HY000: Schema mismatch (ROW_FORMAT mismatch)
|
||||
DROP TABLE imp_t1, t1;
|
||||
SET GLOBAL innodb_checksum_algorithm=@save_innodb_checksum_algorithm;
|
@ -109,6 +109,17 @@ alter table t1 engine=innodb;
|
||||
alter table t1 add column b int;
|
||||
drop table t1,t2;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-19272 Assertion unireg_check...Field::NEXT_NUMBER failed
|
||||
--echo #
|
||||
CREATE TABLE t1 (c INT AUTO_INCREMENT NULL UNIQUE) ENGINE=InnoDB;
|
||||
ALTER TABLE t1 MODIFY c INT NOT NULL, ALGORITHM=INPLACE;
|
||||
DROP TABLE t1;
|
||||
--error ER_WRONG_FIELD_SPEC
|
||||
CREATE TABLE t1 (c TIMESTAMP AUTO_INCREMENT UNIQUE) ENGINE=InnoDB;
|
||||
--error ER_WRONG_FIELD_SPEC
|
||||
CREATE TABLE t1 (c DATETIME AUTO_INCREMENT UNIQUE) ENGINE=InnoDB;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.4 tests
|
||||
--echo #
|
||||
|
@ -6,7 +6,7 @@ SET @row_format = @@GLOBAL.innodb_default_row_format;
|
||||
--echo ####################################
|
||||
--echo # Check if table rebuilding alter isn't affect if table is created
|
||||
--echo # with explicit row_format
|
||||
eval CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT) ROW_FORMAT=COMPACT ENGINE=INNODB;
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT) ROW_FORMAT=COMPACT ENGINE=INNODB;
|
||||
INSERT INTO t1 VALUES (1, 'abc');
|
||||
--replace_column 3 # 5 # 6 # 7 # 8 # 9 # 10 # 12 # 13 #
|
||||
SHOW TABLE STATUS LIKE 't1';
|
||||
@ -23,12 +23,14 @@ DROP TABLE t1;
|
||||
--echo # Check if table rebuilding alter is affected when there is no
|
||||
--echo # row_format specified at CREATE TABLE.
|
||||
SET GLOBAL innodb_default_row_format = COMPACT;
|
||||
eval CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT) ENGINE=INNODB;
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT) ENGINE=INNODB;
|
||||
INSERT INTO t1 VALUES (1, 'abc');
|
||||
|
||||
--replace_column 3 # 5 # 6 # 7 # 8 # 9 # 10 # 12 # 13 #
|
||||
SHOW TABLE STATUS LIKE 't1';
|
||||
|
||||
CREATE TABLE t2 (b VARCHAR(255) CHARACTER SET utf8mb4 NOT NULL) ENGINE=InnoDB;
|
||||
|
||||
SET GLOBAL innodb_default_row_format = DYNAMIC;
|
||||
ALTER TABLE t1 DROP PRIMARY KEY, ADD COLUMN c INT PRIMARY KEY;
|
||||
|
||||
@ -38,15 +40,22 @@ ALTER TABLE t1 DROP PRIMARY KEY, ADD COLUMN c INT PRIMARY KEY;
|
||||
SHOW TABLE STATUS LIKE 't1';
|
||||
DROP TABLE t1;
|
||||
|
||||
--error ER_INDEX_COLUMN_TOO_LONG
|
||||
ALTER TABLE t2 ADD INDEX(b);
|
||||
ALTER TABLE t2 FORCE, ADD INDEX(b);
|
||||
DROP TABLE t2;
|
||||
|
||||
--echo ####################################
|
||||
--echo # Check the row_format effect on ALTER, ALGORITHM=COPY
|
||||
SET GLOBAL innodb_default_row_format = REDUNDANT;
|
||||
eval CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT) ENGINE=INNODB;
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT) ENGINE=INNODB;
|
||||
INSERT INTO t1 VALUES (1, REPEAT('abc',1000));
|
||||
|
||||
--replace_column 3 # 5 # 6 # 7 # 8 # 9 # 10 # 12 # 13 #
|
||||
SHOW TABLE STATUS LIKE 't1';
|
||||
|
||||
CREATE TABLE t2 (b VARCHAR(255) CHARACTER SET utf8mb4 NOT NULL) ENGINE=InnoDB;
|
||||
|
||||
SET GLOBAL innoDB_default_row_format = COMPACT;
|
||||
ALTER TABLE t1 ADD COLUMN c2 BLOB, ALGORITHM=COPY;
|
||||
|
||||
@ -56,11 +65,23 @@ ALTER TABLE t1 ADD COLUMN c2 BLOB, ALGORITHM=COPY;
|
||||
SHOW TABLE STATUS LIKE 't1';
|
||||
DROP TABLE t1;
|
||||
|
||||
--error ER_INDEX_COLUMN_TOO_LONG
|
||||
ALTER TABLE t2 ADD INDEX(b);
|
||||
--error ER_INDEX_COLUMN_TOO_LONG
|
||||
ALTER TABLE t2 FORCE, ADD INDEX(b);
|
||||
|
||||
SET GLOBAL innodb_default_row_format = DYNAMIC;
|
||||
--error ER_INDEX_COLUMN_TOO_LONG
|
||||
ALTER TABLE t2 ADD INDEX(b);
|
||||
ALTER TABLE t2 FORCE, ADD INDEX(b);
|
||||
|
||||
DROP TABLE t2;
|
||||
|
||||
--echo
|
||||
--echo ###################################
|
||||
--echo # Check the row_format effect on ALTER, ALGORITH=COPY on
|
||||
--echo # Check the row_format effect on ALTER, ALGORITHM=COPY on
|
||||
--echo # create table with explicit row_format
|
||||
eval CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT) ROW_FORMAT=REDUNDANT ENGINE=INNODB;
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT) ROW_FORMAT=REDUNDANT ENGINE=INNODB;
|
||||
INSERT INTO t1 VALUES (1, REPEAT('abc',1000));
|
||||
|
||||
--replace_column 3 # 5 # 6 # 7 # 8 # 9 # 10 # 12 # 13 #
|
||||
@ -81,7 +102,7 @@ DROP TABLE t1;
|
||||
--echo # Check row_format on ALTER ALGORITHM=INPLACE
|
||||
SET GLOBAL innodb_default_row_format=COMPACT;
|
||||
|
||||
eval CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT, KEY k1(b(10))) ENGINE=INNODB;
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b TEXT, KEY k1(b(10))) ENGINE=INNODB;
|
||||
INSERT INTO t1 VALUES (1, REPEAT('abc',1000));
|
||||
|
||||
--replace_column 3 # 5 # 6 # 7 # 8 # 9 # 10 # 12 # 13 #
|
||||
|
19
mysql-test/suite/innodb/t/import_bugs.test
Normal file
19
mysql-test/suite/innodb/t/import_bugs.test
Normal file
@ -0,0 +1,19 @@
|
||||
--source include/have_innodb.inc
|
||||
|
||||
call mtr.add_suppression("Index for table 'imp_t1' is corrupt; try to repair it");
|
||||
|
||||
SET @save_innodb_checksum_algorithm=@@GLOBAL.innodb_checksum_algorithm;
|
||||
SET GLOBAL innodb_checksum_algorithm=full_crc32;
|
||||
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
|
||||
CREATE TABLE imp_t1 (a INT PRIMARY KEY) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
|
||||
ALTER TABLE imp_t1 DISCARD TABLESPACE ;
|
||||
FLUSH TABLES t1 FOR EXPORT;
|
||||
let $datadir=`select @@datadir`;
|
||||
--copy_file $datadir/test/t1.ibd $datadir/test/imp_t1.ibd
|
||||
UNLOCK TABLES;
|
||||
--error ER_TABLE_SCHEMA_MISMATCH
|
||||
ALTER TABLE imp_t1 IMPORT TABLESPACE;
|
||||
DROP TABLE imp_t1, t1;
|
||||
|
||||
SET GLOBAL innodb_checksum_algorithm=@save_innodb_checksum_algorithm;
|
@ -1,6 +1,8 @@
|
||||
-- source include/have_innodb.inc
|
||||
-- source include/have_innodb_lz4.inc
|
||||
-- source include/not_embedded.inc
|
||||
# The test can take very long time with valgrind
|
||||
--source include/not_valgrind.inc
|
||||
|
||||
# lz4
|
||||
set global innodb_compression_algorithm = 2;
|
||||
|
@ -88,7 +88,7 @@ while (!$mysql_errno)
|
||||
if (!$counter)
|
||||
{
|
||||
# This will fail this test.
|
||||
--die Server failed to dissapear
|
||||
--die Server failed to disappear
|
||||
}
|
||||
--sleep 1
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user