Changeset: 2320b9a06925 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2320b9a06925 Modified Files: gdk/gdk_join.c Branch: Dec2016 Log Message:
Fix property setting in thetajoin. The dense property wasn't cleared when there is a nil in the left input column. diffs (129 lines): diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c --- a/gdk/gdk_join.c +++ b/gdk/gdk_join.c @@ -3191,69 +3191,69 @@ thetajoin(BAT *r1, BAT *r2, BAT *l, BAT } lo = lstart++ + l->hseqbase; } - if (cmp(vl, nil) == 0) - continue; nr = 0; - p = rcand; - n = rstart; - for (;;) { - if (rcand) { - if (p == rcandend) - break; - ro = *p++; - vr = VALUE(r, ro - r->hseqbase); - } else { - if (n == rend) - break; - if (rvals) { - vr = VALUE(r, n); - if (roff != 0) { - rval = (oid) (*(const oid *)vr + roff); + if (cmp(vl, nil) != 0) { + p = rcand; + n = rstart; + for (;;) { + if (rcand) { + if (p == rcandend) + break; + ro = *p++; + vr = VALUE(r, ro - r->hseqbase); + } else { + if (n == rend) + break; + if (rvals) { + vr = VALUE(r, n); + if (roff != 0) { + rval = (oid) (*(const oid *)vr + roff); + vr = (const char *) &rval; + } + } else { + rval = n + r->tseqbase; vr = (const char *) &rval; } - } else { - rval = n + r->tseqbase; - vr = (const char *) &rval; + ro = n++ + r->hseqbase; } - ro = n++ + r->hseqbase; - } - if (cmp(vr, nil) == 0) - continue; - c = cmp(vl, vr); - if (!((opcode & MASK_LT && c < 0) || - (opcode & MASK_GT && c > 0) || - (opcode & MASK_EQ && c == 0))) - continue; - if (BUNlast(r1) == BATcapacity(r1)) { - newcap = BATgrows(r1); - if (newcap > maxsize) - newcap = maxsize; - BATsetcount(r1, BATcount(r1)); - BATsetcount(r2, BATcount(r2)); - if (BATextend(r1, newcap) != GDK_SUCCEED || - BATextend(r2, newcap) != GDK_SUCCEED) - goto bailout; - assert(BATcapacity(r1) == BATcapacity(r2)); - } - if (BATcount(r2) > 0) { - if (lastr + 1 != ro) - r2->tdense = 0; - if (nr == 0) { - r1->trevsorted = 0; - if (lastr > ro) { - r2->tsorted = 0; - r2->tkey = 0; - } else if (lastr < ro) { - r2->trevsorted = 0; - } else { - r2->tkey = 0; + if (cmp(vr, nil) == 0) + continue; + c = cmp(vl, vr); + if (!((opcode & MASK_LT && c < 0) || + (opcode & MASK_GT && c > 0) || + (opcode & MASK_EQ && c == 0))) + continue; + if (BUNlast(r1) == BATcapacity(r1)) { + newcap = BATgrows(r1); + if (newcap > maxsize) + newcap = maxsize; + BATsetcount(r1, BATcount(r1)); + BATsetcount(r2, BATcount(r2)); + if (BATextend(r1, newcap) != GDK_SUCCEED || + BATextend(r2, newcap) != GDK_SUCCEED) + goto bailout; + assert(BATcapacity(r1) == BATcapacity(r2)); + } + if (BATcount(r2) > 0) { + if (lastr + 1 != ro) + r2->tdense = 0; + if (nr == 0) { + r1->trevsorted = 0; + if (lastr > ro) { + r2->tsorted = 0; + r2->tkey = 0; + } else if (lastr < ro) { + r2->trevsorted = 0; + } else { + r2->tkey = 0; + } } } + APPEND(r1, lo); + APPEND(r2, ro); + lastr = ro; + nr++; } - APPEND(r1, lo); - APPEND(r2, ro); - lastr = ro; - nr++; } if (nr > 1) { r1->tkey = 0; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list