Changeset: 4312192ab215 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4312192ab215 Modified Files: gdk/gdk_analytic_bounds.c sql/server/rel_select.c Branch: window-tunning Log Message:
Pass diff function output into group frame so it will get right results for
call with more than one ordering column
diffs (truncated from 480 to 300 lines):
diff --git a/gdk/gdk_analytic_bounds.c b/gdk/gdk_analytic_bounds.c
--- a/gdk/gdk_analytic_bounds.c
+++ b/gdk/gdk_analytic_bounds.c
@@ -34,6 +34,73 @@
} \
} while (0)
+#define ANALYTICAL_WINDOW_BOUNDS_BRANCHES_ROWS(IMP, LIMIT) \
+ do { \
+ if (p) { \
+ np = (bit*)Tloc(p, 0); \
+ for (; i < cnt; i++) { \
+ if (np[i]) \
+
ANALYTICAL_WINDOW_BOUNDS_ROWS##IMP(LIMIT); \
+ } \
+ i = cnt; \
+ ANALYTICAL_WINDOW_BOUNDS_ROWS##IMP(LIMIT); \
+ } else { \
+ i = cnt; \
+ ANALYTICAL_WINDOW_BOUNDS_ROWS##IMP(LIMIT); \
+ } \
+ } while (0)
+
+#define ANALYTICAL_WINDOW_BOUNDS_GROUPS_PRECEDING(LIMIT) \
+ do { \
+ lng m = k - 1; \
+ for (; k < i; k++) { \
+ lng rlimit = LIMIT; \
+ for (j = k; ; j--) { \
+ if (j == m) { \
+ j++; \
+ break; \
+ } \
+ if (bp[j]) { \
+ if (rlimit == 0) \
+ break; \
+ rlimit--; \
+ } \
+ } \
+ rb[k] =j; \
+ } \
+ } while (0)
+
+#define ANALYTICAL_WINDOW_BOUNDS_GROUPS_FOLLOWING(LIMIT) \
+ do { \
+ for (; k < i; k++) { \
+ lng rlimit = LIMIT; \
+ for (j = k + 1; j < i; j++) { \
+ if (bp[j]) { \
+ if (rlimit == 0) \
+ break; \
+ rlimit--; \
+ } \
+ } \
+ rb[k] = j; \
+ } \
+ } while (0)
+
+#define ANALYTICAL_WINDOW_BOUNDS_BRANCHES_GROUPS(IMP, LIMIT) \
+ do { \
+ if (p) { \
+ np = (bit*)Tloc(p, 0); \
+ for (; i < cnt; i++) { \
+ if (np[i]) \
+
ANALYTICAL_WINDOW_BOUNDS_GROUPS##IMP(LIMIT); \
+ } \
+ i = cnt; \
+ ANALYTICAL_WINDOW_BOUNDS_GROUPS##IMP(LIMIT); \
+ } else { \
+ i = cnt; \
+ ANALYTICAL_WINDOW_BOUNDS_GROUPS##IMP(LIMIT); \
+ } \
+ } while (0)
+
#define ANALYTICAL_WINDOW_BOUNDS_FIXED_RANGE_PRECEDING(TPE1, LIMIT, TPE2) \
do { \
lng m = k - 1; \
@@ -117,97 +184,6 @@
} \
} while (0)
-#define ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS_PRECEDING(TPE1, LIMIT, TPE2) \
- do { \
- lng m = k - 1; \
- if (b->tnonil) { \
- for (; k < i; k++) { \
- TPE2 rlimit = LIMIT; \
- TPE1 v = bp[k]; \
- for (j = k; ; j--) { \
- if (j == m) \
- break; \
- if (v != bp[j]) { \
- if (rlimit == 0) \
- break; \
- rlimit--; \
- v = bp[j]; \
- } \
- } \
- rb[k] = ++j; \
- } \
- } else { \
- for (; k < i; k++) { \
- TPE2 rlimit = LIMIT; \
- TPE1 v = bp[k]; \
- if (is_##TPE1##_nil(v)) { \
- for (j = k; ; j--) { \
- if (j == m) \
- break; \
- if (!is_##TPE1##_nil(bp[j])) \
- break; \
- } \
- } else { \
- for (j = k; ; j--) { \
- if (j == m) \
- break; \
- if (is_##TPE1##_nil(bp[j])) \
- break; \
- if (v != bp[j]) { \
- if (rlimit == 0) \
- break; \
- rlimit--; \
- v = bp[j]; \
- } \
- } \
- } \
- rb[k] = ++j; \
- } \
- } \
- } while (0)
-
-#define ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS_FOLLOWING(TPE1, LIMIT, TPE2) \
- do { \
- if (b->tnonil) { \
- for (; k < i; k++) { \
- TPE2 rlimit = LIMIT; \
- TPE1 v = bp[k]; \
- for (j = k + 1; j < i; j++) { \
- if (v != bp[j]) { \
- if (rlimit == 0) \
- break; \
- rlimit--; \
- v = bp[j]; \
- } \
- } \
- rb[k] = j; \
- } \
- } else { \
- for (; k < i; k++) { \
- TPE2 rlimit = LIMIT; \
- TPE1 v = bp[k]; \
- if (is_##TPE1##_nil(v)) { \
- for (j = k + 1; j < i; j++) { \
- if (!is_##TPE1##_nil(bp[j])) \
- break; \
- } \
- } else { \
- for (j = k + 1; j < i; j++) { \
- if (is_##TPE1##_nil(bp[j])) \
- break; \
- if (v != bp[j]) { \
- if (rlimit == 0) \
- break; \
- rlimit--; \
- v = bp[j]; \
- } \
- } \
- } \
- rb[k] = j; \
- } \
- } \
- } while (0)
-
#define ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED(TPE1, IMP, LIMIT, TPE2) \
do { \
TPE1 *restrict bp = (TPE1*)Tloc(b, 0); \
@@ -301,119 +277,6 @@
} \
} while (0)
-#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_GROUPS_PRECEDING(LIMIT, TPE) \
- do { \
- lng m = k - 1; \
- if (b->tnonil) { \
- for (; k < i; k++) { \
- TPE rlimit = LIMIT; \
- void *v = BUNtail(bpi, (BUN) k); \
- for (j = k; ; j--) { \
- void *next; \
- if (j == m) \
- break; \
- next = BUNtail(bpi, (BUN) j); \
- if (atomcmp(v, next)) { \
- if (rlimit == 0) \
- break; \
- rlimit--; \
- v = next; \
- } \
- } \
- rb[k] = ++j; \
- } \
- } else { \
- for (; k < i; k++) { \
- TPE rlimit = LIMIT; \
- void *v = BUNtail(bpi, (BUN) k); \
- if (atomcmp(v, nil) == 0) { \
- for (j = k; ; j--) { \
- if (j == m) \
- break; \
- if (atomcmp(BUNtail(bpi, (BUN)
j), nil) != 0) \
- break; \
- } \
- } else { \
- for (j = k; ; j--) { \
- void *next; \
- if (j == m) \
- break; \
- next = BUNtail(bpi, (BUN) j); \
- if (atomcmp(next, nil) == 0) \
- break; \
- if (atomcmp(v, next)) { \
- if (rlimit == 0) \
- break; \
- rlimit--; \
- v = next; \
- } \
- } \
- } \
- rb[k] = ++j;
\
- } \
- } \
- } while (0)
-
-#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_GROUPS_FOLLOWING(LIMIT, TPE) \
- do { \
- if (b->tnonil) { \
- for (; k < i; k++) { \
- TPE rlimit = LIMIT; \
- void *v = BUNtail(bpi, (BUN) k); \
- for (j = k + 1; j < i; j++) { \
- void *next = BUNtail(bpi, (BUN) j); \
- if (atomcmp(v, next)) { \
- if (rlimit == 0) \
- break; \
- rlimit--; \
- v = next; \
- } \
- } \
- rb[k] = j; \
- } \
- } else { \
- for (; k < i; k++) { \
- TPE rlimit = LIMIT; \
- void *v = BUNtail(bpi, (BUN) k); \
- if (atomcmp(v, nil) == 0) { \
- for (j = k + 1; j < i; j++) { \
- if (atomcmp(BUNtail(bpi, (BUN)
j), nil) != 0) \
- break; \
- } \
- } else { \
- for (j = k + 1; j < i; j++) { \
- void *next = BUNtail(bpi, (BUN)
j); \
- if (atomcmp(next, nil) == 0) \
- break; \
- if (atomcmp(v, next)) { \
- if (rlimit == 0) \
- break; \
- rlimit--; \
- v = next; \
- } \
- } \
- } \
- rb[k] = j; \
- } \
- } \
- } while (0)
-
-#define ANALYTICAL_WINDOW_BOUNDS_BRANCHES_ROWS(IMP, LIMIT) \
- do { \
- if (p) { \
- np = (bit*)Tloc(p, 0); \
- for (; i < cnt; i++) { \
- if (np[i]) \
-
ANALYTICAL_WINDOW_BOUNDS_ROWS##IMP(LIMIT); \
- } \
- i = cnt; \
- ANALYTICAL_WINDOW_BOUNDS_ROWS##IMP(LIMIT); \
- } else { \
- i = cnt; \
- ANALYTICAL_WINDOW_BOUNDS_ROWS##IMP(LIMIT); \
- } \
- } while (0)
-
#define ANALYTICAL_WINDOW_BOUNDS_BRANCHES_RANGE_NUM(IMP, LIMIT, CAST) \
do { \
switch (tp1) { \
@@ -513,48 +376,6 @@
} while (0)
#endif
-#ifdef HAVE_HGE
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list
