mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-18 01:33:14 +00:00
Merge pull request #861 from hpoettker/PT-2377_table_sync_with_utf8_json
PT-2377 - fixed pt-table-sync for JSON utf8 strings
This commit is contained in:
@@ -7,6 +7,7 @@ BEGIN {
|
||||
};
|
||||
|
||||
use strict;
|
||||
use utf8;
|
||||
use warnings FATAL => 'all';
|
||||
use English qw(-no_match_vars);
|
||||
use Test::More;
|
||||
@@ -617,6 +618,52 @@ SKIP: {
|
||||
);
|
||||
}
|
||||
|
||||
# #############################################################################
|
||||
# PT-2377: pt-table-sync must handle utf8 in JSON columns correctly
|
||||
# #############################################################################
|
||||
SKIP: {
|
||||
skip 'Cannot connect to sandbox master', 1 unless $master_dbh;
|
||||
$master_dbh->do('DROP TABLE IF EXISTS `test`.`pt-2377`');
|
||||
$master_dbh->do('CREATE TABLE `test`.`pt-2377` (id INT, data JSON)');
|
||||
$master_dbh->do(q/INSERT INTO `test`.`pt-2377` VALUES (1, '{"name": "Müller"}')/);
|
||||
$master_dbh->do(q/INSERT INTO `test`.`pt-2377` VALUES (2, NULL)/);
|
||||
|
||||
@rows = ();
|
||||
$tbl_struct = {
|
||||
cols => [qw(id data)],
|
||||
col_posn => {id=>0, data=>1},
|
||||
type_for => {id=>'int', data=>'json'},
|
||||
};
|
||||
$ch = new ChangeHandler(
|
||||
Quoter => $q,
|
||||
left_db => 'test',
|
||||
left_tbl => 'pt-2377',
|
||||
right_db => 'test',
|
||||
right_tbl => 'pt-2377',
|
||||
actions => [ sub { push @rows, $_[0]; } ],
|
||||
replace => 0,
|
||||
queue => 0,
|
||||
tbl_struct => $tbl_struct,
|
||||
);
|
||||
$ch->fetch_back($master_dbh);
|
||||
|
||||
$ch->change('UPDATE', {id=>1}, [qw(id)] );
|
||||
$ch->change('INSERT', {id=>1}, [qw(id)] );
|
||||
$ch->change('UPDATE', {id=>2}, [qw(id)] );
|
||||
$ch->change('INSERT', {id=>2}, [qw(id)] );
|
||||
|
||||
is_deeply(
|
||||
\@rows,
|
||||
[
|
||||
q/UPDATE `test`.`pt-2377` SET `data`='{"name": "Müller"}' WHERE `id`='1' LIMIT 1/,
|
||||
q/INSERT INTO `test`.`pt-2377`(`id`, `data`) VALUES ('1', '{"name": "Müller"}')/,
|
||||
q/UPDATE `test`.`pt-2377` SET `data`=NULL WHERE `id`='2' LIMIT 1/,
|
||||
q/INSERT INTO `test`.`pt-2377`(`id`, `data`) VALUES ('2', NULL)/
|
||||
],
|
||||
"UPDATE and INSERT quote data regardless of how it looks if tbl_struct->quote_val is true"
|
||||
);
|
||||
}
|
||||
|
||||
# #############################################################################
|
||||
# Done.
|
||||
# #############################################################################
|
||||
|
Reference in New Issue
Block a user