diff options
23 files changed, 222 insertions, 81 deletions
diff --git a/extra/mariabackup/backup_copy.cc b/extra/mariabackup/backup_copy.cc index 39171f29a2a..293b8d02af2 100644 --- a/extra/mariabackup/backup_copy.cc +++ b/extra/mariabackup/backup_copy.cc @@ -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; } diff --git a/extra/mariabackup/changed_page_bitmap.cc b/extra/mariabackup/changed_page_bitmap.cc index bff5f64e8fa..53fd4995b7c 100644 --- a/extra/mariabackup/changed_page_bitmap.cc +++ b/extra/mariabackup/changed_page_bitmap.cc @@ -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; } diff --git a/extra/mariabackup/ds_compress.cc b/extra/mariabackup/ds_compress.cc index 7f4744ec972..7c2360dbadb 100644 --- a/extra/mariabackup/ds_compress.cc +++ b/extra/mariabackup/ds_compress.cc @@ -385,6 +385,7 @@ create_worker_threads(uint n) return threads; err: + my_free(threads); return NULL; } diff --git a/extra/mariabackup/xtrabackup.cc b/extra/mariabackup/xtrabackup.cc index de678da7e30..0bf027cf243 100644 --- a/extra/mariabackup/xtrabackup.cc +++ b/extra/mariabackup/xtrabackup.cc @@ -5246,6 +5246,7 @@ next_file_item_1: fileinfo.name, NULL)) { os_file_closedir(dbdir); + os_file_closedir(dir); return(FALSE); } } diff --git a/mysql-test/main/func_group.result b/mysql-test/main/func_group.result index 5526acb8825..c6daf2335a9 100644 --- a/mysql-test/main/func_group.result +++ b/mysql-test/main/func_group.result @@ -1980,8 +1980,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) @@ -1994,8 +1994,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 diff --git a/mysql-test/main/log_slow_debug.result b/mysql-test/main/log_slow_debug.result index 2da10949315..8d35cf9f36e 100644 --- a/mysql-test/main/log_slow_debug.result +++ b/mysql-test/main/log_slow_debug.result @@ -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; diff --git a/mysql-test/main/log_slow_debug.test b/mysql-test/main/log_slow_debug.test index 5bacda31d93..d92931c52f2 100644 --- a/mysql-test/main/log_slow_debug.test +++ b/mysql-test/main/log_slow_debug.test @@ -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; diff --git a/mysql-test/main/ps_error.result b/mysql-test/main/ps_error.result index c3c312e82f5..448832dc7a8 100644 --- a/mysql-test/main/ps_error.result +++ b/mysql-test/main/ps_error.result @@ -5,9 +5,9 @@ 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' +ERROR 22007: Truncated incorrect DOUBLE value: 'foo' SELECT a FROM t1 GROUP BY NULL WITH ROLLUP; a DROP TABLE t1; @@ -16,9 +16,9 @@ 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' +ERROR 22007: Truncated incorrect DOUBLE value: 'foo' SET @a = REPLACE( @@global.optimizer_switch, '=on', '=off' ) ; DROP TABLE t1; SET sql_mode=DEFAULT; @@ -28,9 +28,9 @@ 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' +ERROR 22007: Truncated incorrect DOUBLE value: 'foo' SELECT 'All done'; All done All done @@ -38,9 +38,9 @@ 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' +ERROR 22007: Truncated incorrect DOUBLE value: 'foo' DEALLOCATE PREPARE stmt; SELECT 'All done'; All done @@ -50,9 +50,9 @@ 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' +ERROR 22007: Truncated incorrect DOUBLE value: 'foo' SELECT a FROM t1 GROUP BY a; a SELECT * FROM t1; @@ -63,9 +63,9 @@ 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' +ERROR 22007: Truncated incorrect DOUBLE value: 'foo' SELECT a FROM t1 GROUP BY a; a INSERT t1 SELECT * FROM ( SELECT * FROM t1 ) sq; diff --git a/mysql-test/main/type_decimal.result b/mysql-test/main/type_decimal.result index 769c59b197d..6e7d7c8b6fe 100644 --- a/mysql-test/main/type_decimal.result +++ b/mysql-test/main/type_decimal.result @@ -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 # # diff --git a/mysql-test/main/type_decimal.test b/mysql-test/main/type_decimal.test index 53ad2698f50..4ffbcbd3288 100644 --- a/mysql-test/main/type_decimal.test +++ b/mysql-test/main/type_decimal.test @@ -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 # diff --git a/mysql-test/suite/mariabackup/absolute_ibdata_paths.opt b/mysql-test/suite/mariabackup/absolute_ibdata_paths.opt index 71996e09b18..6c6a45cb572 100644 --- a/mysql-test/suite/mariabackup/absolute_ibdata_paths.opt +++ b/mysql-test/suite/mariabackup/absolute_ibdata_paths.opt @@ -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
\ No newline at end of file +--innodb --innodb-data-home-dir= --innodb-data-file-path=$MYSQLTEST_VARDIR/tmp/absolute_path_ibdata1:6M;ibdata_second:1M:autoextend +--innodb-undo-tablespaces=2 diff --git a/mysql-test/suite/mariabackup/absolute_ibdata_paths.test b/mysql-test/suite/mariabackup/absolute_ibdata_paths.test index 6717f16d199..fa304f0bc55 100644 --- a/mysql-test/suite/mariabackup/absolute_ibdata_paths.test +++ b/mysql-test/suite/mariabackup/absolute_ibdata_paths.test @@ -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 diff --git a/mysql-test/suite/versioning/r/alter.result b/mysql-test/suite/versioning/r/alter.result index 350ebf260ac..c30aab6eb6d 100644 --- a/mysql-test/suite/versioning/r/alter.result +++ b/mysql-test/suite/versioning/r/alter.result @@ -544,5 +544,66 @@ alter table t add check (a > 0); insert into t values (0); ERROR 23000: CONSTRAINT `CONSTRAINT_1` failed for `test`.`t` insert into t values (2); +# +# MDEV-18869 Assertion `!((field)->vcol_info && (field)->stored_in_db())' failed in innodb_col_no upon altering table with system versioning +# +set system_versioning_alter_history= keep; +create or replace table t1 (a int, b int generated always as (0) stored) engine=innodb with system versioning; +insert into t1 (a) values (1); +alter table t1 modify a int without system versioning, algorithm=copy; +affected rows: 1 +info: Records: 1 Duplicates: 0 Warnings: 0 +alter table t1 modify a int with system versioning, algorithm=copy; +affected rows: 1 +info: Records: 1 Duplicates: 0 Warnings: 0 +alter table t1 modify a int without system versioning; +affected rows: 0 +info: Records: 0 Duplicates: 0 Warnings: 0 +alter table t1 modify a int with system versioning; +affected rows: 0 +info: Records: 0 Duplicates: 0 Warnings: 0 +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` int(11) GENERATED ALWAYS AS (0) STORED +) ENGINE=InnoDB DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING +select * from t1; +a b +1 0 +alter table t1 modify b int generated always as (0) stored without system versioning; +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 'without system versioning' at line 1 +alter table t1 modify b int generated always as (0) stored with system versioning; +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 'system versioning' at line 1 +alter table t1 modify b int without system versioning; +affected rows: 1 +info: Records: 1 Duplicates: 0 Warnings: 0 +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL WITHOUT SYSTEM VERSIONING +) ENGINE=InnoDB DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING +select * from t1; +a b +1 0 +create or replace table t1 (a int, b int generated always as (0) virtual) engine=innodb with system versioning; +insert into t1 (a) values (1); +alter table t1 modify a int without system versioning, algorithm=copy; +affected rows: 1 +info: Records: 1 Duplicates: 0 Warnings: 0 +alter table t1 modify a int with system versioning, algorithm=copy; +affected rows: 1 +info: Records: 1 Duplicates: 0 Warnings: 0 +alter table t1 modify a int without system versioning; +affected rows: 0 +info: Records: 0 Duplicates: 0 Warnings: 0 +alter table t1 modify a int with system versioning; +affected rows: 0 +info: Records: 0 Duplicates: 0 Warnings: 0 +select * from t1; +a b +1 0 +affected rows: 1 drop database test; create database test; diff --git a/mysql-test/suite/versioning/t/alter.test b/mysql-test/suite/versioning/t/alter.test index 01cb2d72f8d..89379837fac 100644 --- a/mysql-test/suite/versioning/t/alter.test +++ b/mysql-test/suite/versioning/t/alter.test @@ -469,5 +469,39 @@ alter table t add check (a > 0); insert into t values (0); insert into t values (2); +--echo # +--echo # MDEV-18869 Assertion `!((field)->vcol_info && (field)->stored_in_db())' failed in innodb_col_no upon altering table with system versioning +--echo # +set system_versioning_alter_history= keep; +create or replace table t1 (a int, b int generated always as (0) stored) engine=innodb with system versioning; +insert into t1 (a) values (1); +--enable_info +alter table t1 modify a int without system versioning, algorithm=copy; +alter table t1 modify a int with system versioning, algorithm=copy; +alter table t1 modify a int without system versioning; +alter table t1 modify a int with system versioning; +--disable_info +show create table t1; +select * from t1; +--enable_info +--error ER_PARSE_ERROR +alter table t1 modify b int generated always as (0) stored without system versioning; +--error ER_PARSE_ERROR +alter table t1 modify b int generated always as (0) stored with system versioning; +alter table t1 modify b int without system versioning; +--disable_info +show create table t1; +select * from t1; + +create or replace table t1 (a int, b int generated always as (0) virtual) engine=innodb with system versioning; +insert into t1 (a) values (1); +--enable_info +alter table t1 modify a int without system versioning, algorithm=copy; +alter table t1 modify a int with system versioning, algorithm=copy; +alter table t1 modify a int without system versioning; +alter table t1 modify a int with system versioning; +select * from t1; +--disable_info + drop database test; create database test; diff --git a/sql/item.h b/sql/item.h index 6fc04fdde14..7d1f14d31cf 100644 --- a/sql/item.h +++ b/sql/item.h @@ -1449,6 +1449,13 @@ public: } virtual String *val_raw(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. diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 86725de8ae7..dcd48a679d7 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -1,5 +1,5 @@ /* Copyright (c) 2000, 2013, Oracle and/or its affiliates. - Copyright (c) 2009, 2016, MariaDB + Copyright (c) 2009, 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 @@ -4770,7 +4770,7 @@ Item_cond::fix_fields(THD *thd, Item **ref) List_iterator<Item> li(list); Item *item; uchar buff[sizeof(char*)]; // Max local vars in function - longlong is_and_cond= functype() == Item_func::COND_AND_FUNC; + bool is_and_cond= functype() == Item_func::COND_AND_FUNC; not_null_tables_cache= 0; used_tables_and_const_cache_init(); @@ -4834,7 +4834,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 ..." @@ -4886,7 +4886,7 @@ bool Item_cond::eval_not_null_tables(void *opt_arg) { Item *item; - longlong is_and_cond= functype() == Item_func::COND_AND_FUNC; + bool is_and_cond= functype() == Item_func::COND_AND_FUNC; List_iterator<Item> li(list); not_null_tables_cache= (table_map) 0; and_tables_cache= ~(table_map) 0; @@ -4896,7 +4896,7 @@ Item_cond::eval_not_null_tables(void *opt_arg) 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 ..." diff --git a/sql/item_func.cc b/sql/item_func.cc index a86bc7fe7a8..704c4897f01 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -71,18 +71,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. */ static inline bool test_if_sum_overflows_ull(ulonglong arg1, ulonglong arg2) diff --git a/sql/item_func.h b/sql/item_func.h index 3185df91dca..7447d57722a 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -3445,7 +3445,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; diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 87ac04ea0ba..6e7b1d07073 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1,5 +1,5 @@ /* Copyright (c) 2000, 2017, Oracle and/or its affiliates. - Copyright (c) 2008, 2019, MariaDB Corporation. + 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 @@ -3864,8 +3864,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 } #endif /* WITH_WSREP */ @@ -6725,7 +6727,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; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index c8974721d09..e8b092b1b23 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -17066,7 +17066,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; @@ -17080,7 +17080,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) diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc index 07ebaa602c0..a25e93d7439 100644 --- a/storage/innobase/buf/buf0buf.cc +++ b/storage/innobase/buf/buf0buf.cc @@ -1073,26 +1073,28 @@ 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 < srv_page_size; 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; } - } -#ifdef UNIV_INNOCHECKSUM - if (log_file) { - fprintf(log_file, "Page::%llu" - " is empty and uncorrupted\n", - cur_page_num); - } -#endif /* UNIV_INNOCHECKSUM */ - return(false); + } while (++i < FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION); + + /* Ignore FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION unless + innodb_checksum_algorithm=full_crc32. */ + i += 8; + + do { + if (read_buf[i]) { + return true; + } + } while (++i < srv_page_size); + return false; } switch (curr_algo) { diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index ed16cf8752f..03bbad50f79 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -9685,7 +9685,7 @@ vers_change_fields_cache( ha_alter_info->alter_info->create_list); while (const Create_field* create_field = it++) { - if (!create_field->field) { + if (!create_field->field || create_field->field->vcol_info) { continue; } dict_col_t* col = dict_table_get_nth_col( diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c index cac7c95b280..518a9bed976 100644 --- a/tests/mysql_client_test.c +++ b/tests/mysql_client_test.c @@ -19710,8 +19710,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); } |