Changeset: 3c228eb3b8ab for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3c228eb3b8ab
Modified Files:
gdk/gdk_unique.c
Branch: Oct2014
Log Message:
Fix calculation of uniques when dealing with a view.
diffs (52 lines):
diff --git a/gdk/gdk_unique.c b/gdk/gdk_unique.c
--- a/gdk/gdk_unique.c
+++ b/gdk/gdk_unique.c
@@ -258,12 +258,14 @@ BATsubunique(BAT *b, BAT *s)
((parent = VIEWtparent(b)) != 0 &&
BBPdescriptor(-parent)->T->hash)) {
BUN lo;
+ oid seq;
/* use existing hash table */
ALGODEBUG fprintf(stderr, "#BATsubunique(b=%s#" BUNFMT ",s=%s#"
BUNFMT "): use existing hash\n",
BATgetId(b), BATcount(b),
s ? BATgetId(s) : "NULL",
s ? BATcount(s) : 0);
+ seq = b->hseqbase;
if ((parent = VIEWtparent(b)) != 0) {
BAT *b2 = BBPdescriptor(-parent);
lo = (BUN) ((b->T->heap.base - b2->T->heap.base) >>
b->T->shift) + BUNfirst(b);
@@ -277,7 +279,7 @@ BATsubunique(BAT *b, BAT *s)
if (cand) {
if (cand == candend)
break;
- i = *cand++ - b->hseqbase;
+ i = *cand++ - seq;
if (i >= end)
break;
} else {
@@ -286,12 +288,12 @@ BATsubunique(BAT *b, BAT *s)
break;
}
v = VALUE(i);
- for (hb = HASHgetlink(hs, i + BUNfirst(b));
+ for (hb = HASHgetlink(hs, i + lo);
hb != HASHnil(hs) && hb >= lo;
hb = HASHgetlink(hs, hb)) {
- assert(hb < i + BUNfirst(b));
+ assert(hb < i + lo);
if (cmp(v, BUNtail(bi, hb)) == 0) {
- o = hb - BUNfirst(b) + b->hseqbase;
+ o = hb - lo + seq;
if (cand == NULL ||
SORTfnd(s, &o) != BUN_NONE) {
/* we've seen this
@@ -301,7 +303,7 @@ BATsubunique(BAT *b, BAT *s)
}
}
if (hb == HASHnil(hs)) {
- o = i + b->hseqbase;
+ o = i + seq;
bunfastapp(bn, &o);
}
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list