Changeset: 1bd0575cc683 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1bd0575cc683
Modified Files:
        clients/odbc/driver/ODBCConvert.c
Branch: Apr2012
Log Message:

ODBC: the SQL_ATTR_PARAM_BIND_OFFSET_PTR value also covers length of parameters.


diffs (60 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
@@ -2715,7 +2715,7 @@ ODBCStore(ODBCStmt *stmt,
 {
        ODBCDescRec *ipdrec, *apdrec;
        SQLPOINTER ptr;
-       SQLLEN *indicator_ptr;
+       SQLLEN *strlen_or_ind_ptr;
        SQLUINTEGER bind_type;
        SQLSMALLINT ctype, sqltype;
        char *sval = NULL;
@@ -2742,11 +2742,11 @@ ODBCStore(ODBCStmt *stmt,
        ptr = apdrec->sql_desc_data_ptr;
        if (ptr && offset)
                ptr = (SQLPOINTER) ((char *) ptr + offset + row * (bind_type == 
SQL_BIND_BY_COLUMN ? sizeof(SQLPOINTER) : bind_type));
-       indicator_ptr = apdrec->sql_desc_indicator_ptr;
-       if (indicator_ptr && offset)
-               indicator_ptr = (SQLLEN *) ((char *) indicator_ptr + offset + 
row * (bind_type == SQL_BIND_BY_COLUMN ? sizeof(SQLINTEGER) : bind_type));
+       strlen_or_ind_ptr = apdrec->sql_desc_indicator_ptr;
+       if (strlen_or_ind_ptr && offset)
+               strlen_or_ind_ptr = (SQLLEN *) ((char *) strlen_or_ind_ptr + 
offset + row * (bind_type == SQL_BIND_BY_COLUMN ? sizeof(SQLINTEGER) : 
bind_type));
        if (ptr == NULL &&
-           (indicator_ptr == NULL || *indicator_ptr != SQL_NULL_DATA)) {
+           (strlen_or_ind_ptr == NULL || *strlen_or_ind_ptr != SQL_NULL_DATA)) 
{
                /* COUNT field incorrect */
                addStmtError(stmt, "07002", NULL, 0);
                return SQL_ERROR;
@@ -2771,7 +2771,7 @@ ODBCStore(ODBCStmt *stmt,
                break;
        }
 
-       if (indicator_ptr != NULL && *indicator_ptr == SQL_NULL_DATA) {
+       if (strlen_or_ind_ptr != NULL && *strlen_or_ind_ptr == SQL_NULL_DATA) {
                assigns(buf, bufpos, buflen, "NULL", stmt);
                *bufp = buf;
                *bufposp = bufpos;
@@ -2779,16 +2779,20 @@ ODBCStore(ODBCStmt *stmt,
                return SQL_SUCCESS;
        }
 
+       strlen_or_ind_ptr = apdrec->sql_desc_octet_length_ptr;
+       if (strlen_or_ind_ptr && offset)
+               strlen_or_ind_ptr = (SQLLEN *) ((char *) strlen_or_ind_ptr + 
offset + row * (bind_type == SQL_BIND_BY_COLUMN ? sizeof(SQLINTEGER) : 
bind_type));
+
        switch (ctype) {
        case SQL_C_CHAR:
        case SQL_C_BINARY:
-               slen = apdrec->sql_desc_octet_length_ptr ? 
*apdrec->sql_desc_octet_length_ptr : SQL_NTS;
+               slen = strlen_or_ind_ptr ? *strlen_or_ind_ptr : SQL_NTS;
                sval = (char *) ptr;
                fixODBCstring(sval, slen, SQLLEN, addStmtError, stmt, return 
SQL_ERROR);
                break;
 #ifdef WITH_WCHAR
        case SQL_C_WCHAR:
-               slen = apdrec->sql_desc_octet_length_ptr ? 
*apdrec->sql_desc_octet_length_ptr : SQL_NTS;
+               slen = strlen_or_ind_ptr ? *strlen_or_ind_ptr : SQL_NTS;
                sval = (char *) ptr;
                fixWcharIn((SQLWCHAR *) ptr, slen, char, sval, addStmtError, 
stmt, return SQL_ERROR);
                break;
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to