On 12/05/11 21:39, eric.b...@barclayscapital.com wrote:
Posted this in the Google Group, but not sure if it's going through, so I 
apologize for the duplicate if that's the case.

We're continuing with our struggles to get Perl working properly to connect to MS 
SQL server, and have come up against a nasty bug that results in segmentation 
faults when attempting to do a $dbh->do(...) to set TEXTSIZE or truncate tables.

I'm running the following:
   Perl            : 5.012003    (x86_64-linux)
   OS              : linux       (2.6.18-194.el5)
   DBI             : 1.616
   DBD::ODBC       : 1.29
   EasySoft ODBC driver: 1.3

MS SQL Server 2008.

The following code generates a segfault when _ExecDirect is called at 
DBD/ODBC.pm at line 396.

my $dbh = DBI->connect("dbi:ODBC:MSSQL", $user, $password) || die "Error connecting: 
$!";

$dbh->{LongReadLen} = 25000;
$sql = 'SELECT @@TEXTSIZE';
$sth = $dbh->prepare($sql);
$sth->execute();

print "SQL1: $sql:\n";
while ( @row = $sth->fetchrow_array ) {
     print join( ", ", @row ), "\n";
}

$sql = 'set textsize 100';
print "SQL2: $sql:\n";
$sth = $dbh->do($sql);
warn 0;

And the output is:

$ ./set_text_size_test.pl
SQL1: SELECT @@TEXTSIZE:
-1
SQL2: set textsize 100:
Segmentation fault (core dumped)

and the "0" is never printed.

Running this in the Perl debugger shows me that it dies at DBD::ODBC at line 
396, at which point it calls is an XS method defined in ODBC.c on line 133:

void
_ExecDirect( dbh, stmt )
SV *        dbh
SV *        stmt
CODE:
{
    STRLEN lna;
    /*char *pstmt = SvOK(stmt) ? SvPV(stmt,lna) : "";*/
    ST(0) = sv_2mortal(newSViv( (IV)dbd_db_execdirect( dbh, stmt ) ) );
}

Anyone have any idea what might be going on here?

Also, notice that the initial "SELECT @@TEXTSIZE" returns -1, which is an 
unusual value.

Thanks for any help you might be able to provide.

Eric

Eric,

It does not segfault for me with DBD::ODBC 1.30_1 and our 1.4.18 driver. I've 
passed your email onto Easysoft support and they should contact you soon.

Martin
--
Martin J. Evans
Easysoft Limited
http://www.easysoft.com

Reply via email to