<div dir="ltr">Imprints code contains such a search for min/max, maybe we could expose it as a function and thus avoid having the same code twice (for the usual reasons of easy maintenance  and bugfix)</div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jan 22, 2015 at 2:15 PM, Sjoerd Mullender <span dir="ltr"><<a href="mailto:commits@monetdb.org" target="_blank">commits@monetdb.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Changeset: 69a4f7d2fd58 for MonetDB<br>
URL: <a href="http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=69a4f7d2fd58" target="_blank">http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=69a4f7d2fd58</a><br>
Modified Files:<br>
        gdk/gdk_aggr.c<br>
Branch: Oct2014<br>
Log Message:<br>
<br>
Use imprints to calculate min/max of bat.<br>
But with limitations: no grouped min/max, and only on the complete bat<br>
(i.e. if view, it's a view on the complete bat).<br>
<br>
<br>
diffs (37 lines):<br>
<br>
diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c<br>
--- a/gdk/gdk_aggr.c<br>
+++ b/gdk/gdk_aggr.c<br>
@@ -2207,8 +2207,31 @@ BATminmax(BAT *b, void *aggr,<br>
                        return NULL;<br>
                needdecref = 1;<br>
        }<br>
-       (void) (*minmax)(&pos, b, NULL, 1, 0, 0, 0, BATcount(b),<br>
-                        NULL, NULL, BATcount(b), 1, 0);<br>
+       if (b->T->imprints &&<br>
+           (VIEWtparent(b) == 0 ||<br>
+            BATcount(b) == BATcount(BBPdescriptor(VIEWtparent(b))))) {<br>
+               pos = oid_nil;<br>
+               if (minmax == do_groupmin) {<br>
+                       /* find first non-empty bin */<br>
+                       for (s = 0; s < b->T->imprints->bits; s++) {<br>
+                               if (b->T->imprints->stats[s + 128]) {<br>
+                                       pos = b->T->imprints->stats[s] + b->hseqbase;<br>
+                                       break;<br>
+                               }<br>
+                       }<br>
+               } else {<br>
+                       /* find last non-empty bin */<br>
+                       for (s = b->T->imprints->bits - 1; s >= 0; s--) {<br>
+                               if (b->T->imprints->stats[s + 128]) {<br>
+                                       pos = b->T->imprints->stats[s + 64] + b->hseqbase;<br>
+                                       break;<br>
+                               }<br>
+                       }<br>
+               }<br>
+       } else {<br>
+               (void) (*minmax)(&pos, b, NULL, 1, 0, 0, 0, BATcount(b),<br>
+                                NULL, NULL, BATcount(b), 1, 0);<br>
+       }<br>
        if (pos == oid_nil) {<br>
                res = ATOMnilptr(b->ttype);<br>
        } else {<br>
_______________________________________________<br>
checkin-list mailing list<br>
<a href="mailto:checkin-list@monetdb.org">checkin-list@monetdb.org</a><br>
<a href="https://www.monetdb.org/mailman/listinfo/checkin-list" target="_blank">https://www.monetdb.org/mailman/listinfo/checkin-list</a><br>
</blockquote></div><br></div>