Changeset: 1b4349e213c6 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1b4349e213c6 Modified Files: gdk/gdk_analytic_bounds.c sql/test/BugConstraints/Tests/check_constraint.SF-1714829.stable.err sql/test/pg_regress/Tests/alter_table.stable.err sql/test/pg_regress/Tests/alter_table.stable.out Branch: default Log Message:
Merge with Nov2019
diffs (truncated from 694 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
@@ -94,7 +94,7 @@
do { \
lng m = k - 1; \
for (; k < i; k++, rb++) { \
- TPE2 rlimit = (TPE2) LIMIT; \
+ TPE2 rlimit = LIMIT; \
TPE1 v = bp[k]; \
if (is_##TPE1##_nil(v)) { \
for (j = k; ; j--) { \
@@ -125,7 +125,7 @@
#define ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS_FOLLOWING(TPE1, LIMIT, TPE2) \
do { \
for (; k < i; k++, rb++) { \
- TPE2 rlimit = (TPE2) LIMIT; \
+ TPE2 rlimit = LIMIT; \
TPE1 v = bp[k]; \
if (is_##TPE1##_nil(v)) { \
for (j = k + 1; j < i; j++) { \
@@ -168,7 +168,7 @@
} \
} while (0)
-#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_RANGE_PRECEDING(LIMIT) \
+#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_RANGE_PRECEDING(LIMIT, TPE) \
do { \
lng m = k - 1; \
for (; k < i; k++, rb++) { \
@@ -188,7 +188,7 @@
next = BUNtail(bpi, (BUN) j); \
if (atomcmp(next, nil) == 0) \
break; \
- if (ABSOLUTE(atomcmp(v, next)) > (int)
LIMIT) \
+ if (ABSOLUTE((TPE) atomcmp(v, next)) >
(TPE) LIMIT) \
break; \
} \
} \
@@ -197,7 +197,7 @@
} \
} while (0)
-#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_RANGE_FOLLOWING(LIMIT) \
+#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_RANGE_FOLLOWING(LIMIT, TPE) \
do { \
for (; k < i; k++, rb++) { \
void *v = BUNtail(bpi, (BUN) k); \
@@ -211,7 +211,7 @@
void *next = BUNtail(bpi, (BUN) j); \
if (atomcmp(next, nil) == 0) \
break; \
- if (ABSOLUTE(atomcmp(v, next)) > (int)
LIMIT) \
+ if (ABSOLUTE((TPE) atomcmp(v, next)) >
(TPE) LIMIT) \
break; \
} \
} \
@@ -219,11 +219,11 @@
} \
} while (0)
-#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_GROUPS_PRECEDING(LIMIT) \
+#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_GROUPS_PRECEDING(LIMIT, TPE) \
do { \
lng m = k - 1; \
for (; k < i; k++, rb++) { \
- lng rlimit = (lng) LIMIT; \
+ TPE rlimit = LIMIT; \
void *v = BUNtail(bpi, (BUN) k); \
if (atomcmp(v, nil) == 0) { \
for (j = k; ; j--) { \
@@ -253,10 +253,10 @@
} \
} while (0)
-#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_GROUPS_FOLLOWING(LIMIT) \
+#define ANALYTICAL_WINDOW_BOUNDS_VARSIZED_GROUPS_FOLLOWING(LIMIT, TPE) \
do { \
for (; k < i; k++, rb++) { \
- lng rlimit = (lng) LIMIT; \
+ TPE rlimit = LIMIT; \
void *v = BUNtail(bpi, (BUN) k); \
if (atomcmp(v, nil) == 0) { \
for (j = k + 1; j < i; j++) { \
@@ -300,10 +300,12 @@
} \
} while (0)
-#define ANALYTICAL_WINDOW_BOUNDS_BRANCHES_RANGE_NUM(IMP, LIMIT)
\
+#define ANALYTICAL_WINDOW_BOUNDS_BRANCHES_RANGE_NUM(IMP, LIMIT, CAST) \
do { \
switch (tp1) { \
case TYPE_bit: \
+ case TYPE_flt: \
+ case TYPE_dbl: \
goto type_not_supported; \
case TYPE_bte: \
ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED(bte,
ANALYTICAL_WINDOW_BOUNDS_FIXED_RANGE##IMP, LIMIT, lng); \
@@ -324,15 +326,15 @@
for (; np < nend; np++) { \
if (*np) { \
i += (np - pnp); \
-
ANALYTICAL_WINDOW_BOUNDS_VARSIZED_RANGE##IMP(LIMIT); \
+
ANALYTICAL_WINDOW_BOUNDS_VARSIZED_RANGE##IMP(LIMIT, CAST); \
pnp = np; \
} \
} \
i += (np - pnp); \
-
ANALYTICAL_WINDOW_BOUNDS_VARSIZED_RANGE##IMP(LIMIT); \
+
ANALYTICAL_WINDOW_BOUNDS_VARSIZED_RANGE##IMP(LIMIT, CAST); \
} else { \
i += (lng) cnt; \
-
ANALYTICAL_WINDOW_BOUNDS_VARSIZED_RANGE##IMP(LIMIT); \
+
ANALYTICAL_WINDOW_BOUNDS_VARSIZED_RANGE##IMP(LIMIT, CAST); \
} \
} \
} \
@@ -364,43 +366,25 @@
#define ANALYTICAL_WINDOW_BOUNDS_BRANCHES_RANGE_HGE(IMP, LIMIT)
\
do { \
switch (tp1) { \
- case TYPE_hge: \
- ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED(hge,
ANALYTICAL_WINDOW_BOUNDS_FIXED_RANGE##IMP, LIMIT, hge); \
- break; \
- default: \
- goto type_not_supported; \
- } \
- } while (0)
-#endif
-
-#ifdef HAVE_HGE
-#define ANALYTICAL_WINDOW_BOUNDS_GROUPS_HGE(IMP, LIMIT)
\
- case TYPE_hge: \
- ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED(hge,
ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS##IMP, LIMIT, hge); \
- break;
-#else
-#define ANALYTICAL_WINDOW_BOUNDS_GROUPS_HGE(IMP, LIMIT)
-#endif
-
-#define ANALYTICAL_WINDOW_BOUNDS_BRANCHES_GROUPS(IMP, LIMIT) \
- do { \
- switch (tp1) { \
case TYPE_bit: \
- ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED(bit,
ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS##IMP, LIMIT, bit); \
- break; \
+ case TYPE_flt: \
+ case TYPE_dbl: \
+ goto type_not_supported; \
case TYPE_bte: \
- ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED(bte,
ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS##IMP, LIMIT, bte); \
+ ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED(bte,
ANALYTICAL_WINDOW_BOUNDS_FIXED_RANGE##IMP, LIMIT, hge); \
break; \
case TYPE_sht: \
- ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED(sht,
ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS##IMP, LIMIT, sht); \
+ ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED(sht,
ANALYTICAL_WINDOW_BOUNDS_FIXED_RANGE##IMP, LIMIT, hge); \
break; \
case TYPE_int: \
- ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED(int,
ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS##IMP, LIMIT, int); \
+ ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED(int,
ANALYTICAL_WINDOW_BOUNDS_FIXED_RANGE##IMP, LIMIT, hge); \
break; \
case TYPE_lng: \
- ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED(lng,
ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS##IMP, LIMIT, lng); \
+ ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED(lng,
ANALYTICAL_WINDOW_BOUNDS_FIXED_RANGE##IMP, LIMIT, hge); \
break; \
- ANALYTICAL_WINDOW_BOUNDS_GROUPS_HGE(IMP, LIMIT); \
+ case TYPE_hge: \
+ ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED(hge,
ANALYTICAL_WINDOW_BOUNDS_FIXED_RANGE##IMP, LIMIT, hge); \
+ break; \
default: { \
if (p) { \
pnp = np = (bit*)Tloc(p, 0); \
@@ -408,15 +392,65 @@
for (; np < nend; np++) { \
if (*np) { \
i += (np - pnp); \
-
ANALYTICAL_WINDOW_BOUNDS_VARSIZED_GROUPS##IMP(LIMIT); \
+
ANALYTICAL_WINDOW_BOUNDS_VARSIZED_RANGE##IMP(LIMIT, hge); \
pnp = np; \
} \
} \
i += (np - pnp); \
-
ANALYTICAL_WINDOW_BOUNDS_VARSIZED_GROUPS##IMP(LIMIT); \
+
ANALYTICAL_WINDOW_BOUNDS_VARSIZED_RANGE##IMP(LIMIT, hge); \
} else { \
i += (lng) cnt; \
-
ANALYTICAL_WINDOW_BOUNDS_VARSIZED_GROUPS##IMP(LIMIT); \
+
ANALYTICAL_WINDOW_BOUNDS_VARSIZED_RANGE##IMP(LIMIT, hge); \
+ } \
+ } \
+ } \
+ } while (0)
+#endif
+
+#ifdef HAVE_HGE
+#define ANALYTICAL_WINDOW_BOUNDS_GROUPS_HGE(IMP, LIMIT, TPE)
\
+ case TYPE_hge: \
+ ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED(hge,
ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS##IMP, LIMIT, TPE); \
+ break;
+#else
+#define ANALYTICAL_WINDOW_BOUNDS_GROUPS_HGE(IMP, LIMIT, TPE)
+#endif
+
+#define ANALYTICAL_WINDOW_BOUNDS_BRANCHES_GROUPS(IMP, LIMIT, TPE)
\
+ do { \
+ switch (tp1) { \
+ case TYPE_bit: \
+ ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED(bit,
ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS##IMP, LIMIT, TPE); \
+ break; \
+ case TYPE_bte: \
+ ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED(bte,
ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS##IMP, LIMIT, TPE); \
+ break; \
+ case TYPE_sht: \
+ ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED(sht,
ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS##IMP, LIMIT, TPE); \
+ break; \
+ case TYPE_int: \
+ ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED(int,
ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS##IMP, LIMIT, TPE); \
+ break; \
+ case TYPE_lng: \
+ ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED(lng,
ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS##IMP, LIMIT, TPE); \
+ break; \
+ ANALYTICAL_WINDOW_BOUNDS_GROUPS_HGE(IMP, LIMIT, TPE); \
+ default: { \
+ if (p) { \
+ pnp = np = (bit*)Tloc(p, 0); \
+ nend = np + cnt; \
+ for (; np < nend; np++) { \
+ if (*np) { \
+ i += (np - pnp); \
+
ANALYTICAL_WINDOW_BOUNDS_VARSIZED_GROUPS##IMP(LIMIT, TPE); \
+ pnp = np; \
+ } \
+ } \
+ i += (np - pnp); \
+
ANALYTICAL_WINDOW_BOUNDS_VARSIZED_GROUPS##IMP(LIMIT, TPE); \
+ } else { \
+ i += (lng) cnt; \
+
ANALYTICAL_WINDOW_BOUNDS_VARSIZED_GROUPS##IMP(LIMIT, TPE); \
} \
} \
} \
@@ -536,7 +570,7 @@ GDKanalyticalrowbounds(BAT *r, BAT *b, B
default:
goto bound_not_supported;
}
- } else { /* static bounds */
+ } else { /* static bounds, all the limits are cast to lng */
lng limit;
switch (tp2) {
case TYPE_bte:
@@ -598,36 +632,36 @@ GDKanalyticalrangebounds(BAT *r, BAT *b,
case TYPE_bte:{
bte *restrict limit = (bte *) Tloc(l, 0);
if (preceding) {
-
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_RANGE_NUM(_PRECEDING, limit[k]);
+
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_RANGE_NUM(_PRECEDING, limit[k], int);
} else {
-
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_RANGE_NUM(_FOLLOWING, limit[k]);
+
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_RANGE_NUM(_FOLLOWING, limit[k], int);
}
break;
}
case TYPE_sht:{
sht *restrict limit = (sht *) Tloc(l, 0);
if (preceding) {
-
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_RANGE_NUM(_PRECEDING, limit[k]);
+
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_RANGE_NUM(_PRECEDING, limit[k], int);
} else {
-
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_RANGE_NUM(_FOLLOWING, limit[k]);
+
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_RANGE_NUM(_FOLLOWING, limit[k], int);
}
break;
}
case TYPE_int:{
int *restrict limit = (int *) Tloc(l, 0);
if (preceding) {
-
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_RANGE_NUM(_PRECEDING, limit[k]);
+
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_RANGE_NUM(_PRECEDING, limit[k], int);
} else {
-
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_RANGE_NUM(_FOLLOWING, limit[k]);
+
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_RANGE_NUM(_FOLLOWING, limit[k], int);
}
break;
}
case TYPE_lng:{
lng *restrict limit = (lng *) Tloc(l, 0);
if (preceding) {
-
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_RANGE_NUM(_PRECEDING, limit[k]);
+
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_RANGE_NUM(_PRECEDING, limit[k], lng);
} else {
-
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_RANGE_NUM(_FOLLOWING, limit[k]);
+
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_RANGE_NUM(_FOLLOWING, limit[k], lng);
}
break;
}
@@ -707,9 +741,9 @@ GDKanalyticalrangebounds(BAT *r, BAT *b,
assert(0);
}
if (preceding) {
-
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_RANGE_NUM(_PRECEDING, limit);
+
ANALYTICAL_WINDOW_BOUNDS_BRANCHES_RANGE_NUM(_PRECEDING, limit, lng);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list
