summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuchen Pei <yuchen.pei@mariadb.com>2023-03-15 14:50:22 +1100
committerYuchen Pei <yuchen.pei@mariadb.com>2023-03-16 16:08:33 +1100
commitd7f93e0b048ad565e48435fa79bed499180db9e4 (patch)
tree8dbf03a02b16ac48829a2b558887abb5eece8e5a
parent5f8f9de5c6e308239c5e99147304742e69c54ef1 (diff)
downloadmariadb-git-bb-11.0-mdev-26137.tar.gz
wip please ignorebb-11.0-mdev-26137
-rw-r--r--mysql-test/suite/encryption/r/innodb_import.result20
-rw-r--r--mysql-test/suite/encryption/t/innodb_import.test13
-rw-r--r--mysql-test/suite/innodb/r/import_recovery.result39
-rw-r--r--mysql-test/suite/innodb/t/import_no_cfg.test4
-rw-r--r--mysql-test/suite/innodb/t/import_recovery.test87
-rw-r--r--storage/innobase/handler/ha_innodb.cc35
-rw-r--r--storage/innobase/include/row0import.h13
-rw-r--r--storage/innobase/row/row0import.cc24
8 files changed, 132 insertions, 103 deletions
diff --git a/mysql-test/suite/encryption/r/innodb_import.result b/mysql-test/suite/encryption/r/innodb_import.result
index 07090480da7..b1895b65ef7 100644
--- a/mysql-test/suite/encryption/r/innodb_import.result
+++ b/mysql-test/suite/encryption/r/innodb_import.result
@@ -23,7 +23,7 @@ DROP TABLE t1, t2;
#
# MDEV-26137 ALTER TABLE IMPORT enhancement
#
-# with encryption and page_compressed, with or without .cfg
+# with encryption and page_compressed
CREATE TABLE t1 (a int, b varchar(50)) ENGINE=InnoDB ENCRYPTED=YES ENCRYPTION_KEY_ID=6 PAGE_COMPRESSED=1;
INSERT INTO t1 VALUES(42, "hello");
FLUSH TABLES t1 FOR EXPORT;
@@ -39,21 +39,3 @@ SELECT * FROM t2;
a b
42 hello
DROP TABLE t1, t2;
-CREATE TABLE t1 (a int, b varchar(50)) ENGINE=InnoDB ENCRYPTED=YES ENCRYPTION_KEY_ID=6 PAGE_COMPRESSED=1;
-INSERT INTO t1 VALUES(42, "hello");
-FLUSH TABLES t1 FOR EXPORT;
-UNLOCK TABLES;
-ALTER TABLE t2 IMPORT TABLESPACE;
-Warnings:
-Warning 1810 IO Read error: (2, No such file or directory) Error opening './test/t2.cfg', will attempt to import without schema verification
-Warning 1810 IO Read error: (2, No such file or directory) Error opening './test/t2.cfg', will attempt to import without schema verification
-SHOW CREATE TABLE t2;
-Table Create Table
-t2 CREATE TABLE `t2` (
- `a` int(11) DEFAULT NULL,
- `b` varchar(50) DEFAULT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci `ENCRYPTED`=YES `ENCRYPTION_KEY_ID`=6 `PAGE_COMPRESSED`=1
-SELECT * FROM t2;
-a b
-42 hello
-DROP TABLE t1, t2;
diff --git a/mysql-test/suite/encryption/t/innodb_import.test b/mysql-test/suite/encryption/t/innodb_import.test
index ee836bafe4a..91bae752530 100644
--- a/mysql-test/suite/encryption/t/innodb_import.test
+++ b/mysql-test/suite/encryption/t/innodb_import.test
@@ -26,7 +26,7 @@ DROP TABLE t1, t2;
--echo # MDEV-26137 ALTER TABLE IMPORT enhancement
--echo #
---echo # with encryption and page_compressed, with or without .cfg
+--echo # with encryption and page_compressed
CREATE TABLE t1 (a int, b varchar(50)) ENGINE=InnoDB ENCRYPTED=YES ENCRYPTION_KEY_ID=6 PAGE_COMPRESSED=1;
INSERT INTO t1 VALUES(42, "hello");
FLUSH TABLES t1 FOR EXPORT;
@@ -39,13 +39,4 @@ SHOW CREATE TABLE t2;
SELECT * FROM t2;
DROP TABLE t1, t2;
-CREATE TABLE t1 (a int, b varchar(50)) ENGINE=InnoDB ENCRYPTED=YES ENCRYPTION_KEY_ID=6 PAGE_COMPRESSED=1;
-INSERT INTO t1 VALUES(42, "hello");
-FLUSH TABLES t1 FOR EXPORT;
---copy_file $MYSQLD_DATADIR/test/t1.frm $MYSQLD_DATADIR/test/t2.frm
---copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_DATADIR/test/t2.ibd
-UNLOCK TABLES;
-ALTER TABLE t2 IMPORT TABLESPACE;
-SHOW CREATE TABLE t2;
-SELECT * FROM t2;
-DROP TABLE t1, t2;
+# Embedded server uses absolute path, causing result mismatch in warning messages when .cfg is not copied over. Given we have tested importing without copying cfg in other tests, we don't do it here.
diff --git a/mysql-test/suite/innodb/r/import_recovery.result b/mysql-test/suite/innodb/r/import_recovery.result
index 0ffecbb9116..961c9d1ab95 100644
--- a/mysql-test/suite/innodb/r/import_recovery.result
+++ b/mysql-test/suite/innodb/r/import_recovery.result
@@ -1,18 +1,20 @@
-call mtr.add_suppression('.*Assertion.*failed.');
+#
+# MDEV-26137 ALTER TABLE IMPORT enhancement
+#
call mtr.add_suppression('InnoDB: Tablespace for table `test`.`t2` is set as discarded.');
-call mtr.add_suppression('InnoDB: ./test/t2.ibd: Page 0 at offset 0 looks corrupted.');
-call mtr.add_suppression("mariadbd: Index for table 't2' is corrupt; try to repair it");
# Recovery from crashes
## Creation of stub succeeds; server crashes; second import attempt succeeds
CREATE TABLE t1 (a int) ENGINE=InnoDB;
INSERT INTO t1 VALUES(42);
FLUSH TABLES t1 FOR EXPORT;
UNLOCK TABLES;
-SET DEBUG_DBUG='+d,die_after_create_stub_for_import';
+connect hang,localhost,root;
+SET DEBUG_SYNC='ib_after_create_stub_for_import SIGNAL hung WAIT_FOR ever';
ALTER TABLE t2 IMPORT TABLESPACE;
-ERROR HY000: Lost connection to server during query
-# Restart mysqld after the crash and reconnect.
+connection default;
+SET DEBUG_SYNC='now WAIT_FOR hung';
# restart
+disconnect hang;
ALTER TABLE t2 IMPORT TABLESPACE;
SELECT * FROM t2;
a
@@ -23,13 +25,18 @@ CREATE TABLE t1 (a int) ENGINE=InnoDB;
INSERT INTO t1 VALUES(42);
FLUSH TABLES t1 FOR EXPORT;
UNLOCK TABLES;
-SET DEBUG_DBUG='+d,die_after_create_stub_for_import';
+connect hang,localhost,root;
+SET DEBUG_SYNC='ib_after_create_stub_for_import SIGNAL hung WAIT_FOR ever';
ALTER TABLE t2 IMPORT TABLESPACE;
-ERROR HY000: Lost connection to server during query
-# Restart mysqld after the crash and reconnect.
+connection default;
+SET DEBUG_SYNC='now WAIT_FOR hung';
# restart
+disconnect hang;
DROP TABLE t1, t2;
# Recovery from corruption
+call mtr.add_suppression('InnoDB: ./test/t2.ibd: Page 0 at offset 0 looks corrupted.');
+call mtr.add_suppression("mariadbd.*: Index for table 't2' is corrupt; try to repair it");
+call mtr.add_suppression("InnoDB: Corrupted page \\[page id: space=.*, page number=0\\] of datafile './test/t2.ibd' could not be found in the doublewrite buffer.");
## Recovery from corruption, with cfg
CREATE TABLE t1 (a int) ENGINE=InnoDB;
INSERT INTO t1 VALUES(42);
@@ -54,9 +61,12 @@ CREATE TABLE t1 (a int) ENGINE=InnoDB;
INSERT INTO t1 VALUES(42);
FLUSH TABLES t1 FOR EXPORT;
UNLOCK TABLES;
-SET DEBUG_DBUG='+d,die_after_create_stub_for_import';
+connect hang,localhost,root;
+SET DEBUG_SYNC='ib_after_create_stub_for_import SIGNAL hung WAIT_FOR ever';
ALTER TABLE t2 IMPORT TABLESPACE;
-ERROR HY000: Lost connection to server during query
+connection default;
+SET DEBUG_SYNC='now WAIT_FOR hung';
+disconnect hang;
# corrupting the 0th page
# Restart mysqld after the crash and reconnect.
# restart
@@ -68,9 +78,12 @@ CREATE TABLE t1 (a int) ENGINE=InnoDB;
INSERT INTO t1 VALUES(42);
FLUSH TABLES t1 FOR EXPORT;
UNLOCK TABLES;
-SET DEBUG_DBUG='+d,die_after_create_stub_for_import';
+connect hang,localhost,root;
+SET DEBUG_SYNC='ib_after_create_stub_for_import SIGNAL hung WAIT_FOR ever';
ALTER TABLE t2 IMPORT TABLESPACE;
-ERROR HY000: Lost connection to server during query
+connection default;
+SET DEBUG_SYNC='now WAIT_FOR hung';
+disconnect hang;
# corrupting the 0th page
# Restart mysqld after the crash and reconnect.
# restart
diff --git a/mysql-test/suite/innodb/t/import_no_cfg.test b/mysql-test/suite/innodb/t/import_no_cfg.test
new file mode 100644
index 00000000000..d22814fef5d
--- /dev/null
+++ b/mysql-test/suite/innodb/t/import_no_cfg.test
@@ -0,0 +1,4 @@
+# embedded server uses absolute path, causing result mismatch in warning messages
+--source include/not_embedded.inc
+--source include/import_begin.inc
+--source include/import_end.inc
diff --git a/mysql-test/suite/innodb/t/import_recovery.test b/mysql-test/suite/innodb/t/import_recovery.test
index f1cc50abb51..b593e4a1ff6 100644
--- a/mysql-test/suite/innodb/t/import_recovery.test
+++ b/mysql-test/suite/innodb/t/import_recovery.test
@@ -1,16 +1,13 @@
--source include/have_innodb.inc
--source include/have_debug.inc
-let MYSQLD_DATADIR = `SELECT @@datadir`;
-let INNODB_PAGE_SIZE=`select @@innodb_page_size`;
+--echo #
+--echo # MDEV-26137 ALTER TABLE IMPORT enhancement
+--echo #
+
let $MYSQLD_DATADIR = `SELECT @@datadir`;
---let $_server_id= `SELECT @@server_id`
---let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.$_server_id.expect
-call mtr.add_suppression('.*Assertion.*failed.');
call mtr.add_suppression('InnoDB: Tablespace for table `test`.`t2` is set as discarded.');
-call mtr.add_suppression('InnoDB: ./test/t2.ibd: Page 0 at offset 0 looks corrupted.');
-call mtr.add_suppression("mariadbd: Index for table 't2' is corrupt; try to repair it");
--echo # Recovery from crashes
--echo ## Creation of stub succeeds; server crashes; second import attempt succeeds
@@ -21,13 +18,19 @@ FLUSH TABLES t1 FOR EXPORT;
--copy_file $MYSQLD_DATADIR/test/t1.frm $MYSQLD_DATADIR/test/t2.frm
--copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_DATADIR/test/t2.ibd
UNLOCK TABLES;
-SET DEBUG_DBUG='+d,die_after_create_stub_for_import';
-# Write file to make mysql-test-run.pl expect crash
---exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
---error 2013
+
+connect (hang,localhost,root);
+SET DEBUG_SYNC='ib_after_create_stub_for_import SIGNAL hung WAIT_FOR ever';
+send
+
ALTER TABLE t2 IMPORT TABLESPACE;
---echo # Restart mysqld after the crash and reconnect.
---source include/start_mysqld.inc
+
+connection default;
+SET DEBUG_SYNC='now WAIT_FOR hung';
+let $shutdown_timeout=0;
+--source include/restart_mysqld.inc
+disconnect hang;
+
ALTER TABLE t2 IMPORT TABLESPACE;
SELECT * FROM t2;
DROP TABLE t1, t2;
@@ -40,16 +43,31 @@ FLUSH TABLES t1 FOR EXPORT;
--copy_file $MYSQLD_DATADIR/test/t1.frm $MYSQLD_DATADIR/test/t2.frm
--copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_DATADIR/test/t2.ibd
UNLOCK TABLES;
-SET DEBUG_DBUG='+d,die_after_create_stub_for_import';
-# Write file to make mysql-test-run.pl expect crash
---exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
---error 2013
+
+connect (hang,localhost,root);
+SET DEBUG_SYNC='ib_after_create_stub_for_import SIGNAL hung WAIT_FOR ever';
+send
+
ALTER TABLE t2 IMPORT TABLESPACE;
---echo # Restart mysqld after the crash and reconnect.
---source include/start_mysqld.inc
+
+connection default;
+SET DEBUG_SYNC='now WAIT_FOR hung';
+let $shutdown_timeout=0;
+--source include/restart_mysqld.inc
+disconnect hang;
+
DROP TABLE t1, t2;
--echo # Recovery from corruption
+
+let MYSQLD_DATADIR = `SELECT @@datadir`;
+let INNODB_PAGE_SIZE=`select @@innodb_page_size`;
+
+call mtr.add_suppression('InnoDB: ./test/t2.ibd: Page 0 at offset 0 looks corrupted.');
+call mtr.add_suppression("mariadbd.*: Index for table 't2' is corrupt; try to repair it");
+# In Windows
+call mtr.add_suppression("InnoDB: Corrupted page \\[page id: space=.*, page number=0\\] of datafile './test/t2.ibd' could not be found in the doublewrite buffer.");
+
--echo ## Recovery from corruption, with cfg
CREATE TABLE t1 (a int) ENGINE=InnoDB;
INSERT INTO t1 VALUES(42);
@@ -117,12 +135,19 @@ FLUSH TABLES t1 FOR EXPORT;
--copy_file $MYSQLD_DATADIR/test/t1.frm $MYSQLD_DATADIR/test/t2.frm
--copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_DATADIR/test/t2.ibd
UNLOCK TABLES;
-SET DEBUG_DBUG='+d,die_after_create_stub_for_import';
-# Write file to make mysql-test-run.pl expect crash
---exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
---error 2013
+
+connect (hang,localhost,root);
+SET DEBUG_SYNC='ib_after_create_stub_for_import SIGNAL hung WAIT_FOR ever';
+send
+
ALTER TABLE t2 IMPORT TABLESPACE;
+connection default;
+SET DEBUG_SYNC='now WAIT_FOR hung';
+let $shutdown_timeout=0;
+--source include/shutdown_mysqld.inc
+disconnect hang;
+
--echo # corrupting the 0th page
perl;
my $ps = $ENV{INNODB_PAGE_SIZE};
@@ -154,12 +179,19 @@ FLUSH TABLES t1 FOR EXPORT;
--copy_file $MYSQLD_DATADIR/test/t1.frm $MYSQLD_DATADIR/test/t2.frm
--copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_DATADIR/test/t2.ibd
UNLOCK TABLES;
-SET DEBUG_DBUG='+d,die_after_create_stub_for_import';
-# Write file to make mysql-test-run.pl expect crash
---exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
---error 2013
+
+connect (hang,localhost,root);
+SET DEBUG_SYNC='ib_after_create_stub_for_import SIGNAL hung WAIT_FOR ever';
+send
+
ALTER TABLE t2 IMPORT TABLESPACE;
+connection default;
+SET DEBUG_SYNC='now WAIT_FOR hung';
+let $shutdown_timeout=0;
+--source include/shutdown_mysqld.inc
+disconnect hang;
+
--echo # corrupting the 0th page
perl;
my $ps = $ENV{INNODB_PAGE_SIZE};
@@ -182,4 +214,3 @@ EOF
--error ER_TABLE_SCHEMA_MISMATCH
ALTER TABLE t2 IMPORT TABLESPACE;
DROP TABLE t1, t2;
-
diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
index 88e7aec7aad..b034d2455b8 100644
--- a/storage/innobase/handler/ha_innodb.cc
+++ b/storage/innobase/handler/ha_innodb.cc
@@ -1921,16 +1921,18 @@ static int prepare_create_stub_for_import(THD *thd, const char *name,
HA_CREATE_INFO& create_info)
{
DBUG_ENTER("prepare_create_stub_for_import");
- char norm_name[FN_REFLEN];
- normalize_table_name(norm_name, name);
- FetchIndexRootPages fetchIndexRootPages(name);
+ FetchIndexRootPages fetchIndexRootPages;
if (fil_tablespace_iterate(fil_path_to_mysql_datadir, name,
IO_BUFFER_SIZE(srv_page_size),
fetchIndexRootPages)
!= DB_SUCCESS)
{
- sql_print_error("InnoDB: failed to get row format from ibd for %s.\n",
- norm_name);
+ const char *ibd_path = fil_make_filepath(
+ fil_path_to_mysql_datadir, table_name_t(const_cast<char*>(name)), IBD, true);
+ if (!ibd_path)
+ return(DB_OUT_OF_MEMORY);
+ sql_print_error("InnoDB: failed to get row format from %s.\n",
+ ibd_path);
DBUG_RETURN(ER_INNODB_IMPORT_ERROR);
}
create_info.init();
@@ -1953,8 +1955,8 @@ static int prepare_create_stub_for_import(THD *thd, const char *name,
create_info.row_type == ROW_TYPE_NOT_USED))
{
sql_print_error(
- "InnoDB: cfg and ibd disagree on row format for table %s.\n",
- norm_name);
+ "InnoDB: cfg and ibd disagree on row format for table %s.\n",
+ name);
DBUG_RETURN(ER_INNODB_IMPORT_ERROR);
}
else
@@ -5924,14 +5926,13 @@ ha_innobase::open(const char* name, int, uint)
if (!ib_table && thd_ddl_options(thd)->import_tablespace())
{
HA_CREATE_INFO create_info;
- if (int err= prepare_create_stub_for_import(thd, name,
+ if (int err= prepare_create_stub_for_import(thd, norm_name,
create_info))
DBUG_RETURN(err);
- create(name, table, &create_info, true, nullptr);
- DBUG_EXECUTE_IF("die_after_create_stub_for_import", ut_ad(0););
+ create(norm_name, table, &create_info, true, nullptr);
+ DEBUG_SYNC(thd, "ib_after_create_stub_for_import");
ib_table = open_dict_table(name, norm_name, is_part,
DICT_ERR_IGNORE_FK_NOKEY);
- DEBUG_SYNC(thd, "ib_open_after_create_stub_for_import");
}
if (NULL == ib_table) {
@@ -13230,9 +13231,12 @@ ha_innobase::create(const char *name, TABLE *form, HA_CREATE_INFO *create_info,
row_mysql_lock_data_dictionary(trx);
}
+ const bool importing= thd_ddl_options(ha_thd())->import_tablespace();
if (!error)
- error= info.create_table(own_trx &&
- !thd_ddl_options(ha_thd())->import_tablespace());
+ /* We can't possibly have foreign key information when creating a
+ stub table for importing .frm / .cfg / .ibd because it is not
+ stored in any of these files. */
+ error= info.create_table(own_trx && !importing);
if (own_trx || (info.flags2() & DICT_TF2_TEMPORARY))
{
@@ -13254,7 +13258,10 @@ ha_innobase::create(const char *name, TABLE *form, HA_CREATE_INFO *create_info,
if (!error)
{
- if (!thd_ddl_options(ha_thd())->import_tablespace())
+ /* Skip stats update when creating a stub table for importing,
+ as it is not needed and would report error due to the table
+ not being readable yet. */
+ if (!importing)
dict_stats_update(info.table(), DICT_STATS_EMPTY_TABLE);
if (!info.table()->is_temporary())
log_write_up_to(trx->commit_lsn, true);
diff --git a/storage/innobase/include/row0import.h b/storage/innobase/include/row0import.h
index 7156608e59c..7019ab2a900 100644
--- a/storage/innobase/include/row0import.h
+++ b/storage/innobase/include/row0import.h
@@ -257,12 +257,12 @@ struct FetchIndexRootPages : public AbstractCallback {
FetchIndexRootPages(const dict_table_t* table, trx_t* trx)
:
AbstractCallback(trx, UINT32_MAX),
- m_table(table), m_table_name(nullptr), m_index(0, 0) UNIV_NOTHROW { }
+ m_table(table), m_index(0, 0) UNIV_NOTHROW { }
- FetchIndexRootPages(const char* table_name)
+ FetchIndexRootPages()
:
AbstractCallback(nullptr, UINT32_MAX),
- m_table(nullptr), m_table_name(table_name), m_index(0, 0) UNIV_NOTHROW { }
+ m_table(nullptr), m_index(0, 0) UNIV_NOTHROW { }
/** Destructor */
~FetchIndexRootPages() UNIV_NOTHROW override = default;
@@ -306,7 +306,8 @@ struct FetchIndexRootPages : public AbstractCallback {
the tablespace. */
dberr_t build_row_import(row_import* cfg) const UNIV_NOTHROW;
- /** Table definition in server. */
+ /** Table definition in server. When the table is being created,
+ there's no table yet so m_table is nullptr */
const dict_table_t* m_table;
/** Table row format. Only used when a (stub) table is being created
@@ -314,10 +315,6 @@ struct FetchIndexRootPages : public AbstractCallback {
.ibd for the stub table. */
enum row_type m_row_format;
- /** When the table is being created, there's no table yet so m_table
- is nullptr, but m_table_name should be supplied. */
- const char* m_table_name;
-
/** Index information */
Index m_index;
};
diff --git a/storage/innobase/row/row0import.cc b/storage/innobase/row/row0import.cc
index a441c63d990..817c14e0087 100644
--- a/storage/innobase/row/row0import.cc
+++ b/storage/innobase/row/row0import.cc
@@ -480,10 +480,10 @@ page, as we can't get that from the tablespace header flags alone.
@retval DB_SUCCESS or error code. */
dberr_t FetchIndexRootPages::operator()(buf_block_t* block) UNIV_NOTHROW
{
- /* m_table_name is non-null iff we are trying to create a (stub)
- table, and there's no table to compare the fsp flags and row format
- against. */
- ut_ad(!m_table_name);
+ /* m_table is non-null iff we are trying to create a (stub)
+ table, and there's no table to compare the fsp flags and row
+ format against. */
+ ut_ad(m_table);
if (is_interrupted()) return DB_INTERRUPTED;
@@ -3165,11 +3165,15 @@ Read the row type from a .cfg file.
dberr_t get_row_type_from_cfg(const char* dir_path, const char* name,
THD* thd, rec_format_enum& result)
{
- const table_name_t table_name(const_cast<char*>(name));
- const char* filename = fil_make_filepath(dir_path, table_name, CFG,
- dir_path != nullptr);
+ char* filename = fil_make_filepath(dir_path,
+ table_name_t(const_cast<char*>(name)),
+ CFG, dir_path != nullptr);
+ if (!filename)
+ return DB_OUT_OF_MEMORY;
row_import cfg;
dberr_t err = row_import_read_cfg_internal(filename, thd, cfg);
+ // ASAN
+ ut_free(filename);
if (err == DB_SUCCESS)
result = dict_tf_get_rec_format(cfg.m_flags);
return err;
@@ -3515,10 +3519,10 @@ page_corrupted:
/* m_table_name is non-null iff we are trying to create a (stub)
table, in which case we want to get row format for the table
creation. */
- if (m_table_name)
- m_row_format = get_row_format(block);
- else
+ if (m_table)
err= this->operator()(block);
+ else
+ m_row_format = get_row_format(block);
func_exit:
free(page_compress_buf);
return err;