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;
|
$clean .= $suffix;
|
||||||
|
|
||||||
my $fields = [];
|
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) {
|
while($clean =~ /$fields_re/g) {
|
||||||
push @$fields, [ split /\s*,\s*/, $1 ];
|
push @$fields, [ split /\s*,\s*/, $1 ];
|
||||||
|
@@ -19,7 +19,7 @@ use Sandbox;
|
|||||||
use SqlModes;
|
use SqlModes;
|
||||||
use File::Temp qw/ tempdir /;
|
use File::Temp qw/ tempdir /;
|
||||||
|
|
||||||
plan tests => 6;
|
plan tests => 10;
|
||||||
|
|
||||||
require "$trunk/bin/pt-online-schema-change";
|
require "$trunk/bin/pt-online-schema-change";
|
||||||
|
|
||||||
@@ -88,6 +88,47 @@ like(
|
|||||||
"PT-153 Adding multiple unique indexes -> multime example queries.",
|
"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");
|
$source_dbh->do("DROP DATABASE IF EXISTS test");
|
||||||
|
|
||||||
# #############################################################################
|
# #############################################################################
|
||||||
|
Reference in New Issue
Block a user