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