mirror of
https://github.com/MariaDB/server.git
synced 2025-01-24 07:44:22 +01:00
86361e032b
variable innodb_file_format. Implement file format version stamping of *.ibd files and SYS_TABLES.TYPE. This change breaks introduces an incompatible change for for compressed tables. We can do this, as we have not released yet. innodb-zip.test: Add tests for stricter KEY_BLOCK_SIZE and ROW_FORMAT checks. DICT_TF_COMPRESSED_MASK, DICT_TF_COMPRESSED_SHIFT: Replace with DICT_TF_ZSSIZE_MASK, DICT_TF_ZSSIZE_SHIFT. DICT_TF_FORMAT_MASK, DICT_TF_FORMAT_SHIFT, DICT_TF_FORMAT_51, DICT_TF_FORMAT_ZIP: File format version, stored in table->flags, in the .ibd file header, and in SYS_TABLES.TYPE. dict_create_sys_tables_tuple(): Write the table flags to SYS_TABLES.TYPE if the format is at least DICT_TF_FORMAT_ZIP. For old formats (DICT_TF_FORMAT_51), write DICT_TABLE_ORDINARY as the table type. DB_TABLE_ZIP_NO_IBD: Remove the error code. The error handling is done in ha_innodb.cc; as a failsafe measure, dict_build_table_def_step() will silently clear the compression and format flags instead of returning this error. dict_mem_table_create(): Assert that no extra bits are set in the flags. dict_sys_tables_get_zip_size(): Rename to dict_sys_tables_get_flags(). Check all flag bits, and return ULINT_UNDEFINED if the combination is unsupported. dict_boot(): Document the SYS_TABLES columns N_COLS and TYPE. dict_table_get_format(), dict_table_set_format(), dict_table_flags_to_zip_size(): New accessors to table->flags. dtuple_convert_big_rec(): Introduce the auxiliary variables local_len, local_prefix_len. Store a 768-byte prefix locally if the file format is less than DICT_TF_FORMAT_ZIP. dtuple_convert_back_big_rec(): Restore the columns. srv_file_format: New variable: innodb_file_format. fil_create_new_single_table_tablespace(): Replace the parameter zip_size with table->flags. fil_open_single_table_tablespace(): Replace the parameter zip_size_in_k with table->flags. Check the flags. fil_space_struct, fil_space_create(), fil_op_write_log(): Replace zip_size with flags. fil_node_open_file(): Note a TODO item for InnoDB Hot Backup. Check that the tablespace flags match. fil_space_get_zip_size(): Rename to fil_space_get_flags(). Add a wrapper for fil_space_get_zip_size(). fsp_header_get_flags(): New function. fsp_header_init_fields(): Replace zip_size with flags. FSP_SPACE_FLAGS: New name for the tablespace flags. This field used to be called FSP_PAGE_ZIP_SIZE, or FSP_LOWEST_NO_WRITE. It has always been written as 0 in MySQL/InnoDB versions 4.1 to 5.1. MLOG_ZIP_FILE_CREATE: Rename to MLOG_FILE_CREATE2. Add a 32-bit parameter for the tablespace flags. ha_innobase::create(): Check the table attributes ROW_FORMAT and KEY_BLOCK_SIZE. Issue errors if they are inappropriate, or warnings if the inherited attributes (in ALTER TABLE) will be ignored. PAGE_ZIP_MIN_SIZE_SHIFT: New constant: the 2-logarithm of PAGE_ZIP_MIN_SIZE.
73 lines
1.8 KiB
Text
73 lines
1.8 KiB
Text
-- source include/have_innodb.inc
|
|
|
|
let $per_table=`select @@innodb_file_per_table`;
|
|
let $format=`select @@innodb_file_format`;
|
|
set global innodb_file_per_table=off;
|
|
set global innodb_file_format=0;
|
|
--error 1478
|
|
create table t1(a int primary key) engine=innodb row_format=dynamic;
|
|
create table t1(a int primary key) engine=innodb row_format=redundant;
|
|
show create table t1;
|
|
drop table t1;
|
|
create table t1(a int primary key) engine=innodb row_format=compact;
|
|
show create table t1;
|
|
drop table t1;
|
|
--error 1478
|
|
create table t1(a int primary key) engine=innodb key_block_size=9;
|
|
|
|
--error 1478
|
|
create table t1(a int primary key) engine=innodb
|
|
key_block_size=1 row_format=redundant;
|
|
set global innodb_file_per_table=on;
|
|
--error 1478
|
|
create table t1(a int primary key) engine=innodb
|
|
key_block_size=1 row_format=redundant;
|
|
set global innodb_file_format=1;
|
|
--error 1478
|
|
create table t1(a int primary key) engine=innodb
|
|
key_block_size=1 row_format=redundant;
|
|
|
|
create table t1(a int primary key) engine=innodb
|
|
key_block_size=1 row_format=compact;
|
|
show create table t1;
|
|
drop table t1;
|
|
|
|
create table t1(a int primary key) engine=innodb
|
|
key_block_size=1;
|
|
show create table t1;
|
|
drop table t1;
|
|
|
|
--error 1478
|
|
create table t1(a int primary key) engine=innodb key_block_size=9;
|
|
|
|
create table t1(a int not null, b text, index(b(10))) engine=innodb
|
|
key_block_size=1;
|
|
|
|
let $b=`select '1abcdefghijklmnopqrstuvwxyz'+repeat('A',5000)`;
|
|
|
|
eval insert into t1 values (1,$b);
|
|
commit;
|
|
|
|
connect (a,localhost,root,,);
|
|
connect (b,localhost,root,,);
|
|
|
|
connection a;
|
|
begin;
|
|
update t1 set b=repeat('B',100);
|
|
|
|
connection b;
|
|
eval select a,left(b,40),b=$b is_equal from t1;
|
|
|
|
connection a;
|
|
rollback;
|
|
|
|
connection b;
|
|
eval select a,left(b,40),b=$b is_equal from t1;
|
|
|
|
connection default;
|
|
disconnect a;
|
|
disconnect b;
|
|
|
|
drop table t1;
|
|
eval set global innodb_file_per_table=$per_table;
|
|
eval set global innodb_file_format=$format;
|