From e22e8f4b1d9a7228ecadb9777ed4eb896eb5a82e Mon Sep 17 00:00:00 2001 From: Carlos Salguero Date: Wed, 29 Mar 2017 14:45:23 -0300 Subject: [PATCH] PT-115 Made OptionParser to accept repeatable DSN parameters --- bin/pt-align | 6 +++++- bin/pt-archiver | 6 +++++- bin/pt-config-diff | 6 +++++- bin/pt-deadlock-logger | 6 +++++- bin/pt-diskstats | 6 +++++- bin/pt-duplicate-key-checker | 6 +++++- bin/pt-fifo-split | 6 +++++- bin/pt-find | 6 +++++- bin/pt-fingerprint | 6 +++++- bin/pt-fk-error-logger | 6 +++++- bin/pt-heartbeat | 6 +++++- bin/pt-index-usage | 6 +++++- bin/pt-kill | 6 +++++- bin/pt-online-schema-change | 6 +++++- bin/pt-query-digest | 6 +++++- bin/pt-show-grants | 6 +++++- bin/pt-slave-delay | 6 +++++- bin/pt-slave-find | 6 +++++- bin/pt-slave-restart | 6 +++++- bin/pt-table-checksum | 6 +++++- bin/pt-table-sync | 6 +++++- bin/pt-table-usage | 6 +++++- bin/pt-upgrade | 6 +++++- bin/pt-variable-advisor | 6 +++++- bin/pt-visual-explain | 6 +++++- lib/OptionParser.pm | 6 +++++- 26 files changed, 130 insertions(+), 26 deletions(-) diff --git a/bin/pt-align b/bin/pt-align index 26f9254e..c3eb2907 100755 --- a/bin/pt-align +++ b/bin/pt-align @@ -677,7 +677,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value'); diff --git a/bin/pt-archiver b/bin/pt-archiver index 61780ba8..82bd4611 100755 --- a/bin/pt-archiver +++ b/bin/pt-archiver @@ -1406,7 +1406,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value'); diff --git a/bin/pt-config-diff b/bin/pt-config-diff index f49388c4..29ba1273 100755 --- a/bin/pt-config-diff +++ b/bin/pt-config-diff @@ -1404,7 +1404,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value'); diff --git a/bin/pt-deadlock-logger b/bin/pt-deadlock-logger index 8a78f501..24cb94bf 100755 --- a/bin/pt-deadlock-logger +++ b/bin/pt-deadlock-logger @@ -754,7 +754,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value'); diff --git a/bin/pt-diskstats b/bin/pt-diskstats index 554b77b6..45cd6997 100755 --- a/bin/pt-diskstats +++ b/bin/pt-diskstats @@ -750,7 +750,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value'); diff --git a/bin/pt-duplicate-key-checker b/bin/pt-duplicate-key-checker index 556b56dd..d80251ea 100755 --- a/bin/pt-duplicate-key-checker +++ b/bin/pt-duplicate-key-checker @@ -1741,7 +1741,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value'); diff --git a/bin/pt-fifo-split b/bin/pt-fifo-split index 64de52ab..7c6b12a9 100755 --- a/bin/pt-fifo-split +++ b/bin/pt-fifo-split @@ -678,7 +678,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value'); diff --git a/bin/pt-find b/bin/pt-find index e9d5f056..37993dc2 100755 --- a/bin/pt-find +++ b/bin/pt-find @@ -1170,7 +1170,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value'); diff --git a/bin/pt-fingerprint b/bin/pt-fingerprint index f994cf94..336c78de 100755 --- a/bin/pt-fingerprint +++ b/bin/pt-fingerprint @@ -679,7 +679,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value'); diff --git a/bin/pt-fk-error-logger b/bin/pt-fk-error-logger index 352c0b62..3adf955e 100755 --- a/bin/pt-fk-error-logger +++ b/bin/pt-fk-error-logger @@ -749,7 +749,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value'); diff --git a/bin/pt-heartbeat b/bin/pt-heartbeat index b2418761..5d52e392 100755 --- a/bin/pt-heartbeat +++ b/bin/pt-heartbeat @@ -1515,7 +1515,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value'); diff --git a/bin/pt-index-usage b/bin/pt-index-usage index b5970399..bde4951f 100755 --- a/bin/pt-index-usage +++ b/bin/pt-index-usage @@ -1331,7 +1331,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value'); diff --git a/bin/pt-kill b/bin/pt-kill index db4886c2..20684c6f 100755 --- a/bin/pt-kill +++ b/bin/pt-kill @@ -759,7 +759,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value'); diff --git a/bin/pt-online-schema-change b/bin/pt-online-schema-change index 38f54ad7..79bba77c 100755 --- a/bin/pt-online-schema-change +++ b/bin/pt-online-schema-change @@ -767,7 +767,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value'); diff --git a/bin/pt-query-digest b/bin/pt-query-digest index 91956f5d..057110d7 100755 --- a/bin/pt-query-digest +++ b/bin/pt-query-digest @@ -1999,7 +1999,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value'); diff --git a/bin/pt-show-grants b/bin/pt-show-grants index ec4141db..ea3b43cf 100755 --- a/bin/pt-show-grants +++ b/bin/pt-show-grants @@ -680,7 +680,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value'); diff --git a/bin/pt-slave-delay b/bin/pt-slave-delay index 6cecb5c7..bc4d1ccd 100755 --- a/bin/pt-slave-delay +++ b/bin/pt-slave-delay @@ -752,7 +752,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value'); diff --git a/bin/pt-slave-find b/bin/pt-slave-find index 9ad4d2d3..cd74a964 100755 --- a/bin/pt-slave-find +++ b/bin/pt-slave-find @@ -687,7 +687,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value'); diff --git a/bin/pt-slave-restart b/bin/pt-slave-restart index 9f4144cc..70faf358 100755 --- a/bin/pt-slave-restart +++ b/bin/pt-slave-restart @@ -904,7 +904,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value'); diff --git a/bin/pt-table-checksum b/bin/pt-table-checksum index 0b9ed191..1b8b1675 100755 --- a/bin/pt-table-checksum +++ b/bin/pt-table-checksum @@ -2428,7 +2428,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value'); diff --git a/bin/pt-table-sync b/bin/pt-table-sync index 74d1d41a..a26ca9cc 100755 --- a/bin/pt-table-sync +++ b/bin/pt-table-sync @@ -767,7 +767,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value'); diff --git a/bin/pt-table-usage b/bin/pt-table-usage index f70861ce..bb9d87f2 100755 --- a/bin/pt-table-usage +++ b/bin/pt-table-usage @@ -1772,7 +1772,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value'); diff --git a/bin/pt-upgrade b/bin/pt-upgrade index eb05dc49..782ee3b5 100755 --- a/bin/pt-upgrade +++ b/bin/pt-upgrade @@ -1996,7 +1996,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value'); diff --git a/bin/pt-variable-advisor b/bin/pt-variable-advisor index 33abf4c8..90ccb4ce 100755 --- a/bin/pt-variable-advisor +++ b/bin/pt-variable-advisor @@ -756,7 +756,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value'); diff --git a/bin/pt-visual-explain b/bin/pt-visual-explain index 04194879..ce72ce30 100755 --- a/bin/pt-visual-explain +++ b/bin/pt-visual-explain @@ -1353,7 +1353,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value'); diff --git a/lib/OptionParser.pm b/lib/OptionParser.pm index b1c2c699..c323dd48 100644 --- a/lib/OptionParser.pm +++ b/lib/OptionParser.pm @@ -838,7 +838,11 @@ sub _validate_type { } } my $defaults = $self->{DSNParser}->parse_options($self); - $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + if (!$opt->{attributes}->{repeatable}) { + $opt->{value} = $self->{DSNParser}->parse($val, $prev, $defaults); + } else { + push @{$opt->{value}}, $self->{DSNParser}->parse($val, $prev, $defaults); + } } elsif ( $val && $opt->{type} eq 'z' ) { # type size PTDEBUG && _d('Parsing option', $opt->{long}, 'as a size value');