Changeset: 76ffd2312f54 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=76ffd2312f54 Modified Files: gdk/gdk_atoms.c gdk/gdk_join.c gdk/gdk_select.c gdk/gdk_utils.c monetdb5/modules/atoms/json.c Branch: default Log Message:
Merge with Jun2016 branch.
diffs (truncated from 1450 to 300 lines):
diff --git a/gdk/gdk_atoms.c b/gdk/gdk_atoms.c
--- a/gdk/gdk_atoms.c
+++ b/gdk/gdk_atoms.c
@@ -499,7 +499,8 @@ bitToStr(char **dst, int *len, const bit
static bit *
bitRead(bit *a, stream *s, size_t cnt)
{
- mnstr_read(s, (char *) a, 1, cnt);
+ if (mnstr_read(s, (char *) a, 1, cnt) < 0)
+ return NULL;
return mnstr_errnr(s) ? NULL : a;
}
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -136,9 +136,9 @@ joininitresults(BAT **r1p, BAT **r2p, BU
if (lcnt == 0 || rcnt == 0)
maxsize = nil_on_miss ? lcnt : 0;
else if (BUN_MAX / lcnt >= rcnt)
+ maxsize = lcnt * rcnt;
+ else
maxsize = BUN_MAX;
- else
- maxsize = lcnt * rcnt;
}
size = estimate == BUN_NONE ? lcnt : estimate;
if (size > maxsize)
diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -374,7 +374,7 @@ do {
\
if (BATcapacity(bn) < maximum) { \
impsloop(CAND, TEST, \
buninsfix(bn, dst, cnt, o, \
- (BUN) ((dbl) cnt / (dbl) (p-r) \
+ (BUN) ((dbl) cnt / (dbl) (p == r ? 1 : p -
r) \
* (dbl) (q-p) * 1.1 + 1024), \
BATcapacity(bn) + q - p, BUN_NONE)); \
} else { \
@@ -439,7 +439,7 @@ do {
\
v = src[o-off]; \
if (TEST) { \
buninsfix(bn, dst, cnt, o, \
- (BUN) ((dbl) cnt / (dbl) (p-r) \
+ (BUN) ((dbl) cnt / (dbl) (p == r ? 1
: p - r) \
* (dbl) (q-p) * 1.1 + 1024), \
BATcapacity(bn) + q - p, BUN_NONE); \
cnt++; \
@@ -606,7 +606,7 @@ candscan_any (BAT *b, BAT *s, BAT *bn, c
v = BUNtail(bi,(BUN)(o-off));
if ((*cmp)(tl, v) == 0) {
buninsfix(bn, dst, cnt, o,
- (BUN) ((dbl) cnt / (dbl) (p-r)
+ (BUN) ((dbl) cnt / (dbl) (p == r ? 1
: p - r)
* (dbl) (q-p) * 1.1 + 1024),
BATcapacity(bn) + q - p, BUN_NONE);
cnt++;
@@ -630,7 +630,7 @@ candscan_any (BAT *b, BAT *s, BAT *bn, c
((c = (*cmp)(th, v)) < 0 ||
(!hi && c == 0))))) {
buninsfix(bn, dst, cnt, o,
- (BUN) ((dbl) cnt / (dbl) (p-r)
+ (BUN) ((dbl) cnt / (dbl) (p == r ? 1
: p - r)
* (dbl) (q-p) * 1.1 + 1024),
BATcapacity(bn) + q - p, BUN_NONE);
cnt++;
@@ -654,7 +654,7 @@ candscan_any (BAT *b, BAT *s, BAT *bn, c
(c = cmp(th, v)) > 0 ||
(hi && c == 0)))) {
buninsfix(bn, dst, cnt, o,
- (BUN) ((dbl) cnt / (dbl) (p-r)
+ (BUN) ((dbl) cnt / (dbl) (p == r ? 1
: p - r)
* (dbl) (q-p) * 1.1 + 1024),
BATcapacity(bn) + q - p, BUN_NONE);
cnt++;
@@ -694,7 +694,7 @@ fullscan_any(BAT *b, BAT *s, BAT *bn, co
v = BUNtail(bi,(BUN)(o-off));
if ((*cmp)(tl, v) == 0) {
buninsfix(bn, dst, cnt, o,
- (BUN) ((dbl) cnt / (dbl) (p-r)
+ (BUN) ((dbl) cnt / (dbl) (p == r ? 1
: p - r)
* (dbl) (q-p) * 1.1 + 1024),
BATcapacity(bn) + q - p, BUN_NONE);
cnt++;
@@ -718,7 +718,7 @@ fullscan_any(BAT *b, BAT *s, BAT *bn, co
((c = (*cmp)(th, v)) < 0 ||
(!hi && c == 0))))) {
buninsfix(bn, dst, cnt, o,
- (BUN) ((dbl) cnt / (dbl) (p-r)
+ (BUN) ((dbl) cnt / (dbl) (p == r ? 1
: p - r)
* (dbl) (q-p) * 1.1 + 1024),
BATcapacity(bn) + q - p, BUN_NONE);
cnt++;
@@ -742,7 +742,7 @@ fullscan_any(BAT *b, BAT *s, BAT *bn, co
(c = cmp(th, v)) > 0 ||
(hi && c == 0)))) {
buninsfix(bn, dst, cnt, o,
- (BUN) ((dbl) cnt / (dbl) (p-r)
+ (BUN) ((dbl) cnt / (dbl) (p == r ? 1
: p - r)
* (dbl) (q-p) * 1.1 + 1024),
BATcapacity(bn) + q - p, BUN_NONE);
cnt++;
@@ -783,7 +783,7 @@ fullscan_str(BAT *b, BAT *s, BAT *bn, co
while (p < q) {
if (ptr[p] == pos) {
buninsfix(bn, dst, cnt, o,
- (BUN) ((dbl) cnt / (dbl) (p-r)
+ (BUN) ((dbl) cnt / (dbl) (p == r ? 1
: p - r)
* (dbl) (q-p) * 1.1 + 1024),
BATcapacity(bn) + q - p, BUN_NONE);
cnt++;
@@ -799,7 +799,7 @@ fullscan_str(BAT *b, BAT *s, BAT *bn, co
while (p < q) {
if (ptr[p] == pos) {
buninsfix(bn, dst, cnt, o,
- (BUN) ((dbl) cnt / (dbl) (p-r)
+ (BUN) ((dbl) cnt / (dbl) (p == r ? 1
: p - r)
* (dbl) (q-p) * 1.1 + 1024),
BATcapacity(bn) + q - p, BUN_NONE);
cnt++;
@@ -815,7 +815,7 @@ fullscan_str(BAT *b, BAT *s, BAT *bn, co
while (p < q) {
if (ptr[p] == pos) {
buninsfix(bn, dst, cnt, o,
- (BUN) ((dbl) cnt / (dbl) (p-r)
+ (BUN) ((dbl) cnt / (dbl) (p == r ? 1
: p - r)
* (dbl) (q-p) * 1.1 + 1024),
BATcapacity(bn) + q - p, BUN_NONE);
cnt++;
@@ -831,7 +831,7 @@ fullscan_str(BAT *b, BAT *s, BAT *bn, co
while (p < q) {
if (ptr[p] == pos) {
buninsfix(bn, dst, cnt, o,
- (BUN) ((dbl) cnt / (dbl) (p-r)
+ (BUN) ((dbl) cnt / (dbl) (p == r ? 1
: p - r)
* (dbl) (q-p) * 1.1 + 1024),
BATcapacity(bn) + q - p, BUN_NONE);
cnt++;
@@ -2292,7 +2292,11 @@ rangejoin(BAT *r1, BAT *r2, BAT *l, BAT
cnt + maximum, 1);
break;
}
- case TYPE_int: {
+ case TYPE_int:
+#if SIZEOF_OID == SIZEOF_INT
+ case TYPE_oid:
+#endif
+ {
int vl, vh;
if ((vl = *(int *) vrl) == int_nil)
continue;
@@ -2304,9 +2308,18 @@ rangejoin(BAT *r1, BAT *r2, BAT *l, BAT
vl = NEXTVALUEint(vl);
}
if (!hi) {
- if (vh == MINVALUEint)
- continue;
- vh = PREVVALUEint(vh);
+#if SIZEOF_OID == SIZEOF_INT
+ if (t == TYPE_oid) {
+ if (vh == MINVALUEoid)
+ continue;
+ vh = PREVVALUEoid(vh);
+ } else
+#endif
+ {
+ if (vh == MINVALUEint)
+ continue;
+ vh = PREVVALUEint(vh);
+ }
}
if (vl > vh)
continue;
@@ -2324,62 +2337,11 @@ rangejoin(BAT *r1, BAT *r2, BAT *l, BAT
cnt + maximum, 1);
break;
}
- case TYPE_oid: {
- oid vl, vh;
- if ((vl = *(oid *) vrl) == oid_nil)
- continue;
- if ((vh = *(oid *) vrh) == oid_nil)
- continue;
- if (!li) {
- if (vl == MAXVALUEoid)
- continue;
- vl = NEXTVALUEoid(vl);
- }
- if (!hi) {
- if (vh == MINVALUEoid)
- continue;
- vh = PREVVALUEoid(vh);
- }
- if (vl > vh)
- continue;
-#if SIZEOF_OID == SIZEOF_INT
- if (lcand)
- ncnt = candscan_int(l, sl, r1,
- (const int *) &vl,
- (const int *) &vh,
- 1, 1, 0, 0, 1, 1,
- lstart, lend, cnt,
- off, dst1, lcand,
- cnt + maximum, 1);
- else
- ncnt = fullscan_int(l, sl, r1,
- (const int *) &vl,
- (const int *) &vh,
- 1, 1, 0, 0, 1, 1,
- lstart, lend, cnt,
- off, dst1, NULL,
- cnt + maximum, 1);
-#else
- if (lcand)
- ncnt = candscan_lng(l, sl, r1,
- (const lng *) &vl,
- (const lng *) &vh,
- 1, 1, 0, 0, 1, 1,
- lstart, lend, cnt,
- off, dst1, lcand,
- cnt + maximum, 1);
- else
- ncnt = fullscan_lng(l, sl, r1,
- (const lng *) &vl,
- (const lng *) &vh,
- 1, 1, 0, 0, 1, 1,
- lstart, lend, cnt,
- off, dst1, NULL,
- cnt + maximum, 1);
+ case TYPE_lng:
+#if SIZEOF_OID == SIZEOF_LNG
+ case TYPE_oid:
#endif
- break;
- }
- case TYPE_lng: {
+ {
lng vl, vh;
if ((vl = *(lng *) vrl) == lng_nil)
continue;
@@ -2391,9 +2353,18 @@ rangejoin(BAT *r1, BAT *r2, BAT *l, BAT
vl = NEXTVALUElng(vl);
}
if (!hi) {
- if (vh == MINVALUElng)
- continue;
- vh = PREVVALUElng(vh);
+#if SIZEOF_OID == SIZEOF_LNG
+ if (t == TYPE_oid) {
+ if (vh == MINVALUEoid)
+ continue;
+ vh = PREVVALUEoid(vh);
+ } else
+#endif
+ {
+ if (vh == MINVALUElng)
+ continue;
+ vh = PREVVALUElng(vh);
+ }
}
if (vl > vh)
continue;
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -1953,6 +1953,11 @@ GDKmremap(const char *path, int mode, vo
{
void *ret;
+ if (*new_size > old_size &&
+ GDKvm_cursize() + *new_size - old_size >= GDK_vm_maxsize) {
+ GDKerror("allocating too much virtual address space\n");
+ return NULL;
+ }
ret = MT_mremap(path, mode, old_address, old_size, new_size);
if (ret == NULL) {
GDKmemfail("GDKmremap", *new_size);
diff --git a/monetdb5/modules/atoms/json.c b/monetdb5/modules/atoms/json.c
--- a/monetdb5/modules/atoms/json.c
+++ b/monetdb5/modules/atoms/json.c
@@ -69,7 +69,7 @@ JSONnewtree(int size)
if (js == NULL)
return NULL;
js->elm = (JSONterm *) GDKzalloc(sizeof(JSONterm) * size);
- if( js->elm == NULL){
+ if (js->elm == NULL) {
GDKfree(js);
return NULL;
}
@@ -89,7 +89,7 @@ JSONnew(JSON *js)
return js->free - 1;
}
js->elm = term;
- memset(((char *) term) + sizeof(JSONterm) * js->size, 0, 8 *
sizeof(JSONterm));
+ memset(term + js->size, 0, 8 * sizeof(JSONterm));
js->size += 8;
if (jsonhint < js->size)
jsonhint = js->size;
@@ -124,9 +124,10 @@ JSONfromString(str src, int *len, json *
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list
