Changeset: d6cab9e5503b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d6cab9e5503b
Modified Files:
        gdk/gdk_analytic_func.c
        gdk/gdk_atoms.c
        gdk/gdk_atoms.h
        gdk/gdk_join.c
        gdk/gdk_string.c
        geom/monetdb5/geom_atoms.c
        monetdb5/mal/mal_instruction.c
        monetdb5/modules/atoms/json.c
        monetdb5/modules/kernel/algebra.c
        monetdb5/modules/mal/manifold.c
        sql/backends/monet5/sql_upgrades.c
        sql/server/rel_optimize_others.c
        sql/server/rel_optimize_sel.c
        sql/server/rel_select.c
        sql/server/rel_unnest.c
        sql/storage/store.c
        
sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out
        sql/test/emptydb-previous-upgrade-chain/Tests/upgrade.stable.out.int128
        sql/test/emptydb-previous-upgrade-hge/Tests/upgrade.stable.out.int128
        sql/test/emptydb-previous-upgrade/Tests/upgrade.stable.out
        sql/test/emptydb-previous-upgrade/Tests/upgrade.stable.out.int128
        
sql/test/testdb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        sql/test/testdb-previous-upgrade-chain/Tests/upgrade.stable.out
        sql/test/testdb-previous-upgrade-chain/Tests/upgrade.stable.out.int128
        sql/test/testdb-previous-upgrade-hge/Tests/upgrade.stable.out.int128
        sql/test/testdb-previous-upgrade/Tests/upgrade.stable.out
        sql/test/testdb-previous-upgrade/Tests/upgrade.stable.out.int128
Branch: default
Log Message:

Merge with Dec2025 branch.


diffs (truncated from 1692 to 300 lines):

diff --git a/gdk/gdk_analytic_func.c b/gdk/gdk_analytic_func.c
--- a/gdk/gdk_analytic_func.c
+++ b/gdk/gdk_analytic_func.c
@@ -1027,7 +1027,8 @@ GDKanalyticallead(BAT *b, BAT *p, BUN le
                        goto cleanup;                                   \
                populate_segment_tree(TPE, ncount, 
INIT_AGGREGATE_MIN_MAX_FIXED, COMPUTE_LEVEL0_MIN_MAX_FIXED, 
COMPUTE_LEVELN_MIN_MAX_FIXED, TPE, MIN_MAX, NOTHING); \
                for (; k < i; k++)                                      \
-                       compute_on_segment_tree(TPE, start[k] - j, end[k] - j, 
INIT_AGGREGATE_MIN_MAX_FIXED, COMPUTE_LEVELN_MIN_MAX_FIXED, 
FINALIZE_AGGREGATE_MIN_MAX_FIXED, TPE, MIN_MAX, NOTHING); \
+                       if ((lng)(start[k]-j) >= 0)                             
\
+                               compute_on_segment_tree(TPE, start[k] - j, 
end[k] - j, INIT_AGGREGATE_MIN_MAX_FIXED, COMPUTE_LEVELN_MIN_MAX_FIXED, 
FINALIZE_AGGREGATE_MIN_MAX_FIXED, TPE, MIN_MAX, NOTHING); \
                j = k;                                                  \
        } while (0)
 
@@ -1215,7 +1216,8 @@ GDKanalyticallead(BAT *b, BAT *p, BUN le
                        goto cleanup;                                   \
                populate_segment_tree(const void*, ncount, 
INIT_AGGREGATE_MIN_MAX_OTHERS, COMPUTE_LEVEL0_MIN_MAX_OTHERS, 
COMPUTE_LEVELN_MIN_MAX_OTHERS, GT_LT, NOTHING, NOTHING); \
                for (; k < i; k++)                                      \
-                       compute_on_segment_tree(void*, start[k] - j, end[k] - 
j, INIT_AGGREGATE_MIN_MAX_OTHERS, COMPUTE_LEVELN_MIN_MAX_OTHERS, 
FINALIZE_AGGREGATE_MIN_MAX_OTHERS, GT_LT, NOTHING, NOTHING); \
+                       if ((lng)(start[k]-j) >= 0)                             
\
+                               compute_on_segment_tree(void*, start[k] - j, 
end[k] - j, INIT_AGGREGATE_MIN_MAX_OTHERS, COMPUTE_LEVELN_MIN_MAX_OTHERS, 
FINALIZE_AGGREGATE_MIN_MAX_OTHERS, GT_LT, NOTHING, NOTHING); \
                j = k;                                                  \
        } while (0)
 
@@ -1476,7 +1478,8 @@ ANALYTICAL_MIN_MAX(max, MAX, <)
                                goto cleanup;                           \
                        populate_segment_tree(lng, ncount, 
INIT_AGGREGATE_COUNT, COMPUTE_LEVEL0_COUNT_FIXED, COMPUTE_LEVELN_COUNT, TPE, 
NOTHING, NOTHING); \
                        for (; k < i; k++)                              \
-                               compute_on_segment_tree(lng, start[k] - j, 
end[k] - j, INIT_AGGREGATE_COUNT, COMPUTE_LEVELN_COUNT, 
FINALIZE_AGGREGATE_COUNT, TPE, NOTHING, NOTHING); \
+                               if ((lng)(start[k]-j) >= 0)                     
        \
+                                       compute_on_segment_tree(lng, start[k] - 
j, end[k] - j, INIT_AGGREGATE_COUNT, COMPUTE_LEVELN_COUNT, 
FINALIZE_AGGREGATE_COUNT, TPE, NOTHING, NOTHING); \
                        j = k;                                          \
                }                                                       \
        } while (0)
@@ -1583,7 +1586,8 @@ ANALYTICAL_MIN_MAX(max, MAX, <)
                                goto cleanup;                           \
                        populate_segment_tree(lng, ncount, 
INIT_AGGREGATE_COUNT, COMPUTE_LEVEL0_COUNT_OTHERS, COMPUTE_LEVELN_COUNT, 
NOTHING, NOTHING, NOTHING); \
                        for (; k < i; k++)                              \
-                               compute_on_segment_tree(lng, start[k] - j, 
end[k] - j, INIT_AGGREGATE_COUNT, COMPUTE_LEVELN_COUNT, 
FINALIZE_AGGREGATE_COUNT, NOTHING, NOTHING, NOTHING); \
+                               if ((lng)(start[k]-j) >= 0)                     
        \
+                                       compute_on_segment_tree(lng, start[k] - 
j, end[k] - j, INIT_AGGREGATE_COUNT, COMPUTE_LEVELN_COUNT, 
FINALIZE_AGGREGATE_COUNT, NOTHING, NOTHING, NOTHING); \
                        j = k;                                          \
                }                                                       \
        } while (0)
@@ -1832,7 +1836,8 @@ cleanup:
                        goto cleanup;                                   \
                populate_segment_tree(TPE2, ncount, INIT_AGGREGATE_SUM, 
COMPUTE_LEVEL0_SUM, COMPUTE_LEVELN_SUM_NUM, TPE1, TPE2, NOTHING); \
                for (; k < i; k++)                                      \
-                       compute_on_segment_tree(TPE2, start[k] - j, end[k] - j, 
INIT_AGGREGATE_SUM, COMPUTE_LEVELN_SUM_NUM, FINALIZE_AGGREGATE_SUM, TPE1, TPE2, 
NOTHING); \
+                       if ((lng)(start[k]-j) >= 0)                             
\
+                               compute_on_segment_tree(TPE2, start[k] - j, 
end[k] - j, INIT_AGGREGATE_SUM, COMPUTE_LEVELN_SUM_NUM, FINALIZE_AGGREGATE_SUM, 
TPE1, TPE2, NOTHING); \
                j = k;                                                  \
        } while (0)
 
@@ -2175,7 +2180,8 @@ nosupport:
                        goto cleanup;                                   \
                populate_segment_tree(TPE2, ncount, INIT_AGGREGATE_PROD, 
COMPUTE_LEVEL0_PROD, COMPUTE_LEVELN_PROD_NUM, TPE1, TPE2, TPE3); \
                for (; k < i; k++)                                      \
-                       compute_on_segment_tree(TPE2, start[k] - j, end[k] - j, 
INIT_AGGREGATE_PROD, COMPUTE_LEVELN_PROD_NUM, FINALIZE_AGGREGATE_PROD, TPE1, 
TPE2, TPE3); \
+                       if ((lng)(start[k]-j) >= 0)                             
\
+                               compute_on_segment_tree(TPE2, start[k] - j, 
end[k] - j, INIT_AGGREGATE_PROD, COMPUTE_LEVELN_PROD_NUM, 
FINALIZE_AGGREGATE_PROD, TPE1, TPE2, TPE3); \
                j = k;                                                  \
        } while (0)
 
@@ -2267,7 +2273,8 @@ nosupport:
                        goto cleanup;                                   \
                populate_segment_tree(TPE2, ncount, INIT_AGGREGATE_PROD, 
COMPUTE_LEVEL0_PROD, COMPUTE_LEVELN_PROD_NUM_LIMIT, TPE1, TPE2, REAL_IMP); \
                for (; k < i; k++)                                      \
-                       compute_on_segment_tree(TPE2, start[k] - j, end[k] - j, 
INIT_AGGREGATE_PROD, COMPUTE_LEVELN_PROD_NUM_LIMIT, FINALIZE_AGGREGATE_PROD, 
TPE1, TPE2, REAL_IMP); \
+                       if ((lng)(start[k]-j) >= 0)                             
\
+                               compute_on_segment_tree(TPE2, start[k] - j, 
end[k] - j, INIT_AGGREGATE_PROD, COMPUTE_LEVELN_PROD_NUM_LIMIT, 
FINALIZE_AGGREGATE_PROD, TPE1, TPE2, REAL_IMP); \
                j = k;                                                  \
        } while (0)
 
@@ -2365,7 +2372,8 @@ nosupport:
                        goto cleanup;                                   \
                populate_segment_tree(TPE2, ncount, INIT_AGGREGATE_PROD, 
COMPUTE_LEVEL0_PROD, COMPUTE_LEVELN_PROD_FP, TPE1, TPE2, ARG3); \
                for (; k < i; k++)                                      \
-                       compute_on_segment_tree(TPE2, start[k] - j, end[k] - j, 
INIT_AGGREGATE_PROD, COMPUTE_LEVELN_PROD_FP, FINALIZE_AGGREGATE_PROD, TPE1, 
TPE2, ARG3); \
+                       if ((lng)(start[k]-j) >= 0)                             
\
+                               compute_on_segment_tree(TPE2, start[k] - j, 
end[k] - j, INIT_AGGREGATE_PROD, COMPUTE_LEVELN_PROD_FP, 
FINALIZE_AGGREGATE_PROD, TPE1, TPE2, ARG3); \
                j = k;                                                  \
        } while (0)
 
diff --git a/gdk/gdk_analytic_statistics.c b/gdk/gdk_analytic_statistics.c
--- a/gdk/gdk_analytic_statistics.c
+++ b/gdk/gdk_analytic_statistics.c
@@ -193,7 +193,8 @@ avg_num_deltas(lng)
                        goto cleanup;                                   \
                populate_segment_tree(avg_num_deltas##TPE, ncount, 
INIT_AGGREGATE_AVG_NUM, COMPUTE_LEVEL0_AVG_NUM, COMPUTE_LEVELN_AVG_NUM, TPE, 
NOTHING, NOTHING); \
                for (; k < i; k++)                                      \
-                       compute_on_segment_tree(avg_num_deltas##TPE, start[k] - 
j, end[k] - j, INIT_AGGREGATE_AVG_NUM, COMPUTE_LEVELN_AVG_NUM, 
FINALIZE_AGGREGATE_AVG_NUM, TPE, NOTHING, NOTHING); \
+                       if ((lng)(start[k]-j) >= 0)                             
\
+                               compute_on_segment_tree(avg_num_deltas##TPE, 
start[k] - j, end[k] - j, INIT_AGGREGATE_AVG_NUM, COMPUTE_LEVELN_AVG_NUM, 
FINALIZE_AGGREGATE_AVG_NUM, TPE, NOTHING, NOTHING); \
                j = k;                                                  \
        } while (0)
 
@@ -297,7 +298,8 @@ avg_fp_deltas(dbl)
                        goto cleanup;                                   \
                populate_segment_tree(avg_fp_deltas_##TPE, ncount, 
INIT_AGGREGATE_AVG_FP, COMPUTE_LEVEL0_AVG_FP, COMPUTE_LEVELN_AVG_FP, TPE, 
NOTHING, NOTHING); \
                for (; k < i; k++)                                      \
-                       compute_on_segment_tree(avg_fp_deltas_##TPE, start[k] - 
j, end[k] - j, INIT_AGGREGATE_AVG_FP, COMPUTE_LEVELN_AVG_FP, 
FINALIZE_AGGREGATE_AVG_FP, TPE, NOTHING, NOTHING); \
+                       if ((lng)(start[k]-j) >= 0)                             
\
+                               compute_on_segment_tree(avg_fp_deltas_##TPE, 
start[k] - j, end[k] - j, INIT_AGGREGATE_AVG_FP, COMPUTE_LEVELN_AVG_FP, 
FINALIZE_AGGREGATE_AVG_FP, TPE, NOTHING, NOTHING); \
                j = k;                                                  \
        } while (0)
 
@@ -577,7 +579,8 @@ avg_int_deltas(lng)
                        goto cleanup;                                   \
                populate_segment_tree(avg_int_deltas_##TPE, ncount, 
INIT_AGGREGATE_AVG_INT, COMPUTE_LEVEL0_AVG_INT, COMPUTE_LEVELN_AVG_INT, TPE, 
NOTHING, NOTHING); \
                for (; k < i; k++)                                      \
-                       compute_on_segment_tree(avg_int_deltas_##TPE, start[k] 
- j, end[k] - j, INIT_AGGREGATE_AVG_INT, COMPUTE_LEVELN_AVG_INT, 
FINALIZE_AGGREGATE_AVG_INT, TPE, NOTHING, NOTHING); \
+                       if ((lng)(start[k]-j) >= 0)                             
\
+                               compute_on_segment_tree(avg_int_deltas_##TPE, 
start[k] - j, end[k] - j, INIT_AGGREGATE_AVG_INT, COMPUTE_LEVELN_AVG_INT, 
FINALIZE_AGGREGATE_AVG_INT, TPE, NOTHING, NOTHING); \
                j = k;                                                  \
        } while (0)
 
@@ -847,7 +850,8 @@ typedef struct stdev_var_deltas {
                        goto cleanup;                                   \
                populate_segment_tree(stdev_var_deltas, ncount, 
INIT_AGGREGATE_STDEV_VARIANCE, COMPUTE_LEVEL0_STDEV_VARIANCE, 
COMPUTE_LEVELN_STDEV_VARIANCE, TPE, SAMPLE, OP); \
                for (; k < i; k++)                                      \
-                       compute_on_segment_tree(stdev_var_deltas, start[k] - j, 
end[k] - j, INIT_AGGREGATE_STDEV_VARIANCE, COMPUTE_LEVELN_STDEV_VARIANCE, 
FINALIZE_AGGREGATE_STDEV_VARIANCE, TPE, SAMPLE, OP); \
+                       if ((lng)(start[k]-j) >= 0)                             
\
+                               compute_on_segment_tree(stdev_var_deltas, 
start[k] - j, end[k] - j, INIT_AGGREGATE_STDEV_VARIANCE, 
COMPUTE_LEVELN_STDEV_VARIANCE, FINALIZE_AGGREGATE_STDEV_VARIANCE, TPE, SAMPLE, 
OP); \
                j = k;                                                  \
        } while (0)
 
@@ -1132,7 +1136,8 @@ typedef struct covariance_deltas {
                        goto cleanup;                                   \
                populate_segment_tree(covariance_deltas, ncount, 
INIT_AGGREGATE_COVARIANCE, COMPUTE_LEVEL0_COVARIANCE, 
COMPUTE_LEVELN_COVARIANCE, TPE, SAMPLE, OP); \
                for (; k < i; k++)                                      \
-                       compute_on_segment_tree(covariance_deltas, start[k] - 
j, end[k] - j, INIT_AGGREGATE_COVARIANCE, COMPUTE_LEVELN_COVARIANCE, 
FINALIZE_AGGREGATE_COVARIANCE, TPE, SAMPLE, OP); \
+                       if ((lng)(start[k]-j) >= 0)                             
\
+                               compute_on_segment_tree(covariance_deltas, 
start[k] - j, end[k] - j, INIT_AGGREGATE_COVARIANCE, COMPUTE_LEVELN_COVARIANCE, 
FINALIZE_AGGREGATE_COVARIANCE, TPE, SAMPLE, OP); \
                j = k;                                                  \
        } while (0)
 
@@ -1397,7 +1402,8 @@ typedef struct correlation_deltas {
                        goto cleanup;                                   \
                populate_segment_tree(correlation_deltas, ncount, 
INIT_AGGREGATE_CORRELATION, COMPUTE_LEVEL0_CORRELATION, 
COMPUTE_LEVELN_CORRELATION, TPE, SAMPLE, OP); \
                for (; k < i; k++)                                      \
-                       compute_on_segment_tree(correlation_deltas, start[k] - 
j, end[k] - j, INIT_AGGREGATE_CORRELATION, COMPUTE_LEVELN_CORRELATION, 
FINALIZE_AGGREGATE_CORRELATION, TPE, SAMPLE, OP); \
+                       if ((lng)(start[k]-j) >= 0)                             
\
+                               compute_on_segment_tree(correlation_deltas, 
start[k] - j, end[k] - j, INIT_AGGREGATE_CORRELATION, 
COMPUTE_LEVELN_CORRELATION, FINALIZE_AGGREGATE_CORRELATION, TPE, SAMPLE, OP); \
                j = k;                                                  \
        } while (0)
 
diff --git a/gdk/gdk_atoms.c b/gdk/gdk_atoms.c
--- a/gdk/gdk_atoms.c
+++ b/gdk/gdk_atoms.c
@@ -869,19 +869,22 @@ TYPE##Read(allocator *ma, TYPE *A, size_
                if (ma) {                                               \
                        a = ma_realloc(ma, a, cnt * sizeof(TYPE), *dstlen); \
                } else {                                                \
-                       GDKfree(a);                                     \
                        a = GDKmalloc(cnt * sizeof(TYPE));              \
                }                                                       \
                if (a == NULL)                                          \
                        return NULL;                                    \
-               *dstlen = cnt * sizeof(TYPE);                           \
        }                                                               \
        if (mnstr_read##NAME##Array(s, (CAST *) a, cnt) == 0 ||         \
            mnstr_errnr(s) != MNSTR_NO__ERROR) {                        \
-               if (a != A)                                             \
+               if (ma == NULL && a != A)                               \
                        GDKfree(a);                                     \
                return NULL;                                            \
        }                                                               \
+       if (a != A) {                                                   \
+               if (ma == NULL)                                         \
+                       GDKfree(A);                                     \
+               *dstlen = cnt * sizeof(TYPE);                           \
+       }                                                               \
        return a;                                                       \
 }                                                                      \
 static gdk_return                                                      \
@@ -912,18 +915,21 @@ mskRead(allocator *ma, msk *A, size_t *d
                if (ma) {
                        a = ma_realloc(ma, a, 1, *dstlen);
                } else {
-                       GDKfree(a);
                        a = GDKmalloc(1);
                }
                if (a == NULL)
                        return NULL;
-               *dstlen = 1;
        }
        if (mnstr_readBte(s, &v) != 1) {
-               if (a != A)
+               if (ma == NULL && a != A)
                        GDKfree(a);
                return NULL;
        }
+       if (a != A) {
+               if (ma == NULL)
+                       GDKfree(A);
+               *dstlen = 1;
+       }
        *a = v != 0;
        return a;
 }
@@ -1350,18 +1356,21 @@ UUIDread(allocator *ma, void *U, size_t 
                if (ma) {
                        u = ma_realloc(ma, u, cnt * sizeof(uuid), *dstlen);
                } else {
-                       GDKfree(u);
                        u = GDKmalloc(cnt * sizeof(uuid));
                }
                if (u == NULL)
                        return NULL;
-               *dstlen = cnt * sizeof(uuid);
        }
        if (mnstr_read(s, u, UUID_SIZE, cnt) < (ssize_t) cnt) {
-               if (u != U)
+               if (ma == NULL && u != (uuid *) U)
                        GDKfree(u);
                return NULL;
        }
+       if (u != (uuid *) U) {
+               if (ma == NULL)
+                       GDKfree(U);
+               *dstlen = cnt * sizeof(uuid);
+       }
        return u;
 }
 
@@ -1500,18 +1509,21 @@ INET4read(allocator *ma, void *U, size_t
                if (ma) {
                        u = ma_realloc(ma, u, cnt * sizeof(inet4), *dstlen);
                } else {
-                       GDKfree(u);
                        u = GDKmalloc(cnt * sizeof(inet4));
                }
                if (u == NULL)
                        return NULL;
-               *dstlen = cnt * sizeof(inet4);
        }
-       if (mnstr_read(s, u, 4, cnt) < (ssize_t) cnt) {
-               if (u != U)
+       if (mnstr_read(s, u, sizeof(inet4), cnt) < (ssize_t) cnt) {
+               if (ma == NULL && u != (inet4 *) U)
                        GDKfree(u);
                return NULL;
        }
+       if (u != (inet4 *) U) {
+               if (ma == NULL)
+                       GDKfree(U);
+               *dstlen = cnt * sizeof(inet4);
+       }
        return u;
 }
 
@@ -1820,18 +1832,21 @@ INET6read(allocator *ma, void *U, size_t
                if (ma) {
                        u = ma_realloc(ma, u, cnt * sizeof(inet6), *dstlen);
                } else {
-                       GDKfree(u);
                        u = GDKmalloc(cnt * sizeof(inet6));
                }
                if (u == NULL)
                        return NULL;
-               *dstlen = cnt * sizeof(inet6);
        }
        if (mnstr_read(s, u, sizeof(inet6), cnt) < (ssize_t) cnt) {
-               if (u != U)
+               if (ma == NULL && u != (inet6 *) U)
                        GDKfree(u);
                return NULL;
        }
+       if (u != (inet6 *) U) {
+               if (ma == NULL)
+                       GDKfree(U);
+               *dstlen = cnt * sizeof(inet6);
+       }
        return u;
 }
 
@@ -2000,22 +2015,28 @@ BLOBread(allocator *ma, void *A, size_t 
 
        (void) cnt;
        assert(cnt == 1);
-       if (mnstr_readLng(s, &len) != 1 || len < 0)
+       if (mnstr_readLng(s, &len) != 1 || len < 0) {
                return NULL;
+       }
        if (a == NULL || (lng) *dstlen < len) {
                if (ma) {
                        a = ma_realloc(ma, a, (size_t) len, *dstlen);
                } else {
-                       GDKfree(a);
                        a = GDKmalloc((size_t) len);
                }
                if (a == NULL)
                        return NULL;
-               *dstlen = (size_t) len;
        }
        if (mnstr_read(s, (char *) a, (size_t) len, 1) != 1) {
+               if (ma == NULL && a != (blob *) A)
+                       GDKfree(a);
                return NULL;
        }
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to