Re: sql_type_cast small inconsistency and bugs

Tim Bunce <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.dbi.sybase.devel
Message-ID <[email protected]>
On Tue, Dec 08, 2009 at 01:32:33PM +0000, Martin Evans wrote:
> 
> Done and one last (I'm hoping) thing. The PurePerl version that was
> added does not match the XS version as the success of the cast (or not)
> is not reflected in the return value.

That PurePerl one I did was just a rough sketch.

> The following change fixes it but
> I'd rather see some comment on it before committing:
> 
> Index: lib/DBI/PurePerl.pm
> ===================================================================
> --- lib/DBI/PurePerl.pm	(revision 13653)
> +++ lib/DBI/PurePerl.pm	(working copy)
> @@ -682,21 +682,30 @@
> 
>      return -1 unless defined $_[0];
> 
> -    my $cast_ok = 0;
> +    my $cast_ok = 1;
> 
> -    if ($sql_type == SQL_INTEGER) {
> -        my $dummy = $_[0] + 0;
> -    }
> -    elsif ($sql_type == SQL_DOUBLE) {
> -        my $dummy = $_[0] + 0.0;
> -    }
> -    elsif ($sql_type == SQL_NUMERIC) {
> -        my $dummy = $_[0] + 0.0;
> -    }
> -    else {
> -        return -2;
> -    }
> +    my $evalret = eval {
> +        use warnings FATAL => qw(numeric);
> +        if ($sql_type == SQL_INTEGER) {
> +            my $dummy = $_[0] + 0;
> +            return 1;
> +        }
> +        elsif ($sql_type == SQL_DOUBLE) {
> +            my $dummy = $_[0] + 0.0;
> +            return 1;
> +        }
> +        elsif ($sql_type == SQL_NUMERIC) {
> +            my $dummy = $_[0] + 0.0;
> +            return 1;
> +        }
> +        else {
> +            return -2;
> +        }
> +    } or warn $@;
> 
> +    return $evalret if defined($evalret) && ($evalret == -2);
> +    $cast_ok = 0 unless $evalret;
> +
>      # DBIstcf_DISCARD_STRING not supported for PurePerl currently
> 
>      return 2 if $cast_ok;
> 
> With this in place all the tests pass on 5.10.1 and 5.10.0.

use warnings FATAL => qw(numeric); is s nice approach.
I don't think that'll affect the minimum perl version (5.8.1)

The lack of difference in the code between SQL_DOUBLE and SQL_NUMERIC is
a little troubling, though I've no time to think about it right now.

Go ahead and commit anyway.

I think docs for DBI::sql_type_cast are the next thing we need.

Tim.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.