summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/suite/encryption/r/innodb_lotoftables.result28
-rw-r--r--mysql-test/suite/innodb/r/table_flags,32k.rdiff105
-rw-r--r--mysql-test/suite/innodb/r/table_flags,4k.rdiff92
-rw-r--r--mysql-test/suite/innodb/r/table_flags,64k.rdiff105
-rw-r--r--mysql-test/suite/innodb/r/table_flags,8k.rdiff92
-rw-r--r--mysql-test/suite/innodb/r/table_flags.result181
-rw-r--r--mysql-test/suite/innodb/t/table_flags.test199
-rw-r--r--storage/innobase/btr/btr0btr.cc3
-rw-r--r--storage/innobase/dict/dict0load.cc9
-rw-r--r--storage/innobase/fil/fil0fil.cc22
-rw-r--r--storage/innobase/handler/ha_innodb.cc2
-rw-r--r--storage/innobase/include/dict0dict.ic26
-rw-r--r--storage/innobase/include/dict0mem.h5
-rw-r--r--storage/innobase/include/fil0fil.h4
-rw-r--r--storage/innobase/row/row0import.cc2
-rw-r--r--storage/innobase/row/row0mysql.cc16
-rw-r--r--storage/xtradb/btr/btr0btr.cc3
-rw-r--r--storage/xtradb/dict/dict0load.cc4
-rw-r--r--storage/xtradb/fil/fil0fil.cc18
-rw-r--r--storage/xtradb/handler/ha_innodb.cc2
-rw-r--r--storage/xtradb/include/dict0dict.ic20
-rw-r--r--storage/xtradb/include/dict0mem.h4
-rw-r--r--storage/xtradb/include/fil0fil.h3
-rw-r--r--storage/xtradb/os/os0file.cc2
-rw-r--r--storage/xtradb/row/row0import.cc2
-rw-r--r--storage/xtradb/row/row0mysql.cc12
26 files changed, 812 insertions, 149 deletions
diff --git a/mysql-test/suite/encryption/r/innodb_lotoftables.result b/mysql-test/suite/encryption/r/innodb_lotoftables.result
index 06b832ea6fc..cf5724b527a 100644
--- a/mysql-test/suite/encryption/r/innodb_lotoftables.result
+++ b/mysql-test/suite/encryption/r/innodb_lotoftables.result
@@ -10,13 +10,13 @@ create database innodb_encrypted_1;
use innodb_encrypted_1;
show status like 'innodb_pages0_read%';
Variable_name Value
-Innodb_pages0_read 1
+Innodb_pages0_read 3
set autocommit=0;
set autocommit=1;
commit work;
show status like 'innodb_pages0_read%';
Variable_name Value
-Innodb_pages0_read 1
+Innodb_pages0_read 3
# should be 100
SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME LIKE 'innodb_encrypted%';
COUNT(*)
@@ -86,47 +86,47 @@ Innodb_pages0_read 3
# Restart Success!
show status like 'innodb_pages0_read%';
Variable_name Value
-Innodb_pages0_read 1
+Innodb_pages0_read 303
show status like 'innodb_pages0_read%';
Variable_name Value
-Innodb_pages0_read 1
+Innodb_pages0_read 303
use test;
show status like 'innodb_pages0_read%';
Variable_name Value
-Innodb_pages0_read 1
+Innodb_pages0_read 303
use innodb_encrypted_1;
show status like 'innodb_pages0_read%';
Variable_name Value
-Innodb_pages0_read 1
+Innodb_pages0_read 303
use innodb_encrypted_2;
show status like 'innodb_pages0_read%';
Variable_name Value
-Innodb_pages0_read 1
+Innodb_pages0_read 303
use innodb_encrypted_3;
show status like 'innodb_pages0_read%';
Variable_name Value
-Innodb_pages0_read 1
+Innodb_pages0_read 303
use innodb_encrypted_1;
show status like 'innodb_pages0_read%';
Variable_name Value
-Innodb_pages0_read 1
+Innodb_pages0_read 303
show status like 'innodb_pages0_read%';
Variable_name Value
-Innodb_pages0_read 101
+Innodb_pages0_read 303
use innodb_encrypted_2;
show status like 'innodb_pages0_read%';
Variable_name Value
-Innodb_pages0_read 101
+Innodb_pages0_read 303
show status like 'innodb_pages0_read%';
Variable_name Value
-Innodb_pages0_read 201
+Innodb_pages0_read 303
use innodb_encrypted_3;
show status like 'innodb_pages0_read%';
Variable_name Value
-Innodb_pages0_read 201
+Innodb_pages0_read 303
show status like 'innodb_pages0_read%';
Variable_name Value
-Innodb_pages0_read 301
+Innodb_pages0_read 303
SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%';
COUNT(*)
100
diff --git a/mysql-test/suite/innodb/r/table_flags,32k.rdiff b/mysql-test/suite/innodb/r/table_flags,32k.rdiff
new file mode 100644
index 00000000000..ea2d7048bb7
--- /dev/null
+++ b/mysql-test/suite/innodb/r/table_flags,32k.rdiff
@@ -0,0 +1,105 @@
+--- suite/innodb/r/table_flags.result
++++ suite/innodb/r/table_flags,32k.reject
+@@ -5,6 +5,8 @@
+ SET innodb_strict_mode=OFF;
+ CREATE TABLE tz(a INT PRIMARY KEY)ENGINE=InnoDB ROW_FORMAT=COMPRESSED
+ KEY_BLOCK_SIZE=1;
++Warnings:
++Warning 1478 InnoDB: Cannot create a COMPRESSED table when innodb_page_size > 16k. Assuming ROW_FORMAT=DYNAMIC.
+ SET innodb_strict_mode=ON;
+ CREATE TABLE tp(a INT PRIMARY KEY)ENGINE=InnoDB ROW_FORMAT=DYNAMIC
+ PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=9;
+@@ -13,7 +15,7 @@
+ header=0x01000003016e (NAME=0x696e66696d756d00)
+ header=0x00002815008d (NAME='SYS_DATAFILES',
+ DB_TRX_ID=0x000000000302,
+- DB_ROLL_PTR=0x81000001320194,
++ DB_ROLL_PTR=0x81000001310194,
+ ID=0x000000000000000e,
+ N_COLS=0x00000002,
+ TYPE=0x00000001,
+@@ -23,7 +25,7 @@
+ SPACE=0x00000000)
+ header=0x0000101500d5 (NAME='SYS_FOREIGN',
+ DB_TRX_ID=0x000000000300,
+- DB_ROLL_PTR=0x800000012d0110,
++ DB_ROLL_PTR=0x800000012c0110,
+ ID=0x000000000000000b,
+ N_COLS=0x00000004,
+ TYPE=0x00000001,
+@@ -33,7 +35,7 @@
+ SPACE=0x00000000)
+ header=0x000018150122 (NAME='SYS_FOREIGN_COLS',
+ DB_TRX_ID=0x000000000300,
+- DB_ROLL_PTR=0x800000012d0201,
++ DB_ROLL_PTR=0x800000012c0201,
+ ID=0x000000000000000c,
+ N_COLS=0x00000004,
+ TYPE=0x00000001,
+@@ -43,7 +45,7 @@
+ SPACE=0x00000000)
+ header=0x0400201501b8 (NAME='SYS_TABLESPACES',
+ DB_TRX_ID=0x000000000302,
+- DB_ROLL_PTR=0x81000001320110,
++ DB_ROLL_PTR=0x81000001310110,
+ ID=0x000000000000000d,
+ N_COLS=0x00000003,
+ TYPE=0x00000001,
+@@ -53,7 +55,7 @@
+ SPACE=0x00000000)
+ header=0x000030150244 (NAME='SYS_VIRTUAL',
+ DB_TRX_ID=0x000000000304,
+- DB_ROLL_PTR=0x82000001350110,
++ DB_ROLL_PTR=0x82000001340110,
+ ID=0x000000000000000f,
+ N_COLS=0x00000003,
+ TYPE=0x00000001,
+@@ -63,7 +65,7 @@
+ SPACE=0x00000000)
+ header=0x000040150288 (NAME='test/tc',
+ DB_TRX_ID=0x000000000308,
+- DB_ROLL_PTR=0x84000001380110,
++ DB_ROLL_PTR=0x84000001370110,
+ ID=0x0000000000000011,
+ N_COLS=0x80000001,
+ TYPE=0x00000001,
+@@ -73,7 +75,7 @@
+ SPACE=0x00000002)
+ header=0x000048150310 (NAME='test/td',
+ DB_TRX_ID=0x00000000030a,
+- DB_ROLL_PTR=0x85000001390110,
++ DB_ROLL_PTR=0x85000001380110,
+ ID=0x0000000000000012,
+ N_COLS=0x80000001,
+ TYPE=0x00000021,
+@@ -83,7 +85,7 @@
+ SPACE=0x00000003)
+ header=0x000058150200 (NAME='test/tp',
+ DB_TRX_ID=0x00000000030e,
+- DB_ROLL_PTR=0x870000013b0110,
++ DB_ROLL_PTR=0x870000013a0110,
+ ID=0x0000000000000014,
+ N_COLS=0x80000001,
+ TYPE=0x000009a1,
+@@ -93,7 +95,7 @@
+ SPACE=0x00000005)
+ header=0x0000381502cc (NAME='test/tr',
+ DB_TRX_ID=0x000000000306,
+- DB_ROLL_PTR=0x83000001370110,
++ DB_ROLL_PTR=0x83000001360110,
+ ID=0x0000000000000010,
+ N_COLS=0x00000001,
+ TYPE=0x00000001,
+@@ -103,10 +105,10 @@
+ SPACE=0x00000001)
+ header=0x000050150074 (NAME='test/tz',
+ DB_TRX_ID=0x00000000030c,
+- DB_ROLL_PTR=0x860000013a0110,
++ DB_ROLL_PTR=0x86000001390110,
+ ID=0x0000000000000013,
+ N_COLS=0x80000001,
+- TYPE=0x00000023,
++ TYPE=0x00000021,
+ MIX_ID=0x0000000000000000,
+ MIX_LEN=0x00000050,
+ CLUSTER_NAME=NULL(0 bytes),
diff --git a/mysql-test/suite/innodb/r/table_flags,4k.rdiff b/mysql-test/suite/innodb/r/table_flags,4k.rdiff
new file mode 100644
index 00000000000..0e469ee631b
--- /dev/null
+++ b/mysql-test/suite/innodb/r/table_flags,4k.rdiff
@@ -0,0 +1,92 @@
+--- suite/innodb/r/table_flags.result
++++ suite/innodb/r/table_flags,4k.reject
+@@ -13,7 +13,7 @@
+ header=0x01000003016e (NAME=0x696e66696d756d00)
+ header=0x00002815008d (NAME='SYS_DATAFILES',
+ DB_TRX_ID=0x000000000302,
+- DB_ROLL_PTR=0x81000001320194,
++ DB_ROLL_PTR=0x81000003260194,
+ ID=0x000000000000000e,
+ N_COLS=0x00000002,
+ TYPE=0x00000001,
+@@ -23,7 +23,7 @@
+ SPACE=0x00000000)
+ header=0x0000101500d5 (NAME='SYS_FOREIGN',
+ DB_TRX_ID=0x000000000300,
+- DB_ROLL_PTR=0x800000012d0110,
++ DB_ROLL_PTR=0x80000003200110,
+ ID=0x000000000000000b,
+ N_COLS=0x00000004,
+ TYPE=0x00000001,
+@@ -33,7 +33,7 @@
+ SPACE=0x00000000)
+ header=0x000018150122 (NAME='SYS_FOREIGN_COLS',
+ DB_TRX_ID=0x000000000300,
+- DB_ROLL_PTR=0x800000012d0201,
++ DB_ROLL_PTR=0x80000003200201,
+ ID=0x000000000000000c,
+ N_COLS=0x00000004,
+ TYPE=0x00000001,
+@@ -43,7 +43,7 @@
+ SPACE=0x00000000)
+ header=0x0400201501b8 (NAME='SYS_TABLESPACES',
+ DB_TRX_ID=0x000000000302,
+- DB_ROLL_PTR=0x81000001320110,
++ DB_ROLL_PTR=0x81000003260110,
+ ID=0x000000000000000d,
+ N_COLS=0x00000003,
+ TYPE=0x00000001,
+@@ -53,7 +53,7 @@
+ SPACE=0x00000000)
+ header=0x000030150244 (NAME='SYS_VIRTUAL',
+ DB_TRX_ID=0x000000000304,
+- DB_ROLL_PTR=0x82000001350110,
++ DB_ROLL_PTR=0x820000032a0110,
+ ID=0x000000000000000f,
+ N_COLS=0x00000003,
+ TYPE=0x00000001,
+@@ -63,7 +63,7 @@
+ SPACE=0x00000000)
+ header=0x000040150288 (NAME='test/tc',
+ DB_TRX_ID=0x000000000308,
+- DB_ROLL_PTR=0x84000001380110,
++ DB_ROLL_PTR=0x840000032d0110,
+ ID=0x0000000000000011,
+ N_COLS=0x80000001,
+ TYPE=0x00000001,
+@@ -73,7 +73,7 @@
+ SPACE=0x00000002)
+ header=0x000048150310 (NAME='test/td',
+ DB_TRX_ID=0x00000000030a,
+- DB_ROLL_PTR=0x85000001390110,
++ DB_ROLL_PTR=0x850000032f0110,
+ ID=0x0000000000000012,
+ N_COLS=0x80000001,
+ TYPE=0x00000021,
+@@ -83,7 +83,7 @@
+ SPACE=0x00000003)
+ header=0x000058150200 (NAME='test/tp',
+ DB_TRX_ID=0x00000000030e,
+- DB_ROLL_PTR=0x870000013b0110,
++ DB_ROLL_PTR=0x87000003310110,
+ ID=0x0000000000000014,
+ N_COLS=0x80000001,
+ TYPE=0x000009a1,
+@@ -93,7 +93,7 @@
+ SPACE=0x00000005)
+ header=0x0000381502cc (NAME='test/tr',
+ DB_TRX_ID=0x000000000306,
+- DB_ROLL_PTR=0x83000001370110,
++ DB_ROLL_PTR=0x830000032c0110,
+ ID=0x0000000000000010,
+ N_COLS=0x00000001,
+ TYPE=0x00000001,
+@@ -103,7 +103,7 @@
+ SPACE=0x00000001)
+ header=0x000050150074 (NAME='test/tz',
+ DB_TRX_ID=0x00000000030c,
+- DB_ROLL_PTR=0x860000013a0110,
++ DB_ROLL_PTR=0x86000003300110,
+ ID=0x0000000000000013,
+ N_COLS=0x80000001,
+ TYPE=0x00000023,
diff --git a/mysql-test/suite/innodb/r/table_flags,64k.rdiff b/mysql-test/suite/innodb/r/table_flags,64k.rdiff
new file mode 100644
index 00000000000..ce2d7faa925
--- /dev/null
+++ b/mysql-test/suite/innodb/r/table_flags,64k.rdiff
@@ -0,0 +1,105 @@
+--- suite/innodb/r/table_flags.result
++++ suite/innodb/r/table_flags,64k.reject
+@@ -5,6 +5,8 @@
+ SET innodb_strict_mode=OFF;
+ CREATE TABLE tz(a INT PRIMARY KEY)ENGINE=InnoDB ROW_FORMAT=COMPRESSED
+ KEY_BLOCK_SIZE=1;
++Warnings:
++Warning 1478 InnoDB: Cannot create a COMPRESSED table when innodb_page_size > 16k. Assuming ROW_FORMAT=DYNAMIC.
+ SET innodb_strict_mode=ON;
+ CREATE TABLE tp(a INT PRIMARY KEY)ENGINE=InnoDB ROW_FORMAT=DYNAMIC
+ PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=9;
+@@ -13,7 +15,7 @@
+ header=0x01000003016e (NAME=0x696e66696d756d00)
+ header=0x00002815008d (NAME='SYS_DATAFILES',
+ DB_TRX_ID=0x000000000302,
+- DB_ROLL_PTR=0x81000001320194,
++ DB_ROLL_PTR=0x81000001310194,
+ ID=0x000000000000000e,
+ N_COLS=0x00000002,
+ TYPE=0x00000001,
+@@ -23,7 +25,7 @@
+ SPACE=0x00000000)
+ header=0x0000101500d5 (NAME='SYS_FOREIGN',
+ DB_TRX_ID=0x000000000300,
+- DB_ROLL_PTR=0x800000012d0110,
++ DB_ROLL_PTR=0x800000012c0110,
+ ID=0x000000000000000b,
+ N_COLS=0x00000004,
+ TYPE=0x00000001,
+@@ -33,7 +35,7 @@
+ SPACE=0x00000000)
+ header=0x000018150122 (NAME='SYS_FOREIGN_COLS',
+ DB_TRX_ID=0x000000000300,
+- DB_ROLL_PTR=0x800000012d0201,
++ DB_ROLL_PTR=0x800000012c0201,
+ ID=0x000000000000000c,
+ N_COLS=0x00000004,
+ TYPE=0x00000001,
+@@ -43,7 +45,7 @@
+ SPACE=0x00000000)
+ header=0x0400201501b8 (NAME='SYS_TABLESPACES',
+ DB_TRX_ID=0x000000000302,
+- DB_ROLL_PTR=0x81000001320110,
++ DB_ROLL_PTR=0x81000001310110,
+ ID=0x000000000000000d,
+ N_COLS=0x00000003,
+ TYPE=0x00000001,
+@@ -53,7 +55,7 @@
+ SPACE=0x00000000)
+ header=0x000030150244 (NAME='SYS_VIRTUAL',
+ DB_TRX_ID=0x000000000304,
+- DB_ROLL_PTR=0x82000001350110,
++ DB_ROLL_PTR=0x82000001340110,
+ ID=0x000000000000000f,
+ N_COLS=0x00000003,
+ TYPE=0x00000001,
+@@ -63,7 +65,7 @@
+ SPACE=0x00000000)
+ header=0x000040150288 (NAME='test/tc',
+ DB_TRX_ID=0x000000000308,
+- DB_ROLL_PTR=0x84000001380110,
++ DB_ROLL_PTR=0x84000001370110,
+ ID=0x0000000000000011,
+ N_COLS=0x80000001,
+ TYPE=0x00000001,
+@@ -73,7 +75,7 @@
+ SPACE=0x00000002)
+ header=0x000048150310 (NAME='test/td',
+ DB_TRX_ID=0x00000000030a,
+- DB_ROLL_PTR=0x85000001390110,
++ DB_ROLL_PTR=0x85000001380110,
+ ID=0x0000000000000012,
+ N_COLS=0x80000001,
+ TYPE=0x00000021,
+@@ -83,7 +85,7 @@
+ SPACE=0x00000003)
+ header=0x000058150200 (NAME='test/tp',
+ DB_TRX_ID=0x00000000030e,
+- DB_ROLL_PTR=0x870000013b0110,
++ DB_ROLL_PTR=0x870000013a0110,
+ ID=0x0000000000000014,
+ N_COLS=0x80000001,
+ TYPE=0x000009a1,
+@@ -93,7 +95,7 @@
+ SPACE=0x00000005)
+ header=0x0000381502cc (NAME='test/tr',
+ DB_TRX_ID=0x000000000306,
+- DB_ROLL_PTR=0x83000001370110,
++ DB_ROLL_PTR=0x83000001360110,
+ ID=0x0000000000000010,
+ N_COLS=0x00000001,
+ TYPE=0x00000001,
+@@ -103,10 +105,10 @@
+ SPACE=0x00000001)
+ header=0x000050150074 (NAME='test/tz',
+ DB_TRX_ID=0x00000000030c,
+- DB_ROLL_PTR=0x860000013a0110,
++ DB_ROLL_PTR=0x86000001390110,
+ ID=0x0000000000000013,
+ N_COLS=0x80000001,
+- TYPE=0x00000023,
++ TYPE=0x00000021,
+ MIX_ID=0x0000000000000000,
+ MIX_LEN=0x00000050,
+ CLUSTER_NAME=NULL(0 bytes),
diff --git a/mysql-test/suite/innodb/r/table_flags,8k.rdiff b/mysql-test/suite/innodb/r/table_flags,8k.rdiff
new file mode 100644
index 00000000000..d5b5731b305
--- /dev/null
+++ b/mysql-test/suite/innodb/r/table_flags,8k.rdiff
@@ -0,0 +1,92 @@
+--- suite/innodb/r/table_flags.result
++++ suite/innodb/r/table_flags,8k.reject
+@@ -13,7 +13,7 @@
+ header=0x01000003016e (NAME=0x696e66696d756d00)
+ header=0x00002815008d (NAME='SYS_DATAFILES',
+ DB_TRX_ID=0x000000000302,
+- DB_ROLL_PTR=0x81000001320194,
++ DB_ROLL_PTR=0x81000001d70194,
+ ID=0x000000000000000e,
+ N_COLS=0x00000002,
+ TYPE=0x00000001,
+@@ -23,7 +23,7 @@
+ SPACE=0x00000000)
+ header=0x0000101500d5 (NAME='SYS_FOREIGN',
+ DB_TRX_ID=0x000000000300,
+- DB_ROLL_PTR=0x800000012d0110,
++ DB_ROLL_PTR=0x80000001d10110,
+ ID=0x000000000000000b,
+ N_COLS=0x00000004,
+ TYPE=0x00000001,
+@@ -33,7 +33,7 @@
+ SPACE=0x00000000)
+ header=0x000018150122 (NAME='SYS_FOREIGN_COLS',
+ DB_TRX_ID=0x000000000300,
+- DB_ROLL_PTR=0x800000012d0201,
++ DB_ROLL_PTR=0x80000001d10201,
+ ID=0x000000000000000c,
+ N_COLS=0x00000004,
+ TYPE=0x00000001,
+@@ -43,7 +43,7 @@
+ SPACE=0x00000000)
+ header=0x0400201501b8 (NAME='SYS_TABLESPACES',
+ DB_TRX_ID=0x000000000302,
+- DB_ROLL_PTR=0x81000001320110,
++ DB_ROLL_PTR=0x81000001d70110,
+ ID=0x000000000000000d,
+ N_COLS=0x00000003,
+ TYPE=0x00000001,
+@@ -53,7 +53,7 @@
+ SPACE=0x00000000)
+ header=0x000030150244 (NAME='SYS_VIRTUAL',
+ DB_TRX_ID=0x000000000304,
+- DB_ROLL_PTR=0x82000001350110,
++ DB_ROLL_PTR=0x82000001da0110,
+ ID=0x000000000000000f,
+ N_COLS=0x00000003,
+ TYPE=0x00000001,
+@@ -63,7 +63,7 @@
+ SPACE=0x00000000)
+ header=0x000040150288 (NAME='test/tc',
+ DB_TRX_ID=0x000000000308,
+- DB_ROLL_PTR=0x84000001380110,
++ DB_ROLL_PTR=0x84000001dd0110,
+ ID=0x0000000000000011,
+ N_COLS=0x80000001,
+ TYPE=0x00000001,
+@@ -73,7 +73,7 @@
+ SPACE=0x00000002)
+ header=0x000048150310 (NAME='test/td',
+ DB_TRX_ID=0x00000000030a,
+- DB_ROLL_PTR=0x85000001390110,
++ DB_ROLL_PTR=0x85000001de0110,
+ ID=0x0000000000000012,
+ N_COLS=0x80000001,
+ TYPE=0x00000021,
+@@ -83,7 +83,7 @@
+ SPACE=0x00000003)
+ header=0x000058150200 (NAME='test/tp',
+ DB_TRX_ID=0x00000000030e,
+- DB_ROLL_PTR=0x870000013b0110,
++ DB_ROLL_PTR=0x87000001e00110,
+ ID=0x0000000000000014,
+ N_COLS=0x80000001,
+ TYPE=0x000009a1,
+@@ -93,7 +93,7 @@
+ SPACE=0x00000005)
+ header=0x0000381502cc (NAME='test/tr',
+ DB_TRX_ID=0x000000000306,
+- DB_ROLL_PTR=0x83000001370110,
++ DB_ROLL_PTR=0x83000001dc0110,
+ ID=0x0000000000000010,
+ N_COLS=0x00000001,
+ TYPE=0x00000001,
+@@ -103,7 +103,7 @@
+ SPACE=0x00000001)
+ header=0x000050150074 (NAME='test/tz',
+ DB_TRX_ID=0x00000000030c,
+- DB_ROLL_PTR=0x860000013a0110,
++ DB_ROLL_PTR=0x86000001df0110,
+ ID=0x0000000000000013,
+ N_COLS=0x80000001,
+ TYPE=0x00000023,
diff --git a/mysql-test/suite/innodb/r/table_flags.result b/mysql-test/suite/innodb/r/table_flags.result
new file mode 100644
index 00000000000..5cf163ba4ae
--- /dev/null
+++ b/mysql-test/suite/innodb/r/table_flags.result
@@ -0,0 +1,181 @@
+SET GLOBAL innodb_file_per_table=1;
+CREATE TABLE tr(a INT PRIMARY KEY)ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
+CREATE TABLE tc(a INT PRIMARY KEY)ENGINE=InnoDB ROW_FORMAT=COMPACT;
+CREATE TABLE td(a INT PRIMARY KEY)ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
+SET innodb_strict_mode=OFF;
+CREATE TABLE tz(a INT PRIMARY KEY)ENGINE=InnoDB ROW_FORMAT=COMPRESSED
+KEY_BLOCK_SIZE=1;
+SET innodb_strict_mode=ON;
+CREATE TABLE tp(a INT PRIMARY KEY)ENGINE=InnoDB ROW_FORMAT=DYNAMIC
+PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=9;
+SYS_TABLES clustered index root page (8):
+N_RECS=10; LEVEL=0; INDEX_ID=0x0000000000000001
+header=0x01000003016e (NAME=0x696e66696d756d00)
+header=0x00002815008d (NAME='SYS_DATAFILES',
+ DB_TRX_ID=0x000000000302,
+ DB_ROLL_PTR=0x81000001320194,
+ ID=0x000000000000000e,
+ N_COLS=0x00000002,
+ TYPE=0x00000001,
+ MIX_ID=0x0000000000000000,
+ MIX_LEN=0x00000040,
+ CLUSTER_NAME=NULL(0 bytes),
+ SPACE=0x00000000)
+header=0x0000101500d5 (NAME='SYS_FOREIGN',
+ DB_TRX_ID=0x000000000300,
+ DB_ROLL_PTR=0x800000012d0110,
+ ID=0x000000000000000b,
+ N_COLS=0x00000004,
+ TYPE=0x00000001,
+ MIX_ID=0x0000000000000000,
+ MIX_LEN=0x00000040,
+ CLUSTER_NAME=NULL(0 bytes),
+ SPACE=0x00000000)
+header=0x000018150122 (NAME='SYS_FOREIGN_COLS',
+ DB_TRX_ID=0x000000000300,
+ DB_ROLL_PTR=0x800000012d0201,
+ ID=0x000000000000000c,
+ N_COLS=0x00000004,
+ TYPE=0x00000001,
+ MIX_ID=0x0000000000000000,
+ MIX_LEN=0x00000040,
+ CLUSTER_NAME=NULL(0 bytes),
+ SPACE=0x00000000)
+header=0x0400201501b8 (NAME='SYS_TABLESPACES',
+ DB_TRX_ID=0x000000000302,
+ DB_ROLL_PTR=0x81000001320110,
+ ID=0x000000000000000d,
+ N_COLS=0x00000003,
+ TYPE=0x00000001,
+ MIX_ID=0x0000000000000000,
+ MIX_LEN=0x00000040,
+ CLUSTER_NAME=NULL(0 bytes),
+ SPACE=0x00000000)
+header=0x000030150244 (NAME='SYS_VIRTUAL',
+ DB_TRX_ID=0x000000000304,
+ DB_ROLL_PTR=0x82000001350110,
+ ID=0x000000000000000f,
+ N_COLS=0x00000003,
+ TYPE=0x00000001,
+ MIX_ID=0x0000000000000000,
+ MIX_LEN=0x00000040,
+ CLUSTER_NAME=NULL(0 bytes),
+ SPACE=0x00000000)
+header=0x000040150288 (NAME='test/tc',
+ DB_TRX_ID=0x000000000308,
+ DB_ROLL_PTR=0x84000001380110,
+ ID=0x0000000000000011,
+ N_COLS=0x80000001,
+ TYPE=0x00000001,
+ MIX_ID=0x0000000000000000,
+ MIX_LEN=0x00000050,
+ CLUSTER_NAME=NULL(0 bytes),
+ SPACE=0x00000002)
+header=0x000048150310 (NAME='test/td',
+ DB_TRX_ID=0x00000000030a,
+ DB_ROLL_PTR=0x85000001390110,
+ ID=0x0000000000000012,
+ N_COLS=0x80000001,
+ TYPE=0x00000021,
+ MIX_ID=0x0000000000000000,
+ MIX_LEN=0x00000050,
+ CLUSTER_NAME=NULL(0 bytes),
+ SPACE=0x00000003)
+header=0x000058150200 (NAME='test/tp',
+ DB_TRX_ID=0x00000000030e,
+ DB_ROLL_PTR=0x870000013b0110,
+ ID=0x0000000000000014,
+ N_COLS=0x80000001,
+ TYPE=0x000009a1,
+ MIX_ID=0x0000000000000000,
+ MIX_LEN=0x00000050,
+ CLUSTER_NAME=NULL(0 bytes),
+ SPACE=0x00000005)
+header=0x0000381502cc (NAME='test/tr',
+ DB_TRX_ID=0x000000000306,
+ DB_ROLL_PTR=0x83000001370110,
+ ID=0x0000000000000010,
+ N_COLS=0x00000001,
+ TYPE=0x00000001,
+ MIX_ID=0x0000000000000000,
+ MIX_LEN=0x00000050,
+ CLUSTER_NAME=NULL(0 bytes),
+ SPACE=0x00000001)
+header=0x000050150074 (NAME='test/tz',
+ DB_TRX_ID=0x00000000030c,
+ DB_ROLL_PTR=0x860000013a0110,
+ ID=0x0000000000000013,
+ N_COLS=0x80000001,
+ TYPE=0x00000023,
+ MIX_ID=0x0000000000000000,
+ MIX_LEN=0x00000050,
+ CLUSTER_NAME=NULL(0 bytes),
+ SPACE=0x00000004)
+header=0x070008030000 (NAME=0x73757072656d756d00)
+SHOW CREATE TABLE tr;
+ERROR 42S02: Table 'test.tr' doesn't exist in engine
+SHOW CREATE TABLE tc;
+ERROR 42S02: Table 'test.tc' doesn't exist in engine
+SHOW CREATE TABLE td;
+ERROR 42S02: Table 'test.td' doesn't exist in engine
+SHOW CREATE TABLE tz;
+ERROR 42S02: Table 'test.tz' doesn't exist in engine
+SHOW CREATE TABLE tp;
+ERROR 42S02: Table 'test.tp' doesn't exist in engine
+FOUND 6 /InnoDB: Table `test`.`t[czp]` in InnoDB data dictionary contains invalid flags\. SYS_TABLES\.TYPE=(129|289|3873|1232[13]) SYS_TABLES\.N_COLS=2147483649/ in mysqld.1.err
+FOUND 2 /InnoDB: Refusing to load '\..test.td\.ibd' \(id=3, flags=0x1?[2ae]1\); dictionary contains id=3, flags=0x10[01][2ae]1\b/ in mysqld.1.err
+FOUND 2 /InnoDB: Table `test`\.`tr` in InnoDB data dictionary contains invalid flags\. SYS_TABLES\.TYPE=65 SYS_TABLES\.MIX_LEN=4294967295\b/ in mysqld.1.err
+Restoring SYS_TABLES clustered index root page (8)
+SHOW CREATE TABLE tr;
+Table Create Table
+tr CREATE TABLE `tr` (
+ `a` int(11) NOT NULL,
+ PRIMARY KEY (`a`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT
+SHOW CREATE TABLE tc;
+Table Create Table
+tc CREATE TABLE `tc` (
+ `a` int(11) NOT NULL,
+ PRIMARY KEY (`a`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT
+SHOW CREATE TABLE td;
+Table Create Table
+td CREATE TABLE `td` (
+ `a` int(11) NOT NULL,
+ PRIMARY KEY (`a`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC
+SHOW CREATE TABLE tz;
+Table Create Table
+tz CREATE TABLE `tz` (
+ `a` int(11) NOT NULL,
+ PRIMARY KEY (`a`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1
+SHOW CREATE TABLE tp;
+Table Create Table
+tp CREATE TABLE `tp` (
+ `a` int(11) NOT NULL,
+ PRIMARY KEY (`a`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=9
+BEGIN;
+INSERT INTO tr VALUES(1);
+INSERT INTO tc VALUES(1);
+INSERT INTO td VALUES(1);
+INSERT INTO tz VALUES(1);
+INSERT INTO tp VALUES(1);
+ROLLBACK;
+SELECT * FROM tr;
+a
+SELECT * FROM tc;
+a
+SELECT * FROM td;
+a
+SELECT * FROM tz;
+a
+SELECT * FROM tp;
+a
+DROP TABLE tr,tc,td,tz,tp;
+ib_buffer_pool
+ib_logfile0
+ib_logfile1
+ibdata1
+sys_tables.bin
diff --git a/mysql-test/suite/innodb/t/table_flags.test b/mysql-test/suite/innodb/t/table_flags.test
new file mode 100644
index 00000000000..d3dafa22318
--- /dev/null
+++ b/mysql-test/suite/innodb/t/table_flags.test
@@ -0,0 +1,199 @@
+--source include/innodb_page_size.inc
+# Embedded server tests do not support restarting
+--source include/not_embedded.inc
+
+--disable_query_log
+call mtr.add_suppression("InnoDB: Table `mysql`\\.`innodb_table_stats` not found");
+call mtr.add_suppression("InnoDB: incorrect flags in SYS_TABLES");
+call mtr.add_suppression("InnoDB: Table `test`.`t[czp]` in InnoDB data dictionary contains invalid flags\\. SYS_TABLES\\.TYPE=(129|289|3873|1232[31]) SYS_TABLES\\.N_COLS=2147483649\\r?$");
+call mtr.add_suppression("InnoDB: Table `test`\\.`tr` in InnoDB data dictionary contains invalid flags\\. SYS_TABLES\\.TYPE=65 SYS_TABLES\\.MIX_LEN=4294967295\\r?$");
+call mtr.add_suppression("InnoDB: Refusing to load '\\..test.td\\.ibd' \\(id=3, flags=0x([2e]1)\\); dictionary contains id=3, flags=0x100\\1\\r?$");
+call mtr.add_suppression("InnoDB: Refusing to load '\\..test.td\\.ibd' \\(id=3, flags=0x(1[2ae]1)\\); dictionary contains id=3, flags=0x10\\1\\r?$");
+call mtr.add_suppression("InnoDB: Ignoring tablespace for `test`.`td` because it could not be opened\\.");
+# FIXME: Remove the following spam due to invalid flags for test.td
+call mtr.add_suppression("InnoDB: Operating system error number .* in a file operation");
+call mtr.add_suppression("InnoDB: The error means the system cannot find the path specified");
+call mtr.add_suppression("InnoDB: If you are installing InnoDB, remember that you must create directories yourself");
+FLUSH TABLES;
+--enable_query_log
+
+let INNODB_PAGE_SIZE=`select @@innodb_page_size`;
+let MYSQLD_DATADIR=`select @@datadir`;
+
+let bugdir= $MYSQLTEST_VARDIR/tmp/table_flags;
+--mkdir $bugdir
+--let SEARCH_FILE = $MYSQLTEST_VARDIR/log/mysqld.1.err
+
+--let $d=--innodb-data-home-dir=$bugdir --innodb-log-group-home-dir=$bugdir
+--let $d=$d --innodb-data-file-path=ibdata1:1M:autoextend
+--let $d=$d --innodb-undo-tablespaces=0
+--let $restart_parameters=$d --innodb-stats-persistent=0 --innodb-file-format=1
+--source include/restart_mysqld.inc
+
+SET GLOBAL innodb_file_per_table=1;
+CREATE TABLE tr(a INT PRIMARY KEY)ENGINE=InnoDB ROW_FORMAT=REDUNDANT;
+CREATE TABLE tc(a INT PRIMARY KEY)ENGINE=InnoDB ROW_FORMAT=COMPACT;
+CREATE TABLE td(a INT PRIMARY KEY)ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
+SET innodb_strict_mode=OFF;
+CREATE TABLE tz(a INT PRIMARY KEY)ENGINE=InnoDB ROW_FORMAT=COMPRESSED
+KEY_BLOCK_SIZE=1;
+SET innodb_strict_mode=ON;
+# PAGE_COMPRESSED is supported starting with MariaDB 10.1.0
+CREATE TABLE tp(a INT PRIMARY KEY)ENGINE=InnoDB ROW_FORMAT=DYNAMIC
+PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=9;
+
+--source include/shutdown_mysqld.inc
+--perl
+use strict;
+my $ps= $ENV{INNODB_PAGE_SIZE};
+my $file= "$ENV{bugdir}/ibdata1";
+open(FILE, "+<", $file) || die "Unable to open $file\n";
+# Read DICT_HDR_TABLES, the root page number of CLUST_IND (SYS_TABLES.NAME).
+sysseek(FILE, 7*$ps+38+32, 0) || die "Unable to seek $file";
+die "Unable to read $file" unless sysread(FILE, $_, 4) == 4;
+my $sys_tables_root = unpack("N", $_);
+my $page;
+print "SYS_TABLES clustered index root page ($sys_tables_root):\n";
+sysseek(FILE, $sys_tables_root*$ps, 0) || die "Unable to seek $file";
+die "Unable to read $file" unless sysread(FILE, $page, $ps) == $ps;
+open(BACKUP, ">$ENV{bugdir}/sys_tables.bin") || die "Unable to open backup\n";
+syswrite(BACKUP, $page, $ps)==$ps || die "Unable to write backup\n";
+close(BACKUP) || die "Unable to close backup\n";
+print "N_RECS=", unpack("n", substr($page,38+16,2));
+print "; LEVEL=", unpack("n", substr($page,38+26,2));
+print "; INDEX_ID=0x", unpack("H*", substr($page,38+28,8)), "\n";
+my @fields=("NAME","DB_TRX_ID","DB_ROLL_PTR",
+ "ID","N_COLS","TYPE","MIX_ID","MIX_LEN","CLUSTER_NAME","SPACE");
+for (my $offset= 0x65; $offset;
+ $offset= unpack("n", substr($page,$offset-2,2)))
+{
+ print "header=0x", unpack("H*",substr($page,$offset-6,6)), " (";
+ my $n_fields= unpack("n", substr($page,$offset-4,2)) >> 1 & 0x3ff;
+ my $start= 0;
+ my $name;
+ for (my $i= 0; $i < $n_fields; $i++) {
+ my $end= unpack("C", substr($page, $offset-7-$i, 1));
+ print ",\n " if $i;
+ print "$fields[$i]=";
+ if ($end & 0x80) {
+ print "NULL(", ($end & 0x7f) - $start, " bytes)"
+ } elsif ($n_fields > 1 && $i == 0) {
+ $name= substr($page,$offset+$start,$end-$start);
+ print "'$name'"
+ } else {
+ print "0x", unpack("H*", substr($page,$offset+$start,$end-$start))
+ }
+ # Corrupt SYS_TABLES.TYPE
+ if ($i == 5)
+ {
+ my $flags= 0;
+ if ($name eq 'test/tr') {
+ $flags= 0x40 # DATA_DIR (largely ignored by 10.1+)
+ } elsif ($name eq 'test/tc') {
+ $flags= 0x80 # 10.1 PAGE_COMPRESSED
+ } elsif ($name eq 'test/td') {
+ $flags= 0xf00 # PAGE_COMPRESSION_LEVEL=15 (0..9 is valid)
+ # As part of the MDEV-12873 fix, because the
+ # PAGE_COMPRESSED=YES flag was not set, we will assume that
+ # this table was actually created with 10.2.2..10.2.6
+ # using PAGE_COMPRESSED=YES PAGE_COMPRESSION_LEVEL=7.
+ } elsif ($name eq 'test/tz') {
+ $flags= 0x3000 # 10.1 ATOMIC_WRITES=3 (0..2 is valid)
+ } elsif ($name eq 'test/tp') {
+ $flags= 0x880 # 10.1 PAGE_COMPRESSED, PAGE_COMPRESSION_LEVEL=8
+ # (in 10.2.2 through 10.2.6, this is interpreted as
+ # PAGE_COMPRESSION_LEVEL=4 without PAGE_COMPRESSED
+ # but with SHARED_SPACE, which should be invalid)
+ }
+
+ substr($page,$offset+$start,$end-$start)= pack(
+ "N", $flags ^
+ unpack("N", substr($page,$offset+$start,$end-$start)))
+ if $flags;
+ }
+ # Corrupt SYS_TABLES.MIX_LEN (ignored for ROW_FORMAT=REDUNDANT)
+ if ($i == 7 && $name eq 'test/tr')
+ {
+ substr($page,$offset+$start,$end-$start)= chr(255) x 4;
+ }
+ $start= $end & 0x7f;
+ }
+ print ")\n";
+}
+substr($page,0,4)=pack("N",0xdeadbeef);
+substr($page,$ps-8,4)=pack("N",0xdeadbeef);
+sysseek(FILE, $sys_tables_root*$ps, 0) || die "Unable to seek $file";
+syswrite(FILE, $page, $ps)==$ps || die "Unable to write $file\n";
+close(FILE) || die "Unable to close $file\n";
+EOF
+--source include/start_mysqld.inc
+
+--error ER_NO_SUCH_TABLE_IN_ENGINE
+SHOW CREATE TABLE tr;
+--error ER_NO_SUCH_TABLE_IN_ENGINE
+SHOW CREATE TABLE tc;
+--error ER_NO_SUCH_TABLE_IN_ENGINE
+SHOW CREATE TABLE td;
+--error ER_NO_SUCH_TABLE_IN_ENGINE
+SHOW CREATE TABLE tz;
+--error ER_NO_SUCH_TABLE_IN_ENGINE
+SHOW CREATE TABLE tp;
+
+--source include/shutdown_mysqld.inc
+
+let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err;
+--let SEARCH_PATTERN= InnoDB: Table `test`.`t[czp]` in InnoDB data dictionary contains invalid flags\. SYS_TABLES\.TYPE=(129|289|3873|1232[13]) SYS_TABLES\.N_COLS=2147483649
+--source include/search_pattern_in_file.inc
+--let SEARCH_PATTERN= InnoDB: Refusing to load '\..test.td\.ibd' \(id=3, flags=0x1?[2ae]1\); dictionary contains id=3, flags=0x10[01][2ae]1\b
+--source include/search_pattern_in_file.inc
+--let SEARCH_PATTERN= InnoDB: Table `test`\.`tr` in InnoDB data dictionary contains invalid flags\. SYS_TABLES\.TYPE=65 SYS_TABLES\.MIX_LEN=4294967295\b
+--source include/search_pattern_in_file.inc
+
+# Restore the backup of the corrupted SYS_TABLES clustered index root page
+--perl
+use strict;
+my $ps= $ENV{INNODB_PAGE_SIZE};
+my $file= "$ENV{bugdir}/ibdata1";
+open(FILE, "+<", $file) || die "Unable to open $file\n";
+open(BACKUP, "<$ENV{bugdir}/sys_tables.bin") || die "Unable to open backup\n";
+# Read DICT_HDR_TABLES, the root page number of CLUST_IND (SYS_TABLES.NAME).
+sysseek(FILE, 7*$ps+38+32, 0) || die "Unable to seek $file";
+die "Unable to read $file\n" unless sysread(FILE, $_, 4) == 4;
+my $sys_tables_root = unpack("N", $_);
+print "Restoring SYS_TABLES clustered index root page ($sys_tables_root)\n";
+sysseek(FILE, $sys_tables_root*$ps, 0) || die "Unable to seek $file";
+die "Unable to read backup\n" unless sysread(BACKUP, $_, $ps) == $ps;
+die "Unable to restore backup\n" unless syswrite(FILE, $_, $ps) == $ps;
+close(BACKUP);
+close(FILE) || die "Unable to close $file\n";
+EOF
+--source include/start_mysqld.inc
+
+SHOW CREATE TABLE tr;
+SHOW CREATE TABLE tc;
+SHOW CREATE TABLE td;
+SHOW CREATE TABLE tz;
+SHOW CREATE TABLE tp;
+
+BEGIN;
+INSERT INTO tr VALUES(1);
+INSERT INTO tc VALUES(1);
+INSERT INTO td VALUES(1);
+INSERT INTO tz VALUES(1);
+INSERT INTO tp VALUES(1);
+ROLLBACK;
+
+SELECT * FROM tr;
+SELECT * FROM tc;
+SELECT * FROM td;
+SELECT * FROM tz;
+SELECT * FROM tp;
+
+DROP TABLE tr,tc,td,tz,tp;
+
+--let $restart_parameters=
+--source include/restart_mysqld.inc
+
+--list_files $bugdir
+--remove_files_wildcard $bugdir
+--rmdir $bugdir
diff --git a/storage/innobase/btr/btr0btr.cc b/storage/innobase/btr/btr0btr.cc
index d0fcd68c677..89ebe5b8783 100644
--- a/storage/innobase/btr/btr0btr.cc
+++ b/storage/innobase/btr/btr0btr.cc
@@ -171,7 +171,8 @@ btr_root_block_get(
if (index && index->table) {
index->table->file_unreadable = true;
- ib_push_warning(index->table->thd, DB_DECRYPTION_FAILED,
+ ib_push_warning(
+ static_cast<THD*>(NULL), DB_DECRYPTION_FAILED,
"Table %s in tablespace %lu is encrypted but encryption service or"
" used key_id is not available. "
" Can't continue reading table.",
diff --git a/storage/innobase/dict/dict0load.cc b/storage/innobase/dict/dict0load.cc
index 5c8449512e6..7572e7a00f5 100644
--- a/storage/innobase/dict/dict0load.cc
+++ b/storage/innobase/dict/dict0load.cc
@@ -1387,7 +1387,7 @@ dict_check_sys_tables(
look to see if it is already in the tablespace cache. */
if (fil_space_for_table_exists_in_mem(
space_id, table_name.m_name,
- false, true, NULL, 0, NULL, flags)) {
+ false, true, NULL, 0, flags)) {
/* Recovery can open a datafile that does not
match SYS_DATAFILES. If they don't match, update
SYS_DATAFILES. */
@@ -1419,8 +1419,7 @@ dict_check_sys_tables(
FIL_TYPE_TABLESPACE,
space_id, dict_tf_to_fsp_flags(flags),
table_name.m_name,
- filepath,
- NULL);
+ filepath);
if (err != DB_SUCCESS) {
ib::warn() << "Ignoring tablespace for "
@@ -2797,7 +2796,7 @@ dict_load_tablespace(
/* The tablespace may already be open. */
if (fil_space_for_table_exists_in_mem(
table->space, space_name, false,
- true, heap, table->id, table, table->flags)) {
+ true, heap, table->id, table->flags)) {
return;
}
@@ -2829,7 +2828,7 @@ dict_load_tablespace(
dberr_t err = fil_ibd_open(
true, false, FIL_TYPE_TABLESPACE, table->space,
dict_tf_to_fsp_flags(table->flags),
- space_name, filepath, table);
+ space_name, filepath);
if (err != DB_SUCCESS) {
/* We failed to find a sensible tablespace file */
diff --git a/storage/innobase/fil/fil0fil.cc b/storage/innobase/fil/fil0fil.cc
index cc03524dbbc..4ce1e7755e3 100644
--- a/storage/innobase/fil/fil0fil.cc
+++ b/storage/innobase/fil/fil0fil.cc
@@ -4065,8 +4065,7 @@ fil_ibd_open(
ulint id,
ulint flags,
const char* space_name,
- const char* path_in,
- dict_table_t* table)
+ const char* path_in)
{
dberr_t err = DB_SUCCESS;
bool dict_filepath_same_as_default = false;
@@ -4111,10 +4110,6 @@ fil_ibd_open(
validate = true;
++tablespaces_found;
link_file_found = true;
- if (table) {
- table->crypt_data = df_remote.get_crypt_info();
- table->page_0_read = true;
- }
} else if (df_remote.filepath() != NULL) {
/* An ISL file was found but contained a bad filepath in it.
Better validate anything we do find. */
@@ -4133,11 +4128,6 @@ fil_ibd_open(
if (df_dict.open_read_only(true) == DB_SUCCESS) {
ut_ad(df_dict.is_open());
++tablespaces_found;
-
- if (table) {
- table->crypt_data = df_dict.get_crypt_info();
- table->page_0_read = true;
- }
}
}
}
@@ -4149,10 +4139,6 @@ fil_ibd_open(
if (df_default.open_read_only(strict) == DB_SUCCESS) {
ut_ad(df_default.is_open());
++tablespaces_found;
- if (table) {
- table->crypt_data = df_default.get_crypt_info();
- table->page_0_read = true;
- }
}
/* Check if multiple locations point to the same file. */
@@ -4789,7 +4775,6 @@ error log if a matching tablespace is not found from memory.
@param[in] adjust_space Whether to adjust space id on mismatch
@param[in] heap Heap memory
@param[in] table_id table id
-@param[in] table table
@param[in] table_flags table flags
@return true if a matching tablespace exists in the memory cache */
bool
@@ -4800,7 +4785,6 @@ fil_space_for_table_exists_in_mem(
bool adjust_space,
mem_heap_t* heap,
table_id_t table_id,
- dict_table_t* table,
ulint table_flags)
{
fil_space_t* fnamespace;
@@ -4821,10 +4805,6 @@ fil_space_for_table_exists_in_mem(
bool valid = space && !((space->flags ^ expected_flags)
& ~FSP_FLAGS_MEM_MASK);
- if (valid && table && !table->crypt_data) {
- table->crypt_data = space->crypt_data;
- }
-
if (!space) {
} else if (!valid || space == fnamespace) {
/* Found with the same file name, or got a flag mismatch. */
diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
index 670e170e9cc..902e55fc02f 100644
--- a/storage/innobase/handler/ha_innodb.cc
+++ b/storage/innobase/handler/ha_innodb.cc
@@ -6632,8 +6632,6 @@ ha_innobase::open(
innobase_copy_frm_flags_from_table_share(ib_table, table->s);
- ib_table->thd = (void*)thd;
-
/* No point to init any statistics if tablespace is still encrypted. */
if (ib_table->is_readable()) {
dict_stats_init(ib_table);
diff --git a/storage/innobase/include/dict0dict.ic b/storage/innobase/include/dict0dict.ic
index deb48d0cd31..1200b62f92f 100644
--- a/storage/innobase/include/dict0dict.ic
+++ b/storage/innobase/include/dict0dict.ic
@@ -747,17 +747,12 @@ dict_sys_tables_type_validate(
if (redundant) {
if (zip_ssize || atomic_blobs) {
- ib::error()
- << "SYS_TABLES::TYPE=Redundant, zip_ssize:" << zip_ssize
- << " atomic_blobs:" << atomic_blobs;
return(ULINT_UNDEFINED);
}
}
/* Make sure there are no bits that we do not know about. */
if (unused) {
- ib::error()
- << "SYS_TABLES::TYPE=" << type << " unused:" << unused;
return(ULINT_UNDEFINED);
}
@@ -769,13 +764,8 @@ dict_sys_tables_type_validate(
The DICT_N_COLS_COMPACT flag should be in N_COLS,
but we already know that. */
-
} else if (zip_ssize) {
/* Antelope does not support COMPRESSED format. */
- ib::error()
- << "SYS_TABLES::TYPE=" << type
- << ", zip_ssize:" << zip_ssize;
-
return(ULINT_UNDEFINED);
}
@@ -785,17 +775,11 @@ dict_sys_tables_type_validate(
should be in N_COLS, but we already know about the
low_order_bit and DICT_N_COLS_COMPACT flags. */
if (!atomic_blobs) {
- ib::error() << "SYS_TABLES::TYPE=" << type
- << ", zip_ssize:" << zip_ssize
- << ", atomic_blobs:" << atomic_blobs;
return(ULINT_UNDEFINED);
}
/* Validate that the number is within allowed range. */
if (zip_ssize > PAGE_ZIP_SSIZE_MAX) {
- ib::error() << "SYS_TABLES::TYPE=" << type
- << ", zip_ssize:" << zip_ssize
- << " > " << PAGE_ZIP_SSIZE_MAX;
return(ULINT_UNDEFINED);
}
}
@@ -812,15 +796,15 @@ dict_sys_tables_type_validate(
low_order_bit and DICT_N_COLS_COMPACT flags. */
if (!atomic_blobs || !page_compression) {
- ib::error() << "SYS_TABLES::TYPE=" << type
- << " page_compression:" << page_compression
- << " page_compression_level:" << page_compression_level
- << " atomic_blobs:" << atomic_blobs;
-
return(ULINT_UNDEFINED);
}
}
+ /* Validate that the atomic writes number is within allowed range. */
+ if (DICT_TF_GET_ATOMIC_WRITES(type) == 3) {
+ return(ULINT_UNDEFINED);
+ }
+
/* Return the validated SYS_TABLES.TYPE. */
return(type);
}
diff --git a/storage/innobase/include/dict0mem.h b/storage/innobase/include/dict0mem.h
index eb2b7b9d785..c4f5ab8a15c 100644
--- a/storage/innobase/include/dict0mem.h
+++ b/storage/innobase/include/dict0mem.h
@@ -1311,11 +1311,6 @@ struct dict_table_t {
/** Acquire the table handle. */
inline void acquire();
- void* thd; /*!< thd */
- bool page_0_read; /*!< true if page 0 has
- been already read */
- fil_space_crypt_t *crypt_data; /*!< crypt data if present */
-
/** Release the table handle. */
inline void release();
diff --git a/storage/innobase/include/fil0fil.h b/storage/innobase/include/fil0fil.h
index 7d9327c598b..8b87a5a2c90 100644
--- a/storage/innobase/include/fil0fil.h
+++ b/storage/innobase/include/fil0fil.h
@@ -1106,8 +1106,7 @@ fil_ibd_open(
ulint id,
ulint flags,
const char* tablename,
- const char* path_in,
- dict_table_t* table) /*!< in: table */
+ const char* path_in)
MY_ATTRIBUTE((warn_unused_result));
enum fil_load_status {
@@ -1169,7 +1168,6 @@ fil_space_for_table_exists_in_mem(
when find table space mismatch */
mem_heap_t* heap, /*!< in: heap memory */
table_id_t table_id, /*!< in: table id */
- dict_table_t* table, /*!< in: table or NULL */
ulint table_flags); /*!< in: table flags */
/** Try to extend a tablespace if it is smaller than the specified size.
diff --git a/storage/innobase/row/row0import.cc b/storage/innobase/row/row0import.cc
index 9bbe6968de1..b2ac33a209b 100644
--- a/storage/innobase/row/row0import.cc
+++ b/storage/innobase/row/row0import.cc
@@ -3554,7 +3554,7 @@ row_import_for_mysql(
err = fil_ibd_open(
true, true, FIL_TYPE_IMPORT, table->space,
- fsp_flags, table->name.m_name, filepath, table);
+ fsp_flags, table->name.m_name, filepath);
DBUG_EXECUTE_IF("ib_import_open_tablespace_failure",
err = DB_TABLESPACE_NOT_FOUND;);
diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc
index 4230020d12b..4751109292f 100644
--- a/storage/innobase/row/row0mysql.cc
+++ b/storage/innobase/row/row0mysql.cc
@@ -3556,8 +3556,7 @@ row_drop_single_table_tablespace(
/* If the tablespace is not in the cache, just delete the file. */
if (!fil_space_for_table_exists_in_mem(
- space_id, tablename, true, false, NULL, 0, NULL,
- table_flags)) {
+ space_id, tablename, true, false, NULL, 0, table_flags)) {
/* Force a delete of any discarded or temporary files. */
fil_delete_file(filepath);
@@ -3895,19 +3894,6 @@ row_drop_table_for_mysql(
we need to avoid running removal of these entries. */
if (!dict_table_is_temporary(table)) {
- /* If table has not yet have crypt_data, try to read it to
- make freeing the table easier. */
- if (!table->crypt_data) {
- if (fil_space_t* space = fil_space_acquire_silent(
- table->space)) {
- /* We use crypt data in dict_table_t
- in ha_innodb.cc to push warnings to
- user thread. */
- table->crypt_data = space->crypt_data;
- fil_space_release(space);
- }
- }
-
/* We use the private SQL parser of Innobase to generate the
query graphs needed in deleting the dictionary data from system
tables in Innobase. Deleting a row from SYS_INDEXES table also
diff --git a/storage/xtradb/btr/btr0btr.cc b/storage/xtradb/btr/btr0btr.cc
index e66599e206d..85a083aaee0 100644
--- a/storage/xtradb/btr/btr0btr.cc
+++ b/storage/xtradb/btr/btr0btr.cc
@@ -745,7 +745,8 @@ btr_root_block_get(
if (index && index->table) {
index->table->file_unreadable = true;
- ib_push_warning(index->table->thd, DB_DECRYPTION_FAILED,
+ ib_push_warning(
+ static_cast<THD*>(NULL), DB_DECRYPTION_FAILED,
"Table %s in tablespace %lu is encrypted but encryption service or"
" used key_id is not available. "
" Can't continue reading table.",
diff --git a/storage/xtradb/dict/dict0load.cc b/storage/xtradb/dict/dict0load.cc
index 4991c4f3fcc..4c3dd47761f 100644
--- a/storage/xtradb/dict/dict0load.cc
+++ b/storage/xtradb/dict/dict0load.cc
@@ -1193,7 +1193,7 @@ loop:
dberr_t err = fil_open_single_table_tablespace(
read_page_0, srv_read_only_mode ? false : true,
space_id, dict_tf_to_fsp_flags(flags),
- name, filepath, NULL);
+ name, filepath);
if (err != DB_SUCCESS) {
ib_logf(IB_LOG_LEVEL_ERROR,
@@ -2437,7 +2437,7 @@ err_exit:
err = fil_open_single_table_tablespace(
true, false, table->space,
dict_tf_to_fsp_flags(table->flags),
- name, filepath, table);
+ name, filepath);
if (err != DB_SUCCESS) {
/* We failed to find a sensible
diff --git a/storage/xtradb/fil/fil0fil.cc b/storage/xtradb/fil/fil0fil.cc
index 12048bc479f..fdd09a6034e 100644
--- a/storage/xtradb/fil/fil0fil.cc
+++ b/storage/xtradb/fil/fil0fil.cc
@@ -4229,8 +4229,7 @@ fil_open_single_table_tablespace(
ulint flags, /*!< in: expected FSP_SPACE_FLAGS */
const char* tablename, /*!< in: table name in the
databasename/tablename format */
- const char* path_in, /*!< in: tablespace filepath */
- dict_table_t* table) /*!< in: table */
+ const char* path_in) /*!< in: table */
{
dberr_t err = DB_SUCCESS;
bool dict_filepath_same_as_default = false;
@@ -4339,11 +4338,6 @@ fil_open_single_table_tablespace(
def.file, false, &def.flags, &def.id,
NULL, &def.crypt_data);
- if (table) {
- table->crypt_data = def.crypt_data;
- table->page_0_read = true;
- }
-
def.valid = !def.check_msg && def.id == id
&& fsp_flags_match(flags, def.flags);
@@ -4363,11 +4357,6 @@ fil_open_single_table_tablespace(
remote.file, false, &remote.flags, &remote.id,
NULL, &remote.crypt_data);
- if (table) {
- table->crypt_data = remote.crypt_data;
- table->page_0_read = true;
- }
-
/* Validate this single-table-tablespace with SYS_TABLES. */
remote.valid = !remote.check_msg && remote.id == id
&& fsp_flags_match(flags, remote.flags);
@@ -4389,11 +4378,6 @@ fil_open_single_table_tablespace(
dict.file, false, &dict.flags, &dict.id,
NULL, &dict.crypt_data);
- if (table) {
- table->crypt_data = dict.crypt_data;
- table->page_0_read = true;
- }
-
/* Validate this single-table-tablespace with SYS_TABLES. */
dict.valid = !dict.check_msg && dict.id == id
&& fsp_flags_match(flags, dict.flags);
diff --git a/storage/xtradb/handler/ha_innodb.cc b/storage/xtradb/handler/ha_innodb.cc
index 264bb31db64..591df34a578 100644
--- a/storage/xtradb/handler/ha_innodb.cc
+++ b/storage/xtradb/handler/ha_innodb.cc
@@ -6434,8 +6434,6 @@ table_opened:
innobase_copy_frm_flags_from_table_share(ib_table, table->s);
- ib_table->thd = (void*)thd;
-
/* No point to init any statistics if tablespace is still encrypted. */
if (ib_table->is_readable()) {
dict_stats_init(ib_table);
diff --git a/storage/xtradb/include/dict0dict.ic b/storage/xtradb/include/dict0dict.ic
index 4ed1afc8094..f68d4e176da 100644
--- a/storage/xtradb/include/dict0dict.ic
+++ b/storage/xtradb/include/dict0dict.ic
@@ -705,8 +705,6 @@ dict_sys_tables_type_validate(
ulint page_compression_level = DICT_TF_GET_PAGE_COMPRESSION_LEVEL(type);
ulint atomic_writes = DICT_TF_GET_ATOMIC_WRITES(type);
- ut_a(atomic_writes <= ATOMIC_WRITES_OFF);
-
/* The low order bit of SYS_TABLES.TYPE is always set to 1.
If the format is UNIV_FORMAT_B or higher, this field is the same
as dict_table_t::flags. Zero is not allowed here. */
@@ -716,16 +714,12 @@ dict_sys_tables_type_validate(
if (redundant) {
if (zip_ssize || atomic_blobs) {
- fprintf(stderr, "InnoDB: Error: SYS_TABLES::TYPE=Redundant, zip_ssize " ULINTPF " atomic_blobs " ULINTPF "\n",
- zip_ssize, atomic_blobs);
return(ULINT_UNDEFINED);
}
}
/* Make sure there are no bits that we do not know about. */
if (unused) {
- fprintf(stderr, "InnoDB: Error: SYS_TABLES::TYPE=" ULINTPF ", unused " ULINTPF "\n",
- type, unused);
return(ULINT_UNDEFINED);
}
@@ -737,11 +731,8 @@ dict_sys_tables_type_validate(
The DICT_N_COLS_COMPACT flag should be in N_COLS,
but we already know that. */
-
} else if (zip_ssize) {
/* Antelope does not support COMPRESSED format. */
- fprintf(stderr, "InnoDB: Error: SYS_TABLES::TYPE=" ULINTPF ", zip_ssize " ULINTPF "\n",
- type, zip_ssize);
return(ULINT_UNDEFINED);
}
@@ -751,15 +742,11 @@ dict_sys_tables_type_validate(
should be in N_COLS, but we already know about the
low_order_bit and DICT_N_COLS_COMPACT flags. */
if (!atomic_blobs) {
- fprintf(stderr, "InnoDB: Error: SYS_TABLES::TYPE=" ULINTPF ", zip_ssize " ULINTPF " atomic_blobs " ULINTPF "\n",
- type, zip_ssize, atomic_blobs);
return(ULINT_UNDEFINED);
}
/* Validate that the number is within allowed range. */
if (zip_ssize > PAGE_ZIP_SSIZE_MAX) {
- fprintf(stderr, "InnoDB: Error: SYS_TABLES::TYPE=" ULINTPF ", zip_ssize " ULINTPF " max %d\n",
- type, zip_ssize, PAGE_ZIP_SSIZE_MAX);
return(ULINT_UNDEFINED);
}
}
@@ -776,18 +763,13 @@ dict_sys_tables_type_validate(
low_order_bit and DICT_N_COLS_COMPACT flags. */
if (!atomic_blobs || !page_compression) {
- fprintf(stderr, "InnoDB: Error: SYS_TABLES::TYPE=" ULINTPF ", page_compression " ULINTPF " page_compression_level " ULINTPF "\n"
- "InnoDB: Error: atomic_blobs " ULINTPF "\n",
- type, page_compression, page_compression_level, atomic_blobs);
return(ULINT_UNDEFINED);
}
}
/* Validate that the atomic writes number is within allowed range. */
if (atomic_writes > ATOMIC_WRITES_OFF) {
- fprintf(stderr, "InnoDB: Error: SYS_TABLES::TYPE=" ULINTPF ", atomic_writes " ULINTPF "\n",
- type, atomic_writes);
- return(ULINT_UNDEFINED);
+ return(ULINT_UNDEFINED);
}
/* Return the validated SYS_TABLES.TYPE. */
diff --git a/storage/xtradb/include/dict0mem.h b/storage/xtradb/include/dict0mem.h
index a32581a0e90..2a4422fc18b 100644
--- a/storage/xtradb/include/dict0mem.h
+++ b/storage/xtradb/include/dict0mem.h
@@ -1048,10 +1048,6 @@ struct dict_table_t{
table_id_t id; /*!< id of the table */
mem_heap_t* heap; /*!< memory heap */
char* name; /*!< table name */
- void* thd; /*!< thd */
- bool page_0_read; /*!< true if page 0 has
- been already read */
- fil_space_crypt_t *crypt_data; /*!< crypt data if present */
const char* dir_path_of_temp_table;/*!< NULL or the directory path
where a TEMPORARY table that was explicitly
created by a user should be placed if
diff --git a/storage/xtradb/include/fil0fil.h b/storage/xtradb/include/fil0fil.h
index a09833c3a73..6eab5db6883 100644
--- a/storage/xtradb/include/fil0fil.h
+++ b/storage/xtradb/include/fil0fil.h
@@ -1043,8 +1043,7 @@ fil_open_single_table_tablespace(
ulint flags, /*!< in: expected FSP_SPACE_FLAGS */
const char* tablename, /*!< in: table name in the
databasename/tablename format */
- const char* filepath, /*!< in: tablespace filepath */
- dict_table_t* table) /*!< in: table */
+ const char* filepath) /*!< in: tablespace filepath */
__attribute__((nonnull(5), warn_unused_result));
#endif /* !UNIV_HOTBACKUP */
diff --git a/storage/xtradb/os/os0file.cc b/storage/xtradb/os/os0file.cc
index 20b202506f5..7fbee0312ee 100644
--- a/storage/xtradb/os/os0file.cc
+++ b/storage/xtradb/os/os0file.cc
@@ -4401,7 +4401,7 @@ os_aio_init(
#ifdef _WIN32
ut_a(completion_port == 0 && read_completion_port == 0);
completion_port = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0);
- read_completion_port = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0);
+ read_completion_port = srv_read_only_mode? completion_port : CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0);
ut_a(completion_port && read_completion_port);
#endif
diff --git a/storage/xtradb/row/row0import.cc b/storage/xtradb/row/row0import.cc
index 2f7aece665a..86b2d782b7b 100644
--- a/storage/xtradb/row/row0import.cc
+++ b/storage/xtradb/row/row0import.cc
@@ -3618,7 +3618,7 @@ row_import_for_mysql(
err = fil_open_single_table_tablespace(
true, true, table->space,
dict_tf_to_fsp_flags(table->flags),
- table->name, filepath, table);
+ table->name, filepath);
DBUG_EXECUTE_IF("ib_import_open_tablespace_failure",
err = DB_TABLESPACE_NOT_FOUND;);
diff --git a/storage/xtradb/row/row0mysql.cc b/storage/xtradb/row/row0mysql.cc
index 59568f5c91b..0079fc79a0e 100644
--- a/storage/xtradb/row/row0mysql.cc
+++ b/storage/xtradb/row/row0mysql.cc
@@ -4272,18 +4272,6 @@ row_drop_table_for_mysql(
rw_lock_x_unlock(dict_index_get_lock(index));
}
- /* If table has not yet have crypt_data, try to read it to
- make freeing the table easier. */
- if (!table->crypt_data) {
-
- if (fil_space_t* space = fil_space_acquire_silent(table->space)) {
- /* We use crypt data in dict_table_t in ha_innodb.cc
- to push warnings to user thread. */
- table->crypt_data = space->crypt_data;
- fil_space_release(space);
- }
- }
-
/* We use the private SQL parser of Innobase to generate the
query graphs needed in deleting the dictionary data from system
tables in Innobase. Deleting a row from SYS_INDEXES table also