mirror of
https://github.com/MariaDB/server.git
synced 2025-04-09 00:35:40 +02:00
Merge bb-10.2-ext into 10.3
This commit is contained in:
commit
7cb3520c06
2034 changed files with 179230 additions and 109759 deletions
client
cmake
extra/mariabackup
backup_copy.ccbackup_mysql.ccchanged_page_bitmap.cc
libmariadbcrc
fil_cur.ccwrite_filt.ccwrite_filt.hxtrabackup.ccxtrabackup.hmysql-test
include
have_debug.inchave_example_plugin.inchave_innodb.incnot_embedded.incnot_windows.incshow_gtid_list.inc
mysql-test-run.plr
cast.resultcommit_1innodb.resultcreate_drop_binlog.resultcreate_drop_view.resultcte_grant.resultdrop.resultfunc_hybrid_type.resultfunc_json.resultget_diagnostics.resultgis-json.resultgis.resultgrant.resultintersect.resultmysqlbinlog.resultnot_windows.requireorder_by.resultorder_by_innodb.resultprofiling.resultps.resultsignal.resultsignal_demo3.resultsp-code.resultsp-cursor.resultsp-error.resultsp-for-loop.resultsp-group.resultsp.resulttrigger.resulttype_set.resultview.resultwarnings.result
suite
binlog
r
t
compat/oracle
funcs_1/r
galera
r
t
innodb
include
r
innodb-on-duplicate-update.resultinnodb-replace-debug.resultinnodb_bulk_create_index.resultinnodb_bulk_create_index_debug.resultinnodb_bulk_create_index_flush.resultinnodb_bulk_create_index_replication.resultinnodb_bulk_create_index_small.resulttruncate_restart.resultupdate_time.result
t
mariabackup
rpl/r
|
@ -2955,10 +2955,11 @@ int main(int argc, char** argv)
|
|||
|
||||
if (!argc || opt_version)
|
||||
{
|
||||
if (!argc)
|
||||
usage();
|
||||
if (!opt_version)
|
||||
{
|
||||
usage();
|
||||
retval= ERROR_STOP;
|
||||
}
|
||||
goto err;
|
||||
}
|
||||
|
||||
|
|
|
@ -42,7 +42,8 @@ MACRO(CHECK_DTRACE)
|
|||
# On FreeBSD, dtrace does not handle userland tracing yet
|
||||
IF(DTRACE AND NOT CMAKE_SYSTEM_NAME MATCHES "FreeBSD"
|
||||
AND NOT BUGGY_GCC_NO_DTRACE_MODULES
|
||||
AND NOT BUGGY_LINUX_DTRACE)
|
||||
AND NOT BUGGY_LINUX_DTRACE
|
||||
AND NOT CMAKE_SYSTEM_NAME MATCHES "SunOS")
|
||||
SET(ENABLE_DTRACE ON CACHE BOOL "Enable dtrace")
|
||||
ENDIF()
|
||||
SET(HAVE_DTRACE ${ENABLE_DTRACE})
|
||||
|
|
|
@ -26,7 +26,7 @@ ENDIF()
|
|||
OPTION(WITH_WSREP "WSREP replication API (to use, e.g. Galera Replication library)" ${with_wsrep_default})
|
||||
|
||||
# Set the patch version
|
||||
SET(WSREP_PATCH_VERSION "20")
|
||||
SET(WSREP_PATCH_VERSION "21")
|
||||
|
||||
# Obtain wsrep API version
|
||||
FILE(STRINGS "${MySQL_SOURCE_DIR}/wsrep/wsrep_api.h" WSREP_API_VERSION
|
||||
|
|
|
@ -252,9 +252,8 @@ datadir_iter_next_database(datadir_iter_t *it)
|
|||
it->dbpath = static_cast<char*>(
|
||||
malloc(it->dbpath_len));
|
||||
}
|
||||
ut_snprintf(it->dbpath, it->dbpath_len,
|
||||
"%s/%s", it->datadir_path,
|
||||
it->dbinfo.name);
|
||||
snprintf(it->dbpath, it->dbpath_len, "%s/%s",
|
||||
it->datadir_path, it->dbinfo.name);
|
||||
os_normalize_path(it->dbpath);
|
||||
|
||||
if (it->dbinfo.type == OS_FILE_TYPE_FILE) {
|
||||
|
@ -1034,8 +1033,8 @@ move_file(ds_ctxt_t *datasink,
|
|||
char dst_dir_abs[FN_REFLEN];
|
||||
size_t dirname_length;
|
||||
|
||||
ut_snprintf(dst_file_path_abs, sizeof(dst_file_path_abs),
|
||||
"%s/%s", dst_dir, dst_file_path);
|
||||
snprintf(dst_file_path_abs, sizeof(dst_file_path_abs),
|
||||
"%s/%s", dst_dir, dst_file_path);
|
||||
|
||||
dirname_part(dst_dir_abs, dst_file_path_abs, &dirname_length);
|
||||
|
||||
|
@ -1252,8 +1251,8 @@ backup_files(const char *from, bool prep_mode)
|
|||
} else if (!prep_mode) {
|
||||
/* backup fake file into empty directory */
|
||||
char path[FN_REFLEN];
|
||||
ut_snprintf(path, sizeof(path),
|
||||
"%s/db.opt", node.filepath);
|
||||
snprintf(path, sizeof(path),
|
||||
"%s/db.opt", node.filepath);
|
||||
if (!(ret = backup_file_printf(
|
||||
trim_dotslash(path), "%s", ""))) {
|
||||
msg("Failed to create file %s\n", path);
|
||||
|
|
|
@ -589,7 +589,7 @@ select_incremental_lsn_from_history(lsn_t *incremental_lsn)
|
|||
mysql_real_escape_string(mysql_connection, buf,
|
||||
opt_incremental_history_name,
|
||||
(unsigned long)strlen(opt_incremental_history_name));
|
||||
ut_snprintf(query, sizeof(query),
|
||||
snprintf(query, sizeof(query),
|
||||
"SELECT innodb_to_lsn "
|
||||
"FROM PERCONA_SCHEMA.xtrabackup_history "
|
||||
"WHERE name = '%s' "
|
||||
|
@ -602,7 +602,7 @@ select_incremental_lsn_from_history(lsn_t *incremental_lsn)
|
|||
mysql_real_escape_string(mysql_connection, buf,
|
||||
opt_incremental_history_uuid,
|
||||
(unsigned long)strlen(opt_incremental_history_uuid));
|
||||
ut_snprintf(query, sizeof(query),
|
||||
snprintf(query, sizeof(query),
|
||||
"SELECT innodb_to_lsn "
|
||||
"FROM PERCONA_SCHEMA.xtrabackup_history "
|
||||
"WHERE uuid = '%s' "
|
||||
|
@ -766,7 +766,7 @@ kill_long_queries(MYSQL *connection, time_t timeout)
|
|||
is_select_query(info))) {
|
||||
msg_ts("Killing query %s (duration %d sec): %s\n",
|
||||
id, (int)duration, info);
|
||||
ut_snprintf(kill_stmt, sizeof(kill_stmt),
|
||||
snprintf(kill_stmt, sizeof(kill_stmt),
|
||||
"KILL %s", id);
|
||||
xb_mysql_query(connection, kill_stmt, false, false);
|
||||
}
|
||||
|
@ -1288,8 +1288,8 @@ write_current_binlog_file(MYSQL *connection)
|
|||
goto cleanup;
|
||||
}
|
||||
|
||||
ut_snprintf(filepath, sizeof(filepath), "%s%c%s",
|
||||
log_bin_dir, FN_LIBCHAR, log_bin_file);
|
||||
snprintf(filepath, sizeof(filepath), "%s%c%s",
|
||||
log_bin_dir, FN_LIBCHAR, log_bin_file);
|
||||
result = copy_file(ds_data, filepath, log_bin_file, 0);
|
||||
}
|
||||
|
||||
|
@ -1574,8 +1574,8 @@ char *make_argv(char *buf, size_t len, int argc, char **argv)
|
|||
if (strncmp(*argv, "--password", strlen("--password")) == 0) {
|
||||
arg = "--password=...";
|
||||
}
|
||||
left-= ut_snprintf(buf + len - left, left,
|
||||
"%s%c", arg, argc > 1 ? ' ' : 0);
|
||||
left-= snprintf(buf + len - left, left,
|
||||
"%s%c", arg, argc > 1 ? ' ' : 0);
|
||||
++argv; --argc;
|
||||
}
|
||||
|
||||
|
|
|
@ -441,7 +441,7 @@ log_online_open_bitmap_file_read_only(
|
|||
|
||||
xb_ad(name[0] != '\0');
|
||||
|
||||
ut_snprintf(bitmap_file->name, FN_REFLEN, "%s%s", srv_data_home, name);
|
||||
snprintf(bitmap_file->name, FN_REFLEN, "%s%s", srv_data_home, name);
|
||||
bitmap_file->file = os_file_create_simple_no_error_handling(
|
||||
0, bitmap_file->name,
|
||||
OS_FILE_OPEN, OS_FILE_READ_ONLY, true, &success);
|
||||
|
|
|
@ -24,7 +24,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
|||
#include <string.h>
|
||||
#include <zlib.h>
|
||||
|
||||
#if __GNUC__ >= 4 && defined(__x86_64__)
|
||||
#if defined(__GNUC__) && defined(__x86_64__)
|
||||
static int pclmul_enabled = 0;
|
||||
#endif
|
||||
|
||||
|
|
|
@ -212,24 +212,7 @@ xb_fil_cur_open(
|
|||
|
||||
posix_fadvise(cursor->file, 0, 0, POSIX_FADV_SEQUENTIAL);
|
||||
|
||||
/* Determine the page size */
|
||||
ulint flags = xb_get_space_flags(cursor->file);
|
||||
if (flags == ULINT_UNDEFINED) {
|
||||
xb_fil_cur_close(cursor);
|
||||
return(XB_FIL_CUR_SKIP);
|
||||
}
|
||||
|
||||
if (!fsp_flags_is_valid(flags, cursor->space_id)) {
|
||||
ulint cflags = fsp_flags_convert_from_101(flags);
|
||||
if (cflags == ULINT_UNDEFINED) {
|
||||
msg("[%02u] mariabackup: Error: Invalid "
|
||||
"tablespace flags: %x.\n", thread_n, uint(flags));
|
||||
return(XB_FIL_CUR_SKIP);
|
||||
}
|
||||
flags = cflags;
|
||||
}
|
||||
|
||||
const page_size_t page_size(flags);
|
||||
const page_size_t page_size(cursor->node->space->flags);
|
||||
cursor->page_size = page_size;
|
||||
|
||||
/* Allocate read buffer */
|
||||
|
|
|
@ -28,6 +28,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
|||
#include "write_filt.h"
|
||||
#include "fil_cur.h"
|
||||
#include "xtrabackup.h"
|
||||
#include <os0proc.h>
|
||||
|
||||
/************************************************************************
|
||||
Write-through page write filter. */
|
||||
|
@ -68,19 +69,22 @@ wf_incremental_init(xb_write_filt_ctxt_t *ctxt, char *dst_name,
|
|||
xb_fil_cur_t *cursor)
|
||||
{
|
||||
char meta_name[FN_REFLEN];
|
||||
ulint buf_size;
|
||||
xb_wf_incremental_ctxt_t *cp =
|
||||
&(ctxt->u.wf_incremental_ctxt);
|
||||
|
||||
ctxt->cursor = cursor;
|
||||
|
||||
/* allocate buffer for incremental backup (4096 pages) */
|
||||
buf_size = (cursor->page_size.physical() / 4 + 1)
|
||||
* cursor->page_size.physical();
|
||||
cp->delta_buf_base = static_cast<byte *>(malloc(buf_size));
|
||||
memset(cp->delta_buf_base, 0, buf_size);
|
||||
cp->delta_buf = static_cast<byte *>
|
||||
(ut_align(cp->delta_buf_base, cursor->page_size.physical()));
|
||||
cp->delta_buf_size = (cursor->page_size.physical() / 4)
|
||||
* cursor->page_size.physical();
|
||||
cp->delta_buf = (unsigned char *)os_mem_alloc_large(&cp->delta_buf_size);
|
||||
|
||||
if (!cp->delta_buf) {
|
||||
msg("[%02u] mariabackup: Error: "
|
||||
"cannot allocate %zu bytes\n",
|
||||
cursor->thread_n, (size_t) cp->delta_buf_size);
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
/* write delta meta info */
|
||||
snprintf(meta_name, sizeof(meta_name), "%s%s", dst_name,
|
||||
|
@ -184,8 +188,7 @@ static void
|
|||
wf_incremental_deinit(xb_write_filt_ctxt_t *ctxt)
|
||||
{
|
||||
xb_wf_incremental_ctxt_t *cp = &(ctxt->u.wf_incremental_ctxt);
|
||||
|
||||
free(cp->delta_buf_base);
|
||||
os_mem_free_large(cp->delta_buf, cp->delta_buf_size);
|
||||
}
|
||||
|
||||
/************************************************************************
|
||||
|
|
|
@ -30,7 +30,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
|||
|
||||
/* Incremental page filter context */
|
||||
typedef struct {
|
||||
byte *delta_buf_base;
|
||||
ulint delta_buf_size;
|
||||
byte *delta_buf;
|
||||
ulint npages;
|
||||
} xb_wf_incremental_ctxt_t;
|
||||
|
|
|
@ -2135,28 +2135,6 @@ check_if_skip_table(
|
|||
return(FALSE);
|
||||
}
|
||||
|
||||
/** @return the tablespace flags from a given data file
|
||||
@retval ULINT_UNDEFINED if the file is not readable */
|
||||
ulint xb_get_space_flags(pfs_os_file_t file)
|
||||
{
|
||||
byte *buf;
|
||||
byte *page;
|
||||
ulint flags;
|
||||
|
||||
buf = static_cast<byte *>(malloc(2 * UNIV_PAGE_SIZE));
|
||||
page = static_cast<byte *>(ut_align(buf, UNIV_PAGE_SIZE));
|
||||
|
||||
if (os_file_read(IORequestRead, file, page, 0, UNIV_PAGE_SIZE)) {
|
||||
flags = fsp_header_get_flags(page);
|
||||
} else {
|
||||
flags = ULINT_UNDEFINED;
|
||||
}
|
||||
|
||||
free(buf);
|
||||
|
||||
return(flags);
|
||||
}
|
||||
|
||||
const char*
|
||||
xb_get_copy_action(const char *dflt)
|
||||
{
|
||||
|
@ -2683,10 +2661,10 @@ xb_load_single_table_tablespace(
|
|||
name = static_cast<char*>(ut_malloc_nokey(pathlen));
|
||||
|
||||
if (dirname != NULL) {
|
||||
ut_snprintf(name, pathlen, "%s/%s", dirname, filname);
|
||||
snprintf(name, pathlen, "%s/%s", dirname, filname);
|
||||
name[pathlen - 5] = 0;
|
||||
} else {
|
||||
ut_snprintf(name, pathlen, "%s", filname);
|
||||
snprintf(name, pathlen, "%s", filname);
|
||||
name[pathlen - 5] = 0;
|
||||
}
|
||||
|
||||
|
@ -2804,8 +2782,8 @@ static dberr_t enumerate_ibd_files(process_single_tablespace_func_t callback)
|
|||
|
||||
dbpath = static_cast<char*>(ut_malloc_nokey(dbpath_len));
|
||||
}
|
||||
ut_snprintf(dbpath, dbpath_len,
|
||||
"%s/%s", fil_path_to_mysql_datadir, dbinfo.name);
|
||||
snprintf(dbpath, dbpath_len,
|
||||
"%s/%s", fil_path_to_mysql_datadir, dbinfo.name);
|
||||
os_normalize_path(dbpath);
|
||||
|
||||
if (check_if_skip_database_by_path(dbpath)) {
|
||||
|
@ -4311,12 +4289,12 @@ xtrabackup_apply_delta(
|
|||
|
||||
page_size = info.page_size.physical();
|
||||
page_size_shift = get_bit_shift(page_size);
|
||||
msg("mariabackup: page size for %s is %lu bytes\n",
|
||||
msg("mariabackup: page size for %s is %zu bytes\n",
|
||||
src_path, page_size);
|
||||
if (page_size_shift < 10 ||
|
||||
page_size_shift > UNIV_PAGE_SIZE_SHIFT_MAX) {
|
||||
msg("mariabackup: error: invalid value of page_size "
|
||||
"(%lu bytes) read from %s\n", page_size, meta_path);
|
||||
"(%zu bytes) read from %s\n", page_size, meta_path);
|
||||
goto error;
|
||||
}
|
||||
|
||||
|
@ -4418,10 +4396,29 @@ xtrabackup_apply_delta(
|
|||
if (off == 0) {
|
||||
/* Read tablespace size from page 0,
|
||||
and extend the file to specified size.*/
|
||||
os_offset_t n_pages = mach_read_from_4(buf + FSP_HEADER_OFFSET + FSP_SIZE);
|
||||
success = os_file_set_size(dst_path, dst_file, n_pages*page_size);
|
||||
if (!success)
|
||||
goto error;
|
||||
os_offset_t n_pages = mach_read_from_4(
|
||||
buf + FSP_HEADER_OFFSET + FSP_SIZE);
|
||||
if (mach_read_from_4(buf
|
||||
+ FIL_PAGE_SPACE_ID)) {
|
||||
if (!os_file_set_size(
|
||||
dst_path, dst_file,
|
||||
n_pages * page_size))
|
||||
goto error;
|
||||
} else if (fil_space_t* space
|
||||
= fil_space_acquire(0)) {
|
||||
/* The system tablespace can
|
||||
consist of multiple files. The
|
||||
first one has full tablespace
|
||||
size in page 0, but only the last
|
||||
file should be extended. */
|
||||
fil_node_t* n = UT_LIST_GET_FIRST(
|
||||
space->chain);
|
||||
bool fail = !strcmp(n->name, dst_path)
|
||||
&& !fil_space_extend(
|
||||
space, (ulint)n_pages);
|
||||
fil_space_release(space);
|
||||
if (fail) goto error;
|
||||
}
|
||||
}
|
||||
|
||||
success = os_file_write(IORequestWrite,
|
||||
|
|
|
@ -149,10 +149,6 @@ void xtrabackup_io_throttling(void);
|
|||
my_bool xb_write_delta_metadata(const char *filename,
|
||||
const xb_delta_info_t *info);
|
||||
|
||||
/** @return the tablespace flags from a given data file
|
||||
@retval ULINT_UNDEFINED if the file is not readable */
|
||||
ulint xb_get_space_flags(pfs_os_file_t file);
|
||||
|
||||
/************************************************************************
|
||||
Checks if a table specified as a name in the form "database/name" (InnoDB 5.6)
|
||||
or "./database/name.ibd" (InnoDB 5.5-) should be skipped from backup based on
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 7e53ab369815590ff92913b581d43eb7786f2fe2
|
||||
Subproject commit 63f841f78f520d7f3bcff1fe8cecec9d8c47829d
|
|
@ -2,8 +2,3 @@
|
|||
# suite.pm will make sure that all tests including this file
|
||||
# will be skipped unless this is a debug build.
|
||||
#
|
||||
# The test below is redundant
|
||||
|
||||
if (`select version() not like '%debug%'`) {
|
||||
--skip Needs a debug build
|
||||
}
|
||||
|
|
|
@ -1,14 +1,4 @@
|
|||
#
|
||||
# Check if server has support for loading plugins
|
||||
# suite.pm will make sure that all tests including this file
|
||||
# will be skipped unless dynamic ha_example plugin is available
|
||||
#
|
||||
if (`SELECT @@have_dynamic_loading != 'YES'`) {
|
||||
--skip Example plugin requires dynamic loading
|
||||
}
|
||||
|
||||
#
|
||||
# Check if the variable EXAMPLE_PLUGIN is set
|
||||
#
|
||||
if (!$HA_EXAMPLE_SO) {
|
||||
--skip Need example plugin
|
||||
}
|
||||
|
||||
|
|
|
@ -2,9 +2,3 @@
|
|||
# suite.pm will make sure that all tests including this file
|
||||
# will be skipped unless innodb is enabled
|
||||
#
|
||||
# The test below is redundant
|
||||
|
||||
if (`SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.ENGINES WHERE engine = 'innodb' AND support IN ('YES', 'DEFAULT', 'ENABLED')`)
|
||||
{
|
||||
--skip Test requires InnoDB.
|
||||
}
|
||||
|
|
|
@ -2,9 +2,3 @@
|
|||
# suite.pm will make sure that all tests including this file
|
||||
# will be skipped unless this is an embedded test run
|
||||
#
|
||||
# The test below is redundant
|
||||
|
||||
if (`select version() like '%embedded%'`) {
|
||||
This should never happen;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
--require r/not_windows.require
|
||||
disable_query_log;
|
||||
select convert(@@version_compile_os using latin1) NOT IN ("Win32","Win64","Windows") as "TRUE";
|
||||
enable_query_log;
|
||||
#
|
||||
# suite.pm will make sure that all tests including this file
|
||||
# will be skipped unless this is on Windows
|
||||
#
|
||||
|
|
15
mysql-test/include/show_gtid_list.inc
Normal file
15
mysql-test/include/show_gtid_list.inc
Normal file
|
@ -0,0 +1,15 @@
|
|||
# ==== Purpose ====
|
||||
#
|
||||
# Extract Gtid_list info from SHOW BINLOG EVENTS output masking
|
||||
# non-deterministic fields.
|
||||
#
|
||||
# ==== Usage ====
|
||||
#
|
||||
# [--let $binlog_file=filename
|
||||
#
|
||||
if ($binlog_file)
|
||||
{
|
||||
--let $_in_binlog_file=in '$binlog_file'
|
||||
}
|
||||
--replace_column 2 # 5 #
|
||||
--eval show binlog events $_in_binlog_file limit 1,1
|
|
@ -2791,7 +2791,7 @@ sub mysql_server_start($) {
|
|||
# Some InnoDB options are incompatible with the default bootstrap.
|
||||
# If they are used, re-bootstrap
|
||||
if ( $extra_opts and
|
||||
"@$extra_opts" =~ /--innodb[-_](?:page[-_]size|checksum[-_]algorithm|undo[-_]tablespaces|log[-_]group[-_]home[-_]dir|data[-_]home[-_]dir)/ )
|
||||
"@$extra_opts" =~ /--innodb[-_](?:page[-_]size|checksum[-_]algorithm|undo[-_]tablespaces|log[-_]group[-_]home[-_]dir|data[-_]home[-_]dir)|data[-_]file[-_]path/ )
|
||||
{
|
||||
mysql_install_db($mysqld, undef, $extra_opts);
|
||||
}
|
||||
|
|
|
@ -1168,3 +1168,112 @@ CAST('-1' AS UNSIGNED)
|
|||
18446744073709551615
|
||||
DROP TABLE t1;
|
||||
SET sql_mode=DEFAULT;
|
||||
#
|
||||
# MDEV-14376 Explicit CAST(CHAR(N)) erroneously escalates warnings to errors in STRICT_ALL_TABLES
|
||||
#
|
||||
SET sql_mode=STRICT_ALL_TABLES;
|
||||
SELECT CAST('xxx' AS CHAR(1));
|
||||
CAST('xxx' AS CHAR(1))
|
||||
x
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect CHAR(1) value: 'xxx'
|
||||
CREATE OR REPLACE TABLE t1 (a VARCHAR(1));
|
||||
INSERT INTO t1 VALUES (CAST('xxx' AS CHAR(1)));
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect CHAR(1) value: 'xxx'
|
||||
DROP TABLE t1;
|
||||
CREATE OR REPLACE TABLE t1 (a VARCHAR(3));
|
||||
INSERT INTO t1 VALUES ('xxx');
|
||||
UPDATE t1 SET a=CAST(a AS CHAR(1));
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect CHAR(1) value: 'xxx'
|
||||
DROP TABLE t1;
|
||||
BEGIN NOT ATOMIC
|
||||
DECLARE a VARCHAR(30) CHARACTER SET latin1;
|
||||
SET a=CAST('xxx' AS CHAR(1));
|
||||
END;
|
||||
$$
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect CHAR(1) value: 'xxx'
|
||||
BEGIN NOT ATOMIC
|
||||
DECLARE a VARCHAR(30) CHARACTER SET latin1;
|
||||
SET a=CAST(_latin1'xxx' AS CHAR(1) CHARACTER SET latin1);
|
||||
END;
|
||||
$$
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect CHAR(1) value: 'xxx'
|
||||
BEGIN NOT ATOMIC
|
||||
DECLARE a VARCHAR(30) CHARACTER SET latin1;
|
||||
SET a=CAST(_latin1'xxx' AS CHAR(1) CHARACTER SET utf8);
|
||||
END;
|
||||
$$
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect CHAR(1) value: 'xxx'
|
||||
BEGIN NOT ATOMIC
|
||||
DECLARE a VARCHAR(30) CHARACTER SET utf8;
|
||||
SET a=CAST('xxx' AS CHAR(1));
|
||||
END;
|
||||
$$
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect CHAR(1) value: 'xxx'
|
||||
BEGIN NOT ATOMIC
|
||||
DECLARE a VARCHAR(30) CHARACTER SET utf8;
|
||||
SET a=CAST(_latin1'xxx' AS CHAR(1) CHARACTER SET latin1);
|
||||
END;
|
||||
$$
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect CHAR(1) value: 'xxx'
|
||||
BEGIN NOT ATOMIC
|
||||
DECLARE a VARCHAR(30) CHARACTER SET utf8;
|
||||
SET a=CAST(_latin1'xxx' AS CHAR(1) CHARACTER SET utf8);
|
||||
END;
|
||||
$$
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect CHAR(1) value: 'xxx'
|
||||
# Conversion problems still escalate warnings to errors (without right truncation)
|
||||
BEGIN NOT ATOMIC
|
||||
DECLARE a VARCHAR(30) CHARACTER SET utf8;
|
||||
SET a=CAST(_utf8 0xD18F AS CHAR(1) CHARACTER SET latin1);
|
||||
END;
|
||||
$$
|
||||
ERROR HY000: Cannot convert 'utf8' character 0xD18F to 'latin1'
|
||||
# Conversion problems still escalate warnings to errors (with right truncation)
|
||||
BEGIN NOT ATOMIC
|
||||
DECLARE a VARCHAR(30) CHARACTER SET utf8;
|
||||
SET a=CAST(_utf8 0xD18FD18F AS CHAR(1) CHARACTER SET latin1);
|
||||
END;
|
||||
$$
|
||||
ERROR HY000: Cannot convert 'utf8' character 0xD18F to 'latin1'
|
||||
# CAST(number AS CHAR) escalates warnings to errors on truncation
|
||||
CREATE OR REPLACE TABLE t1 (a VARCHAR(10));
|
||||
INSERT INTO t1 VALUES (CAST(123 AS CHAR(1)));
|
||||
ERROR 22007: Truncated incorrect CHAR(1) value: '123'
|
||||
DROP TABLE t1;
|
||||
CREATE OR REPLACE TABLE t1 (a VARCHAR(10));
|
||||
INSERT INTO t1 VALUES ('1');
|
||||
UPDATE t1 SET a=CAST(123 AS CHAR(1));
|
||||
ERROR 22007: Truncated incorrect CHAR(1) value: '123'
|
||||
DROP TABLE t1;
|
||||
BEGIN NOT ATOMIC
|
||||
DECLARE a VARCHAR(10);
|
||||
SET a=CAST(123 AS CHAR(1));
|
||||
END;
|
||||
$$
|
||||
ERROR 22007: Truncated incorrect CHAR(1) value: '123'
|
||||
# CAST(temporal AS CHAR) escalates warnings to errors on truncation
|
||||
CREATE OR REPLACE TABLE t1 (a VARCHAR(10));
|
||||
INSERT INTO t1 VALUES (CAST(TIME'10:20:30' AS CHAR(1)));
|
||||
ERROR 22007: Truncated incorrect CHAR(1) value: '10:20:30'
|
||||
DROP TABLE t1;
|
||||
CREATE OR REPLACE TABLE t1 (a VARCHAR(10));
|
||||
INSERT INTO t1 VALUES ('1');
|
||||
UPDATE t1 SET a=CAST(TIME'10:20:30' AS CHAR(1));
|
||||
ERROR 22007: Truncated incorrect CHAR(1) value: '10:20:30'
|
||||
DROP TABLE t1;
|
||||
BEGIN NOT ATOMIC
|
||||
DECLARE a VARCHAR(10);
|
||||
SET a=CAST(TIME'10:20:30' AS CHAR(1));
|
||||
END;
|
||||
$$
|
||||
ERROR 22007: Truncated incorrect CHAR(1) value: '10:20:30'
|
||||
SET sql_mode=DEFAULT;
|
||||
|
|
|
@ -230,7 +230,7 @@ insert into t2 (a) values (1023);
|
|||
do (f2(23));
|
||||
Warnings:
|
||||
Error 1062 Duplicate entry '23' for key 'a'
|
||||
Note 4092 At line 4 in test.f2
|
||||
Note 4093 At line 4 in test.f2
|
||||
select * from t2;
|
||||
a
|
||||
1023
|
||||
|
|
|
@ -160,7 +160,7 @@ Note 1050 Table 'v1' already exists
|
|||
DROP VIEW IF EXISTS v1;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
Warnings:
|
||||
Note 4090 Unknown VIEW: 'test.v1'
|
||||
Note 4091 Unknown VIEW: 'test.v1'
|
||||
SHOW BINLOG EVENTS;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
# # Format_desc 1 # VER
|
||||
|
|
|
@ -55,5 +55,5 @@ id
|
|||
DROP VIEW IF EXISTS v1;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
Warnings:
|
||||
Note 4090 Unknown VIEW: 'test.v1'
|
||||
Note 4091 Unknown VIEW: 'test.v1'
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -63,3 +63,61 @@ connection root;
|
|||
revoke all privileges on mysqltest.v1 from mysqltest_1@localhost;
|
||||
drop user mysqltest_1@localhost;
|
||||
drop database mysqltest;
|
||||
#
|
||||
# MDEV-13453: privileges checking for CTE
|
||||
#
|
||||
create database db;
|
||||
use db;
|
||||
create table t1 (i int);
|
||||
insert into t1
|
||||
values (3), (7), (1), (4), (2), (3), (1);
|
||||
create table t2 (a int, b int);
|
||||
insert into t2
|
||||
values (3,10), (7,11), (1,17), (4,15), (2,11), (3,10), (1,15);
|
||||
create user foo@localhost;
|
||||
grant SELECT on db.t1 to foo@localhost;
|
||||
grant SELECT(a) on db.t2 to foo@localhost;
|
||||
connect con1,localhost,foo,,;
|
||||
use db;
|
||||
with cte as (select * from t1 where i < 4)
|
||||
select * from cte;
|
||||
i
|
||||
3
|
||||
1
|
||||
2
|
||||
3
|
||||
1
|
||||
with cte as (select * from t1 where i < 4 group by i)
|
||||
select * from cte;
|
||||
i
|
||||
1
|
||||
2
|
||||
3
|
||||
with cte as (select * from t1 where i < 4)
|
||||
select * from cte cte1 where i < 2 union select * from cte cte2 where i > 2;
|
||||
i
|
||||
1
|
||||
3
|
||||
with cte as (select * from t1 where i < 4 group by i)
|
||||
select * from cte cte1 where i < 2 union select * from cte cte2 where i > 2;
|
||||
i
|
||||
1
|
||||
3
|
||||
with cte as (select b from t2 where a < 4)
|
||||
select * from cte cte1 where b < 15 union select * from cte cte2 where b > 15;
|
||||
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for column 'b' in table 't2'
|
||||
with cte as (select a from t2 where a < 4)
|
||||
select * from cte cte1 where a < 2 union select * from cte cte2 where a > 2;
|
||||
a
|
||||
1
|
||||
3
|
||||
connection default;
|
||||
revoke SELECT on db.t1 from foo@localhost;
|
||||
connection con1;
|
||||
with cte as (select * from t1 where i < 4)
|
||||
select * from cte;
|
||||
ERROR 42000: SELECT command denied to user 'foo'@'localhost' for table 't1'
|
||||
disconnect con1;
|
||||
connection default;
|
||||
drop database db;
|
||||
drop user foo@localhost;
|
||||
|
|
|
@ -209,10 +209,10 @@ Note 1051 Unknown table 'test.table1'
|
|||
Note 1051 Unknown table 'test.table2'
|
||||
DROP VIEW IF EXISTS view1,view2,view3,view4;
|
||||
Warnings:
|
||||
Note 4090 Unknown VIEW: 'test.view1'
|
||||
Note 4090 Unknown VIEW: 'test.view2'
|
||||
Note 4090 Unknown VIEW: 'test.view3'
|
||||
Note 4090 Unknown VIEW: 'test.view4'
|
||||
Note 4091 Unknown VIEW: 'test.view1'
|
||||
Note 4091 Unknown VIEW: 'test.view2'
|
||||
Note 4091 Unknown VIEW: 'test.view3'
|
||||
Note 4091 Unknown VIEW: 'test.view4'
|
||||
|
||||
# Test error message when trigger does not find table
|
||||
CREATE TABLE table1(a int);
|
||||
|
|
|
@ -3443,8 +3443,8 @@ EXECUTE stmt USING @a,@a;
|
|||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` varchar(21) DEFAULT NULL,
|
||||
`b` varchar(21) DEFAULT NULL
|
||||
`a` varchar(20) DEFAULT NULL,
|
||||
`b` varchar(20) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
#
|
||||
|
|
|
@ -28,6 +28,9 @@ NULL
|
|||
select json_value('{"key1": [1,2,3], "key1":123}', '$.key1');
|
||||
json_value('{"key1": [1,2,3], "key1":123}', '$.key1')
|
||||
123
|
||||
select JSON_VALUE('{ "x": [0,1], "y": "[0,1]", "z": "Mon\\\"t\\\"y" }','$.z');
|
||||
JSON_VALUE('{ "x": [0,1], "y": "[0,1]", "z": "Mon\\\"t\\\"y" }','$.z')
|
||||
Mon"t"y
|
||||
select json_query('{"key1":{"a":1, "b":[1,2]}}', '$.key2');
|
||||
json_query('{"key1":{"a":1, "b":[1,2]}}', '$.key2')
|
||||
NULL
|
||||
|
@ -725,6 +728,9 @@ json_contains_path('{"foo":"bar"}', 'one', '$[]')
|
|||
NULL
|
||||
Warnings:
|
||||
Warning 4042 Syntax error in JSON path in argument 3 to function 'json_contains_path' at position 3
|
||||
select JSON_VALID(0x36f0c8dccd83c5eac156da);
|
||||
JSON_VALID(0x36f0c8dccd83c5eac156da)
|
||||
0
|
||||
#
|
||||
# Start of 10.3 tests
|
||||
#
|
||||
|
|
|
@ -590,7 +590,7 @@ DROP PROCEDURE p1;
|
|||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Error 54321 MESSAGE_TEXT text
|
||||
Note 4092 At line 16 in test.p1
|
||||
Note 4093 At line 16 in test.p1
|
||||
CREATE PROCEDURE p1()
|
||||
BEGIN
|
||||
DECLARE var INT;
|
||||
|
|
|
@ -89,6 +89,21 @@ ST_AsGeoJSON(ST_GeomFromText("POINT(10 11)"), 100, 1)
|
|||
SELECT ST_AsGeoJSON(ST_GeomFromText("POINT(10 11)"), 100, 5);
|
||||
ST_AsGeoJSON(ST_GeomFromText("POINT(10 11)"), 100, 5)
|
||||
{"bbox": [10, 11, 10, 11], "type": "Point", "coordinates": [10, 11]}
|
||||
SELECT st_astext(st_geomfromgeojson('{"type": "MultiLineString","coordinates": []}')) as a;
|
||||
a
|
||||
NULL
|
||||
Warnings:
|
||||
Warning 4076 Incorrect GeoJSON format - empty 'coordinates' array.
|
||||
SELECT st_astext(st_geomfromgeojson('{"type": "Polygon","coordinates": []}')) as a;
|
||||
a
|
||||
NULL
|
||||
Warnings:
|
||||
Warning 4076 Incorrect GeoJSON format - empty 'coordinates' array.
|
||||
SELECT st_astext(st_geomfromgeojson('{"type": "MultiPolygon","coordinates": []}')) as a;
|
||||
a
|
||||
NULL
|
||||
Warnings:
|
||||
Warning 4076 Incorrect GeoJSON format - empty 'coordinates' array.
|
||||
#
|
||||
# End of 10.2 tests
|
||||
#
|
||||
|
|
|
@ -4390,7 +4390,7 @@ SELECT ST_BUFFER(Point(1,1), Point(1,1));
|
|||
ERROR HY000: Illegal parameter data type geometry for operation 'st_buffer'
|
||||
PREPARE stmt FROM 'CREATE TABLE t1 AS SELECT ST_ENVELOPE(?) AS g';
|
||||
EXECUTE stmt USING 1;
|
||||
ERROR HY000: Illegal parameter data type bigint for operation 'st_envelope'
|
||||
ERROR HY000: Illegal parameter data type int for operation 'st_envelope'
|
||||
EXECUTE stmt USING POINT(1,1);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
|
@ -4404,7 +4404,7 @@ DROP TABLE t1;
|
|||
DEALLOCATE PREPARE stmt;
|
||||
PREPARE stmt FROM 'CREATE TABLE t1 AS SELECT ST_BUFFER(?,?) AS g';
|
||||
EXECUTE stmt USING 1,1;
|
||||
ERROR HY000: Illegal parameter data type bigint for operation 'st_buffer'
|
||||
ERROR HY000: Illegal parameter data type int for operation 'st_buffer'
|
||||
EXECUTE stmt USING POINT(1,1),POINT(1,1);
|
||||
ERROR HY000: Illegal parameter data type geometry for operation 'st_buffer'
|
||||
EXECUTE stmt USING POINT(1,1),0;
|
||||
|
@ -4455,7 +4455,7 @@ SELECT POINT(1,POINT(1,1));
|
|||
ERROR HY000: Illegal parameter data type geometry for operation 'point'
|
||||
PREPARE stmt FROM 'CREATE TABLE t1 AS SELECT ST_GEOMFROMTEXT(?,?) AS g';
|
||||
EXECUTE stmt USING 1,1;
|
||||
ERROR HY000: Illegal parameter data type bigint for operation 'st_geometryfromtext'
|
||||
ERROR HY000: Illegal parameter data type int for operation 'st_geometryfromtext'
|
||||
EXECUTE stmt USING POINT(1,1),POINT(1,1);
|
||||
ERROR HY000: Illegal parameter data type geometry for operation 'st_geometryfromtext'
|
||||
EXECUTE stmt USING 'POINT(1 1)',1;
|
||||
|
|
|
@ -1428,7 +1428,7 @@ Warnings:
|
|||
Note 1305 FUNCTION test.test_function does not exist
|
||||
drop view if exists v1;
|
||||
Warnings:
|
||||
Note 4090 Unknown VIEW: 'test.v1'
|
||||
Note 4091 Unknown VIEW: 'test.v1'
|
||||
create table test (col1 varchar(30));
|
||||
create function test_function() returns varchar(30)
|
||||
begin
|
||||
|
|
|
@ -689,4 +689,17 @@ View Create View character_set_client collation_connection
|
|||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS (select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1`) union select `__3`.`c` AS `c`,`__3`.`d` AS `d` from ((select `test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t2`) intersect (select `test`.`t3`.`e` AS `e`,`test`.`t3`.`f` AS `f` from `test`.`t3`)) `__3` union (select 4 AS `4`,4 AS `4`) latin1 latin1_swedish_ci
|
||||
drop view v1;
|
||||
drop tables t1,t2,t3;
|
||||
#
|
||||
# MDEV-14346:incorrect result of intersect with ANY/ALL/IN subquery
|
||||
#
|
||||
CREATE TABLE t (i INT);
|
||||
INSERT INTO t VALUES (1),(2);
|
||||
SELECT * FROM t WHERE i != ANY ( SELECT 6 INTERSECT SELECT 3 );
|
||||
i
|
||||
select i from t where
|
||||
exists ((select 6 as r from dual having t.i <> 6)
|
||||
intersect
|
||||
(select 3 from dual having t.i <> 3));
|
||||
i
|
||||
drop table t;
|
||||
# End of 10.3 tests
|
||||
|
|
|
@ -1258,3 +1258,4 @@ DELIMITER ;
|
|||
ROLLBACK /* added by mysqlbinlog */;
|
||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
|
||||
mysqlbinlog Ver VER for OS at ARCH
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
TRUE
|
||||
1
|
|
@ -3159,3 +3159,51 @@ pk
|
|||
2
|
||||
3
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-13994: Bad join results with orderby_uses_equalities=on
|
||||
#
|
||||
CREATE TABLE books (
|
||||
id int(16) NOT NULL AUTO_INCREMENT,
|
||||
library_id int(16) NOT NULL DEFAULT 0,
|
||||
wings_id int(12) NOT NULL DEFAULT 0,
|
||||
scheduled_for_removal int(1) DEFAULT 0,
|
||||
PRIMARY KEY (id),
|
||||
KEY library_idx (library_id)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
|
||||
INSERT INTO books VALUES (32625,8663,707,0),(32624,8663,505,1);
|
||||
CREATE TABLE wings (
|
||||
id int(11) NOT NULL AUTO_INCREMENT,
|
||||
department_id int(11) DEFAULT NULL,
|
||||
PRIMARY KEY (id)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
|
||||
INSERT INTO wings VALUES (505,11745),(707,11768);
|
||||
SET @save_optimizer_switch=@@optimizer_switch;
|
||||
SET optimizer_switch='orderby_uses_equalities=off';
|
||||
SELECT wings.id as wing_id, wings.department_id FROM wings
|
||||
WHERE wings.id IN ( SELECT books.wings_id FROM books
|
||||
WHERE books.library_id = 8663 AND
|
||||
books.scheduled_for_removal=0 )
|
||||
ORDER BY wings.id;
|
||||
wing_id department_id
|
||||
707 11768
|
||||
SET optimizer_switch='orderby_uses_equalities=on';
|
||||
SELECT wings.id as wing_id, wings.department_id FROM wings
|
||||
WHERE wings.id IN ( SELECT books.wings_id FROM books
|
||||
WHERE books.library_id = 8663 AND
|
||||
books.scheduled_for_removal=0 )
|
||||
ORDER BY wings.id;
|
||||
wing_id department_id
|
||||
707 11768
|
||||
explain extended SELECT wings.id as wing_id, wings.department_id FROM wings
|
||||
WHERE wings.id IN ( SELECT books.wings_id FROM books
|
||||
WHERE books.library_id = 8663 AND
|
||||
books.scheduled_for_removal=0 )
|
||||
ORDER BY wings.id;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY <subquery2> ALL distinct_key NULL NULL NULL 1 100.00 Using temporary; Using filesort
|
||||
1 PRIMARY wings eq_ref PRIMARY PRIMARY 4 test.books.wings_id 1 100.00
|
||||
2 MATERIALIZED books ref library_idx library_idx 4 const 1 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`wings`.`id` AS `wing_id`,`test`.`wings`.`department_id` AS `department_id` from `test`.`wings` semi join (`test`.`books`) where `test`.`books`.`library_id` = 8663 and `test`.`books`.`scheduled_for_removal` = 0 and `test`.`wings`.`id` = `test`.`books`.`wings_id` order by `test`.`wings`.`id`
|
||||
set optimizer_switch= @save_optimizer_switch;
|
||||
DROP TABLE books, wings;
|
||||
|
|
|
@ -48,3 +48,76 @@ where key1<3 or key2<3;
|
|||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index_merge key1,key2 key1,key2 5,5 NULL # Using sort_union(key1,key2); Using where
|
||||
drop table t0, t1;
|
||||
#
|
||||
# MDEV-14071: wrong results with orderby_uses_equalities=on
|
||||
# (duplicate of MDEV-13994)
|
||||
#
|
||||
CREATE TABLE t1 (i int, j int, z int,PRIMARY KEY (i,j), KEY (z)) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (i int, j int, PRIMARY KEY (i,j)) ENGINE=InnoDB;
|
||||
CREATE TABLE t3 (j int, n varchar(5), PRIMARY KEY (j)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES
|
||||
(127,0,1),(188,0,1),(206,0,1),(218,0,1),(292,0,1),(338,0,1),(375,0,1),
|
||||
(381,0,1),(409,0,1),(466,0,1),(469,0,1),(498,0,1),(656,0,1);
|
||||
INSERT INTO t1 VALUES
|
||||
(77,4,0),(86,7,0),(96,6,0),(96,7,0),(99,9,0),(99,10,0),(99,11,0),(104,4,0),
|
||||
(106,5,0),(148,6,0),(177,6,0),(181,5,0),(188,8,0),(218,8,0),(253,7,0),
|
||||
(268,4,0),(338,4,0),(409,7,0),(466,8,0),(469,8,0),(498,8,0),(656,8,0);
|
||||
INSERT INTO t2 VALUES
|
||||
(127,7),(188,8),(188,9),(206,6),(218,8),(218,9),(292,7),(338,4),(338,5),
|
||||
(375,6),(381,5),(409,7),(409,8),(466,8),(466,9),(469,8),(469,9),(498,8),
|
||||
(498,9),(656,8),(656,9);
|
||||
INSERT INTO t3 VALUES
|
||||
(4,'four'),(5,'five'),(6,'six'),(7,'seven'),(8,'eight'),(9,'nine');
|
||||
SET @save_optimizer_switch=@@optimizer_switch;
|
||||
SET optimizer_switch='orderby_uses_equalities=off';
|
||||
SELECT i,n
|
||||
FROM t1 INNER JOIN t2 USING (i,j) LEFT JOIN t3 USING (j)
|
||||
WHERE i IN (SELECT i FROM t1 WHERE z=1) AND z=0 ORDER BY i;
|
||||
i n
|
||||
188 eight
|
||||
218 eight
|
||||
338 four
|
||||
409 seven
|
||||
466 eight
|
||||
469 eight
|
||||
498 eight
|
||||
656 eight
|
||||
SELECT i,n
|
||||
FROM t1 x INNER JOIN t2 USING (i,j) LEFT JOIN t3 USING (j)
|
||||
WHERE EXISTS (SELECT * FROM t1 WHERE i=x.i AND z=1) AND z=0 ORDER BY i;
|
||||
i n
|
||||
188 eight
|
||||
218 eight
|
||||
338 four
|
||||
409 seven
|
||||
466 eight
|
||||
469 eight
|
||||
498 eight
|
||||
656 eight
|
||||
SET optimizer_switch='orderby_uses_equalities=on';
|
||||
SELECT i,n
|
||||
FROM t1 INNER JOIN t2 USING (i,j) LEFT JOIN t3 USING (j)
|
||||
WHERE i IN (SELECT i FROM t1 WHERE z=1) AND z=0 ORDER BY i;
|
||||
i n
|
||||
188 eight
|
||||
218 eight
|
||||
338 four
|
||||
409 seven
|
||||
466 eight
|
||||
469 eight
|
||||
498 eight
|
||||
656 eight
|
||||
SELECT i,n
|
||||
FROM t1 x INNER JOIN t2 USING (i,j) LEFT JOIN t3 USING (j)
|
||||
WHERE EXISTS (SELECT * FROM t1 WHERE i=x.i AND z=1) AND z=0 ORDER BY i;
|
||||
i n
|
||||
188 eight
|
||||
218 eight
|
||||
338 four
|
||||
409 seven
|
||||
466 eight
|
||||
469 eight
|
||||
498 eight
|
||||
656 eight
|
||||
set optimizer_switch= @save_optimizer_switch;
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
|
|
@ -415,7 +415,7 @@ select @@profiling;
|
|||
drop table if exists t1, t2, t3;
|
||||
drop view if exists v1;
|
||||
Warnings:
|
||||
Note 4090 Unknown VIEW: 'test.v1'
|
||||
Note 4091 Unknown VIEW: 'test.v1'
|
||||
drop function if exists f1;
|
||||
set session profiling = OFF;
|
||||
set global profiling_history_size= @start_value;
|
||||
|
|
|
@ -3388,7 +3388,7 @@ CREATE TEMPORARY TABLE tmp1 AS SELECT @a AS c1;
|
|||
SHOW CREATE TABLE tmp1;
|
||||
Table Create Table
|
||||
tmp1 CREATE TEMPORARY TABLE `tmp1` (
|
||||
`c1` bigint(20) DEFAULT NULL
|
||||
`c1` bigint(20) unsigned DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
SELECT @a, @a = b'10100100101';
|
||||
@a @a = b'10100100101'
|
||||
|
@ -3478,7 +3478,7 @@ CREATE TEMPORARY TABLE tmp1 AS SELECT @a AS c1;
|
|||
SHOW CREATE TABLE tmp1;
|
||||
Table Create Table
|
||||
tmp1 CREATE TEMPORARY TABLE `tmp1` (
|
||||
`c1` bigint(20) DEFAULT NULL
|
||||
`c1` bigint(20) unsigned DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
SELECT @a, @a = 2010;
|
||||
@a @a = 2010
|
||||
|
@ -3550,7 +3550,7 @@ CREATE TEMPORARY TABLE tmp1 AS SELECT @a AS c1;
|
|||
SHOW CREATE TABLE tmp1;
|
||||
Table Create Table
|
||||
tmp1 CREATE TEMPORARY TABLE `tmp1` (
|
||||
`c1` longblob DEFAULT NULL
|
||||
`c1` longtext DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
SELECT @a, @a = REPEAT('a', 16);
|
||||
@a @a = REPEAT('a', 16)
|
||||
|
@ -3568,7 +3568,7 @@ CREATE TEMPORARY TABLE tmp1 AS SELECT @a AS c1;
|
|||
SHOW CREATE TABLE tmp1;
|
||||
Table Create Table
|
||||
tmp1 CREATE TEMPORARY TABLE `tmp1` (
|
||||
`c1` longblob DEFAULT NULL
|
||||
`c1` longtext DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
SELECT @a, @a = REPEAT('b', 16);
|
||||
@a @a = REPEAT('b', 16)
|
||||
|
@ -3586,7 +3586,7 @@ CREATE TEMPORARY TABLE tmp1 AS SELECT @a AS c1;
|
|||
SHOW CREATE TABLE tmp1;
|
||||
Table Create Table
|
||||
tmp1 CREATE TEMPORARY TABLE `tmp1` (
|
||||
`c1` longblob DEFAULT NULL
|
||||
`c1` longtext DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
SELECT @a, @a = REPEAT('c', 16);
|
||||
@a @a = REPEAT('c', 16)
|
||||
|
@ -3604,7 +3604,7 @@ CREATE TEMPORARY TABLE tmp1 AS SELECT @a AS c1;
|
|||
SHOW CREATE TABLE tmp1;
|
||||
Table Create Table
|
||||
tmp1 CREATE TEMPORARY TABLE `tmp1` (
|
||||
`c1` longblob DEFAULT NULL
|
||||
`c1` longtext DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
SELECT @a, @a = REPEAT('d', 16);
|
||||
@a @a = REPEAT('d', 16)
|
||||
|
@ -3622,7 +3622,7 @@ CREATE TEMPORARY TABLE tmp1 AS SELECT @a AS c1;
|
|||
SHOW CREATE TABLE tmp1;
|
||||
Table Create Table
|
||||
tmp1 CREATE TEMPORARY TABLE `tmp1` (
|
||||
`c1` longblob DEFAULT NULL
|
||||
`c1` longtext DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
SELECT @a, @a = REPEAT('e', 16);
|
||||
@a @a = REPEAT('e', 16)
|
||||
|
@ -3640,7 +3640,7 @@ CREATE TEMPORARY TABLE tmp1 AS SELECT @a AS c1;
|
|||
SHOW CREATE TABLE tmp1;
|
||||
Table Create Table
|
||||
tmp1 CREATE TEMPORARY TABLE `tmp1` (
|
||||
`c1` longblob DEFAULT NULL
|
||||
`c1` longtext DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
SELECT @a, @a = REPEAT('f', 16);
|
||||
@a @a = REPEAT('f', 16)
|
||||
|
@ -3766,7 +3766,7 @@ CREATE TEMPORARY TABLE tmp1 AS SELECT @a AS c1;
|
|||
SHOW CREATE TABLE tmp1;
|
||||
Table Create Table
|
||||
tmp1 CREATE TEMPORARY TABLE `tmp1` (
|
||||
`c1` longblob DEFAULT NULL
|
||||
`c1` longtext DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
SELECT @a, @a = 'aaa';
|
||||
@a @a = 'aaa'
|
||||
|
@ -3784,7 +3784,7 @@ CREATE TEMPORARY TABLE tmp1 AS SELECT @a AS c1;
|
|||
SHOW CREATE TABLE tmp1;
|
||||
Table Create Table
|
||||
tmp1 CREATE TEMPORARY TABLE `tmp1` (
|
||||
`c1` longblob DEFAULT NULL
|
||||
`c1` longtext DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
SELECT @a, @a = 'aaa';
|
||||
@a @a = 'aaa'
|
||||
|
@ -4407,7 +4407,7 @@ EXECUTE stmt USING 10;
|
|||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` bigint(21) NOT NULL
|
||||
`c1` int(2) NOT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
EXECUTE stmt USING 10.123;
|
||||
|
@ -4614,10 +4614,10 @@ EXECUTE IMMEDIATE
|
|||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` bigint(21) NOT NULL,
|
||||
`a` bigint(20) NOT NULL,
|
||||
`b` decimal(3,1) DEFAULT NULL,
|
||||
`c` double NOT NULL,
|
||||
`d` varchar(3) NOT NULL
|
||||
`d` tinytext NOT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
EXECUTE IMMEDIATE
|
||||
|
@ -4626,7 +4626,7 @@ EXECUTE IMMEDIATE
|
|||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` bigint(21) NOT NULL,
|
||||
`a` int(2) NOT NULL,
|
||||
`b` decimal(3,1) DEFAULT NULL,
|
||||
`c` double NOT NULL,
|
||||
`d` varchar(3) NOT NULL
|
||||
|
@ -4992,3 +4992,159 @@ ERROR 42000: OUT or INOUT argument 1 for routine test.p1 is not a variable or NE
|
|||
EXECUTE IMMEDIATE 'CALL p1(?)' USING IGNORE;
|
||||
ERROR 42000: OUT or INOUT argument 1 for routine test.p1 is not a variable or NEW pseudo-variable in BEFORE trigger
|
||||
DROP PROCEDURE p1;
|
||||
#
|
||||
# MDEV-14434 Wrong result for CHARSET(CONCAT(?,const))
|
||||
#
|
||||
SET NAMES utf8;
|
||||
EXECUTE IMMEDIATE "SELECT CHARSET(CONCAT(5,_latin1'a'))";
|
||||
CHARSET(CONCAT(5,_latin1'a'))
|
||||
latin1
|
||||
EXECUTE IMMEDIATE "SELECT CHARSET(CONCAT(?,_latin1'a'))" USING 5;
|
||||
CHARSET(CONCAT(?,_latin1'a'))
|
||||
latin1
|
||||
EXECUTE IMMEDIATE "SELECT CHARSET(CONCAT(?,_latin1'a'))" USING 5.5;
|
||||
CHARSET(CONCAT(?,_latin1'a'))
|
||||
latin1
|
||||
EXECUTE IMMEDIATE "SELECT CHARSET(CONCAT(?,_latin1'a'))" USING 5.5e0;
|
||||
CHARSET(CONCAT(?,_latin1'a'))
|
||||
latin1
|
||||
EXECUTE IMMEDIATE "SELECT CHARSET(CONCAT(?,_latin1'a'))" USING TIME'10:20:30';
|
||||
CHARSET(CONCAT(?,_latin1'a'))
|
||||
latin1
|
||||
EXECUTE IMMEDIATE "SELECT CHARSET(CONCAT(?,_latin1'a'))" USING TIMESTAMP'2001-01-01 10:20:30';
|
||||
CHARSET(CONCAT(?,_latin1'a'))
|
||||
latin1
|
||||
EXECUTE IMMEDIATE "SELECT COERCIBILITY(?)" USING 5;
|
||||
COERCIBILITY(?)
|
||||
5
|
||||
EXECUTE IMMEDIATE "SELECT COERCIBILITY(?)" USING 5.5;
|
||||
COERCIBILITY(?)
|
||||
5
|
||||
EXECUTE IMMEDIATE "SELECT COERCIBILITY(?)" USING 5.5e0;
|
||||
COERCIBILITY(?)
|
||||
5
|
||||
EXECUTE IMMEDIATE "SELECT COERCIBILITY(?)" USING TIME'10:20:30';
|
||||
COERCIBILITY(?)
|
||||
5
|
||||
EXECUTE IMMEDIATE "SELECT COERCIBILITY(?)" USING TIMESTAMP'2001-01-01 10:20:30';
|
||||
COERCIBILITY(?)
|
||||
5
|
||||
#
|
||||
# MDEV-14435 Different UNSIGNED flag of out user variable for YEAR parameter for direct vs prepared CALL
|
||||
#
|
||||
CREATE PROCEDURE p1(OUT v INT UNSIGNED) SET v = 2010;
|
||||
CALL p1(@a);
|
||||
PREPARE stmt FROM 'CALL p1(?)';
|
||||
EXECUTE stmt USING @b;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
CREATE TABLE t1 AS SELECT @a AS a, @b AS b;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` bigint(20) unsigned DEFAULT NULL,
|
||||
`b` bigint(20) unsigned DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
DROP PROCEDURE p1;
|
||||
CREATE PROCEDURE p1(OUT v YEAR) SET v = 2010;
|
||||
CALL p1(@a);
|
||||
PREPARE stmt FROM 'CALL p1(?)';
|
||||
EXECUTE stmt USING @b;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
CREATE TABLE t1 AS SELECT @a AS a, @b AS b;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` bigint(20) unsigned DEFAULT NULL,
|
||||
`b` bigint(20) unsigned DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
DROP PROCEDURE p1;
|
||||
CREATE PROCEDURE p1(OUT v BIT(16)) SET v = 2010;
|
||||
CALL p1(@a);
|
||||
PREPARE stmt FROM 'CALL p1(?)';
|
||||
EXECUTE stmt USING @b;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
CREATE TABLE t1 AS SELECT @a AS a, @b AS b;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` bigint(20) unsigned DEFAULT NULL,
|
||||
`b` bigint(20) unsigned DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
DROP PROCEDURE p1;
|
||||
#
|
||||
# MDEV-14454 Binary protocol returns wrong collation ID for SP OUT parameters
|
||||
#
|
||||
CREATE PROCEDURE p1(OUT v CHAR(32) CHARACTER SET utf8) SET v='aaa';
|
||||
PREPARE stmt1 FROM 'CALL p1(?)';
|
||||
EXECUTE stmt1 USING @a;
|
||||
CREATE TABLE t1 AS SELECT @a AS c1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` longtext CHARACTER SET utf8 DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
DROP PROCEDURE p1;
|
||||
#
|
||||
# MDEV-14467 Item_param: replace {INT|DECIMAL|REAL|STRING|TIME}_VALUE with Type_handler
|
||||
#
|
||||
EXECUTE IMMEDIATE 'EXPLAIN EXTENDED SELECT 1 FROM DUAL LIMIT ?' USING 10;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select 1 AS `1` limit 10
|
||||
EXECUTE IMMEDIATE 'EXPLAIN EXTENDED SELECT 1 FROM DUAL LIMIT ?' USING 10.1;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select 1 AS `1` limit 10
|
||||
EXECUTE IMMEDIATE 'EXPLAIN EXTENDED SELECT 1 FROM DUAL LIMIT ?' USING 10.1e0;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select 1 AS `1` limit 10
|
||||
EXECUTE IMMEDIATE 'EXPLAIN EXTENDED SELECT 1 FROM DUAL LIMIT ?' USING '10';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select 1 AS `1` limit 10
|
||||
EXECUTE IMMEDIATE 'EXPLAIN EXTENDED SELECT 1 FROM DUAL LIMIT ?' USING TIME'10:10:10';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
Warnings:
|
||||
Note 1003 select 1 AS `1` limit 101010
|
||||
EXECUTE IMMEDIATE 'CREATE OR REPLACE TABLE t1 AS SELECT 1 AS a,? AS b' USING 1;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` int(1) NOT NULL,
|
||||
`b` int(1) NOT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
EXECUTE IMMEDIATE 'CREATE OR REPLACE TABLE t1 AS SELECT 10 AS a,? AS b' USING 10;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` int(2) NOT NULL,
|
||||
`b` int(2) NOT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
EXECUTE IMMEDIATE 'CREATE OR REPLACE TABLE t1 AS SELECT 999999999 AS a,? AS b' USING 999999999;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` int(9) NOT NULL,
|
||||
`b` int(9) NOT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
EXECUTE IMMEDIATE 'CREATE OR REPLACE TABLE t1 AS SELECT 2147483647 AS a,? AS b' USING 2147483647;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` bigint(10) NOT NULL,
|
||||
`b` bigint(10) NOT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -1715,7 +1715,7 @@ show warnings $$
|
|||
Level Code Message
|
||||
Warning 1012 Raising a warning
|
||||
Error 5555 RESIGNAL to not found
|
||||
Note 4092 At line 9 in test.test_resignal
|
||||
Note 4093 At line 9 in test.test_resignal
|
||||
drop procedure test_resignal $$
|
||||
create procedure test_resignal()
|
||||
begin
|
||||
|
@ -1740,7 +1740,7 @@ show warnings $$
|
|||
Level Code Message
|
||||
Warning 1012 Raising a warning
|
||||
Error 5555 RESIGNAL to error
|
||||
Note 4092 At line 9 in test.test_resignal
|
||||
Note 4093 At line 9 in test.test_resignal
|
||||
drop procedure test_resignal $$
|
||||
create procedure test_resignal()
|
||||
begin
|
||||
|
@ -1789,7 +1789,7 @@ show warnings $$
|
|||
Level Code Message
|
||||
Error 1012 Raising a not found
|
||||
Error 5555 RESIGNAL to not found
|
||||
Note 4092 At line 9 in test.test_resignal
|
||||
Note 4093 At line 9 in test.test_resignal
|
||||
drop procedure test_resignal $$
|
||||
create procedure test_resignal()
|
||||
begin
|
||||
|
@ -1814,7 +1814,7 @@ show warnings $$
|
|||
Level Code Message
|
||||
Error 1012 Raising a not found
|
||||
Error 5555 RESIGNAL to error
|
||||
Note 4092 At line 9 in test.test_resignal
|
||||
Note 4093 At line 9 in test.test_resignal
|
||||
drop procedure test_resignal $$
|
||||
create procedure test_resignal()
|
||||
begin
|
||||
|
@ -1863,7 +1863,7 @@ show warnings $$
|
|||
Level Code Message
|
||||
Error 1012 Raising an error
|
||||
Error 5555 RESIGNAL to not found
|
||||
Note 4092 At line 9 in test.test_resignal
|
||||
Note 4093 At line 9 in test.test_resignal
|
||||
drop procedure test_resignal $$
|
||||
create procedure test_resignal()
|
||||
begin
|
||||
|
@ -1888,7 +1888,7 @@ show warnings $$
|
|||
Level Code Message
|
||||
Error 1012 Raising an error
|
||||
Error 5555 RESIGNAL to error
|
||||
Note 4092 At line 9 in test.test_resignal
|
||||
Note 4093 At line 9 in test.test_resignal
|
||||
drop procedure test_resignal $$
|
||||
create procedure test_resignal()
|
||||
begin
|
||||
|
@ -1931,7 +1931,7 @@ show warnings $$
|
|||
Level Code Message
|
||||
Warning 1264 Out of range value for column 'a' at row 1
|
||||
Error 5555 RESIGNAL to a not found
|
||||
Note 4092 At line 8 in test.test_resignal
|
||||
Note 4093 At line 8 in test.test_resignal
|
||||
drop procedure test_resignal $$
|
||||
create procedure test_resignal()
|
||||
begin
|
||||
|
@ -1953,7 +1953,7 @@ show warnings $$
|
|||
Level Code Message
|
||||
Warning 1264 Out of range value for column 'a' at row 1
|
||||
Error 5555 RESIGNAL to an error
|
||||
Note 4092 At line 8 in test.test_resignal
|
||||
Note 4093 At line 8 in test.test_resignal
|
||||
drop procedure test_resignal $$
|
||||
create procedure test_resignal()
|
||||
begin
|
||||
|
@ -2004,7 +2004,7 @@ show warnings $$
|
|||
Level Code Message
|
||||
Error 1329 No data - zero rows fetched, selected, or processed
|
||||
Error 5555 RESIGNAL to a not found
|
||||
Note 4092 At line 10 in test.test_resignal
|
||||
Note 4093 At line 10 in test.test_resignal
|
||||
drop procedure test_resignal $$
|
||||
create procedure test_resignal()
|
||||
begin
|
||||
|
@ -2030,7 +2030,7 @@ show warnings $$
|
|||
Level Code Message
|
||||
Error 1329 No data - zero rows fetched, selected, or processed
|
||||
Error 5555 RESIGNAL to an error
|
||||
Note 4092 At line 10 in test.test_resignal
|
||||
Note 4093 At line 10 in test.test_resignal
|
||||
drop procedure test_resignal $$
|
||||
create procedure test_resignal()
|
||||
begin
|
||||
|
@ -2073,7 +2073,7 @@ show warnings $$
|
|||
Level Code Message
|
||||
Error 1051 Unknown table 'test.no_such_table'
|
||||
Error 5555 RESIGNAL to a not found
|
||||
Note 4092 At line 8 in test.test_resignal
|
||||
Note 4093 At line 8 in test.test_resignal
|
||||
drop procedure test_resignal $$
|
||||
create procedure test_resignal()
|
||||
begin
|
||||
|
@ -2095,7 +2095,7 @@ show warnings $$
|
|||
Level Code Message
|
||||
Error 1051 Unknown table 'test.no_such_table'
|
||||
Error 5555 RESIGNAL to an error
|
||||
Note 4092 At line 8 in test.test_resignal
|
||||
Note 4093 At line 8 in test.test_resignal
|
||||
drop procedure test_resignal $$
|
||||
#
|
||||
# More complex cases
|
||||
|
@ -2142,7 +2142,7 @@ ERROR 42000: Hi, I am a useless error message
|
|||
show warnings $$
|
||||
Level Code Message
|
||||
Error 9999 Hi, I am a useless error message
|
||||
Note 4092 At line 7 in test.peter_p2
|
||||
Note 4093 At line 7 in test.peter_p2
|
||||
drop procedure peter_p1 $$
|
||||
drop procedure peter_p2 $$
|
||||
CREATE PROCEDURE peter_p1 ()
|
||||
|
@ -2198,16 +2198,16 @@ Level Code Message
|
|||
Error 1231 Variable 'sql_mode' can't be set to the value of 'NULL'
|
||||
Error 1232 Variable 'sql_mode' can't be set to the value of 'NULL'
|
||||
Error 9999 Variable 'sql_mode' can't be set to the value of 'NULL'
|
||||
Note 4092 At line 8 in test.peter_p1
|
||||
Note 4093 At line 8 in test.peter_p1
|
||||
ERROR 42000: Hi, I am a useless error message
|
||||
show warnings $$
|
||||
Level Code Message
|
||||
Error 1231 Variable 'sql_mode' can't be set to the value of 'NULL'
|
||||
Error 1232 Variable 'sql_mode' can't be set to the value of 'NULL'
|
||||
Error 9999 Variable 'sql_mode' can't be set to the value of 'NULL'
|
||||
Note 4092 At line 8 in test.peter_p1
|
||||
Note 4093 At line 8 in test.peter_p1
|
||||
Error 9999 Hi, I am a useless error message
|
||||
Note 4092 At line 10 in test.peter_p2
|
||||
Note 4093 At line 10 in test.peter_p2
|
||||
drop procedure peter_p1 $$
|
||||
drop procedure peter_p2 $$
|
||||
drop procedure if exists peter_p3 $$
|
||||
|
@ -2225,7 +2225,7 @@ show warnings $$
|
|||
Level Code Message
|
||||
Error 1 Original
|
||||
Error 2 Original
|
||||
Note 4092 At line 4 in test.peter_p3
|
||||
Note 4093 At line 4 in test.peter_p3
|
||||
drop procedure peter_p3 $$
|
||||
drop table t_warn;
|
||||
drop table t_cursor;
|
||||
|
|
|
@ -79,23 +79,23 @@ show warnings;
|
|||
Level Code Message
|
||||
Error 1051 Unknown table 'demo.oops_it_is_not_here'
|
||||
Error 1644 Oops in proc_9
|
||||
Note 4092 At line 4 in demo.proc_9
|
||||
Note 4093 At line 4 in demo.proc_9
|
||||
Error 1644 Oops in proc_8
|
||||
Note 4092 At line 4 in demo.proc_8
|
||||
Note 4093 At line 4 in demo.proc_8
|
||||
Error 1644 Oops in proc_7
|
||||
Note 4092 At line 4 in demo.proc_7
|
||||
Note 4093 At line 4 in demo.proc_7
|
||||
Error 1644 Oops in proc_6
|
||||
Note 4092 At line 4 in demo.proc_6
|
||||
Note 4093 At line 4 in demo.proc_6
|
||||
Error 1644 Oops in proc_5
|
||||
Note 4092 At line 4 in demo.proc_5
|
||||
Note 4093 At line 4 in demo.proc_5
|
||||
Error 1644 Oops in proc_4
|
||||
Note 4092 At line 4 in demo.proc_4
|
||||
Note 4093 At line 4 in demo.proc_4
|
||||
Error 1644 Oops in proc_3
|
||||
Note 4092 At line 4 in demo.proc_3
|
||||
Note 4093 At line 4 in demo.proc_3
|
||||
Error 1644 Oops in proc_2
|
||||
Note 4092 At line 4 in demo.proc_2
|
||||
Note 4093 At line 4 in demo.proc_2
|
||||
Error 1644 Oops in proc_1
|
||||
Note 4092 At line 4 in demo.proc_1
|
||||
Note 4093 At line 4 in demo.proc_1
|
||||
SET @@session.max_error_count = 5;
|
||||
SELECT @@session.max_error_count;
|
||||
@@session.max_error_count
|
||||
|
@ -104,11 +104,11 @@ call proc_1();
|
|||
ERROR 45000: Oops in proc_1
|
||||
show warnings;
|
||||
Level Code Message
|
||||
Note 4092 At line 4 in demo.proc_3
|
||||
Note 4093 At line 4 in demo.proc_3
|
||||
Error 1644 Oops in proc_2
|
||||
Note 4092 At line 4 in demo.proc_2
|
||||
Note 4093 At line 4 in demo.proc_2
|
||||
Error 1644 Oops in proc_1
|
||||
Note 4092 At line 4 in demo.proc_1
|
||||
Note 4093 At line 4 in demo.proc_1
|
||||
SET @@session.max_error_count = 7;
|
||||
SELECT @@session.max_error_count;
|
||||
@@session.max_error_count
|
||||
|
@ -117,13 +117,13 @@ call proc_1();
|
|||
ERROR 45000: Oops in proc_1
|
||||
show warnings;
|
||||
Level Code Message
|
||||
Note 4092 At line 4 in demo.proc_4
|
||||
Note 4093 At line 4 in demo.proc_4
|
||||
Error 1644 Oops in proc_3
|
||||
Note 4092 At line 4 in demo.proc_3
|
||||
Note 4093 At line 4 in demo.proc_3
|
||||
Error 1644 Oops in proc_2
|
||||
Note 4092 At line 4 in demo.proc_2
|
||||
Note 4093 At line 4 in demo.proc_2
|
||||
Error 1644 Oops in proc_1
|
||||
Note 4092 At line 4 in demo.proc_1
|
||||
Note 4093 At line 4 in demo.proc_1
|
||||
SET @@session.max_error_count = 9;
|
||||
SELECT @@session.max_error_count;
|
||||
@@session.max_error_count
|
||||
|
@ -132,15 +132,15 @@ call proc_1();
|
|||
ERROR 45000: Oops in proc_1
|
||||
show warnings;
|
||||
Level Code Message
|
||||
Note 4092 At line 4 in demo.proc_5
|
||||
Note 4093 At line 4 in demo.proc_5
|
||||
Error 1644 Oops in proc_4
|
||||
Note 4092 At line 4 in demo.proc_4
|
||||
Note 4093 At line 4 in demo.proc_4
|
||||
Error 1644 Oops in proc_3
|
||||
Note 4092 At line 4 in demo.proc_3
|
||||
Note 4093 At line 4 in demo.proc_3
|
||||
Error 1644 Oops in proc_2
|
||||
Note 4092 At line 4 in demo.proc_2
|
||||
Note 4093 At line 4 in demo.proc_2
|
||||
Error 1644 Oops in proc_1
|
||||
Note 4092 At line 4 in demo.proc_1
|
||||
Note 4093 At line 4 in demo.proc_1
|
||||
drop database demo;
|
||||
SET @@global.max_error_count = @start_global_value;
|
||||
SELECT @@global.max_error_count;
|
||||
|
|
|
@ -998,3 +998,306 @@ Pos Instruction
|
|||
7 set b.a@1["a"] a.a@0["a"]
|
||||
DROP PROCEDURE p1;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-14415 Add Oracle-style FOR loop to sql_mode=DEFAULT
|
||||
#
|
||||
# Integer range FOR loop
|
||||
CREATE PROCEDURE p1()
|
||||
BEGIN
|
||||
FOR i IN 1..3
|
||||
DO
|
||||
SELECT i;
|
||||
END FOR;
|
||||
END;
|
||||
$$
|
||||
CALL p1;
|
||||
i
|
||||
1
|
||||
i
|
||||
2
|
||||
i
|
||||
3
|
||||
SHOW PROCEDURE CODE p1;
|
||||
Pos Instruction
|
||||
0 set i@0 1
|
||||
1 set [upper_bound]@1 3
|
||||
2 jump_if_not 6(6) i@0 <= [upper_bound]@1
|
||||
3 stmt 0 "SELECT i"
|
||||
4 set i@0 i@0 + 1
|
||||
5 jump 2
|
||||
DROP PROCEDURE p1;
|
||||
# Nested integer range FOR loops
|
||||
CREATE PROCEDURE p1()
|
||||
BEGIN
|
||||
fori:
|
||||
FOR i IN 1..3
|
||||
DO
|
||||
forj:
|
||||
FOR j IN 1..3
|
||||
DO
|
||||
IF i = 3 THEN
|
||||
LEAVE fori;
|
||||
END IF;
|
||||
IF j = 3 THEN
|
||||
LEAVE forj;
|
||||
END IF;
|
||||
SELECT i,j;
|
||||
END FOR;
|
||||
END FOR;
|
||||
END;
|
||||
$$
|
||||
CALL p1;
|
||||
i j
|
||||
1 1
|
||||
i j
|
||||
1 2
|
||||
i j
|
||||
2 1
|
||||
i j
|
||||
2 2
|
||||
SHOW PROCEDURE CODE p1;
|
||||
Pos Instruction
|
||||
0 set i@0 1
|
||||
1 set [upper_bound]@1 3
|
||||
2 jump_if_not 17(17) i@0 <= [upper_bound]@1
|
||||
3 set j@2 1
|
||||
4 set [upper_bound]@3 3
|
||||
5 jump_if_not 13(13) j@2 <= [upper_bound]@3
|
||||
6 jump_if_not 8(8) i@0 = 3
|
||||
7 jump 17
|
||||
8 jump_if_not 10(10) j@2 = 3
|
||||
9 jump 13
|
||||
10 stmt 0 "SELECT i,j"
|
||||
11 set j@2 j@2 + 1
|
||||
12 jump 5
|
||||
13 set i@0 i@0 + 1
|
||||
14 jump 2
|
||||
DROP PROCEDURE p1;
|
||||
# Explicit cursor FOR loops
|
||||
CREATE PROCEDURE p1()
|
||||
BEGIN
|
||||
DECLARE cur0 CURSOR FOR SELECT 10 AS a, 'b0' AS b;
|
||||
DECLARE cur1 CURSOR FOR SELECT 10 AS a, 'b0' AS b;
|
||||
DECLARE cur2 CURSOR FOR SELECT 10 AS a, 'b0' AS b;
|
||||
FOR rec1 IN cur1
|
||||
DO
|
||||
SELECT rec1.a, rec1.b;
|
||||
SET rec1.a= 11;
|
||||
SET rec1.b= 'b1';
|
||||
SELECT rec1.a, rec1.b;
|
||||
END FOR;
|
||||
FOR rec0 IN cur0
|
||||
DO
|
||||
SET rec0.a= 10;
|
||||
SET rec0.b='b0';
|
||||
END FOR;
|
||||
FOR rec2 IN cur2
|
||||
DO
|
||||
SET rec2.a= 10;
|
||||
SET rec2.b='b0';
|
||||
END FOR;
|
||||
END;
|
||||
$$
|
||||
SHOW PROCEDURE CODE p1;
|
||||
Pos Instruction
|
||||
0 cpush cur0@0
|
||||
1 cpush cur1@1
|
||||
2 cpush cur2@2
|
||||
3 cursor_copy_struct cur1 rec1@0
|
||||
4 copen cur1@1
|
||||
5 cfetch cur1@1 rec1@0
|
||||
6 jump_if_not 13(13) `cur1`%FOUND
|
||||
7 stmt 0 "SELECT rec1.a, rec1.b"
|
||||
8 set rec1.a@0["a"] 11
|
||||
9 set rec1.b@0["b"] 'b1'
|
||||
10 stmt 0 "SELECT rec1.a, rec1.b"
|
||||
11 cfetch cur1@1 rec1@0
|
||||
12 jump 6
|
||||
13 cursor_copy_struct cur0 rec0@1
|
||||
14 copen cur0@0
|
||||
15 cfetch cur0@0 rec0@1
|
||||
16 jump_if_not 21(21) `cur0`%FOUND
|
||||
17 set rec0.a@1["a"] 10
|
||||
18 set rec0.b@1["b"] 'b0'
|
||||
19 cfetch cur0@0 rec0@1
|
||||
20 jump 16
|
||||
21 cursor_copy_struct cur2 rec2@2
|
||||
22 copen cur2@2
|
||||
23 cfetch cur2@2 rec2@2
|
||||
24 jump_if_not 29(29) `cur2`%FOUND
|
||||
25 set rec2.a@2["a"] 10
|
||||
26 set rec2.b@2["b"] 'b0'
|
||||
27 cfetch cur2@2 rec2@2
|
||||
28 jump 24
|
||||
29 cpop 3
|
||||
DROP PROCEDURE p1;
|
||||
# Nested explicit cursor FOR loops
|
||||
CREATE PROCEDURE p1()
|
||||
BEGIN
|
||||
DECLARE cur0 CURSOR FOR SELECT 10 AS a, 'b0' AS b;
|
||||
FOR rec0 IN cur0
|
||||
DO
|
||||
BEGIN
|
||||
DECLARE cur1 CURSOR FOR SELECT 11 AS a, 'b1' AS b;
|
||||
SET rec0.a= 11;
|
||||
SET rec0.b= 'b0';
|
||||
FOR rec1 IN cur1
|
||||
DO
|
||||
SET rec1.a= 11;
|
||||
SET rec1.b= 'b1';
|
||||
BEGIN
|
||||
DECLARE cur2 CURSOR FOR SELECT 12 AS a, 'b2' AS b;
|
||||
FOR rec2 IN cur2
|
||||
DO
|
||||
SET rec2.a=12;
|
||||
SET rec2.b='b2';
|
||||
END FOR;
|
||||
END;
|
||||
END FOR;
|
||||
END;
|
||||
END FOR;
|
||||
END;
|
||||
$$
|
||||
SHOW PROCEDURE CODE p1;
|
||||
Pos Instruction
|
||||
0 cpush cur0@0
|
||||
1 cursor_copy_struct cur0 rec0@0
|
||||
2 copen cur0@0
|
||||
3 cfetch cur0@0 rec0@0
|
||||
4 jump_if_not 29(29) `cur0`%FOUND
|
||||
5 cpush cur1@1
|
||||
6 set rec0.a@0["a"] 11
|
||||
7 set rec0.b@0["b"] 'b0'
|
||||
8 cursor_copy_struct cur1 rec1@1
|
||||
9 copen cur1@1
|
||||
10 cfetch cur1@1 rec1@1
|
||||
11 jump_if_not 26(26) `cur1`%FOUND
|
||||
12 set rec1.a@1["a"] 11
|
||||
13 set rec1.b@1["b"] 'b1'
|
||||
14 cpush cur2@2
|
||||
15 cursor_copy_struct cur2 rec2@2
|
||||
16 copen cur2@2
|
||||
17 cfetch cur2@2 rec2@2
|
||||
18 jump_if_not 23(23) `cur2`%FOUND
|
||||
19 set rec2.a@2["a"] 12
|
||||
20 set rec2.b@2["b"] 'b2'
|
||||
21 cfetch cur2@2 rec2@2
|
||||
22 jump 18
|
||||
23 cpop 1
|
||||
24 cfetch cur1@1 rec1@1
|
||||
25 jump 11
|
||||
26 cpop 1
|
||||
27 cfetch cur0@0 rec0@0
|
||||
28 jump 4
|
||||
29 cpop 1
|
||||
DROP PROCEDURE p1;
|
||||
# Implicit cursor FOR loops
|
||||
CREATE PROCEDURE p1()
|
||||
BEGIN
|
||||
FOR rec1 IN (SELECT 11 AS a, 'b1' AS b)
|
||||
DO
|
||||
SELECT rec1.a, rec1.b;
|
||||
SET rec1.a= 11;
|
||||
SET rec1.b= 'b1';
|
||||
SELECT rec1.a, rec1.b;
|
||||
END FOR;
|
||||
FOR rec0 IN (SELECT 10 AS a, 'b0' AS b)
|
||||
DO
|
||||
SET rec0.a= 10;
|
||||
SET rec0.b='b0';
|
||||
END FOR;
|
||||
FOR rec2 IN (SELECT 12 AS a, 'b2' AS b)
|
||||
DO
|
||||
SET rec2.a= 10;
|
||||
SET rec2.b='b0';
|
||||
END FOR;
|
||||
END;
|
||||
$$
|
||||
SHOW PROCEDURE CODE p1;
|
||||
Pos Instruction
|
||||
0 cpush [implicit_cursor]@0
|
||||
1 cursor_copy_struct [implicit_cursor] rec1@0
|
||||
2 copen [implicit_cursor]@0
|
||||
3 cfetch [implicit_cursor]@0 rec1@0
|
||||
4 jump_if_not 11(11) `[implicit_cursor]`%FOUND
|
||||
5 stmt 0 "SELECT rec1.a, rec1.b"
|
||||
6 set rec1.a@0["a"] 11
|
||||
7 set rec1.b@0["b"] 'b1'
|
||||
8 stmt 0 "SELECT rec1.a, rec1.b"
|
||||
9 cfetch [implicit_cursor]@0 rec1@0
|
||||
10 jump 4
|
||||
11 cpop 1
|
||||
12 cpush [implicit_cursor]@0
|
||||
13 cursor_copy_struct [implicit_cursor] rec0@1
|
||||
14 copen [implicit_cursor]@0
|
||||
15 cfetch [implicit_cursor]@0 rec0@1
|
||||
16 jump_if_not 21(21) `[implicit_cursor]`%FOUND
|
||||
17 set rec0.a@1["a"] 10
|
||||
18 set rec0.b@1["b"] 'b0'
|
||||
19 cfetch [implicit_cursor]@0 rec0@1
|
||||
20 jump 16
|
||||
21 cpop 1
|
||||
22 cpush [implicit_cursor]@0
|
||||
23 cursor_copy_struct [implicit_cursor] rec2@2
|
||||
24 copen [implicit_cursor]@0
|
||||
25 cfetch [implicit_cursor]@0 rec2@2
|
||||
26 jump_if_not 31(31) `[implicit_cursor]`%FOUND
|
||||
27 set rec2.a@2["a"] 10
|
||||
28 set rec2.b@2["b"] 'b0'
|
||||
29 cfetch [implicit_cursor]@0 rec2@2
|
||||
30 jump 26
|
||||
31 cpop 1
|
||||
DROP PROCEDURE p1;
|
||||
# Nested implicit cursor FOR loops
|
||||
CREATE PROCEDURE p1()
|
||||
BEGIN
|
||||
FOR rec0 IN (SELECT 10 AS a, 'b0' AS b)
|
||||
DO
|
||||
SET rec0.a= 11;
|
||||
SET rec0.b= 'b0';
|
||||
FOR rec1 IN (SELECT 11 AS a, 'b1' AS b)
|
||||
DO
|
||||
SET rec1.a= 11;
|
||||
SET rec1.b= 'b1';
|
||||
FOR rec2 IN (SELECT 12 AS a, 'b2' AS b)
|
||||
DO
|
||||
SET rec2.a=12;
|
||||
SET rec2.b='b2';
|
||||
END FOR;
|
||||
END FOR;
|
||||
END FOR;
|
||||
END;
|
||||
$$
|
||||
SHOW PROCEDURE CODE p1;
|
||||
Pos Instruction
|
||||
0 cpush [implicit_cursor]@0
|
||||
1 cursor_copy_struct [implicit_cursor] rec0@0
|
||||
2 copen [implicit_cursor]@0
|
||||
3 cfetch [implicit_cursor]@0 rec0@0
|
||||
4 jump_if_not 29(29) `[implicit_cursor]`%FOUND
|
||||
5 set rec0.a@0["a"] 11
|
||||
6 set rec0.b@0["b"] 'b0'
|
||||
7 cpush [implicit_cursor]@1
|
||||
8 cursor_copy_struct [implicit_cursor] rec1@1
|
||||
9 copen [implicit_cursor]@1
|
||||
10 cfetch [implicit_cursor]@1 rec1@1
|
||||
11 jump_if_not 26(26) `[implicit_cursor]`%FOUND
|
||||
12 set rec1.a@1["a"] 11
|
||||
13 set rec1.b@1["b"] 'b1'
|
||||
14 cpush [implicit_cursor]@2
|
||||
15 cursor_copy_struct [implicit_cursor] rec2@2
|
||||
16 copen [implicit_cursor]@2
|
||||
17 cfetch [implicit_cursor]@2 rec2@2
|
||||
18 jump_if_not 23(23) `[implicit_cursor]`%FOUND
|
||||
19 set rec2.a@2["a"] 12
|
||||
20 set rec2.b@2["b"] 'b2'
|
||||
21 cfetch [implicit_cursor]@2 rec2@2
|
||||
22 jump 18
|
||||
23 cpop 1
|
||||
24 cfetch [implicit_cursor]@1 rec1@1
|
||||
25 jump 11
|
||||
26 cpop 1
|
||||
27 cfetch [implicit_cursor]@0 rec0@0
|
||||
28 jump 4
|
||||
29 cpop 1
|
||||
DROP PROCEDURE p1;
|
||||
|
|
|
@ -480,3 +480,134 @@ DROP PROCEDURE p1;
|
|||
#
|
||||
# End of MDEV-12457 Cursors with parameters
|
||||
#
|
||||
#
|
||||
# MDEV-14415 Add Oracle-style FOR loop to sql_mode=DEFAULT
|
||||
#
|
||||
# Explicit cursor
|
||||
CREATE TABLE t1 (a INT, b VARCHAR(10));
|
||||
INSERT INTO t1 VALUES (1,'b1'), (2,'b2'), (3,'b3');
|
||||
BEGIN NOT ATOMIC
|
||||
DECLARE cur CURSOR FOR SELECT * FROM t1;
|
||||
FOR rec IN cur
|
||||
DO
|
||||
SELECT rec.a AS a, rec.b AS b;
|
||||
END FOR;
|
||||
END;
|
||||
$$
|
||||
a b
|
||||
1 b1
|
||||
a b
|
||||
2 b2
|
||||
a b
|
||||
3 b3
|
||||
DROP TABLE t1;
|
||||
# Explicit cursor with parameters
|
||||
CREATE TABLE t1 (a INT, b VARCHAR(10));
|
||||
INSERT INTO t1 VALUES (1,'b1'), (2,'b2'), (3,'b3');
|
||||
BEGIN NOT ATOMIC
|
||||
DECLARE cur CURSOR(pa INT) FOR SELECT * FROM t1 WHERE a>=pa;
|
||||
FOR rec IN cur(2)
|
||||
DO
|
||||
SELECT rec.a AS a, rec.b AS b;
|
||||
END FOR;
|
||||
END;
|
||||
$$
|
||||
a b
|
||||
2 b2
|
||||
a b
|
||||
3 b3
|
||||
DROP TABLE t1;
|
||||
# Explicit cursor + label
|
||||
CREATE TABLE t1 (a INT, b VARCHAR(10));
|
||||
INSERT INTO t1 VALUES ('1','b1'), ('2','b2');
|
||||
BEGIN NOT ATOMIC
|
||||
DECLARE cur CURSOR FOR SELECT * FROM t1;
|
||||
forrec:
|
||||
FOR rec IN cur
|
||||
DO
|
||||
SELECT rec.a AS a, rec.b AS b;
|
||||
IF rec.a = 2 THEN
|
||||
LEAVE forrec;
|
||||
END IF;
|
||||
END FOR forrec;
|
||||
END;
|
||||
$$
|
||||
a b
|
||||
1 b1
|
||||
a b
|
||||
2 b2
|
||||
DROP TABLE t1;
|
||||
# Explicit cursor + FETCH inside the loop body produce an error on "NOT FOUND"
|
||||
BEGIN NOT ATOMIC
|
||||
DECLARE x INT;
|
||||
DECLARE cur CURSOR FOR SELECT 1 AS x;
|
||||
FOR rec IN cur
|
||||
DO
|
||||
FETCH cur INTO x;
|
||||
END FOR;
|
||||
END;
|
||||
$$
|
||||
ERROR 02000: No data - zero rows fetched, selected, or processed
|
||||
# Explicit cursor + FETCH inside the loop body are normally handled by "HANDLER FOR NOT FOUND"
|
||||
BEGIN NOT ATOMIC
|
||||
DECLARE done INT DEFAULT 0;
|
||||
DECLARE cur CURSOR FOR SELECT 1 AS x, 'y1' AS y UNION
|
||||
SELECT 2,'y2' UNION
|
||||
SELECT 3,'y3';
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
|
||||
forrec:
|
||||
FOR rec IN cur
|
||||
DO
|
||||
SELECT CONCAT(rec.x, ' ', rec.y) AS 'Implicit FETCH';
|
||||
FETCH cur INTO rec;
|
||||
IF done THEN
|
||||
SELECT 'NO DATA' AS `Explicit FETCH`;
|
||||
LEAVE forrec;
|
||||
ELSE
|
||||
SELECT CONCAT(rec.x, ' ', rec.y) AS 'Explicit FETCH';
|
||||
END IF;
|
||||
END FOR;
|
||||
END;
|
||||
$$
|
||||
Implicit FETCH
|
||||
1 y1
|
||||
Explicit FETCH
|
||||
2 y2
|
||||
Implicit FETCH
|
||||
3 y3
|
||||
Explicit FETCH
|
||||
NO DATA
|
||||
# Implicit cursor
|
||||
CREATE TABLE t1 (a INT, b VARCHAR(10));
|
||||
INSERT INTO t1 VALUES ('1','b1'), ('2','b2');
|
||||
BEGIN NOT ATOMIC
|
||||
FOR rec IN (SELECT * FROM t1)
|
||||
DO
|
||||
SELECT rec.a AS a, rec.b AS b;
|
||||
END FOR;
|
||||
END;
|
||||
$$
|
||||
a b
|
||||
1 b1
|
||||
a b
|
||||
2 b2
|
||||
DROP TABLE t1;
|
||||
# Implicit cursor + label
|
||||
CREATE TABLE t1 (a INT, b VARCHAR(10));
|
||||
INSERT INTO t1 VALUES ('1','b1'), ('2','b2');
|
||||
BEGIN NOT ATOMIC
|
||||
forrec:
|
||||
FOR rec IN (SELECT * FROM t1)
|
||||
DO
|
||||
SELECT rec.a AS a, rec.b AS b;
|
||||
IF rec.a = 2 THEN
|
||||
LEAVE forrec;
|
||||
END IF;
|
||||
END FOR;
|
||||
END;
|
||||
$$
|
||||
a b
|
||||
1 b1
|
||||
a b
|
||||
2 b2
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -1990,8 +1990,8 @@ Warning 1264 Out of range value for column 'a' at row 1
|
|||
Note 1292 Truncated incorrect INTEGER value: '222222 '
|
||||
Warning 1264 Out of range value for column 'b' at row 1
|
||||
Error 1048 Column 'c' cannot be null
|
||||
Note 4092 At line 6 in test.t1_bi
|
||||
Note 4092 At line 2 in test.p1
|
||||
Note 4093 At line 6 in test.t1_bi
|
||||
Note 4093 At line 2 in test.p1
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
|
|
208
mysql-test/r/sp-for-loop.result
Normal file
208
mysql-test/r/sp-for-loop.result
Normal file
|
@ -0,0 +1,208 @@
|
|||
#
|
||||
# MDEV-14415 Add Oracle-style FOR loop to sql_mode=DEFAULT
|
||||
#
|
||||
CREATE TABLE t1 (a INT);
|
||||
FOR i IN 1..3
|
||||
DO
|
||||
INSERT INTO t1 VALUES (i);
|
||||
END FOR;
|
||||
/
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
DROP TABLE t1;
|
||||
CREATE FUNCTION f1 (lower_bound INT, upper_bound INT, lim INT) RETURNS INT
|
||||
BEGIN
|
||||
DECLARE total INT DEFAULT 0;
|
||||
FOR i IN lower_bound . . upper_bound
|
||||
DO
|
||||
NULL
|
||||
END FOR;
|
||||
RETURN total;
|
||||
END;
|
||||
/
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '. upper_bound
|
||||
DO
|
||||
NULL
|
||||
END FOR;
|
||||
RETURN total;
|
||||
END' at line 4
|
||||
CREATE FUNCTION f1 (lower_bound INT, upper_bound INT, lim INT) RETURNS INT
|
||||
BEGIN
|
||||
DECLARE total INT DEFAULT 0;
|
||||
lab:
|
||||
FOR i IN lower_bound .. upper_bound
|
||||
DO
|
||||
SET total= total + i;
|
||||
IF i = lim THEN
|
||||
LEAVE lab;
|
||||
END IF;
|
||||
-- Bounds are calculated only once.
|
||||
-- The below assignments have no effect on the loop condition
|
||||
SET lower_bound= 900;
|
||||
SET upper_bound= 1000;
|
||||
END FOR;
|
||||
RETURN total;
|
||||
END;
|
||||
/
|
||||
SELECT f1(1, 3, 100) FROM DUAL;
|
||||
f1(1, 3, 100)
|
||||
6
|
||||
SELECT f1(1, 3, 2) FROM DUAL;
|
||||
f1(1, 3, 2)
|
||||
3
|
||||
DROP FUNCTION f1;
|
||||
CREATE FUNCTION f1() RETURNS INT
|
||||
BEGIN
|
||||
DECLARE total INT DEFAULT 0;
|
||||
FOR i IN 1 .. 5
|
||||
DO
|
||||
SET total= total + 1000;
|
||||
forj:
|
||||
FOR j IN 1 .. 5
|
||||
DO
|
||||
SET total= total + 1;
|
||||
IF j = 3 THEN
|
||||
LEAVE forj; -- End the internal loop
|
||||
END IF;
|
||||
END FOR;
|
||||
END FOR;
|
||||
RETURN total;
|
||||
END;
|
||||
/
|
||||
SELECT f1() FROM DUAL;
|
||||
f1()
|
||||
5015
|
||||
DROP FUNCTION f1;
|
||||
CREATE FUNCTION f1 (a INT, b INT) RETURNS INT
|
||||
BEGIN
|
||||
DECLARE total INT DEFAULT 0;
|
||||
fori:
|
||||
FOR i IN REVERSE a..1
|
||||
DO
|
||||
SET total= total + i;
|
||||
IF i = b THEN
|
||||
LEAVE fori;
|
||||
END IF;
|
||||
END FOR;
|
||||
RETURN total;
|
||||
END
|
||||
/
|
||||
SELECT f1(3, 100) FROM DUAL;
|
||||
f1(3, 100)
|
||||
6
|
||||
SELECT f1(3, 2) FROM DUAL;
|
||||
f1(3, 2)
|
||||
5
|
||||
DROP FUNCTION f1;
|
||||
# Testing labeled FOR LOOP statement
|
||||
CREATE FUNCTION f1 (a INT, limita INT, b INT, limitb INT) RETURNS INT
|
||||
BEGIN
|
||||
DECLARE total INT DEFAULT 0;
|
||||
la:
|
||||
FOR ia IN 1 .. a
|
||||
DO
|
||||
SET total= total + 1000;
|
||||
lb:
|
||||
FOR ib IN 1 .. b
|
||||
DO
|
||||
SET total= total + 1;
|
||||
IF ib = limitb THEN
|
||||
LEAVE lb;
|
||||
END IF;
|
||||
IF ia = limita THEN
|
||||
LEAVE la;
|
||||
END IF;
|
||||
END FOR lb;
|
||||
END FOR la;
|
||||
RETURN total;
|
||||
END;
|
||||
/
|
||||
SELECT f1(1, 1, 1, 1) FROM DUAL;
|
||||
f1(1, 1, 1, 1)
|
||||
1001
|
||||
SELECT f1(1, 2, 1, 2) FROM DUAL;
|
||||
f1(1, 2, 1, 2)
|
||||
1001
|
||||
SELECT f1(2, 1, 2, 1) FROM DUAL;
|
||||
f1(2, 1, 2, 1)
|
||||
2002
|
||||
SELECT f1(2, 1, 2, 2) FROM DUAL;
|
||||
f1(2, 1, 2, 2)
|
||||
1001
|
||||
SELECT f1(2, 2, 2, 2) FROM DUAL;
|
||||
f1(2, 2, 2, 2)
|
||||
2003
|
||||
SELECT f1(2, 3, 2, 3) FROM DUAL;
|
||||
f1(2, 3, 2, 3)
|
||||
2004
|
||||
DROP FUNCTION f1;
|
||||
# Testing labeled ITERATE in a labeled FOR LOOP statement
|
||||
CREATE FUNCTION f1 (a INT, b INT, blim INT) RETURNS INT
|
||||
BEGIN
|
||||
DECLARE total INT DEFAULT 0;
|
||||
la:
|
||||
FOR ia IN 1 .. a
|
||||
DO
|
||||
SET total= total + 1000;
|
||||
BEGIN
|
||||
DECLARE ib INT DEFAULT 1;
|
||||
WHILE ib <= b
|
||||
DO
|
||||
IF ib > blim THEN
|
||||
ITERATE la;
|
||||
END IF;
|
||||
SET ib= ib + 1;
|
||||
SET total= total + 1;
|
||||
END WHILE;
|
||||
END;
|
||||
END FOR la;
|
||||
RETURN total;
|
||||
END;
|
||||
/
|
||||
SELECT f1(3,3,0), f1(3,3,1), f1(3,3,2), f1(3,3,3), f1(3,3,4) FROM DUAL;
|
||||
f1(3,3,0) f1(3,3,1) f1(3,3,2) f1(3,3,3) f1(3,3,4)
|
||||
3000 3003 3006 3009 3009
|
||||
DROP FUNCTION f1;
|
||||
# Testing INTERATE statement
|
||||
CREATE FUNCTION f1(a INT) RETURNS INT
|
||||
BEGIN
|
||||
DECLARE total INT DEFAULT 0;
|
||||
fori:
|
||||
FOR i IN 1 .. a
|
||||
DO
|
||||
IF i=5 THEN
|
||||
ITERATE fori;
|
||||
END IF;
|
||||
SET total= total + 1;
|
||||
END FOR;
|
||||
RETURN total;
|
||||
END;
|
||||
/
|
||||
SELECT f1(3), f1(4), f1(5), f1(6) FROM DUAL;
|
||||
f1(3) f1(4) f1(5) f1(6)
|
||||
3 4 4 5
|
||||
DROP FUNCTION f1;
|
||||
CREATE FUNCTION f1(a INT) RETURNS INT
|
||||
BEGIN
|
||||
DECLARE total INT DEFAULT 0;
|
||||
lj:
|
||||
FOR j IN 1 .. 2
|
||||
DO
|
||||
FOR i IN 1 .. a
|
||||
DO
|
||||
IF i=5 THEN
|
||||
ITERATE lj;
|
||||
END IF;
|
||||
SET total= total + 1;
|
||||
END FOR;
|
||||
END FOR;
|
||||
RETURN total;
|
||||
END;
|
||||
/
|
||||
SELECT f1(3), f1(4), f1(5) FROM DUAL;
|
||||
f1(3) f1(4) f1(5)
|
||||
6 8 8
|
||||
DROP FUNCTION f1;
|
|
@ -3,7 +3,7 @@ Warnings:
|
|||
Note 1051 Unknown table 'test.t1'
|
||||
drop view if exists view_t1;
|
||||
Warnings:
|
||||
Note 4090 Unknown VIEW: 'test.view_t1'
|
||||
Note 4091 Unknown VIEW: 'test.view_t1'
|
||||
SET sql_mode=ONLY_FULL_GROUP_BY;
|
||||
CREATE TABLE t1 (
|
||||
pk INT,
|
||||
|
|
|
@ -3211,7 +3211,7 @@ drop procedure bug10961|
|
|||
DROP PROCEDURE IF EXISTS bug6866|
|
||||
DROP VIEW IF EXISTS tv|
|
||||
Warnings:
|
||||
Note 4090 Unknown VIEW: 'test.tv'
|
||||
Note 4091 Unknown VIEW: 'test.tv'
|
||||
DROP TABLE IF EXISTS tt1,tt2,tt3|
|
||||
Warnings:
|
||||
Note 1051 Unknown table 'test.tt1'
|
||||
|
@ -7823,7 +7823,7 @@ ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
|
|||
show warnings;
|
||||
Level Code Message
|
||||
Error 1062 Duplicate entry '2' for key 'PRIMARY'
|
||||
Note 4092 At line 5 in test.p1
|
||||
Note 4093 At line 5 in test.p1
|
||||
select * from t1;
|
||||
id
|
||||
1
|
||||
|
@ -8116,6 +8116,18 @@ CALL p();
|
|||
drop procedure p;
|
||||
drop view v;
|
||||
drop table t, tmp_t;
|
||||
#
|
||||
# MDEV-13936: Server crashes in Time_and_counter_tracker::incr_loops
|
||||
#
|
||||
CREATE TABLE t1 (i INT);
|
||||
CREATE VIEW v1 AS SELECT * FROM t1 WHERE RAND() > 0.5;
|
||||
CREATE FUNCTION f1() RETURNS INT RETURN ( SELECT MAX(i) FROM v1 );
|
||||
REPLACE INTO v1 VALUES (f1());
|
||||
ERROR HY000: The target table v1 of the INSERT is not insertable-into
|
||||
SET @aux = f1();
|
||||
DROP FUNCTION f1;
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
#End of 10.1 tests
|
||||
#
|
||||
# MDEV-11081: CURSOR for query with GROUP BY
|
||||
|
|
|
@ -2329,6 +2329,23 @@ DROP TRIGGER t1_bi;
|
|||
DROP TABLE t1;
|
||||
SET TIMESTAMP=DEFAULT;
|
||||
set time_zone= @@global.time_zone;
|
||||
#
|
||||
# MDEV-13936: Server crashes in Time_and_counter_tracker::incr_loops
|
||||
#
|
||||
CREATE TABLE t1 (i INT);
|
||||
CREATE VIEW v1 AS SELECT * FROM t1 WHERE RAND() > 0.5;
|
||||
CREATE TABLE t2 (a int);
|
||||
CREATE TABLE t3 (a int);
|
||||
create trigger trg after insert on t2 for each row
|
||||
INSERT INTO t3 SELECT MAX(i) FROM v1 UNION SELECT MAX(i) FROM v1;
|
||||
drop table t1;
|
||||
insert into t2 value (2);
|
||||
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||
CREATE TABLE t1 (i INT);
|
||||
insert into t2 value (2);
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1,t2,t3;
|
||||
End of 10.1 tests.
|
||||
create table t1 (i int);
|
||||
create trigger tr1 after insert on t1 for each row set @a=@a+1;
|
||||
create trigger tr2 after insert on t1 for each row set @a=@a+1;
|
||||
|
|
|
@ -352,3 +352,9 @@ EXPLAIN SELECT * FROM t1 WHERE a='1.1';
|
|||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-11155 Bad error message when creating a SET column with comma and non-ASCII characters
|
||||
#
|
||||
SET NAMES utf8;
|
||||
CREATE TABLE t1 (a SET('a,bü'));
|
||||
ERROR 22007: Illegal set 'a,bü' value found during parsing
|
||||
|
|
|
@ -5166,7 +5166,7 @@ CREATE TABLE t4 (i4 INT);
|
|||
INSERT INTO t4 VALUES (1),(2);
|
||||
DROP VIEW IF EXISTS v1;
|
||||
Warnings:
|
||||
Note 4090 Unknown VIEW: 'test.v1'
|
||||
Note 4091 Unknown VIEW: 'test.v1'
|
||||
CREATE VIEW v1 AS select coalesce(j1,i3) AS v1_field1 from t2 join t3 left join t1 on ( i1 = i2 );
|
||||
CREATE VIEW v2 AS select v1_field1 from t4 join v1;
|
||||
prepare my_stmt from "select v1_field1 from v2";
|
||||
|
|
|
@ -353,7 +353,7 @@ ERROR 23000: Duplicate entry '11' for key 'a'
|
|||
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Note 4092 At line 4 in test.f1
|
||||
Note 4093 At line 4 in test.f1
|
||||
Error 1062 Duplicate entry '11' for key 'a'
|
||||
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
RESET MASTER;
|
||||
FLUSH BINARY LOGS DELETE_DOMAIN_ID = ();
|
||||
and the command execution is effective thence rotates binlog as usual
|
||||
show binary logs;
|
||||
Log_name File_size
|
||||
master-bin.000001 #
|
||||
master-bin.000002 #
|
||||
Non-existed domain is warned, the command completes without rotation
|
||||
but with a warning
|
||||
FLUSH BINARY LOGS DELETE_DOMAIN_ID = (99);
|
||||
Warnings:
|
||||
Warning 1076 The gtid domain being deleted ('99') is not in the current binlog state
|
||||
show binary logs;
|
||||
Log_name File_size
|
||||
master-bin.000001 #
|
||||
master-bin.000002 #
|
||||
SET @@SESSION.gtid_domain_id=1;
|
||||
SET @@SESSION.server_id=1;
|
||||
CREATE TABLE t (a int);
|
||||
FLUSH BINARY LOGS DELETE_DOMAIN_ID = (1);
|
||||
ERROR HY000: Could not delete gtid domain. Reason: binlog files may contain gtids from the domain ('1') being deleted. Make sure to first purge those files.
|
||||
FLUSH BINARY LOGS;
|
||||
FLUSH BINARY LOGS DELETE_DOMAIN_ID = (1);
|
||||
ERROR HY000: Could not delete gtid domain. Reason: binlog files may contain gtids from the domain ('1') being deleted. Make sure to first purge those files.
|
||||
PURGE BINARY LOGS TO 'master-bin.000003';;
|
||||
FLUSH BINARY LOGS DELETE_DOMAIN_ID = (1);
|
||||
Gtid_list of the current binlog does not contain '1':
|
||||
show binlog events in 'master-bin.000004' limit 1,1;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000004 # Gtid_list 1 # []
|
||||
But the previous log's Gtid_list may have it which explains a warning from the following command
|
||||
show binlog events in 'master-bin.000003' limit 1,1;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000003 # Gtid_list 1 # [1-1-1]
|
||||
Already deleted domain in Gtid_list of the earliest log is benign
|
||||
but may cause a warning
|
||||
FLUSH BINARY LOGS DELETE_DOMAIN_ID = (1);
|
||||
Warnings:
|
||||
Warning 1076 The current gtid binlog state is incompatible with a former one missing gtids from the '1-1' domain-server pair which is referred to in the gtid list describing an earlier state. Ignore if the domain ('1') was already explicitly deleted.
|
||||
Warning 1076 The gtid domain being deleted ('1') is not in the current binlog state
|
||||
FLUSH BINARY LOGS DELETE_DOMAIN_ID = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 0);
|
||||
ERROR HY000: Could not delete gtid domain. Reason: binlog files may contain gtids from the domain ('1') being deleted. Make sure to first purge those files.
|
||||
FLUSH BINARY LOGS;
|
||||
PURGE BINARY LOGS TO 'master-bin.000005';
|
||||
FLUSH BINARY LOGS DELETE_DOMAIN_ID = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 0);
|
||||
Warnings:
|
||||
Warning 1076 The gtid domain being deleted ('0') is not in the current binlog state
|
||||
Gtid_list of the current binlog does not contain 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 0:
|
||||
show binlog events in 'master-bin.000006' limit 1,1;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000006 # Gtid_list 1 # []
|
||||
SET @@SESSION.gtid_domain_id=1;;
|
||||
SET @@SESSION.server_id=1;
|
||||
SET @@SESSION.gtid_seq_no=1;
|
||||
INSERT INTO t SET a=1;
|
||||
SET @@SESSION.server_id=2;
|
||||
SET @@SESSION.gtid_seq_no=2;
|
||||
INSERT INTO t SET a=2;
|
||||
SET @@SESSION.gtid_domain_id=11;
|
||||
SET @@SESSION.server_id=11;
|
||||
SET @@SESSION.gtid_seq_no=11;
|
||||
INSERT INTO t SET a=11;
|
||||
SET @gtid_binlog_state_saved=@@GLOBAL.gtid_binlog_state;
|
||||
FLUSH BINARY LOGS;
|
||||
SET @@SESSION.gtid_domain_id=11;
|
||||
SET @@SESSION.server_id=11;
|
||||
SET @@SESSION.gtid_seq_no=1;
|
||||
INSERT INTO t SET a=1;
|
||||
SELECT @gtid_binlog_state_saved "as original state", @@GLOBAL.gtid_binlog_state as "out of order for 11 domain state";
|
||||
as original state out of order for 11 domain state
|
||||
1-1-1,1-2-2,11-11-11 1-1-1,1-2-2,11-11-1
|
||||
PURGE BINARY LOGS TO 'master-bin.000007';
|
||||
the following command succeeds with warnings
|
||||
FLUSH BINARY LOGS DELETE_DOMAIN_ID = (1);
|
||||
Warnings:
|
||||
Warning 1076 The current gtid binlog state is incompatible with a former one having a gtid '11-11-1' which is less than the '11-11-11' of the gtid list describing an earlier state. The state may have been affected by manually injecting a lower sequence number gtid or via replication.
|
||||
DROP TABLE t;
|
||||
RESET MASTER;
|
|
@ -0,0 +1,6 @@
|
|||
SET @@SESSION.debug_dbug='+d,inject_binlog_delete_domain_init_error';
|
||||
FLUSH BINARY LOGS DELETE_DOMAIN_ID = (99);
|
||||
ERROR HY000: Could not delete gtid domain. Reason: injected error.
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Error 1076 Could not delete gtid domain. Reason: injected error.
|
|
@ -185,3 +185,46 @@ master-bin.000004 # Gtid # # GTID #-#-#
|
|||
master-bin.000004 # Query # # use `test`; DROP PROCEDURE p1
|
||||
master-bin.000004 # Gtid # # GTID #-#-#
|
||||
master-bin.000004 # Query # # use `test`; DROP TABLE `t1` /* generated by server */
|
||||
#
|
||||
#MDEV-14467 Item_param: replace {INT|DECIMAL|REAL|STRING|TIME}_VALUE with Type_handler
|
||||
#
|
||||
FLUSH LOGS;
|
||||
CREATE TABLE t1 (a INT);
|
||||
EXECUTE IMMEDIATE 'INSERT INTO t1 SELECT 1 LIMIT ?' USING 10;
|
||||
Warnings:
|
||||
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted
|
||||
EXECUTE IMMEDIATE 'INSERT INTO t1 SELECT 1 LIMIT ?' USING 10.1;
|
||||
Warnings:
|
||||
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted
|
||||
EXECUTE IMMEDIATE 'INSERT INTO t1 SELECT 1 LIMIT ?' USING 10.1e0;
|
||||
Warnings:
|
||||
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted
|
||||
EXECUTE IMMEDIATE 'INSERT INTO t1 SELECT 1 LIMIT ?' USING '10';
|
||||
Warnings:
|
||||
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted
|
||||
EXECUTE IMMEDIATE 'INSERT INTO t1 SELECT 1 LIMIT ?' USING TIME'10:10:10';
|
||||
Warnings:
|
||||
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted
|
||||
DROP TABLE t1;
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000005 # Binlog_checkpoint # # master-bin.000005
|
||||
master-bin.000005 # Gtid # # GTID #-#-#
|
||||
master-bin.000005 # Query # # use `test`; CREATE TABLE t1 (a INT)
|
||||
master-bin.000005 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000005 # Query # # use `test`; INSERT INTO t1 SELECT 1 LIMIT 10
|
||||
master-bin.000005 # Query # # COMMIT
|
||||
master-bin.000005 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000005 # Query # # use `test`; INSERT INTO t1 SELECT 1 LIMIT 10
|
||||
master-bin.000005 # Query # # COMMIT
|
||||
master-bin.000005 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000005 # Query # # use `test`; INSERT INTO t1 SELECT 1 LIMIT 10
|
||||
master-bin.000005 # Query # # COMMIT
|
||||
master-bin.000005 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000005 # Query # # use `test`; INSERT INTO t1 SELECT 1 LIMIT 10
|
||||
master-bin.000005 # Query # # COMMIT
|
||||
master-bin.000005 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000005 # Query # # use `test`; INSERT INTO t1 SELECT 1 LIMIT 101010
|
||||
master-bin.000005 # Query # # COMMIT
|
||||
master-bin.000005 # Gtid # # GTID #-#-#
|
||||
master-bin.000005 # Query # # use `test`; DROP TABLE `t1` /* generated by server */
|
||||
|
|
|
@ -0,0 +1,137 @@
|
|||
# Prove basic properties of
|
||||
#
|
||||
# FLUSH BINARY LOGS DELETE_DOMAIN_ID = (...)
|
||||
#
|
||||
# The command removes the supplied list of domains from the current
|
||||
# @@global.gtid_binlog_state provided the binlog files do not contain
|
||||
# events from such domains.
|
||||
|
||||
# The test is not format specific. One format is chosen to run it.
|
||||
--source include/have_binlog_format_mixed.inc
|
||||
|
||||
# Reset binlog state
|
||||
RESET MASTER;
|
||||
|
||||
# Empty list is accepted
|
||||
FLUSH BINARY LOGS DELETE_DOMAIN_ID = ();
|
||||
--echo and the command execution is effective thence rotates binlog as usual
|
||||
--source include/show_binary_logs.inc
|
||||
|
||||
--echo Non-existed domain is warned, the command completes without rotation
|
||||
--echo but with a warning
|
||||
--let $binlog_pre_flush=query_get_value(SHOW MASTER STATUS, Position, 1)
|
||||
FLUSH BINARY LOGS DELETE_DOMAIN_ID = (99);
|
||||
--let $binlog_start=$binlog_pre_flush
|
||||
--source include/show_binary_logs.inc
|
||||
|
||||
# Log one event in a specified domain and try to delete the domain
|
||||
SET @@SESSION.gtid_domain_id=1;
|
||||
SET @@SESSION.server_id=1;
|
||||
CREATE TABLE t (a int);
|
||||
|
||||
--error ER_BINLOG_CANT_DELETE_GTID_DOMAIN
|
||||
FLUSH BINARY LOGS DELETE_DOMAIN_ID = (1);
|
||||
|
||||
# the same error after log rotation
|
||||
FLUSH BINARY LOGS;
|
||||
--error ER_BINLOG_CANT_DELETE_GTID_DOMAIN
|
||||
FLUSH BINARY LOGS DELETE_DOMAIN_ID = (1);
|
||||
|
||||
# the latest binlog does not really contain any events incl ones from 1-domain
|
||||
--let $purge_to_binlog= query_get_value(SHOW MASTER STATUS, File, 1)
|
||||
--eval PURGE BINARY LOGS TO '$purge_to_binlog';
|
||||
# So now it's safe to delete
|
||||
--error 0
|
||||
FLUSH BINARY LOGS DELETE_DOMAIN_ID = (1);
|
||||
--echo Gtid_list of the current binlog does not contain '1':
|
||||
--let $binlog_file=query_get_value(SHOW MASTER STATUS, File, 1)
|
||||
--source include/show_gtid_list.inc
|
||||
--echo But the previous log's Gtid_list may have it which explains a warning from the following command
|
||||
--let $binlog_file=$purge_to_binlog
|
||||
--source include/show_gtid_list.inc
|
||||
|
||||
--echo Already deleted domain in Gtid_list of the earliest log is benign
|
||||
--echo but may cause a warning
|
||||
--error 0
|
||||
FLUSH BINARY LOGS DELETE_DOMAIN_ID = (1);
|
||||
|
||||
# Few domains delete. The chosen number verifies among others how
|
||||
# expected overrun of the static buffers of underlying dynamic arrays is doing.
|
||||
--let $domain_cnt=17
|
||||
--let $server_in_domain_cnt=3
|
||||
--let $domain_list=
|
||||
--disable_query_log
|
||||
while ($domain_cnt)
|
||||
{
|
||||
--let servers=$server_in_domain_cnt
|
||||
--eval SET @@SESSION.gtid_domain_id=$domain_cnt
|
||||
while ($servers)
|
||||
{
|
||||
--eval SET @@SESSION.server_id=10*$domain_cnt + $servers
|
||||
--eval INSERT INTO t SET a=@@SESSION.server_id
|
||||
|
||||
--dec $servers
|
||||
}
|
||||
--let $domain_list= $domain_cnt, $domain_list
|
||||
|
||||
--dec $domain_cnt
|
||||
}
|
||||
--enable_query_log
|
||||
--let $zero=0
|
||||
--let $domain_list= $domain_list$zero
|
||||
|
||||
--error ER_BINLOG_CANT_DELETE_GTID_DOMAIN
|
||||
--eval FLUSH BINARY LOGS DELETE_DOMAIN_ID = ($domain_list)
|
||||
|
||||
# Now satisfy the safety condtion to purge log files containing $domain list
|
||||
FLUSH BINARY LOGS;
|
||||
--let $purge_to_binlog= query_get_value(SHOW MASTER STATUS, File, 1)
|
||||
--eval PURGE BINARY LOGS TO '$purge_to_binlog'
|
||||
--error 0
|
||||
--eval FLUSH BINARY LOGS DELETE_DOMAIN_ID = ($domain_list)
|
||||
--echo Gtid_list of the current binlog does not contain $domain_list:
|
||||
--let $binlog_file=query_get_value(SHOW MASTER STATUS, File, 1)
|
||||
--source include/show_gtid_list.inc
|
||||
|
||||
# Show reaction on @@global.gtid_binlog_state not succeeding
|
||||
# earlier state as described by the 1st binlog' Gtid_list.
|
||||
# Now let it be out-order gtid logged to a domain unrelated to deletion.
|
||||
|
||||
--let $del_d_id=1
|
||||
--eval SET @@SESSION.gtid_domain_id=$del_d_id;
|
||||
SET @@SESSION.server_id=1;
|
||||
SET @@SESSION.gtid_seq_no=1;
|
||||
INSERT INTO t SET a=1;
|
||||
SET @@SESSION.server_id=2;
|
||||
SET @@SESSION.gtid_seq_no=2;
|
||||
INSERT INTO t SET a=2;
|
||||
|
||||
SET @@SESSION.gtid_domain_id=11;
|
||||
SET @@SESSION.server_id=11;
|
||||
SET @@SESSION.gtid_seq_no=11;
|
||||
INSERT INTO t SET a=11;
|
||||
|
||||
SET @gtid_binlog_state_saved=@@GLOBAL.gtid_binlog_state;
|
||||
FLUSH BINARY LOGS;
|
||||
|
||||
# Inject out of order for domain '11' before
|
||||
SET @@SESSION.gtid_domain_id=11;
|
||||
SET @@SESSION.server_id=11;
|
||||
SET @@SESSION.gtid_seq_no=1;
|
||||
INSERT INTO t SET a=1;
|
||||
|
||||
SELECT @gtid_binlog_state_saved "as original state", @@GLOBAL.gtid_binlog_state as "out of order for 11 domain state";
|
||||
|
||||
# to delete '1', first to purge logs containing its events
|
||||
--let $purge_to_binlog= query_get_value(SHOW MASTER STATUS, File, 1)
|
||||
--eval PURGE BINARY LOGS TO '$purge_to_binlog'
|
||||
|
||||
--echo the following command succeeds with warnings
|
||||
--eval FLUSH BINARY LOGS DELETE_DOMAIN_ID = ($del_d_id)
|
||||
|
||||
#
|
||||
# Cleanup
|
||||
#
|
||||
|
||||
DROP TABLE t;
|
||||
RESET MASTER;
|
|
@ -0,0 +1,11 @@
|
|||
# Check "internal" error branches of
|
||||
# FLUSH BINARY LOGS DELETE_DOMAIN_ID = (...)
|
||||
# handler.
|
||||
--source include/have_debug.inc
|
||||
--source include/have_binlog_format_mixed.inc
|
||||
|
||||
SET @@SESSION.debug_dbug='+d,inject_binlog_delete_domain_init_error';
|
||||
--error ER_BINLOG_CANT_DELETE_GTID_DOMAIN
|
||||
FLUSH BINARY LOGS DELETE_DOMAIN_ID = (99);
|
||||
|
||||
SHOW WARNINGS;
|
|
@ -99,3 +99,19 @@ DROP TABLE t1;
|
|||
|
||||
--let $binlog_file = LAST
|
||||
source include/show_binlog_events.inc;
|
||||
|
||||
--echo #
|
||||
--echo #MDEV-14467 Item_param: replace {INT|DECIMAL|REAL|STRING|TIME}_VALUE with Type_handler
|
||||
--echo #
|
||||
|
||||
FLUSH LOGS;
|
||||
CREATE TABLE t1 (a INT);
|
||||
EXECUTE IMMEDIATE 'INSERT INTO t1 SELECT 1 LIMIT ?' USING 10;
|
||||
EXECUTE IMMEDIATE 'INSERT INTO t1 SELECT 1 LIMIT ?' USING 10.1;
|
||||
EXECUTE IMMEDIATE 'INSERT INTO t1 SELECT 1 LIMIT ?' USING 10.1e0;
|
||||
EXECUTE IMMEDIATE 'INSERT INTO t1 SELECT 1 LIMIT ?' USING '10';
|
||||
EXECUTE IMMEDIATE 'INSERT INTO t1 SELECT 1 LIMIT ?' USING TIME'10:10:10';
|
||||
DROP TABLE t1;
|
||||
|
||||
--let $binlog_file = LAST
|
||||
source include/show_binlog_events.inc;
|
||||
|
|
|
@ -247,3 +247,18 @@ DROP PROCEDURE p1;
|
|||
#
|
||||
# End of MDEV-10866 Extend PREPARE and EXECUTE IMMEDIATE to understand expressions
|
||||
#
|
||||
#
|
||||
# MDEV-12846 sql_mode=ORACLE: using Oracle-style placeholders in direct query execution makes the server crash
|
||||
#
|
||||
SELECT ? FROM DUAL;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '? FROM DUAL' at line 1
|
||||
SELECT :a FROM DUAL;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ':a FROM DUAL' at line 1
|
||||
SELECT :1 FROM DUAL;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ':1 FROM DUAL' at line 1
|
||||
SELECT 1+? FROM DUAL;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '? FROM DUAL' at line 1
|
||||
SELECT 1+:a FROM DUAL;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ':a FROM DUAL' at line 1
|
||||
SELECT 1+:1 FROM DUAL;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ':1 FROM DUAL' at line 1
|
||||
|
|
|
@ -1359,3 +1359,36 @@ t2 CREATE TABLE "t2" (
|
|||
"b" varchar(3) DEFAULT NULL,
|
||||
"c" time DEFAULT NULL
|
||||
)
|
||||
#
|
||||
# MDEV-14388 Server crashes in handle_select / val_uint in ORACLE mode
|
||||
#
|
||||
CREATE TABLE t1 (id INT);
|
||||
INSERT INTO t1 VALUES (0),(1),(2),(3);
|
||||
CREATE FUNCTION f1() RETURN INT is
|
||||
BEGIN
|
||||
FOR v1 in (SELECT id FROM t1)
|
||||
LOOP
|
||||
NULL;
|
||||
END LOOP;
|
||||
RETURN 1;
|
||||
END;
|
||||
$$
|
||||
SELECT f1();
|
||||
f1()
|
||||
1
|
||||
DROP FUNCTION f1;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (id INT);
|
||||
INSERT INTO t1 VALUES (1),(2),(3),(4);
|
||||
CREATE FUNCTION f1() RETURN INT IS
|
||||
CURSOR cur IS SELECT id FROM t1;
|
||||
rec cur%ROWTYPE;
|
||||
BEGIN
|
||||
RETURN 1;
|
||||
END;
|
||||
$$
|
||||
SELECT f1();
|
||||
f1()
|
||||
1
|
||||
DROP FUNCTION f1;
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -2404,3 +2404,31 @@ t1 CREATE TABLE "t1" (
|
|||
"aa_timestamp5" timestamp(5) NULL DEFAULT NULL,
|
||||
"aa_date0" datetime DEFAULT NULL
|
||||
)
|
||||
#
|
||||
# MDEV-11160 "Incorrect column name" when "CREATE TABLE t1 AS SELECT spvar"
|
||||
#
|
||||
CREATE TABLE t1 (x INT);
|
||||
INSERT INTO t1 VALUES (10);
|
||||
CREATE VIEW v1 AS SELECT x+1 AS a,x+1 AS b FROM t1;
|
||||
CREATE PROCEDURE p1
|
||||
AS
|
||||
a INT := 1;
|
||||
b INT := 2;
|
||||
BEGIN
|
||||
CREATE TABLE t2 AS SELECT a,b FROM v1;
|
||||
SHOW CREATE TABLE t2;
|
||||
SELECT * FROM t2;
|
||||
DROP TABLE t2;
|
||||
END;
|
||||
$$
|
||||
CALL p1();
|
||||
Table Create Table
|
||||
t2 CREATE TABLE "t2" (
|
||||
"a" int(11) DEFAULT NULL,
|
||||
"b" int(11) DEFAULT NULL
|
||||
)
|
||||
a b
|
||||
1 2
|
||||
DROP PROCEDURE p1;
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -264,3 +264,27 @@ DROP PROCEDURE p1;
|
|||
--echo #
|
||||
--echo # End of MDEV-10866 Extend PREPARE and EXECUTE IMMEDIATE to understand expressions
|
||||
--echo #
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-12846 sql_mode=ORACLE: using Oracle-style placeholders in direct query execution makes the server crash
|
||||
--echo #
|
||||
|
||||
# When running with --ps, the below queries return
|
||||
# CR_PARAMS_NOT_BOUND instead of ER_PARSE_ERROR
|
||||
|
||||
--disable_ps_protocol
|
||||
--error ER_PARSE_ERROR
|
||||
SELECT ? FROM DUAL;
|
||||
--error ER_PARSE_ERROR
|
||||
SELECT :a FROM DUAL;
|
||||
--error ER_PARSE_ERROR
|
||||
SELECT :1 FROM DUAL;
|
||||
|
||||
--error ER_PARSE_ERROR
|
||||
SELECT 1+? FROM DUAL;
|
||||
--error ER_PARSE_ERROR
|
||||
SELECT 1+:a FROM DUAL;
|
||||
--error ER_PARSE_ERROR
|
||||
SELECT 1+:1 FROM DUAL;
|
||||
--enable_ps_protocol
|
||||
|
|
|
@ -1444,3 +1444,39 @@ BEGIN
|
|||
END;
|
||||
$$
|
||||
DELIMITER ;$$
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-14388 Server crashes in handle_select / val_uint in ORACLE mode
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (id INT);
|
||||
INSERT INTO t1 VALUES (0),(1),(2),(3);
|
||||
DELIMITER $$;
|
||||
CREATE FUNCTION f1() RETURN INT is
|
||||
BEGIN
|
||||
FOR v1 in (SELECT id FROM t1)
|
||||
LOOP
|
||||
NULL;
|
||||
END LOOP;
|
||||
RETURN 1;
|
||||
END;
|
||||
$$
|
||||
DELIMITER ;$$
|
||||
SELECT f1();
|
||||
DROP FUNCTION f1;
|
||||
DROP TABLE t1;
|
||||
|
||||
CREATE TABLE t1 (id INT);
|
||||
INSERT INTO t1 VALUES (1),(2),(3),(4);
|
||||
DELIMITER $$;
|
||||
CREATE FUNCTION f1() RETURN INT IS
|
||||
CURSOR cur IS SELECT id FROM t1;
|
||||
rec cur%ROWTYPE;
|
||||
BEGIN
|
||||
RETURN 1;
|
||||
END;
|
||||
$$
|
||||
DELIMITER ;$$
|
||||
SELECT f1();
|
||||
DROP FUNCTION f1;
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -2233,3 +2233,30 @@ BEGIN
|
|||
END;
|
||||
$$
|
||||
DELIMITER ;$$
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-11160 "Incorrect column name" when "CREATE TABLE t1 AS SELECT spvar"
|
||||
--echo #
|
||||
|
||||
|
||||
CREATE TABLE t1 (x INT);
|
||||
INSERT INTO t1 VALUES (10);
|
||||
CREATE VIEW v1 AS SELECT x+1 AS a,x+1 AS b FROM t1;
|
||||
DELIMITER $$;
|
||||
CREATE PROCEDURE p1
|
||||
AS
|
||||
a INT := 1;
|
||||
b INT := 2;
|
||||
BEGIN
|
||||
CREATE TABLE t2 AS SELECT a,b FROM v1;
|
||||
SHOW CREATE TABLE t2;
|
||||
SELECT * FROM t2;
|
||||
DROP TABLE t2;
|
||||
END;
|
||||
$$
|
||||
DELIMITER ;$$
|
||||
CALL p1();
|
||||
DROP PROCEDURE p1;
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -4314,7 +4314,7 @@ CREATE VIEW v2 AS Select * from test.v1;
|
|||
ERROR 42S02: Table 'test.v1' doesn't exist
|
||||
DROP VIEW IF EXISTS v2;
|
||||
Warnings:
|
||||
Note 4090 Unknown VIEW: 'test.v2'
|
||||
Note 4091 Unknown VIEW: 'test.v2'
|
||||
|
||||
Testcase 3.3.1.25
|
||||
--------------------------------------------------------------------------------
|
||||
|
@ -7566,7 +7566,7 @@ Call sp1() ;
|
|||
ERROR 42000: PROCEDURE test.sp1 does not exist
|
||||
Drop view if exists test.v1 ;
|
||||
Warnings:
|
||||
Note 4090 Unknown VIEW: 'test.v1'
|
||||
Note 4091 Unknown VIEW: 'test.v1'
|
||||
Drop procedure sp1 ;
|
||||
ERROR 42000: PROCEDURE test.sp1 does not exist
|
||||
|
||||
|
@ -21312,7 +21312,7 @@ CREATE VIEW v1 AS SELECT f1 FROM t1;
|
|||
DROP VIEW IF EXISTS v1;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
Warnings:
|
||||
Note 4090 Unknown VIEW: 'test.v1'
|
||||
Note 4091 Unknown VIEW: 'test.v1'
|
||||
|
||||
Testcase 3.3.1.68
|
||||
--------------------------------------------------------------------------------
|
||||
|
|
|
@ -4315,7 +4315,7 @@ CREATE VIEW v2 AS Select * from test.v1;
|
|||
ERROR 42S02: Table 'test.v1' doesn't exist
|
||||
DROP VIEW IF EXISTS v2;
|
||||
Warnings:
|
||||
Note 4090 Unknown VIEW: 'test.v2'
|
||||
Note 4091 Unknown VIEW: 'test.v2'
|
||||
|
||||
Testcase 3.3.1.25
|
||||
--------------------------------------------------------------------------------
|
||||
|
@ -7567,7 +7567,7 @@ Call sp1() ;
|
|||
ERROR 42000: PROCEDURE test.sp1 does not exist
|
||||
Drop view if exists test.v1 ;
|
||||
Warnings:
|
||||
Note 4090 Unknown VIEW: 'test.v1'
|
||||
Note 4091 Unknown VIEW: 'test.v1'
|
||||
Drop procedure sp1 ;
|
||||
ERROR 42000: PROCEDURE test.sp1 does not exist
|
||||
|
||||
|
@ -21314,7 +21314,7 @@ CREATE VIEW v1 AS SELECT f1 FROM t1;
|
|||
DROP VIEW IF EXISTS v1;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
Warnings:
|
||||
Note 4090 Unknown VIEW: 'test.v1'
|
||||
Note 4091 Unknown VIEW: 'test.v1'
|
||||
|
||||
Testcase 3.3.1.68
|
||||
--------------------------------------------------------------------------------
|
||||
|
|
|
@ -4784,7 +4784,7 @@ CREATE VIEW v2 AS Select * from test.v1;
|
|||
ERROR 42S02: Table 'test.v1' doesn't exist
|
||||
DROP VIEW IF EXISTS v2;
|
||||
Warnings:
|
||||
Note 4090 Unknown VIEW: 'test.v2'
|
||||
Note 4091 Unknown VIEW: 'test.v2'
|
||||
|
||||
Testcase 3.3.1.25
|
||||
--------------------------------------------------------------------------------
|
||||
|
@ -8387,7 +8387,7 @@ Call sp1() ;
|
|||
ERROR 42000: PROCEDURE test.sp1 does not exist
|
||||
Drop view if exists test.v1 ;
|
||||
Warnings:
|
||||
Note 4090 Unknown VIEW: 'test.v1'
|
||||
Note 4091 Unknown VIEW: 'test.v1'
|
||||
Drop procedure sp1 ;
|
||||
ERROR 42000: PROCEDURE test.sp1 does not exist
|
||||
|
||||
|
@ -22989,7 +22989,7 @@ CREATE VIEW v1 AS SELECT f1 FROM t1;
|
|||
DROP VIEW IF EXISTS v1;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
Warnings:
|
||||
Note 4090 Unknown VIEW: 'test.v1'
|
||||
Note 4091 Unknown VIEW: 'test.v1'
|
||||
|
||||
Testcase 3.3.1.68
|
||||
--------------------------------------------------------------------------------
|
||||
|
|
|
@ -4477,7 +4477,7 @@ CREATE PROCEDURE sp1()
|
|||
for:BEGIN
|
||||
SELECT @x;
|
||||
END//
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'for:BEGIN
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ':BEGIN
|
||||
SELECT @x;
|
||||
END' at line 2
|
||||
DROP PROCEDURE IF EXISTS sp1;
|
||||
|
|
46
mysql-test/suite/galera/r/MW-388.result
Normal file
46
mysql-test/suite/galera/r/MW-388.result
Normal file
|
@ -0,0 +1,46 @@
|
|||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 CHAR(255)) Engine=InnoDB;
|
||||
CREATE PROCEDURE insert_proc ()
|
||||
BEGIN
|
||||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
GET DIAGNOSTICS CONDITION 1 @errno = MYSQL_ERRNO;
|
||||
END;
|
||||
INSERT INTO t1 VALUES (1, 'node 1'),(2, 'node 1');
|
||||
INSERT INTO t1 VALUES (3, 'node 1');
|
||||
END|
|
||||
SET GLOBAL wsrep_slave_threads = 2;
|
||||
SET GLOBAL DEBUG = "d,sync.wsrep_apply_cb";
|
||||
Warnings:
|
||||
Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead
|
||||
INSERT INTO t1 VALUES (1, 'node 2');;
|
||||
SET SESSION DEBUG_SYNC = "now WAIT_FOR sync.wsrep_apply_cb_reached";
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
SET SESSION DEBUG_SYNC = 'wsrep_after_replication SIGNAL wsrep_after_replication_reached WAIT_FOR wsrep_after_replication_continue';
|
||||
CALL insert_proc ();;
|
||||
SET SESSION DEBUG_SYNC = "now WAIT_FOR wsrep_after_replication_reached";
|
||||
SET GLOBAL DEBUG = "";
|
||||
Warnings:
|
||||
Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead
|
||||
SET DEBUG_SYNC = "now SIGNAL wsrep_after_replication_continue";
|
||||
SET DEBUG_SYNC = "now SIGNAL signal.wsrep_apply_cb";
|
||||
SELECT @errno = 1213;
|
||||
@errno = 1213
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
f1 f2
|
||||
1 node 2
|
||||
3 node 1
|
||||
SELECT * FROM t1;
|
||||
f1 f2
|
||||
1 node 2
|
||||
3 node 1
|
||||
SET GLOBAL wsrep_slave_threads = DEFAULT;
|
||||
DROP TABLE t1;
|
||||
DROP PROCEDURE insert_proc;
|
||||
SET GLOBAL debug = NULL;
|
||||
Warnings:
|
||||
Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead
|
||||
SET debug_sync='RESET';
|
||||
SELECT @@debug_sync;
|
||||
@@debug_sync
|
||||
ON - current signal: ''
|
|
@ -7,6 +7,7 @@ INSERT INTO t1 VALUES (1);
|
|||
# Disable binary logging for current session
|
||||
SET SQL_LOG_BIN=OFF;
|
||||
INSERT INTO t1 VALUES (2);
|
||||
FLUSH BINARY LOGS;
|
||||
CREATE TABLE t2(c1 INT PRIMARY KEY) ENGINE=INNODB;
|
||||
INSERT INTO t2 VALUES (1);
|
||||
CREATE TABLE test.t3 AS SELECT * from t1;
|
||||
|
|
76
mysql-test/suite/galera/t/MW-388.test
Normal file
76
mysql-test/suite/galera/t/MW-388.test
Normal file
|
@ -0,0 +1,76 @@
|
|||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_debug.inc
|
||||
--source include/have_debug_sync.inc
|
||||
|
||||
--connection node_1
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 CHAR(255)) Engine=InnoDB;
|
||||
|
||||
DELIMITER |;
|
||||
CREATE PROCEDURE insert_proc ()
|
||||
BEGIN
|
||||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
GET DIAGNOSTICS CONDITION 1 @errno = MYSQL_ERRNO;
|
||||
END;
|
||||
INSERT INTO t1 VALUES (1, 'node 1'),(2, 'node 1');
|
||||
INSERT INTO t1 VALUES (3, 'node 1');
|
||||
END|
|
||||
DELIMITER ;|
|
||||
|
||||
# We need two slave threads here to guarantee progress.
|
||||
# If we use only one thread the following could happen
|
||||
# in node_1:
|
||||
# We block the only slave thread in wsrep_apply_cb and we
|
||||
# issue an INSERT (by calling the stored procedure) that will
|
||||
# try to acquire galera's local monitor in pre_commit().
|
||||
# This usually works fine, except for when a commit cut event
|
||||
# sneaks in the slave queue and gets a local seqno smaller than
|
||||
# that of the INSERT. Because there is only one slave thread,
|
||||
# commit cut is not processed and therefore does not advance
|
||||
# local monitor, and our INSERT remains stuck there.
|
||||
SET GLOBAL wsrep_slave_threads = 2;
|
||||
SET GLOBAL DEBUG = "d,sync.wsrep_apply_cb";
|
||||
|
||||
--connection node_2
|
||||
--send INSERT INTO t1 VALUES (1, 'node 2');
|
||||
|
||||
--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
|
||||
--connection node_1a
|
||||
SET SESSION DEBUG_SYNC = "now WAIT_FOR sync.wsrep_apply_cb_reached";
|
||||
|
||||
--connection node_1
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
SET SESSION DEBUG_SYNC = 'wsrep_after_replication SIGNAL wsrep_after_replication_reached WAIT_FOR wsrep_after_replication_continue';
|
||||
--send CALL insert_proc ();
|
||||
|
||||
--connection node_1a
|
||||
SET SESSION DEBUG_SYNC = "now WAIT_FOR wsrep_after_replication_reached";
|
||||
|
||||
|
||||
SET GLOBAL DEBUG = "";
|
||||
SET DEBUG_SYNC = "now SIGNAL wsrep_after_replication_continue";
|
||||
SET DEBUG_SYNC = "now SIGNAL signal.wsrep_apply_cb";
|
||||
|
||||
--connection node_2
|
||||
--reap
|
||||
|
||||
--connection node_1
|
||||
# We expect no errors here, because the handler in insert_proc() caught the deadlock error
|
||||
--reap
|
||||
SELECT @errno = 1213;
|
||||
SELECT * FROM t1;
|
||||
|
||||
--connection node_2
|
||||
SELECT * FROM t1;
|
||||
|
||||
--connection node_1
|
||||
SET GLOBAL wsrep_slave_threads = DEFAULT;
|
||||
DROP TABLE t1;
|
||||
DROP PROCEDURE insert_proc;
|
||||
|
||||
SET GLOBAL debug = NULL;
|
||||
SET debug_sync='RESET';
|
||||
|
||||
# Make sure no pending signals are leftover to surprise subsequent tests.
|
||||
SELECT @@debug_sync;
|
|
@ -29,12 +29,11 @@ SELECT * FROM t1;
|
|||
|
||||
UNLOCK TABLES;
|
||||
|
||||
SHOW TABLES;
|
||||
SELECT COUNT(*) = 1 FROM t1;
|
||||
|
||||
--disable_query_log
|
||||
--eval SET GLOBAL wsrep_provider_options = "$wsrep_provider_options_orig";
|
||||
--enable_query_log
|
||||
|
||||
DROP TABLE t1;
|
||||
SHOW TABLES;
|
||||
SELECT COUNT(*) = 1 FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -25,7 +25,7 @@ CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
|||
my $pid_filename = $ENV{'NODE_2_PIDFILE'};
|
||||
my $mysqld_pid = `cat $pid_filename`;
|
||||
chomp($mysqld_pid);
|
||||
system("kill -19 $mysqld_pid");
|
||||
system("kill -SIGSTOP $mysqld_pid");
|
||||
exit(0);
|
||||
EOF
|
||||
|
||||
|
@ -37,7 +37,7 @@ INSERT INTO t1 VALUES (1);
|
|||
my $pid_filename = $ENV{'NODE_2_PIDFILE'};
|
||||
my $mysqld_pid = `cat $pid_filename`;
|
||||
chomp($mysqld_pid);
|
||||
system("kill -18 $mysqld_pid");
|
||||
system("kill -SIGCONT $mysqld_pid");
|
||||
exit(0);
|
||||
EOF
|
||||
|
||||
|
|
|
@ -1,5 +1,13 @@
|
|||
# Test to check the behavior of galera cluster with sql_log_bin=ON|OFF & binary
|
||||
# logging is disabled. sql_bin_log should not affect galera replication.
|
||||
#
|
||||
# The following bugfixes are tested:
|
||||
#
|
||||
# MDEV-9510: Segmentation fault in binlog thread.
|
||||
# A scenario otherwise causing a similar segfault is replayed.
|
||||
# The test must pass having no crashes.
|
||||
# The sequence of sql statements is provided by original
|
||||
# sql_log_bin.test augmented with a FLUSH BINLOG LOGS, below.
|
||||
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
|
@ -15,6 +23,10 @@ INSERT INTO t1 VALUES (1);
|
|||
--echo # Disable binary logging for current session
|
||||
SET SQL_LOG_BIN=OFF;
|
||||
INSERT INTO t1 VALUES (2);
|
||||
|
||||
# MDEV-9510: the following binlog rotation due to FLUSH segfaults wo/ the fixes
|
||||
FLUSH BINARY LOGS;
|
||||
|
||||
CREATE TABLE t2(c1 INT PRIMARY KEY) ENGINE=INNODB;
|
||||
INSERT INTO t2 VALUES (1);
|
||||
CREATE TABLE test.t3 AS SELECT * from t1;
|
||||
|
|
185
mysql-test/suite/innodb/include/innodb_bulk_create_index.inc
Normal file
185
mysql-test/suite/innodb/include/innodb_bulk_create_index.inc
Normal file
|
@ -0,0 +1,185 @@
|
|||
#
|
||||
# wl#7277: InnoDB: Bulk Load for Create Index
|
||||
#
|
||||
|
||||
# Create Insert Procedure
|
||||
DELIMITER |;
|
||||
CREATE PROCEDURE populate_t1(load_even INT)
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 10000) DO
|
||||
IF i%2 = 0 AND load_even = 1 THEN
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
END IF;
|
||||
IF i%2 != 0 AND load_even != 1 THEN
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
END IF;
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
DELIMITER ;|
|
||||
|
||||
SELECT @@innodb_fill_factor;
|
||||
|
||||
if ($row_format != 'COMPRESSED')
|
||||
{
|
||||
eval CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=$row_format;
|
||||
}
|
||||
|
||||
if ($row_format == 'COMPRESSED')
|
||||
{
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
|
||||
eval CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=$row_format KEY_BLOCK_SIZE=4;
|
||||
}
|
||||
|
||||
-- disable_query_log
|
||||
# Load half records
|
||||
CALL populate_t1(1);
|
||||
-- enable_query_log
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
/* Create index. */
|
||||
CREATE INDEX idx_id ON t1(id);
|
||||
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
|
||||
/* Check table. */
|
||||
CHECK TABLE t1;
|
||||
|
||||
/* Select by index. */
|
||||
EXPLAIN SELECT * FROM t1 WHERE id = 10;
|
||||
EXPLAIN SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 5000;
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10000;
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10010;
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
|
||||
/*Insert/Update/Delete. */
|
||||
DELETE FROM t1 WHERE id < 4010 AND id > 3990;
|
||||
INSERT INTO t1 VALUES(4000, 4000, 'b4000');
|
||||
UPDATE t1 SET title = CONCAT('b', id) WHERE id < 3010 AND id > 2990;
|
||||
|
||||
SELECT * FROM t1 WHERE id = 3000;
|
||||
SELECT * FROM t1 WHERE title = 'a3000';
|
||||
SELECT * FROM t1 WHERE title = 'b3000';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 4000;
|
||||
SELECT * FROM t1 WHERE title = 'a4000';
|
||||
SELECT * FROM t1 WHERE title = 'b4000';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 4001;
|
||||
SELECT * FROM t1 WHERE title = 'a4001';
|
||||
|
||||
-- disable_query_log
|
||||
# Load half records (follow up load)
|
||||
CALL populate_t1(0);
|
||||
-- enable_query_log
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
|
||||
/* Add column. */
|
||||
ALTER TABLE t1 ADD COLUMN content TEXT;
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 5000;
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10000;
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10010;
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
|
||||
/* Drop column. */
|
||||
ALTER TABLE t1 DROP COLUMN content;
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 5000;
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10000;
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10010;
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
# Test Blob
|
||||
if ($row_format != 'COMPRESSED') {
|
||||
eval CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=$row_format;
|
||||
}
|
||||
|
||||
if ($row_format == 'COMPRESSED') {
|
||||
eval CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b BLOB,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=$row_format KEY_BLOCK_SIZE=4;
|
||||
}
|
||||
|
||||
let $cnt= 5000;
|
||||
-- disable_query_log
|
||||
WHILE ($cnt>=4950)
|
||||
{
|
||||
EVAL INSERT INTO t1 VALUES
|
||||
($cnt, REPEAT(CONCAT('a', $cnt),2000), CONCAT('a', $cnt));
|
||||
dec $cnt;
|
||||
}
|
||||
-- enable_query_log
|
||||
ALTER TABLE t1 ADD INDEX `idx` (a,b(5));
|
||||
|
||||
SELECT CHAR_LENGTH(b) FROM t1 WHERE a=4975;
|
||||
SELECT b=REPEAT(CONCAT('a',4975),2000) FROM t1 WHERE a=4975 AND b like 'a4975%';
|
||||
UPDATE t1 SET b = REPEAT(CONCAT('b',4975),2000) WHERE a=4975 AND b like 'a4975%';
|
||||
SELECT b=REPEAT(CONCAT('a',4975),2000) FROM t1 WHERE a=4975 AND b like 'a4975%';
|
||||
SELECT b=REPEAT(CONCAT('b',4975),2000) FROM t1 WHERE a=4975 AND b like 'b4975%';
|
||||
DELETE FROM t1 WHERE a=4975 AND b like 'b4975%';
|
||||
SELECT b=REPEAT(CONCAT('b',4975),2000) FROM t1 WHERE a=4975 AND b like 'b4975%';
|
||||
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
SELECT CHAR_LENGTH(b) FROM t1 WHERE a=4975;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
# Restore global variables
|
||||
if ($row_format == 'COMPRESSED')
|
||||
{
|
||||
SET GLOBAL innodb_file_per_table=default;
|
||||
}
|
||||
|
||||
DROP PROCEDURE populate_t1;
|
|
@ -0,0 +1,221 @@
|
|||
#
|
||||
# wl#7277: InnoDB: Bulk Load for Create Index
|
||||
#
|
||||
|
||||
# Not supported in embedded
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
# This test case needs to crash the server. Needs a debug server.
|
||||
-- source include/have_debug.inc
|
||||
|
||||
# Don't test this under valgrind, memory leaks will occur.
|
||||
-- source include/not_valgrind.inc
|
||||
|
||||
# Avoid CrashReporter popup on Mac
|
||||
-- source include/not_crashrep.inc
|
||||
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
# Create Insert Procedure
|
||||
DELIMITER |;
|
||||
CREATE PROCEDURE populate_t1()
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 10000) DO
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
DELIMITER ;|
|
||||
|
||||
# Test scenarios:
|
||||
# 1. Test restart;
|
||||
# 2. Test crash recovery.
|
||||
|
||||
# Test Restart
|
||||
if ($row_format != 'COMPRESSED')
|
||||
{
|
||||
eval CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=$row_format;
|
||||
}
|
||||
|
||||
if ($row_format == 'COMPRESSED')
|
||||
{
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
|
||||
eval CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=$row_format KEY_BLOCK_SIZE=4;
|
||||
}
|
||||
|
||||
-- disable_query_log
|
||||
CALL populate_t1();
|
||||
-- enable_query_log
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
|
||||
--source include/restart_mysqld.inc
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
-- echo # Test Blob
|
||||
|
||||
if ($row_format != 'COMPRESSED') {
|
||||
eval CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=$row_format;
|
||||
}
|
||||
|
||||
if ($row_format == 'COMPRESSED') {
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
|
||||
eval CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=$row_format KEY_BLOCK_SIZE=4;
|
||||
}
|
||||
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
|
||||
--source include/restart_mysqld.inc
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
# Test Crash Recovery
|
||||
|
||||
if ($row_format != 'COMPRESSED')
|
||||
{
|
||||
eval CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=$row_format;
|
||||
}
|
||||
|
||||
if ($row_format == 'COMPRESSED')
|
||||
{
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
|
||||
eval CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=$row_format KEY_BLOCK_SIZE=4;
|
||||
}
|
||||
|
||||
-- disable_query_log
|
||||
CALL populate_t1();
|
||||
-- enable_query_log
|
||||
|
||||
SET debug_dbug='+d,crash_commit_before';
|
||||
|
||||
# Write file to make mysql-test-run.pl start up the server again
|
||||
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
|
||||
--error 2013
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
|
||||
--enable_reconnect
|
||||
--source include/wait_until_connected_again.inc
|
||||
--disable_reconnect
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
EXPLAIN SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
-- echo # Test Blob
|
||||
|
||||
if ($row_format != 'COMPRESSED') {
|
||||
eval CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=$row_format;
|
||||
}
|
||||
|
||||
if ($row_format == 'COMPRESSED') {
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
|
||||
eval CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=$row_format KEY_BLOCK_SIZE=4;
|
||||
}
|
||||
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
|
||||
SET debug_dbug='+d,crash_commit_before';
|
||||
|
||||
# Write file to make mysql-test-run.pl start up the server again
|
||||
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
|
||||
--error 2013
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
|
||||
--enable_reconnect
|
||||
--source include/wait_until_connected_again.inc
|
||||
--disable_reconnect
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
# Restore global variables
|
||||
if ($row_format == 'COMPRESSED')
|
||||
{
|
||||
SET GLOBAL innodb_file_per_table=default;
|
||||
}
|
||||
|
||||
DROP PROCEDURE populate_t1;
|
60
mysql-test/suite/innodb/r/innodb-on-duplicate-update.result
Normal file
60
mysql-test/suite/innodb/r/innodb-on-duplicate-update.result
Normal file
|
@ -0,0 +1,60 @@
|
|||
set sql_mode='';
|
||||
set innodb_strict_mode=0;
|
||||
CREATE TABLE `v` (
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
|
||||
INSERT v values (1);
|
||||
CREATE TABLE `vp` (
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`v_id` int(10) unsigned NOT NULL,
|
||||
`p_id` int(10) unsigned NOT NULL,
|
||||
`ppp` varchar(255) NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `IDX_vp_uniq` (`v_id`,`p_id`),
|
||||
KEY `FK_vp_v` (`v_id`),
|
||||
CONSTRAINT `FK_vp_v` FOREIGN KEY (`v_id`) REFERENCES `v` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
|
||||
INSERT vp VALUES (12, 1, 100, 'text12');
|
||||
INSERT INTO `vp` (`id`,`ppp`) VALUES (12, 'test12-2') ON DUPLICATE KEY UPDATE `ppp` = VALUES(`ppp`);
|
||||
Warnings:
|
||||
Warning 1364 Field 'v_id' doesn't have a default value
|
||||
Warning 1364 Field 'p_id' doesn't have a default value
|
||||
SELECT * FROM vp;
|
||||
id v_id p_id ppp
|
||||
12 1 100 test12-2
|
||||
DROP TABLE vp, v;
|
||||
CREATE TABLE t1 (i int PRIMARY KEY) ENGINE=InnoDB;
|
||||
INSERT into t1 values (1);
|
||||
CREATE TABLE t2 (
|
||||
i int not null primary key,
|
||||
vi int not null,
|
||||
m int,
|
||||
UNIQUE KEY (vi),
|
||||
CONSTRAINT `cc` FOREIGN KEY (vi) REFERENCES t1 (i) ON DELETE CASCADE ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
INSERT into t2 VALUES (1, 1, 100);
|
||||
INSERT INTO t2 (i,m) VALUES (1, 2) ON DUPLICATE KEY UPDATE m=3;
|
||||
Warnings:
|
||||
Warning 1364 Field 'vi' doesn't have a default value
|
||||
SELECT * FROM t2;
|
||||
i vi m
|
||||
1 1 3
|
||||
DROP TABLE t2,t1;
|
||||
CREATE TABLE t1 (i int PRIMARY KEY) ENGINE=InnoDB;
|
||||
INSERT into t1 values (1);
|
||||
CREATE TABLE t2 (
|
||||
i int not null primary key,
|
||||
vi int not null,
|
||||
m int,
|
||||
KEY (vi),
|
||||
CONSTRAINT `cc` FOREIGN KEY (vi) REFERENCES t1 (i) ON DELETE CASCADE ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
INSERT into t2 VALUES (1, 1, 100);
|
||||
INSERT INTO t2 (i,m) VALUES (1, 2) ON DUPLICATE KEY UPDATE m=3;
|
||||
Warnings:
|
||||
Warning 1364 Field 'vi' doesn't have a default value
|
||||
SELECT * FROM t2;
|
||||
i vi m
|
||||
1 1 3
|
||||
DROP TABLE t2, t1;
|
13
mysql-test/suite/innodb/r/innodb-replace-debug.result
Normal file
13
mysql-test/suite/innodb/r/innodb-replace-debug.result
Normal file
|
@ -0,0 +1,13 @@
|
|||
#
|
||||
# Bug#17604730 ASSERTION: *CURSOR->INDEX->NAME == TEMP_INDEX_PREFIX
|
||||
#
|
||||
create table t1 (f1 int primary key, f2 int, f3 int, unique key k1(f2),
|
||||
key k2(f3)) engine=innodb;
|
||||
insert into t1 values (14, 24, 34);
|
||||
set @@debug_dbug = '+d,row_ins_sec_index_entry_timeout';
|
||||
replace into t1 values (14, 25, 34);
|
||||
select * from t1;
|
||||
f1 f2 f3
|
||||
14 25 34
|
||||
drop table t1;
|
||||
set @@debug_dbug = '-d,row_ins_sec_index_entry_timeout';
|
1037
mysql-test/suite/innodb/r/innodb_bulk_create_index.result
Normal file
1037
mysql-test/suite/innodb/r/innodb_bulk_create_index.result
Normal file
File diff suppressed because it is too large
Load diff
485
mysql-test/suite/innodb/r/innodb_bulk_create_index_debug.result
Normal file
485
mysql-test/suite/innodb/r/innodb_bulk_create_index_debug.result
Normal file
|
@ -0,0 +1,485 @@
|
|||
CREATE PROCEDURE populate_t1()
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 10000) DO
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
10000
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
class id title
|
||||
5000 5000 a5000
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
class id title
|
||||
10000 10000 a10000
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
class id title
|
||||
DROP TABLE t1;
|
||||
# Test Blob
|
||||
CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
|
||||
SET debug_dbug='+d,crash_commit_before';
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
10000
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
EXPLAIN SELECT * FROM t1 WHERE title = 'a10';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref idx_title idx_title 103 const 1 Using index condition
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
class id title
|
||||
5000 5000 a5000
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
class id title
|
||||
10000 10000 a10000
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
class id title
|
||||
DROP TABLE t1;
|
||||
# Test Blob
|
||||
CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
SET debug_dbug='+d,crash_commit_before';
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
DROP TABLE t1;
|
||||
DROP PROCEDURE populate_t1;
|
||||
CREATE PROCEDURE populate_t1()
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 10000) DO
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=COMPACT;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
10000
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
class id title
|
||||
5000 5000 a5000
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
class id title
|
||||
10000 10000 a10000
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
class id title
|
||||
DROP TABLE t1;
|
||||
# Test Blob
|
||||
CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=COMPACT;
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=COMPACT;
|
||||
SET debug_dbug='+d,crash_commit_before';
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
10000
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
EXPLAIN SELECT * FROM t1 WHERE title = 'a10';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref idx_title idx_title 103 const 1 Using index condition
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
class id title
|
||||
5000 5000 a5000
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
class id title
|
||||
10000 10000 a10000
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
class id title
|
||||
DROP TABLE t1;
|
||||
# Test Blob
|
||||
CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=COMPACT;
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
SET debug_dbug='+d,crash_commit_before';
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
DROP TABLE t1;
|
||||
DROP PROCEDURE populate_t1;
|
||||
CREATE PROCEDURE populate_t1()
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 10000) DO
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
10000
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
class id title
|
||||
5000 5000 a5000
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
class id title
|
||||
10000 10000 a10000
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
class id title
|
||||
DROP TABLE t1;
|
||||
# Test Blob
|
||||
CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
|
||||
SET debug_dbug='+d,crash_commit_before';
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
10000
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
EXPLAIN SELECT * FROM t1 WHERE title = 'a10';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref idx_title idx_title 103 const 1 Using index condition
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
class id title
|
||||
5000 5000 a5000
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
class id title
|
||||
10000 10000 a10000
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
class id title
|
||||
DROP TABLE t1;
|
||||
# Test Blob
|
||||
CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
SET debug_dbug='+d,crash_commit_before';
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
DROP TABLE t1;
|
||||
DROP PROCEDURE populate_t1;
|
||||
CREATE PROCEDURE populate_t1()
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 10000) DO
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
10000
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
class id title
|
||||
5000 5000 a5000
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
class id title
|
||||
10000 10000 a10000
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
class id title
|
||||
DROP TABLE t1;
|
||||
# Test Blob
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4;
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4;
|
||||
SET debug_dbug='+d,crash_commit_before';
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
10000
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
EXPLAIN SELECT * FROM t1 WHERE title = 'a10';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref idx_title idx_title 103 const 1 Using index condition
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a5000';
|
||||
class id title
|
||||
5000 5000 a5000
|
||||
SELECT * FROM t1 WHERE title = 'a10000';
|
||||
class id title
|
||||
10000 10000 a10000
|
||||
SELECT * FROM t1 WHERE title = 'a10010';
|
||||
class id title
|
||||
DROP TABLE t1;
|
||||
# Test Blob
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4;
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
SET debug_dbug='+d,crash_commit_before';
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT CHAR_LENGTH(b) FROM t1;
|
||||
CHAR_LENGTH(b)
|
||||
10000
|
||||
20000
|
||||
40000
|
||||
60000
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL innodb_file_per_table=default;
|
||||
DROP PROCEDURE populate_t1;
|
|
@ -0,0 +1,54 @@
|
|||
CREATE PROCEDURE populate_t1()
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 10000) DO
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
10000
|
||||
SET @saved_dbug= @@SESSION.debug_dbug;
|
||||
SET debug_dbug='+d,ib_index_build_fail_before_flush';
|
||||
CREATE INDEX idx_id ON t1(id);
|
||||
ERROR 70100: Query execution was interrupted
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
ERROR 70100: Query execution was interrupted
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
CREATE FULLTEXT INDEX fidx_title ON t1(title);
|
||||
ERROR 70100: Query execution was interrupted
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
ALTER TABLE t1 ADD COLUMN content TEXT, FORCE;
|
||||
ERROR 70100: Query execution was interrupted
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SET debug_dbug= @saved_dbug;
|
||||
INSERT INTO t1 VALUES(10001, 10001, 'a10000');
|
||||
ALTER TABLE t1 ADD UNIQUE INDEX idx_title(title);
|
||||
ERROR 23000: Duplicate entry 'a10000' for key 'idx_title'
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
ALTER TABLE t1 ADD UNIQUE INDEX idx_id(id), ADD UNIQUE INDEX idx_title(title);
|
||||
ERROR 23000: Duplicate entry 'a10000' for key 'idx_title'
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
DROP TABLE t1;
|
||||
DROP PROCEDURE populate_t1;
|
|
@ -0,0 +1,222 @@
|
|||
include/master-slave.inc
|
||||
[connection master]
|
||||
connection master;
|
||||
CREATE PROCEDURE populate_t1(load_even INT)
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 100) DO
|
||||
IF i%2 = 0 AND load_even = 1 THEN
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
END IF;
|
||||
IF i%2 != 0 AND load_even != 1 THEN
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
END IF;
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
50
|
||||
/* Create index. */
|
||||
CREATE INDEX idx_id ON t1(id);
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
/* Select by index. */
|
||||
EXPLAIN SELECT * FROM t1 WHERE id = 10;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref idx_id idx_id 5 const 1
|
||||
EXPLAIN SELECT * FROM t1 WHERE title = 'a10';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref idx_title idx_title 103 const 1 Using index condition
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE id = 20;
|
||||
class id title
|
||||
20 20 a20
|
||||
SELECT * FROM t1 WHERE title = 'a20';
|
||||
class id title
|
||||
20 20 a20
|
||||
SELECT * FROM t1 WHERE id = 30;
|
||||
class id title
|
||||
30 30 a30
|
||||
SELECT * FROM t1 WHERE title = 'a30';
|
||||
class id title
|
||||
30 30 a30
|
||||
SELECT * FROM t1 WHERE id = 101;
|
||||
class id title
|
||||
SELECT * FROM t1 WHERE title = 'a101';
|
||||
class id title
|
||||
/*Insert/Update/Delete. */
|
||||
DELETE FROM t1 WHERE id < 40 AND id > 30;
|
||||
INSERT INTO t1 VALUES(38, 38, 'b38');
|
||||
UPDATE t1 SET title = CONCAT('b', id) WHERE id < 30 AND id > 20;
|
||||
SELECT * FROM t1 WHERE id = 28;
|
||||
class id title
|
||||
28 28 b28
|
||||
SELECT * FROM t1 WHERE title = 'a28';
|
||||
class id title
|
||||
SELECT * FROM t1 WHERE title = 'b28';
|
||||
class id title
|
||||
28 28 b28
|
||||
SELECT * FROM t1 WHERE id = 38;
|
||||
class id title
|
||||
38 38 b38
|
||||
SELECT * FROM t1 WHERE title = 'a38';
|
||||
class id title
|
||||
SELECT * FROM t1 WHERE title = 'b38';
|
||||
class id title
|
||||
38 38 b38
|
||||
SELECT * FROM t1 WHERE id = 101;
|
||||
class id title
|
||||
SELECT * FROM t1 WHERE title = 'a101';
|
||||
class id title
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
97
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE id = 20;
|
||||
class id title
|
||||
20 20 a20
|
||||
SELECT * FROM t1 WHERE title = 'a20';
|
||||
class id title
|
||||
20 20 a20
|
||||
SELECT * FROM t1 WHERE id = 30;
|
||||
class id title
|
||||
30 30 a30
|
||||
SELECT * FROM t1 WHERE title = 'a30';
|
||||
class id title
|
||||
30 30 a30
|
||||
SELECT * FROM t1 WHERE id = 101;
|
||||
class id title
|
||||
SELECT * FROM t1 WHERE title = 'a101';
|
||||
class id title
|
||||
CREATE TABLE t_part (
|
||||
class INT ,
|
||||
id INT ,
|
||||
title VARCHAR(30)
|
||||
) ENGINE=InnoDB
|
||||
PARTITION BY RANGE(id)
|
||||
SUBPARTITION BY KEY(id)
|
||||
SUBPARTITIONS 4
|
||||
(
|
||||
PARTITION p0 VALUES LESS THAN (5000),
|
||||
PARTITION p1 VALUES LESS THAN (MAXVALUE)
|
||||
);
|
||||
INSERT INTO t_part SELECT * FROM t1;
|
||||
ALTER TABLE t_part ADD INDEX `idx` (class,id,title(10));
|
||||
SELECT * FROM t_part WHERE id = 10;
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t_part WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t_part WHERE id = 20;
|
||||
class id title
|
||||
20 20 a20
|
||||
SELECT * FROM t_part WHERE title = 'a20';
|
||||
class id title
|
||||
20 20 a20
|
||||
SELECT * FROM t_part WHERE id = 30;
|
||||
class id title
|
||||
30 30 a30
|
||||
SELECT * FROM t_part WHERE title = 'a30';
|
||||
class id title
|
||||
30 30 a30
|
||||
SELECT * FROM t_part WHERE id = 101;
|
||||
class id title
|
||||
SELECT * FROM t_part WHERE title = 'a101';
|
||||
class id title
|
||||
include/sync_slave_sql_with_master.inc
|
||||
connection slave;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`class` int(11) DEFAULT NULL,
|
||||
`id` int(11) DEFAULT NULL,
|
||||
`title` varchar(100) DEFAULT NULL,
|
||||
KEY `idx_id` (`id`),
|
||||
KEY `idx_title` (`title`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
SHOW CREATE TABLE t_part;
|
||||
Table Create Table
|
||||
t_part CREATE TABLE `t_part` (
|
||||
`class` int(11) DEFAULT NULL,
|
||||
`id` int(11) DEFAULT NULL,
|
||||
`title` varchar(30) DEFAULT NULL,
|
||||
KEY `idx` (`class`,`id`,`title`(10))
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
PARTITION BY RANGE (`id`)
|
||||
SUBPARTITION BY KEY (`id`)
|
||||
SUBPARTITIONS 4
|
||||
(PARTITION `p0` VALUES LESS THAN (5000) ENGINE = InnoDB,
|
||||
PARTITION `p1` VALUES LESS THAN MAXVALUE ENGINE = InnoDB)
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
97
|
||||
SELECT COUNT(*) FROM t_part;
|
||||
COUNT(*)
|
||||
97
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE id = 20;
|
||||
class id title
|
||||
20 20 a20
|
||||
SELECT * FROM t1 WHERE title = 'a20';
|
||||
class id title
|
||||
20 20 a20
|
||||
SELECT * FROM t1 WHERE id = 30;
|
||||
class id title
|
||||
30 30 a30
|
||||
SELECT * FROM t1 WHERE title = 'a30';
|
||||
class id title
|
||||
30 30 a30
|
||||
SELECT * FROM t1 WHERE id = 101;
|
||||
class id title
|
||||
SELECT * FROM t1 WHERE title = 'a101';
|
||||
class id title
|
||||
SELECT * FROM t_part WHERE id = 10;
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t_part WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t_part WHERE id = 20;
|
||||
class id title
|
||||
20 20 a20
|
||||
SELECT * FROM t_part WHERE title = 'a20';
|
||||
class id title
|
||||
20 20 a20
|
||||
SELECT * FROM t_part WHERE id = 30;
|
||||
class id title
|
||||
30 30 a30
|
||||
SELECT * FROM t_part WHERE title = 'a30';
|
||||
class id title
|
||||
30 30 a30
|
||||
SELECT * FROM t_part WHERE id = 101;
|
||||
class id title
|
||||
SELECT * FROM t_part WHERE title = 'a101';
|
||||
class id title
|
||||
connection master;
|
||||
DROP PROCEDURE populate_t1;
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t_part;
|
||||
include/rpl_end.inc
|
139
mysql-test/suite/innodb/r/innodb_bulk_create_index_small.result
Normal file
139
mysql-test/suite/innodb/r/innodb_bulk_create_index_small.result
Normal file
|
@ -0,0 +1,139 @@
|
|||
CREATE PROCEDURE populate_t1()
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 1000) DO
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
SELECT @@innodb_fill_factor;
|
||||
@@innodb_fill_factor
|
||||
100
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=COMPACT;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1000
|
||||
/* Create index. */
|
||||
CREATE INDEX idx_id ON t1(id);
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
/* Check table. */
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
/* Select by index. */
|
||||
EXPLAIN SELECT * FROM t1 WHERE id = 10;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref idx_id idx_id 5 const 1
|
||||
EXPLAIN SELECT * FROM t1 WHERE title = 'a10';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref idx_title idx_title 103 const 1 Using index condition
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE id = 500;
|
||||
class id title
|
||||
500 500 a500
|
||||
SELECT * FROM t1 WHERE title = 'a500';
|
||||
class id title
|
||||
500 500 a500
|
||||
SELECT * FROM t1 WHERE id = 1000;
|
||||
class id title
|
||||
1000 1000 a1000
|
||||
SELECT * FROM t1 WHERE title = 'a1000';
|
||||
class id title
|
||||
1000 1000 a1000
|
||||
SELECT * FROM t1 WHERE id = 1010;
|
||||
class id title
|
||||
SELECT * FROM t1 WHERE title = 'a1010';
|
||||
class id title
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=COMPACT;
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT CHAR_LENGTH(b) FROM t1 WHERE a=4975;
|
||||
CHAR_LENGTH(b)
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL innodb_file_per_table=default;
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1000
|
||||
/* Create index. */
|
||||
CREATE INDEX idx_id ON t1(id);
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
/* Check table. */
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
/* Select by index. */
|
||||
EXPLAIN SELECT * FROM t1 WHERE id = 10;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref idx_id idx_id 5 const 1
|
||||
EXPLAIN SELECT * FROM t1 WHERE title = 'a10';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref idx_title idx_title 103 const 1 Using index condition
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
class id title
|
||||
10 10 a10
|
||||
SELECT * FROM t1 WHERE id = 500;
|
||||
class id title
|
||||
500 500 a500
|
||||
SELECT * FROM t1 WHERE title = 'a500';
|
||||
class id title
|
||||
500 500 a500
|
||||
SELECT * FROM t1 WHERE id = 1000;
|
||||
class id title
|
||||
1000 1000 a1000
|
||||
SELECT * FROM t1 WHERE title = 'a1000';
|
||||
class id title
|
||||
1000 1000 a1000
|
||||
SELECT * FROM t1 WHERE id = 1010;
|
||||
class id title
|
||||
SELECT * FROM t1 WHERE title = 'a1010';
|
||||
class id title
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4;
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT CHAR_LENGTH(b) FROM t1 WHERE a=4975;
|
||||
CHAR_LENGTH(b)
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL innodb_file_per_table=default;
|
||||
DROP PROCEDURE populate_t1;
|
13
mysql-test/suite/innodb/r/truncate_restart.result
Normal file
13
mysql-test/suite/innodb/r/truncate_restart.result
Normal file
|
@ -0,0 +1,13 @@
|
|||
call mtr.add_suppression("InnoDB: Cannot save table statistics for table `test`\\.`t1`: Persistent statistics do not exist");
|
||||
SET GLOBAL innodb_stats_persistent= ON;
|
||||
CREATE TABLE t1 (t TEXT) ENGINE=InnoDB;
|
||||
connect con1,localhost,root,,test;
|
||||
SET DEBUG_SYNC='ib_trunc_table_trunc_completing SIGNAL committed WAIT_FOR ever';
|
||||
TRUNCATE TABLE t1;
|
||||
connection default;
|
||||
SET DEBUG_SYNC='now WAIT_FOR committed';
|
||||
disconnect con1;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
DROP TABLE t1;
|
54
mysql-test/suite/innodb/r/update_time.result
Normal file
54
mysql-test/suite/innodb/r/update_time.result
Normal file
|
@ -0,0 +1,54 @@
|
|||
#
|
||||
# Test that INFORMATION_SCHEMA.TABLES.UPDATE_TIME is filled
|
||||
# correctly for InnoDB tables.
|
||||
#
|
||||
CREATE TABLE t (a INT) ENGINE=INNODB;
|
||||
SELECT update_time FROM information_schema.tables WHERE table_name = 't';
|
||||
update_time
|
||||
NULL
|
||||
INSERT INTO t VALUES (1);
|
||||
SELECT COUNT(*) FROM information_schema.tables WHERE table_name = 't'
|
||||
AND update_time IS NOT NULL;
|
||||
COUNT(*)
|
||||
1
|
||||
# We cant deterministically check that the saved value is correct, but
|
||||
# at least we check that it is a timestamp not older than 2 minutes.
|
||||
# Usually update_time and NOW() are equal below, but on heavily loaded
|
||||
# machines NOW() could be younger.
|
||||
SELECT COUNT(*) FROM information_schema.tables WHERE table_name = 't'
|
||||
AND TIMESTAMPDIFF(SECOND, update_time, NOW()) < 120;
|
||||
COUNT(*)
|
||||
1
|
||||
CREATE TEMPORARY TABLE big (a TEXT) ENGINE=INNODB;
|
||||
SELECT COUNT(*) FROM information_schema.innodb_buffer_page
|
||||
WHERE table_name = '`test`.`t`';
|
||||
COUNT(*)
|
||||
1
|
||||
# INSERT lots of data in table 'big': begin
|
||||
# INSERT lots of data in table 'big': end
|
||||
SELECT COUNT(*) FROM information_schema.innodb_buffer_page
|
||||
WHERE table_name = '`test`.`t`';
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT COUNT(*) FROM information_schema.tables WHERE table_name = 't'
|
||||
AND update_time IS NOT NULL;
|
||||
COUNT(*)
|
||||
1
|
||||
DROP TEMPORARY TABLE big;
|
||||
# Test the behavior after restart with a prepared XA transaction
|
||||
XA START 'xatrx';
|
||||
INSERT INTO t VALUES (5);
|
||||
XA END 'xatrx';
|
||||
XA PREPARE 'xatrx';
|
||||
CONNECT con1,localhost,root,,;
|
||||
call mtr.add_suppression("Found 1 prepared XA transactions");
|
||||
FLUSH TABLES;
|
||||
# Kill and restart
|
||||
SELECT update_time FROM information_schema.tables WHERE table_name = 't';
|
||||
update_time
|
||||
NULL
|
||||
XA COMMIT 'xatrx';
|
||||
SELECT COUNT(update_time) FROM information_schema.tables WHERE table_name='t';
|
||||
COUNT(update_time)
|
||||
1
|
||||
DROP TABLE t;
|
63
mysql-test/suite/innodb/t/innodb-on-duplicate-update.test
Normal file
63
mysql-test/suite/innodb/t/innodb-on-duplicate-update.test
Normal file
|
@ -0,0 +1,63 @@
|
|||
--source include/have_innodb.inc
|
||||
|
||||
#
|
||||
# MDEV-13206: INSERT ON DUPLICATE KEY UPDATE foreign key fail
|
||||
#
|
||||
set sql_mode='';
|
||||
set innodb_strict_mode=0;
|
||||
|
||||
CREATE TABLE `v` (
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
|
||||
|
||||
INSERT v values (1);
|
||||
|
||||
CREATE TABLE `vp` (
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`v_id` int(10) unsigned NOT NULL,
|
||||
`p_id` int(10) unsigned NOT NULL,
|
||||
`ppp` varchar(255) NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `IDX_vp_uniq` (`v_id`,`p_id`),
|
||||
KEY `FK_vp_v` (`v_id`),
|
||||
CONSTRAINT `FK_vp_v` FOREIGN KEY (`v_id`) REFERENCES `v` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
|
||||
|
||||
INSERT vp VALUES (12, 1, 100, 'text12');
|
||||
INSERT INTO `vp` (`id`,`ppp`) VALUES (12, 'test12-2') ON DUPLICATE KEY UPDATE `ppp` = VALUES(`ppp`);
|
||||
SELECT * FROM vp;
|
||||
DROP TABLE vp, v;
|
||||
|
||||
CREATE TABLE t1 (i int PRIMARY KEY) ENGINE=InnoDB;
|
||||
INSERT into t1 values (1);
|
||||
|
||||
CREATE TABLE t2 (
|
||||
i int not null primary key,
|
||||
vi int not null,
|
||||
m int,
|
||||
UNIQUE KEY (vi),
|
||||
CONSTRAINT `cc` FOREIGN KEY (vi) REFERENCES t1 (i) ON DELETE CASCADE ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
INSERT into t2 VALUES (1, 1, 100);
|
||||
INSERT INTO t2 (i,m) VALUES (1, 2) ON DUPLICATE KEY UPDATE m=3;
|
||||
SELECT * FROM t2;
|
||||
|
||||
DROP TABLE t2,t1;
|
||||
|
||||
CREATE TABLE t1 (i int PRIMARY KEY) ENGINE=InnoDB;
|
||||
INSERT into t1 values (1);
|
||||
|
||||
CREATE TABLE t2 (
|
||||
i int not null primary key,
|
||||
vi int not null,
|
||||
m int,
|
||||
KEY (vi),
|
||||
CONSTRAINT `cc` FOREIGN KEY (vi) REFERENCES t1 (i) ON DELETE CASCADE ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
INSERT into t2 VALUES (1, 1, 100);
|
||||
INSERT INTO t2 (i,m) VALUES (1, 2) ON DUPLICATE KEY UPDATE m=3;
|
||||
SELECT * FROM t2;
|
||||
DROP TABLE t2, t1;
|
15
mysql-test/suite/innodb/t/innodb-replace-debug.test
Normal file
15
mysql-test/suite/innodb/t/innodb-replace-debug.test
Normal file
|
@ -0,0 +1,15 @@
|
|||
--source include/have_innodb.inc
|
||||
--source include/have_debug.inc
|
||||
|
||||
--echo #
|
||||
--echo # Bug#17604730 ASSERTION: *CURSOR->INDEX->NAME == TEMP_INDEX_PREFIX
|
||||
--echo #
|
||||
|
||||
create table t1 (f1 int primary key, f2 int, f3 int, unique key k1(f2),
|
||||
key k2(f3)) engine=innodb;
|
||||
insert into t1 values (14, 24, 34);
|
||||
set @@debug_dbug = '+d,row_ins_sec_index_entry_timeout';
|
||||
replace into t1 values (14, 25, 34);
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
set @@debug_dbug = '-d,row_ins_sec_index_entry_timeout';
|
46
mysql-test/suite/innodb/t/innodb_bulk_create_index.test
Normal file
46
mysql-test/suite/innodb/t/innodb_bulk_create_index.test
Normal file
|
@ -0,0 +1,46 @@
|
|||
######## suite/innodb/t/innodb_bulk_create_index.test #####
|
||||
# #
|
||||
# Testcase for worklog WL#7277: InnoDB: Bulk Load for Create Index #
|
||||
# The basic idea of bulk load is to build an index from bottom up #
|
||||
# (also known as sorted index build). #
|
||||
# Earlier index was create by repeatedly inserting records #
|
||||
# Test scenario : #
|
||||
# - Run bulk create index on 10K rows #
|
||||
# - Run bulk create index on table with various row types #
|
||||
# - Run DML and SELECT after bulk index creation #
|
||||
# Creation: #
|
||||
# 2014-06-19 Implemented this test as part of WL#7277 #
|
||||
# #
|
||||
######################################################################
|
||||
|
||||
-- source include/not_embedded.inc
|
||||
-- source include/innodb_page_size_small.inc
|
||||
-- source include/big_test.inc
|
||||
|
||||
# Test Row Format: REDUNDANT.
|
||||
let $row_format = REDUNDANT;
|
||||
-- source suite/innodb/include/innodb_bulk_create_index.inc
|
||||
|
||||
# Test Row Format: COMPACT.
|
||||
let $row_format = COMPACT;
|
||||
-- source suite/innodb/include/innodb_bulk_create_index.inc
|
||||
|
||||
# Test Row Format: DYNAMIC.
|
||||
let $row_format = DYNAMIC;
|
||||
-- source suite/innodb/include/innodb_bulk_create_index.inc
|
||||
|
||||
# Test Row Format: COMPRESSED.
|
||||
let $row_format = COMPRESSED;
|
||||
-- source suite/innodb/include/innodb_bulk_create_index.inc
|
||||
|
||||
# Test Fill Factor: 10
|
||||
let $row_format = COMPACT;
|
||||
SET GLOBAL innodb_fill_factor=10;
|
||||
-- source suite/innodb/include/innodb_bulk_create_index.inc
|
||||
|
||||
# Test Fill Factor: 50
|
||||
let $row_format = COMPACT;
|
||||
SET GLOBAL innodb_fill_factor=50;
|
||||
-- source suite/innodb/include/innodb_bulk_create_index.inc
|
||||
|
||||
SET GLOBAL innodb_fill_factor=default;
|
|
@ -0,0 +1,23 @@
|
|||
#
|
||||
# wl#7277: InnoDB: Bulk Load for Create Index
|
||||
#
|
||||
|
||||
# Test Restart & Crash Recovery.
|
||||
-- source include/big_test.inc
|
||||
-- source include/innodb_page_size_small.inc
|
||||
|
||||
# Test Row Format: REDUNDANT.
|
||||
let $row_format = REDUNDANT;
|
||||
-- source suite/innodb/include/innodb_bulk_create_index_debug.inc
|
||||
|
||||
# Test Row Format: COMPACT.
|
||||
let $row_format = COMPACT;
|
||||
-- source suite/innodb/include/innodb_bulk_create_index_debug.inc
|
||||
|
||||
# Test Row Format: DYNAMIC.
|
||||
let $row_format = DYNAMIC;
|
||||
-- source suite/innodb/include/innodb_bulk_create_index_debug.inc
|
||||
|
||||
# Test Row Format: COMPRESSED.
|
||||
let $row_format = COMPRESSED;
|
||||
-- source suite/innodb/include/innodb_bulk_create_index_debug.inc
|
|
@ -0,0 +1,75 @@
|
|||
#
|
||||
# Test flush on error in bulk load to make sure we do a proper cleanup.
|
||||
# Note: We flush all dirty pages before applying any online log in bulk load.
|
||||
#
|
||||
|
||||
-- source include/have_innodb.inc
|
||||
-- source include/have_debug.inc
|
||||
|
||||
# Create Insert Procedure
|
||||
DELIMITER |;
|
||||
CREATE PROCEDURE populate_t1()
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 10000) DO
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
DELIMITER ;|
|
||||
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
-- disable_query_log
|
||||
CALL populate_t1();
|
||||
-- enable_query_log
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
SET @saved_dbug= @@SESSION.debug_dbug;
|
||||
SET debug_dbug='+d,ib_index_build_fail_before_flush';
|
||||
|
||||
-- error ER_QUERY_INTERRUPTED
|
||||
CREATE INDEX idx_id ON t1(id);
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
-- error ER_QUERY_INTERRUPTED
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
-- error ER_QUERY_INTERRUPTED
|
||||
CREATE FULLTEXT INDEX fidx_title ON t1(title);
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
-- error ER_QUERY_INTERRUPTED
|
||||
ALTER TABLE t1 ADD COLUMN content TEXT, FORCE;
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
SET debug_dbug= @saved_dbug;
|
||||
|
||||
INSERT INTO t1 VALUES(10001, 10001, 'a10000');
|
||||
|
||||
-- error ER_DUP_ENTRY
|
||||
ALTER TABLE t1 ADD UNIQUE INDEX idx_title(title);
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
-- error ER_DUP_ENTRY
|
||||
ALTER TABLE t1 ADD UNIQUE INDEX idx_id(id), ADD UNIQUE INDEX idx_title(title);
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
DROP PROCEDURE populate_t1;
|
|
@ -0,0 +1,182 @@
|
|||
######## suite/innodb/t/innodb_wl7277_1.test #####
|
||||
# #
|
||||
# Testcase for worklog WL#7277: InnoDB: Bulk Load for Create Index #
|
||||
# The basic idea of bulk load is to build an index from bottom up #
|
||||
# (also known as sorted index build). #
|
||||
# Earlier index was create by repeatedly inserting records #
|
||||
# Test scenario : #
|
||||
# - Run bulk create index on replication setup #
|
||||
# - Run bulk create on partitioned table and see its replictaed #
|
||||
# to slave #
|
||||
# Creation: #
|
||||
# 2014-06-19 Implemented this test as part of WL#7277 #
|
||||
# #
|
||||
######################################################################
|
||||
|
||||
--source include/not_embedded.inc
|
||||
-- source include/have_innodb.inc
|
||||
-- source include/have_partition.inc
|
||||
-- source include/master-slave.inc
|
||||
|
||||
-- connection master
|
||||
# Create Insert Procedure
|
||||
DELIMITER |;
|
||||
CREATE PROCEDURE populate_t1(load_even INT)
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 100) DO
|
||||
IF i%2 = 0 AND load_even = 1 THEN
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
END IF;
|
||||
IF i%2 != 0 AND load_even != 1 THEN
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
END IF;
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
DELIMITER ;|
|
||||
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ;
|
||||
|
||||
|
||||
|
||||
|
||||
-- disable_query_log
|
||||
# Load half records
|
||||
CALL populate_t1(1);
|
||||
-- enable_query_log
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
/* Create index. */
|
||||
CREATE INDEX idx_id ON t1(id);
|
||||
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
|
||||
|
||||
/* Select by index. */
|
||||
EXPLAIN SELECT * FROM t1 WHERE id = 10;
|
||||
EXPLAIN SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 20;
|
||||
SELECT * FROM t1 WHERE title = 'a20';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 30;
|
||||
SELECT * FROM t1 WHERE title = 'a30';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 101;
|
||||
SELECT * FROM t1 WHERE title = 'a101';
|
||||
|
||||
/*Insert/Update/Delete. */
|
||||
DELETE FROM t1 WHERE id < 40 AND id > 30;
|
||||
INSERT INTO t1 VALUES(38, 38, 'b38');
|
||||
UPDATE t1 SET title = CONCAT('b', id) WHERE id < 30 AND id > 20;
|
||||
|
||||
SELECT * FROM t1 WHERE id = 28;
|
||||
SELECT * FROM t1 WHERE title = 'a28';
|
||||
SELECT * FROM t1 WHERE title = 'b28';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 38;
|
||||
SELECT * FROM t1 WHERE title = 'a38';
|
||||
SELECT * FROM t1 WHERE title = 'b38';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 101;
|
||||
SELECT * FROM t1 WHERE title = 'a101';
|
||||
|
||||
-- disable_query_log
|
||||
# Load half records (follow up load)
|
||||
CALL populate_t1(0);
|
||||
-- enable_query_log
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 20;
|
||||
SELECT * FROM t1 WHERE title = 'a20';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 30;
|
||||
SELECT * FROM t1 WHERE title = 'a30';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 101;
|
||||
SELECT * FROM t1 WHERE title = 'a101';
|
||||
|
||||
# Create partition table
|
||||
CREATE TABLE t_part (
|
||||
class INT ,
|
||||
id INT ,
|
||||
title VARCHAR(30)
|
||||
) ENGINE=InnoDB
|
||||
PARTITION BY RANGE(id)
|
||||
SUBPARTITION BY KEY(id)
|
||||
SUBPARTITIONS 4
|
||||
(
|
||||
PARTITION p0 VALUES LESS THAN (5000),
|
||||
PARTITION p1 VALUES LESS THAN (MAXVALUE)
|
||||
);
|
||||
INSERT INTO t_part SELECT * FROM t1;
|
||||
ALTER TABLE t_part ADD INDEX `idx` (class,id,title(10));
|
||||
|
||||
SELECT * FROM t_part WHERE id = 10;
|
||||
SELECT * FROM t_part WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t_part WHERE id = 20;
|
||||
SELECT * FROM t_part WHERE title = 'a20';
|
||||
|
||||
SELECT * FROM t_part WHERE id = 30;
|
||||
SELECT * FROM t_part WHERE title = 'a30';
|
||||
|
||||
SELECT * FROM t_part WHERE id = 101;
|
||||
SELECT * FROM t_part WHERE title = 'a101';
|
||||
|
||||
|
||||
--source include/sync_slave_sql_with_master.inc
|
||||
-- connection slave
|
||||
SHOW CREATE TABLE t1;
|
||||
SHOW CREATE TABLE t_part;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
SELECT COUNT(*) FROM t_part;
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 20;
|
||||
SELECT * FROM t1 WHERE title = 'a20';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 30;
|
||||
SELECT * FROM t1 WHERE title = 'a30';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 101;
|
||||
SELECT * FROM t1 WHERE title = 'a101';
|
||||
|
||||
|
||||
|
||||
SELECT * FROM t_part WHERE id = 10;
|
||||
SELECT * FROM t_part WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t_part WHERE id = 20;
|
||||
SELECT * FROM t_part WHERE title = 'a20';
|
||||
|
||||
SELECT * FROM t_part WHERE id = 30;
|
||||
SELECT * FROM t_part WHERE title = 'a30';
|
||||
|
||||
SELECT * FROM t_part WHERE id = 101;
|
||||
SELECT * FROM t_part WHERE title = 'a101';
|
||||
|
||||
|
||||
-- connection master
|
||||
DROP PROCEDURE populate_t1;
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t_part;
|
||||
--source include/rpl_end.inc
|
148
mysql-test/suite/innodb/t/innodb_bulk_create_index_small.test
Normal file
148
mysql-test/suite/innodb/t/innodb_bulk_create_index_small.test
Normal file
|
@ -0,0 +1,148 @@
|
|||
#
|
||||
# wl#7277: InnoDB: Bulk Load for Create Index
|
||||
#
|
||||
|
||||
-- source include/innodb_page_size_small.inc
|
||||
|
||||
# Create Insert Procedure
|
||||
DELIMITER |;
|
||||
CREATE PROCEDURE populate_t1()
|
||||
BEGIN
|
||||
DECLARE i int DEFAULT 1;
|
||||
|
||||
START TRANSACTION;
|
||||
WHILE (i <= 1000) DO
|
||||
INSERT INTO t1 VALUES (i, i, CONCAT('a', i));
|
||||
SET i = i + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END|
|
||||
DELIMITER ;|
|
||||
|
||||
SELECT @@innodb_fill_factor;
|
||||
|
||||
# Test Compact Table
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=COMPACT;
|
||||
|
||||
-- disable_query_log
|
||||
CALL populate_t1();
|
||||
-- enable_query_log
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
/* Create index. */
|
||||
CREATE INDEX idx_id ON t1(id);
|
||||
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
|
||||
/* Check table. */
|
||||
CHECK TABLE t1;
|
||||
|
||||
/* Select by index. */
|
||||
EXPLAIN SELECT * FROM t1 WHERE id = 10;
|
||||
EXPLAIN SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 500;
|
||||
SELECT * FROM t1 WHERE title = 'a500';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 1000;
|
||||
SELECT * FROM t1 WHERE title = 'a1000';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 1010;
|
||||
SELECT * FROM t1 WHERE title = 'a1010';
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
# Test Blob
|
||||
CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=COMPACT;
|
||||
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
SELECT CHAR_LENGTH(b) FROM t1 WHERE a=4975;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
SET GLOBAL innodb_file_per_table=default;
|
||||
|
||||
# Test Compressed Table
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
|
||||
CREATE TABLE t1(
|
||||
class INT,
|
||||
id INT,
|
||||
title VARCHAR(100)
|
||||
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4;
|
||||
|
||||
-- disable_query_log
|
||||
CALL populate_t1();
|
||||
-- enable_query_log
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
/* Create index. */
|
||||
CREATE INDEX idx_id ON t1(id);
|
||||
|
||||
CREATE INDEX idx_title ON t1(title);
|
||||
|
||||
/* Check table. */
|
||||
CHECK TABLE t1;
|
||||
|
||||
/* Select by index. */
|
||||
EXPLAIN SELECT * FROM t1 WHERE id = 10;
|
||||
EXPLAIN SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 10;
|
||||
SELECT * FROM t1 WHERE title = 'a10';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 500;
|
||||
SELECT * FROM t1 WHERE title = 'a500';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 1000;
|
||||
SELECT * FROM t1 WHERE title = 'a1000';
|
||||
|
||||
SELECT * FROM t1 WHERE id = 1010;
|
||||
SELECT * FROM t1 WHERE title = 'a1010';
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
# Test Compression & Blob
|
||||
CREATE TABLE t1(
|
||||
a INT PRIMARY KEY,
|
||||
b TEXT,
|
||||
c TEXT) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4;
|
||||
|
||||
INSERT INTO t1 VALUES
|
||||
(1, REPEAT('a',10000), 'a'),
|
||||
(2, REPEAT('b',20000), 'b'),
|
||||
(3, REPEAT('c',40000), 'c'),
|
||||
(4, REPEAT('d',60000), 'd');
|
||||
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
|
||||
CHECK TABLE t1;
|
||||
|
||||
SELECT CHAR_LENGTH(b) FROM t1 WHERE a=4975;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
SET GLOBAL innodb_file_per_table=default;
|
||||
|
||||
DROP PROCEDURE populate_t1;
|
18
mysql-test/suite/innodb/t/truncate_restart.test
Normal file
18
mysql-test/suite/innodb/t/truncate_restart.test
Normal file
|
@ -0,0 +1,18 @@
|
|||
--source include/have_innodb.inc
|
||||
--source include/have_debug.inc
|
||||
--source include/have_debug_sync.inc
|
||||
|
||||
call mtr.add_suppression("InnoDB: Cannot save table statistics for table `test`\\.`t1`: Persistent statistics do not exist");
|
||||
|
||||
SET GLOBAL innodb_stats_persistent= ON;
|
||||
CREATE TABLE t1 (t TEXT) ENGINE=InnoDB;
|
||||
--connect (con1,localhost,root,,test)
|
||||
SET DEBUG_SYNC='ib_trunc_table_trunc_completing SIGNAL committed WAIT_FOR ever';
|
||||
--send
|
||||
TRUNCATE TABLE t1;
|
||||
--connection default
|
||||
SET DEBUG_SYNC='now WAIT_FOR committed';
|
||||
--source include/restart_mysqld.inc
|
||||
--disconnect con1
|
||||
SELECT COUNT(*) FROM t1;
|
||||
DROP TABLE t1;
|
1
mysql-test/suite/innodb/t/update_time-master.opt
Normal file
1
mysql-test/suite/innodb/t/update_time-master.opt
Normal file
|
@ -0,0 +1 @@
|
|||
--innodb-buffer-pool-size=10M
|
78
mysql-test/suite/innodb/t/update_time.test
Normal file
78
mysql-test/suite/innodb/t/update_time.test
Normal file
|
@ -0,0 +1,78 @@
|
|||
###################################################################
|
||||
-- echo #
|
||||
-- echo # Test that INFORMATION_SCHEMA.TABLES.UPDATE_TIME is filled
|
||||
-- echo # correctly for InnoDB tables.
|
||||
-- echo #
|
||||
|
||||
-- source include/have_innodb.inc
|
||||
-- source include/have_innodb_max_16k.inc
|
||||
# restart does not work with embedded
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
CREATE TABLE t (a INT) ENGINE=INNODB;
|
||||
|
||||
SELECT update_time FROM information_schema.tables WHERE table_name = 't';
|
||||
|
||||
INSERT INTO t VALUES (1);
|
||||
|
||||
SELECT COUNT(*) FROM information_schema.tables WHERE table_name = 't'
|
||||
AND update_time IS NOT NULL;
|
||||
|
||||
-- echo # We cant deterministically check that the saved value is correct, but
|
||||
-- echo # at least we check that it is a timestamp not older than 2 minutes.
|
||||
-- echo # Usually update_time and NOW() are equal below, but on heavily loaded
|
||||
-- echo # machines NOW() could be younger.
|
||||
SELECT COUNT(*) FROM information_schema.tables WHERE table_name = 't'
|
||||
AND TIMESTAMPDIFF(SECOND, update_time, NOW()) < 120;
|
||||
|
||||
CREATE TEMPORARY TABLE big (a TEXT) ENGINE=INNODB;
|
||||
|
||||
SELECT COUNT(*) FROM information_schema.innodb_buffer_page
|
||||
WHERE table_name = '`test`.`t`';
|
||||
|
||||
# evict table 't' by inserting as much data as the BP size itself
|
||||
-- echo # INSERT lots of data in table 'big': begin
|
||||
-- disable_query_log
|
||||
BEGIN;
|
||||
-- let $i = 10240
|
||||
while ($i)
|
||||
{
|
||||
INSERT INTO big VALUES (REPEAT('a', 1024));
|
||||
dec $i;
|
||||
}
|
||||
COMMIT;
|
||||
-- enable_query_log
|
||||
-- echo # INSERT lots of data in table 'big': end
|
||||
|
||||
# confirm that all pages for table 't' have been evicted
|
||||
SELECT COUNT(*) FROM information_schema.innodb_buffer_page
|
||||
WHERE table_name = '`test`.`t`';
|
||||
|
||||
# The result from this query will change once update_time becomes persistent
|
||||
# (WL#6917).
|
||||
SELECT COUNT(*) FROM information_schema.tables WHERE table_name = 't'
|
||||
AND update_time IS NOT NULL;
|
||||
|
||||
DROP TEMPORARY TABLE big;
|
||||
|
||||
-- echo # Test the behavior after restart with a prepared XA transaction
|
||||
|
||||
XA START 'xatrx';
|
||||
INSERT INTO t VALUES (5);
|
||||
XA END 'xatrx';
|
||||
XA PREPARE 'xatrx';
|
||||
|
||||
CONNECT (con1,localhost,root,,);
|
||||
|
||||
call mtr.add_suppression("Found 1 prepared XA transactions");
|
||||
FLUSH TABLES;
|
||||
|
||||
--source include/kill_and_restart_mysqld.inc
|
||||
|
||||
SELECT update_time FROM information_schema.tables WHERE table_name = 't';
|
||||
|
||||
XA COMMIT 'xatrx';
|
||||
|
||||
SELECT COUNT(update_time) FROM information_schema.tables WHERE table_name='t';
|
||||
|
||||
DROP TABLE t;
|
1
mysql-test/suite/mariabackup/mdev-14447.opt
Normal file
1
mysql-test/suite/mariabackup/mdev-14447.opt
Normal file
|
@ -0,0 +1 @@
|
|||
--sequence --innodb-data-file-path=ibdata_first:3M;ibdata_second:1M:autoextend
|
19
mysql-test/suite/mariabackup/mdev-14447.result
Normal file
19
mysql-test/suite/mariabackup/mdev-14447.result
Normal file
|
@ -0,0 +1,19 @@
|
|||
call mtr.add_suppression("InnoDB: New log files created");
|
||||
CREATE TABLE t(a varchar(40) PRIMARY KEY, b varchar(40), c varchar(40), d varchar(40), index(b,c,d)) ENGINE INNODB;
|
||||
# Create full backup , modify table, then create incremental/differential backup
|
||||
BEGIN;
|
||||
INSERT INTO t select uuid(), uuid(), uuid(), uuid() from seq_1_to_100000;
|
||||
COMMIT;
|
||||
SELECT count(*) FROM t;
|
||||
count(*)
|
||||
100000
|
||||
# Prepare full backup, apply incremental one
|
||||
# Restore and check results
|
||||
# shutdown server
|
||||
# remove datadir
|
||||
# xtrabackup move back
|
||||
# restart server
|
||||
SELECT count(*) FROM t;
|
||||
count(*)
|
||||
100000
|
||||
DROP TABLE t;
|
46
mysql-test/suite/mariabackup/mdev-14447.test
Normal file
46
mysql-test/suite/mariabackup/mdev-14447.test
Normal file
|
@ -0,0 +1,46 @@
|
|||
call mtr.add_suppression("InnoDB: New log files created");
|
||||
|
||||
let $basedir=$MYSQLTEST_VARDIR/tmp/backup;
|
||||
let $incremental_dir=$MYSQLTEST_VARDIR/tmp/backup_inc1;
|
||||
|
||||
CREATE TABLE t(a varchar(40) PRIMARY KEY, b varchar(40), c varchar(40), d varchar(40), index(b,c,d)) ENGINE INNODB;
|
||||
|
||||
echo # Create full backup , modify table, then create incremental/differential backup;
|
||||
--disable_result_log
|
||||
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$basedir;
|
||||
--enable_result_log
|
||||
BEGIN;
|
||||
INSERT INTO t select uuid(), uuid(), uuid(), uuid() from seq_1_to_100000;
|
||||
COMMIT;
|
||||
SELECT count(*) FROM t;
|
||||
|
||||
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$incremental_dir --incremental-basedir=$basedir;
|
||||
|
||||
--disable_result_log
|
||||
echo # Prepare full backup, apply incremental one;
|
||||
exec $XTRABACKUP --prepare --apply-log-only --target-dir=$basedir;
|
||||
exec $XTRABACKUP --prepare --apply-log-only --target-dir=$basedir --incremental-dir=$incremental_dir ;
|
||||
|
||||
echo # Restore and check results;
|
||||
let $targetdir=$basedir;
|
||||
#-- source include/restart_and_restore.inc
|
||||
|
||||
let $_datadir= `SELECT @@datadir`;
|
||||
let $innodb_data_file_path=`SELECT @@innodb_data_file_path`;
|
||||
echo # shutdown server;
|
||||
--source include/shutdown_mysqld.inc
|
||||
echo # remove datadir;
|
||||
rmdir $_datadir;
|
||||
echo # xtrabackup move back;
|
||||
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --copy-back --datadir=$_datadir "--innodb_data_file_path=$innodb_data_file_path" --target-dir=$targetdir;
|
||||
echo # restart server;
|
||||
--source include/start_mysqld.inc
|
||||
|
||||
|
||||
--enable_result_log
|
||||
SELECT count(*) FROM t;
|
||||
DROP TABLE t;
|
||||
|
||||
# Cleanup
|
||||
rmdir $basedir;
|
||||
rmdir $incremental_dir;
|
|
@ -99,7 +99,7 @@ DROP VIEW v1;
|
|||
ERROR 42S02: Unknown VIEW: 'test.v1'
|
||||
DROP VIEW IF EXISTS v2;
|
||||
Warnings:
|
||||
Note 4090 Unknown VIEW: 'test.v2'
|
||||
Note 4091 Unknown VIEW: 'test.v2'
|
||||
# Syncing slave with master
|
||||
connection slave;
|
||||
SELECT * FROM v1;
|
||||
|
|
82
mysql-test/suite/rpl/r/rpl_gtid_delete_domain.result
Normal file
82
mysql-test/suite/rpl/r/rpl_gtid_delete_domain.result
Normal file
|
@ -0,0 +1,82 @@
|
|||
include/master-slave.inc
|
||||
[connection master]
|
||||
connection master;
|
||||
SET @@SESSION.gtid_domain_id=0;
|
||||
CREATE TABLE t (a INT);
|
||||
connection slave;
|
||||
connection slave;
|
||||
call mtr.add_suppression("connecting slave requested to start from.*which is not in the master's binlog");
|
||||
include/stop_slave.inc
|
||||
CHANGE MASTER TO master_use_gtid=slave_pos;
|
||||
connection master;
|
||||
SET @@SESSION.gtid_domain_id=11;
|
||||
SET @@SESSION.server_id=111;
|
||||
SET @@SESSION.gtid_seq_no=1;
|
||||
INSERT INTO t SET a=1;
|
||||
connection slave;
|
||||
SET @save.gtid_slave_pos=@@global.gtid_slave_pos;
|
||||
SET @@global.gtid_slave_pos=concat(@@global.gtid_slave_pos, ",", 11, "-", 111, "-", 1 + 1);
|
||||
Warnings:
|
||||
Warning 1947 Specified GTID 0-1-1 conflicts with the binary log which contains a more recent GTID 0-2-2. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_pos
|
||||
START SLAVE IO_THREAD;
|
||||
include/wait_for_slave_io_error.inc [errno=1236]
|
||||
connection master;
|
||||
FLUSH BINARY LOGS;
|
||||
PURGE BINARY LOGS TO 'master-bin.000002';;
|
||||
FLUSH BINARY LOGS DELETE_DOMAIN_ID=(11);
|
||||
SELECT @@global.gtid_binlog_pos, @@global.gtid_binlog_state;
|
||||
@@global.gtid_binlog_pos @@global.gtid_binlog_state
|
||||
0-1-1 0-1-1
|
||||
connection slave;
|
||||
SELECT @@global.gtid_slave_pos;
|
||||
@@global.gtid_slave_pos
|
||||
0-1-1,11-111-2
|
||||
include/start_slave.inc
|
||||
==== BEGIN include/start_slave.inc ====
|
||||
con='slave' warn='1' qlog='1' rlog='1' aborterr='1'
|
||||
START SLAVE;
|
||||
.==== BEGIN include/wait_for_slave_to_start.inc ====
|
||||
. con='slave' warn='1' qlog='1' rlog='1' aborterr='1'
|
||||
..==== BEGIN include/wait_for_slave_io_to_start.inc ====
|
||||
.. con='slave' warn='1' qlog='1' rlog='1' aborterr='1'
|
||||
...==== BEGIN include/wait_for_slave_param.inc [Slave_IO_Running] ====
|
||||
... con='slave' warn='1' qlog='1' rlog='1' aborterr='1'
|
||||
Waiting until 'Slave_IO_Running' = 'Yes' [timeout='300', $slave_error_param='Last_IO_Errno']
|
||||
[connection slave]
|
||||
...==== END include/wait_for_slave_param.inc [Slave_IO_Running] ====
|
||||
... con='slave' warn='1' qlog='1' rlog='1' aborterr='1'
|
||||
[connection slave]
|
||||
..==== END include/wait_for_slave_io_to_start.inc ====
|
||||
.. con='slave' warn='1' qlog='1' rlog='1' aborterr='1'
|
||||
..==== BEGIN include/wait_for_slave_sql_to_start.inc ====
|
||||
.. con='slave' warn='1' qlog='1' rlog='1' aborterr='1'
|
||||
...==== BEGIN include/wait_for_slave_param.inc [Slave_SQL_Running] ====
|
||||
... con='slave' warn='1' qlog='1' rlog='1' aborterr='1'
|
||||
Waiting until 'Slave_SQL_Running' = 'Yes' [timeout='300', $slave_error_param='1']
|
||||
[connection slave]
|
||||
...==== END include/wait_for_slave_param.inc [Slave_SQL_Running] ====
|
||||
... con='slave' warn='1' qlog='1' rlog='1' aborterr='1'
|
||||
[connection slave]
|
||||
..==== END include/wait_for_slave_sql_to_start.inc ====
|
||||
.. con='slave' warn='1' qlog='1' rlog='1' aborterr='1'
|
||||
[connection slave]
|
||||
.==== END include/wait_for_slave_to_start.inc ====
|
||||
. con='slave' warn='1' qlog='1' rlog='1' aborterr='1'
|
||||
[connection slave]
|
||||
==== END include/start_slave.inc ====
|
||||
con='slave' warn='1' qlog='1' rlog='1' aborterr='1'
|
||||
connection master;
|
||||
INSERT INTO t SET a=1;
|
||||
connection slave;
|
||||
include/wait_for_slave_io_error.inc [errno=1236]
|
||||
connection master;
|
||||
FLUSH BINARY LOGS;
|
||||
PURGE BINARY LOGS TO 'master-bin.000004';;
|
||||
FLUSH BINARY LOGS DELETE_DOMAIN_ID=(11);
|
||||
connection slave;
|
||||
include/start_slave.inc
|
||||
connection master;
|
||||
SET @@SESSION.gtid_domain_id=0;
|
||||
DROP TABLE t;
|
||||
connection slave;
|
||||
include/rpl_end.inc
|
|
@ -128,7 +128,7 @@ show warnings;
|
|||
Level Code Message
|
||||
Error 1062 Duplicate entry '20' for key 'a'
|
||||
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||
Note 4092 At line 4 in mysqltest1.foo4
|
||||
Note 4093 At line 4 in mysqltest1.foo4
|
||||
select * from t2;
|
||||
a
|
||||
20
|
||||
|
@ -291,7 +291,7 @@ end|
|
|||
do fn1(100);
|
||||
Warnings:
|
||||
Error 1062 Duplicate entry '100' for key 'a'
|
||||
Note 4092 At line 3 in mysqltest1.fn1
|
||||
Note 4093 At line 3 in mysqltest1.fn1
|
||||
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||
select fn1(20);
|
||||
ERROR 23000: Duplicate entry '20' for key 'a'
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue