Hi,

Just noticed this problem when my database was down:

#!/usr/bin/perl -w
use DBI;
my $dbh = DBI->connect("dbi:ODBC:testviagamb",
                       "Fred",
                       "Bloggs");


Use of uninitialized value in concatenation (.) or string at
/usr/lib/perl5/site_perl/5.6.1/i686-linux/DBI.pm line 584.
DBI connect('testviagamb','Fred',...) failed:  at ./con.pl line 6

It should have displayed:

[unixODBC][Easysoft ODBC (Client)]Client unable to establish connection
(SQL-08001)
[unixODBC][Easysoft ODBC (Client)]Connection refused, connect(), after 5
attempts

Same happens if I use dbi:ODBC:doesnotexist and I don't have a DSN called
doesnotexist. This used to work but I can't seem to locate what has changed
recently to break this. I am using DBI 1.37 and DBD::ODBC 1.05. 

A trace for the case where the DSN does not exist follows (you can see the
correct error message in the trace but it is not displayed and you get that
uninitialised value in concatenation):

    DBI 1.37-nothread dispatch trace level set to 9
    -> DBI->connect(dbi:ODBC:doesnotexist, Fred, ****)
    -> DBI->install_driver(ODBC) for linux perl=5.006001 pid=32637 ruid=501
euid=501
       install_driver: DBD::ODBC version 1.05 loaded from
/usr/lib/perl5/site_perl/5.6.1/i686-linux/DBD/ODBC.pm
    New DBI::dr (for DBD::ODBC::dr, parent=, id=)
    dbih_setup_handle(DBI::dr=HASH(0x81bb28c)=>DBI::dr=HASH(0x80fd0a8),
DBD::ODBC::dr, 0, Null!)
    dbih_make_com(Null!, (nil), DBD::ODBC::dr, 92, (nil)) thr#(nil)
    dbih_setup_attrib(DBI::dr=HASH(0x80fd0a8), Err, Null!) SCALAR(0x818cd68)
(already defined)
    dbih_setup_attrib(DBI::dr=HASH(0x80fd0a8), State, Null!) SCALAR(0x818cd20)
(already defined)
    dbih_setup_attrib(DBI::dr=HASH(0x80fd0a8), Errstr, Null!) SCALAR(0x818cd50)
(already defined)
    dbih_setup_attrib(DBI::dr=HASH(0x80fd0a8), TraceLevel, Null!) 0 (already
defined)
    dbih_setup_attrib(DBI::dr=HASH(0x80fd0a8), FetchHashKeyName, Null!) 'NAME'
(already defined)
    <- install_driver= DBI::dr=HASH(0x81bb28c)
    >> connect     DISPATCH (DBI::dr=HASH(0x81bb28c) rc2/3 @5 g0 ima1
pid#32637) at /usr/lib/perl5/site_perl/5.6.1/i686-linux/DBI.pm line 582
    -> connect for DBD::ODBC::dr (DBI::dr=HASH(0x81bb28c)~0x80fd0a8
'doesnotexist' 'Fred' **** HASH(0x81858d8))
    New DBI::db (for DBD::ODBC::db, parent=DBI::dr=HASH(0x80fd0a8), id=)
    dbih_setup_handle(DBI::db=HASH(0x80fd06c)=>DBI::db=HASH(0x818592c),
DBD::ODBC::db, 81b8b3c, Null!)
    dbih_make_com(DBI::dr=HASH(0x80fd0a8), 0x81c6098, DBD::ODBC::db, 220,
(nil)) thr#(nil)
    dbih_setup_attrib(DBI::db=HASH(0x818592c), Err, DBI::dr=HASH(0x80fd0a8))
SCALAR(0x81bde94) (already defined)
    dbih_setup_attrib(DBI::db=HASH(0x818592c), State, DBI::dr=HASH(0x80fd0a8))
SCALAR(0x81c02f8) (already defined)
    dbih_setup_attrib(DBI::db=HASH(0x818592c), Errstr, DBI::dr=HASH(0x80fd0a8))
SCALAR(0x81bdec4) (already defined)
    dbih_setup_attrib(DBI::db=HASH(0x818592c), TraceLevel,
DBI::dr=HASH(0x80fd0a8)) 0 (already defined)
    dbih_setup_attrib(DBI::db=HASH(0x818592c), FetchHashKeyName,
DBI::dr=HASH(0x80fd0a8)) 'NAME' (already defined)
    dbih_setup_attrib(DBI::db=HASH(0x818592c), HandleError,
DBI::dr=HASH(0x80fd0a8)) undef (not defined)
    <- connect= undef at /usr/lib/perl5/site_perl/5.6.1/i686-linux/DBI.pm line
582
    >> errstr      DISPATCH (DBI::dr=HASH(0x81bb28c) rc2/3 @1 g0 ima4
pid#32637) at /usr/lib/perl5/site_perl/5.6.1/i686-linux/DBI.pm line 584
    -> errstr in DBD::_::common for DBD::ODBC::dr
(DBI::dr=HASH(0x81bb28c)~0x80fd0a8)
    <- errstr= undef at /usr/lib/perl5/site_perl/5.6.1/i686-linux/DBI.pm line
584
       DBI connect('doesnotexist','Fred',...) failed: 
    >> DESTROY     DISPATCH (DBI::db=HASH(0x80fd06c) rc1/1 @1 g0 ima4
pid#32637) at /usr/lib/perl5/site_perl/5.6.1/i686-linux/DBI.pm line 639 via
./con.pl line 4
    <> DESTROY ignored for outer handle DBI::db=HASH(0x80fd06c) (inner
DBI::db=HASH(0x818592c))
    >> DESTROY     DISPATCH (DBI::db=HASH(0x818592c) rc1/1 @1 g0 ima4
pid#32637) at /usr/lib/perl5/site_perl/5.6.1/i686-linux/DBI.pm line 639 via
./con.pl line 4
    -> DESTROY for DBD::ODBC::db (DBI::db=HASH(0x818592c)~INNER)
         DESTROY for DBI::db=HASH(0x818592c) ignored - handle not initialised
       error: -1 '[unixODBC][Driver Manager]Data source name not found, and no
default driver specified (SQL-IM002)(DBD: db_login/SQLConnect err=-1)'
    <- DESTROY= undef at /usr/lib/perl5/site_perl/5.6.1/i686-linux/DBI.pm line
639 via ./con.pl line 4
    DESTROY (dbih_clearcom) (dbh 0x80fd06c 0x81187b0, com 0x81f7630, imp
DBD::ODBC::db):
       FLAGS 0x11: COMSET Warn 
       PARENT DBI::dr=HASH(0x80fd0a8)
       KIDS 0 (0 Active)
       IMP_DATA undef
    dbih_clearcom 0x80fd06c (com 0x81f7630, type 2) done.

    -- DBI::END
    >> disconnect_all DISPATCH (DBI::dr=HASH(0x81bb28c) rc1/3 @1 g0 ima801
pid#32637) at /usr/lib/perl5/site_perl/5.6.1/i686-linux/DBI.pm line 649 via
./con.pl line 0
    -> disconnect_all for DBD::ODBC::dr (DBI::dr=HASH(0x81bb28c)~0x80fd0a8)
    <- disconnect_all= '' at /usr/lib/perl5/site_perl/5.6.1/i686-linux/DBI.pm
line 649 via ./con.pl line 0
!   >> DESTROY     DISPATCH (DBI::dr=HASH(0x80fd0a8) rc1/1 @1 g0 ima4
pid#32637) during global destruction
!   -> DESTROY for DBD::ODBC::dr (DBI::dr=HASH(0x80fd0a8)~INNER)
!   <- DESTROY= (not implemented) during global destruction
    DESTROY (dbih_clearcom) (drh 0x81bb28c 0x813c430, com 0x81c6098, imp
DBD::ODBC::dr):
       FLAGS 0x215: COMSET Active Warn AutoCommit 
       PARENT undef
       KIDS 0 (0 Active)
       IMP_DATA undef
    dbih_clearcom 0x81bb28c (com 0x81c6098, type 1) done.

!   >> DESTROY     DISPATCH (DBI::dr=HASH(0x81bb28c) rc1/1 @1 g0 ima4
pid#32637) during global destruction
!   <> DESTROY for DBI::dr=HASH(0x81bb28c) ignored (inner handle gone)

perl -V
Summary of my perl5 (revision 5.0 version 6 subversion 1) configuration:
  Platform:
    osname=linux, osvers=2.2.14-6.1.1smp, archname=i686-linux
    uname='linux devmaster 2.2.14-6.1.1smp #1 smp thu apr 13 19:55:55 edt 2000 i
686 unknown '
    config_args=''
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=undef use5005threads=undef useithreads=undef usemultiplicity=unde
f
    useperlio=undef d_sfio=undef uselargefiles=define usesocks=undef
    use64bitint=undef use64bitall=undef uselongdouble=undef
  Compiler:
    cc='cc', ccflags ='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SO
URCE -D_FILE_OFFSET_BITS=64',
    optimize='-O2',
    cppflags='-fno-strict-aliasing -I/usr/local/include'
    ccversion='', gccversion='egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)',
 gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize
=8
    alignbytes=4, usemymalloc=n, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib
    libs=-lnsl -lndbm -lgdbm -ldb -ldl -lm -lc -lposix -lcrypt -lutil
    perllibs=-lnsl -ldl -lm -lc -lposix -lcrypt -lutil
    libc=/lib/libc-2.1.3.so, so=so, useshrplib=false, libperl=libperl.a
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic'
    cccdlflags='-fpic', lddlflags='-shared -L/usr/local/lib'


Characteristics of this binary (from libperl): 
  Compile-time options: USE_LARGE_FILES
  Built under linux
  Compiled at Jun  5 2001 10:27:46
  @INC:
    /usr/lib/perl5/5.6.1/i686-linux
    /usr/lib/perl5/5.6.1
    /usr/lib/perl5/site_perl/5.6.1/i686-linux
    /usr/lib/perl5/site_perl/5.6.1
    /usr/lib/perl5/site_perl/5.005
    /usr/lib/perl5/site_perl
    .

Thanks,

Martin
-- 
Martin J. Evans
Easysoft Ltd, UK
Development

Reply via email to