PEPPLER.ORG
Michael Peppler
Sybase Consulting
Menu
Home
Sybase on Linux
Install Guide for Sybase on Linux
General Sybase Resources
General Perl Resources
Freeware
Sybperl
Sybase::Simple
DBD::Sybase
BCP Tool
Bug Tracker
Mailing List Archive
Downloads Directory
FAQs
Sybase on Linux FAQ
Sybperl FAQ
Personal
Michael Peppler's resume

sybperl-l Archive

Up    Prev    Next    

From: Michael Peppler <mpeppler at peppler dot org>
Subject: Re: ct_param problem
Date: Mar 19 2004 5:49PM

On Fri, 2004-03-19 at 09:19, Kiriakos Georgiou (Contractor) wrote:
> I recently upgraded from DBD-Sybase-0.91 and DBI-1.14 to
> 
> DBD-Sybase-1.02 and DBI-1.40
> 
> I tried to use 12.5.1 open client to connect to a 12.0 ASE server (we 
> are in transition from 12.0 to 12.5.1) but that was giving me the error 
> below.
> 
> -----------------
> [Fri Mar 19 11:05:42 2004] [notice] Accept mutex: fcntl (Default: fcntl)
> ct_param() failed! at 
> /usr/local/nrl/lib/perl5/site_perl/5.8.3/Apache/Session/Store/Sybase.pm 
> line 122.
> DBD::Sybase::st execute failed: OpenClient message: LAYER = (1) ORIGIN = 
> (1) SEVERITY = (1) NUMBER = (46)
> Server production, database
> Message String: ct_param(): user api layer: external error: An illegal 
> value of 0 was placed in the status field of the CS_DATAFMT structure.
> -----------------

> -----------------
> my $sth = $self->{dbh}->prepare(qq{
> UPDATE sessions SET a_session = $session->{serialized} WHERE id = ?
> });
> $sth->execute( $session->{data}->{_session_id} );
> -----------------

Oh - I think I know what the problem is.

The $session->{serialized} variable is a hex string, and I think it
overwrites some internal values somewhere, probably when doing the
statement prepare.

I would suggest as a work-around:

my $sth = $self->{dbh}->prepare(qq{
UPDATE sessions SET a_session = $session->{serialized} 
 WHERE id = $session->{data}->{_session_id}
});
$sth->execute( );

As Session::Store::Sybase can't use placeholders for the serialized
data, making this change won't really change much.

I'll see if I can reproduce it.

Also - if your sessions are under 16k in size you may be able to use
placeholders for the serialized data once you move your Sybase servers
to 12.5, although it may require some fiddling with proxy tables (unless
you want to use 16k page sizes for the server, of course).

Michael
-- 
Michael Peppler                              Data Migrations, Inc.
mpeppler@peppler.org                       http://www.peppler.org/
Sybase T-SQL/OpenClient/OpenServer/C/Perl developer available for short or 
long term contract positions - http://www.peppler.org/resume.html