Skip site navigation (1) Skip section navigation (2)

SQLPutData bug ?

From: Mika Mantyla <mmantyla(at)soberit(dot)hut(dot)fi>
To: pgsql-bugs(at)postgresql(dot)org
Subject: SQLPutData bug ?
Date: 2001-10-10 08:15:33
Message-ID: 3BC403A5.6060602@soberit.hut.fi (view raw or flat)
Thread:
Lists: pgsql-bugspgsql-odbc
Your name               : Mika Mäntylä
Your email address      : mmantyla(at)soberit(dot)hut(dot)fi


System Configuration
---------------------
   Architecture (example: Intel Pentium)         : AMD Athlon

   Operating System (example: Linux 2.0.26 ELF)  : RH 7.1

   PostgreSQL version (example: PostgreSQL-7.1.3): PostgreSQL-7.1.3

   Compiler used (example:  gcc 2.95.2)          : gcc-2.96-97.1 (Used 
pre-build binaries)


FULL description of your problem:
------------------------------------------------
We have ODBC application that is currently running on top of commercial 
Solid and Sybase databases.With some fixes I got this application to 
also work on PSQL on top of W2K. Now I'm trying to get the app to work 
in Linux with libiodbc-3.0.5-1 and postgresql-odbc-7.1.3

However there seems to be problem with SQLPutData call. This was already 
a problem in W2k with PSQL (ODBC 07_01_0006), and you can see the ugly 
fix I made in the code. In Linux the same fix causes the program to get 
segmentation fault in st.ParamData call. If I remove the fix the final 
st.PutData call in the loop fails.

I think this could be problem related to odbc somehow, but I really 
don't know.


-------------------------------------------------------
/**** Code with the problem **************************
     else
     {
         char buf[256];
         int got;
         pos = 0;
         do
         {
	    // This copies data to buffer buf nothing more	
             got = data->GetData( pos, buf, sizeof(buf) );

#ifdef PSQL
#ifdef WIN32
	    if (got == 0)
	      break;
#endif //WIN32
#endif //PSQL

	    st.PutData( buf, got );
             pos += got;
         } while( got > 0 );
     }
     rc = st.ParamData( &pos );

-----------------------------------------------------
/**** PutData call ************************/
void
DBStmt::PutData( void *buf, int bufsize )
{
     t_usec = 0;
     do
     {
         rc = SQLPutData( hstmt, buf, bufsize );
     } while( rc==SQL_STILL_EXECUTING && SocketOK() );

     if( rc!=SQL_SUCCESS )
         throw SQLExc( "SQLPutData failed", rc, hdbc, hstmt );
}
-----------------------------------------------------
/**** ParamData call ************************/
int
DBStmt::ParamData( long *val )
{
     t_usec = 0;
     do
     {
         rc = SQLParamData( hstmt, (void**)&val );
     } while( rc==SQL_STILL_EXECUTING && SocketOK() );

     if( rc!=SQL_SUCCESS && rc!=SQL_NEED_DATA )
         throw SQLExc( "SQLParamData failed", rc, hdbc, hstmt );

     return rc;
}


-- 
Mika Mäntylä || SoberIT
09-451 6001  || Spektri Kvartti 3330a




Responses

pgsql-odbc by date

Next:From: Alejandro Alfonso FernandezDate: 2001-10-10 10:00:02
Subject: PgSQL vs Ms.Access slow in search
Previous:From: Hiroshi InoueDate: 2001-10-10 01:36:42
Subject: Re: ODBC ServerSide Cursors Error

pgsql-bugs by date

Next:From: Hiroshi InoueDate: 2001-10-10 10:35:38
Subject: Re: SQLPutData bug ?
Previous:From: Ralf MillerDate: 2001-10-10 08:11:31
Subject: probably a bug of data-type serial

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group