Commit 9db94070 authored by Vasil Dimov's avatar Vasil Dimov

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

parents e606f289 d6f8a0e2
......@@ -920,7 +920,7 @@ create index t1u on t1 (u(1));
drop table t1;
set global innodb_file_per_table=0;
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_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
CREATE TABLE t1(
......
......@@ -397,25 +397,25 @@ set global innodb_file_per_table=0;
set global innodb_file_format=Antelope;
set global innodb_file_per_table=on;
set global innodb_file_format=`Barracuda`;
set global innodb_file_format_check=`Antelope`;
set global innodb_file_format_max=`Antelope`;
create table normal_table (
c1 int
) engine = innodb;
select @@innodb_file_format_check;
@@innodb_file_format_check
select @@innodb_file_format_max;
@@innodb_file_format_max
Antelope
create table zip_table (
c1 int
) engine = innodb key_block_size = 8;
select @@innodb_file_format_check;
@@innodb_file_format_check
select @@innodb_file_format_max;
@@innodb_file_format_max
Barracuda
set global innodb_file_format_check=`Antelope`;
select @@innodb_file_format_check;
@@innodb_file_format_check
set global innodb_file_format_max=`Antelope`;
select @@innodb_file_format_max;
@@innodb_file_format_max
Antelope
show table status;
select @@innodb_file_format_check;
@@innodb_file_format_check
select @@innodb_file_format_max;
@@innodb_file_format_max
Barracuda
drop table normal_table, zip_table;
set @old_innodb_file_format_check=@@innodb_file_format_check;
select @old_innodb_file_format_check;
@old_innodb_file_format_check
set @old_innodb_file_format_max=@@innodb_file_format_max;
select @old_innodb_file_format_max;
@old_innodb_file_format_max
Antelope
set global innodb_file_format_check = Barracuda;
select @@innodb_file_format_check;
@@innodb_file_format_check
set global innodb_file_format_max = Barracuda;
select @@innodb_file_format_max;
@@innodb_file_format_max
Barracuda
set global innodb_file_format_check = DEFAULT;
select @@innodb_file_format_check;
@@innodb_file_format_check
Barracuda
set global innodb_file_format_check = @old_innodb_file_format_check;
select @@innodb_file_format_check;
@@innodb_file_format_check
set global innodb_file_format_max = DEFAULT;
select @@innodb_file_format_max;
@@innodb_file_format_max
Antelope
set global innodb_file_format_max = @old_innodb_file_format_max;
select @@innodb_file_format_max;
@@innodb_file_format_max
Antelope
set global innodb_file_format_check = cheetah;
ERROR 42000: Variable 'innodb_file_format_check' can't be set to the value of 'cheetah'
set global innodb_file_format_check = Bear;
ERROR 42000: Variable 'innodb_file_format_check' can't be set to the value of 'Bear'
set global innodb_file_format_check = on;
ERROR 42000: Variable 'innodb_file_format_check' can't be set to the value of 'ON'
set global innodb_file_format_check = off;
ERROR 42000: Variable 'innodb_file_format_check' can't be set to the value of 'off'
set global innodb_file_format_max = cheetah;
ERROR 42000: Variable 'innodb_file_format_max' can't be set to the value of 'cheetah'
set global innodb_file_format_max = Bear;
ERROR 42000: Variable 'innodb_file_format_max' can't be set to the value of 'Bear'
set global innodb_file_format_max = on;
ERROR 42000: Variable 'innodb_file_format_max' can't be set to the value of 'ON'
set global innodb_file_format_max = 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
Warning 1264 Out of range value for column 'col84' at row 1
DROP TABLE bug52745;
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;
......@@ -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
DROP TABLE bug53591;
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;
......@@ -3,6 +3,9 @@ select @@innodb_file_format;
Antelope
select @@innodb_file_format_check;
@@innodb_file_format_check
1
select @@innodb_file_format_max;
@@innodb_file_format_max
Antelope
set global innodb_file_format=antelope;
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'
select @@innodb_file_format;
@@innodb_file_format
Antelope
set global innodb_file_format_check=antelope;
set global innodb_file_format_check=barracuda;
set global innodb_file_format_check=cheetah;
ERROR 42000: Variable 'innodb_file_format_check' can't be set to the value of 'cheetah'
select @@innodb_file_format_check;
@@innodb_file_format_check
Barracuda
set global innodb_file_format_check=default;
select @@innodb_file_format_check;
@@innodb_file_format_check
set global innodb_file_format_max=antelope;
set global innodb_file_format_max=barracuda;
set global innodb_file_format_max=cheetah;
ERROR 42000: Variable 'innodb_file_format_max' can't be set to the value of 'cheetah'
select @@innodb_file_format_max;
@@innodb_file_format_max
Barracuda
set global innodb_file_format_max=default;
select @@innodb_file_format_max;
@@innodb_file_format_max
Antelope
set global innodb_file_format=on;
ERROR 42000: Variable 'innodb_file_format' can't be set to the value of 'ON'
set global innodb_file_format=off;
ERROR 42000: Variable 'innodb_file_format' can't be set to the value of 'off'
select @@innodb_file_format_check;
@@innodb_file_format_check
Barracuda
set global innodb_file_format_check=antelope;
select @@innodb_file_format_max;
@@innodb_file_format_max
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
1 SIMPLE t2 ALL NULL NULL NULL NULL 3 Using where
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))
#
CREATE TABLE t1 (a INT, b INT, c INT, d INT,
......
......@@ -9,4 +9,3 @@
# Do not use any TAB characters for whitespace.
#
##############################################################################
innodb_multi_update: Bug #38999 2010-05-05 mmakela Valgrind warnings
......@@ -2,7 +2,7 @@
# embedded server ignores 'delayed', so skip this
-- 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
drop table if exists t1;
......@@ -40,4 +40,4 @@ DROP TABLE t1;
#
-- 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 @@
# embedded server ignores 'delayed', so skip this
-- 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
drop table if exists t1;
......@@ -671,4 +671,4 @@ DROP TABLE t1;
#
-- 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 @@
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;
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));
drop table t1;
eval set global innodb_file_per_table=$per_table;
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
......@@ -550,4 +550,4 @@ DROP TABLE t1;
#
-- 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 @@
let $per_table=`select @@innodb_file_per_table`;
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_format=`0`;
......@@ -316,21 +316,21 @@ eval set global innodb_file_format=$format;
-- disable_info
set global innodb_file_per_table=on;
set global innodb_file_format=`Barracuda`;
set global innodb_file_format_check=`Antelope`;
set global innodb_file_format_max=`Antelope`;
create table normal_table (
c1 int
) engine = innodb;
select @@innodb_file_format_check;
select @@innodb_file_format_max;
create table zip_table (
c1 int
) engine = innodb key_block_size = 8;
select @@innodb_file_format_check;
set global innodb_file_format_check=`Antelope`;
select @@innodb_file_format_check;
select @@innodb_file_format_max;
set global innodb_file_format_max=`Antelope`;
select @@innodb_file_format_max;
-- disable_result_log
show table status;
-- enable_result_log
select @@innodb_file_format_check;
select @@innodb_file_format_max;
drop table normal_table, zip_table;
-- disable_result_log
......@@ -341,4 +341,4 @@ drop table normal_table, zip_table;
-- disable_query_log
eval set global innodb_file_format=$format;
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;
-- disable_result_log
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`;
SET GLOBAL innodb_file_format='Barracuda';
SET GLOBAL innodb_file_per_table=on;
......@@ -28,5 +28,5 @@ INSERT IGNORE INTO `table0` SET `col19` = '19940127002709', `col20` = 2383927.90
CHECK TABLE table0 EXTENDED;
DROP TABLE table0;
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;
# This is the unit test for bug *47167.
# It tests setting the global variable
# "innodb_file_format_check" with a
# user-Defined Variable.
# This is the unit test for bug #47167.
# It tests setting the global variable "innodb_file_format_max" (
# originally "innodb_file_format_check") with a user-Defined Variable.
--source include/have_innodb.inc
# Save the value (Antelope) in 'innodb_file_format_check' to
# 'old_innodb_file_format_check'
set @old_innodb_file_format_check=@@innodb_file_format_check;
# Save the value (Antelope) in 'innodb_file_format_max' to
# 'old_innodb_file_format_max'
set @old_innodb_file_format_max=@@innodb_file_format_max;
# @old_innodb_file_format_check shall have the value of 'Antelope'
select @old_innodb_file_format_check;
# @old_innodb_file_format_max shall have the value of 'Antelope'
select @old_innodb_file_format_max;
# Reset the value in 'innodb_file_format_check' to 'Barracuda'
set global innodb_file_format_check = Barracuda;
# Reset the value in 'innodb_file_format_max' to '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.
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'
set global innodb_file_format_check = @old_innodb_file_format_check;
# Put the saved value back to 'innodb_file_format_max'
set global innodb_file_format_max = @old_innodb_file_format_max;
# Check whether 'innodb_file_format_check' get its original value.
select @@innodb_file_format_check;
# Check whether 'innodb_file_format_max' get its original value.
select @@innodb_file_format_max;
# Following are negative tests, all should fail.
--disable_warnings
--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
set global innodb_file_format_check = Bear;
set global innodb_file_format_max = Bear;
--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
set global innodb_file_format_check = off;
set global innodb_file_format_max = off;
--enable_warnings
-- source include/have_innodb.inc
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`;
SET GLOBAL innodb_file_format='Barracuda';
SET GLOBAL innodb_file_per_table=on;
......@@ -105,5 +105,5 @@ SHOW WARNINGS;
DROP TABLE bug52745;
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;
-- source include/have_innodb.inc
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`;
SET GLOBAL innodb_file_format='Barracuda';
......@@ -18,5 +18,5 @@ SHOW WARNINGS;
DROP TABLE bug53591;
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;
-- 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_check;
select @@innodb_file_format_max;
set global innodb_file_format=antelope;
set global innodb_file_format=barracuda;
--error ER_WRONG_VALUE_FOR_VAR
......@@ -14,16 +18,24 @@ set global innodb_file_format=on;
--error ER_WRONG_VALUE_FOR_VAR
set global innodb_file_format=off;
select @@innodb_file_format;
set global innodb_file_format_check=antelope;
set global innodb_file_format_check=barracuda;
set global innodb_file_format_max=antelope;
set global innodb_file_format_max=barracuda;
--error ER_WRONG_VALUE_FOR_VAR
set global innodb_file_format_check=cheetah;
select @@innodb_file_format_check;
set global innodb_file_format_check=default;
select @@innodb_file_format_check;
set global innodb_file_format_max=cheetah;
select @@innodb_file_format_max;
set global innodb_file_format_max=default;
select @@innodb_file_format_max;
--error ER_WRONG_VALUE_FOR_VAR
set global innodb_file_format=on;
--error ER_WRONG_VALUE_FOR_VAR
set global innodb_file_format=off;
select @@innodb_file_format_check;
set global innodb_file_format_check=antelope;
select @@innodb_file_format_max;
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
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 # 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:
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;
There should be *no* variables listed below:
INNODB_FILE_FORMAT_MAX
INNODB_FILE_FORMAT_MAX
drop table t1;
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;
@start_global_value
Antelope
Valid values are 'Antelope' and 'Barracuda'
select @@global.innodb_file_format_check in ('Antelope', 'Barracuda');
@@global.innodb_file_format_check in ('Antelope', 'Barracuda')
select @@global.innodb_file_format_max in ('Antelope', 'Barracuda');
@@global.innodb_file_format_max in ('Antelope', 'Barracuda')
1
select @@global.innodb_file_format_check;
@@global.innodb_file_format_check
select @@global.innodb_file_format_max;
@@global.innodb_file_format_max
Antelope
select @@session.innodb_file_format_check;
ERROR HY000: Variable 'innodb_file_format_check' is a GLOBAL variable
show global variables like 'innodb_file_format_check';
select @@session.innodb_file_format_max;
ERROR HY000: Variable 'innodb_file_format_max' is a GLOBAL variable
show global variables like 'innodb_file_format_max';
Variable_name Value
innodb_file_format_check Antelope
show session variables like 'innodb_file_format_check';
innodb_file_format_max Antelope
show session variables like 'innodb_file_format_max';
Variable_name Value
innodb_file_format_check Antelope
select * from information_schema.global_variables where variable_name='innodb_file_format_check';
innodb_file_format_max Antelope
select * from information_schema.global_variables where variable_name='innodb_file_format_max';
VARIABLE_NAME VARIABLE_VALUE
INNODB_FILE_FORMAT_CHECK Antelope
select * from information_schema.session_variables where variable_name='innodb_file_format_check';
INNODB_FILE_FORMAT_MAX Antelope
select * from information_schema.session_variables where variable_name='innodb_file_format_max';
VARIABLE_NAME VARIABLE_VALUE
INNODB_FILE_FORMAT_CHECK Antelope
set global innodb_file_format_check='Antelope';
select @@global.innodb_file_format_check;
@@global.innodb_file_format_check
INNODB_FILE_FORMAT_MAX Antelope
set global innodb_file_format_max='Antelope';
select @@global.innodb_file_format_max;
@@global.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
INNODB_FILE_FORMAT_CHECK Antelope
select * from information_schema.session_variables where variable_name='innodb_file_format_check';
INNODB_FILE_FORMAT_MAX Antelope
select * from information_schema.session_variables where variable_name='innodb_file_format_max';
VARIABLE_NAME VARIABLE_VALUE
INNODB_FILE_FORMAT_CHECK Antelope
set @@global.innodb_file_format_check='Barracuda';
select @@global.innodb_file_format_check;
@@global.innodb_file_format_check
INNODB_FILE_FORMAT_MAX Antelope
set @@global.innodb_file_format_max='Barracuda';
select @@global.innodb_file_format_max;
@@global.innodb_file_format_max
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
INNODB_FILE_FORMAT_CHECK Barracuda
select * from information_schema.session_variables where variable_name='innodb_file_format_check';
INNODB_FILE_FORMAT_MAX Barracuda
select * from information_schema.session_variables where variable_name='innodb_file_format_max';
VARIABLE_NAME VARIABLE_VALUE
INNODB_FILE_FORMAT_CHECK Barracuda
set session innodb_file_format_check='Salmon';
ERROR HY000: Variable 'innodb_file_format_check' is a GLOBAL variable and should be set with SET GLOBAL
set @@session.innodb_file_format_check='Salmon';
ERROR HY000: Variable 'innodb_file_format_check' is a GLOBAL variable and should be set with SET GLOBAL
set global innodb_file_format_check=1.1;
ERROR 42000: Incorrect argument type to variable 'innodb_file_format_check'
set global innodb_file_format_check=1e1;
ERROR 42000: Incorrect argument type to variable 'innodb_file_format_check'
set global innodb_file_format_check='Salmon';
ERROR 42000: Variable 'innodb_file_format_check' can't be set to the value of 'Salmon'
SET @@global.innodb_file_format_check = @start_global_value;
SELECT @@global.innodb_file_format_check;
@@global.innodb_file_format_check
INNODB_FILE_FORMAT_MAX Barracuda
set session innodb_file_format_max='Salmon';
ERROR HY000: Variable 'innodb_file_format_max' is a GLOBAL variable and should be set with SET GLOBAL
set @@session.innodb_file_format_max='Salmon';
ERROR HY000: Variable 'innodb_file_format_max' is a GLOBAL variable and should be set with SET GLOBAL
set global innodb_file_format_max=1.1;
ERROR 42000: Incorrect argument type to variable 'innodb_file_format_max'
set global innodb_file_format_max=1e1;
ERROR 42000: Incorrect argument type to variable 'innodb_file_format_max'
set global innodb_file_format_max='Salmon';
ERROR 42000: Variable 'innodb_file_format_max' can't be set to the value of 'Salmon'
SET @@global.innodb_file_format_max = @start_global_value;
SELECT @@global.innodb_file_format_max;
@@global.innodb_file_format_max
Antelope
......@@ -5,51 +5,51 @@
--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;
#
# exists as global only
#
--echo Valid values are 'Antelope' and 'Barracuda'
select @@global.innodb_file_format_check in ('Antelope', 'Barracuda');
select @@global.innodb_file_format_check;
select @@global.innodb_file_format_max in ('Antelope', 'Barracuda');
select @@global.innodb_file_format_max;
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
select @@session.innodb_file_format_check;
show global variables like 'innodb_file_format_check';
show session variables like 'innodb_file_format_check';
select * from information_schema.global_variables where variable_name='innodb_file_format_check';
select * from information_schema.session_variables where variable_name='innodb_file_format_check';
select @@session.innodb_file_format_max;
show global variables like 'innodb_file_format_max';
show session variables like 'innodb_file_format_max';
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_max';
#
# show that it's writable
#
set global innodb_file_format_check='Antelope';
select @@global.innodb_file_format_check;
select * from information_schema.global_variables where variable_name='innodb_file_format_check';
select * from information_schema.session_variables where variable_name='innodb_file_format_check';
set @@global.innodb_file_format_check='Barracuda';
select @@global.innodb_file_format_check;
select * from information_schema.global_variables where variable_name='innodb_file_format_check';
select * from information_schema.session_variables where variable_name='innodb_file_format_check';
set global innodb_file_format_max='Antelope';
select @@global.innodb_file_format_max;
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_max';
set @@global.innodb_file_format_max='Barracuda';
select @@global.innodb_file_format_max;
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_max';
--error ER_GLOBAL_VARIABLE
set session innodb_file_format_check='Salmon';
set session innodb_file_format_max='Salmon';
--error ER_GLOBAL_VARIABLE
set @@session.innodb_file_format_check='Salmon';
set @@session.innodb_file_format_max='Salmon';
#
# incorrect types
#
--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
set global innodb_file_format_check=1e1;
set global innodb_file_format_max=1e1;
--error ER_WRONG_VALUE_FOR_VAR
set global innodb_file_format_check='Salmon';
set global innodb_file_format_max='Salmon';
#
# Cleanup
#
SET @@global.innodb_file_format_check = @start_global_value;
SELECT @@global.innodb_file_format_check;
SET @@global.innodb_file_format_max = @start_global_value;
SELECT @@global.innodb_file_format_max;
......@@ -2957,7 +2957,7 @@ buf_page_get_gen(
block->page.buf_fix_count = 1;
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);
......
......@@ -1694,6 +1694,7 @@ dict_load_table(
/* Try to open the tablespace */
if (!fil_open_single_table_tablespace(
TRUE, table->space,
table->flags == DICT_TF_COMPACT ? 0 :
table->flags & ~(~0 << DICT_TF_BITS), name)) {
/* We failed to find a sensible
tablespace file */
......
......@@ -149,10 +149,10 @@ static char* innobase_log_group_home_dir = NULL;
static char* innobase_file_format_name = NULL;
static char* innobase_change_buffering = NULL;
/* Note: This variable can be set to on/off and any of the supported
file formats in the configuration file, but can only be set to any
of the supported file formats during runtime. */
static char* innobase_file_format_check = NULL;
/* The highest file format being used in the database. The value can be
set by user, however, it will be adjusted to the newer file format if
a table of such format is created/opened. */
static char* innobase_file_format_max = NULL;
static char* innobase_file_flush_method = NULL;
......@@ -160,6 +160,7 @@ static char* innobase_file_flush_method = NULL;
values */
static ulong innobase_fast_shutdown = 1;
static my_bool innobase_file_format_check = TRUE;
#ifdef UNIV_LOG_ARCHIVE
static my_bool innobase_log_archive = FALSE;
static char* innobase_log_arch_dir = NULL;
......@@ -171,6 +172,7 @@ static my_bool innobase_rollback_on_timeout = FALSE;
static my_bool innobase_create_status_file = FALSE;
static my_bool innobase_stats_on_metadata = TRUE;
static char* internal_innobase_data_file_path = NULL;
static char* innodb_version_str = (char*) INNODB_VERSION_STR;
......@@ -366,22 +368,13 @@ innobase_file_format_name_lookup(
name */
/************************************************************//**
Validate the file format check config parameters, as a side effect it
sets the srv_check_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.
sets the srv_max_file_format_at_startup variable.
@return the format_id if valid config value, otherwise, return -1 */
static
int
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. */
static
......@@ -2264,32 +2257,35 @@ innobase_init(
innobase_file_format_name is used in the MySQL set variable
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);
/* Process innobase_file_format_check variable */
ut_a(innobase_file_format_check != NULL);
/* Check innobase_file_format_check variable */
if (!innobase_file_format_check) {
/* As a side effect it will set srv_check_file_format_at_startup
on valid input. First we check for "on"/"off". */
if (!innobase_file_format_check_on_off(innobase_file_format_check)) {
/* Set the value to disable checking. */
srv_max_file_format_at_startup = DICT_TF_FORMAT_MAX + 1;
/* Did the user specify a format name that we support ?
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) {
} else {
sql_print_error("InnoDB: invalid "
"innodb_file_format_check value: "
"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));
/* Set the value to the lowest supported format. */
srv_max_file_format_at_startup = DICT_TF_FORMAT_MIN;
}
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) {
......@@ -2451,7 +2447,7 @@ innobase_init(
#endif /* MYSQL_DYNAMIC_PLUGIN */
/* 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);
error:
......@@ -3836,7 +3832,7 @@ ha_innobase::open(
space, if this table has higher file format setting. */
trx_sys_file_format_max_upgrade(
(const char**) &innobase_file_format_check,
(const char**) &innobase_file_format_max,
dict_table_get_format(prebuilt->table));
}
......@@ -6959,7 +6955,7 @@ ha_innobase::create(
space, if this table has higher file format setting. */
trx_sys_file_format_max_upgrade(
(const char**) &innobase_file_format_check,
(const char**) &innobase_file_format_max,
dict_table_get_format(innobase_table));
}
......@@ -7610,8 +7606,7 @@ innobase_get_mysql_key_number_for_index(
/* If index does not belong to the table of share structure. Search
index->table instead */
if (index->table != ib_table
&& innobase_strcasecmp(index->table->name, share->table_name)) {
if (index->table != ib_table) {
i = 0;
ind = dict_table_get_first_index(index->table);
......@@ -10348,50 +10343,22 @@ innobase_file_format_name_lookup(
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
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 */
static
int
innobase_file_format_validate_and_set(
/*================================*/
const char* format_check) /*!< in: parameter value */
/*==================================*/
const char* format_max) /*!< in: parameter value */
{
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) {
srv_check_file_format_at_startup = format_id;
srv_max_file_format_at_startup = format_id;
return((int) format_id);
} else {
......@@ -10479,15 +10446,14 @@ innodb_file_format_name_update(
*static_cast<const char**>(var_ptr)
= trx_sys_file_format_id_to_name(srv_file_format);
}
/*************************************************************//**
Check if valid argument to innodb_file_format_check. This
function is registered as a callback with MySQL.
Check if valid argument to innodb_file_format_max. This function
is registered as a callback with MySQL.
@return 0 for valid file format */
static
int
innodb_file_format_check_validate(
/*==============================*/
innodb_file_format_max_validate(
/*============================*/
THD* thd, /*!< in: thread handle */
struct st_mysql_sys_var* var, /*!< in: pointer to system
variable */
......@@ -10507,39 +10473,27 @@ innodb_file_format_check_validate(
if (file_format_input != NULL) {
/* Check if user set on/off, we want to print a suitable
message if they did so. */
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);
format_id = innobase_file_format_validate_and_set(
file_format_input);
if (format_id >= 0) {
/* Save a pointer to the name in the
'file_format_name_map' constant array. */
*static_cast<const char**>(save) =
trx_sys_file_format_id_to_name(
(uint)format_id);
if (format_id >= 0) {
/* Save a pointer to the name in the
'file_format_name_map' constant array. */
*static_cast<const char**>(save) =
trx_sys_file_format_id_to_name(
(uint)format_id);
return(0);
return(0);
} else {
push_warning_printf(thd,
MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WRONG_ARGUMENTS,
"InnoDB: invalid innodb_file_format_check "
"value; can be any format up to %s "
"or its equivalent numeric id",
trx_sys_file_format_id_to_name(
DICT_TF_FORMAT_MAX));
}
} else {
push_warning_printf(thd,
MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WRONG_ARGUMENTS,
"InnoDB: invalid innodb_file_format_max "
"value; can be any format up to %s "
"or equivalent id of %d",
trx_sys_file_format_id_to_name(DICT_TF_FORMAT_MAX),
DICT_TF_FORMAT_MAX);
}
}
......@@ -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. */
static
void
innodb_file_format_check_update(
/*============================*/
innodb_file_format_max_update(
/*==========================*/
THD* thd, /*!< in: thread handle */
struct st_mysql_sys_var* var, /*!< in: pointer to
system variable */
......@@ -10863,15 +10817,26 @@ static MYSQL_SYSVAR_STR(file_format, innobase_file_format_name,
innodb_file_format_name_validate,
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
name needs to be updated accordingly. Please refer to
file_format_name_map[] defined in trx0sys.c for the next
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,
"The highest file format in the tablespace.",
innodb_file_format_check_validate,
innodb_file_format_check_update, "Barracuda");
innodb_file_format_max_validate,
innodb_file_format_max_update, "Antelope");
static MYSQL_SYSVAR_ULONG(flush_log_at_trx_commit, srv_flush_log_at_trx_commit,
PLUGIN_VAR_OPCMDARG,
......@@ -11119,6 +11084,7 @@ static struct st_mysql_sys_var* innobase_system_variables[]= {
MYSQL_SYSVAR(file_per_table),
MYSQL_SYSVAR(file_format),
MYSQL_SYSVAR(file_format_check),
MYSQL_SYSVAR(file_format_max),
MYSQL_SYSVAR(flush_log_at_trx_commit),
MYSQL_SYSVAR(flush_method),
MYSQL_SYSVAR(force_recovery),
......
......@@ -88,6 +88,10 @@ combination of types */
new BLOB treatment */
/** Maximum supported file format */
#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 */
#if (1 << (DICT_TF_BITS - DICT_TF_FORMAT_SHIFT)) <= DICT_TF_FORMAT_MAX
......
......@@ -101,7 +101,7 @@ extern ulint srv_file_format;
/** Whether to check file format during startup. A value of
DICT_TF_FORMAT_MAX + 1 means no checking ie. FALSE. The default is to
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
on duplicate key checking and foreign key checking */
extern ibool srv_locks_unsafe_for_binlog;
......
......@@ -2678,6 +2678,12 @@ row_sel_store_mysql_rec(
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++) {
templ = prebuilt->mysql_template + i;
......
......@@ -127,7 +127,7 @@ UNIV_INTERN ulint srv_file_format = 0;
/** Whether to check file format during startup. A value of
DICT_TF_FORMAT_MAX + 1 means no checking ie. FALSE. The default is to
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
# error "DICT_TF_FORMAT_51 must be 0!"
......@@ -2371,30 +2371,6 @@ srv_error_monitor_thread(
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.
@return FALSE if all are are suspended or have exited. */
......@@ -2431,9 +2407,7 @@ void
srv_active_wake_master_thread(void)
/*===============================*/
{
ut_ad(!mutex_own(&kernel_mutex));
srv_inc_activity_count_low();
srv_activity_count++;
if (srv_n_threads_active[SRV_MASTER] == 0) {
......
......@@ -1590,7 +1590,7 @@ innobase_start_or_create_for_mysql(void)
consistent state, this is REQUIRED for the recovery
process to work. */
err = trx_sys_file_format_max_check(
srv_check_file_format_at_startup);
srv_max_file_format_at_startup);
if (err != DB_SUCCESS) {
return(err);
......
......@@ -135,7 +135,7 @@ UNIV_INTERN mysql_pfs_key_t file_format_max_mutex_key;
#ifndef UNIV_HOTBACKUP
/** 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. */
static file_format_t file_format_max;
......@@ -1160,7 +1160,7 @@ trx_sys_file_format_max_check(
if (format_id == ULINT_UNDEFINED) {
/* Format ID was not set. Set it to minimum possible
value. */
format_id = DICT_TF_FORMAT_51;
format_id = DICT_TF_FORMAT_MIN;
}
ut_print_timestamp(stderr);
......@@ -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 == 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)
/* We don't need a mutex here, as this function should only
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.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