Changeset: 0be9028dca99 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0be9028dca99
Modified Files:
        clients/odbc/driver/SQLExecute.c
        clients/odbc/driver/SQLPrepare.c
Branch: Mar2011
Log Message:

SQL_DESC_OCTET_LENGTH should give the size in bytes required to copy the data.
This fixes bug 2677.


diffs (42 lines):

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
@@ -232,7 +232,16 @@
                 * initialized */
                rec->sql_desc_length = ODBCDisplaySize(rec);
                rec->sql_desc_display_size = rec->sql_desc_length;
-               rec->sql_desc_octet_length = rec->sql_desc_length;
+               if (rec->sql_desc_concise_type == SQL_CHAR ||
+                   rec->sql_desc_concise_type == SQL_VARCHAR ||
+                   rec->sql_desc_concise_type == SQL_LONGVARCHAR) {
+                       /* in theory, each character (really: Unicode
+                        * code point) could need 6 bytes in the UTF-8
+                        * encoding, plus we need a byte for the
+                        * terminating NUL byte */
+                       rec->sql_desc_octet_length = 6 * rec->sql_desc_length + 
1;
+               } else
+                       rec->sql_desc_octet_length = rec->sql_desc_length;
 
                rec++;
        }
diff --git a/clients/odbc/driver/SQLPrepare.c b/clients/odbc/driver/SQLPrepare.c
--- a/clients/odbc/driver/SQLPrepare.c
+++ b/clients/odbc/driver/SQLPrepare.c
@@ -253,7 +253,16 @@
                 * initialized */
                rec->sql_desc_length = ODBCDisplaySize(rec);
                rec->sql_desc_display_size = rec->sql_desc_length;
-               rec->sql_desc_octet_length = rec->sql_desc_length;
+               if (rec->sql_desc_concise_type == SQL_CHAR ||
+                   rec->sql_desc_concise_type == SQL_VARCHAR ||
+                   rec->sql_desc_concise_type == SQL_LONGVARCHAR) {
+                       /* in theory, each character (really: Unicode
+                        * code point) could need 6 bytes in the UTF-8
+                        * encoding, plus we need a byte for the
+                        * terminating NUL byte */
+                       rec->sql_desc_octet_length = 6 * rec->sql_desc_length + 
1;
+               } else
+                       rec->sql_desc_octet_length = rec->sql_desc_length;
        }
 
        /* update the internal state */
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to