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

Re: SQLPutData bug ?

From: Hiroshi Inoue <Inoue(at)tpf(dot)co(dot)jp>
To: Mika Mantyla <mmantyla(at)soberit(dot)hut(dot)fi>
Cc: pgsql-bugs(at)postgresql(dot)org
Subject: Re: SQLPutData bug ?
Date: 2001-10-10 10:35:38
Message-ID: 3BC4247A.B43175A6@tpf.co.jp (view raw or flat)
Thread:
Lists: pgsql-bugspgsql-odbc
Mika Mantyla wrote:
> 
> Your name               : Mika M舅tyl

> 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

I don't think it's preferable to call SQLPutData with length 0
for any dbms. Why is the #ifdef needed ?

> 
>             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 );

                                     Why &val not val ?

regards,
Hiroshi Inoue

In response to

Responses

pgsql-odbc by date

Next:From: Alejandro Alfonso FernandezDate: 2001-10-10 11:13:07
Subject: PgSQL vs Ms.Access slow in search
Previous:From: Alejandro Alfonso FernandezDate: 2001-10-10 10:00:02
Subject: PgSQL vs Ms.Access slow in search

pgsql-bugs by date

Next:From: Mika MantylaDate: 2001-10-10 11:46:42
Subject: Re: SQLPutData bug ?
Previous:From: Mika MantylaDate: 2001-10-10 08:15:33
Subject: SQLPutData bug ?

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