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

Merged from Mar2011


diffs (91 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
@@ -29,15 +29,19 @@
 #if SIZEOF_INT==8
 # define ULL_CONSTANT(val)     (val)
 # define O_ULLFMT              "u"
+# define O_ULLCAST     (unsigned int)
 #elif SIZEOF_LONG==8
 # define ULL_CONSTANT(val)     (val##UL)
 # define O_ULLFMT              "lu"
+# define O_ULLCAST     (unsigned long)
 #elif defined(HAVE_LONG_LONG)
 # define ULL_CONSTANT(val)     (val##ULL)
 # define O_ULLFMT              "llu"
+# define O_ULLCAST     (unsigned long long)
 #elif defined(HAVE___INT64)
 # define ULL_CONSTANT(val)     (val##ui64)
 # define O_ULLFMT              "I64u"
+# define O_ULLCAST     (unsigned __int64)
 #endif
 
 #define MAXBIGNUM10    ULL_CONSTANT(1844674407370955161)       /* (2**64-1)/10 
*/
@@ -257,7 +261,9 @@
        if (sscanf(data, "{d '%hd-%hu-%hu'}%n", &dval->year, &dval->month, 
&dval->day, &n) < 3 &&
            sscanf(data, "%hd-%hu-%hu%n", &dval->year, &dval->month, 
&dval->day, &n) < 3)
                return 0;
-       if (dval->month == 0 || dval->month > 12 || dval->day == 0 || dval->day 
> monthlengths[dval->month] || (dval->month == 2 && !isLeap(dval->year) && 
dval->day == 29))
+       if (dval->month == 0 || dval->month > 12 ||
+           dval->day == 0 || dval->day > monthlengths[dval->month] ||
+           (dval->month == 2 && !isLeap(dval->year) && dval->day == 29))
                return 0;
        data += n;
        while (space(*data))
@@ -309,7 +315,10 @@
        if (sscanf(data, "{TS '%hd-%hu-%hu %hu:%hu:%hu%n", &tsval->year, 
&tsval->month, &tsval->day, &tsval->hour, &tsval->minute, &tsval->second, &n) < 
6 &&
            sscanf(data, "%hd-%hu-%hu %hu:%hu:%hu%n", &tsval->year, 
&tsval->month, &tsval->day, &tsval->hour, &tsval->minute, &tsval->second, &n) < 
6)
                return 0;
-       if (tsval->month == 0 || tsval->month > 12 || tsval->day == 0 || 
tsval->day > monthlengths[tsval->month] || (tsval->month == 2 && 
!isLeap(tsval->year) && tsval->day == 29) || tsval->hour > 23 || tsval->minute 
> 59 || tsval->second > 61)
+       if (tsval->month == 0 || tsval->month > 12 ||
+           tsval->day == 0 || tsval->day > monthlengths[tsval->month] ||
+           (tsval->month == 2 && !isLeap(tsval->year) && tsval->day == 29) ||
+           tsval->hour > 23 || tsval->minute > 59 || tsval->second > 61)
                return 0;
        braces = *data == '{';
        tsval->fraction = 0;
@@ -1246,7 +1255,7 @@
 
                        for (n = 0, f = 1; n < nval.scale; n++)
                                f *= 10;
-                       sz = snprintf(data, buflen, "%s%" O_ULLFMT, nval.sign ? 
"" : "-", nval.val / f);
+                       sz = snprintf(data, buflen, "%s%" O_ULLFMT, nval.sign ? 
"" : "-", O_ULLCAST (nval.val / f));
                        if (sz < 0 || sz >= buflen) {
                                /* Numeric value out of range */
                                addStmtError(stmt, "22003", NULL, 0);
@@ -1265,7 +1274,7 @@
                                if (lenp)
                                        *lenp += nval.scale + 1;
                                if (buflen > 2)
-                                       sz = (SQLLEN) snprintf(data, buflen, 
".%0*" O_ULLFMT, nval.scale, nval.val % f);
+                                       sz = (SQLLEN) snprintf(data, buflen, 
".%0*" O_ULLFMT, nval.scale, O_ULLCAST (nval.val % f));
                                if (buflen <= 2 || sz < 0 || sz >= buflen) {
                                        data[buflen - 1] = 0;
                                        /* String data, right-truncated */
@@ -2682,10 +2691,10 @@
 
                        for (n = 0, f = 1; n < nval.scale; n++)
                                f *= 10;
-                       snprintf(data, sizeof(data), "%s%" O_ULLFMT, nval.sign 
? "" : "-", nval.val / f);
+                       snprintf(data, sizeof(data), "%s%" O_ULLFMT, nval.sign 
? "" : "-", O_ULLCAST (nval.val / f));
                        assigns(buf, bufpos, buflen, data, stmt);
                        if (nval.scale > 0) {
-                               snprintf(data, sizeof(data), ".%0*" O_ULLFMT, 
nval.scale, nval.val % f);
+                               snprintf(data, sizeof(data), ".%0*" O_ULLFMT, 
nval.scale, O_ULLCAST (nval.val % f));
                                assigns(buf, bufpos, buflen, data, stmt);
                        }
                        break;
@@ -3197,11 +3206,11 @@
                                        addStmtError(stmt, "22001", NULL, 0);
                                }
                        } else {
-                               snprintf(data, sizeof(data), "%s%" O_ULLFMT, 
nval.sign ? "" : "-", nval.val / f);
+                               snprintf(data, sizeof(data), "%s%" O_ULLFMT, 
nval.sign ? "" : "-", O_ULLCAST (nval.val / f));
                                assigns(buf, bufpos, buflen, data, stmt);
                                if (nval.scale > 0) {
                                        if (sqltype == SQL_DECIMAL) {
-                                               snprintf(data, sizeof(data), 
".%0*" O_ULLFMT, nval.scale, nval.val % f);
+                                               snprintf(data, sizeof(data), 
".%0*" O_ULLFMT, nval.scale, O_ULLCAST (nval.val % f));
                                                assigns(buf, bufpos, buflen, 
data, stmt);
                                        } else {
                                                /* Fractional truncation */
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to