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