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]