Dear Steve,
Thanks for a using the facilities with DBD::Informix to report this problem
- it is a pleasure to have the information I need immediately at hand, and
a working reproduction of the problem too. Thanks again!
And anyone else reporting problems with DBD::Informix please take this as
an excellent example of how to do it!
This is a genuine bug in DBD::Informix. Here's a quick-fix patch. Note
that the test code you provide will still fail because when you supply the
$large_value in the $sth->execute($large_value); call, you override the
good work done with bind_param - and the value is passed as an INT not an
INT8. When I replace that code with $sth->execute (and the patched
DBD::Informix), then I get the correct result.
I have a feeling that this is a second (bigger, unfixed) bug in
DBD::Informix - once bound via bind_param, the type is supposed to be
sticky in some form. This patch certainly does not attempt to handle that.
(See attached file: int8.fix)
--
Jonathan Leffler ([EMAIL PROTECTED])
STSM, Informix Database Engineering, IBM Data Management
4100 Bohannon Drive, Menlo Park, CA 94025
Tel: +1 650-926-6921 Tie-Line: 630-6921
"I don't suffer from insanity; I enjoy every minute of it!"
|---------+---------------------------->
| | Jonathan Leffler |
| | <[EMAIL PROTECTED]|
| | nk.net> |
| | |
| | 07/01/2003 08:28 |
| | AM |
| | |
|---------+---------------------------->
>---------------------------------------------------------------------------------------------------------------------------------------------|
|
|
| To: Jonathan Leffler/Menlo Park/[EMAIL PROTECTED]
|
| cc:
|
| Subject: [Fwd: DBD::Informix Issue with int8 field.]
|
|
|
>---------------------------------------------------------------------------------------------------------------------------------------------|
--
Jonathan Leffler ([EMAIL PROTECTED], [EMAIL PROTECTED])
#include <disclaimer.h>
Guardian of DBD::Informix v2003.04 -- http://dbi.perl.org/
----- Message from Steve Vornbrock <[EMAIL PROTECTED]> on Tue, 01 Jul 2003
10:22:57 -0500 -----
To: [EMAIL PROTECTED]
Subject: DBD::Informix Issue with
int8 field.
Hello,
I am running into an issue with the insert of a number into an INT8
field when that number is larger than the max value of an INTEGER. I
have included the test script, output and additional configuration of
the machine. Any help would be appreciated.
Thanks,
Steve
This is running on a Sun machine with Solaris 8 and IDS 9.40FC1.
-------------------------
Output
-------------------------
Perl Version 5.008
DBI Version 1.37
DBD::Informix Version 2003.04
IBM Informix CSDK Version 2.81, IBM Informix-ESQL Version 9.53.UC1
# DBI->connect('dbi:Informix:test_db', '', '');
# Connect Attribute: RaiseError => 1
# Connect Attribute: ChopBlanks => 1
large_number => 4278190080
inserted_value => -16777216
-------------------------
Script.
-------------------------
use strict;
use warnings;
use DBI;
use DBD::Informix::TestHarness;
use DBD::Informix::TechSupport;
use DBD::Informix qw(:ix_types);
print_versions("Perl DBI DBD::Informix ESQL/C");
my $large_number = 4278190080;
my $table = "test_table";
my $inserted_value;
my $dbh = connect_to_test_database({RaiseError => 1});
$dbh->do(qq%CREATE TEMP TABLE $table (id INT8)%);
my $sth = $dbh->prepare(qq%INSERT INTO $table VALUES(?)%);
$sth->bind_param(1,$large_number, {ix_type => IX_INT8});
$sth->execute($large_number);
$sth = $dbh->prepare(qq%SELECT id FROM $table%);
$sth->bind_columns(\$inserted_value);
$sth->execute;
$sth->fetch;
$sth->finish;
print "large_number => $large_number\n";
print "inserted_value => $inserted_value\n";
exit 0;
int8.fix
Description: Binary data
