mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-12 06:00:14 +00:00
PT-193 Fixed regex in TableParser
TableParser's parse function was failing while trying to lowercase column names in the provided 'SHOW CREATE TABLE'. The problem was it was trying to lowercase everything between backticks but lines like these: `field_name` int comment "here is a ` in the comment" `second_field_name` int made the original regex to fail, matching `in the coment"` as an expression to be lowercased while second_file_name was considered as outside backticks.
This commit is contained in:
@@ -145,7 +145,7 @@ sub parse {
|
||||
|
||||
# Lowercase identifiers to avoid issues with case-sensitivity in Perl.
|
||||
# (Bug #1910276).
|
||||
$ddl =~ s/(`[^`]+`)/\L$1/g;
|
||||
$ddl =~ s/(`[^`\n]+`)/\L$1/gm;
|
||||
|
||||
my $engine = $self->get_engine($ddl);
|
||||
|
||||
|
@@ -806,6 +806,32 @@ is_deeply(
|
||||
'issue with pairing backticks in column comments (issue 330)'
|
||||
);
|
||||
|
||||
|
||||
$tbl = $tp->parse( load_file('t/lib/samples/issue_pt-193_backtick_in_col_comments.sql') );
|
||||
is_deeply(
|
||||
$tbl,
|
||||
{ cols => [qw(id f22abcde f23abc)],
|
||||
col_posn => { id => 0, f22abcde => 1, f23abc => 2 },
|
||||
is_col => { id => 1, f22abcde => 1, f23abc => 1 },
|
||||
is_autoinc => { id => 1, f22abcde => 0, f23abc => 0 },
|
||||
null_cols => [qw(f22abcde)],
|
||||
is_nullable => { f22abcde => 1},
|
||||
clustered_key => undef,
|
||||
keys => {},
|
||||
defs => { id => " `id` int(11) NOT NULL AUTO_INCREMENT",
|
||||
"f22abcde" => " `f22abcde` int(10) unsigned DEFAULT NULL COMMENT 'xxx`XXx'",
|
||||
"f23abc" => " `f23abc` int(10) unsigned NOT NULL DEFAULT '255' COMMENT \"`yyy\""
|
||||
},
|
||||
numeric_cols => [qw(id f22abcde f23abc)],
|
||||
is_numeric => { id => 1, f22abcde => 1, f23abc => 1 },
|
||||
engine => 'InnoDB',
|
||||
type_for => { id => 'int', f22abcde => 'int', f23abc => 'int' },
|
||||
name => 't3',
|
||||
charset => 'latin1',
|
||||
},
|
||||
'issue with pairing backticks in column comments (issue 330)'
|
||||
);
|
||||
|
||||
# #############################################################################
|
||||
# Issue 170: mk-parallel-dump dies when table-status Data_length is NULL
|
||||
# #############################################################################
|
||||
|
6
t/lib/samples/issue_pt-193_backtick_in_col_comments.sql
Normal file
6
t/lib/samples/issue_pt-193_backtick_in_col_comments.sql
Normal file
@@ -0,0 +1,6 @@
|
||||
Create Table: CREATE TABLE `t3` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`f22aBcDe` int(10) unsigned DEFAULT NULL COMMENT 'xxx`XXx',
|
||||
`f23aBc` int(10) unsigned NOT NULL DEFAULT '255' COMMENT "`yyy",
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1)
|
Reference in New Issue
Block a user