From: | Mika Mantyla <mmantyla(at)soberit(dot)hut(dot)fi> |
---|---|
To: | Hiroshi Inoue <Inoue(at)tpf(dot)co(dot)jp> |
Cc: | pgsql-bugs(at)postgresql(dot)org |
Subject: | Re: SQLPutData bug ? |
Date: | 2001-10-10 11:46:42 |
Message-ID: | 3BC43522.2010500@soberit.hut.fi |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs pgsql-odbc |
Hiroshi Inoue wrote:
> Mika Mantyla wrote:
>
>>Your name : Mika Ma"ntyla"
>>
>
>>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 ?
If I remove the #ifdef, I sometimes get segmentation fault from
st.ParamData(&pos) which calls SQLParamData.
This segmentation fault from SQLParamData only comes with large values
of variable pos e.g 358228.
So it actually could be a problem with the SQLParamData and large values.
>
>
>> 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 ?
Pointer to pointer. Tried chaning that, and it really broke to hole
application down.
--
Mika Ma"ntyla" || SoberIT
09-451 6001 || Spektri Kvartti 3330a
From | Date | Subject | |
---|---|---|---|
Next Message | Bruce Momjian | 2001-10-10 19:45:22 | Re: [tim@perdue.net: Re: mysql2pgsql tool] |
Previous Message | Hiroshi Inoue | 2001-10-10 10:35:38 | Re: SQLPutData bug ? |
From | Date | Subject | |
---|---|---|---|
Next Message | Michael Davis | 2001-10-10 14:16:28 | Re: PgSQL vs Ms.Access slow in search |
Previous Message | Alejandro Alfonso Fernandez | 2001-10-10 11:13:07 | PgSQL vs Ms.Access slow in search |