psqlodbc driver returning empty string

From: Zahid Khan <khanzahid235(at)yahoo(dot)com>
To: pgsql-odbc(at)postgresql(dot)org
Subject: psqlodbc driver returning empty string
Date: 2009-05-14 13:44:40
Message-ID: 922469.19241.qm@web54506.mail.re2.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-odbc


Hi All,

I am facing a issue in psqlodbc driver, that when i try to get the value of same colum twice throug ADO,odbc driver sends the empty value on second iteration.e.g if we get 'value1' of
colum 'a' and we try to fetch the same value through ADO in loop then
we will get a empty string.

After investigation ,I found that odbc driver is explicit returning
NO_DATA_FOUND on the column if that is already fetched .following is the code snippt in convert.c.

if (pgdc->data_left == 0)
        {
            if (pgdc->ttlbuf != NULL)
            {
                free(pgdc->ttlbuf);
                pgdc->ttlbuf = NULL;
                pgdc->ttlbuflen = 0;
            }
            pgdc->data_left = -2;        /* needed by ADO ? */
            return COPY_NO_DATA_FOUND;
        }

 We can fix this
by not returning NO_DATA_FOUND on the column value which is already
fetched .We can allow the driver to copy same value in client buffer
even that was fetched already.I have written C code to test this
scenario.Following is the code snippet which will help in more
understanding.

        rc=SQLFetch(*(*hStmt));

        if(SQL_NO_DATA == rc)

        {

            printf("No Data...\r\n");

            return 0;

        }   

Till here lets say we have fetched the data on driver.

Now following call of  SQLGetData() will copy the value of colum '1' (second param) into the client buffer.which is good.

        SQLGetData( *(*hStmt),1,SQL_C_CHAR,szData,sizeof(szData),&cbData);

        printf("Date one call = [%s]\n",szData);

   

Now we have same following call of SQLGetData() and trying to get same
colum('1') second time.But the driver is returing NO_DATA_FOUND in code
and no string copied in buffer.

        SQLGetData( *(*hStmt),1,SQL_C_CHAR,szData,sizeof(szData),&cbData);

        printf("Data 2 call = [%s]\n",szData);

       

I hope I am able to describe the whole scenario.We can fix this by not
returning NO_DATA_FOUND. But I wanted to confirm that if NO_DATA_FOUND is explicitly returned.

Thanks,
Zahid K.

Responses

Browse pgsql-odbc by date

  From Date Subject
Next Message imad 2009-05-14 14:52:01 Re: psqlodbc driver returning empty string
Previous Message prashanth k p 2009-05-11 11:57:52 Re: client encoding mismatch