Changeset: 85bc9e7ca583 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=85bc9e7ca583 Modified Files: gdk/gdk_analytic_bounds.c sql/test/BugConstraints/Tests/check_constraint.SF-1714829.stable.err sql/test/Triggers/Tests/trigger_owner.stable.err sql/test/pg_regress/Tests/alter_table.stable.err sql/test/pg_regress/Tests/alter_table.stable.out Branch: Nov2019 Log Message:
Compilation fixes and fied casts used in window frames. Also approved tests
with other recent changes.
In some cases, numbers could be truncated, leading to wrong bounds.
diffs (truncated from 706 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
