Changeset: f1a38bed20d5 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f1a38bed20d5
Modified Files:
        gdk/gdk_analytic.h
        gdk/gdk_analytic_func.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_rank.c
        sql/server/rel_select.c
Branch: window-tunning
Log Message:

Pass ordering information for FRAME_UNBOUNDED_TILL_CURRENT_ROW and 
FRAME_CURRENT_ROW_TILL_UNBOUNDED cases. Cleaned the rest


diffs (truncated from 1404 to 300 lines):

diff --git a/gdk/gdk_analytic.h b/gdk/gdk_analytic.h
--- a/gdk/gdk_analytic.h
+++ b/gdk/gdk_analytic.h
@@ -29,13 +29,13 @@ gdk_export gdk_return GDKanalyticalfirst
 gdk_export gdk_return GDKanalyticallast(BAT *r, BAT *b, BAT *s, BAT *e, int 
tpe);
 gdk_export gdk_return GDKanalyticalnthvalue(BAT *r, BAT *b, BAT *s, BAT *e, 
BAT *l, const void *restrict bound, int tp1, int tp2);
 
-gdk_export gdk_return GDKanalyticalmin(BAT *r, BAT *p, BAT *b, BAT *s, BAT *e, 
int tpe, int frame_type);
-gdk_export gdk_return GDKanalyticalmax(BAT *r, BAT *p, BAT *b, BAT *s, BAT *e, 
int tpe, int frame_type);
-gdk_export gdk_return GDKanalyticalcount(BAT *r, BAT *p, BAT *b, BAT *s, BAT 
*e, bit ignore_nils, int tpe, int frame_type);
-gdk_export gdk_return GDKanalyticalsum(BAT *r, BAT *p, BAT *b, BAT *s, BAT *e, 
int tp1, int tp2, int frame_type);
-gdk_export gdk_return GDKanalyticalprod(BAT *r, BAT *p, BAT *b, BAT *s, BAT 
*e, int tp1, int tp2, int frame_type);
-gdk_export gdk_return GDKanalyticalavg(BAT *r, BAT *p, BAT *b, BAT *s, BAT *e, 
int tpe, int frame_type);
-gdk_export gdk_return GDKanalyticalavginteger(BAT *r, BAT *p, BAT *b, BAT *s, 
BAT *e, int tpe, int frame_type);
+gdk_export gdk_return GDKanalyticalmin(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, 
BAT *e, int tpe, int frame_type);
+gdk_export gdk_return GDKanalyticalmax(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, 
BAT *e, int tpe, int frame_type);
+gdk_export gdk_return GDKanalyticalcount(BAT *r, BAT *p, BAT *o, BAT *b, BAT 
*s, BAT *e, bit ignore_nils, int tpe, int frame_type);
+gdk_export gdk_return GDKanalyticalsum(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, 
BAT *e, int tp1, int tp2, int frame_type);
+gdk_export gdk_return GDKanalyticalprod(BAT *r, BAT *p, BAT *o, BAT *b, BAT 
*s, BAT *e, int tp1, int tp2, int frame_type);
+gdk_export gdk_return GDKanalyticalavg(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, 
BAT *e, int tpe, int frame_type);
+gdk_export gdk_return GDKanalyticalavginteger(BAT *r, BAT *p, BAT *o, BAT *b, 
BAT *s, BAT *e, int tpe, int frame_type);
 
 gdk_export gdk_return GDKanalytical_stddev_samp(BAT *r, BAT *b, BAT *s, BAT 
*e, int tpe);
 gdk_export gdk_return GDKanalytical_stddev_pop(BAT *r, BAT *b, BAT *s, BAT *e, 
int tpe);
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
@@ -790,10 +790,9 @@ GDKanalyticallead(BAT *r, BAT *b, BAT *p
 #define ANALYTICAL_MIN_MAX_CALC_FIXED_UNBOUNDED_TILL_CURRENT_ROW(TPE, MIN_MAX) 
\
        do { \
                for (; k < i;) { \
-                       TPE v = bp[k]; \
-                       TPE curval = v; \
                        j = k++; \
-                       while (k < i && bp[k] == v) { \
+                       TPE curval = bp[j]; \
+                       while (k < i && !op[k]) { \
                                if (!is_##TPE##_nil(bp[k])) {           \
                                        if (is_##TPE##_nil(curval))     \
                                                curval = bp[k]; \
@@ -811,10 +810,9 @@ GDKanalyticallead(BAT *r, BAT *b, BAT *p
 #define ANALYTICAL_MIN_MAX_CALC_FIXED_CURRENT_ROW_TILL_UNBOUNDED(TPE, MIN_MAX) 
\
        do { \
                for (j = i - 1; j >= k; ) { \
-                       TPE v = bp[j]; \
-                       TPE curval = v; \
                        l = j--; \
-                       while (j >= k && bp[j] == v) { \
+                       TPE curval = bp[l]; \
+                       while (j >= k && !op[j]) { \
                                if (!is_##TPE##_nil(bp[j])) {           \
                                        if (is_##TPE##_nil(curval))     \
                                                curval = bp[j]; \
@@ -883,15 +881,15 @@ GDKanalyticallead(BAT *r, BAT *b, BAT *p
 #define ANALYTICAL_MIN_MAX_CALC_VARSIZED_UNBOUNDED_TILL_CURRENT_ROW(GT_LT)     
\
        do { \
                for (; k < i;) { \
-                       void *next = BUNtail(bpi, k), *curval = next;   \
                        j = k++; \
-                       while (k < i && atomcmp(BUNtail(bpi, k), next) == 0) { \
-                               void *nnext = BUNtail(bpi, k); \
-                               if (atomcmp(nnext, nil) != 0) {         \
+                       void *curval = BUNtail(bpi, j); \
+                       while (k < i && !op[k]) { \
+                               void *next = BUNtail(bpi, k); \
+                               if (atomcmp(next, nil) != 0) {          \
                                        if (atomcmp(curval, nil) == 0)  \
-                                               curval = nnext;         \
+                                               curval = next;          \
                                        else                            \
-                                               curval = atomcmp(nnext, curval) 
GT_LT 0 ? curval : nnext; \
+                                               curval = atomcmp(next, curval) 
GT_LT 0 ? curval : next; \
                                }                                       \
                                k++; \
                        } \
@@ -905,15 +903,15 @@ GDKanalyticallead(BAT *r, BAT *b, BAT *p
 #define ANALYTICAL_MIN_MAX_CALC_VARSIZED_CURRENT_ROW_TILL_UNBOUNDED(GT_LT)     
\
        do { \
                for (j = i - 1; j >= k; ) { \
-                       void *next = BUNtail(bpi, j), *curval = next;   \
                        l = j--; \
-                       while (j >= k && atomcmp(BUNtail(bpi, j), next) == 0) { 
\
-                               void *nnext = BUNtail(bpi, j); \
-                               if (atomcmp(nnext, nil) != 0) {         \
+                       void *curval = BUNtail(bpi, l); \
+                       while (j >= k && !op[j]) { \
+                               void *next = BUNtail(bpi, j); \
+                               if (atomcmp(next, nil) != 0) {          \
                                        if (atomcmp(curval, nil) == 0)  \
-                                               curval = nnext;         \
+                                               curval = next;          \
                                        else                            \
-                                               curval = atomcmp(nnext, curval) 
GT_LT 0 ? curval : nnext; \
+                                               curval = atomcmp(next, curval) 
GT_LT 0 ? curval : next; \
                                }                                       \
                                j--; \
                        } \
@@ -1035,12 +1033,12 @@ GDKanalyticallead(BAT *r, BAT *b, BAT *p
 
 #define ANALYTICAL_MIN_MAX(OP, MIN_MAX, GT_LT)                         \
 gdk_return                                                             \
-GDKanalytical##OP(BAT *r, BAT *p, BAT *b, BAT *s, BAT *e, int tpe, int 
frame_type)             \
+GDKanalytical##OP(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, int tpe, int 
frame_type)             \
 {                                                                      \
        bool has_nils = false;                                          \
        lng i = 0, j = 0, k = 0, l = 0, m = 0, cnt = (lng) BATcount(b);         
                        \
        lng *restrict start = s ? (lng*)Tloc(s, 0) : NULL, *restrict end = e ? 
(lng*)Tloc(e, 0) : NULL;         \
-       bit *restrict np = p ? Tloc(p, 0) : NULL;       \
+       bit *restrict np = p ? Tloc(p, 0) : NULL, *restrict op = o ? Tloc(o, 0) 
: NULL;         \
        BATiter bpi = bat_iterator(b);                          \
        const void *nil = ATOMnilptr(tpe);                      \
        int (*atomcmp)(const void *, const void *) = ATOMcompare(tpe); \
@@ -1077,10 +1075,9 @@ ANALYTICAL_MIN_MAX(max, MAX, <)
                curval = 0; \
                if (count_all) { \
                        for (; k < i;) { \
-                               TPE v = bp[k]; \
                                j = k++; \
                                curval++; \
-                               while (k < i && bp[k] == v) { \
+                               while (k < i && !op[k]) { \
                                        curval++; \
                                        k++; \
                                } \
@@ -1089,10 +1086,9 @@ ANALYTICAL_MIN_MAX(max, MAX, <)
                        } \
                } else { \
                        for (; k < i;) { \
-                               TPE v = bp[k]; \
                                j = k++; \
-                               curval += !is_##TPE##_nil(v); \
-                               while (k < i && bp[k] == v) { \
+                               curval += !is_##TPE##_nil(bp[j]); \
+                               while (k < i && !op[k]) { \
                                        curval += !is_##TPE##_nil(bp[k]); \
                                        k++; \
                                } \
@@ -1107,10 +1103,9 @@ ANALYTICAL_MIN_MAX(max, MAX, <)
                curval = 0; \
                if (count_all) { \
                        for (j = i - 1; j >= k; ) { \
-                               TPE v = bp[j]; \
                                l = j--; \
                                curval++; \
-                               while (j >= k && bp[j] == v) { \
+                               while (j >= k && !op[j]) { \
                                        curval++; \
                                        j--; \
                                } \
@@ -1120,10 +1115,9 @@ ANALYTICAL_MIN_MAX(max, MAX, <)
                        }       \
                } else { \
                        for (j = i - 1; j >= k; ) { \
-                               TPE v = bp[j]; \
                                l = j--; \
-                               curval += !is_##TPE##_nil(bp[j]); \
-                               while (j >= k && bp[j] == v) { \
+                               curval += !is_##TPE##_nil(bp[l]); \
+                               while (j >= k && !op[j]) { \
                                        curval += !is_##TPE##_nil(bp[j]); \
                                        j--; \
                                } \
@@ -1186,10 +1180,9 @@ ANALYTICAL_MIN_MAX(max, MAX, <)
                if (count_all) { \
                        if (isvarsized) { \
                                for (; k < i; ) { \
-                                       const void *v = base + ((const var_t *) 
bheap)[k]; \
                                        j = k++; \
                                        curval++; \
-                                       while (k < i && cmp(base + ((const 
var_t *) bheap)[k], v) == 0) { \
+                                       while (k < i && !op[k]) { \
                                                curval++; \
                                                k++; \
                                        } \
@@ -1198,10 +1191,9 @@ ANALYTICAL_MIN_MAX(max, MAX, <)
                                } \
                        } else { \
                                for (; k < i; ) { \
-                                       const void *v = Tloc(b, k); \
                                        j = k++; \
                                        curval++; \
-                                       while (k < i && cmp(Tloc(b, k), v) == 
0) { \
+                                       while (k < i && !op[k]) { \
                                                curval++; \
                                                k++; \
                                        } \
@@ -1212,10 +1204,10 @@ ANALYTICAL_MIN_MAX(max, MAX, <)
                } else { \
                        if (isvarsized) { \
                                for (; k < i; ) { \
-                                       const void *v = base + ((const var_t *) 
bheap)[k]; \
                                        j = k++; \
+                                       const void *v = base + ((const var_t *) 
bheap)[j]; \
                                        curval += cmp(v, nil) != 0; \
-                                       while (k < i && cmp(base + ((const 
var_t *) bheap)[k], v) == 0) { \
+                                       while (k < i && !op[k]) { \
                                                curval += cmp(base + ((const 
var_t *) bheap)[k], nil) != 0; \
                                                k++; \
                                        } \
@@ -1224,11 +1216,11 @@ ANALYTICAL_MIN_MAX(max, MAX, <)
                                } \
                        } else { \
                                for (; k < i; ) { \
-                                       const void *v = Tloc(b, k); \
                                        j = k++; \
+                                       const void *v = BUNtail(bpi, j); \
                                        curval += cmp(v, nil) != 0; \
-                                       while (k < i && cmp(Tloc(b, k), v) == 
0) { \
-                                               curval += cmp(Tloc(b, k), nil) 
!= 0; \
+                                       while (k < i && !op[k]) { \
+                                               curval += cmp(BUNtail(bpi, k), 
nil) != 0; \
                                                k++; \
                                        } \
                                        for (; j < k; j++) \
@@ -1244,10 +1236,9 @@ ANALYTICAL_MIN_MAX(max, MAX, <)
                if (count_all) { \
                        if (isvarsized) { \
                                for (j = i - 1; j >= k; ) { \
-                                       const void *v = base + ((const var_t *) 
bheap)[j]; \
                                        l = j--; \
                                        curval++; \
-                                       while (j >= k && cmp(base + ((const 
var_t *) bheap)[j], v) == 0) { \
+                                       while (j >= k && !op[j]) { \
                                                curval++; \
                                                j--; \
                                        } \
@@ -1257,10 +1248,9 @@ ANALYTICAL_MIN_MAX(max, MAX, <)
                                }       \
                        } else { \
                                for (j = i - 1; j >= k; ) { \
-                                       void *v = Tloc(b, j); \
                                        l = j--; \
                                        curval++; \
-                                       while (j >= k && cmp(Tloc(b, j), v) == 
0) { \
+                                       while (j >= k && !op[j]) { \
                                                curval++; \
                                                j--; \
                                        } \
@@ -1272,10 +1262,10 @@ ANALYTICAL_MIN_MAX(max, MAX, <)
                } else { \
                        if (isvarsized) { \
                                for (j = i - 1; j >= k; ) { \
-                                       const void *v = base + ((const var_t *) 
bheap)[j]; \
                                        l = j--; \
+                                       const void *v = base + ((const var_t *) 
bheap)[l]; \
                                        curval += cmp(v, nil) != 0; \
-                                       while (j >= k && cmp(base + ((const 
var_t *) bheap)[j], v) == 0) { \
+                                       while (j >= k && !op[j]) { \
                                                curval += cmp(base + ((const 
var_t *) bheap)[j], nil) != 0; \
                                                j--; \
                                        } \
@@ -1285,11 +1275,11 @@ ANALYTICAL_MIN_MAX(max, MAX, <)
                                }       \
                        } else { \
                                for (j = i - 1; j >= k; ) { \
-                                       void *v = Tloc(b, j); \
                                        l = j--; \
+                                       const void *v = Tloc(b, l); \
                                        curval += cmp(v, nil) != 0; \
-                                       while (j >= k && cmp(Tloc(b, j), v) == 
0) { \
-                                               curval += cmp(Tloc(b, j), nil) 
!= 0; \
+                                       while (j >= k && !op[j]) { \
+                                               curval += cmp(BUNtail(bpi, j), 
nil) != 0; \
                                                j--; \
                                        } \
                                        m = MAX(k, j); \
@@ -1312,7 +1302,7 @@ ANALYTICAL_MIN_MAX(max, MAX, <)
                                        curval += cmp(nil, base + ((const var_t 
*) bheap)[j]) != 0; \
                        } else { \
                                for (; j < i; j++) \
-                                       curval += cmp(Tloc(b, j), nil) != 0; \
+                                       curval += cmp(BUNtail(bpi, j), nil) != 
0; \
                        } \
                }       \
                for (; k < i; k++) \
@@ -1330,7 +1320,7 @@ ANALYTICAL_MIN_MAX(max, MAX, <)
                                        rb[k] = cmp(nil, base + ((const var_t 
*) bheap)[k]) != 0; \
                        } else { \
                                for (; k < i; k++) \
-                                       rb[k] = cmp(Tloc(b, k), nil) != 0; \
+                                       rb[k] = cmp(BUNtail(bpi, k), nil) != 0; 
\
                        } \
                } \
        } while (0)
@@ -1356,7 +1346,7 @@ ANALYTICAL_MIN_MAX(max, MAX, <)
                                        j = start[k]; \
                                        l = end[k]; \
                                        for (; j < l; j++) \
-                                               curval += cmp(Tloc(b, j), nil) 
!= 0; \
+                                               curval += cmp(BUNtail(bpi, j), 
nil) != 0; \
                                        rb[k] = curval; \
                                        curval = 0; \
                                } \
@@ -1423,16 +1413,17 @@ ANALYTICAL_MIN_MAX(max, MAX, <)
        } while (0)
 
 gdk_return
-GDKanalyticalcount(BAT *r, BAT *p, BAT *b, BAT *s, BAT *e, bit ignore_nils, 
int tpe, int frame_type)
+GDKanalyticalcount(BAT *r, BAT *p, BAT *o, BAT *b, BAT *s, BAT *e, bit 
ignore_nils, int tpe, int frame_type)
 {
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to