mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-26 05:58:16 +00:00
VersionParser: Allow laxer version numbers, introduce the other cmp methods.
This commit is contained in:
@@ -34,22 +34,84 @@ sub new {
|
|||||||
|
|
||||||
sub parse {
|
sub parse {
|
||||||
my ( $self, $str ) = @_;
|
my ( $self, $str ) = @_;
|
||||||
my $result = sprintf('%03d%03d%03d', $str =~ m/(\d+)/g);
|
my @version_parts = $str =~ m/(\d+)/g;
|
||||||
|
# Turn a version like 5.5 into 5.5.0
|
||||||
|
@version_parts = map { $_ || 0 } @version_parts[0..2];
|
||||||
|
my $result = sprintf('%03d%03d%03d', @version_parts);
|
||||||
PTDEBUG && _d($str, 'parses to', $result);
|
PTDEBUG && _d($str, 'parses to', $result);
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Compares versions like 5.0.27 and 4.1.15-standard-log. Caches version number
|
# Compares versions like 5.0.27 and 4.1.15-standard-log. Caches version number
|
||||||
# for each DBH for later use.
|
# for each DBH for later use.
|
||||||
|
sub version_cmp {
|
||||||
|
my ($self, $dbh, $target, $cmp) = @_;
|
||||||
|
my $version = $self->version($dbh);
|
||||||
|
my $result;
|
||||||
|
|
||||||
|
if ( $cmp eq 'ge' ) {
|
||||||
|
$result = $self->{$dbh} ge $self->parse($target) ? 1 : 0;
|
||||||
|
}
|
||||||
|
elsif ( $cmp eq 'gt' ) {
|
||||||
|
$result = $self->{$dbh} gt $self->parse($target) ? 1 : 0;
|
||||||
|
}
|
||||||
|
elsif ( $cmp eq 'eq' ) {
|
||||||
|
$result = $self->{$dbh} eq $self->parse($target) ? 1 : 0;
|
||||||
|
}
|
||||||
|
elsif ( $cmp eq 'ne' ) {
|
||||||
|
$result = $self->{$dbh} ne $self->parse($target) ? 1 : 0;
|
||||||
|
}
|
||||||
|
elsif ( $cmp eq 'lt' ) {
|
||||||
|
$result = $self->{$dbh} lt $self->parse($target) ? 1 : 0;
|
||||||
|
}
|
||||||
|
elsif ( $cmp eq 'le' ) {
|
||||||
|
$result = $self->{$dbh} le $self->parse($target) ? 1 : 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
die "Asked for an unknown comparizon: $cmp"
|
||||||
|
}
|
||||||
|
|
||||||
|
PTDEBUG && _d($self->{$dbh}, $cmp, $target, ':', $result);
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
sub version_ge {
|
sub version_ge {
|
||||||
my ( $self, $dbh, $target ) = @_;
|
my ( $self, $dbh, $target ) = @_;
|
||||||
|
return $self->version_cmp($dbh, $target, 'ge');
|
||||||
|
}
|
||||||
|
|
||||||
|
sub version_gt {
|
||||||
|
my ( $self, $dbh, $target ) = @_;
|
||||||
|
return $self->version_cmp($dbh, $target, 'gt');
|
||||||
|
}
|
||||||
|
|
||||||
|
sub version_eq {
|
||||||
|
my ( $self, $dbh, $target ) = @_;
|
||||||
|
return $self->version_cmp($dbh, $target, 'eq');
|
||||||
|
}
|
||||||
|
|
||||||
|
sub version_ne {
|
||||||
|
my ( $self, $dbh, $target ) = @_;
|
||||||
|
return $self->version_cmp($dbh, $target, 'ne');
|
||||||
|
}
|
||||||
|
|
||||||
|
sub version_lt {
|
||||||
|
my ( $self, $dbh, $target ) = @_;
|
||||||
|
return $self->version_cmp($dbh, $target, 'lt');
|
||||||
|
}
|
||||||
|
|
||||||
|
sub version_le {
|
||||||
|
my ( $self, $dbh, $target ) = @_;
|
||||||
|
return $self->version_cmp($dbh, $target, 'le');
|
||||||
|
}
|
||||||
|
|
||||||
|
sub version {
|
||||||
|
my ( $self, $dbh ) = @_;
|
||||||
if ( !$self->{$dbh} ) {
|
if ( !$self->{$dbh} ) {
|
||||||
$self->{$dbh} = $self->parse(
|
$self->{$dbh} = $self->parse(
|
||||||
$dbh->selectrow_array('SELECT VERSION()'));
|
$dbh->selectrow_array('SELECT VERSION()'));
|
||||||
}
|
}
|
||||||
my $result = $self->{$dbh} ge $self->parse($target) ? 1 : 0;
|
return $self->{$dbh};
|
||||||
PTDEBUG && _d($self->{$dbh}, 'ge', $target, ':', $result);
|
|
||||||
return $result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Returns DISABLED if InnoDB doesn't appear as YES or DEFAULT in SHOW ENGINES,
|
# Returns DISABLED if InnoDB doesn't appear as YES or DEFAULT in SHOW ENGINES,
|
||||||
|
@@ -9,7 +9,7 @@ BEGIN {
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings FATAL => 'all';
|
use warnings FATAL => 'all';
|
||||||
use English qw(-no_match_vars);
|
use English qw(-no_match_vars);
|
||||||
use Test::More tests => 4;
|
use Test::More tests => 5;
|
||||||
|
|
||||||
use VersionParser;
|
use VersionParser;
|
||||||
use PerconaTest;
|
use PerconaTest;
|
||||||
@@ -22,6 +22,12 @@ is(
|
|||||||
'Parser works on ordinary version',
|
'Parser works on ordinary version',
|
||||||
);
|
);
|
||||||
|
|
||||||
|
is(
|
||||||
|
$vp->parse('5.5'),
|
||||||
|
'005005000',
|
||||||
|
'Parser works on a simplified version',
|
||||||
|
);
|
||||||
|
|
||||||
# Open a connection to MySQL, or skip the rest of the tests.
|
# Open a connection to MySQL, or skip the rest of the tests.
|
||||||
use DSNParser;
|
use DSNParser;
|
||||||
use Sandbox;
|
use Sandbox;
|
||||||
|
Reference in New Issue
Block a user