Changeset: 9bc045ce3ea0 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9bc045ce3ea0
Modified Files:
        configure.ag
        gdk/gdk_atoms.c
        gdk/gdk_cbp.c
        gdk/gdk_tm.c
        monetdb5/mal/mal.c
        monetdb5/mal/mal_debugger.c
        monetdb5/mal/mal_function.c
        monetdb5/mal/mal_instruction.c
        monetdb5/optimizer/opt_dataflow.c
Branch: headless
Log Message:

Merge with default branch.


diffs (truncated from 13598 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,13 +231,18 @@ 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 lengthtype)
 {
        switch (rec->sql_desc_concise_type) {
        case SQL_CHAR:
        case SQL_VARCHAR:
        case SQL_LONGVARCHAR:
+               if (lengthtype == SQL_DESC_OCTET_LENGTH)
+                       return rec->sql_desc_length * 6;
+               else
+                       return rec->sql_desc_length;
        case SQL_WCHAR:
        case SQL_WVARCHAR:
        case SQL_WLONGVARCHAR:
@@ -247,71 +252,214 @@ ODBCDisplaySize(ODBCDescRec *rec)
                return rec->sql_desc_length;
        case SQL_DECIMAL:
        case SQL_NUMERIC:
-               return rec->sql_desc_length;
+               return rec->sql_desc_length + (lengthtype == SQL_DESC_LENGTH ? 
0 : 2);
        case SQL_BIT:
                return 1;
        case SQL_TINYINT:
-               return 3;
+               switch (lengthtype) {
+               case SQL_DESC_LENGTH:
+                       return 3;
+               case SQL_DESC_DISPLAY_SIZE:
+                       return 4;
+               case SQL_DESC_OCTET_LENGTH:
+                       return 1;
+               }
+               break;
        case SQL_SMALLINT:
-               return 5;
+               switch (lengthtype) {
+               case SQL_DESC_LENGTH:
+                       return 5;
+               case SQL_DESC_DISPLAY_SIZE:
+                       return 5 + !rec->sql_desc_unsigned;
+               case SQL_DESC_OCTET_LENGTH:
+                       return 2;
+               }
+               break;
        case SQL_INTEGER:
-               return 10;
+               switch (lengthtype) {
+               case SQL_DESC_LENGTH:
+                       return 10;
+               case SQL_DESC_DISPLAY_SIZE:
+                       return 10 + !rec->sql_desc_unsigned;
+               case SQL_DESC_OCTET_LENGTH:
+                       return 4;
+               }
+               break;
        case SQL_BIGINT:
-               return rec->sql_desc_unsigned ? 20 : 19;
+               switch (lengthtype) {
+               case SQL_DESC_LENGTH:
+                       return 19 + (rec->sql_desc_unsigned != 0);
+               case SQL_DESC_DISPLAY_SIZE:
+                       return 20;
+               case SQL_DESC_OCTET_LENGTH:
+                       return 20;
+               }
+               break;
        case SQL_REAL:
-               return 7;
+               switch (lengthtype) {
+               case SQL_DESC_LENGTH:
+                       return 7;
+               case SQL_DESC_DISPLAY_SIZE:
+                       /* sign, 7 digits, decimal point, E, sign, 2 digits */
+                       return 14;
+               case SQL_DESC_OCTET_LENGTH:
+                       return 4;
+               }
+               break;
        case SQL_FLOAT:
        case SQL_DOUBLE:
-               return 15;
+               switch (lengthtype) {
+               case SQL_DESC_LENGTH:
+                       return 15;
+               case SQL_DESC_DISPLAY_SIZE:
+                       /* sign, 15 digits, decimal point, E, sign, 3 digits */
+                       return 24;
+               case SQL_DESC_OCTET_LENGTH:
+                       return 8;
+               }
+               break;
        case SQL_TYPE_DATE:
-               return 10;      /* strlen("yyyy-mm-dd") */
+               if (lengthtype == SQL_DESC_OCTET_LENGTH)
+                       return 6;
+               else {
+                       /* strlen("yyyy-mm-dd") */
+                       return 10;
+               }
        case SQL_TYPE_TIME:
-               return 12;      /* strlen("hh:mm:ss.fff") */
+               if (lengthtype == SQL_DESC_OCTET_LENGTH)
+                       return 6;
+               else {
+                       /* strlen("hh:mm:ss.fff") */
+                       return 12;
+               }
        case SQL_TYPE_TIMESTAMP:
-               return 23;      /* strlen("yyyy-mm-dd hh:mm:ss.fff") */
+               if (lengthtype == SQL_DESC_OCTET_LENGTH)
+                       return 16;
+               else {
+                       /* strlen("yyyy-mm-dd hh:mm:ss.fff") */
+                       return 23;
+               }
        case SQL_INTERVAL_SECOND:
+               if (lengthtype == SQL_DESC_OCTET_LENGTH)
+                       return 34;
                /* 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:
+               if (lengthtype == SQL_DESC_OCTET_LENGTH)
+                       return 34;
                /* 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:
+               if (lengthtype == SQL_DESC_OCTET_LENGTH)
+                       return 34;
                /* 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:
+               if (lengthtype == SQL_DESC_OCTET_LENGTH)
+                       return 34;
                /* 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:
+               if (lengthtype == SQL_DESC_OCTET_LENGTH)
+                       return 34;
                /* 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:
+               if (lengthtype == SQL_DESC_OCTET_LENGTH)
+                       return 34;
                /* 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:
+               if (lengthtype == SQL_DESC_OCTET_LENGTH)
+                       return 34;
                /* 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:
+               if (lengthtype == SQL_DESC_OCTET_LENGTH)
+                       return 34;
                /* 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:
+               if (lengthtype == SQL_DESC_OCTET_LENGTH)
+                       return 34;
                /* 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:
+               if (lengthtype == SQL_DESC_OCTET_LENGTH)
+                       return 34;
                /* 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:
+               if (lengthtype == SQL_DESC_OCTET_LENGTH)
+                       return 34;
                /* 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:
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to