Changeset: 255c9d707cac for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=255c9d707cac
Modified Files:
gdk/gdk_analytic.c
Branch: analytics
Log Message:
Distinguish unbounded limit from others, due to possible overflow in
calculation on range frames.
diffs (94 lines):
diff --git a/gdk/gdk_analytic.c b/gdk/gdk_analytic.c
--- a/gdk/gdk_analytic.c
+++ b/gdk/gdk_analytic.c
@@ -123,6 +123,19 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
*rb = --curval; \
} while(0);
+#define ANALYTICAL_WINDOW_BOUNDS_FIXED_UNBOUNDED_START(TPE) \
+ do { \
+ TPE *bl = pbp; \
+ for(; pbp<bp; pbp++, rb++) \
+ *rb = (int)(pbp - bl); \
+ } while(0);
+
+#define ANALYTICAL_WINDOW_BOUNDS_FIXED_UNBOUNDED_END(TPE) \
+ do { \
+ for(; pbp<bp; pbp++, rb++) \
+ *rb = (int)(bp - pbp); \
+ } while(0);
+
#define ANALYTICAL_WINDOW_BOUNDS_FIXED_RANGE_START(TPE) \
do { \
TPE *bl = pbp-1, *bs, v, blimit = (TPE) limit; \
@@ -275,6 +288,19 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
*rb = --curval; \
} while(0);
+#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_UNBOUNDED_START \
+ do { \
+ BUN j = k; \
+ for(; k<i; k++, rb++) \
+ *rb = (k - j); \
+ } while(0);
+
+#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_UNBOUNDED_END \
+ do { \
+ for(; k<i; k++, rb++) \
+ *rb = (i - k); \
+ } while(0);
+
#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_RANGE_START \
do { \
void *v; \
@@ -459,14 +485,16 @@ GDKanalyticalwindowbounds(BAT *r, BAT *b
BATiter bpi = bat_iterator(b);
int (*atomcmp)(const void *, const void *) = ATOMcompare(tpe);
- if(unit == 0) {
+ if(unit == 3) {
+ ANALYTICAL_WINDOW_BOUNDS_BRANCHES(_ALL)
+ } else if(limit == GDK_int_max) {
+ ANALYTICAL_WINDOW_BOUNDS_BRANCHES(_UNBOUNDED)
+ } else if(unit == 0) {
ANALYTICAL_WINDOW_BOUNDS_BRANCHES(_ROWS)
} else if(unit == 1) {
ANALYTICAL_WINDOW_BOUNDS_BRANCHES(_RANGE)
} else if(unit == 2) {
ANALYTICAL_WINDOW_BOUNDS_BRANCHES(_GROUPS)
- } else if(unit == 3) {
- ANALYTICAL_WINDOW_BOUNDS_BRANCHES(_ALL)
} else {
assert(0);
}
@@ -476,22 +504,26 @@ GDKanalyticalwindowbounds(BAT *r, BAT *b
return GDK_SUCCEED;
}
+#undef ANALYTICAL_WINDOW_BOUNDS_FIXED_ALL_START
+#undef ANALYTICAL_WINDOW_BOUNDS_FIXED_ALL_END
+#undef ANALYTICAL_WINDOW_BOUNDS_FIXED_UNBOUNDED_START
+#undef ANALYTICAL_WINDOW_BOUNDS_FIXED_UNBOUNDED_END
#undef ANALYTICAL_WINDOW_BOUNDS_FIXED_ROWS_START
#undef ANALYTICAL_WINDOW_BOUNDS_FIXED_ROWS_END
#undef ANALYTICAL_WINDOW_BOUNDS_FIXED_RANGE_START
#undef ANALYTICAL_WINDOW_BOUNDS_FIXED_RANGE_END
#undef ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS_START
#undef ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS_END
-#undef ANALYTICAL_WINDOW_BOUNDS_FIXED_ALL_START
-#undef ANALYTICAL_WINDOW_BOUNDS_FIXED_ALL_END
+#undef ANALYTICAL_WINDOW_BOUNDS_VARSIZED_ALL_START
+#undef ANALYTICAL_WINDOW_BOUNDS_VARSIZED_ALL_END
+#undef ANALYTICAL_WINDOW_BOUNDS_VARSIZED_UNBOUNDED_START
+#undef ANALYTICAL_WINDOW_BOUNDS_VARSIZED_UNBOUNDED_END
#undef ANALYTICAL_WINDOW_BOUNDS_VARSIZED_ROWS_START
#undef ANALYTICAL_WINDOW_BOUNDS_VARSIZED_ROWS_END
#undef ANALYTICAL_WINDOW_BOUNDS_VARSIZED_RANGE_START
#undef ANALYTICAL_WINDOW_BOUNDS_VARSIZED_RANGE_END
#undef ANALYTICAL_WINDOW_BOUNDS_VARSIZED_GROUPS_START
#undef ANALYTICAL_WINDOW_BOUNDS_VARSIZED_GROUPS_END
-#undef ANALYTICAL_WINDOW_BOUNDS_VARSIZED_ALL_START
-#undef ANALYTICAL_WINDOW_BOUNDS_VARSIZED_ALL_END
#undef ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED
#undef ANALYTICAL_WINDOW_BOUNDS_BRANCHES
#undef ANALYTICAL_WINDOW_BOUNDS_LIMIT
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list