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