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

Reply via email to