Commit 7e910429 authored by Vasil Dimov's avatar Vasil Dimov

Merge mysql-trunk-innodb -> mysql-trunk-bugfixing

parents 1337df3b e368a064
...@@ -920,7 +920,7 @@ create index t1u on t1 (u(1)); ...@@ -920,7 +920,7 @@ create index t1u on t1 (u(1));
drop table t1; drop table t1;
set global innodb_file_per_table=0; set global innodb_file_per_table=0;
set global innodb_file_format=Antelope; set global innodb_file_format=Antelope;
set global innodb_file_format_check=Antelope; set global innodb_file_format_max=Antelope;
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
CREATE TABLE t1( CREATE TABLE t1(
......
...@@ -397,25 +397,25 @@ set global innodb_file_per_table=0; ...@@ -397,25 +397,25 @@ set global innodb_file_per_table=0;
set global innodb_file_format=Antelope; set global innodb_file_format=Antelope;
set global innodb_file_per_table=on; set global innodb_file_per_table=on;
set global innodb_file_format=`Barracuda`; set global innodb_file_format=`Barracuda`;
set global innodb_file_format_check=`Antelope`; set global innodb_file_format_max=`Antelope`;
create table normal_table ( create table normal_table (
c1 int c1 int
) engine = innodb; ) engine = innodb;
select @@innodb_file_format_check; select @@innodb_file_format_max;
@@innodb_file_format_check @@innodb_file_format_max
Antelope Antelope
create table zip_table ( create table zip_table (
c1 int c1 int
) engine = innodb key_block_size = 8; ) engine = innodb key_block_size = 8;
select @@innodb_file_format_check; select @@innodb_file_format_max;
@@innodb_file_format_check @@innodb_file_format_max
Barracuda Barracuda
set global innodb_file_format_check=`Antelope`; set global innodb_file_format_max=`Antelope`;
select @@innodb_file_format_check; select @@innodb_file_format_max;
@@innodb_file_format_check @@innodb_file_format_max
Antelope Antelope
show table status; show table status;
select @@innodb_file_format_check; select @@innodb_file_format_max;
@@innodb_file_format_check @@innodb_file_format_max
Barracuda Barracuda
drop table normal_table, zip_table; drop table normal_table, zip_table;
set @old_innodb_file_format_check=@@innodb_file_format_check; set @old_innodb_file_format_max=@@innodb_file_format_max;
select @old_innodb_file_format_check; select @old_innodb_file_format_max;
@old_innodb_file_format_check @old_innodb_file_format_max
Antelope Antelope
set global innodb_file_format_check = Barracuda; set global innodb_file_format_max = Barracuda;
select @@innodb_file_format_check; select @@innodb_file_format_max;
@@innodb_file_format_check @@innodb_file_format_max
Barracuda Barracuda
set global innodb_file_format_check = DEFAULT; set global innodb_file_format_max = DEFAULT;
select @@innodb_file_format_check; select @@innodb_file_format_max;
@@innodb_file_format_check @@innodb_file_format_max
Barracuda Antelope
set global innodb_file_format_check = @old_innodb_file_format_check; set global innodb_file_format_max = @old_innodb_file_format_max;
select @@innodb_file_format_check; select @@innodb_file_format_max;
@@innodb_file_format_check @@innodb_file_format_max
Antelope Antelope
set global innodb_file_format_check = cheetah; set global innodb_file_format_max = cheetah;
ERROR 42000: Variable 'innodb_file_format_check' can't be set to the value of 'cheetah' ERROR 42000: Variable 'innodb_file_format_max' can't be set to the value of 'cheetah'
set global innodb_file_format_check = Bear; set global innodb_file_format_max = Bear;
ERROR 42000: Variable 'innodb_file_format_check' can't be set to the value of 'Bear' ERROR 42000: Variable 'innodb_file_format_max' can't be set to the value of 'Bear'
set global innodb_file_format_check = on; set global innodb_file_format_max = on;
ERROR 42000: Variable 'innodb_file_format_check' can't be set to the value of 'ON' ERROR 42000: Variable 'innodb_file_format_max' can't be set to the value of 'ON'
set global innodb_file_format_check = off; set global innodb_file_format_max = off;
ERROR 42000: Variable 'innodb_file_format_check' can't be set to the value of 'off' ERROR 42000: Variable 'innodb_file_format_max' can't be set to the value of 'off'
...@@ -126,5 +126,5 @@ Warning 1265 Data truncated for column 'col79' at row 1 ...@@ -126,5 +126,5 @@ Warning 1265 Data truncated for column 'col79' at row 1
Warning 1264 Out of range value for column 'col84' at row 1 Warning 1264 Out of range value for column 'col84' at row 1
DROP TABLE bug52745; DROP TABLE bug52745;
SET GLOBAL innodb_file_format=Antelope; SET GLOBAL innodb_file_format=Antelope;
SET GLOBAL innodb_file_format_check=Antelope; SET GLOBAL innodb_file_format_max=Antelope;
SET GLOBAL innodb_file_per_table=0; SET GLOBAL innodb_file_per_table=0;
...@@ -12,5 +12,5 @@ Error 1118 Row size too large. The maximum row size for the used table type, not ...@@ -12,5 +12,5 @@ Error 1118 Row size too large. The maximum row size for the used table type, not
Error 1030 Got error 139 from storage engine Error 1030 Got error 139 from storage engine
DROP TABLE bug53591; DROP TABLE bug53591;
SET GLOBAL innodb_file_format=Antelope; SET GLOBAL innodb_file_format=Antelope;
SET GLOBAL innodb_file_format_check=Antelope; SET GLOBAL innodb_file_format_max=Antelope;
SET GLOBAL innodb_file_per_table=0; SET GLOBAL innodb_file_per_table=0;
...@@ -3,6 +3,9 @@ select @@innodb_file_format; ...@@ -3,6 +3,9 @@ select @@innodb_file_format;
Antelope Antelope
select @@innodb_file_format_check; select @@innodb_file_format_check;
@@innodb_file_format_check @@innodb_file_format_check
1
select @@innodb_file_format_max;
@@innodb_file_format_max
Antelope Antelope
set global innodb_file_format=antelope; set global innodb_file_format=antelope;
set global innodb_file_format=barracuda; set global innodb_file_format=barracuda;
...@@ -22,22 +25,26 @@ ERROR 42000: Variable 'innodb_file_format' can't be set to the value of 'off' ...@@ -22,22 +25,26 @@ ERROR 42000: Variable 'innodb_file_format' can't be set to the value of 'off'
select @@innodb_file_format; select @@innodb_file_format;
@@innodb_file_format @@innodb_file_format
Antelope Antelope
set global innodb_file_format_check=antelope; set global innodb_file_format_max=antelope;
set global innodb_file_format_check=barracuda; set global innodb_file_format_max=barracuda;
set global innodb_file_format_check=cheetah; set global innodb_file_format_max=cheetah;
ERROR 42000: Variable 'innodb_file_format_check' can't be set to the value of 'cheetah' ERROR 42000: Variable 'innodb_file_format_max' can't be set to the value of 'cheetah'
select @@innodb_file_format_check; select @@innodb_file_format_max;
@@innodb_file_format_check @@innodb_file_format_max
Barracuda
set global innodb_file_format_check=default;
select @@innodb_file_format_check;
@@innodb_file_format_check
Barracuda Barracuda
set global innodb_file_format_max=default;
select @@innodb_file_format_max;
@@innodb_file_format_max
Antelope
set global innodb_file_format=on; set global innodb_file_format=on;
ERROR 42000: Variable 'innodb_file_format' can't be set to the value of 'ON' ERROR 42000: Variable 'innodb_file_format' can't be set to the value of 'ON'
set global innodb_file_format=off; set global innodb_file_format=off;
ERROR 42000: Variable 'innodb_file_format' can't be set to the value of 'off' ERROR 42000: Variable 'innodb_file_format' can't be set to the value of 'off'
select @@innodb_file_format_check; select @@innodb_file_format_max;
@@innodb_file_format_check @@innodb_file_format_max
Barracuda Antelope
set global innodb_file_format_check=antelope; set global innodb_file_format_max=antelope;
set global innodb_file_format_check=off;
ERROR HY000: Variable 'innodb_file_format_check' is a read only variable
SET GLOBAL innodb_file_format=Antelope;
SET GLOBAL innodb_file_format_max=Antelope;
...@@ -2414,6 +2414,18 @@ id select_type table type possible_keys key key_len ref rows Extra ...@@ -2414,6 +2414,18 @@ id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 ALL NULL NULL NULL NULL 3 Using where 1 SIMPLE t2 ALL NULL NULL NULL NULL 3 Using where
DROP TABLE t1,t2; DROP TABLE t1,t2;
# #
# Bug#38999 valgrind warnings for update statement in function compare_record()
#
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
CREATE TABLE t2 (a INT PRIMARY KEY) ENGINE=InnoDB;
INSERT INTO t1 values (1),(2),(3),(4),(5);
INSERT INTO t2 values (1);
SELECT * FROM t1 WHERE a = 2;
a
2
UPDATE t1,t2 SET t1.a = t1.a + 100 WHERE t1.a = 1;
DROP TABLE t1,t2;
#
# Bug #53830: !table || (!table->read_set || bitmap_is_set(table->read_set, field_index)) # Bug #53830: !table || (!table->read_set || bitmap_is_set(table->read_set, field_index))
# #
CREATE TABLE t1 (a INT, b INT, c INT, d INT, CREATE TABLE t1 (a INT, b INT, c INT, d INT,
......
...@@ -9,4 +9,3 @@ ...@@ -9,4 +9,3 @@
# Do not use any TAB characters for whitespace. # Do not use any TAB characters for whitespace.
# #
############################################################################## ##############################################################################
innodb_multi_update: Bug #38999 2010-05-05 mmakela Valgrind warnings
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# embedded server ignores 'delayed', so skip this # embedded server ignores 'delayed', so skip this
-- source include/not_embedded.inc -- source include/not_embedded.inc
let $innodb_file_format_check_orig=`select @@innodb_file_format_check`; let $innodb_file_format_max_orig=`select @@innodb_file_format_max`;
--disable_warnings --disable_warnings
drop table if exists t1; drop table if exists t1;
...@@ -40,4 +40,4 @@ DROP TABLE t1; ...@@ -40,4 +40,4 @@ DROP TABLE t1;
# #
-- disable_query_log -- disable_query_log
eval SET GLOBAL innodb_file_format_check=$innodb_file_format_check_orig; eval SET GLOBAL innodb_file_format_max=$innodb_file_format_max_orig;
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# embedded server ignores 'delayed', so skip this # embedded server ignores 'delayed', so skip this
-- source include/not_embedded.inc -- source include/not_embedded.inc
let $innodb_file_format_check_orig=`select @@innodb_file_format_check`; let $innodb_file_format_max_orig=`select @@innodb_file_format_max`;
--disable_warnings --disable_warnings
drop table if exists t1; drop table if exists t1;
...@@ -671,4 +671,4 @@ DROP TABLE t1; ...@@ -671,4 +671,4 @@ DROP TABLE t1;
# #
-- disable_query_log -- disable_query_log
eval SET GLOBAL innodb_file_format_check=$innodb_file_format_check_orig; eval SET GLOBAL innodb_file_format_max=$innodb_file_format_max_orig;
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
let $MYSQLD_DATADIR= `select @@datadir`; let $MYSQLD_DATADIR= `select @@datadir`;
let $innodb_file_format_check_orig=`select @@innodb_file_format_check`; let $innodb_file_format_max_orig=`select @@innodb_file_format_max`;
create table t1(a int not null, b int, c char(10) not null, d varchar(20)) engine = innodb; create table t1(a int not null, b int, c char(10) not null, d varchar(20)) engine = innodb;
insert into t1 values (5,5,'oo','oo'),(4,4,'tr','tr'),(3,4,'ad','ad'),(2,3,'ak','ak'); insert into t1 values (5,5,'oo','oo'),(4,4,'tr','tr'),(3,4,'ad','ad'),(2,3,'ak','ak');
...@@ -403,7 +403,7 @@ create index t1u on t1 (u(1)); ...@@ -403,7 +403,7 @@ create index t1u on t1 (u(1));
drop table t1; drop table t1;
eval set global innodb_file_per_table=$per_table; eval set global innodb_file_per_table=$per_table;
eval set global innodb_file_format=$format; eval set global innodb_file_format=$format;
eval set global innodb_file_format_check=$format; eval set global innodb_file_format_max=$format;
# #
# Test to check whether CREATE INDEX handles implicit foreign key # Test to check whether CREATE INDEX handles implicit foreign key
...@@ -550,4 +550,4 @@ DROP TABLE t1; ...@@ -550,4 +550,4 @@ DROP TABLE t1;
# #
-- disable_query_log -- disable_query_log
eval SET GLOBAL innodb_file_format_check=$innodb_file_format_check_orig; eval SET GLOBAL innodb_file_format_max=$innodb_file_format_max_orig;
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
let $per_table=`select @@innodb_file_per_table`; let $per_table=`select @@innodb_file_per_table`;
let $format=`select @@innodb_file_format`; let $format=`select @@innodb_file_format`;
let $innodb_file_format_check_orig=`select @@innodb_file_format_check`; let $innodb_file_format_max_orig=`select @@innodb_file_format_max`;
set global innodb_file_per_table=off; set global innodb_file_per_table=off;
set global innodb_file_format=`0`; set global innodb_file_format=`0`;
...@@ -316,21 +316,21 @@ eval set global innodb_file_format=$format; ...@@ -316,21 +316,21 @@ eval set global innodb_file_format=$format;
-- disable_info -- disable_info
set global innodb_file_per_table=on; set global innodb_file_per_table=on;
set global innodb_file_format=`Barracuda`; set global innodb_file_format=`Barracuda`;
set global innodb_file_format_check=`Antelope`; set global innodb_file_format_max=`Antelope`;
create table normal_table ( create table normal_table (
c1 int c1 int
) engine = innodb; ) engine = innodb;
select @@innodb_file_format_check; select @@innodb_file_format_max;
create table zip_table ( create table zip_table (
c1 int c1 int
) engine = innodb key_block_size = 8; ) engine = innodb key_block_size = 8;
select @@innodb_file_format_check; select @@innodb_file_format_max;
set global innodb_file_format_check=`Antelope`; set global innodb_file_format_max=`Antelope`;
select @@innodb_file_format_check; select @@innodb_file_format_max;
-- disable_result_log -- disable_result_log
show table status; show table status;
-- enable_result_log -- enable_result_log
select @@innodb_file_format_check; select @@innodb_file_format_max;
drop table normal_table, zip_table; drop table normal_table, zip_table;
-- disable_result_log -- disable_result_log
...@@ -341,4 +341,4 @@ drop table normal_table, zip_table; ...@@ -341,4 +341,4 @@ drop table normal_table, zip_table;
-- disable_query_log -- disable_query_log
eval set global innodb_file_format=$format; eval set global innodb_file_format=$format;
eval set global innodb_file_per_table=$per_table; eval set global innodb_file_per_table=$per_table;
eval set global innodb_file_format_check=$innodb_file_format_check_orig; eval set global innodb_file_format_max=$innodb_file_format_max_orig;
...@@ -15,7 +15,7 @@ SET storage_engine=InnoDB; ...@@ -15,7 +15,7 @@ SET storage_engine=InnoDB;
-- disable_result_log -- disable_result_log
let $file_format=`select @@innodb_file_format`; let $file_format=`select @@innodb_file_format`;
let $file_format_check=`select @@innodb_file_format_check`; let $file_format_max=`select @@innodb_file_format_max`;
let $file_per_table=`select @@innodb_file_per_table`; let $file_per_table=`select @@innodb_file_per_table`;
SET GLOBAL innodb_file_format='Barracuda'; SET GLOBAL innodb_file_format='Barracuda';
SET GLOBAL innodb_file_per_table=on; SET GLOBAL innodb_file_per_table=on;
...@@ -28,5 +28,5 @@ INSERT IGNORE INTO `table0` SET `col19` = '19940127002709', `col20` = 2383927.90 ...@@ -28,5 +28,5 @@ INSERT IGNORE INTO `table0` SET `col19` = '19940127002709', `col20` = 2383927.90
CHECK TABLE table0 EXTENDED; CHECK TABLE table0 EXTENDED;
DROP TABLE table0; DROP TABLE table0;
EVAL SET GLOBAL innodb_file_format=$file_format; EVAL SET GLOBAL innodb_file_format=$file_format;
EVAL SET GLOBAL innodb_file_format_check=$file_format_check; EVAL SET GLOBAL innodb_file_format_max=$file_format_max;
EVAL SET GLOBAL innodb_file_per_table=$file_per_table; EVAL SET GLOBAL innodb_file_per_table=$file_per_table;
# This is the unit test for bug *47167. # This is the unit test for bug #47167.
# It tests setting the global variable # It tests setting the global variable "innodb_file_format_max" (
# "innodb_file_format_check" with a # originally "innodb_file_format_check") with a user-Defined Variable.
# user-Defined Variable.
--source include/have_innodb.inc --source include/have_innodb.inc
# Save the value (Antelope) in 'innodb_file_format_check' to # Save the value (Antelope) in 'innodb_file_format_max' to
# 'old_innodb_file_format_check' # 'old_innodb_file_format_max'
set @old_innodb_file_format_check=@@innodb_file_format_check; set @old_innodb_file_format_max=@@innodb_file_format_max;
# @old_innodb_file_format_check shall have the value of 'Antelope' # @old_innodb_file_format_max shall have the value of 'Antelope'
select @old_innodb_file_format_check; select @old_innodb_file_format_max;
# Reset the value in 'innodb_file_format_check' to 'Barracuda' # Reset the value in 'innodb_file_format_max' to 'Barracuda'
set global innodb_file_format_check = Barracuda; set global innodb_file_format_max = Barracuda;
select @@innodb_file_format_check; select @@innodb_file_format_max;
# Set 'innodb_file_format_check' to its default value, which # Set 'innodb_file_format_max' to its default value, which
# is the latest file format supported in the current release. # is the latest file format supported in the current release.
set global innodb_file_format_check = DEFAULT; set global innodb_file_format_max = DEFAULT;
select @@innodb_file_format_check; select @@innodb_file_format_max;
# Put the saved value back to 'innodb_file_format_check' # Put the saved value back to 'innodb_file_format_max'
set global innodb_file_format_check = @old_innodb_file_format_check; set global innodb_file_format_max = @old_innodb_file_format_max;
# Check whether 'innodb_file_format_check' get its original value. # Check whether 'innodb_file_format_max' get its original value.
select @@innodb_file_format_check; select @@innodb_file_format_max;
# Following are negative tests, all should fail. # Following are negative tests, all should fail.
--disable_warnings --disable_warnings
--error ER_WRONG_VALUE_FOR_VAR --error ER_WRONG_VALUE_FOR_VAR
set global innodb_file_format_check = cheetah; set global innodb_file_format_max = cheetah;
--error ER_WRONG_VALUE_FOR_VAR --error ER_WRONG_VALUE_FOR_VAR
set global innodb_file_format_check = Bear; set global innodb_file_format_max = Bear;
--error ER_WRONG_VALUE_FOR_VAR --error ER_WRONG_VALUE_FOR_VAR
set global innodb_file_format_check = on; set global innodb_file_format_max = on;
--error ER_WRONG_VALUE_FOR_VAR --error ER_WRONG_VALUE_FOR_VAR
set global innodb_file_format_check = off; set global innodb_file_format_max = off;
--enable_warnings --enable_warnings
-- source include/have_innodb.inc -- source include/have_innodb.inc
let $file_format=`select @@innodb_file_format`; let $file_format=`select @@innodb_file_format`;
let $file_format_check=`select @@innodb_file_format_check`; let $file_format_max=`select @@innodb_file_format_max`;
let $file_per_table=`select @@innodb_file_per_table`; let $file_per_table=`select @@innodb_file_per_table`;
SET GLOBAL innodb_file_format='Barracuda'; SET GLOBAL innodb_file_format='Barracuda';
SET GLOBAL innodb_file_per_table=on; SET GLOBAL innodb_file_per_table=on;
...@@ -105,5 +105,5 @@ SHOW WARNINGS; ...@@ -105,5 +105,5 @@ SHOW WARNINGS;
DROP TABLE bug52745; DROP TABLE bug52745;
EVAL SET GLOBAL innodb_file_format=$file_format; EVAL SET GLOBAL innodb_file_format=$file_format;
EVAL SET GLOBAL innodb_file_format_check=$file_format_check; EVAL SET GLOBAL innodb_file_format_max=$file_format_max;
EVAL SET GLOBAL innodb_file_per_table=$file_per_table; EVAL SET GLOBAL innodb_file_per_table=$file_per_table;
-- source include/have_innodb.inc -- source include/have_innodb.inc
let $file_format=`select @@innodb_file_format`; let $file_format=`select @@innodb_file_format`;
let $file_format_check=`select @@innodb_file_format_check`; let $file_format_max=`select @@innodb_file_format_max`;
let $file_per_table=`select @@innodb_file_per_table`; let $file_per_table=`select @@innodb_file_per_table`;
SET GLOBAL innodb_file_format='Barracuda'; SET GLOBAL innodb_file_format='Barracuda';
...@@ -18,5 +18,5 @@ SHOW WARNINGS; ...@@ -18,5 +18,5 @@ SHOW WARNINGS;
DROP TABLE bug53591; DROP TABLE bug53591;
EVAL SET GLOBAL innodb_file_format=$file_format; EVAL SET GLOBAL innodb_file_format=$file_format;
EVAL SET GLOBAL innodb_file_format_check=$file_format_check; EVAL SET GLOBAL innodb_file_format_max=$file_format_max;
EVAL SET GLOBAL innodb_file_per_table=$file_per_table; EVAL SET GLOBAL innodb_file_per_table=$file_per_table;
-- source include/have_innodb.inc -- source include/have_innodb.inc
let $innodb_file_format_orig=`select @@innodb_file_format`;
let $innodb_file_format_max_orig=`select @@innodb_file_format_max`;
select @@innodb_file_format; select @@innodb_file_format;
select @@innodb_file_format_check; select @@innodb_file_format_check;
select @@innodb_file_format_max;
set global innodb_file_format=antelope; set global innodb_file_format=antelope;
set global innodb_file_format=barracuda; set global innodb_file_format=barracuda;
--error ER_WRONG_VALUE_FOR_VAR --error ER_WRONG_VALUE_FOR_VAR
...@@ -14,16 +18,24 @@ set global innodb_file_format=on; ...@@ -14,16 +18,24 @@ set global innodb_file_format=on;
--error ER_WRONG_VALUE_FOR_VAR --error ER_WRONG_VALUE_FOR_VAR
set global innodb_file_format=off; set global innodb_file_format=off;
select @@innodb_file_format; select @@innodb_file_format;
set global innodb_file_format_check=antelope; set global innodb_file_format_max=antelope;
set global innodb_file_format_check=barracuda; set global innodb_file_format_max=barracuda;
--error ER_WRONG_VALUE_FOR_VAR --error ER_WRONG_VALUE_FOR_VAR
set global innodb_file_format_check=cheetah; set global innodb_file_format_max=cheetah;
select @@innodb_file_format_check; select @@innodb_file_format_max;
set global innodb_file_format_check=default; set global innodb_file_format_max=default;
select @@innodb_file_format_check; select @@innodb_file_format_max;
--error ER_WRONG_VALUE_FOR_VAR --error ER_WRONG_VALUE_FOR_VAR
set global innodb_file_format=on; set global innodb_file_format=on;
--error ER_WRONG_VALUE_FOR_VAR --error ER_WRONG_VALUE_FOR_VAR
set global innodb_file_format=off; set global innodb_file_format=off;
select @@innodb_file_format_check; select @@innodb_file_format_max;
set global innodb_file_format_check=antelope; set global innodb_file_format_max=antelope;
# innodb_file_format_check is read only variable, can be
# set as server startup parameter
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
set global innodb_file_format_check=off;
eval SET GLOBAL innodb_file_format=$innodb_file_format_orig;
eval SET GLOBAL innodb_file_format_max=$innodb_file_format_max_orig;
...@@ -649,6 +649,19 @@ EXPLAIN SELECT t1.id,t2.id FROM t2 LEFT JOIN t1 ON t1.id>=74 AND t1.id<=0 ...@@ -649,6 +649,19 @@ EXPLAIN SELECT t1.id,t2.id FROM t2 LEFT JOIN t1 ON t1.id>=74 AND t1.id<=0
DROP TABLE t1,t2; DROP TABLE t1,t2;
--echo #
--echo # Bug#38999 valgrind warnings for update statement in function compare_record()
--echo #
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
CREATE TABLE t2 (a INT PRIMARY KEY) ENGINE=InnoDB;
INSERT INTO t1 values (1),(2),(3),(4),(5);
INSERT INTO t2 values (1);
SELECT * FROM t1 WHERE a = 2;
UPDATE t1,t2 SET t1.a = t1.a + 100 WHERE t1.a = 1;
DROP TABLE t1,t2;
--echo # --echo #
--echo # Bug #53830: !table || (!table->read_set || bitmap_is_set(table->read_set, field_index)) --echo # Bug #53830: !table || (!table->read_set || bitmap_is_set(table->read_set, field_index))
......
...@@ -10,5 +10,7 @@ There should be *no* long test name listed below: ...@@ -10,5 +10,7 @@ There should be *no* long test name listed below:
select variable_name as `There should be *no* variables listed below:` from t2 select variable_name as `There should be *no* variables listed below:` from t2
left join t1 on variable_name=test_name where test_name is null; left join t1 on variable_name=test_name where test_name is null;
There should be *no* variables listed below: There should be *no* variables listed below:
INNODB_FILE_FORMAT_MAX
INNODB_FILE_FORMAT_MAX
drop table t1; drop table t1;
drop table t2; drop table t2;
SET @start_global_value = @@global.innodb_file_format_check; SET @start_global_value = @@global.innodb_file_format_max;
SELECT @start_global_value; SELECT @start_global_value;
@start_global_value @start_global_value
Antelope Antelope
Valid values are 'Antelope' and 'Barracuda' Valid values are 'Antelope' and 'Barracuda'
select @@global.innodb_file_format_check in ('Antelope', 'Barracuda'); select @@global.innodb_file_format_max in ('Antelope', 'Barracuda');
@@global.innodb_file_format_check in ('Antelope', 'Barracuda') @@global.innodb_file_format_max in ('Antelope', 'Barracuda')
1 1
select @@global.innodb_file_format_check; select @@global.innodb_file_format_max;
@@global.innodb_file_format_check @@global.innodb_file_format_max
Antelope Antelope
select @@session.innodb_file_format_check; select @@session.innodb_file_format_max;
ERROR HY000: Variable 'innodb_file_format_check' is a GLOBAL variable ERROR HY000: Variable 'innodb_file_format_max' is a GLOBAL variable
show global variables like 'innodb_file_format_check'; show global variables like 'innodb_file_format_max';
Variable_name Value Variable_name Value
innodb_file_format_check Antelope innodb_file_format_max Antelope
show session variables like 'innodb_file_format_check'; show session variables like 'innodb_file_format_max';
Variable_name Value Variable_name Value
innodb_file_format_check Antelope innodb_file_format_max Antelope
select * from information_schema.global_variables where variable_name='innodb_file_format_check'; select * from information_schema.global_variables where variable_name='innodb_file_format_max';
VARIABLE_NAME VARIABLE_VALUE VARIABLE_NAME VARIABLE_VALUE
INNODB_FILE_FORMAT_CHECK Antelope INNODB_FILE_FORMAT_MAX Antelope
select * from information_schema.session_variables where variable_name='innodb_file_format_check'; select * from information_schema.session_variables where variable_name='innodb_file_format_max';
VARIABLE_NAME VARIABLE_VALUE VARIABLE_NAME VARIABLE_VALUE
INNODB_FILE_FORMAT_CHECK Antelope INNODB_FILE_FORMAT_MAX Antelope
set global innodb_file_format_check='Antelope'; set global innodb_file_format_max='Antelope';
select @@global.innodb_file_format_check; select @@global.innodb_file_format_max;
@@global.innodb_file_format_check @@global.innodb_file_format_max
Antelope Antelope
select * from information_schema.global_variables where variable_name='innodb_file_format_check'; select * from information_schema.global_variables where variable_name='innodb_file_format_max';
VARIABLE_NAME VARIABLE_VALUE VARIABLE_NAME VARIABLE_VALUE
INNODB_FILE_FORMAT_CHECK Antelope INNODB_FILE_FORMAT_MAX Antelope
select * from information_schema.session_variables where variable_name='innodb_file_format_check'; select * from information_schema.session_variables where variable_name='innodb_file_format_max';
VARIABLE_NAME VARIABLE_VALUE VARIABLE_NAME VARIABLE_VALUE
INNODB_FILE_FORMAT_CHECK Antelope INNODB_FILE_FORMAT_MAX Antelope
set @@global.innodb_file_format_check='Barracuda'; set @@global.innodb_file_format_max='Barracuda';
select @@global.innodb_file_format_check; select @@global.innodb_file_format_max;
@@global.innodb_file_format_check @@global.innodb_file_format_max
Barracuda Barracuda
select * from information_schema.global_variables where variable_name='innodb_file_format_check'; select * from information_schema.global_variables where variable_name='innodb_file_format_max';
VARIABLE_NAME VARIABLE_VALUE VARIABLE_NAME VARIABLE_VALUE
INNODB_FILE_FORMAT_CHECK Barracuda INNODB_FILE_FORMAT_MAX Barracuda
select * from information_schema.session_variables where variable_name='innodb_file_format_check'; select * from information_schema.session_variables where variable_name='innodb_file_format_max';
VARIABLE_NAME VARIABLE_VALUE VARIABLE_NAME VARIABLE_VALUE
INNODB_FILE_FORMAT_CHECK Barracuda INNODB_FILE_FORMAT_MAX Barracuda
set session innodb_file_format_check='Salmon'; set session innodb_file_format_max='Salmon';
ERROR HY000: Variable 'innodb_file_format_check' is a GLOBAL variable and should be set with SET GLOBAL ERROR HY000: Variable 'innodb_file_format_max' is a GLOBAL variable and should be set with SET GLOBAL
set @@session.innodb_file_format_check='Salmon'; set @@session.innodb_file_format_max='Salmon';
ERROR HY000: Variable 'innodb_file_format_check' is a GLOBAL variable and should be set with SET GLOBAL ERROR HY000: Variable 'innodb_file_format_max' is a GLOBAL variable and should be set with SET GLOBAL
set global innodb_file_format_check=1.1; set global innodb_file_format_max=1.1;
ERROR 42000: Incorrect argument type to variable 'innodb_file_format_check' ERROR 42000: Incorrect argument type to variable 'innodb_file_format_max'
set global innodb_file_format_check=1e1; set global innodb_file_format_max=1e1;
ERROR 42000: Incorrect argument type to variable 'innodb_file_format_check' ERROR 42000: Incorrect argument type to variable 'innodb_file_format_max'
set global innodb_file_format_check='Salmon'; set global innodb_file_format_max='Salmon';
ERROR 42000: Variable 'innodb_file_format_check' can't be set to the value of 'Salmon' ERROR 42000: Variable 'innodb_file_format_max' can't be set to the value of 'Salmon'
SET @@global.innodb_file_format_check = @start_global_value; SET @@global.innodb_file_format_max = @start_global_value;
SELECT @@global.innodb_file_format_check; SELECT @@global.innodb_file_format_max;
@@global.innodb_file_format_check @@global.innodb_file_format_max
Antelope Antelope
...@@ -5,51 +5,51 @@ ...@@ -5,51 +5,51 @@
--source include/have_innodb.inc --source include/have_innodb.inc
SET @start_global_value = @@global.innodb_file_format_check; SET @start_global_value = @@global.innodb_file_format_max;
SELECT @start_global_value; SELECT @start_global_value;
# #
# exists as global only # exists as global only
# #
--echo Valid values are 'Antelope' and 'Barracuda' --echo Valid values are 'Antelope' and 'Barracuda'
select @@global.innodb_file_format_check in ('Antelope', 'Barracuda'); select @@global.innodb_file_format_max in ('Antelope', 'Barracuda');
select @@global.innodb_file_format_check; select @@global.innodb_file_format_max;
--error ER_INCORRECT_GLOBAL_LOCAL_VAR --error ER_INCORRECT_GLOBAL_LOCAL_VAR
select @@session.innodb_file_format_check; select @@session.innodb_file_format_max;
show global variables like 'innodb_file_format_check'; show global variables like 'innodb_file_format_max';
show session variables like 'innodb_file_format_check'; show session variables like 'innodb_file_format_max';
select * from information_schema.global_variables where variable_name='innodb_file_format_check'; select * from information_schema.global_variables where variable_name='innodb_file_format_max';
select * from information_schema.session_variables where variable_name='innodb_file_format_check'; select * from information_schema.session_variables where variable_name='innodb_file_format_max';
# #
# show that it's writable # show that it's writable
# #
set global innodb_file_format_check='Antelope'; set global innodb_file_format_max='Antelope';
select @@global.innodb_file_format_check; select @@global.innodb_file_format_max;
select * from information_schema.global_variables where variable_name='innodb_file_format_check'; select * from information_schema.global_variables where variable_name='innodb_file_format_max';
select * from information_schema.session_variables where variable_name='innodb_file_format_check'; select * from information_schema.session_variables where variable_name='innodb_file_format_max';
set @@global.innodb_file_format_check='Barracuda'; set @@global.innodb_file_format_max='Barracuda';
select @@global.innodb_file_format_check; select @@global.innodb_file_format_max;
select * from information_schema.global_variables where variable_name='innodb_file_format_check'; select * from information_schema.global_variables where variable_name='innodb_file_format_max';
select * from information_schema.session_variables where variable_name='innodb_file_format_check'; select * from information_schema.session_variables where variable_name='innodb_file_format_max';
--error ER_GLOBAL_VARIABLE --error ER_GLOBAL_VARIABLE
set session innodb_file_format_check='Salmon'; set session innodb_file_format_max='Salmon';
--error ER_GLOBAL_VARIABLE --error ER_GLOBAL_VARIABLE
set @@session.innodb_file_format_check='Salmon'; set @@session.innodb_file_format_max='Salmon';
# #
# incorrect types # incorrect types
# #
--error ER_WRONG_TYPE_FOR_VAR --error ER_WRONG_TYPE_FOR_VAR
set global innodb_file_format_check=1.1; set global innodb_file_format_max=1.1;
--error ER_WRONG_TYPE_FOR_VAR --error ER_WRONG_TYPE_FOR_VAR
set global innodb_file_format_check=1e1; set global innodb_file_format_max=1e1;
--error ER_WRONG_VALUE_FOR_VAR --error ER_WRONG_VALUE_FOR_VAR
set global innodb_file_format_check='Salmon'; set global innodb_file_format_max='Salmon';
# #
# Cleanup # Cleanup
# #
SET @@global.innodb_file_format_check = @start_global_value; SET @@global.innodb_file_format_max = @start_global_value;
SELECT @@global.innodb_file_format_check; SELECT @@global.innodb_file_format_max;
...@@ -2957,7 +2957,7 @@ buf_page_get_gen( ...@@ -2957,7 +2957,7 @@ buf_page_get_gen(
block->page.buf_fix_count = 1; block->page.buf_fix_count = 1;
buf_block_set_io_fix(block, BUF_IO_READ); buf_block_set_io_fix(block, BUF_IO_READ);
rw_lock_x_lock(&block->lock); rw_lock_x_lock_func(&block->lock, 0, file, line);
UNIV_MEM_INVALID(bpage, sizeof *bpage); UNIV_MEM_INVALID(bpage, sizeof *bpage);
......
...@@ -1694,6 +1694,7 @@ dict_load_table( ...@@ -1694,6 +1694,7 @@ dict_load_table(
/* Try to open the tablespace */ /* Try to open the tablespace */
if (!fil_open_single_table_tablespace( if (!fil_open_single_table_tablespace(
TRUE, table->space, TRUE, table->space,
table->flags == DICT_TF_COMPACT ? 0 :
table->flags & ~(~0 << DICT_TF_BITS), name)) { table->flags & ~(~0 << DICT_TF_BITS), name)) {
/* We failed to find a sensible /* We failed to find a sensible
tablespace file */ tablespace file */
......
...@@ -149,10 +149,10 @@ static char* innobase_log_group_home_dir = NULL; ...@@ -149,10 +149,10 @@ static char* innobase_log_group_home_dir = NULL;
static char* innobase_file_format_name = NULL; static char* innobase_file_format_name = NULL;
static char* innobase_change_buffering = NULL; static char* innobase_change_buffering = NULL;
/* Note: This variable can be set to on/off and any of the supported /* The highest file format being used in the database. The value can be
file formats in the configuration file, but can only be set to any set by user, however, it will be adjusted to the newer file format if
of the supported file formats during runtime. */ a table of such format is created/opened. */
static char* innobase_file_format_check = NULL; static char* innobase_file_format_max = NULL;
static char* innobase_file_flush_method = NULL; static char* innobase_file_flush_method = NULL;
...@@ -160,6 +160,7 @@ static char* innobase_file_flush_method = NULL; ...@@ -160,6 +160,7 @@ static char* innobase_file_flush_method = NULL;
values */ values */
static ulong innobase_fast_shutdown = 1; static ulong innobase_fast_shutdown = 1;
static my_bool innobase_file_format_check = TRUE;
#ifdef UNIV_LOG_ARCHIVE #ifdef UNIV_LOG_ARCHIVE
static my_bool innobase_log_archive = FALSE; static my_bool innobase_log_archive = FALSE;
static char* innobase_log_arch_dir = NULL; static char* innobase_log_arch_dir = NULL;
...@@ -171,6 +172,7 @@ static my_bool innobase_rollback_on_timeout = FALSE; ...@@ -171,6 +172,7 @@ static my_bool innobase_rollback_on_timeout = FALSE;
static my_bool innobase_create_status_file = FALSE; static my_bool innobase_create_status_file = FALSE;
static my_bool innobase_stats_on_metadata = TRUE; static my_bool innobase_stats_on_metadata = TRUE;
static char* internal_innobase_data_file_path = NULL; static char* internal_innobase_data_file_path = NULL;
static char* innodb_version_str = (char*) INNODB_VERSION_STR; static char* innodb_version_str = (char*) INNODB_VERSION_STR;
...@@ -366,22 +368,13 @@ innobase_file_format_name_lookup( ...@@ -366,22 +368,13 @@ innobase_file_format_name_lookup(
name */ name */
/************************************************************//** /************************************************************//**
Validate the file format check config parameters, as a side effect it Validate the file format check config parameters, as a side effect it
sets the srv_check_file_format_at_startup variable. sets the srv_max_file_format_at_startup variable.
@return true if one of "on" or "off" */
static
bool
innobase_file_format_check_on_off(
/*==============================*/
const char* format_check); /*!< in: parameter value */
/************************************************************//**
Validate the file format check config parameters, as a side effect it
sets the srv_check_file_format_at_startup variable.
@return the format_id if valid config value, otherwise, return -1 */ @return the format_id if valid config value, otherwise, return -1 */
static static
int int
innobase_file_format_validate_and_set( innobase_file_format_validate_and_set(
/*================================*/ /*==================================*/
const char* format_check); /*!< in: parameter value */ const char* format_max); /*!< in: parameter value */
/****************************************************************//** /****************************************************************//**
Return alter table flags supported in an InnoDB database. */ Return alter table flags supported in an InnoDB database. */
static static
...@@ -2264,32 +2257,35 @@ innobase_init( ...@@ -2264,32 +2257,35 @@ innobase_init(
innobase_file_format_name is used in the MySQL set variable innobase_file_format_name is used in the MySQL set variable
interface and so can't be const. */ interface and so can't be const. */
innobase_file_format_name = innobase_file_format_name =
(char*) trx_sys_file_format_id_to_name(format_id); (char*) trx_sys_file_format_id_to_name(format_id);
/* Process innobase_file_format_check variable */ /* Check innobase_file_format_check variable */
ut_a(innobase_file_format_check != NULL); if (!innobase_file_format_check) {
/* As a side effect it will set srv_check_file_format_at_startup /* Set the value to disable checking. */
on valid input. First we check for "on"/"off". */ srv_max_file_format_at_startup = DICT_TF_FORMAT_MAX + 1;
if (!innobase_file_format_check_on_off(innobase_file_format_check)) {
/* Did the user specify a format name that we support ? } else {
As a side effect it will update the variable
srv_check_file_format_at_startup */
if (innobase_file_format_validate_and_set(
innobase_file_format_check) < 0) {
sql_print_error("InnoDB: invalid " /* Set the value to the lowest supported format. */
"innodb_file_format_check value: " srv_max_file_format_at_startup = DICT_TF_FORMAT_MIN;
"should be either 'on' or 'off' or " }
"any value up to %s or its "
"equivalent numeric id",
trx_sys_file_format_id_to_name(
DICT_TF_FORMAT_MAX));
goto mem_free_and_error; /* Did the user specify a format name that we support?
} As a side effect it will update the variable
srv_max_file_format_at_startup */
if (innobase_file_format_validate_and_set(
innobase_file_format_max) < 0) {
sql_print_error("InnoDB: invalid "
"innodb_file_format_max value: "
"should be any value up to %s or its "
"equivalent numeric id",
trx_sys_file_format_id_to_name(
DICT_TF_FORMAT_MAX));
goto mem_free_and_error;
} }
if (innobase_change_buffering) { if (innobase_change_buffering) {
...@@ -2451,7 +2447,7 @@ innobase_init( ...@@ -2451,7 +2447,7 @@ innobase_init(
#endif /* MYSQL_DYNAMIC_PLUGIN */ #endif /* MYSQL_DYNAMIC_PLUGIN */
/* Get the current high water mark format. */ /* Get the current high water mark format. */
innobase_file_format_check = (char*) trx_sys_file_format_max_get(); innobase_file_format_max = (char*) trx_sys_file_format_max_get();
DBUG_RETURN(FALSE); DBUG_RETURN(FALSE);
error: error:
...@@ -3836,7 +3832,7 @@ ha_innobase::open( ...@@ -3836,7 +3832,7 @@ ha_innobase::open(
space, if this table has higher file format setting. */ space, if this table has higher file format setting. */
trx_sys_file_format_max_upgrade( trx_sys_file_format_max_upgrade(
(const char**) &innobase_file_format_check, (const char**) &innobase_file_format_max,
dict_table_get_format(prebuilt->table)); dict_table_get_format(prebuilt->table));
} }
...@@ -6959,7 +6955,7 @@ ha_innobase::create( ...@@ -6959,7 +6955,7 @@ ha_innobase::create(
space, if this table has higher file format setting. */ space, if this table has higher file format setting. */
trx_sys_file_format_max_upgrade( trx_sys_file_format_max_upgrade(
(const char**) &innobase_file_format_check, (const char**) &innobase_file_format_max,
dict_table_get_format(innobase_table)); dict_table_get_format(innobase_table));
} }
...@@ -7610,8 +7606,7 @@ innobase_get_mysql_key_number_for_index( ...@@ -7610,8 +7606,7 @@ innobase_get_mysql_key_number_for_index(
/* If index does not belong to the table of share structure. Search /* If index does not belong to the table of share structure. Search
index->table instead */ index->table instead */
if (index->table != ib_table if (index->table != ib_table) {
&& innobase_strcasecmp(index->table->name, share->table_name)) {
i = 0; i = 0;
ind = dict_table_get_first_index(index->table); ind = dict_table_get_first_index(index->table);
...@@ -10348,50 +10343,22 @@ innobase_file_format_name_lookup( ...@@ -10348,50 +10343,22 @@ innobase_file_format_name_lookup(
return(DICT_TF_FORMAT_MAX + 1); return(DICT_TF_FORMAT_MAX + 1);
} }
/************************************************************//**
Validate the file format check value, is it one of "on" or "off",
as a side effect it sets the srv_check_file_format_at_startup variable.
@return true if config value one of "on" or "off" */
static
bool
innobase_file_format_check_on_off(
/*==============================*/
const char* format_check) /*!< in: parameter value */
{
bool ret = true;
if (!innobase_strcasecmp(format_check, "off")) {
/* Set the value to disable checking. */
srv_check_file_format_at_startup = DICT_TF_FORMAT_MAX + 1;
} else if (!innobase_strcasecmp(format_check, "on")) {
/* Set the value to the lowest supported format. */
srv_check_file_format_at_startup = DICT_TF_FORMAT_51;
} else {
ret = FALSE;
}
return(ret);
}
/************************************************************//** /************************************************************//**
Validate the file format check config parameters, as a side effect it Validate the file format check config parameters, as a side effect it
sets the srv_check_file_format_at_startup variable. sets the srv_max_file_format_at_startup variable.
@return the format_id if valid config value, otherwise, return -1 */ @return the format_id if valid config value, otherwise, return -1 */
static static
int int
innobase_file_format_validate_and_set( innobase_file_format_validate_and_set(
/*================================*/ /*==================================*/
const char* format_check) /*!< in: parameter value */ const char* format_max) /*!< in: parameter value */
{ {
uint format_id; uint format_id;
format_id = innobase_file_format_name_lookup(format_check); format_id = innobase_file_format_name_lookup(format_max);
if (format_id < DICT_TF_FORMAT_MAX + 1) { if (format_id < DICT_TF_FORMAT_MAX + 1) {
srv_check_file_format_at_startup = format_id; srv_max_file_format_at_startup = format_id;
return((int) format_id); return((int) format_id);
} else { } else {
...@@ -10479,15 +10446,14 @@ innodb_file_format_name_update( ...@@ -10479,15 +10446,14 @@ innodb_file_format_name_update(
*static_cast<const char**>(var_ptr) *static_cast<const char**>(var_ptr)
= trx_sys_file_format_id_to_name(srv_file_format); = trx_sys_file_format_id_to_name(srv_file_format);
} }
/*************************************************************//** /*************************************************************//**
Check if valid argument to innodb_file_format_check. This Check if valid argument to innodb_file_format_max. This function
function is registered as a callback with MySQL. is registered as a callback with MySQL.
@return 0 for valid file format */ @return 0 for valid file format */
static static
int int
innodb_file_format_check_validate( innodb_file_format_max_validate(
/*==============================*/ /*============================*/
THD* thd, /*!< in: thread handle */ THD* thd, /*!< in: thread handle */
struct st_mysql_sys_var* var, /*!< in: pointer to system struct st_mysql_sys_var* var, /*!< in: pointer to system
variable */ variable */
...@@ -10507,39 +10473,27 @@ innodb_file_format_check_validate( ...@@ -10507,39 +10473,27 @@ innodb_file_format_check_validate(
if (file_format_input != NULL) { if (file_format_input != NULL) {
/* Check if user set on/off, we want to print a suitable format_id = innobase_file_format_validate_and_set(
message if they did so. */ file_format_input);
if (innobase_file_format_check_on_off(file_format_input)) {
push_warning_printf(thd,
MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WRONG_ARGUMENTS,
"InnoDB: invalid innodb_file_format_check "
"value; on/off can only be set at startup or "
"in the configuration file");
} else {
format_id = innobase_file_format_validate_and_set(
file_format_input);
if (format_id >= 0) { if (format_id >= 0) {
/* Save a pointer to the name in the /* Save a pointer to the name in the
'file_format_name_map' constant array. */ 'file_format_name_map' constant array. */
*static_cast<const char**>(save) = *static_cast<const char**>(save) =
trx_sys_file_format_id_to_name( trx_sys_file_format_id_to_name(
(uint)format_id); (uint)format_id);
return(0); return(0);
} else { } else {
push_warning_printf(thd, push_warning_printf(thd,
MYSQL_ERROR::WARN_LEVEL_WARN, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WRONG_ARGUMENTS, ER_WRONG_ARGUMENTS,
"InnoDB: invalid innodb_file_format_check " "InnoDB: invalid innodb_file_format_max "
"value; can be any format up to %s " "value; can be any format up to %s "
"or its equivalent numeric id", "or equivalent id of %d",
trx_sys_file_format_id_to_name( trx_sys_file_format_id_to_name(DICT_TF_FORMAT_MAX),
DICT_TF_FORMAT_MAX)); DICT_TF_FORMAT_MAX);
}
} }
} }
...@@ -10548,12 +10502,12 @@ innodb_file_format_check_validate( ...@@ -10548,12 +10502,12 @@ innodb_file_format_check_validate(
} }
/****************************************************************//** /****************************************************************//**
Update the system variable innodb_file_format_check using the "saved" Update the system variable innodb_file_format_max using the "saved"
value. This function is registered as a callback with MySQL. */ value. This function is registered as a callback with MySQL. */
static static
void void
innodb_file_format_check_update( innodb_file_format_max_update(
/*============================*/ /*==========================*/
THD* thd, /*!< in: thread handle */ THD* thd, /*!< in: thread handle */
struct st_mysql_sys_var* var, /*!< in: pointer to struct st_mysql_sys_var* var, /*!< in: pointer to
system variable */ system variable */
...@@ -10863,15 +10817,26 @@ static MYSQL_SYSVAR_STR(file_format, innobase_file_format_name, ...@@ -10863,15 +10817,26 @@ static MYSQL_SYSVAR_STR(file_format, innobase_file_format_name,
innodb_file_format_name_validate, innodb_file_format_name_validate,
innodb_file_format_name_update, "Antelope"); innodb_file_format_name_update, "Antelope");
/* "innobase_file_format_check" decides whether we would continue
booting the server if the file format stamped on the system
table space exceeds the maximum file format supported
by the server. Can be set during server startup at command
line or configure file, and a read only variable after
server startup */
static MYSQL_SYSVAR_BOOL(file_format_check, innobase_file_format_check,
PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY,
"Whether to perform system file format check.",
NULL, NULL, TRUE);
/* If a new file format is introduced, the file format /* If a new file format is introduced, the file format
name needs to be updated accordingly. Please refer to name needs to be updated accordingly. Please refer to
file_format_name_map[] defined in trx0sys.c for the next file_format_name_map[] defined in trx0sys.c for the next
file format name. */ file format name. */
static MYSQL_SYSVAR_STR(file_format_check, innobase_file_format_check, static MYSQL_SYSVAR_STR(file_format_max, innobase_file_format_max,
PLUGIN_VAR_OPCMDARG, PLUGIN_VAR_OPCMDARG,
"The highest file format in the tablespace.", "The highest file format in the tablespace.",
innodb_file_format_check_validate, innodb_file_format_max_validate,
innodb_file_format_check_update, "Barracuda"); innodb_file_format_max_update, "Antelope");
static MYSQL_SYSVAR_ULONG(flush_log_at_trx_commit, srv_flush_log_at_trx_commit, static MYSQL_SYSVAR_ULONG(flush_log_at_trx_commit, srv_flush_log_at_trx_commit,
PLUGIN_VAR_OPCMDARG, PLUGIN_VAR_OPCMDARG,
...@@ -11119,6 +11084,7 @@ static struct st_mysql_sys_var* innobase_system_variables[]= { ...@@ -11119,6 +11084,7 @@ static struct st_mysql_sys_var* innobase_system_variables[]= {
MYSQL_SYSVAR(file_per_table), MYSQL_SYSVAR(file_per_table),
MYSQL_SYSVAR(file_format), MYSQL_SYSVAR(file_format),
MYSQL_SYSVAR(file_format_check), MYSQL_SYSVAR(file_format_check),
MYSQL_SYSVAR(file_format_max),
MYSQL_SYSVAR(flush_log_at_trx_commit), MYSQL_SYSVAR(flush_log_at_trx_commit),
MYSQL_SYSVAR(flush_method), MYSQL_SYSVAR(flush_method),
MYSQL_SYSVAR(force_recovery), MYSQL_SYSVAR(force_recovery),
......
...@@ -88,6 +88,10 @@ combination of types */ ...@@ -88,6 +88,10 @@ combination of types */
new BLOB treatment */ new BLOB treatment */
/** Maximum supported file format */ /** Maximum supported file format */
#define DICT_TF_FORMAT_MAX DICT_TF_FORMAT_ZIP #define DICT_TF_FORMAT_MAX DICT_TF_FORMAT_ZIP
/** Minimum supported file format */
#define DICT_TF_FORMAT_MIN DICT_TF_FORMAT_51
/* @} */ /* @} */
#define DICT_TF_BITS 6 /*!< number of flag bits */ #define DICT_TF_BITS 6 /*!< number of flag bits */
#if (1 << (DICT_TF_BITS - DICT_TF_FORMAT_SHIFT)) <= DICT_TF_FORMAT_MAX #if (1 << (DICT_TF_BITS - DICT_TF_FORMAT_SHIFT)) <= DICT_TF_FORMAT_MAX
......
...@@ -101,7 +101,7 @@ extern ulint srv_file_format; ...@@ -101,7 +101,7 @@ extern ulint srv_file_format;
/** Whether to check file format during startup. A value of /** Whether to check file format during startup. A value of
DICT_TF_FORMAT_MAX + 1 means no checking ie. FALSE. The default is to DICT_TF_FORMAT_MAX + 1 means no checking ie. FALSE. The default is to
set it to the highest format we support. */ set it to the highest format we support. */
extern ulint srv_check_file_format_at_startup; extern ulint srv_max_file_format_at_startup;
/** Place locks to records only i.e. do not use next-key locking except /** Place locks to records only i.e. do not use next-key locking except
on duplicate key checking and foreign key checking */ on duplicate key checking and foreign key checking */
extern ibool srv_locks_unsafe_for_binlog; extern ibool srv_locks_unsafe_for_binlog;
......
...@@ -2678,6 +2678,12 @@ row_sel_store_mysql_rec( ...@@ -2678,6 +2678,12 @@ row_sel_store_mysql_rec(
prebuilt->blob_heap = NULL; prebuilt->blob_heap = NULL;
} }
/* init null bytes with default values as they might be
left uninitialized in some cases and these uninited bytes
might be copied into mysql record buffer that leads to
valgrind warnings */
memcpy(mysql_rec, prebuilt->default_rec, prebuilt->null_bitmap_len);
for (i = 0; i < prebuilt->n_template; i++) { for (i = 0; i < prebuilt->n_template; i++) {
templ = prebuilt->mysql_template + i; templ = prebuilt->mysql_template + i;
......
...@@ -127,7 +127,7 @@ UNIV_INTERN ulint srv_file_format = 0; ...@@ -127,7 +127,7 @@ UNIV_INTERN ulint srv_file_format = 0;
/** Whether to check file format during startup. A value of /** Whether to check file format during startup. A value of
DICT_TF_FORMAT_MAX + 1 means no checking ie. FALSE. The default is to DICT_TF_FORMAT_MAX + 1 means no checking ie. FALSE. The default is to
set it to the highest format we support. */ set it to the highest format we support. */
UNIV_INTERN ulint srv_check_file_format_at_startup = DICT_TF_FORMAT_MAX; UNIV_INTERN ulint srv_max_file_format_at_startup = DICT_TF_FORMAT_MAX;
#if DICT_TF_FORMAT_51 #if DICT_TF_FORMAT_51
# error "DICT_TF_FORMAT_51 must be 0!" # error "DICT_TF_FORMAT_51 must be 0!"
...@@ -2371,30 +2371,6 @@ srv_error_monitor_thread( ...@@ -2371,30 +2371,6 @@ srv_error_monitor_thread(
OS_THREAD_DUMMY_RETURN; OS_THREAD_DUMMY_RETURN;
} }
/******************************************************************//**
Increment the server activity count. */
UNIV_INLINE
void
srv_inc_activity_count_low(void)
/*============================*/
{
mutex_enter(&kernel_mutex);
++srv_activity_count;
mutex_exit(&kernel_mutex);
}
/******************************************************************//**
Increment the server activity count. */
UNIV_INTERN
void
srv_inc_activity_count(void)
/*========================*/
{
srv_inc_activity_count_low();
}
/**********************************************************************//** /**********************************************************************//**
Check whether any background thread is active. Check whether any background thread is active.
@return FALSE if all are are suspended or have exited. */ @return FALSE if all are are suspended or have exited. */
...@@ -2431,9 +2407,7 @@ void ...@@ -2431,9 +2407,7 @@ void
srv_active_wake_master_thread(void) srv_active_wake_master_thread(void)
/*===============================*/ /*===============================*/
{ {
ut_ad(!mutex_own(&kernel_mutex)); srv_activity_count++;
srv_inc_activity_count_low();
if (srv_n_threads_active[SRV_MASTER] == 0) { if (srv_n_threads_active[SRV_MASTER] == 0) {
......
...@@ -1590,7 +1590,7 @@ innobase_start_or_create_for_mysql(void) ...@@ -1590,7 +1590,7 @@ innobase_start_or_create_for_mysql(void)
consistent state, this is REQUIRED for the recovery consistent state, this is REQUIRED for the recovery
process to work. */ process to work. */
err = trx_sys_file_format_max_check( err = trx_sys_file_format_max_check(
srv_check_file_format_at_startup); srv_max_file_format_at_startup);
if (err != DB_SUCCESS) { if (err != DB_SUCCESS) {
return(err); return(err);
......
...@@ -135,7 +135,7 @@ UNIV_INTERN mysql_pfs_key_t file_format_max_mutex_key; ...@@ -135,7 +135,7 @@ UNIV_INTERN mysql_pfs_key_t file_format_max_mutex_key;
#ifndef UNIV_HOTBACKUP #ifndef UNIV_HOTBACKUP
/** This is used to track the maximum file format id known to InnoDB. It's /** This is used to track the maximum file format id known to InnoDB. It's
updated via SET GLOBAL innodb_file_format_check = 'x' or when we open updated via SET GLOBAL innodb_file_format_max = 'x' or when we open
or create a table. */ or create a table. */
static file_format_t file_format_max; static file_format_t file_format_max;
...@@ -1160,7 +1160,7 @@ trx_sys_file_format_max_check( ...@@ -1160,7 +1160,7 @@ trx_sys_file_format_max_check(
if (format_id == ULINT_UNDEFINED) { if (format_id == ULINT_UNDEFINED) {
/* Format ID was not set. Set it to minimum possible /* Format ID was not set. Set it to minimum possible
value. */ value. */
format_id = DICT_TF_FORMAT_51; format_id = DICT_TF_FORMAT_MIN;
} }
ut_print_timestamp(stderr); ut_print_timestamp(stderr);
...@@ -1240,7 +1240,7 @@ trx_sys_file_format_tag_init(void) ...@@ -1240,7 +1240,7 @@ trx_sys_file_format_tag_init(void)
/* If format_id is not set then set it to the minimum. */ /* If format_id is not set then set it to the minimum. */
if (format_id == ULINT_UNDEFINED) { if (format_id == ULINT_UNDEFINED) {
trx_sys_file_format_max_set(DICT_TF_FORMAT_51, NULL); trx_sys_file_format_max_set(DICT_TF_FORMAT_MIN, NULL);
} }
} }
...@@ -1296,7 +1296,7 @@ trx_sys_file_format_init(void) ...@@ -1296,7 +1296,7 @@ trx_sys_file_format_init(void)
/* We don't need a mutex here, as this function should only /* We don't need a mutex here, as this function should only
be called once at start up. */ be called once at start up. */
file_format_max.id = DICT_TF_FORMAT_51; file_format_max.id = DICT_TF_FORMAT_MIN;
file_format_max.name = trx_sys_file_format_id_to_name( file_format_max.name = trx_sys_file_format_id_to_name(
file_format_max.id); file_format_max.id);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment