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

Reply via email to