Changeset: 250e4f6bb7db for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=250e4f6bb7db
Modified Files:
        configure.ag
Branch: default
Log Message:

Merged from Aug2011


diffs (truncated from 12469 to 300 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
@@ -1199,7 +1199,7 @@ ODBCFetch(ODBCStmt *stmt,
                case SQL_BINARY:
                case SQL_VARBINARY:
                case SQL_LONGVARBINARY: {
-                       size_t i;
+                       size_t k;
                        int n;
                        unsigned char c = 0;
                        SQLLEN j = 0;
@@ -1214,13 +1214,13 @@ ODBCFetch(ODBCStmt *stmt,
 #endif
                                return SQL_ERROR;
                        }
-                       for (i = 0; i < datalen; i++) {
-                               if ('0' <= data[i] && data[i] <= '9')
-                                       n = data[i] - '0';
-                               else if ('A' <= data[i] && data[i] <= 'F')
-                                       n = data[i] - 'A' + 10;
-                               else if ('a' <= data[i] && data[i] <= 'f')
-                                       n = data[i] - 'a' + 10;
+                       for (k = 0; k < datalen; k++) {
+                               if ('0' <= data[k] && data[k] <= '9')
+                                       n = data[k] - '0';
+                               else if ('A' <= data[k] && data[k] <= 'F')
+                                       n = data[k] - 'A' + 10;
+                               else if ('a' <= data[k] && data[k] <= 'f')
+                                       n = data[k] - 'a' + 10;
                                else {
                                        /* should not happen */
                                        /* General error */
@@ -1231,7 +1231,7 @@ ODBCFetch(ODBCStmt *stmt,
 #endif
                                        return SQL_ERROR;
                                }
-                               if (i & 1) {
+                               if (k & 1) {
                                        c |= n;
                                        if (j < buflen)
                                                p[j] = c;
diff --git a/clients/odbc/driver/ODBCDbc.c b/clients/odbc/driver/ODBCDbc.c
--- a/clients/odbc/driver/ODBCDbc.c
+++ b/clients/odbc/driver/ODBCDbc.c
@@ -34,7 +34,7 @@
  * This file contains the functions which operate on
  * ODBC connection structures/objects (see ODBCDbc.h).
  *
- * Author: Martin van Dinther
+ * Author: Martin van Dinther, Sjoerd Mullender
  * Date  : 30 aug 2002
  *
  **********************************************/
diff --git a/clients/odbc/driver/ODBCDbc.h b/clients/odbc/driver/ODBCDbc.h
--- a/clients/odbc/driver/ODBCDbc.h
+++ b/clients/odbc/driver/ODBCDbc.h
@@ -34,7 +34,7 @@
  * This file contains the ODBC connection structure
  * and function prototypes on this structure.
  *
- * Author: Martin van Dinther
+ * Author: Martin van Dinther, Sjoerd Mullender
  * Date  : 30 aug 2002
  *
  **********************************************/
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
@@ -231,8 +231,9 @@ addODBCDescRec(ODBCDesc *desc, SQLSMALLI
        return &desc->descRec[recno];
 }
 
+/* Return either the column size or display size for a column or parameter. */
 SQLULEN
-ODBCDisplaySize(ODBCDescRec *rec)
+ODBCLength(ODBCDescRec *rec, int display)
 {
        switch (rec->sql_desc_concise_type) {
        case SQL_CHAR:
@@ -247,67 +248,121 @@ ODBCDisplaySize(ODBCDescRec *rec)
                return rec->sql_desc_length;
        case SQL_DECIMAL:
        case SQL_NUMERIC:
-               return rec->sql_desc_length;
+               return rec->sql_desc_length + (display ? 2 : 0);
        case SQL_BIT:
                return 1;
        case SQL_TINYINT:
-               return 3;
+               return 3 + (display && !rec->sql_desc_unsigned);
        case SQL_SMALLINT:
-               return 5;
+               return 5 + (display && !rec->sql_desc_unsigned);
        case SQL_INTEGER:
-               return 10;
+               return 10 + (display && !rec->sql_desc_unsigned);
        case SQL_BIGINT:
-               return rec->sql_desc_unsigned ? 20 : 19;
+               return display || rec->sql_desc_unsigned ? 20 : 19;
        case SQL_REAL:
-               return 7;
+               /* display: sign, 7 digits, decimal point, E, sign, 2 digits */
+               return display ? 14 : 7;
        case SQL_FLOAT:
        case SQL_DOUBLE:
-               return 15;
+               /* display: sign, 15 digits, decimal point, E, sign, 3 digits */
+               return display ? 24 : 15;
        case SQL_TYPE_DATE:
-               return 10;      /* strlen("yyyy-mm-dd") */
+               /* strlen("yyyy-mm-dd") */
+               return 10;
        case SQL_TYPE_TIME:
-               return 12;      /* strlen("hh:mm:ss.fff") */
+               /* strlen("hh:mm:ss.fff") */
+               return 12;
        case SQL_TYPE_TIMESTAMP:
-               return 23;      /* strlen("yyyy-mm-dd hh:mm:ss.fff") */
+               /* strlen("yyyy-mm-dd hh:mm:ss.fff") */
+               return 23;
        case SQL_INTERVAL_SECOND:
                /* strlen("INTERVAL -'sss[.fff]' SECOND(p,q)") */
-               return 11 + 13 + (rec->sql_desc_datetime_interval_precision > 
10) + (rec->sql_desc_precision > 10) + 
rec->sql_desc_datetime_interval_precision + (rec->sql_desc_precision > 0 ? 
rec->sql_desc_precision + 1 : 0);
+               return 11 + 13 +
+                       (rec->sql_desc_datetime_interval_precision > 10) +
+                       (rec->sql_desc_precision > 10) +
+                       rec->sql_desc_datetime_interval_precision +
+                       (rec->sql_desc_precision > 0 ?
+                        rec->sql_desc_precision + 1 :
+                        0);
        case SQL_INTERVAL_DAY_TO_SECOND:
                /* strlen("INTERVAL -'ddd hh:mm:ss[.fff]' DAY(p) TO SECOND(q)") 
*/
-               return 11 + 21 + (rec->sql_desc_datetime_interval_precision > 
10) + (rec->sql_desc_precision > 10) + 
rec->sql_desc_datetime_interval_precision + 9 + (rec->sql_desc_precision > 0 ? 
rec->sql_desc_precision + 1 : 0);
+               return 11 + 21 +
+                       (rec->sql_desc_datetime_interval_precision > 10) +
+                       (rec->sql_desc_precision > 10) +
+                       rec->sql_desc_datetime_interval_precision +
+                       9 +
+                       (rec->sql_desc_precision > 0 ?
+                        rec->sql_desc_precision + 1 :
+                        0);
        case SQL_INTERVAL_HOUR_TO_SECOND:
                /* strlen("INTERVAL -'hhh:mm:ss[.fff]' HOUR(p) TO SECOND(q)") */
-               return 11 + 22 + (rec->sql_desc_datetime_interval_precision > 
10) + (rec->sql_desc_precision > 10) + 
rec->sql_desc_datetime_interval_precision + 6 + (rec->sql_desc_precision > 0 ? 
rec->sql_desc_precision + 1 : 0);
+               return 11 + 22 +
+                       (rec->sql_desc_datetime_interval_precision > 10) +
+                       (rec->sql_desc_precision > 10) +
+                       rec->sql_desc_datetime_interval_precision +
+                       6 +
+                       (rec->sql_desc_precision > 0 ?
+                        rec->sql_desc_precision + 1 :
+                        0);
        case SQL_INTERVAL_MINUTE_TO_SECOND:
                /* strlen("INTERVAL -'mmm:ss[.fff]' MINUTE(p) TO SECOND(q)") */
-               return 11 + 24 + (rec->sql_desc_datetime_interval_precision > 
10) + (rec->sql_desc_precision > 10) + 
rec->sql_desc_datetime_interval_precision + 3 + (rec->sql_desc_precision > 0 ? 
rec->sql_desc_precision + 1 : 0);
+               return 11 + 24 +
+                       (rec->sql_desc_datetime_interval_precision > 10) +
+                       (rec->sql_desc_precision > 10) +
+                       rec->sql_desc_datetime_interval_precision +
+                       3 +
+                       (rec->sql_desc_precision > 0 ?
+                        rec->sql_desc_precision + 1 :
+                        0);
        case SQL_INTERVAL_YEAR:
                /* strlen("INTERVAL -'yyy' YEAR(p)") */
-               return 11 + 9 + (rec->sql_desc_datetime_interval_precision > 
10) + rec->sql_desc_datetime_interval_precision;
+               return 11 + 9 +
+                       (rec->sql_desc_datetime_interval_precision > 10) +
+                       rec->sql_desc_datetime_interval_precision;
        case SQL_INTERVAL_MONTH:
                /* strlen("INTERVAL -'yyy' MONTH(p)") */
-               return 11 + 10 + (rec->sql_desc_datetime_interval_precision > 
10) + rec->sql_desc_datetime_interval_precision;
+               return 11 + 10 +
+                       (rec->sql_desc_datetime_interval_precision > 10) +
+                       rec->sql_desc_datetime_interval_precision;
        case SQL_INTERVAL_DAY:
                /* strlen("INTERVAL -'yyy' DAY(p)") */
-               return 11 + 8 + (rec->sql_desc_datetime_interval_precision > 
10) + rec->sql_desc_datetime_interval_precision;
+               return 11 + 8 +
+                       (rec->sql_desc_datetime_interval_precision > 10) +
+                       rec->sql_desc_datetime_interval_precision;
        case SQL_INTERVAL_HOUR:
                /* strlen("INTERVAL -'yyy' HOUR(p)") */
-               return 11 + 9 + (rec->sql_desc_datetime_interval_precision > 
10) + rec->sql_desc_datetime_interval_precision;
+               return 11 + 9 +
+                       (rec->sql_desc_datetime_interval_precision > 10) +
+                       rec->sql_desc_datetime_interval_precision;
        case SQL_INTERVAL_MINUTE:
                /* strlen("INTERVAL -'yyy' MINUTE(p)") */
-               return 11 + 11 + (rec->sql_desc_datetime_interval_precision > 
10) + rec->sql_desc_datetime_interval_precision;
+               return 11 + 11 +
+                       (rec->sql_desc_datetime_interval_precision > 10) +
+                       rec->sql_desc_datetime_interval_precision;
        case SQL_INTERVAL_YEAR_TO_MONTH:
                /* strlen("INTERVAL -'yyy' YEAR(p) TO MONTH") */
-               return 11 + 18 + (rec->sql_desc_datetime_interval_precision > 
10) + rec->sql_desc_datetime_interval_precision + 3;
+               return 11 + 18 +
+                       (rec->sql_desc_datetime_interval_precision > 10) +
+                       rec->sql_desc_datetime_interval_precision +
+                       3;
        case SQL_INTERVAL_DAY_TO_HOUR:
                /* strlen("INTERVAL -'yyy' DAY(p) TO HOUR") */
-               return 11 + 16 + (rec->sql_desc_datetime_interval_precision > 
10) + rec->sql_desc_datetime_interval_precision + 3;
+               return 11 + 16 +
+                       (rec->sql_desc_datetime_interval_precision > 10) +
+                       rec->sql_desc_datetime_interval_precision +
+                       3;
        case SQL_INTERVAL_HOUR_TO_MINUTE:
                /* strlen("INTERVAL -'yyy' HOUR(p) TO MINUTE") */
-               return 11 + 19 + (rec->sql_desc_datetime_interval_precision > 
10) + rec->sql_desc_datetime_interval_precision + 3;
+               return 11 + 19 +
+                       (rec->sql_desc_datetime_interval_precision > 10) +
+                       rec->sql_desc_datetime_interval_precision +
+                       3;
        case SQL_INTERVAL_DAY_TO_MINUTE:
                /* strlen("INTERVAL -'yyy' DAY(p) TO MINUTE") */
-               return 11 + 18 + (rec->sql_desc_datetime_interval_precision > 
10) + rec->sql_desc_datetime_interval_precision + 6;
+               return 11 + 18 +
+                       (rec->sql_desc_datetime_interval_precision > 10) +
+                       rec->sql_desc_datetime_interval_precision +
+                       6;
        case SQL_GUID:
                /* strlen("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee") */
                return 36;
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
@@ -99,7 +99,7 @@ ODBCError *getDescError(ODBCDesc *desc);
 void destroyODBCDesc(ODBCDesc *desc);
 void setODBCDescRecCount(ODBCDesc *desc, int count);
 ODBCDescRec *addODBCDescRec(ODBCDesc *desc, SQLSMALLINT recno);
-SQLULEN ODBCDisplaySize(ODBCDescRec *rec);
+SQLULEN ODBCLength(ODBCDescRec *rec, int display);
 
 SQLRETURN SQLGetDescField_(ODBCDesc *desc, SQLSMALLINT RecordNumber, 
SQLSMALLINT FieldIdentifier, SQLPOINTER Value, SQLINTEGER BufferLength, 
SQLINTEGER *StringLength);
 SQLRETURN SQLSetDescField_(ODBCDesc *desc, SQLSMALLINT RecordNumber, 
SQLSMALLINT FieldIdentifier, SQLPOINTER Value, SQLINTEGER BufferLength);
diff --git a/clients/odbc/driver/ODBCEnv.c b/clients/odbc/driver/ODBCEnv.c
--- a/clients/odbc/driver/ODBCEnv.c
+++ b/clients/odbc/driver/ODBCEnv.c
@@ -34,7 +34,7 @@
  * This file contains the functions which operate on
  * ODBC environment structures/objects (see ODBCEnv.h).
  *
- * Author: Martin van Dinther
+ * Author: Martin van Dinther, Sjoerd Mullender
  * Date  : 30 aug 2002
  *
  **********************************************/
diff --git a/clients/odbc/driver/ODBCEnv.h b/clients/odbc/driver/ODBCEnv.h
--- a/clients/odbc/driver/ODBCEnv.h
+++ b/clients/odbc/driver/ODBCEnv.h
@@ -34,7 +34,7 @@
  * This file contains the ODBC environment structure
  * and function prototypes on this structure.
  *
- * Author: Martin van Dinther
+ * Author: Martin van Dinther, Sjoerd Mullender
  * Date  : 30 aug 2002
  *
  **********************************************/
diff --git a/clients/odbc/driver/ODBCError.c b/clients/odbc/driver/ODBCError.c
--- a/clients/odbc/driver/ODBCError.c
+++ b/clients/odbc/driver/ODBCError.c
@@ -34,7 +34,7 @@
  * This file contains the functions which operate on
  * ODBC error structures/objects (see ODBCError.h)
  *
- * Author: Martin van Dinther
+ * Author: Martin van Dinther, Sjoerd Mullender
  * Date  : 30 aug 2002
  *
  **********************************************/
diff --git a/clients/odbc/driver/ODBCError.h b/clients/odbc/driver/ODBCError.h
--- a/clients/odbc/driver/ODBCError.h
+++ b/clients/odbc/driver/ODBCError.h
@@ -39,7 +39,7 @@
  * can result in multiple ODBC errors. These are stored
  * as a linked list.
  *
- * Author: Martin van Dinther
+ * Author: Martin van Dinther, Sjoerd Mullender
  * Date  : 30 aug 2002
  *
  **********************************************/
diff --git a/clients/odbc/driver/ODBCGlobal.h b/clients/odbc/driver/ODBCGlobal.h
--- a/clients/odbc/driver/ODBCGlobal.h
+++ b/clients/odbc/driver/ODBCGlobal.h
@@ -34,7 +34,7 @@
  * The global MonetDB ODBC include file which
  * includes all needed external include files.
  *
- * Author: Martin van Dinther
+ * Author: Martin van Dinther, Sjoerd Mullender
  * Date  : 30 aug 2002
  *
  **********************************************/
diff --git a/clients/odbc/driver/ODBCStmt.c b/clients/odbc/driver/ODBCStmt.c
--- a/clients/odbc/driver/ODBCStmt.c
+++ b/clients/odbc/driver/ODBCStmt.c
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to