Changeset: ca0a61a2f0ff for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/ca0a61a2f0ff
Modified Files:
gdk/gdk_project.c
Branch: Jul2021
Log Message:
When projecting a single value, the result is constant.
Also slight optimization if first projected bat is empty.
diffs (34 lines):
diff --git a/gdk/gdk_project.c b/gdk/gdk_project.c
--- a/gdk/gdk_project.c
+++ b/gdk/gdk_project.c
@@ -606,6 +606,15 @@ BATproject2(BAT *restrict l, BAT *restri
assert(r2 == NULL || tpe == ATOMtype(r2->ttype));
assert(r2 == NULL || r1->hseqbase + r1i.count == r2->hseqbase);
+ if (r2 && r1i.count == 0) {
+ /* unlikely special case: r1 is empty, so we just have r2 */
+ r1 = r2;
+ r2 = NULL;
+ bat_iterator_end(&r1i);
+ r1i = r2i;
+ r2i = bat_iterator(r2);
+ }
+
if (BATtdense(l) && lcount > 0) {
lo = l->tseqbase;
hi = l->tseqbase + lcount;
@@ -715,10 +724,12 @@ BATproject2(BAT *restrict l, BAT *restri
bn->tnonil = l->tnonil & r1->tnonil;
bn->tsorted = l->batCount <= 1
|| (l->tsorted & r1->tsorted)
- || (l->trevsorted & r1->trevsorted);
+ || (l->trevsorted & r1->trevsorted)
+ || r1->batCount <= 1;
bn->trevsorted = l->batCount <= 1
|| (l->tsorted & r1->trevsorted)
- || (l->trevsorted & r1->tsorted);
+ || (l->trevsorted & r1->tsorted)
+ || r1->batCount <= 1;
bn->tkey = l->batCount <= 1 || (l->tkey & r1->tkey);
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list