RE: [dbi] DBD::ODBC with Perl 5.8.8
am 07.03.2006 14:25:54 von jgillespieHi Martin,
Any idea why if I just change the version of Perl to 5.8.7 (leaving
Easysoft, DBI, and DBD::ODBC alone) everything tests fine?=20
-----Original Message-----
From: Martin J. Evans [mailto:martin.evans@easysoft.com]=20
Sent: Monday, March 06, 2006 3:35 PM
To: Jonathan Gillespie
Cc: dbi-users@perl.org
Subject: Re: [dbi] DBD::ODBC with Perl 5.8.8
As I suspected, DBD::ODBC has bumped the length to 51 then on the rebind
spotted it has grown from 50 to 51. I will try and reproduce tomorrow
and get back to you.
I've also bcc'ed support@easysoft.com so they know you are experiencing
a problem although at this stage I am thinking the issue is in DBD::ODBC
(but that may change).
Martin
Jonathan Gillespie wrote:
> We are using Easysoft odbc-odbc-bridge-2.0.0-linux-x86-glibc with DBI
> 1.50
>=20
> Here is what we think is the relevant portion of the trace:
>=20
> >> bind_param_inout DISPATCH (DBI::st=3DHASH(0x8ac55d8) rc1/1 @5 =
g0
> ima1 pid#30101) at t/20SqlServer.t line 180
> -> bind_param_inout for DBD::ODBC::st
> (DBI::st=3DHASH(0x8ac55d8)~0x8ac5638 1 SCALAR(0x89a2d64) 50 4) bind 1=20
> <== '' (attribs: ), type 4
> <- bind_param_inout=3D 1 at t/20SqlServer.t line 180
> >> bind_param DISPATCH (DBI::st=3DHASH(0x8ac55d8) rc1/1 @4 g0 =
ima1
> pid#30101) at t/20SqlServer.t line 181
> -> bind_param for DBD::ODBC::st =
(DBI::st=3DHASH(0x8ac55d8)~0x8ac5638
> 2
> 1 4)
> bind 2 <== '1' (attribs: ), type 4
> <- bind_param=3D 1 at t/20SqlServer.t line 181
> >> execute DISPATCH (DBI::st=3DHASH(0x8ac55d8) rc1/1 @1 g0
ima1041=20
> pid#30101) at t/20SqlServer.t line 183
> -> execute for DBD::ODBC::st (DBI::st=3DHASH(0x8ac55d8)~0x8ac5638)
> dbd_st_execute (outparams =3D 1)...
> bind 1 <== undef (size -1/-1/*50*, ptype 4, otype 1, sqltype 4) =
bind 1
> <== '(null)' (len 0/*51*, null 1)
> bind 1: CTy=3D1, STy=3DINTEGER, CD=3D51, Sc=3D1, VM=3D51.
> SQLBindParameter: idx =3D 1: fParamType=3D2, name=3D1, fCtype=3D1, =
> SQL_Type =3D 4, cbColDef=3D51, scale=3D1, rgbValue =3D 8af2d70, =
cbValue=20
> Max=3D51, cbValue =3D 1
> Param value =3D
> rebind check char Param 1 ()
> bind 2 <== 1 (size 1/4/0, ptype 5, otype 1, sqltype 4) bind 2 =
<== '1'=20
> (len 1/3, null 0)
> bind 2: CTy=3D1, STy=3DINTEGER, CD=3D1, Sc=3D1, VM=3D1.
> SQLBindParameter: idx =3D 2: fParamType=3D1, name=3D2, fCtype=3D1, =
> SQL_Type =3D 4, cbColDef=3D1, scale=3D1, rgbValue =3D 8af7680, =
cbValueM ax=3D1,=20
> cbValue =3D 1
> Param value =3D 1
> rebind check char Param 2 (1)
> dbd_st_execute (for hstmt 145710992 before)...
> dbd_st_execute (for hstmt 145710992 after, rc =3D 0)...
> dbd_error: err_rc=3D0 rc=3D0 s/d/e: 145710992/145541856/145540432
> dbd_error: err_rc=3D0 rc=3D0 s/d/e: 0/145541856/145540432
> dbd_error: err_rc=3D0 rc=3D0 s/d/e: 0/0/145540432
> dbd_st_execute getting row count
> dbd_st_execute got row count 1
> dbd_describe 145710992 getting num fields Numfields == 0,=20
> SQLMoreResults == 100
> dbd_error: err_rc=3D100 rc=3D0 s/d/e: 145710992/145541856/145540432
> dbd_error: err_rc=3D100 rc=3D0 s/d/e: 0/145541856/145540432
> dbd_error: err_rc=3D100 rc=3D0 s/d/e: 0/0/145540432
> dbd_describe sql 145710992: num_fields=3D0
> dbd_describe skipped (no result cols) (sql f145710992)
> dbd_st_execute got no rows: resetting ACTIVE, moreResults
> handling 1 output parameters
> out 1 has length of 1
> <- execute=3D 1 at t/20SqlServer.t line 183
> >> bind_param_inout DISPATCH (DBI::st=3DHASH(0x8ac55d8) rc1/1 @5 =
g0
> ima1 pid#30101) at t/20SqlServer.t line 180
> -> bind_param_inout for DBD::ODBC::st
> (DBI::st=3DHASH(0x8ac55d8)~0x8ac5638 1 SCALAR(0x89a2d64) 50 4)
>=20
>=20
> -----Original Message-----
> From: Martin J. Evans [mailto:martin.evans@easysoft.com]
> Sent: Friday, March 03, 2006 10:03 AM
> To: dbi-users@perl.org
> Subject: RE: [dbi] DBD::ODBC with Perl 5.8.8
>=20
> Jonathan,
>=20
> The test that fails works fine for me.
> What ODBC driver are you using?
>=20
> Strangely, what DBD::ODBC is saying is that you bound an in/out=20
> parameter of max size 50 then changed it to 51 but the code in=20
> 20SqlServer has a hard-wired 50 so somewhere a long the line the 50=20
> that got into dbdimp.c got changed to 51.
>=20
> A trace of the 20SqlServer test might help.
>=20
> Martin
> --
> Martin J. Evans
> Easysoft Ltd, UK
> http://www.easysoft.com
>=20
>=20
> On 02-Mar-2006 Jonathan Gillespie wrote:
> > Hello,
> >
> > I'm having problems getting DBD::ODBC 1.13 to work with perl 5.8.8
> > > I'm running CentOS 4.2 with the latest updates, it's a brand new
> > install > > With Perl 5.8.7, DBD::ODBC installes with out a=20
> problem, but with perl > 5.8.8 I get the following from make test:
> >
> > make test TEST_VERBOSE=3D1
> > PERL_DL_NONLAZY=3D1 /usr/local/perl5.8.8/bin/perl =20
> >"-MExtUtils::Command::MM" "-e" "test_harness(1, 'blib/lib', =20
> >'blib/arch')" t/*.t > t/01base.........1..5 > ok 1 - require DBI; =20
> > ok 2 - import DBI > ok 3 - DBI->internal is DBI::dr > ok 4 -=20
> Install ODBC driver OK > ok 5 - Version is not empty > ok >=20
> t/02simple.......1..36 > ok 1 - use DBI; > ok 2 - use ODBCTEST; >=20
> ok 3 - Set Auto commit > ok 4 - Auto commit retrieved to what was set
> ok 5 - create test table >ok 6 - test table exists ok 7 - insert=20
> test data ok 8 - select test >data ok 9 - Set Long Read len ok 10=20
> - Set Long Truncok 1 ok 11 - Set >Print Error ok 12 - Select Long=20
> data ok 13 - Set Long Truncok 0 ok
> >14 - Select Long Data failure ok 15 - prepare select from table ok
> 16
> >- Execute select ok 17 - Col count matches correct col count ok 18
> - >Set RaiseError 0 ok 19 - Set PrintError 0 ok 20 - Error reported
> on >bad query ok 21 - date check select ok 22 - date check execute
> ok 23
> >- date check rows ok 24 - group by query prepare ok 25 - group by
> >query execute ok 26 - group by query returned rows ok 27 - data =20
> >sources test ok 28 - test ping method ok 29 - Attrib =20
> >odbc_ignore_named_placeholders 0 to start ok 30 - Attrib =20
> >odbc_ignore_named_placeholders set to 1 ok 31 - test connecting=20
> twice >to the same database ok 32 - database name is returned=20
> successfully >ok 33 - automatically finish when execute run again ok
> 34 - INVALID >DSN Test: [unixODBC][Driver Manager]Data source name=20
> not found, and no >default driver specified (SQL-IM002)(DBD:
> > db_login/SQLConnect err=3D-1)
> >#
> > ok 35 - Connection with DSN=3D
> > ok 36 - Connection with DSN=3D and uid and pwd are set ok >=20
> t/03dbatt........1..24 > ok 1 - use DBI; > ok 2 - use ODBCTEST; >=20
> ok 3 - Set Long Read Len > ok 4 - AutoCommit set on dbh > ok 5 -=20
> commitTest with AutoCommit > ok 6 - AutoCommit turned off > ok 7 -=20
> commitTest with AutoCommit off > ok 8 - Ensure autocommit back on >=20
> ok 9 - sth {NAME} returns ref to array isa ARRAY ok 10 - Column test
> >for table_info 0 ok 11 - Column test for table_info 1 ok 12 -=20
> Column >test for table_info 2 ok 13 - Column test for table_info 3 =20
> ok 14 - >Column test for table_info 4 ok 15 - must be some tables
out there?
> > ok 16 - tables returnes array
> > ok 17 - column info returns more than one row for test table ok 18
> - >primary key count ok 19 - prepare update statement returns valid=20
> sth >ok 20 - update statement has 0 columns returned ok 21 - update
> >statement has 0 columns returned 2 ok 22 - Verify odbc_query_timeout
> >set ok ok 23 - verify dbh setting for query_timeout passed to sth =20
> ok
> >24 - verify sth query_timeout can be overridden ok >=20
> t/05meth.........1..8 > ok 1 - use DBI; > ok 2 - delete prepared=20
> statement > ok 3 - Number of rows > 0 > ok 4 - Number of rows from=20
> DBI matches sth ok 5 - finished and rolled >back ok 6 - no error =20
> ok 7 - ?
> > ok 8 - ??
> > ok
> > t/07bind.........1..11
> > ok 1 - use ODBCTEST;
> > ok 2 - Create tables
> > ok 3 - Table insert test
> > ok 4 - Ensure long readlen set correctly ok 5 - Select tests ok 6
> - >Insert with bind tests ok 7 - select long test data ok 8 -=20
> update >long test data ok 9 - select long test data again ok 10 -=20
> ParamValues >test integer ok 11 - Paramvalues test string ok >=20
> t/08bind2........1..5 > ok 1 - use ODBCTEST; > ok 2 - use=20
> Data::Dumper; > ok 3 - insert \#1 various test data no dates, no long
> data ok 4 - >insert \#2 various test data no dates, with long data =20
> ok 5 - insert
> >\#3 various test data data with dates ok > t/09multi........1..7 =20
> > ok 1 - use strict; > ok 2 - use DBI; > ok 3 - use ODBCTEST; > ok=20
> 4 - count number of result sets > ok 5 - Multiple result sets with=20
> different column counts (less then > more) > ok 6 - Multiple result=20
> sets with different column counts (more then > less) > ok 7 -=20
> Multiple result sets with multiple cols, then second result set >with
> one col ok > t/20SqlServer....1..37 > ok 1 - use ODBCTEST; > ok 2=20
> - use Data::Dumper; > ok 3 - errors on data comparison > ok 4 -=20
> temporary table handling > Can't change param 1 maxlen (51->50) after
> first bind at >t/20SqlServer.t line 180.
> ># Looks like you planned 37 tests but only ran 4.
> ># Looks like your test died just after 4.
> > dubious
> > Test returned status 255 (wstat 65280, 0xff00) DIED.
FAILED
> >tests 5-37
> > Failed 33/37 tests, 10.81% okay
> > t/30Oracle.......1..4
> > ok 1 - use ODBCTEST;
> > ok 2 - use Data::Dumper;
> > ok 3 # skip Oracle tests not supported using Microsoft SQL Server =20
> ok
> >4 # skip Oracle tests not supported using Microsoft SQL Server ok
> > 2/4 skipped: Oracle tests not supported using Microsoft SQL
> >Server
> > Failed Test Stat Wstat Total Fail Failed List of Failed
> >
> =20
> >----------------------------------------------------------- ----------
> --
> >-
> > -------
> > t/20SqlServer.t 255 65280 37 66 178.38% 5-37
> > 2 subtests skipped.
> > Failed 1/9 test scripts, 88.89% okay. 33/137 subtests failed,=20
> 75.91% >okay.
> > make: *** [test_dynamic] Error 255
>=20