Changeset: eb6ac1a71b82 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=eb6ac1a71b82
Added Files:
sql/test/analytics/Tests/analytics04.sql
sql/test/analytics/Tests/analytics04.stable.err
sql/test/analytics/Tests/analytics04.stable.out
Modified Files:
gdk/gdk_analytic.c
gdk/gdk_analytic.h
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql_rank.c
sql/backends/monet5/sql_rank.h
sql/backends/monet5/sql_rank.mal
sql/backends/monet5/sql_rank.mal.sh
sql/backends/monet5/sql_rank_hge.mal
sql/backends/monet5/sql_rank_hge.mal.sh
sql/common/sql_types.c
sql/server/rel_select.c
sql/server/sql_parser.h
sql/server/sql_parser.y
sql/test/analytics/Tests/All
sql/test/analytics/Tests/analytics03.stable.err
Branch: analytics
Log Message:
Supporting non-centered window bounds for rows bounds at least. Cleaned macros
according to the change.
I have to test range and groups yet.
diffs (truncated from 1759 to 300 lines):
diff --git a/gdk/gdk_analytic.c b/gdk/gdk_analytic.c
--- a/gdk/gdk_analytic.c
+++ b/gdk/gdk_analytic.c
@@ -102,44 +102,44 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
#undef ANALYTICAL_DIFF_IMP
-#define ANALYTICAL_WINDOW_BOUNDS_FIXED_ROWS_START(TPE, BOUNDF) \
+#define ANALYTICAL_WINDOW_BOUNDS_FIXED_ROWS_PRECEDING(TPE, BOUNDF) \
do { \
TPE *bl = pbp; \
for(; pbp<bp; pbp++, rb++) { \
lng rlimit = BOUNDF; \
- *rb = MIN(pbp - bl, rlimit); \
+ *rb = -MIN(pbp - bl, rlimit - inc_last); \
} \
} while(0);
-#define ANALYTICAL_WINDOW_BOUNDS_FIXED_ROWS_END(TPE, BOUNDF) \
+#define ANALYTICAL_WINDOW_BOUNDS_FIXED_ROWS_FOLLOWING(TPE, BOUNDF) \
do { \
for(; pbp<bp; pbp++, rb++) { \
lng rlimit = BOUNDF; \
- *rb = MIN(bp - pbp-1, rlimit) + 1; \
+ *rb = MIN(bp - pbp - inc_last, rlimit) + inc_last; \
} \
} while(0);
-#define ANALYTICAL_WINDOW_BOUNDS_FIXED_UNBOUNDED_START(TPE, BOUNDF) \
+#define ANALYTICAL_WINDOW_BOUNDS_FIXED_UNBOUNDED_PRECEDING(TPE, BOUNDF) \
do { \
TPE *bl = pbp; \
for(; pbp<bp; pbp++, rb++) \
- *rb = (lng)(pbp - bl); \
+ *rb = -(lng)(pbp - bl); \
} while(0);
-#define ANALYTICAL_WINDOW_BOUNDS_FIXED_UNBOUNDED_END(TPE, BOUNDF) \
+#define ANALYTICAL_WINDOW_BOUNDS_FIXED_UNBOUNDED_FOLLOWING(TPE, BOUNDF) \
do { \
for(; pbp<bp; pbp++, rb++) \
*rb = (lng)(bp - pbp); \
} while(0);
-#define ANALYTICAL_WINDOW_BOUNDS_FIXED_RANGE_START(TPE, BOUNDF) \
+#define ANALYTICAL_WINDOW_BOUNDS_FIXED_RANGE_PRECEDING(TPE, BOUNDF) \
do { \
TPE *bl = pbp-1, *bs, v, rlimit; \
for(; pbp<bp; pbp++, rb++) { \
- lng curval = 0; \
+ lng curval = -inc_last; \
rlimit = (TPE) BOUNDF; \
v = *pbp; \
- for(bs=pbp-1; bs>bl; bs--, curval++) { \
+ for(bs=pbp-1; bs>bl; bs--, curval--) { \
TPE calc; \
SUB_WITH_CHECK(TPE, v, TPE, *bs, TPE, calc,
GDK_##TPE##_max, goto calc_overflow); \
if (ABSOLUTE(calc) > rlimit) \
@@ -149,11 +149,11 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
} \
} while(0);
-#define ANALYTICAL_WINDOW_BOUNDS_FIXED_RANGE_END(TPE, BOUNDF) \
+#define ANALYTICAL_WINDOW_BOUNDS_FIXED_RANGE_FOLLOWING(TPE, BOUNDF) \
do { \
TPE *bs, v, rlimit; \
for(; pbp<bp; pbp++, rb++) { \
- lng curval = 1; \
+ lng curval = inc_last; \
rlimit = (TPE) BOUNDF; \
v = *pbp; \
for(bs=pbp+1; bs<bp; bs++, curval++) { \
@@ -166,14 +166,14 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
} \
} while(0);
-#define ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS_START(TPE, BOUNDF) \
+#define ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS_PRECEDING(TPE, BOUNDF) \
do { \
TPE *bl = pbp-1, *bs, v; \
for(; pbp<bp; pbp++, rb++) { \
- lng curval = 0; \
+ lng curval = -inc_last; \
BUN rlimit = (BUN) BOUNDF; \
v = *pbp; \
- for(bs=pbp-1; bs>bl; bs--, curval++) { \
+ for(bs=pbp-1; bs>bl; bs--, curval--) { \
if(v != *bs) { \
if(rlimit == 0) \
break;
\
@@ -185,11 +185,11 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
} \
} while(0);
-#define ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS_END(TPE, BOUNDF) \
+#define ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS_FOLLOWING(TPE, BOUNDF) \
do { \
TPE *bs, v; \
for(; pbp<bp; pbp++, rb++) { \
- lng curval = 1; \
+ lng curval = inc_last; \
BUN rlimit = (BUN) BOUNDF; \
v = *pbp; \
for(bs=pbp+1; bs<bp; bs++, curval++) { \
@@ -204,14 +204,14 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
} \
} while(0);
-#define ANALYTICAL_WINDOW_BOUNDS_FIXED_ALL_START(TPE, BOUNDF) \
+#define ANALYTICAL_WINDOW_BOUNDS_FIXED_ALL_PRECEDING(TPE, BOUNDF) \
do { \
lng curval = 0; \
for(; pbp<bp; pbp++, rb++) \
- *rb = curval++; \
+ *rb = curval--; \
} while(0);
-#define ANALYTICAL_WINDOW_BOUNDS_FIXED_ALL_END(TPE, BOUNDF) \
+#define ANALYTICAL_WINDOW_BOUNDS_FIXED_ALL_FOLLOWING(TPE, BOUNDF) \
do { \
lng curval = ncnt + 1; \
for(; pbp<bp; pbp++, rb++) \
@@ -222,25 +222,25 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
do { \
TPE *pbp, *bp; \
pbp = bp = (TPE*)Tloc(b, 0); \
- if(start) { \
+ if(preceding) { \
if(np) { \
nend += cnt; \
for(; np<nend; np++) { \
if (*np) { \
ncnt = (np - pnp); \
bp += ncnt; \
- IMP##_START(TPE, BOUNDF) \
+ IMP##_PRECEDING(TPE, BOUNDF) \
pnp = np; \
pbp = bp; \
} \
} \
ncnt = (np - pnp); \
bp += ncnt; \
- IMP##_START(TPE, BOUNDF) \
+ IMP##_PRECEDING(TPE, BOUNDF) \
} else { \
ncnt = cnt; \
bp += ncnt; \
- IMP##_START(TPE, BOUNDF) \
+ IMP##_PRECEDING(TPE, BOUNDF) \
} \
} else if(np) { \
nend += cnt; \
@@ -248,31 +248,31 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
if (*np) { \
ncnt = (np - pnp); \
bp += ncnt; \
- IMP##_END(TPE, BOUNDF) \
+ IMP##_FOLLOWING(TPE, BOUNDF) \
pnp = np; \
pbp = bp; \
} \
} \
ncnt = (np - pnp); \
bp += ncnt; \
- IMP##_END(TPE, BOUNDF) \
+ IMP##_FOLLOWING(TPE, BOUNDF) \
} else { \
ncnt = cnt; \
bp += ncnt; \
- IMP##_END(TPE, BOUNDF) \
+ IMP##_FOLLOWING(TPE, BOUNDF) \
} \
} while(0);
-#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_ROWS_START(BOUNDF) \
+#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_ROWS_PRECEDING(BOUNDF) \
do { \
BUN m = k; \
for(; k<i; k++, rb++) { \
lng rlimit = BOUNDF; \
- *rb = MIN((lng)(k - m), rlimit); \
+ *rb = -MIN((lng)(k - m), rlimit); \
} \
} while(0);
-#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_ROWS_END(BOUNDF) \
+#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_ROWS_FOLLOWING(BOUNDF) \
do { \
for(; k<i; k++, rb++) { \
lng rlimit = BOUNDF; \
@@ -280,20 +280,20 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
} \
} while(0);
-#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_UNBOUNDED_START(BOUNDV) \
+#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_UNBOUNDED_PRECEDING(BOUNDV) \
do { \
BUN j = k; \
for(; k<i; k++, rb++) \
- *rb = (k - j); \
+ *rb = -(lng)(k - j); \
} while(0);
-#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_UNBOUNDED_END(BOUNDV) \
+#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_UNBOUNDED_FOLLOWING(BOUNDV) \
do { \
for(; k<i; k++, rb++) \
*rb = (i - k); \
} while(0);
-#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_RANGE_START(BOUNDV) \
+#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_RANGE_PRECEDING(BOUNDV) \
do { \
BUN j; \
*rb = 0; /* the first element's window size is hardcoded to
avoid overflow in BUN */ \
@@ -301,9 +301,9 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
k++; \
j = k - 1; \
for(; k<i; k++, rb++) { \
- lng curval = 1; \
+ lng curval = -inc_last; \
void *v = BUNtail(bpi, k); \
- for(BUN l=k-1; l>j; l--, curval++) { \
+ for(BUN l=k-1; l>j; l--, curval--) { \
if (ABSOLUTE(atomcmp(v, BUNtail(bpi, l))) >
BOUNDV) \
break; \
} \
@@ -311,10 +311,10 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
} \
} while(0);
-#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_RANGE_END(BOUNDV) \
+#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_RANGE_FOLLOWING(BOUNDV) \
do { \
for(; k<i; k++, rb++) { \
- lng curval = 1; \
+ lng curval = inc_last; \
void *v = BUNtail(bpi, k); \
for(BUN l=k+1; l<i; l++, curval++) { \
if (ABSOLUTE(atomcmp(v, BUNtail(bpi, l))) >
BOUNDV) \
@@ -324,7 +324,7 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
} \
} while(0);
-#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_GROUPS_START(BOUNDV) \
+#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_GROUPS_PRECEDING(BOUNDV) \
do { \
BUN j; \
*rb = 0; /* the first element's window size is hardcoded to
avoid overflow in BUN */ \
@@ -332,10 +332,10 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
k++; \
j = k - 1; \
for(; k<i; k++, rb++) { \
- lng curval = 1; \
+ lng curval = -inc_last; \
BUN rlimit = (BUN) BOUNDV; \
void *v = BUNtail(bpi, k); \
- for(BUN l=k-1; l>j; l--, curval++) { \
+ for(BUN l=k-1; l>j; l--, curval--) { \
void *next = BUNtail(bpi, l); \
if(atomcmp(v, next)) { \
if(rlimit == 0) \
@@ -348,10 +348,10 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
} \
} while(0);
-#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_GROUPS_END(BOUNDV) \
+#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_GROUPS_FOLLOWING(BOUNDV) \
do { \
for(; k<i; k++, rb++) { \
- lng curval = 1; \
+ lng curval = inc_last; \
BUN rlimit = (BUN) BOUNDV; \
void *v = BUNtail(bpi, k); \
for(BUN l=k+1; l<i; l++, curval++) { \
@@ -367,14 +367,14 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
} \
} while(0);
-#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_ALL_START(BOUNDV) \
+#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_ALL_PRECEDING(BOUNDV) \
do { \
lng curval = 0; \
for(; k<i; k++, rb++) \
- *rb = curval++; \
+ *rb = curval--; \
} while(0);
-#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_ALL_END(BOUNDV) \
+#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_ALL_FOLLOWING(BOUNDV) \
do { \
lng curval = ncnt + 1; \
for(; k<i; k++, rb++) \
@@ -416,7 +416,7 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED(dbl,
ANALYTICAL_WINDOW_BOUNDS_FIXED##FRAME, BOUNDF) \
break; \
default: { \
- if(start) { \
+ if(preceding) { \
if (p) { \
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list