mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-10 13:11:32 +00:00
Test and fix parsing literal backticks in TableParser:parse() (lp 1462904).
This commit is contained in:
@@ -163,6 +163,12 @@ sub parse {
|
|||||||
my (%type_for, %is_nullable, %is_numeric, %is_autoinc);
|
my (%type_for, %is_nullable, %is_numeric, %is_autoinc);
|
||||||
foreach my $col ( @cols ) {
|
foreach my $col ( @cols ) {
|
||||||
my $def = $def_for{$col};
|
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]+)/;
|
my ( $type ) = $def =~ m/`[^`]+`\s([a-z]+)/;
|
||||||
die "Can't determine column type for $def" unless $type;
|
die "Can't determine column type for $def" unless $type;
|
||||||
$type_for{$col} = $type;
|
$type_for{$col} = $type;
|
||||||
|
@@ -964,6 +964,40 @@ ok(
|
|||||||
|
|
||||||
diag(`$trunk/sandbox/stop-sandbox $master3_port >/dev/null`);
|
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.
|
# Done.
|
||||||
# #############################################################################
|
# #############################################################################
|
||||||
|
4
t/lib/samples/triple-quoted-col.sql
Normal file
4
t/lib/samples/triple-quoted-col.sql
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
CREATE TABLE `t` (
|
||||||
|
`foo` int(11) DEFAULT NULL,
|
||||||
|
```bar``` int(11) DEFAULT NULL
|
||||||
|
) ENGINE=InnoDB
|
Reference in New Issue
Block a user