Hi again. I've now had a chance to take a quick look at this. I can reproduce
with DBI 1.50 and DBD::ODBC 1.13 and it happens no matter what the underlying
ODBC driver is. It appears it is something specific to at least perl 5.8.8 as:

Your bound parameter is an undef and DBD::ODBC does:

svGrow(phs->sv, 50)

but 

SvLEN(phs->sv) returns 52!

and DBD::ODBC does not expect this.

Certainly does not happen in 5.8.7. I'm out of my depth for the moment on this
now. If any one has any ideas on this I'd appreciate them.

Martin
--
Martin J. Evans
Easysoft Ltd, UK
http://www.easysoft.com


On 06-Mar-2006 Martin J. Evans wrote:
> 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 [EMAIL PROTECTED] 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
>> 
>> Here is what we think is the relevant portion of the trace:
>> 
>>     >> bind_param_inout DISPATCH (DBI::st=HASH(0x8ac55d8) rc1/1 @5 g0 
>> ima1 pid#30101) at t/20SqlServer.t line 180
>>     -> bind_param_inout for DBD::ODBC::st 
>> (DBI::st=HASH(0x8ac55d8)~0x8ac5638 1 SCALAR(0x89a2d64) 50 4)
>> bind 1 <== '' (attribs: ), type 4
>>     <- bind_param_inout= 1 at t/20SqlServer.t line 180
>>     >> bind_param  DISPATCH (DBI::st=HASH(0x8ac55d8) rc1/1 @4 g0 ima1 
>> pid#30101) at t/20SqlServer.t line 181
>>     -> bind_param for DBD::ODBC::st (DBI::st=HASH(0x8ac55d8)~0x8ac5638 2 
>> 1 4)
>> bind 2 <== '1' (attribs: ), type 4
>>     <- bind_param= 1 at t/20SqlServer.t line 181
>>     >> execute     DISPATCH (DBI::st=HASH(0x8ac55d8) rc1/1 @1 g0 ima1041 
>> pid#30101) at t/20SqlServer.t line 183
>>     -> execute for DBD::ODBC::st (DBI::st=HASH(0x8ac55d8)~0x8ac5638)
>>     dbd_st_execute (outparams = 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=1, STy=INTEGER, CD=51, Sc=1, VM=51.
>>     SQLBindParameter: idx = 1: fParamType=2, name=1, fCtype=1, SQL_Type 
>> = 4, cbColDef=51, scale=1, rgbValue = 8af2d70, cbValue
>> Max=51, cbValue = 1
>>     Param value =
>>    rebind check char Param 1 ()
>> bind 2 <== 1 (size 1/4/0, ptype 5, otype 1, sqltype 4)
>> bind 2 <== '1' (len 1/3, null 0)
>>     bind 2: CTy=1, STy=INTEGER, CD=1, Sc=1, VM=1.
>>     SQLBindParameter: idx = 2: fParamType=1, name=2, fCtype=1, SQL_Type 
>> = 4, cbColDef=1, scale=1, rgbValue = 8af7680, cbValueM
>> ax=1, cbValue = 1
>>     Param value = 1
>>    rebind check char Param 2 (1)
>>     dbd_st_execute (for hstmt 145710992 before)...
>>     dbd_st_execute (for hstmt 145710992 after, rc = 0)...
>> dbd_error: err_rc=0 rc=0 s/d/e: 145710992/145541856/145540432
>> dbd_error: err_rc=0 rc=0 s/d/e: 0/145541856/145540432
>> dbd_error: err_rc=0 rc=0 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, SQLMoreResults == 100
>> dbd_error: err_rc=100 rc=0 s/d/e: 145710992/145541856/145540432
>> dbd_error: err_rc=100 rc=0 s/d/e: 0/145541856/145540432
>> dbd_error: err_rc=100 rc=0 s/d/e: 0/0/145540432
>>     dbd_describe sql 145710992: num_fields=0
>>     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= 1 at t/20SqlServer.t line 183
>>     >> bind_param_inout DISPATCH (DBI::st=HASH(0x8ac55d8) rc1/1 @5 g0 
>> ima1 pid#30101) at t/20SqlServer.t line 180
>>     -> bind_param_inout for DBD::ODBC::st 
>> (DBI::st=HASH(0x8ac55d8)~0x8ac5638 1 SCALAR(0x89a2d64) 50 4)
>> 
>> 
>> -----Original Message-----
>> From: Martin J. Evans [mailto:[EMAIL PROTECTED]
>> Sent: Friday, March 03, 2006 10:03 AM
>> To: dbi-users@perl.org
>> Subject: RE: [dbi] DBD::ODBC with Perl 5.8.8
>> 
>> Jonathan,
>> 
>> The test that fails works fine for me.
>> What ODBC driver are you using?
>> 
>> Strangely, what DBD::ODBC is saying is that you bound an in/out 
>> parameter of max size 50 then changed it to 51 but the code in 
>> 20SqlServer has a hard-wired 50 so somewhere a long the line the 50 that 
>> got into dbdimp.c got changed to 51.
>> 
>> A trace of the 20SqlServer test might help.
>> 
>> Martin
>> --
>> Martin J. Evans
>> Easysoft Ltd, UK
>> http://www.easysoft.com
>> 
>> 
>> 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 problem, but with perl
>>  > 5.8.8 I get the following from make test:
>>  >
>>  > make test TEST_VERBOSE=1
>>  > PERL_DL_NONLAZY=1 /usr/local/perl5.8.8/bin/perl 
>>  >"-MExtUtils::Command::MM" "-e" "test_harness(1, 'blib/lib', 
>>  >'blib/arch')" t/*.t
>>  > t/01base.........1..5
>>  > ok 1 - require DBI;
>>  > ok 2 - import DBI
>>  > ok 3 - DBI->internal is DBI::dr
>>  > ok 4 - Install ODBC driver OK
>>  > ok 5 - Version is not empty
>>  > ok
>>  > t/02simple.......1..36
>>  > ok 1 - use DBI;
>>  > ok 2 - use ODBCTEST;
>>  > 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 test data  ok 8 - select test
>>  >data  ok 9 - Set Long Read len  ok 10 - Set Long Truncok 1  ok 11 - Set
>>  >Print Error  ok 12 - Select Long 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
>>  >sources test  ok 28 - test ping method  ok 29 - Attrib
>>  >odbc_ignore_named_placeholders 0 to start  ok 30 - Attrib
>>  >odbc_ignore_named_placeholders set to 1  ok 31 - test connecting twice
>>  >to the same database  ok 32 - database name is returned successfully 
>>  >ok 33 - automatically finish when execute run again  ok 34 - INVALID
>>  >DSN Test: [unixODBC][Driver Manager]Data source name not  found, and no
>>  >default driver specified (SQL-IM002)(DBD:
>>  > db_login/SQLConnect err=-1)
>>  >#
>>  > ok 35 - Connection with DSN=
>>  > ok 36 - Connection with DSN= and uid and pwd are set  ok
>>  > t/03dbatt........1..24
>>  > ok 1 - use DBI;
>>  > ok 2 - use ODBCTEST;
>>  > ok 3 - Set Long Read Len
>>  > ok 4 - AutoCommit set on dbh
>>  > ok 5 - commitTest with AutoCommit
>>  > ok 6 - AutoCommit turned off
>>  > ok 7 - commitTest with AutoCommit off
>>  > ok 8 - Ensure autocommit back on
>>  > 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 - Column
>>  >test for table_info 2  ok 13 - Column test for table_info 3  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 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  ok
>>  >24 - verify sth query_timeout can be overridden  ok
>>  > t/05meth.........1..8
>>  > ok 1 - use DBI;
>>  > ok 2 - delete prepared statement
>>  > ok 3 - Number of rows > 0
>>  > ok 4 - Number of rows from DBI matches sth  ok 5 - finished and rolled
>>  >back  ok 6 - no error  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 - update
>>  >long test data  ok 9 - select long test data again  ok 10 - ParamValues
>>  >test integer  ok 11 - Paramvalues test string  ok
>>  > t/08bind2........1..5
>>  > ok 1 - use ODBCTEST;
>>  > ok 2 - use 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  ok 5 - insert
>>  >\#3 various test data data with dates  ok
>>  > t/09multi........1..7
>>  > ok 1 - use strict;
>>  > ok 2 - use DBI;
>>  > ok 3 - use ODBCTEST;
>>  > ok 4 - count number of result sets
>>  > ok 5 - Multiple result sets with different column counts (less then
>>  > more)
>>  > ok 6 - Multiple result sets with different column counts (more then
>>  > less)
>>  > ok 7 - Multiple result sets with multiple cols, then second result set 
>>  >with one col  ok
>>  > t/20SqlServer....1..37
>>  > ok 1 - use ODBCTEST;
>>  > ok 2 - use Data::Dumper;
>>  > ok 3 - errors on data comparison
>>  > ok 4 - 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  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
>>  >
>>  >-----------------------------------------------------------------------
>>  >-
>>  > -------
>>  > 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, 75.91% 
>>  >okay.
>>  > make: *** [test_dynamic] Error 255
>> 

Reply via email to