Merge 10.2 into 10.3

This commit is contained in:
Marko Mäkelä 2019-03-26 15:03:37 +02:00
commit ffc69dbd05
20 changed files with 119 additions and 69 deletions

View file

@ -1210,6 +1210,7 @@ copy_or_move_file(const char *src_file_path,
if (!directory_exists(dst_dir, true)) {
ret = false;
free(link_filepath);
goto cleanup;
}

View file

@ -381,6 +381,7 @@ log_online_setup_bitmap_file_range(
msg("InnoDB: Error: inconsistent bitmap file "
"directory");
os_file_closedir(bitmap_dir);
free(bitmap_files->files);
return FALSE;
}

View file

@ -385,6 +385,7 @@ create_worker_threads(uint n)
return threads;
err:
my_free(threads);
return NULL;
}

View file

@ -5230,6 +5230,7 @@ next_file_item_1:
fileinfo.name, NULL))
{
os_file_closedir(dbdir);
os_file_closedir(dir);
return(FALSE);
}
}

View file

@ -1979,8 +1979,8 @@ FROM t2);
MIN(t2.pk)
NULL
Warnings:
Warning 1292 Truncated incorrect INTEGER value: 'j'
Warning 1292 Truncated incorrect INTEGER value: 'j'
Warning 1292 Truncated incorrect DOUBLE value: 'j'
Warning 1292 Truncated incorrect DOUBLE value: 'j'
EXPLAIN
SELECT MIN(t2.pk)
@ -1993,8 +1993,8 @@ id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 2
Warnings:
Warning 1292 Truncated incorrect INTEGER value: 'j'
Warning 1292 Truncated incorrect INTEGER value: 'j'
Warning 1292 Truncated incorrect DOUBLE value: 'j'
Warning 1292 Truncated incorrect DOUBLE value: 'j'
#
# 2) Test that subquery materialization is setup for query with

View file

@ -14,14 +14,6 @@ FROM mysql.slow_log
WHERE sql_text NOT LIKE '%debug_dbug%';
END
$$
CREATE PROCEDURE show_slow_log_exclude_ps()
BEGIN
SELECT CONCAT('[slow] ', sql_text) AS sql_text
FROM mysql.slow_log
WHERE sql_text NOT LIKE '%debug_dbug%'
AND sql_text NOT IN ('Prepare','Close stmt');
END
$$
#
# Expect all admin statements in the slow log (ON,DEFAULT)
#
@ -231,4 +223,3 @@ SET @@global.slow_query_log= @org_slow_query_log;
SET @@global.log_output= @org_log_output;
SET @@global.log_slow_admin_statements= @org_log_slow_admin_statements;
DROP PROCEDURE show_slow_log;
DROP PROCEDURE show_slow_log_exclude_ps;

View file

@ -19,14 +19,6 @@ BEGIN
WHERE sql_text NOT LIKE '%debug_dbug%';
END
$$
CREATE PROCEDURE show_slow_log_exclude_ps()
BEGIN
SELECT CONCAT('[slow] ', sql_text) AS sql_text
FROM mysql.slow_log
WHERE sql_text NOT LIKE '%debug_dbug%'
AND sql_text NOT IN ('Prepare','Close stmt');
END
$$
DELIMITER ;$$
@ -100,4 +92,3 @@ SET @@global.slow_query_log= @org_slow_query_log;
SET @@global.log_output= @org_log_output;
SET @@global.log_slow_admin_statements= @org_log_slow_admin_statements;
DROP PROCEDURE show_slow_log;
DROP PROCEDURE show_slow_log_exclude_ps;

View file

@ -5,7 +5,7 @@ SET SQL_MODE= 'STRICT_ALL_TABLES';
CREATE TABLE t1 (a INT);
PREPARE stmt FROM "CREATE TABLE tmp AS SELECT * FROM t1 WHERE 'foo' && 0";
Warnings:
Warning 1292 Truncated incorrect INTEGER value: 'foo'
Warning 1292 Truncated incorrect DOUBLE value: 'foo'
EXECUTE stmt;
ERROR 22007: Truncated incorrect INTEGER value: 'foo'
SELECT a FROM t1 GROUP BY NULL WITH ROLLUP;
@ -16,7 +16,7 @@ SET SQL_MODE= 'STRICT_ALL_TABLES';
CREATE TABLE t1 (a INT);
PREPARE stmt FROM "CREATE TABLE tmp AS SELECT * FROM t1 WHERE 'foo' && 0";
Warnings:
Warning 1292 Truncated incorrect INTEGER value: 'foo'
Warning 1292 Truncated incorrect DOUBLE value: 'foo'
EXECUTE stmt;
ERROR 22007: Truncated incorrect INTEGER value: 'foo'
SET @a = REPLACE( @@global.optimizer_switch, '=on', '=off' ) ;
@ -28,7 +28,7 @@ SET sql_mode=DEFAULT;
SET SQL_MODE='STRICT_ALL_TABLES';
PREPARE stmt FROM "CREATE TABLE ps AS SELECT 1 FROM DUAL WHERE 'foo' && 0";
Warnings:
Warning 1292 Truncated incorrect INTEGER value: 'foo'
Warning 1292 Truncated incorrect DOUBLE value: 'foo'
EXECUTE stmt;
ERROR 22007: Truncated incorrect INTEGER value: 'foo'
SELECT 'All done';
@ -38,7 +38,7 @@ SET SQL_MODE=DEFAULT;
SET SQL_MODE='STRICT_ALL_TABLES';
PREPARE stmt FROM "CREATE TABLE ps AS SELECT 1 FROM DUAL WHERE 'foo' && 0";
Warnings:
Warning 1292 Truncated incorrect INTEGER value: 'foo'
Warning 1292 Truncated incorrect DOUBLE value: 'foo'
EXECUTE stmt;
ERROR 22007: Truncated incorrect INTEGER value: 'foo'
DEALLOCATE PREPARE stmt;
@ -50,7 +50,7 @@ SET SQL_MODE= 'STRICT_ALL_TABLES';
CREATE TABLE t1 (a INT);
PREPARE stmt FROM "CREATE TABLE tmp AS SELECT * FROM t1 WHERE 'foo' && 0";
Warnings:
Warning 1292 Truncated incorrect INTEGER value: 'foo'
Warning 1292 Truncated incorrect DOUBLE value: 'foo'
EXECUTE stmt;
ERROR 22007: Truncated incorrect INTEGER value: 'foo'
SELECT a FROM t1 GROUP BY a;
@ -63,7 +63,7 @@ SET SQL_MODE= 'STRICT_ALL_TABLES';
CREATE TABLE t1 (a INT);
PREPARE stmt FROM "CREATE TABLE tmp AS SELECT * FROM t1 WHERE 'foo' && 0";
Warnings:
Warning 1292 Truncated incorrect INTEGER value: 'foo'
Warning 1292 Truncated incorrect DOUBLE value: 'foo'
EXECUTE stmt;
ERROR 22007: Truncated incorrect INTEGER value: 'foo'
SELECT a FROM t1 GROUP BY a;

View file

@ -1020,6 +1020,26 @@ cast('-0.0' as decimal(5,1)) < 0
# End of 5.5 tests
#
#
# Start of 10.1 tests
#
#
# MDEV-18968 Both (WHERE 0.1) and (WHERE NOT 0.1) return empty set
#
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (10);
SELECT CASE WHEN 0.1 THEN 'TRUE' ELSE 'FALSE' END FROM t1;
CASE WHEN 0.1 THEN 'TRUE' ELSE 'FALSE' END
TRUE
SELECT * FROM t1 WHERE 0.1;
a
10
SELECT * FROM t1 WHERE NOT 0.1;
a
DROP TABLE t1;
#
# End of 10.1 tests
#
#
# Start of 10.2 tests
#
#

View file

@ -613,6 +613,27 @@ select cast('-0.0' as decimal(5,1)) < 0;
--echo # End of 5.5 tests
--echo #
--echo #
--echo # Start of 10.1 tests
--echo #
--echo #
--echo # MDEV-18968 Both (WHERE 0.1) and (WHERE NOT 0.1) return empty set
--echo #
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (10);
SELECT CASE WHEN 0.1 THEN 'TRUE' ELSE 'FALSE' END FROM t1;
SELECT * FROM t1 WHERE 0.1;
SELECT * FROM t1 WHERE NOT 0.1;
DROP TABLE t1;
--echo #
--echo # End of 10.1 tests
--echo #
--echo #
--echo # Start of 10.2 tests
--echo #

View file

@ -1 +1,2 @@
--innodb --innodb-data-home-dir= --innodb-data-file-path=$MYSQLTEST_VARDIR/tmp/absolute_path_ibdata1:3M;ibdata_second:1M:autoextend --innodb-undo-tablespaces=2
--innodb --innodb-data-home-dir= --innodb-data-file-path=$MYSQLTEST_VARDIR/tmp/absolute_path_ibdata1:6M;ibdata_second:1M:autoextend
--innodb-undo-tablespaces=2

View file

@ -2,12 +2,32 @@
# Innodb system tablespace is specified with absolute path in the .opt file
CREATE TABLE t(i INT) ENGINE INNODB;
INSERT INTO t VALUES(1);
let INNODB_PAGE_SIZE=`select @@innodb_page_size`;
let MYSQLD_DATADIR= `SELECT @@datadir`;
--source include/shutdown_mysqld.inc
perl;
my $file= "$ENV{MYSQLD_DATADIR}/ibdata_second";
open(FILE, "+<", $file) or die "Unable to open $file\n";
binmode FILE;
my $ps= $ENV{INNODB_PAGE_SIZE};
my $page;
my $pos = $ps * 0;
sysseek(FILE, $pos, 0) || die "Unable to seek $file\n";
die "Unable to read $file" unless sysread(FILE, $page, $ps) == $ps;
substr($page,26,8) = pack("NN", 1, 1);
sysseek(FILE, $pos, 0) || die "Unable to rewind $file\n";
syswrite(FILE, $page, $ps)==$ps || die "Unable to write $file\n";
close(FILE) || die "Unable to close $file\n";
EOF
--source include/start_mysqld.inc
echo # xtrabackup backup;
let $targetdir=$MYSQLTEST_VARDIR/tmp/backup;
let $_innodb_data_file_path=`select @@innodb_data_file_path`;
let $_innodb_data_home_dir=`select @@innodb_data_home_dir`;
let $_datadir= `SELECT @@datadir`;
--disable_result_log
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$targetdir;
@ -16,11 +36,11 @@ exec $XTRABACKUP --prepare --target-dir=$targetdir;
--source include/shutdown_mysqld.inc
echo # remove datadir;
rmdir $_datadir;
rmdir $MYSQLD_DATADIR;
#remove out-of-datadir ibdata1
remove_file $MYSQLTEST_VARDIR/tmp/absolute_path_ibdata1;
echo # xtrabackup copy back;
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --copy-back --datadir=$_datadir --target-dir=$targetdir "--innodb_data_file_path=$_innodb_data_file_path" --innodb_data_home_dir=$_innodb_data_home_dir;
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --copy-back --datadir=$MYSQLD_DATADIR --target-dir=$targetdir "--innodb_data_file_path=$_innodb_data_file_path" --innodb_data_home_dir=$_innodb_data_home_dir;
echo # restart server;
--source include/start_mysqld.inc
--enable_result_log

View file

@ -1208,6 +1208,13 @@ public:
}
virtual String *val_nodeset(String*) { return 0; }
bool eval_const_cond()
{
DBUG_ASSERT(const_item());
DBUG_ASSERT(!is_expensive());
return val_bool();
}
/*
save_val() is method of val_* family which stores value in the given
field.

View file

@ -4609,7 +4609,7 @@ Item_cond::fix_fields(THD *thd, Item **ref)
if (item->const_item() && !item->with_param &&
!item->is_expensive() && !cond_has_datetime_is_null(item))
{
if (item->val_int() == is_and_cond && top_level())
if (item->eval_const_cond() == is_and_cond && top_level())
{
/*
a. This is "... AND true_cond AND ..."

View file

@ -70,18 +70,6 @@ bool check_reserved_words(const LEX_CSTRING *name)
}
/**
@return
TRUE if item is a constant
*/
bool
eval_const_cond(COND *cond)
{
return ((Item_func*) cond)->val_int() ? TRUE : FALSE;
}
/**
Test if the sum of arguments overflows the ulonglong range.
*/

View file

@ -3162,7 +3162,6 @@ Item *get_system_var(THD *thd, enum_var_type var_type,
extern bool check_reserved_words(const LEX_CSTRING *name);
double my_double_round(double value, longlong dec, bool dec_unsigned,
bool truncate);
bool eval_const_cond(COND *cond);
extern bool volatile mqh_used;

View file

@ -1,5 +1,5 @@
/* Copyright (c) 2000, 2017, Oracle and/or its affiliates.
Copyright (c) 2008, 2018, MariaDB
Copyright (c) 2008, 2019, MariaDB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -3795,8 +3795,10 @@ mysql_execute_command(THD *thd)
else
{
WSREP_SYNC_WAIT(thd, WSREP_SYNC_WAIT_BEFORE_SHOW);
#ifdef ENABLED_PROFILING
if (lex->sql_command == SQLCOM_SHOW_PROFILE)
thd->profiling.discard_current_query();
#endif
}
thd->status_var.last_query_cost= 0.0;
@ -6666,7 +6668,7 @@ static bool check_rename_table(THD *thd, TABLE_LIST *first_table,
0, 0))
return 1;
/* check if these are refering to temporary tables */
/* check if these are referring to temporary tables */
table->table= find_temporary_table_for_rename(thd, first_table, table);
table->next_local->table= table->table;

View file

@ -16371,7 +16371,7 @@ Item::remove_eq_conds(THD *thd, Item::cond_result *cond_value, bool top_level_ar
{
if (const_item() && !is_expensive())
{
*cond_value= eval_const_cond(this) ? Item::COND_TRUE : Item::COND_FALSE;
*cond_value= eval_const_cond() ? Item::COND_TRUE : Item::COND_FALSE;
return (COND*) 0;
}
*cond_value= Item::COND_OK;
@ -16385,7 +16385,7 @@ Item_bool_func2::remove_eq_conds(THD *thd, Item::cond_result *cond_value,
{
if (const_item() && !is_expensive())
{
*cond_value= eval_const_cond(this) ? Item::COND_TRUE : Item::COND_FALSE;
*cond_value= eval_const_cond() ? Item::COND_TRUE : Item::COND_FALSE;
return (COND*) 0;
}
if ((*cond_value= eq_cmp_result()) != Item::COND_OK)

View file

@ -938,6 +938,7 @@ buf_page_is_corrupted(
const void* space)
#endif
{
ut_ad(page_size.logical() == srv_page_size);
#ifndef UNIV_INNOCHECKSUM
DBUG_EXECUTE_IF("buf_page_import_corrupt_failure", return(true); );
#endif
@ -1031,26 +1032,31 @@ buf_page_is_corrupted(
compile_time_assert(!(FIL_PAGE_LSN % 8));
/* declare empty pages non-corrupted */
if (checksum_field1 == 0
&& checksum_field2 == 0
&& *reinterpret_cast<const ib_uint64_t*>(
read_buf + FIL_PAGE_LSN) == 0) {
/* make sure that the page is really empty */
for (ulint i = 0; i < page_size.logical(); i++) {
if (read_buf[i] != 0) {
return(true);
/* A page filled with NUL bytes is considered not corrupted.
The FIL_PAGE_FILE_FLUSH_LSN field may be written nonzero for
the first page of each file of the system tablespace.
Ignore it for the system tablespace. */
if (!checksum_field1 && !checksum_field2) {
ulint i = 0;
do {
if (read_buf[i]) {
return true;
}
} while (++i < FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION);
#ifndef UNIV_INNOCHECKSUM
if (!space || !space->id) {
/* Skip FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION
in the system tablespace. */
i += 8;
}
#ifdef UNIV_INNOCHECKSUM
if (log_file) {
fprintf(log_file, "Page::%llu"
" is empty and uncorrupted\n",
cur_page_num);
}
#endif /* UNIV_INNOCHECKSUM */
return(false);
#endif
do {
if (read_buf[i]) {
return true;
}
} while (++i < srv_page_size);
return false;
}
switch (curr_algo) {

View file

@ -19673,8 +19673,8 @@ static void test_big_packet()
opt_password, current_db, opt_port,
opt_unix_socket, 0)))
{
mysql_close(mysql_local);
fprintf(stderr, "\n connection failed(%s)", mysql_error(mysql_local));
mysql_close(mysql_local);
exit(1);
}