Changeset: 5104fc06d521 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5104fc06d521 Modified Files: gdk/gdk_batop.c Branch: default Log Message:
Merge with Feb2013 branch. diffs (35 lines): diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c --- a/gdk/gdk_batop.c +++ b/gdk/gdk_batop.c @@ -2242,6 +2242,9 @@ BATmergecand(BAT *a, BAT *b) BAT *bn; const oid *ap, *bp, *ape, *bpe; oid *p, i; + oid af, al, bf, bl; + BATiter ai, bi; + bit ad, bd; BATcheck(a, "BATmergecand"); BATcheck(b, "BATmergecand"); @@ -2263,6 +2266,21 @@ BATmergecand(BAT *a, BAT *b) if ( BATcount(b) == 0){ return BATcopy(a, a->htype, a->ttype, 0); } + /* we can return a if a fully covers b (and v.v) */ + ai = bat_iterator(a); + bi = bat_iterator(b); + af = *(oid*) BUNtail(ai, BUNfirst(a)); + bf = *(oid*) BUNtail(bi, BUNfirst(b)); + al = *(oid*) BUNtail(ai, BUNlast(a) - 1); + bl = *(oid*) BUNtail(bi, BUNlast(b) - 1); + ad = (af + BATcount(a) - 1 == al); /* i.e., dense */ + bd = (bf + BATcount(b) - 1 == bl); /* i.e., dense */ + if (ad && af <= bf && al >= bl) { + return BATcopy(a, a->htype, a->ttype,0); + } + if (bd && bf <= af && bl >= al) { + return BATcopy(b, b->htype, b->ttype,0); + } bn = BATnew(TYPE_void, TYPE_oid, BATcount(a) + BATcount(b)); if (bn == NULL) _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list