Changeset: f60a4dbc61a5 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f60a4dbc61a5 Modified Files: gdk/gdk_analytic_func.c sql/server/rel_select.c Branch: window-tunning Log Message:
Code more compiler friendly diffs (141 lines): diff --git a/gdk/gdk_analytic_func.c b/gdk/gdk_analytic_func.c --- a/gdk/gdk_analytic_func.c +++ b/gdk/gdk_analytic_func.c @@ -13,57 +13,61 @@ #define ANALYTICAL_DIFF_IMP(TPE) \ do { \ - TPE *bp = (TPE*)Tloc(b, 0); \ - TPE prev = *bp, *end = bp + cnt; \ + TPE *bp = (TPE*)Tloc(b, 0), prev = bp[0]; \ if (np) { \ - for (; bp < end; bp++, rb++, np++) { \ - *rb = *np; \ - if (*bp != prev) { \ - *rb = TRUE; \ - prev = *bp; \ - } \ + for (; i < cnt; i++) { \ + TPE next = bp[i]; \ + if (next != prev) { \ + rb[i] = TRUE; \ + prev = next; \ + } else { \ + rb[i] = np[i]; \ + } \ } \ } else { \ - for (; bp < end; bp++, rb++) { \ - if (*bp == prev) { \ - *rb = FALSE; \ + for (; i < cnt; i++) { \ + TPE next = bp[i]; \ + if (next == prev) { \ + rb[i] = FALSE; \ } else { \ - *rb = TRUE; \ - prev = *bp; \ + rb[i] = TRUE; \ + prev = next; \ } \ - } \ - } \ + } \ + } \ } while (0) /* We use NaN for floating point null values, which always output false on equality tests */ #define ANALYTICAL_DIFF_FLOAT_IMP(TPE) \ do { \ - TPE *bp = (TPE*)Tloc(b, 0); \ - TPE prev = *bp, *end = bp + cnt; \ + TPE *bp = (TPE*)Tloc(b, 0), prev = bp[0]; \ if (np) { \ - for (; bp < end; bp++, rb++, np++) { \ - *rb = *np; \ - if (*bp != prev && (!is_##TPE##_nil(*bp) || !is_##TPE##_nil(prev))) { \ - *rb = TRUE; \ - prev = *bp; \ - } \ + for (; i < cnt; i++) { \ + TPE next = bp[i]; \ + if (next != prev && (!is_##TPE##_nil(next) || !is_##TPE##_nil(prev))) { \ + rb[i] = TRUE; \ + prev = next; \ + } else { \ + rb[i] = np[i]; \ + } \ } \ } else { \ - for (; bp < end; bp++, rb++) { \ - if (*bp == prev || (is_##TPE##_nil(*bp) && is_##TPE##_nil(prev))) { \ - *rb = FALSE; \ + for (; i < cnt; i++) { \ + TPE next = bp[i]; \ + if (next == prev || (is_##TPE##_nil(next) && is_##TPE##_nil(prev))) { \ + rb[i] = FALSE; \ } else { \ - *rb = TRUE; \ - prev = *bp; \ - } \ - } \ - } \ + rb[i] = TRUE; \ + prev = next; \ + } \ + } \ + } \ } while (0) gdk_return GDKanalyticaldiff(BAT *r, BAT *b, BAT *p, int tpe) { - BUN i, cnt = BATcount(b); + BUN i = 0, cnt = BATcount(b); bit *restrict rb = (bit *) Tloc(r, 0), *restrict np = p ? (bit *) Tloc(p, 0) : NULL; switch (ATOMbasetype(tpe)) { @@ -103,22 +107,22 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p ptr v = BUNtail(it, 0), next; int (*atomcmp) (const void *, const void *) = ATOMcompare(tpe); if (np) { - for (i = 0; i < cnt; i++, rb++, np++) { - *rb = *np; + for (i = 0; i < cnt; i++) { + rb[i] = np[i]; next = BUNtail(it, i); if (atomcmp(v, next) != 0) { - *rb = TRUE; + rb[i] = TRUE; v = next; } } } else { - for (i = 0; i < cnt; i++, rb++) { + for (i = 0; i < cnt; i++) { next = BUNtail(it, i); if (atomcmp(v, next) != 0) { - *rb = TRUE; + rb[i] = TRUE; v = next; } else { - *rb = FALSE; + rb[i] = FALSE; } } } diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c --- a/sql/server/rel_select.c +++ b/sql/server/rel_select.c @@ -4608,10 +4608,7 @@ rel_rankop(sql_query *query, sql_rel **r if (window_ident && !get_window_clauses(sql, window_ident, &partition_by_clause, &order_by_clause, &frame_clause)) return NULL; - if (frame_clause) - frame_type = frame_clause->data.lval->h->next->next->data.i_val; - else - frame_type = order_by_clause ? FRAME_RANGE : FRAME_ROWS; + frame_type = frame_clause ? frame_clause->data.lval->h->next->next->data.i_val : FRAME_RANGE; aname = qname_schema_object(dn->data.lval); sname = qname_schema(dn->data.lval); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list