Changeset: 13337bea12f3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=13337bea12f3
Modified Files:
        clients/odbc/driver/ODBCConvert.c
        clients/odbc/driver/ODBCDesc.h
        clients/odbc/driver/SQLFetch.c
Branch: Apr2019
Log Message:

First time fetching data for a column, return it, even if zero length.
Fix for bug 6690.


diffs (57 lines):

diff --git a/clients/odbc/driver/ODBCConvert.c 
b/clients/odbc/driver/ODBCConvert.c
--- a/clients/odbc/driver/ODBCConvert.c
+++ b/clients/odbc/driver/ODBCConvert.c
@@ -1282,14 +1282,16 @@ ODBCFetch(ODBCStmt *stmt,
                case SQL_WVARCHAR:
                case SQL_WLONGVARCHAR:
                case SQL_GUID:
-                       if (irdrec->already_returned >= datalen) {
+                       if (irdrec->already_returned < 0)
+                               irdrec->already_returned = 0;
+                       else if ((size_t) irdrec->already_returned >= datalen) {
                                /* no more data to return */
                                if (type == SQL_C_WCHAR && ptr)
                                        free(ptr);
                                return SQL_NO_DATA;
                        }
                        data += irdrec->already_returned;
-                       datalen -= irdrec->already_returned;
+                       datalen -= (size_t) irdrec->already_returned;
                        if (ptr) {
                                copyString(data, datalen, ptr, buflen, lenp,
                                           SQLLEN, addStmtError, stmt,
@@ -1919,7 +1921,9 @@ ODBCFetch(ODBCStmt *stmt,
                case SQL_LONGVARBINARY:
                        break;
                }
-               if (irdrec->already_returned >= datalen) {
+               if (irdrec->already_returned < 0)
+                       irdrec->already_returned = 0;
+               else if ((size_t) irdrec->already_returned >= datalen) {
                        /* no more data to return */
                        return SQL_NO_DATA;
                }
diff --git a/clients/odbc/driver/ODBCDesc.h b/clients/odbc/driver/ODBCDesc.h
--- a/clients/odbc/driver/ODBCDesc.h
+++ b/clients/odbc/driver/ODBCDesc.h
@@ -48,7 +48,7 @@ typedef struct {
        SQLSMALLINT sql_desc_unnamed;
        SQLSMALLINT sql_desc_unsigned;
        SQLSMALLINT sql_desc_updatable;
-       size_t already_returned;
+       ssize_t already_returned;
 } ODBCDescRec;
 
 typedef struct {
diff --git a/clients/odbc/driver/SQLFetch.c b/clients/odbc/driver/SQLFetch.c
--- a/clients/odbc/driver/SQLFetch.c
+++ b/clients/odbc/driver/SQLFetch.c
@@ -115,7 +115,7 @@ MNDBFetch(ODBCStmt *stmt, SQLUSMALLINT *
                stmt->rowSetSize++;
 
                for (i = 1; i <= ird->sql_desc_count; i++)
-                       ird->descRec[i].already_returned = 0;
+                       ird->descRec[i].already_returned = -1;
 
                for (i = 1; i <= ard->sql_desc_count; i++) {
                        rec = &ard->descRec[i];
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to