Dear Jeff,

Fair enough comments on using a driver manager.

I had tried to get iODBC up, but it barfed on a library I couldn't track
down - at run time, not compile/link time.  I started on unixODBC too, but
then concluded I didn't want to confuse myself - or it, or iODBC - by
installing its libraries over the iODBC libraries, so I need to go back to
the drawing board and rebuild either or both DMs to install in separate
versioned directories (/usr/iodbc/v3.0.6/ and /usr/unixODBC/v2.2.3, I
think), reinstall, and generally sort out.  I have a nasty feeling that
part of my problem with iODBC may be that I declined to build the GUI stuff
-- Solaris doesn't have the pre-requisites like Gtk installed -- yet the
library does not work properly without it.  Untested hypothesis, but the
libiodbcadm was missing at run-time.

So, in the interests of expediency, I used the surrogate DM that is
distributed with Informix CLI - knowing it was less than ideal but being
unwilling to spend very much longer on getting set up.

I've just re-remembered why I find ODBC/CLI on Unix so painful!  And that
is in no sense a comment on DBD::ODBC - just on ODBC in general on Unix.  I
assume it is easier to deal with on MS platforms; at least, there's a
standard ODBC driver manager!

--
Jonathan Leffler ([EMAIL PROTECTED])
STSM, Informix Database Engineering, IBM Data Management Solutions
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!"


|---------+---------------------------->
|         |           "Jeff Urlwin"    |
|         |           <jurlwin@bellatla|
|         |           ntic.net>        |
|         |                            |
|         |           12/17/2002 08:16 |
|         |           PM               |
|         |                            |
|---------+---------------------------->
  
>---------------------------------------------------------------------------------------------------------------------------------------------|
  |                                                                                    
                                                         |
  |       To:       Jonathan Leffler/Menlo Park/IBM@IBMUS, "'Tim Bunce'" 
<[EMAIL PROTECTED]>, "'Jeff Urlwin'" <[EMAIL PROTECTED]>                 |
  |       cc:       "'DBI Users Mailing List'" <[EMAIL PROTECTED]>                    
                                                         |
  |       Subject:  RE: Patch for DBD::ODBC 1.01 for using Informix CLI, etc.          
                                                         |
  |                                                                                    
                                                         |
  |                                                                                    
                                                         |
  
>---------------------------------------------------------------------------------------------------------------------------------------------|



> Dear Jeff and Tim,
>
> Here's a patch which more or less got DBD::ODBC 1.01 up and
> running using Informix CLI as the ODBC driver (and driver
> manager) on Solaris.

Jonathan -- that's GREAT!  FYI -- I strongly encourage people to use a
driver manager, to simplify the building process.  unixODBC has been
quite good for me.

>
> What did I have to fix?
>
> First of all, for some reason I don't understand fully, my
> system was initially diagnosed as being a udbc system.  So, I
> had to hack Makefile.PL to avoid that mis-diagnosis.  In
> doing so, I cleaned up the testing for other drivers and made
> it all more consistent.  Then I added a test which heads off
> trouble when no valid ODBC system is detected. There's now a
> list of the ODBC drivers which are supported; this is printed
> when no valid system is detected.

Thanks.  That needed work, as you know.  I only test with a few
different ODBC drivers/managers and mostly have accepted nearly all
patches provided.  I *really* appreciate the cleanup.

>
> Then I had to fiddle the definitions for use with Informix
> CLI, which was no worse than any other driver.  I made sure
> that the detailed version and platform information for
> Informix is in the file.  It will gently get out of date, but
> can be brought up to date again as necessary.  It at least
> tells people where it was originally thought to work.

Good -- nothing out of the ordinary.

>
> I'm using a butchered DBI 1.32 that is masquerading as 1.33,
> and it showed up a couple of minor problems in dbdimp.h -- no
> #define for dbd_discon_all and a stray #define for dbd_db_do.
>  Tim may yet decide those changes are too radical for DBI
> 1.33, but this change will allow your driver to work with
> both existing DBI versions and the future version where all
> the functions in Driver.xst are guarded with #ifdef's. Note
> that DBI 1.32 and earlier does not ever call dbd_db_do.
>

That might be an issue, though.  I might prefer to wait until the
release version or things settle on the DBI internals...depending upon
what Tim says.

I now see the problem with the dbd_db_do and the dbd_discon_all issues.
I have a do() replacement that starts in Perl and calls
dbd_db_execdirect.  I suppose I could rework it to use the do, but as
you pointed out, it's not called, so I'll leave it.


> I modified one (of three) calls to SQLDescribeCols() so that
> GCC didn't witter at me about incompatible pointer types.  I
> used an effective but crude technique; I declared a local
> variable of the correct type and passed that to the function,
> and then assigned the variable to the original source of
> trouble.  It was the ColumnSize parameter (7), which was
> being given a U32 pointer but the ODBC specs say it should be
> an SQLUINTEGER pointer.

Yes, I just end up ignoring those, but I should probably go in and clean
them up someday.  Some platforms may care...

>
> I ran into a problem with t/02simple.t; there was no newline
> at the end of the output from test 9, so the 'not ok 9' was
> getting lost.  That was easy to fix.  With that fix in place,
> I was getting two test failures, numbers 6 and 9 in
> t/02simple.t.  I wondered if it was my slightly unusual
> setting of the (Informix-specific) DBDATE variable that was
> throwing things for a wobbly, but it does not appear to be
> that.  I'm not sure how much time to spend debugging that -
> get back to me on it. The verbose output from the test that
> is failing (with the extra newline in place) is in the second
> attachment.

Hmm...it looks like some null chars are being retrieved with the data
and that's throwing the test off.  I'm somewhat surprised that more
tests didn't fail, given the data discrepancy...maybe I need to update
my tests :)

Test 9 is failing because of some strange results on the col attributes.
I'm wondering if the same null character issue is the source.

Here's the output from Oracle.
Column count is: 4
1: COL_A = 3 3 yes
2: COL_B = 12 12 yes
3: COL_C = -1 -1 yes
4: COL_D = 93 93 yes

Here's the output from your sample (normally the yes means a match is
found with grep()), so, adding carriage returns for clarity:
1: col_a = 5 5
2: col_b = 12 12
3: col_c = -1 -1
4: col_d = 93 93

For some reason, grep with $coltype == $_ isn't matching any of the test
types -- while it should.  I am thinking that a trailing null on data
returned is forcing Perl to see the numbers as characters...

>
> I wrote README.informix with much of the same information in
> it.  Feel free to remove the first paragraph if you accept
> the patches I'm sending.  Amongst other things, it documents
> that DBD::ODBC does not manage to handle Informix's
> non-transactional databases -- I got many more failures until
> I used a logged database.

Ok -- I'm certainly not an Informix person, so I'll take your word for
it.  I specifically test transactions and AutoCommit support, so I can
see if commit and rollback don't work, a lot of tests will fail.

>
> I also hacked the README (carefully preserving the DOS line
> endings) to update the rather archaic URLs and instructions
> for joining the mailing lists.

Thanks!  I normally move things over to *nix line endings, but the
README I had specifically left so that a person on Windows with Notepad
could read it.  I get painful results with native editors under
Win32...I use Epsilon which can preserve whatever line endings in the
files, so I don't tend to notice.

>
> With luck, I can now generate a GetInfo module for DBD::Informix!
>

Great!

I'm concerned about the nulls at the end of the strings retrieved.  I
believe that's causing the issues with the tests, although the tests
should be a bit more picky.

Thanks!

Jeff





Reply via email to