MonetDB: Oct2014 - Use imprints to calculate min/max of bat.

Lefteris lsidir at gmail.com
Thu Jan 22 14:33:39 CET 2015


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)

On Thu, Jan 22, 2015 at 2:15 PM, Sjoerd Mullender <commits at monetdb.org>
wrote:

> Changeset: 69a4f7d2fd58 for MonetDB
> URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=69a4f7d2fd58
> Modified Files:
>         gdk/gdk_aggr.c
> Branch: Oct2014
> Log Message:
>
> Use imprints to calculate min/max of bat.
> But with limitations: no grouped min/max, and only on the complete bat
> (i.e. if view, it's a view on the complete bat).
>
>
> diffs (37 lines):
>
> diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
> --- a/gdk/gdk_aggr.c
> +++ b/gdk/gdk_aggr.c
> @@ -2207,8 +2207,31 @@ BATminmax(BAT *b, void *aggr,
>                         return NULL;
>                 needdecref = 1;
>         }
> -       (void) (*minmax)(&pos, b, NULL, 1, 0, 0, 0, BATcount(b),
> -                        NULL, NULL, BATcount(b), 1, 0);
> +       if (b->T->imprints &&
> +           (VIEWtparent(b) == 0 ||
> +            BATcount(b) == BATcount(BBPdescriptor(VIEWtparent(b))))) {
> +               pos = oid_nil;
> +               if (minmax == do_groupmin) {
> +                       /* find first non-empty bin */
> +                       for (s = 0; s < b->T->imprints->bits; s++) {
> +                               if (b->T->imprints->stats[s + 128]) {
> +                                       pos = b->T->imprints->stats[s] +
> b->hseqbase;
> +                                       break;
> +                               }
> +                       }
> +               } else {
> +                       /* find last non-empty bin */
> +                       for (s = b->T->imprints->bits - 1; s >= 0; s--) {
> +                               if (b->T->imprints->stats[s + 128]) {
> +                                       pos = b->T->imprints->stats[s +
> 64] + b->hseqbase;
> +                                       break;
> +                               }
> +                       }
> +               }
> +       } else {
> +               (void) (*minmax)(&pos, b, NULL, 1, 0, 0, 0, BATcount(b),
> +                                NULL, NULL, BATcount(b), 1, 0);
> +       }
>         if (pos == oid_nil) {
>                 res = ATOMnilptr(b->ttype);
>         } else {
> _______________________________________________
> checkin-list mailing list
> checkin-list at monetdb.org
> https://www.monetdb.org/mailman/listinfo/checkin-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.monetdb.org/pipermail/developers-list/attachments/20150122/8cea0ba7/attachment.html>


More information about the developers-list mailing list