Changeset: 53c2716da3fb for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/53c2716da3fb
Modified Files:
        clients/odbc/driver/ODBCDesc.c
        clients/odbc/driver/SQLExecute.c
Branch: Jun2023
Log Message:

Attempt to fix ODBC lengths for varchar columns.


diffs (42 lines):

diff --git a/clients/odbc/driver/ODBCDesc.c b/clients/odbc/driver/ODBCDesc.c
--- a/clients/odbc/driver/ODBCDesc.c
+++ b/clients/odbc/driver/ODBCDesc.c
@@ -227,7 +227,7 @@ ODBCLength(ODBCDescRec *rec, int lengtht
        case SQL_VARCHAR:
        case SQL_LONGVARCHAR:
                if (lengthtype == SQL_DESC_OCTET_LENGTH)
-                       return rec->sql_desc_length * 6;
+                       return rec->sql_desc_length * 4;
                else
                        return rec->sql_desc_length;
        case SQL_WCHAR:
diff --git a/clients/odbc/driver/SQLExecute.c b/clients/odbc/driver/SQLExecute.c
--- a/clients/odbc/driver/SQLExecute.c
+++ b/clients/odbc/driver/SQLExecute.c
@@ -376,9 +376,23 @@ ODBCInitResult(ODBCStmt *stmt)
 
                /* this must come after other fields have been
                 * initialized */
-               rec->sql_desc_length = ODBCLength(rec, SQL_DESC_LENGTH);
-               rec->sql_desc_display_size = ODBCLength(rec, 
SQL_DESC_DISPLAY_SIZE);
-               rec->sql_desc_octet_length = ODBCLength(rec, 
SQL_DESC_OCTET_LENGTH);
+               if (rec->sql_desc_concise_type == SQL_CHAR ||
+                   rec->sql_desc_concise_type == SQL_VARCHAR ||
+                   rec->sql_desc_concise_type == SQL_LONGVARCHAR ||
+                   rec->sql_desc_concise_type == SQL_WCHAR ||
+                   rec->sql_desc_concise_type == SQL_WVARCHAR ||
+                   rec->sql_desc_concise_type == SQL_WLONGVARCHAR) {
+                       /* for strings, get the display size from what
+                        * the server told us the size is for this
+                        * column, and derive the octet length from
+                        * that */
+                       rec->sql_desc_display_size = mapi_get_len(hdl, i);
+                       rec->sql_desc_octet_length = 4 * 
rec->sql_desc_display_size;
+               } else {
+                       rec->sql_desc_length = ODBCLength(rec, SQL_DESC_LENGTH);
+                       rec->sql_desc_display_size = ODBCLength(rec, 
SQL_DESC_DISPLAY_SIZE);
+                       rec->sql_desc_octet_length = ODBCLength(rec, 
SQL_DESC_OCTET_LENGTH);
+               }
                if (rec->sql_desc_length == 0) {
                        rec->sql_desc_length = SQL_NO_TOTAL;
                        rec->sql_desc_display_size = SQL_NO_TOTAL;
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to