Changeset: 01b84231395d for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=01b84231395d Modified Files: gdk/gdk.h gdk/gdk_bat.c gdk/gdk_join.c gdk/gdk_search.h gdk/gdk_select.c gdk/gdk_setop.c monetdb5/modules/atoms/str.c monetdb5/modules/mal/tokenizer.c sql/backends/monet5/generator/Tests/crash.Bug-3609.stable.err sql/backends/monet5/sql.c sql/server/rel_select.c Branch: default Log Message:
Merge changes to default diffs (truncated from 396 to 300 lines): diff --git a/gdk/gdk.h b/gdk/gdk.h --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -3078,17 +3078,17 @@ gdk_export int ALIGNsetH(BAT *b1, BAT *b for (hb = HASHget(h, HASHprobe((h), v)); \ hb != HASHnil(h); \ hb = HASHgetlink(h,hb)) \ - if (ATOMcmp(h->type, v, BUNhead(bi, hb)) == 0) + if (ATOMcmp(h->type, v, BUNtail(bi, hb)) == 0) #define HASHloop_str_hv(bi, h, hb, v) \ for (hb = HASHget((h),((BUN *) (v))[-1]&(h)->mask); \ hb != HASHnil(h); \ hb = HASHgetlink(h,hb)) \ - if (GDK_STREQ(v, BUNhvar(bi, hb))) + if (GDK_STREQ(v, BUNtvar(bi, hb))) #define HASHloop_str(bi, h, hb, v) \ for (hb = HASHget((h),strHash(v)&(h)->mask); \ hb != HASHnil(h); \ hb = HASHgetlink(h,hb)) \ - if (GDK_STREQ(v, BUNhvar(bi, hb))) + if (GDK_STREQ(v, BUNtvar(bi, hb))) /* * For string search, we can optimize if the string heap has @@ -3098,28 +3098,28 @@ gdk_export int ALIGNsetH(BAT *b1, BAT *b * numbers instead of strings: */ #define HASHloop_fstr(bi, h, hb, idx, v) \ - for (hb = HASHget(h, strHash(v)&h->mask), idx = strLocate((bi.b)->H->vheap,v); \ + for (hb = HASHget(h, strHash(v)&h->mask), idx = strLocate((bi.b)->T->vheap,v); \ hb != HASHnil(h); hb = HASHgetlink(h,hb)) \ - if (VarHeapValRaw((bi).b->H->heap.base, hb, (bi).b->H->width) == idx) + if (VarHeapValRaw((bi).b->T->heap.base, hb, (bi).b->T->width) == idx) /* * The following example shows how the hashloop is used: * * @verbatim * void - * print_books(BAT *author_books, str author) + * print_books(BAT *books_author, str author) * { - * BAT *b = author_books; + * BAT *b = books_author; * BUN i; * * printf("%s\n==================\n", author); - * HASHloop(b, (b)->H->hash, i, author) - * printf("%s\n", ((str) BUNtail(b, i)); + * HASHloop(b, (b)->T->hash, i, author) + * printf("%s\n", ((str) BUNhead(b, i)); * } * @end verbatim * * Note that for optimization purposes, we could have used a - * HASHloop_str instead, and also a BUNtvar instead of a BUNtail - * (since we know the tail-type of author_books is string, hence + * HASHloop_str instead, and also a BUNhvar instead of a BUNhead + * (since we know the head-type of books_author is string, hence * variable-sized). However, this would make the code less general. * * @- specialized hashloops @@ -3132,18 +3132,18 @@ gdk_export int ALIGNsetH(BAT *b1, BAT *b for (hb = HASHget(h, HASHprobe(h, v)); \ hb != HASHnil(h); \ hb = HASHgetlink(h,hb)) \ - if (ATOMcmp(h->type, v, BUNhloc(bi, hb)) == 0) + if (ATOMcmp(h->type, v, BUNtloc(bi, hb)) == 0) #define HASHloopvar(bi, h, hb, v) \ for (hb = HASHget(h,HASHprobe(h, v)); \ hb != HASHnil(h); \ hb = HASHgetlink(h,hb)) \ - if (ATOMcmp(h->type, v, BUNhvar(bi, hb)) == 0) + if (ATOMcmp(h->type, v, BUNtvar(bi, hb)) == 0) #define HASHloop_TYPE(bi, h, hb, v, TYPE) \ for (hb = HASHget(h, hash_##TYPE(h, v)); \ hb != HASHnil(h); \ hb = HASHgetlink(h,hb)) \ - if (simple_EQ(v, BUNhloc(bi, hb), TYPE)) + if (simple_EQ(v, BUNtloc(bi, hb), TYPE)) #define HASHloop_bit(bi, h, hb, v) HASHloop_TYPE(bi, h, hb, v, bte) #define HASHloop_bte(bi, h, hb, v) HASHloop_TYPE(bi, h, hb, v, bte) @@ -3164,7 +3164,7 @@ gdk_export int ALIGNsetH(BAT *b1, BAT *b for (hb = HASHget(h, hash_any(h, v)); \ hb != HASHnil(h); \ hb = HASHgetlink(h,hb)) \ - if (atom_EQ(v, BUNhead(bi, hb), (bi).b->htype)) + if (atom_EQ(v, BUNtail(bi, hb), (bi).b->ttype)) /* * @- loop over a BAT with ordered tail diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c --- a/gdk/gdk_bat.c +++ b/gdk/gdk_bat.c @@ -1792,7 +1792,7 @@ BUNfnd(BAT *b, const void *v) if (BATtordered(b) || BATtrevordered(b)) return SORTfnd(b, v); } - bi = bat_iterator(BATmirror(b)); /* HASHfnd works on head */ + bi = bat_iterator(b); switch (ATOMstorage(b->ttype)) { case TYPE_bte: HASHfnd_bte(r, bi, v); @@ -2040,25 +2040,26 @@ BUNlocate(BAT *b, const void *x, const v if (b->H->hash) { BUN h; + bi = bat_iterator(BATmirror(b)); /* HASHloop works on tail */ if (hint && tint) { HASHloop_int(bi, b->H->hash, h, x) - if (*(int *) y == *(int *) BUNtloc(bi, h)) + if (*(int *) y == *(int *) BUNhloc(bi, h)) return h; } else if (hint && tlng) { HASHloop_int(bi, b->H->hash, h, x) - if (*(lng *) y == *(lng *) BUNtloc(bi, h)) + if (*(lng *) y == *(lng *) BUNhloc(bi, h)) return h; } else if (hlng && tint) { HASHloop_lng(bi, b->H->hash, h, x) - if (*(int *) y == *(int *) BUNtloc(bi, h)) + if (*(int *) y == *(int *) BUNhloc(bi, h)) return h; } else if (hlng && tlng) { HASHloop_lng(bi, b->H->hash, h, x) - if (*(lng *) y == *(lng *) BUNtloc(bi, h)) + if (*(lng *) y == *(lng *) BUNhloc(bi, h)) return h; } else { HASHloop(bi, b->H->hash, h, x) - if ((*tcmp) (y, BUNtail(bi, h)) == 0) + if ((*tcmp) (y, BUNhead(bi, h)) == 0) return h; } return BUN_NONE; diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c --- a/gdk/gdk_join.c +++ b/gdk/gdk_join.c @@ -1364,8 +1364,6 @@ hashjoin(BAT *r1, BAT *r2, BAT *l, BAT * if (BATprepareHash(r)) goto bailout; - /* HASHloop works on HEAD column */ - r = BATmirror(r); ri = bat_iterator(r); nrcand = (BUN) (rcandend - rcand); @@ -1384,7 +1382,7 @@ hashjoin(BAT *r1, BAT *r2, BAT *l, BAT * } nr = 0; if (rcand) { - HASHloop(ri, r->H->hash, rb, v) { + HASHloop(ri, r->T->hash, rb, v) { ro = (oid) (rb + rbun2oid); if (!binsearchcand(rcand, 0, nrcand, ro)) continue; @@ -1393,7 +1391,7 @@ hashjoin(BAT *r1, BAT *r2, BAT *l, BAT * break; } } else { - HASHloop(ri, r->H->hash, rb, v) { + HASHloop(ri, r->T->hash, rb, v) { rb0 = rb - BUNfirst(r); /* zero-based */ if (rb0 < rstart || rb0 >= rend) continue; @@ -1445,7 +1443,7 @@ hashjoin(BAT *r1, BAT *r2, BAT *l, BAT * r1->trevsorted = 0; } } else { - int t = r->htype; + int t = r->ttype; if (t != ATOMstorage(t) && ATOMnilptr(ATOMstorage(t)) == ATOMnilptr(t) && BATatoms[ATOMstorage(t)].atomCmp == BATatoms[t].atomCmp && @@ -1466,7 +1464,7 @@ hashjoin(BAT *r1, BAT *r2, BAT *l, BAT * lskipped = BATcount(r1) > 0; continue; } - HASHloop(ri, r->H->hash, rb, v) { + HASHloop(ri, r->T->hash, rb, v) { ro = (oid) (rb + rbun2oid); if (!binsearchcand(rcand, 0, nrcand, ro)) continue; @@ -1481,7 +1479,7 @@ hashjoin(BAT *r1, BAT *r2, BAT *l, BAT * lskipped = BATcount(r1) > 0; continue; } - HASHloop_int(ri, r->H->hash, rb, v) { + HASHloop_int(ri, r->T->hash, rb, v) { rb0 = rb - BUNfirst(r); /* zero-based */ if (rb0 < rstart || rb0 >= rend) continue; @@ -1496,7 +1494,7 @@ hashjoin(BAT *r1, BAT *r2, BAT *l, BAT * lskipped = BATcount(r1) > 0; continue; } - HASHloop_lng(ri, r->H->hash, rb, v) { + HASHloop_lng(ri, r->T->hash, rb, v) { rb0 = rb - BUNfirst(r); /* zero-based */ if (rb0 < rstart || rb0 >= rend) continue; @@ -1512,7 +1510,7 @@ hashjoin(BAT *r1, BAT *r2, BAT *l, BAT * lskipped = BATcount(r1) > 0; continue; } - HASHloop_hge(ri, r->H->hash, rb, v) { + HASHloop_hge(ri, r->T->hash, rb, v) { rb0 = rb - BUNfirst(r); /* zero-based */ if (rb0 < rstart || rb0 >= rend) continue; @@ -1528,7 +1526,7 @@ hashjoin(BAT *r1, BAT *r2, BAT *l, BAT * lskipped = BATcount(r1) > 0; continue; } - HASHloop(ri, r->H->hash, rb, v) { + HASHloop(ri, r->T->hash, rb, v) { rb0 = rb - BUNfirst(r); /* zero-based */ if (rb0 < rstart || rb0 >= rend) continue; diff --git a/gdk/gdk_search.h b/gdk/gdk_search.h --- a/gdk/gdk_search.h +++ b/gdk/gdk_search.h @@ -211,8 +211,8 @@ gdk_export BUN HASHlist(Hash *h, BUN i); do { \ BUN _i; \ (x) = BUN_NONE; \ - if ((y).b->H->hash || BAThash(BATmirror((y).b), 0)) { \ - HASHloop_str((y), (y).b->H->hash, _i, (z)) { \ + if ((y).b->T->hash || BAThash((y).b, 0)) { \ + HASHloop_str((y), (y).b->T->hash, _i, (z)) { \ (x) = _i; \ break; \ } \ @@ -223,8 +223,8 @@ gdk_export BUN HASHlist(Hash *h, BUN i); do { \ BUN _i; \ (x) = BUN_NONE; \ - if ((y).b->H->hash || BAThash(BATmirror((y).b), 0)) { \ - HASHloop_str_hv((y), (y).b->H->hash, _i, (z)) { \ + if ((y).b->T->hash || BAThash((y).b, 0)) { \ + HASHloop_str_hv((y), (y).b->T->hash, _i, (z)) { \ (x) = _i; \ break; \ } \ @@ -235,8 +235,8 @@ gdk_export BUN HASHlist(Hash *h, BUN i); do { \ BUN _i; \ (x) = BUN_NONE; \ - if ((y).b->H->hash || BAThash(BATmirror((y).b), 0)) { \ - HASHloop((y), (y).b->H->hash, _i, (z)) { \ + if ((y).b->T->hash || BAThash((y).b, 0)) { \ + HASHloop((y), (y).b->T->hash, _i, (z)) { \ (x) = _i; \ break; \ } \ @@ -247,8 +247,8 @@ gdk_export BUN HASHlist(Hash *h, BUN i); do { \ BUN _i; \ (x) = BUN_NONE; \ - if ((y).b->H->hash || BAThash(BATmirror((y).b), 0)) { \ - HASHloop_##TYPE((y), (y).b->H->hash, _i, (z)) { \ + if ((y).b->T->hash || BAThash((y).b, 0)) { \ + HASHloop_##TYPE((y), (y).b->T->hash, _i, (z)) { \ (x) = _i; \ break; \ } \ diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c --- a/gdk/gdk_select.c +++ b/gdk/gdk_select.c @@ -182,13 +182,12 @@ BAT_hashselect(BAT *b, BAT *s, BAT *bn, BBPreclaim(bn); return NULL; } - b = BATmirror(b); /* HASHloop works on HEAD column */ bi = bat_iterator(b); dst = (oid *) Tloc(bn, BUNfirst(bn)); cnt = 0; if (s) { assert(s->tsorted); - HASHloop(bi, b->H->hash, i, tl) { + HASHloop(bi, b->T->hash, i, tl) { o = (oid) (i + off); if (SORTfnd(s, &o) != BUN_NONE) { buninsfix(bn, dst, cnt, o, @@ -198,7 +197,7 @@ BAT_hashselect(BAT *b, BAT *s, BAT *bn, } } } else { - HASHloop(bi, b->H->hash, i, tl) { + HASHloop(bi, b->T->hash, i, tl) { o = (oid) (i + off); buninsfix(bn, dst, cnt, o, maximum - BATcapacity(bn), diff --git a/gdk/gdk_setop.c b/gdk/gdk_setop.c --- a/gdk/gdk_setop.c +++ b/gdk/gdk_setop.c @@ -138,7 +138,7 @@ BUN s2; \ ptr h, t, h2 = hnil; \ _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list