Thank you very much Jonathan for that tremendous amount of help. I'll have to
digest what you've said, but it sounds like I need a newer DBD::Informix and
possibly a newer CSDK.
I got the same failure on my system with the missing ifx_var_freevar during the
'make test'.
>From what you said, I would need to install a new DBD::Informix (newer than
>2005.02, probably 2008.0229), and CSDK at least 2.90.xC4.
That is, I would need these fixes in order to solve the table copying the way I
showed you using the prepare and execute loop. However I might be able to find
a better way to copy the tables that curcumvents this problem. On the other
hand, the bug would still be there and could affect other operations that read
those varchar columns.
-Will
-----Original Message-----
From: Jonathan Leffler [mailto:[EMAIL PROTECTED]
Sent: Friday 04 April 2008 16:01
To: Rutherdale, Will
Cc: DBI Users Mailing List
Subject: Re: Blank inserted with varchar copy using prepare
On Fri, Apr 4, 2008 at 12:03 PM, Rutherdale, Will <[EMAIL PROTECTED]>
wrote:
I confirmed the problem occurs on another machine I was
wondering about.
I tried installing the latest DBI and DBD::Informix. DBI was
okay, but
DBD::Informix started out giving me the following warnings on
'perl
Makefile.PL':
----
Using INFORMIX-ESQL Version 9.21.UC1 from /usr/informix
Please upgrade to a more recent version of ClientSDK.
DBD::Informix will probably work, but that is not guaranteed.
Note that bug RT#13708 (IBM CQ bug idsdb00139040) may affect
you.
In particular, if test t/t931varchar.t detects problems,
consider an
upgrade to CSDK 3.00 or later - it seems to be fixed there.
----
ESQL/C 9.21 was released as part of CSDK 2.30 in May 1999. I suppose
it is sad to make software retire before its tenth birthday, but in this case,
it is somewhat past time.
That sounds like it could be related to my problem. Do you
think I
could report to management where I work that this known bug
might be
causing the problem, and that CSDK 3.00 is recommended?
That problem - RT#13708 - is to do with LVARCHAR and not VARCHAR.
Well, I tried to install CSDK 2.30 on my Solaris 10 machine. The
install worked; the software didn't. The network connections wouldn't work
(that appears to be a generic problem for my machine - on later testing;
probably needs a reboot), but the stream connections did. The compilation of
DBD::Informix 2008.0229 went fine, but the test failed horribly because it
couldn't find a symbol ifx_var_freevar().
Dropping back to DBD::Informix 2003.04, the compilation worked and
tests ran mostly OK (IUS tests were dubious, but VARCHAR isn't an IUS feature).
Using the previously generated test script, I got erroneous output from
the VARCHAR data. So, the problem could be in CSDK 2.30 or in DBD::Informix
2003.04. Checking with a more recent CSDK (3.00.UC2), it appears that
DBD::Informix 2003.04 was not handling VARCHAR properly; it introduces the
blanks. So, between that version and 2008.0229, I fixed the problem, somehow.
Looking at the ChangeLog, I find:
2005-07-28: Logged bug B173776 against ESQL/C - SQL DESCRIPTORS
mishandle
zero-length non-null VARCHAR values. This prevents a
solution
to a problem report from Vàclav Ovsík <[EMAIL PROTECTED]>.
This would probably be the issue - you'd need a version of
DBD::Informix later than 2005.02 and a version of CSDK released after that.
The relevant database reports that the bug was fixed in CSDK 2.90.xC4 - so you
need a version of CSDK at least that recent.
I also happened to fail in 'make test' on DBD::Informix, but
I'll have
to get back to you later on that.
If the trouble is 'ifx_var_freevar()', then that is a (now) known and
'will not be fixed' problem. CSDK 2.30 (ESQL/C 9.21) is officially unsupported
by DBD::Informix.
--
Jonathan Leffler <[EMAIL PROTECTED]> #include <disclaimer.h>
Guardian of DBD::Informix - v2008.0229 - http://dbi.perl.org
"Blessed are we who can laugh at ourselves, for we shall never cease to
be amused."
- - - - - Appended by Scientific Atlanta, a Cisco company - - - - -
This e-mail and any attachments may contain information which is confidential,
proprietary, privileged or otherwise protected by law. The information is solely
intended for the named addressee (or a person responsible for delivering it to
the addressee). If you are not the intended recipient of this message, you are
not authorized to read, print, retain, copy or disseminate this message or any
part of it. If you have received this e-mail in error, please notify the sender
immediately by return e-mail and delete it from your computer.