Commit 73b2a326 authored by Sergei Golubchik's avatar Sergei Golubchik

MDEV-29730 mysqldump --dump-history creates broken dump if there are precision-versioned tables

parent d249761a
......@@ -3399,7 +3399,7 @@ static uint get_table_structure(const char *table, const char *db, char *table_t
mysql_free_result(result);
}
my_snprintf(query_buff, sizeof(query_buff),
"select column_name, extra, generation_expression "
"select column_name, extra, generation_expression, data_type "
"from information_schema.columns where table_schema=database() "
"and table_name=%s", quote_for_equal(table, temp_buff));
if (mysql_query_with_error_report(mysql, &result, query_buff))
......@@ -3413,8 +3413,16 @@ static uint get_table_structure(const char *table, const char *db, char *table_t
{
if (strstr(row[1],"INVISIBLE"))
complete_insert= 1;
if (vers_hidden && row[2])
vers_hidden= strcmp(row[2], "ROW START");
if (vers_hidden && row[2] && strcmp(row[2], "ROW START") == 0)
{
vers_hidden= 0;
if (row[3] && strcmp(row[3], "bigint") == 0)
{
maybe_die(EX_ILLEGAL_TABLE, "Cannot use --dump-history for table %s with transaction-precise history",
result_table);
*versioned= 0;
}
}
if (init)
{
dynstr_append_checked(&select_field_names, ", ");
......
......@@ -183,3 +183,26 @@ x check_row_ts(row_start, row_end)
2 CURRENT ROW
drop tables t1, t2;
drop function check_fields;
#
# MDEV-29730 mysqldump --dump-history creates broken dump if there are precision-versioned tables
#
create table t1 (x int,
rs BIGINT unsigned as row start, re BiGiNt unsigned as row end,
period for system_time (rs,re)) with system versioning engine=innodb;
insert t1 (x) values (1);
insert t1 (x) values (2);
delete from t1 where x=1;
mysqldump: Cannot use --dump-history for table `t1` with transaction-precise history
mysqldump: Cannot use --dump-history for table `t1` with transaction-precise history
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t1` (
`x` int(11) DEFAULT NULL,
`rs` bigint(20) unsigned GENERATED ALWAYS AS ROW START,
`re` bigint(20) unsigned GENERATED ALWAYS AS ROW END,
PERIOD FOR SYSTEM_TIME (`rs`, `re`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci WITH SYSTEM VERSIONING;
/*!40101 SET character_set_client = @saved_cs_client */;
INSERT INTO `t1` VALUES
(2,XXX,18446744073709551615);
drop table t1;
......@@ -147,4 +147,23 @@ select *, check_row_ts(row_start, row_end) from t2 for system_time all;
drop tables t1, t2;
drop function check_fields;
--echo #
--echo # MDEV-29730 mysqldump --dump-history creates broken dump if there are precision-versioned tables
--echo #
create table t1 (x int,
rs BIGINT unsigned as row start, re BiGiNt unsigned as row end,
period for system_time (rs,re)) with system versioning engine=innodb;
insert t1 (x) values (1);
insert t1 (x) values (2);
delete from t1 where x=1;
--replace_result mysqldump.exe mysqldump
--error 6
--exec $MYSQL_DUMP --dump-history test 2>&1 >/dev/null
--replace_regex /2,\d+,/2,XXX,/ /mysqldump\.exe/mysqldump/
--error 6
--exec $MYSQL_DUMP --force --dump-history --compact test 2>&1
drop table t1;
--source suite/versioning/common_finish.inc
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