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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list