X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FUtils.pm;h=83cf6e906662f2c5c12edae68ff3b23d655ca40e;hb=1c56cdb02ec03c0cdea50e5dbcec8f19412f265a;hp=e85000ada684202943ef85892fee66b95a810e0d;hpb=f5405d4730be14a754d64a928d85695148a2e55c;p=dbsrgits%2FSQL-Translator.git diff --git a/lib/SQL/Translator/Utils.pm b/lib/SQL/Translator/Utils.pm index e85000a..83cf6e9 100644 --- a/lib/SQL/Translator/Utils.pm +++ b/lib/SQL/Translator/Utils.pm @@ -1,9 +1,7 @@ package SQL::Translator::Utils; # ---------------------------------------------------------------------- -# $Id: Utils.pm,v 1.12 2004-02-09 23:04:26 kycl4rk Exp $ -# ---------------------------------------------------------------------- -# Copyright (C) 2002-4 SQLFairy Authors +# Copyright (C) 2002-2009 SQLFairy Authors # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as @@ -28,10 +26,10 @@ use Digest::SHA1 qw( sha1_hex ); use Exporter; -$VERSION = sprintf "%d.%02d", q$Revision: 1.12 $ =~ /(\d+)\.(\d+)/; +$VERSION = '1.59'; $DEFAULT_COMMENT = '-- '; @EXPORT_OK = qw( - debug normalize_name header_comment parse_list_arg truncate_id_uniquely $DEFAULT_COMMENT + debug normalize_name header_comment parse_list_arg truncate_id_uniquely $DEFAULT_COMMENT parse_mysql_version ); # ---------------------------------------------------------------------- @@ -171,6 +169,55 @@ sub truncate_id_uniquely { . $collision_tag; } + +#--------------------------------------------------------------------- +# parse_mysql_version ( $version_string, $result_target) +# +# Attempts to parse an arbitrary string as a mysql version number. +# Returns either a floating point perl style string, or a mysql style +# 5 digit string, depending on the supplied $result_target +#--------------------------------------------------------------------- +sub parse_mysql_version { + my ($v, $target) = @_; + + return undef unless $v; + + $target ||= 'perl'; + + my @vers; + + # X.Y.Z style + if ( $v =~ / ^ (\d+) \. (\d{1,3}) (?: \. (\d{1,3}) )? $ /x ) { + push @vers, $1, $2, $3; + } + + # XYYZZ (mysql) style + elsif ( $v =~ / ^ (\d) (\d{2}) (\d{2}) $ /x ) { + push @vers, $1, $2, $3; + } + + # XX.YYYZZZ (perl) style or simply X + elsif ( $v =~ / ^ (\d+) (?: \. (\d{3}) (\d{3}) )? $ /x ) { + push @vers, $1, $2, $3; + } + else { + #how do I croak sanely here? + die "Unparseable MySQL version '$v'"; + } + + if ($target eq 'perl') { + return sprintf ('%d.%03d%03d', map { $_ || 0 } (@vers) ); + } + elsif ($target eq 'mysql') { + return sprintf ('%d%02d%02d', map { $_ || 0 } (@vers) ); + } + else { + #how do I croak sanely here? + die "Unknown version target '$target'"; + } +} + + 1; # ---------------------------------------------------------------------- @@ -300,11 +347,24 @@ Will give three different results; specifically: This is the default comment string, '-- ' by default. Useful for C. +=head2 parse_mysql_version + +Used by both L and +L in order to provide a +consistent format for both C<< parser_args->{mysql_parser_version} >> and +C<< producer_args->{mysql_version} >> respectively. Takes any of the following +version specifications: + + 5.0.3 + 4.1 + 3.23.2 + 5 + 5.001005 (perl style) + 30201 (mysql style) + =head1 AUTHORS Darren Chamberlain Edarren@cpan.orgE, Ken Y. Clark Ekclark@cpan.orgE. =cut - -=cut