Files
percona-toolkit/t/pt-archiver/issue_1593265.t
Carlos Salguero 01daf0030e bug-1593265 Fixed pt-archiver deletes wrong rows
In the case we are trying to migrate a table with no PK nor an unique
key, pt-archiver was failing to select the correct rows for deletion.
This fix implemented here is to add ALL columns in the WHERE clause of
the DELETE command. This way, we are deleting only the exact same row we
just migrated but using columns instead of an index.
2016-06-22 13:17:57 -03:00

65 lines
1.8 KiB
Perl

#!/usr/bin/env perl
BEGIN {
die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
};
use strict;
use warnings FATAL => 'all';
use English qw(-no_match_vars);
use Test::More;
use PerconaTest;
use Sandbox;
require "$trunk/bin/pt-archiver";
my $dp = new DSNParser(opts=>$dsn_opts);
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
my $dbh = $sb->get_dbh_for('master');
if ( !$dbh ) {
plan skip_all => 'Cannot connect to sandbox master';
}
else {
plan tests => 3;
}
my $output;
# #############################################################################
# Issue 1152: mk-archiver columns option resulting in null archived table data
# #############################################################################
$sb->load_file('master', 't/pt-archiver/samples/issue_1593265.sql');
$dbh->do('set names "utf8"');
$output = output(
sub { pt_archiver::main(
'--source', 'h=127.1,P=12345,D=test,t=t1,u=msandbox,p=msandbox',
'--dest', 't=t2', '--where', 'b in (1,2,3)')
},
);
my $untouched_rows = $dbh->selectall_arrayref('SELECT a, b FROM test.t1');
is_deeply(
$untouched_rows,
[ ['10', '5'], ['10', '4'] ],
"Rows were left on the original table"
);
my $new_rows = $dbh->selectall_arrayref('SELECT a, b FROM test.t2');
is_deeply(
$new_rows,
[ ['10', '3'], ['10', '2'], ['10', '1'] ],
"Rows were archived into the new table"
);
# #############################################################################
# Done.
# #############################################################################
$sb->wipe_clean($dbh);
ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
exit;