Changeset: 058cc058ecd4 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=058cc058ecd4 Modified Files: gdk/gdk_analytic_bounds.c gdk/gdk_analytic_func.c monetdb5/modules/atoms/mtime_analytic.c sql/backends/monet5/sql.mal sql/server/rel_exp.c sql/server/rel_optimizer.c sql/server/sql_scan.c sql/test/BugTracker-2013/Tests/pivot.Bug-3339.stable.err sql/test/BugTracker-2016/Tests/CREATE_INDEX_breaks_table_queries.Bug-4053.stable.out sql/test/BugTracker/Tests/bug_in_selection.SF-1892413.stable.err sql/test/BugTracker/Tests/bug_in_selection.SF-1892413.stable.out sql/test/Tests/keys.sql sql/test/Tests/keys.stable.out sql/test/copy/Tests/nonutf8.stable.err sql/test/miscellaneous/Tests/All sql/test/miscellaneous/Tests/view-mul-digits.stable.out sql/test/subquery/Tests/correlated.stable.err testing/malcheck.py Branch: default Log Message:
Merge with Nov2019
diffs (truncated from 1171 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
@@ -39,76 +39,144 @@
lng m = k - 1; \
TPE1 v, calc; \
TPE2 rlimit; \
- for (; k < i; k++, rb++) { \
- rlimit = (TPE2) LIMIT; \
- v = bp[k]; \
- if (is_##TPE1##_nil(v)) { \
+ if (b->tnonil) { \
+ for (; k < i; k++, rb++) { \
+ rlimit = (TPE2) LIMIT; \
+ v = bp[k]; \
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; \
SUB_WITH_CHECK(v, bp[j], TPE1, calc,
GDK_##TPE1##_max, goto calc_overflow); \
if ((TPE2)(ABSOLUTE(calc)) > rlimit) \
break; \
} \
- } \
- j++; \
- *rb = j; \
- } \
+ j++;
\
+ *rb = j;
\
+ }
\
+ } else { \
+ for (; k < i; k++, rb++) {
\
+ rlimit = (TPE2) LIMIT;
\
+ 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;
\
+ SUB_WITH_CHECK(v, bp[j], TPE1,
calc, GDK_##TPE1##_max, goto calc_overflow); \
+ if ((TPE2)(ABSOLUTE(calc)) >
rlimit) \
+ break;
\
+ }
\
+ }
\
+ j++;
\
+ *rb = j;
\
+ }
\
+ } \
} while (0)
#define ANALYTICAL_WINDOW_BOUNDS_FIXED_RANGE_FOLLOWING(TPE1, LIMIT, TPE2) \
do { \
TPE1 v, calc; \
TPE2 rlimit; \
- for (; k < i; k++, rb++) { \
- rlimit = (TPE2) LIMIT; \
- v = bp[k]; \
- if (is_##TPE1##_nil(v)) { \
- for (j =k + 1; j < i; j++) { \
- if (!is_##TPE1##_nil(bp[j])) \
- break; \
- } \
- } else { \
+ if (b->tnonil) { \
+ for (; k < i; k++, rb++) {
\
+ rlimit = (TPE2) LIMIT;
\
+ v = bp[k];
\
for (j = k + 1; j < i; j++) { \
- if (is_##TPE1##_nil(bp[j])) \
- break; \
SUB_WITH_CHECK(v, bp[j], TPE1, calc,
GDK_##TPE1##_max, goto calc_overflow); \
if ((TPE2)(ABSOLUTE(calc)) > rlimit) \
break; \
} \
- } \
- *rb = j; \
- } \
+ *rb = j;
\
+ }
\
+ } else { \
+ for (; k < i; k++, rb++) {
\
+ rlimit = (TPE2) LIMIT;
\
+ 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;
\
+ SUB_WITH_CHECK(v, bp[j], TPE1,
calc, GDK_##TPE1##_max, goto calc_overflow); \
+ if ((TPE2)(ABSOLUTE(calc)) >
rlimit) \
+ break;
\
+ }
\
+ }
\
+ *rb = j;
\
+ }
\
+ } \
} while (0)
#define ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS_PRECEDING(TPE1, LIMIT, TPE2) \
do { \
lng m = k - 1; \
- for (; k < i; k++, rb++) { \
- TPE2 rlimit = LIMIT; \
- TPE1 v = bp[k]; \
- if (is_##TPE1##_nil(v)) { \
+ if (b->tnonil) { \
+ for (; k < i; k++, rb++) {
\
+ TPE2 rlimit = LIMIT; \
+ TPE1 v = bp[k];
\
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]; \
+ } \
} \
- } else { \
- for (j = k; ; j--) { \
- if (j == m) \
- break; \
- if (is_##TPE1##_nil(bp[j])) \
- break; \
+ j++;
\
+ *rb = j;
\
+ }
\
+ } else { \
+ for (; k < i; k++, rb++) {
\
+ 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];
\
+ }
\
+ }
\
+ }
\
+ j++;
\
+ *rb = j;
\
+ }
\
+ } \
+ } while (0)
+
+#define ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS_FOLLOWING(TPE1, LIMIT, TPE2) \
+ do { \
+ if (b->tnonil) { \
+ for (; k < i; k++, rb++) {
\
+ TPE2 rlimit = LIMIT; \
+ TPE1 v = bp[k];
\
+ for (j = k + 1; j < i; j++) { \
if (v != bp[j]) { \
if (rlimit == 0) \
break; \
@@ -116,36 +184,32 @@
v = bp[j]; \
} \
} \
- } \
- j++; \
- *rb = j; \
- } \
- } while (0)
-
-#define ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS_FOLLOWING(TPE1, LIMIT, TPE2) \
- do { \
- for (; k < i; k++, rb++) { \
- 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 = j; \
- } \
+ *rb = j;
\
+ } \
+ } else { \
+ for (; k < i; k++, rb++) { \
+ 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 = j;
\
+ }
\
+ } \
} while (0)
#define ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED(TPE1, IMP, LIMIT, TPE2) \
@@ -171,75 +235,94 @@
#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_RANGE_PRECEDING(LIMIT, TPE) \
do { \
lng m = k - 1; \
- for (; k < i; k++, rb++) { \
- void *v = BUNtail(bpi, (BUN) k); \
- if (atomcmp(v, nil) == 0) { \
- for (j = k; ; j--) { \
+ if (b->tnonil) { \
+ for (; k < i; k++, rb++) { \
+ void *v = BUNtail(bpi, (BUN) k); \
+ for (j = k; ; j--) { \
+ void *next; \
if (j == m) \
break; \
- if (atomcmp(BUNtail(bpi, (BUN) j), nil)
!= 0) \
+ next = BUNtail(bpi, (BUN) j); \
+ if (ABSOLUTE((TPE) atomcmp(v, next)) >
(TPE) LIMIT) \
+ break; \
+ } \
+ j++; \
+ *rb = j; \
+ } \
+ } else { \
+ for (; k < i; k++, rb++) {
\
+ 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 (ABSOLUTE((TPE) atomcmp(v,
next)) > (TPE) LIMIT) \
+ break;
\
+ }
\
+ }
\
+ j++;
\
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list
