Changeset: b2acec955af0 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b2acec955af0
Modified Files:
        clients/odbc/driver/SQLGetFunctions.c
        gdk/gdk_aggr.c
        gdk/gdk_atoms.h
        gdk/gdk_heap.c
        gdk/gdk_unique.c
        monetdb5/mal/mal_debugger.c
        monetdb5/mal/mal_interpreter.c
        monetdb5/mal/mal_runtime.c
        monetdb5/modules/atoms/uuid.c
        monetdb5/modules/mal/mkey.c
        sql/common/sql_keyword.c
        sql/common/sql_list.c
        sql/server/sql_datetime.c
        sql/server/sql_decimal.c
        sql/test/pg_regress/Tests/interval.stable.err
        sql/test/pg_regress/Tests/interval.stable.err.int128
        sql/test/pg_regress/Tests/interval.stable.out
        sql/test/pg_regress/Tests/interval.stable.out.int128
        tools/merovingian/daemon/argvcmds.c
        tools/merovingian/daemon/handlers.c
        tools/merovingian/daemon/monetdbd.service.in
Branch: default
Log Message:

Merge with Jun2016 branch.


diffs (truncated from 618 to 300 lines):

diff --git a/clients/odbc/driver/SQLGetFunctions.c 
b/clients/odbc/driver/SQLGetFunctions.c
--- a/clients/odbc/driver/SQLGetFunctions.c
+++ b/clients/odbc/driver/SQLGetFunctions.c
@@ -399,7 +399,7 @@ SQLGetFunctions(SQLHDBC ConnectionHandle
                UWORD *p;
 
                for (p = FuncImplemented; p < 
&FuncImplemented[NFUNCIMPLEMENTED]; p++)
-                       FuncExistMap[*p >> 4] |= 1 << (*p & 0xF);
+                       FuncExistMap[*p >> 4] |= (UWORD) 1 << (*p & 0xF);
        }
 
        if (FunctionId == SQL_API_ODBC3_ALL_FUNCTIONS) {
diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -235,8 +235,8 @@ BATgroupaggrinit(BAT *b, BAT *g, BAT *e,
                                                }                       \
                                        } else {                        \
                                                if (nil_if_empty &&     \
-                                                   !(seen[gid >> 5] & (1 << 
(gid & 0x1F)))) { \
-                                                       seen[gid >> 5] |= 1 << 
(gid & 0x1F); \
+                                                   !(seen[gid >> 5] & (1U << 
(gid & 0x1F)))) { \
+                                                       seen[gid >> 5] |= 1U << 
(gid & 0x1F); \
                                                        sums[gid] = 0;  \
                                                }                       \
                                                if (sums[gid] != TYPE2##_nil) { 
\
@@ -275,8 +275,8 @@ BATgroupaggrinit(BAT *b, BAT *g, BAT *e,
                                                }                       \
                                        } else {                        \
                                                if (nil_if_empty &&     \
-                                                   !(seen[gid >> 5] & (1 << 
(gid & 0x1F)))) { \
-                                                       seen[gid >> 5] |= 1 << 
(gid & 0x1F); \
+                                                   !(seen[gid >> 5] & (1U << 
(gid & 0x1F)))) { \
+                                                       seen[gid >> 5] |= 1U << 
(gid & 0x1F); \
                                                        sums[gid] = 0;  \
                                                }                       \
                                                if (sums[gid] != TYPE2##_nil) { 
\
@@ -679,8 +679,8 @@ BATsum(void *res, int tp, BAT *b, BAT *s
                                        }                               \
                                } else {                                \
                                        if (nil_if_empty &&             \
-                                           !(seen[gid >> 5] & (1 << (gid & 
0x1F)))) { \
-                                               seen[gid >> 5] |= 1 << (gid & 
0x1F); \
+                                           !(seen[gid >> 5] & (1U << (gid & 
0x1F)))) { \
+                                               seen[gid >> 5] |= 1U << (gid & 
0x1F); \
                                                prods[gid] = 1;         \
                                        }                               \
                                        if (prods[gid] != TYPE2##_nil) { \
@@ -724,8 +724,8 @@ BATsum(void *res, int tp, BAT *b, BAT *s
                                                gid = (oid) i;          \
                                }                                       \
                                if (nil_if_empty &&                     \
-                                   !(seen[gid >> 5] & (1 << (gid & 0x1F)))) { \
-                                       seen[gid >> 5] |= 1 << (gid & 0x1F); \
+                                   !(seen[gid >> 5] & (1U << (gid & 0x1F)))) { 
\
+                                       seen[gid >> 5] |= 1U << (gid & 0x1F); \
                                        prods[gid] = 1;                 \
                                }                                       \
                                if (vals[i] == TYPE##_nil) {            \
@@ -776,8 +776,8 @@ BATsum(void *res, int tp, BAT *b, BAT *s
                                        }                               \
                                } else {                                \
                                        if (nil_if_empty &&             \
-                                           !(seen[gid >> 5] & (1 << (gid & 
0x1F)))) { \
-                                               seen[gid >> 5] |= 1 << (gid & 
0x1F); \
+                                           !(seen[gid >> 5] & (1U << (gid & 
0x1F)))) { \
+                                               seen[gid >> 5] |= 1U << (gid & 
0x1F); \
                                                prods[gid] = 1;         \
                                        }                               \
                                        if (prods[gid] != lng_nil) {    \
@@ -826,8 +826,8 @@ BATsum(void *res, int tp, BAT *b, BAT *s
                                        }                               \
                                } else {                                \
                                        if (nil_if_empty && \
-                                           !(seen[gid >> 5] & (1 << (gid & 
0x1F)))) { \
-                                               seen[gid >> 5] |= 1 << (gid & 
0x1F); \
+                                           !(seen[gid >> 5] & (1U << (gid & 
0x1F)))) { \
+                                               seen[gid >> 5] |= 1U << (gid & 
0x1F); \
                                                prods[gid] = 1;         \
                                        }                               \
                                        if (prods[gid] != TYPE2##_nil) { \
diff --git a/gdk/gdk_atoms.h b/gdk/gdk_atoms.h
--- a/gdk/gdk_atoms.h
+++ b/gdk/gdk_atoms.h
@@ -121,7 +121,7 @@ gdk_export int escapedStr(char *dst, con
 #ifdef HAVE_HGE
 #define GDK_hge_max ((((hge) 1) << 126) - 1 + \
                      (((hge) 1) << 126))
-#define GDK_hge_min (((hge) 1) << 127)
+#define GDK_hge_min (-GDK_hge_max-1)
 #endif
 #define GDK_dbl_max ((dbl) DBL_MAX)
 #define GDK_dbl_min (-GDK_dbl_max)
diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c
--- a/gdk/gdk_heap.c
+++ b/gdk/gdk_heap.c
@@ -770,7 +770,7 @@ HEAPwarm(Heap *h)
                int *lim = (int *) (h->base + h->free) - 4096;
 
                for (; cur < lim; cur += 4096)  /* try to schedule 4 parallel 
memory accesses */
-                       bogus_result += cur[0] + cur[1024] + cur[2048] + 
cur[3072];
+                       bogus_result |= cur[0] | cur[1024] | cur[2048] | 
cur[3072];
        }
        return bogus_result;
 }
diff --git a/gdk/gdk_unique.c b/gdk/gdk_unique.c
--- a/gdk/gdk_unique.c
+++ b/gdk/gdk_unique.c
@@ -189,8 +189,8 @@ BATunique(BAT *b, BAT *s)
                                        break;
                        }
                        val = ((const unsigned char *) vals)[i];
-                       if (!(seen[val >> 4] & (1 << (val & 0xF)))) {
-                               seen[val >> 4] |= 1 << (val & 0xF);
+                       if (!(seen[val >> 4] & (1U << (val & 0xF)))) {
+                               seen[val >> 4] |= 1U << (val & 0xF);
                                o = i + b->hseqbase;
                                bunfastapp(bn, &o);
                                if (bn->batCount == 256) {
@@ -226,8 +226,8 @@ BATunique(BAT *b, BAT *s)
                                        break;
                        }
                        val = ((const unsigned short *) vals)[i];
-                       if (!(seen[val >> 4] & (1 << (val & 0xF)))) {
-                               seen[val >> 4] |= 1 << (val & 0xF);
+                       if (!(seen[val >> 4] & (1U << (val & 0xF)))) {
+                               seen[val >> 4] |= 1U << (val & 0xF);
                                o = i + b->hseqbase;
                                bunfastapp(bn, &o);
                                if (bn->batCount == 65536) {
@@ -316,18 +316,18 @@ BATunique(BAT *b, BAT *s)
                nme = BBP_physical(b->batCacheid);
                nmelen = strlen(nme);
                if (ATOMbasetype(b->ttype) == TYPE_bte) {
-                       mask = 1 << 8;
+                       mask = (BUN) 1 << 8;
                        cmp = NULL; /* no compare needed, "hash" is perfect */
                } else if (ATOMbasetype(b->ttype) == TYPE_sht) {
-                       mask = 1 << 16;
+                       mask = (BUN) 1 << 16;
                        cmp = NULL; /* no compare needed, "hash" is perfect */
                } else {
                        if (s)
                                mask = HASHmask(s->batCount);
                        else
                                mask = HASHmask(b->batCount);
-                       if (mask < (1 << 16))
-                               mask = 1 << 16;
+                       if (mask < ((BUN) 1 << 16))
+                               mask = (BUN) 1 << 16;
                }
                if ((hp = GDKzalloc(sizeof(Heap))) == NULL ||
                    (hp->filename = GDKmalloc(nmelen + 30)) == NULL ||
diff --git a/monetdb5/modules/atoms/uuid.c b/monetdb5/modules/atoms/uuid.c
--- a/monetdb5/modules/atoms/uuid.c
+++ b/monetdb5/modules/atoms/uuid.c
@@ -231,10 +231,14 @@ UUIDhash(const void *v)
        const uuid *u = (const uuid *) v;
        unsigned int u1, u2, u3, u4;
 
-       u1 = u->u[0] << 24 | u->u[1] << 16 | u->u[2] << 8 | u->u[3];
-       u2 = u->u[4] << 24 | u->u[5] << 16 | u->u[6] << 8 | u->u[7];
-       u3 = u->u[8] << 24 | u->u[9] << 16 | u->u[10] << 8 | u->u[11];
-       u4 = u->u[12] << 24 | u->u[13] << 16 | u->u[14] << 8 | u->u[15];
+       u1 = (unsigned int) u->u[0] << 24 | (unsigned int) u->u[1] << 16 |
+               (unsigned int) u->u[2] << 8 | (unsigned int) u->u[3];
+       u2 = (unsigned int) u->u[4] << 24 | (unsigned int) u->u[5] << 16 |
+               (unsigned int) u->u[6] << 8 | (unsigned int) u->u[7];
+       u3 = (unsigned int) u->u[8] << 24 | (unsigned int) u->u[9] << 16 |
+               (unsigned int) u->u[10] << 8 | (unsigned int) u->u[11];
+       u4 = (unsigned int) u->u[12] << 24 | (unsigned int) u->u[13] << 16 |
+               (unsigned int) u->u[14] << 8 | (unsigned int) u->u[15];
        return (BUN) mix_int(u1 ^ u2 ^ u3 ^ u4);
 }
 
diff --git a/monetdb5/modules/mal/mkey.c b/monetdb5/modules/mal/mkey.c
--- a/monetdb5/modules/mal/mkey.c
+++ b/monetdb5/modules/mal/mkey.c
@@ -25,6 +25,14 @@
 #define MKEYHASH_hge(valp)     (((lng*)(valp))[0] ^ ((lng*)(valp))[1])
 #endif
 
+#undef GDK_ROTATE
+
+static inline lng
+GDK_ROTATE(lng x, int y, int z, lng m)
+{
+       return ((lng) ((ulng) x << y) & ~m) | ((x >> z) & m);
+}
+
 /* TODO: nil handling. however; we do not want to lose time in 
bulk_rotate_xor_hash with that */
 str
 MKEYrotate(lng *res, const lng *val, const int *n)
diff --git a/sql/common/sql_keyword.c b/sql/common/sql_keyword.c
--- a/sql/common/sql_keyword.c
+++ b/sql/common/sql_keyword.c
@@ -21,7 +21,7 @@ static int
 keyword_key(char *k, int *l)
 {
        char *s = k;
-       int h = 1;
+       unsigned int h = 1;
 
        while (*k) {
                h <<= 5;
@@ -31,7 +31,7 @@ keyword_key(char *k, int *l)
        *l = (int) (k - s);
        h <<= 4;
        h += *l;
-       return (h < 0) ? -h : h;
+       return (int) ((h & 0x80000000) ? ~h + 1 : h);
 }
 
 void
diff --git a/sql/common/sql_list.c b/sql/common/sql_list.c
--- a/sql/common/sql_list.c
+++ b/sql/common/sql_list.c
@@ -334,7 +334,7 @@ int
 list_match(list *l1, list *l2, fcmp cmp)
 {
        node *n, *m;
-       int chk = 0;
+       ulng chk = 0;
 
        if (l1 == l2)
                return 0;
@@ -345,8 +345,9 @@ list_match(list *l1, list *l2, fcmp cmp)
        for (n = l1->h; n; n = n->next) {
                int pos = 0, fnd = 0;
                for (m = l2->h; m; m = m->next, pos++) {
-                       if (!(chk&(1<<pos)) && cmp(n->data, m->data) == 0) {
-                               chk &= 1<<pos;
+                       if (!(chk & ((ulng) 1 << pos)) &&
+                           cmp(n->data, m->data) == 0) {
+                               chk |= (ulng) 1 << pos;
                                fnd = 1;
                        }
                }
diff --git a/sql/server/sql_datetime.c b/sql/server/sql_datetime.c
--- a/sql/server/sql_datetime.c
+++ b/sql/server/sql_datetime.c
@@ -227,7 +227,6 @@ parse_interval(mvc *sql, lng sign, char 
                return -1;
        if (sk == isec) {
                int msec = 0;
-               val *= 1000;
                if (n && n[0] == '.') {
                        char *nn;
                        msec = strtol(n+1, &nn, 10);
@@ -240,6 +239,13 @@ parse_interval(mvc *sql, lng sign, char 
                                n = nn;
                        }
                }
+               if (val > GDK_lng_max / 1000 ||
+                   (val == GDK_lng_max / 1000 && msec > GDK_lng_max % 1000)) {
+                       if (sql)
+                               snprintf(sql->errstr, ERRSIZE, _("Overflow\n"));
+                       return -1;
+               }
+               val *= 1000;
                val += msec;
        }
        val *= mul;
diff --git a/sql/server/sql_decimal.c b/sql/server/sql_decimal.c
--- a/sql/server/sql_decimal.c
+++ b/sql/server/sql_decimal.c
@@ -19,8 +19,10 @@ decimal_from_str(char *dec, char **end)
 {
 #ifdef HAVE_HGE
        hge res = 0;
+       const hge max0 = GDK_hge_max / 10, max1 = GDK_hge_max % 10;
 #else
        lng res = 0;
+       const lng max0 = GDK_lng_max / 10, max1 = GDK_lng_max % 10;
 #endif
        int neg = 0;
 
@@ -29,13 +31,13 @@ decimal_from_str(char *dec, char **end)
        if (*dec == '-') {
                neg = 1;
                dec++;
-       }
-       if (*dec == '+') {
-               neg = 0;
+       } else if (*dec == '+') {
                dec++;
        }
        for (; *dec && ((*dec >= '0' && *dec <= '9') || *dec == '.'); dec++) {
                if (*dec != '.') {
+                       if (res > max0 || (res == max0 && *dec - '0' > max1))
+                               break;
                        res *= 10;
                        res += *dec - '0';
                }
diff --git a/sql/test/pg_regress/Tests/interval.stable.err 
b/sql/test/pg_regress/Tests/interval.stable.err
--- a/sql/test/pg_regress/Tests/interval.stable.err
+++ b/sql/test/pg_regress/Tests/interval.stable.err
@@ -48,7 +48,16 @@ ERROR = !wrong format (-1 days +02:03)
 MAPI  = (monetdb) /var/tmp/mtest-21889/.s.monetdb.34286
 QUERY = SELECT cast('10 years -11 month -12 days +13:14' as interval second) 
AS "9 years...";
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to