mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-10 21:19:59 +00:00
PT-1151 - LP #1225577: pt-online-schema-change can silently drop rows
- Found case when --check-unique-index-change does not catch error: UNIQUE without KEY or INDEX keyword and fixed regular expression
This commit is contained in:
@@ -11211,7 +11211,7 @@ sub get_unique_index_fields {
|
||||
$clean .= $suffix;
|
||||
|
||||
my $fields = [];
|
||||
my $fields_re = qr/\s(?:PRIMARY|UNIQUE)\s+(?:INDEX|KEY|)\s*(?:.*?)\s*\((.*?)\)/i;
|
||||
my $fields_re = qr/\s(?:(?:(?:PRIMARY|UNIQUE)\s+(?:INDEX|KEY|))|UNIQUE)\s*(?:.*?)\s*\((.*?)\)/i;
|
||||
|
||||
while($clean =~ /$fields_re/g) {
|
||||
push @$fields, [ split /\s*,\s*/, $1 ];
|
||||
|
@@ -19,7 +19,7 @@ use Sandbox;
|
||||
use SqlModes;
|
||||
use File::Temp qw/ tempdir /;
|
||||
|
||||
plan tests => 6;
|
||||
plan tests => 10;
|
||||
|
||||
require "$trunk/bin/pt-online-schema-change";
|
||||
|
||||
@@ -88,6 +88,47 @@ like(
|
||||
"PT-153 Adding multiple unique indexes -> multime example queries.",
|
||||
);
|
||||
|
||||
# UNIQUE is possible without INDEX or KEY, we need to check this as well.
|
||||
($output, $exit_status) = full_output(
|
||||
sub { pt_online_schema_change::main(@args, "$source_dsn,D=test,t=t1",
|
||||
'--execute',
|
||||
'--alter', "ADD UNIQUE c1 (f2, f3)",
|
||||
),
|
||||
},
|
||||
);
|
||||
|
||||
isnt(
|
||||
$exit_status,
|
||||
0,
|
||||
"PT-153 Adding unique index without index/key keyword exit status != 0.",
|
||||
);
|
||||
|
||||
like(
|
||||
$output,
|
||||
qr/You are trying to add an unique key. This can result in data loss if the data is not unique/s,
|
||||
"PT-153 Adding unique index without index/key keyword warning message.",
|
||||
);
|
||||
|
||||
($output, $exit_status) = full_output(
|
||||
sub { pt_online_schema_change::main(@args, "$source_dsn,D=test,t=t1",
|
||||
'--execute',
|
||||
'--alter', "ADD UNIQUE(f2, f3)",
|
||||
),
|
||||
},
|
||||
);
|
||||
|
||||
isnt(
|
||||
$exit_status,
|
||||
0,
|
||||
"PT-153 Adding unique index without index/key keyword and index name exit status != 0.",
|
||||
);
|
||||
|
||||
like(
|
||||
$output,
|
||||
qr/You are trying to add an unique key. This can result in data loss if the data is not unique/s,
|
||||
"PT-153 Adding unique index without index/key keyword and index name warning message.",
|
||||
);
|
||||
|
||||
$source_dbh->do("DROP DATABASE IF EXISTS test");
|
||||
|
||||
# #############################################################################
|
||||
|
Reference in New Issue
Block a user