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.