Changeset: 6d3b69bb2195 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6d3b69bb2195
Modified Files:
Branch: default
Log Message:
Merge with Aug2011 branch.
diffs (truncated from 356 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
@@ -1120,7 +1120,7 @@ ODBCFetch(ODBCStmt *stmt,
case SQL_INTERVAL_YEAR:
case SQL_INTERVAL_YEAR_TO_MONTH:
case SQL_INTERVAL_MONTH:
- parsemonthinterval(&nval, &ival, sql_type);
+ parsemonthinterval(&nval, &ival, SQL_INTERVAL_MONTH);
break;
case SQL_INTERVAL_DAY:
case SQL_INTERVAL_DAY_TO_HOUR:
@@ -1466,16 +1466,11 @@ ODBCFetch(ODBCStmt *stmt,
}
}
break;
- case SQL_INTERVAL_YEAR: {
- unsigned f;
-
- for (i = 1, f = 10; ival.intval.year_month.year >= f; f
*= 10, i++)
- ;
+ case SQL_INTERVAL_YEAR:
sz = snprintf((char *) ptr, buflen,
- "INTERVAL %s'%u' YEAR(%d)",
+ "INTERVAL %s'%u' YEAR",
ival.interval_sign ? "-" : "",
- (unsigned int)
ival.intval.year_month.year,
- i);
+ (unsigned int)
ival.intval.year_month.year);
if (sz < 0 || sz >= buflen) {
/* Numeric value out of range */
@@ -1490,18 +1485,12 @@ ODBCFetch(ODBCStmt *stmt,
if (lenp)
*lenp = sz;
break;
- }
- case SQL_INTERVAL_YEAR_TO_MONTH: {
- unsigned f;
-
- for (i = 1, f = 10; ival.intval.year_month.year >= f; f
*= 10, i++)
- ;
+ case SQL_INTERVAL_YEAR_TO_MONTH:
sz = snprintf((char *) ptr, buflen,
- "INTERVAL %s'%u-%02u' YEAR(%d) TO MONTH",
+ "INTERVAL %s'%u-%02u' YEAR TO MONTH",
ival.interval_sign ? "-" : "",
(unsigned int)
ival.intval.year_month.year,
- (unsigned int)
ival.intval.year_month.month,
- i);
+ (unsigned int)
ival.intval.year_month.month);
if (sz < 0 || sz >= buflen) {
/* Numeric value out of range */
@@ -1516,20 +1505,12 @@ ODBCFetch(ODBCStmt *stmt,
if (lenp)
*lenp = sz;
break;
- }
- case SQL_INTERVAL_MONTH: {
- unsigned f;
- unsigned months = (unsigned int)
- (12 * ival.intval.year_month.year +
- ival.intval.year_month.month);
-
- for (i = 1, f = 10; months >= f; f *= 10, i++)
- ;
+ case SQL_INTERVAL_MONTH:
sz = snprintf((char *) ptr, buflen,
- "INTERVAL %s'%u' MONTH(%d)",
+ "INTERVAL %s'%u' MONTH",
ival.interval_sign ? "-" : "",
- months,
- i);
+ (unsigned int) (12 *
ival.intval.year_month.year +
+
ival.intval.year_month.month));
if (sz < 0 || sz >= buflen) {
/* Numeric value out of range */
@@ -1544,17 +1525,11 @@ ODBCFetch(ODBCStmt *stmt,
if (lenp)
*lenp = sz;
break;
- }
- case SQL_INTERVAL_DAY: {
- unsigned f;
-
- for (i = 1, f = 10; ival.intval.day_second.day >= f; f
*= 10, i++)
- ;
+ case SQL_INTERVAL_DAY:
sz = snprintf((char *) ptr, buflen,
- "INTERVAL %s'%u' DAY(%d)",
+ "INTERVAL %s'%u' DAY",
ival.interval_sign ? "-" : "",
- (unsigned int) ival.intval.day_second.day,
- i);
+ (unsigned int)
ival.intval.day_second.day);
if (sz < 0 || sz >= buflen) {
/* Numeric value out of range */
@@ -1569,18 +1544,12 @@ ODBCFetch(ODBCStmt *stmt,
if (lenp)
*lenp = sz;
break;
- }
- case SQL_INTERVAL_DAY_TO_HOUR: {
- unsigned f;
-
- for (i = 1, f = 10; ival.intval.day_second.day >= f; f
*= 10, i++)
- ;
+ case SQL_INTERVAL_DAY_TO_HOUR:
sz = snprintf((char *) ptr, buflen,
- "INTERVAL %s'%u %02u' DAY(%d) TO HOUR",
+ "INTERVAL %s'%u %02u' DAY TO HOUR",
ival.interval_sign ? "-" : "",
(unsigned int) ival.intval.day_second.day,
- (unsigned int)
ival.intval.day_second.hour,
- i);
+ (unsigned int)
ival.intval.day_second.hour);
if (sz < 0 || sz >= buflen) {
/* Numeric value out of range */
@@ -1595,19 +1564,13 @@ ODBCFetch(ODBCStmt *stmt,
if (lenp)
*lenp = sz;
break;
- }
- case SQL_INTERVAL_DAY_TO_MINUTE: {
- unsigned f;
-
- for (i = 1, f = 10; ival.intval.day_second.day >= f; f
*= 10, i++)
- ;
+ case SQL_INTERVAL_DAY_TO_MINUTE:
sz = snprintf((char *) ptr, buflen,
- "INTERVAL %s'%u %02u:%02u' DAY(%d) TO
MINUTE",
+ "INTERVAL %s'%u %02u:%02u' DAY TO MINUTE",
ival.interval_sign ? "-" : "",
(unsigned int) ival.intval.day_second.day,
(unsigned int)
ival.intval.day_second.hour,
- (unsigned int)
ival.intval.day_second.minute,
- i);
+ (unsigned int)
ival.intval.day_second.minute);
if (sz < 0 || sz >= buflen) {
/* Numeric value out of range */
@@ -1622,17 +1585,12 @@ ODBCFetch(ODBCStmt *stmt,
if (lenp)
*lenp = sz;
break;
- }
case SQL_INTERVAL_DAY_TO_SECOND: {
- unsigned f;
int w;
data = (char *) ptr;
- for (i = 1, f = 10; ival.intval.day_second.day >= f; f
*= 10, i++)
- ;
- w = 17 + (i >= 10); /* space needed for "'DAY(N) TO
SECOND" */
- w += 3 + (ivalprec >= 10); /* space for additional (N)
*/
+ w = 14; /* space needed for "'DAY TO SECOND" */
sz = snprintf(data, buflen, "INTERVAL %s'%u
%02u:%02u:%02u",
ival.interval_sign ? "-" : "",
@@ -1669,24 +1627,17 @@ ODBCFetch(ODBCStmt *stmt,
buflen -= sz;
}
/* this should now fit */
- sz = snprintf(data, buflen, "' DAY(%d) TO SECOND(%d)",
i, ivalprec);
+ sz = snprintf(data, buflen, "' DAY TO SECOND");
if (lenp && sz > 0)
*lenp += sz;
break;
}
- case SQL_INTERVAL_HOUR: {
- unsigned f;
- unsigned hours = (unsigned)
- (24 * ival.intval.day_second.day +
- ival.intval.day_second.hour);
-
- for (i = 1, f = 10; hours >= f; f *= 10, i++)
- ;
+ case SQL_INTERVAL_HOUR:
sz = snprintf((char *) ptr, buflen,
- "INTERVAL %s'%u' HOUR(%d)",
+ "INTERVAL %s'%u' HOUR",
ival.interval_sign ? "-" : "",
- hours,
- i);
+ (unsigned) (24 *
ival.intval.day_second.day +
+ ival.intval.day_second.hour));
if (sz < 0 || sz >= buflen) {
/* Numeric value out of range */
@@ -1701,21 +1652,13 @@ ODBCFetch(ODBCStmt *stmt,
if (lenp)
*lenp = sz;
break;
- }
- case SQL_INTERVAL_HOUR_TO_MINUTE: {
- unsigned f;
- unsigned hours = (unsigned)
- (24 * ival.intval.day_second.day +
- ival.intval.day_second.hour);
-
- for (i = 1, f = 10; hours >= f; f *= 10, i++)
- ;
+ case SQL_INTERVAL_HOUR_TO_MINUTE:
sz = snprintf((char *) ptr, buflen,
- "INTERVAL %s'%u:%02u' HOUR(%d) TO MINUTE",
+ "INTERVAL %s'%u:%02u' HOUR TO MINUTE",
ival.interval_sign ? "-" : "",
- hours,
- (unsigned int)
ival.intval.day_second.minute,
- i);
+ (unsigned) (24 *
ival.intval.day_second.day +
+ ival.intval.day_second.hour),
+ (unsigned int)
ival.intval.day_second.minute);
if (sz < 0 || sz >= buflen) {
/* Numeric value out of range */
@@ -1730,24 +1673,17 @@ ODBCFetch(ODBCStmt *stmt,
if (lenp)
*lenp = sz;
break;
- }
case SQL_INTERVAL_HOUR_TO_SECOND: {
- unsigned f;
int w;
- unsigned hours = (unsigned)
- (24 * ival.intval.day_second.day +
- ival.intval.day_second.hour);
data = (char *) ptr;
- for (i = 1, f = 10; hours >= f; f *= 10, i++)
- ;
- w = 18 + (i >= 10); /* space needed for "'HOUR(N)
TO SECOND" */
- w += 3 + (ivalprec >= 10); /* space for additional (N)
*/
+ w = 15; /* space needed for "'HOUR TO SECOND" */
sz = snprintf(data, buflen, "INTERVAL %s'%u:%02u:%02u",
ival.interval_sign ? "-" : "",
- hours,
+ (unsigned) (24 *
ival.intval.day_second.day +
+ ival.intval.day_second.hour),
(unsigned int)
ival.intval.day_second.minute,
(unsigned int)
ival.intval.day_second.second);
if (sz < 0 || sz + w >= buflen) {
@@ -1779,25 +1715,18 @@ ODBCFetch(ODBCStmt *stmt,
buflen -= sz;
}
/* this should now fit */
- sz = snprintf(data, buflen, "' HOUR(%d) TO SECOND(%d)",
i, ivalprec);
+ sz = snprintf(data, buflen, "' HOUR TO SECOND");
if (lenp && sz > 0)
*lenp += sz;
break;
}
- case SQL_INTERVAL_MINUTE: {
- unsigned f;
- unsigned mins = (unsigned)
- (60 * (24 * ival.intval.day_second.day +
- ival.intval.day_second.hour) +
- ival.intval.day_second.minute);
-
- for (i = 1, f = 10; mins >= f; f *= 10, i++)
- ;
+ case SQL_INTERVAL_MINUTE:
sz = snprintf((char *) ptr, buflen,
- "INTERVAL %s'%u' MINUTE(%d)",
+ "INTERVAL %s'%u' MINUTE",
ival.interval_sign ? "-" : "",
- mins,
- i);
+ (unsigned) (60 * (24 *
ival.intval.day_second.day +
+
ival.intval.day_second.hour) +
+
ival.intval.day_second.minute));
if (sz < 0 || sz >= buflen) {
/* Numeric value out of range */
@@ -1812,25 +1741,18 @@ ODBCFetch(ODBCStmt *stmt,
if (lenp)
*lenp = sz;
break;
- }
case SQL_INTERVAL_MINUTE_TO_SECOND: {
- unsigned f;
int w;
- unsigned mins = (unsigned)
- (60 * (24 * ival.intval.day_second.day +
- ival.intval.day_second.hour) +
- ival.intval.day_second.minute);
data = (char *) ptr;
- for (i = 1, f = 10; mins >= f; f *= 10, i++)
- ;
- w = 20 + (i >= 10); /* space needed for "'MINUTE(N)
TO SECOND" */
- w += 3 + (ivalprec >= 10); /* space for additional (N)
*/
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list