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 -- [email protected]
To unsubscribe send an email to [email protected]