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