Changeset: 3cc21b190d96 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3cc21b190d96 Modified Files: gdk/gdk_join.c Branch: Jun2020 Log Message:
merged diffs (86 lines): diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c --- a/gdk/gdk_join.c +++ b/gdk/gdk_join.c @@ -3363,38 +3363,52 @@ leftjoin(BAT **r1p, BAT **r2p, BAT *l, B } if (semi) r1->tkey = true; - BAT *ob; - rc = BATsort(&tmp, r2p ? &ob : NULL, NULL, - r1, NULL, NULL, false, false, false); - BBPunfix(r1->batCacheid); - if (rc != GDK_SUCCEED) { - if (r2) + if (!VIEWtparent(r1) && + r1->ttype == TYPE_oid && + BBP_refs(r1->batCacheid) == 1 && + (r2 == NULL || + (!VIEWtparent(r2) && + BBP_refs(r2->batCacheid) == 1 && + r2->ttype == TYPE_oid))) { + /* in-place sort if we can */ + if (r2) { + GDKqsort(r1->theap.base, r2->theap.base, + NULL, r1->batCount, r1->twidth, + r2->twidth, TYPE_oid, false, + false); + r2->tsorted = false; + r2->trevsorted = false; + *r2p = r2; + } else { + GDKqsort(r1->theap.base, NULL, NULL, + r1->batCount, r1->twidth, 0, + TYPE_oid, false, false); + } + r1->tsorted = true; + r1->trevsorted = false; + *r1p = r1; + } else { + BAT *ob; + rc = BATsort(&tmp, r2p ? &ob : NULL, NULL, + r1, NULL, NULL, false, false, false); + BBPunfix(r1->batCacheid); + if (rc != GDK_SUCCEED) { + if (r2) + BBPunfix(r2->batCacheid); + return rc; + } + *r1p = r1 = tmp; + if (r2p) { + tmp = BATproject(ob, r2); BBPunfix(r2->batCacheid); - return rc; + BBPunfix(ob->batCacheid); + if (tmp == NULL) { + BBPunfix(r1->batCacheid); + return GDK_FAIL; + } + *r2p = tmp; + } } - *r1p = r1 = tmp; - if (r2p) { - tmp = BATproject(ob, r2); - BBPunfix(r2->batCacheid); - BBPunfix(ob->batCacheid); - if (tmp == NULL) { - BBPunfix(r1->batCacheid); - return GDK_FAIL; - } - *r2p = tmp; - } -#if 0 -#ifndef NDEBUG - BAT *x1; - canditer_reset(&lci); - canditer_reset(&rci); - hashjoin(&x1, NULL, l, r, &lci, &rci, nil_matches, false, false, false, false, false, estimate, t0, false, rhash, prhash, func); - assert(x1->batCount == r1->batCount); - for (BUN x = 0; x < x1->batCount; x++) - assert(BUNtoid(r1, x) == BUNtoid(x1, x)); - BBPunfix(x1->batCacheid); -#endif -#endif return GDK_SUCCEED; } } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list