Test and fix parsing literal backticks in TableParser:parse() (lp 1462904).

This commit is contained in:
Daniel Nichter
2015-06-25 13:20:00 -07:00
parent 66c74af47b
commit 32dba7e7f2
3 changed files with 45 additions and 1 deletions

View File

@@ -163,6 +163,12 @@ sub parse {
my (%type_for, %is_nullable, %is_numeric, %is_autoinc);
foreach my $col ( @cols ) {
my $def = $def_for{$col};
# Remove literal backticks (``) because they're superfluous for parsing
# the col.
# https://bugs.launchpad.net/percona-toolkit/+bug/1462904
$def =~ s/``//g;
my ( $type ) = $def =~ m/`[^`]+`\s([a-z]+)/;
die "Can't determine column type for $def" unless $type;
$type_for{$col} = $type;

View File

@@ -964,6 +964,40 @@ ok(
diag(`$trunk/sandbox/stop-sandbox $master3_port >/dev/null`);
# #############################################################################
# pt-duplicate-key-checker doesn't support triple quote in column name
# https://bugs.launchpad.net/percona-toolkit/+bug/1462904
# #############################################################################
$tbl = $tp->parse(load_file('t/lib/samples/triple-quoted-col.sql'));
is_deeply(
$tbl,
{
clustered_key => undef,
col_posn => { 'foo' => 0, bar => 1 },
cols => [ 'foo', 'bar' ],
defs => {
'foo' => ' `foo` int(11) DEFAULT NULL',
'bar' => ' ```bar``` int(11) DEFAULT NULL',
},
engine => 'InnoDB',
is_autoinc => { foo => 0, bar => 0 },
is_col => { foo => 1, bar => 1 },
is_nullable => { foo => 1, bar => 1 },
is_numeric => { foo => 1, bar => 1 },
name => 't',
null_cols => [ 'foo', 'bar' ],
numeric_cols => [ 'foo', 'bar' ],
type_for => {
foo => 'int',
bar => 'int',
},
keys => {},
charset => undef,
},
'Literal backticks (bug 1462904)'
);
# #############################################################################
# Done.
# #############################################################################

View File

@@ -0,0 +1,4 @@
CREATE TABLE `t` (
`foo` int(11) DEFAULT NULL,
```bar``` int(11) DEFAULT NULL
) ENGINE=InnoDB