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(; pbpbl; 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(; pbpbl; 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(; pbpj; 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
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(; kj; 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
}