Hi Jeff,

I have the following test script:

  use sigtrap;
  use DBI();
  use Test::More tests => 5;

  my $dbh = DBI->connect or die $DBI::errstr;

  ok( $dbh->{$_}, $_) for 'Active';
  ok( $dbh-> $_ , $_) for 'ping';
  ok( $dbh-> $_ , $_) for 'disconnect';
  ok(!$dbh->{$_}, $_) for 'Active';
  ok(!$dbh-> $_ , $_) for 'ping';;

which I run (accidentally) with

  DBI_DSN=dbi:ODBC:test

and got

  ok 1 - Active
  ok 2 - ping
  ok 3 - disconnect
  ok 4 - Active
  Caught a SIGSEGV at C:/opt/perl/site/lib/DBD/ODBC.pm line 208

The trace shows

  dbd_error: err_rc=-1 rc=0 s/d/e: 0/0/21631648

First I thought SQLError() doesn't like the NULL
handles for hdbc and hstmt, but I see dbd_error2()
'climbs up the tree' anyway.
Do you have any ideas?

My platform:

  Windows 2000
  perl 5.6.1
  DBD::ODBC 1.13
  DBI 1.46

Full trace attached.


Steffen
    DBI 1.46-ithread default trace level set to 0x0/3 (pid 3412)
    Note: perl is running without the recommended perl -w option
1..5
    -> DBI->connect(, , ****)
    -> DBI->install_driver(ODBC) for MSWin32 perl=5.006001 pid=3412 ruid=0 
euid=0
       install_driver: DBD::ODBC version 1.13 loaded from 
C:/opt/perl/site/lib/DBD/ODBC.pm
    New DBI::dr (for DBD::ODBC::dr, parent=, id=)
    dbih_setup_handle(DBI::dr=HASH(0x1464d8c)=>DBI::dr=HASH(0x1399378), 
DBD::ODBC::dr, 0, Null!)
    dbih_make_com(Null!, 00000000, DBD::ODBC::dr, 92, 00000000) thr#011AF0F4
    <- install_driver= DBI::dr=HASH(0x1464d8c)
    -> default_user in DBD::_::dr for DBD::ODBC::dr 
(DBI::dr=HASH(0x1464d8c)~0x1399378 undef undef HASH(0x12ed804)) thr#011AF0F4
    <- default_user= ( undef undef ) [2 items] at DBI.pm line 574 via 02cxn.t 
line 13
    -> connect for DBD::ODBC::dr (DBI::dr=HASH(0x1464d8c)~0x1399378 'test' 
undef **** HASH(0x13b5e94)) thr#011AF0F4
    New DBI::db (for DBD::ODBC::db, parent=DBI::dr=HASH(0x1399378), id=)
    dbih_setup_handle(DBI::db=HASH(0x139933c)=>DBI::db=HASH(0x13b5e88), 
DBD::ODBC::db, 1467d6c, Null!)
    dbih_make_com(DBI::dr=HASH(0x1399378), 013B5AF0, DBD::ODBC::db, 224, 
00000000) thr#011AF0F4
SQLConnect 'test', ''
       SQLGetFunctions - SQL_MoreResults supported: 1
    <- connect= DBI::db=HASH(0x139933c) at DBI.pm line 592
    -> STORE for DBD::ODBC::db (DBI::db=HASH(0x13b5e88)~INNER 'PrintError' 1) 
thr#011AF0F4
DBD::ODBC unsupported attribute passed (PrintError)
    STORE DBI::db=HASH(0x13b5e88) 'PrintError' => 1
    <- STORE= 1 at DBI.pm line 639
    -> STORE for DBD::ODBC::db (DBI::db=HASH(0x13b5e88)~INNER 'AutoCommit' 1) 
thr#011AF0F4
    <- STORE= 1 at DBI.pm line 639
    -> STORE for DBD::ODBC::db (DBI::db=HASH(0x13b5e88)~INNER 'Username' undef) 
thr#011AF0F4
DBD::ODBC unsupported attribute passed (Username)
    STORE DBI::db=HASH(0x13b5e88) 'Username' => undef
    <- STORE= 1 at DBI.pm line 642 via 02cxn.t line 13
    <> FETCH= undef ('Username' from cache) at DBI.pm line 642
    <- connect= DBI::db=HASH(0x139933c)
    -> STORE for DBD::ODBC::db (DBI::db=HASH(0x13b5e88)~INNER 
'dbi_connect_closure' CODE(0x13992a0)) thr#011AF0F4
DBD::ODBC unsupported attribute passed (dbi_connect_closure)
    STORE DBI::db=HASH(0x13b5e88) 'dbi_connect_closure' => CODE(0x13992a0)
    <- STORE= 1 at DBI.pm line 662 via 02cxn.t line 13
    -> FETCH for DBD::ODBC::db (DBI::db=HASH(0x13b5e88)~INNER 'Active') 
thr#011AF0F4
    .. FETCH DBI::db=HASH(0x13b5e88) 'Active' = 1
    <- FETCH= 1 at More.pm line 281 via 02cxn.t line 15
ok 1 - Active
    -> ping for DBD::ODBC::db (DBI::db=HASH(0x139933c)~0x13b5e88) thr#011AF0F4
    New DBI::st (for DBD::ODBC::st, parent=DBI::db=HASH(0x13b5e88), id=)
    dbih_setup_handle(DBI::st=HASH(0x13b5f3c)=>DBI::st=HASH(0x1397304), 
DBD::ODBC::st, 1397250, Null!)
    dbih_make_com(DBI::db=HASH(0x13b5e88), 01397118, DBD::ODBC::st, 212, 
00000000) thr#011AF0F4
   Tables result 0 ()
dbd_error: err_rc=0 rc=0 s/d/e: 21633456/21631816/21631648
dbd_error: err_rc=0 rc=0 s/d/e: 0/21631816/21631648
dbd_error: err_rc=0 rc=0 s/d/e: 0/0/21631648
    build_results sql f21633456
        SQLTables(,,NOXXTABLE,)
    dbd_describe sql 21633456: num_fields=5
      col  1: VARCHAR  (12) len=255 disp=256, prec=255 scale=0
      col  2: VARCHAR  (12) len=128 disp=129, prec=128 scale=0
      col  3: VARCHAR  (12) len=128 disp=129, prec=128 scale=0
      col  4: VARCHAR  (12) len=128 disp=129, prec=128 scale=0
      col  5: VARCHAR  (12) len=254 disp=255, prec=254 scale=0
      col  1: 'TABLE_CAT' sqltype=VARCHAR, ctype=SQL_C_CHAR, maxlen=256, (dp = 
0, cp = 0)
      col  2: 'TABLE_SCHEM' sqltype=VARCHAR, ctype=SQL_C_CHAR, maxlen=129, (dp 
= 256, cp = 10)
      col  3: 'TABLE_NAME' sqltype=VARCHAR, ctype=SQL_C_CHAR, maxlen=129, (dp = 
388, cp = 22)
      col  4: 'TABLE_TYPE' sqltype=VARCHAR, ctype=SQL_C_CHAR, maxlen=129, (dp = 
520, cp = 33)
      col  5: 'REMARKS' sqltype=VARCHAR, ctype=SQL_C_CHAR, maxlen=255, (dp = 
652, cp = 44)
dbd_describe build_results #2...!
dbd_error: err_rc=0 rc=0 s/d/e: 21633456/21631816/21631648
dbd_error: err_rc=0 rc=0 s/d/e: 0/21631816/21631648
dbd_error: err_rc=0 rc=0 s/d/e: 0/0/21631648
    -> finish for DBD::ODBC::st (DBI::st=HASH(0x13b5f3c)~0x1397304) thr#011AF0F4
    <- finish= 1 at ODBC.pm line 210 via 02cxn.t line 16
    <- ping= 1 at 02cxn.t line 16
ok 2 - ping
    <> DESTROY(DBI::st=HASH(0x13b5f3c)) ignored for outer handle (inner 
DBI::st=HASH(0x1397304) has ref cnt 1)
    -> DESTROY for DBD::ODBC::st (DBI::st=HASH(0x1397304)~INNER) thr#011AF0F4
    <- DESTROY= undef at 02cxn.t line 16
    -> disconnect for DBD::ODBC::db (DBI::db=HASH(0x139933c)~0x13b5e88) 
thr#011AF0F4
    <- disconnect= 1 at 02cxn.t line 17
ok 3 - disconnect
    -> FETCH for DBD::ODBC::db (DBI::db=HASH(0x13b5e88)~INNER 'Active') 
thr#011AF0F4
    .. FETCH DBI::db=HASH(0x13b5e88) 'Active' = ''
    <- FETCH= '' at 02cxn.t line 18
ok 4 - Active
    -> ping for DBD::ODBC::db (DBI::db=HASH(0x139933c)~0x13b5e88) thr#011AF0F4
    New DBI::st (for DBD::ODBC::st, parent=DBI::db=HASH(0x13b5e88), id=)
    dbih_setup_handle(DBI::st=HASH(0x1389d3c)=>DBI::st=HASH(0x139731c), 
DBD::ODBC::st, 1389d54, Null!)
    dbih_make_com(DBI::db=HASH(0x13b5e88), 01397118, DBD::ODBC::st, 212, 
00000000) thr#011AF0F4
dbd_error: err_rc=-1 rc=0 s/d/e: 0/0/21631648
Caught a SIGSEGV at C:/opt/perl/site/lib/DBD/ODBC.pm line 208
Modification of a read-only value attempted at C:/opt/perl/lib/sigtrap.pm line 
99.
    <> DESTROY(DBI::db=HASH(0x139933c)) ignored for outer handle (inner 
DBI::db=HASH(0x13b5e88) has ref cnt 3)
    <> DESTROY(DBI::st=HASH(0x1389d3c)) ignored for outer handle (inner 
DBI::st=HASH(0x139731c) has ref cnt 1)
    -> DESTROY for DBD::ODBC::st (DBI::st=HASH(0x139731c)~INNER) thr#011AF0F4
         DESTROY for DBI::st=HASH(0x139731c) ignored - handle not initialised
    <- DESTROY= undef
    -> DESTROY for DBD::ODBC::db (DBI::db=HASH(0x13b5e88)~INNER) thr#011AF0F4
    <- DESTROY= undef
# Looks like you planned 5 tests but only ran 4.
# Looks like your test died just after 4.
    -- DBI::END
    -> disconnect_all for DBD::ODBC::dr (DBI::dr=HASH(0x1464d8c)~0x1399378) 
thr#011AF0F4
    <- disconnect_all= '' at DBI.pm line 671 via 02cxn.t line 0
!   -> DESTROY in DBD::_::common for DBD::ODBC::dr 
(DBI::dr=HASH(0x1399378)~INNER) thr#011AF0F4
!   <- DESTROY= undef during global destruction
!   <> DESTROY for DBI::dr=HASH(0x1464d8c) ignored (inner handle gone)

Reply via email to