Changeset: d120d5b14a6f for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/d120d5b14a6f Modified Files: sql/server/sql_parser.y Branch: json-extend Log Message:
merge with default diffs (truncated from 12428 to 300 lines): diff --git a/.hgeol b/.hgeol --- a/.hgeol +++ b/.hgeol @@ -14,6 +14,7 @@ **.ico = BIN **.jpg = BIN **.lz4 = BIN +**.parquet = BIN **.pdf = BIN **.png = BIN **.xz = BIN diff --git a/.hgtags b/.hgtags --- a/.hgtags +++ b/.hgtags @@ -833,3 +833,5 @@ cde7d8f7c99540a8c95856df052a9f123b0c1643 ae474f7fda0a3f2ebefc6c0b2cd969ef0854fad1 Aug2024_1 dce400b68239412b1835fb28bd183bf50f5e8692 Aug2024_3 dce400b68239412b1835fb28bd183bf50f5e8692 Aug2024_release +ab5d60be21cd1c65e9de476d71a86c2995f70785 Aug2024_5 +ab5d60be21cd1c65e9de476d71a86c2995f70785 Aug2024_SP1_release diff --git a/MonetDB.spec b/MonetDB.spec --- a/MonetDB.spec +++ b/MonetDB.spec @@ -95,7 +95,7 @@ Group: Applications/Databases License: MPL-2.0 URL: https://www.monetdb.org/ BugURL: https://github.com/MonetDB/MonetDB/issues -Source: https://www.monetdb.org/downloads/sources/Aug2024/MonetDB-%{version}.tar.bz2 +Source: https://www.monetdb.org/downloads/sources/Aug2024-SP1/MonetDB-%{version}.tar.bz2 # The Fedora packaging document says we need systemd-rpm-macros for # the _unitdir and _tmpfilesdir macros to exist; however on RHEL 7 @@ -989,6 +989,57 @@ rm "${RPM_BUILD_ROOT}"%{_unitdir}/monetd %endif %changelog +* Thu Oct 24 2024 Sjoerd Mullender <sjo...@acm.org> - 11.51.5-20241024 +- Rebuilt. +- GH#7281: UDFs defined at compile time in a user schema should not become + system functions +- GH#7563: Unexpected result when using `IS DISTINCT FROM` in `VIEW` +- GH#7567: creating remote table from subquery crashes the server +- GH#7569: Column of temporary table changes when another is updated +- GH#7570: BUG in the "str_to_timestamp" function +- GH#7571: Crash when integer overflow in `ORDER BY` +- GH#7572: column max length is not stored as specified and accepted at + creation time +- GH#7575: Incorrect BAT properties after mmapped BAT "leaks" to disk with + restart. +- GH#7576: unescaping UTF-16 code units goes wrong in json.text +- GH#7577: Crash when using `CHECK` constraint +- GH#7580: statistics optimizer handles date difference incorrectly +- GH#7582: SIGSEGV when creating a SQL function with RETURN CASE WHEN + EXISTS (..) +- GH#7583: Query slowdown after deleting rows from large table +- GH#7584: SO_KEEPALIVE should be configured sensibly +- GH#7585: rel2bin_join: Assertion `sql->session->status == -10' failed. +- GH#7587: Line/row numbers get out of sync with COPY INTO .. BEST EFFORT + +* Mon Oct 21 2024 Lucas Pereira <lucas.pere...@monetdbsolutions.com> - 11.51.5-20241024 +- sql: Improve casting to generic decimal type by choosing a better fit for + precision and scale instead of defaulting to 18 and 3, respectively. + +* Thu Oct 17 2024 Sjoerd Mullender <sjo...@acm.org> - 11.51.5-20241024 +- sql: When for whatever reason the upgrade code produces an error, we now + exit the server. Before the server would limp on with what is basically + a broken database. + +* Mon Oct 14 2024 stefanos mavros <stemav...@gmail.com> - 11.51.5-20241024 +- monetdb5: The server prints out an informative message for the case of a graceful + termination. + +* Mon Oct 7 2024 Joeri van Ruth <joeri.van.r...@monetdbsolutions.com> - 11.51.5-20241024 +- merovingian: Tweak socket parameters to simulate network activity on client connections. + This prevents firewalls from killing connections that seem idle but are + actually waiting for a long-running query. Can be controlled with a new + 'keepalive' option to monetdbd. + +* Thu Sep 26 2024 Martin van Dinther <martin.van.dint...@monetdbsolutions.com> - 11.51.5-20241024 +- sql: Improved the violation message of CHECK constraints when violated. It + now includes the schema name of the constraint and the check clause. + +* Fri Aug 23 2024 Joeri van Ruth <joeri.van.r...@monetdbsolutions.com> - 11.51.5-20241024 +- sql: Increase the buffer size used by hot snapshot from 64kiB to 1MiB, + and make it configurable through setting 'hot_snapshot_buffer_size'. + It must be a multiple of 512. + * Mon Aug 19 2024 Sjoerd Mullender <sjo...@acm.org> - 11.51.3-20240819 - Rebuilt. - GH#7562: Assertion failure when comparing `INTERVAL` value diff --git a/clients/Tests/MAL-signatures-hge.test b/clients/Tests/MAL-signatures-hge.test --- a/clients/Tests/MAL-signatures-hge.test +++ b/clients/Tests/MAL-signatures-hge.test @@ -49539,6 +49539,11 @@ pattern sql.rank(X_0:any_1, X_1:bit, X_2 SQLrank; return the ranked groups sql +read_dump_rel +pattern sql.read_dump_rel(X_0:str):str +SQLread_dump_rel; +Reads sql_rel string into sql_rel object and then writes it to the return value +sql register unsafe pattern sql.register(X_0:str, X_1:str, X_2:str, X_3:str):int RAstatement2; diff --git a/clients/Tests/MAL-signatures.test b/clients/Tests/MAL-signatures.test --- a/clients/Tests/MAL-signatures.test +++ b/clients/Tests/MAL-signatures.test @@ -37969,6 +37969,11 @@ pattern sql.rank(X_0:any_1, X_1:bit, X_2 SQLrank; return the ranked groups sql +read_dump_rel +pattern sql.read_dump_rel(X_0:str):str +SQLread_dump_rel; +Reads sql_rel string into sql_rel object and then writes it to the return value +sql register unsafe pattern sql.register(X_0:str, X_1:str, X_2:str, X_3:str):int RAstatement2; diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++ b/clients/Tests/exports.stable.out @@ -20,7 +20,7 @@ BAT *BATasciify(BAT *b, BAT *s); void BATassertProps(BAT *b); atomDesc BATatoms[MAXATOMS]; BAT *BATattach(int tt, const char *heapfile, role_t role); -gdk_return BATbandjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, const void *c1, const void *c2, bool li, bool hi, BUN estimate) __attribute__((__warn_unused_result__)); +gdk_return BATbandjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, const void *c1, const void *c2, bool li, bool hi, BUN estimate) __attribute__((__access__(write_only, 1))) __attribute__((__access__(write_only, 2))) __attribute__((__warn_unused_result__)); BAT *BATcalcabsolute(BAT *b, BAT *s); BAT *BATcalcadd(BAT *b1, BAT *b2, BAT *s1, BAT *s2, int tp); BAT *BATcalcaddcst(BAT *b, const ValRecord *v, BAT *s, int tp); @@ -122,11 +122,11 @@ BAT *BATdescriptor(bat i); BAT *BATdiff(BAT *l, BAT *r, BAT *sl, BAT *sr, bool nil_matches, bool not_in, BUN estimate); BAT *BATdiffcand(BAT *a, BAT *b); gdk_return BATextend(BAT *b, BUN newcap) __attribute__((__warn_unused_result__)); -gdk_return BATfirstn(BAT **topn, BAT **gids, BAT *b, BAT *cands, BAT *grps, BUN n, bool asc, bool nilslast, bool distinct) __attribute__((__warn_unused_result__)); +gdk_return BATfirstn(BAT **topn, BAT **gids, BAT *b, BAT *cands, BAT *grps, BUN n, bool asc, bool nilslast, bool distinct) __attribute__((__access__(write_only, 1))) __attribute__((__access__(write_only, 2))) __attribute__((__warn_unused_result__)); restrict_t BATgetaccess(BAT *b); ValPtr BATgetprop(BAT *b, enum prop_t idx); ValPtr BATgetprop_nolock(BAT *b, enum prop_t idx); -gdk_return BATgroup(BAT **groups, BAT **extents, BAT **histo, BAT *b, BAT *s, BAT *g, BAT *e, BAT *h) __attribute__((__warn_unused_result__)); +gdk_return BATgroup(BAT **groups, BAT **extents, BAT **histo, BAT *b, BAT *s, BAT *g, BAT *e, BAT *h) __attribute__((__access__(write_only, 1))) __attribute__((__access__(write_only, 2))) __attribute__((__access__(write_only, 3))) __attribute__((__warn_unused_result__)); const char *BATgroupaggrinit(BAT *b, BAT *g, BAT *e, BAT *s, oid *minp, oid *maxp, BUN *ngrpp, struct canditer *ci); gdk_return BATgroupavg(BAT **bnp, BAT **cntsp, BAT *b, BAT *g, BAT *e, BAT *s, int tp, bool skip_nils, int scale); gdk_return BATgroupavg3(BAT **avgp, BAT **remp, BAT **cntp, BAT *b, BAT *g, BAT *e, BAT *s, bool skip_nils); @@ -155,10 +155,10 @@ bool BAThasstrimps(BAT *b); void BAThseqbase(BAT *b, oid o); BAT *BATintersect(BAT *l, BAT *r, BAT *sl, BAT *sr, bool nil_matches, bool max_one, BUN estimate); BAT *BATintersectcand(BAT *a, BAT *b); -gdk_return BATjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, bool nil_matches, BUN estimate) __attribute__((__warn_unused_result__)); +gdk_return BATjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, bool nil_matches, BUN estimate) __attribute__((__access__(write_only, 1))) __attribute__((__access__(write_only, 2))) __attribute__((__warn_unused_result__)); gdk_return BATkey(BAT *b, bool onoff); -gdk_return BATleftjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, bool nil_matches, BUN estimate) __attribute__((__warn_unused_result__)); -gdk_return BATmarkjoin(BAT **r1p, BAT **r2p, BAT **r3p, BAT *l, BAT *r, BAT *sl, BAT *sr, BUN estimate) __attribute__((__warn_unused_result__)); +gdk_return BATleftjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, bool nil_matches, BUN estimate) __attribute__((__access__(write_only, 1))) __attribute__((__access__(write_only, 2))) __attribute__((__warn_unused_result__)); +gdk_return BATmarkjoin(BAT **r1p, BAT **r2p, BAT **r3p, BAT *l, BAT *r, BAT *sl, BAT *sr, BUN estimate) __attribute__((__access__(write_only, 1))) __attribute__((__access__(write_only, 2))) __attribute__((__access__(write_only, 3))) __attribute__((__warn_unused_result__)); BAT *BATmaskedcands(oid hseq, BUN nr, BAT *masked, bool selected); void *BATmax(BAT *b, void *aggr); void *BATmax_skipnil(BAT *b, void *aggr, bit skipnil); @@ -171,8 +171,8 @@ BAT *BATnil_grp(BAT *l, BAT *g, BAT *e, bool BATordered(BAT *b); bool BATordered_rev(BAT *b); gdk_return BATorderidx(BAT *b, bool stable); -gdk_return BAToutercross(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, bool max_one) __attribute__((__warn_unused_result__)); -gdk_return BATouterjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, bool nil_matches, bool match_one, BUN estimate) __attribute__((__warn_unused_result__)); +gdk_return BAToutercross(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, bool max_one) __attribute__((__access__(write_only, 1))) __attribute__((__access__(write_only, 2))) __attribute__((__warn_unused_result__)); +gdk_return BATouterjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, bool nil_matches, bool match_one, BUN estimate) __attribute__((__access__(write_only, 1))) __attribute__((__access__(write_only, 2))) __attribute__((__warn_unused_result__)); gdk_return BATprint(stream *s, BAT *b); gdk_return BATprintcolumns(stream *s, int argc, BAT *argv[]); gdk_return BATprod(void *res, int tp, BAT *b, BAT *s, bool skip_nils, bool nil_if_empty); @@ -188,7 +188,7 @@ BAT *BATsample(BAT *b, BUN n); BAT *BATsample_with_seed(BAT *b, BUN n, uint64_t seed); gdk_return BATsave(BAT *b) __attribute__((__warn_unused_result__)); BAT *BATselect(BAT *b, BAT *s, const void *tl, const void *th, bool li, bool hi, bool anti, bool nil_matches); -gdk_return BATsemijoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, bool nil_matches, bool max_one, BUN estimate) __attribute__((__warn_unused_result__)); +gdk_return BATsemijoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, bool nil_matches, bool max_one, BUN estimate) __attribute__((__access__(write_only, 1))) __attribute__((__access__(write_only, 2))) __attribute__((__warn_unused_result__)); BAT *BATsetaccess(BAT *b, restrict_t mode) __attribute__((__warn_unused_result__)); void BATsetcapacity(BAT *b, BUN cnt); void BATsetcount(BAT *b, BUN cnt); @@ -196,14 +196,14 @@ ValPtr BATsetprop(BAT *b, enum prop_t id ValPtr BATsetprop_nolock(BAT *b, enum prop_t idx, int type, const void *v); gdk_return BATsetstrimps(BAT *b); BAT *BATslice(BAT *b, BUN low, BUN high); -gdk_return BATsort(BAT **sorted, BAT **order, BAT **groups, BAT *b, BAT *o, BAT *g, bool reverse, bool nilslast, bool stable) __attribute__((__warn_unused_result__)); +gdk_return BATsort(BAT **sorted, BAT **order, BAT **groups, BAT *b, BAT *o, BAT *g, bool reverse, bool nilslast, bool stable) __attribute__((__access__(write_only, 1))) __attribute__((__access__(write_only, 2))) __attribute__((__access__(write_only, 3))) __attribute__((__warn_unused_result__)); gdk_return BATstr_group_concat(ValPtr res, BAT *b, BAT *s, BAT *sep, bool skip_nils, bool nil_if_empty, const char *restrict separator); -gdk_return BATsubcross(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, bool max_one) __attribute__((__warn_unused_result__)); +gdk_return BATsubcross(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, bool max_one) __attribute__((__access__(write_only, 1))) __attribute__((__access__(write_only, 2))) __attribute__((__warn_unused_result__)); BAT *BATsubexist(BAT *l, BAT *g, BAT *e, BAT *s); BAT *BATsubnot_exist(BAT *l, BAT *g, BAT *e, BAT *s); gdk_return BATsum(void *res, int tp, BAT *b, BAT *s, bool skip_nils, bool nil_if_empty); const char *BATtailname(const BAT *b); -gdk_return BATthetajoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int op, bool nil_matches, BUN estimate) __attribute__((__warn_unused_result__)); +gdk_return BATthetajoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int op, bool nil_matches, BUN estimate) __attribute__((__access__(write_only, 1))) __attribute__((__access__(write_only, 2))) __attribute__((__warn_unused_result__)); BAT *BATthetaselect(BAT *b, BAT *s, const void *val, const char *op); BAT *BATtolower(BAT *b, BAT *s); BAT *BATtoupper(BAT *b, BAT *s); @@ -270,7 +270,7 @@ gdk_return GDKanalyticalsum(BAT *r, BAT gdk_return GDKanalyticalwindowbounds(BAT *r, BAT *b, BAT *p, BAT *l, const void *restrict bound, int tp1, int tp2, int unit, bool preceding, oid first_half); gdk_return GDKasciify(char **restrict buf, size_t *restrict buflen, const char *restrict s); int GDKatomcnt; -gdk_return GDKcasefold(char **restrict buf, size_t *restrict buflen, const char *restrict s); +gdk_return GDKcasefold(char **restrict buf, size_t *restrict buflen, const char *restrict s) __attribute__((__access__(read_write, 1))) __attribute__((__access__(read_write, 2))); void GDKclrerr(void); gdk_return GDKcopyenv(BAT **key, BAT **val, bool writable); gdk_return GDKcreatedir(const char *nme); @@ -326,8 +326,8 @@ char *GDKstrcasestr(const char *haystack str GDKstrdup(const char *s) __attribute__((__malloc__)) __attribute__((__warn_unused_result__)); int GDKstrncasecmp(const char *str1, const char *str2, size_t l1, size_t l2); str GDKstrndup(const char *s, size_t n) __attribute__((__malloc__)) __attribute__((__warn_unused_result__)); -gdk_return GDKtolower(char **restrict buf, size_t *restrict buflen, const char *restrict s); -gdk_return GDKtoupper(char **restrict buf, size_t *restrict buflen, const char *restrict s); +gdk_return GDKtolower(char **restrict buf, size_t *restrict buflen, const char *restrict s) __attribute__((__access__(read_write, 1))) __attribute__((__access__(read_write, 2))); +gdk_return GDKtoupper(char **restrict buf, size_t *restrict buflen, const char *restrict s) __attribute__((__access__(read_write, 1))) __attribute__((__access__(read_write, 2))); gdk_return GDKtracer_fill_comp_info(BAT *id, BAT *component, BAT *log_level); gdk_return GDKtracer_flush_buffer(void); const char *GDKtracer_get_component_level(const char *comp); @@ -423,11 +423,11 @@ gdk_return TMsubcommit_list(bat *restric void VALclear(ValPtr v); int VALcmp(const ValRecord *p, const ValRecord *q); void *VALconvert(int typ, ValPtr t); -ValPtr VALcopy(ValPtr dst, const ValRecord *src); -void VALempty(ValPtr v); +ValPtr VALcopy(ValPtr dst, const ValRecord *src) __attribute__((__access__(write_only, 1))); +void VALempty(ValPtr v) __attribute__((__access__(write_only, 1))); char *VALformat(const ValRecord *res) __attribute__((__warn_unused_result__)); void *VALget(ValPtr v); -ValPtr VALinit(ValPtr d, int tpe, const void *s); +ValPtr VALinit(ValPtr d, int tpe, const void *s) __attribute__((__access__(write_only, 1))); bool VALisnil(const ValRecord *v); ValPtr VALset(ValPtr v, int t, void *p); gdk_return VARcalcabsolute(ValPtr ret, const ValRecord *v); @@ -473,15 +473,15 @@ size_t blobsize(size_t nitems) __attribu ssize_t bteFromStr(const char *src, size_t *len, bte **dst, bool external); ssize_t bteToStr(str *dst, size_t *len, const bte *src, bool external); const bte bte_nil; -oid canditer_idx(const struct canditer *ci, BUN p); -void canditer_init(struct canditer *ci, BAT *b, BAT *s); -oid canditer_last(const struct canditer *ci); -oid canditer_mask_next(const struct canditer *ci, oid o, bool next); -oid canditer_peek(struct canditer *ci); -oid canditer_peekprev(struct canditer *ci); +oid canditer_idx(const struct canditer *ci, BUN p) __attribute__((__pure__)); +void canditer_init(struct canditer *ci, BAT *b, BAT *s) __attribute__((__access__(write_only, 1))); +oid canditer_last(const struct canditer *ci) __attribute__((__pure__)); +oid canditer_mask_next(const struct canditer *ci, oid o, bool next) __attribute__((__pure__)); +oid canditer_peek(const struct canditer *ci) __attribute__((__pure__)); +oid canditer_peekprev(const struct canditer *ci) __attribute__((__pure__)); oid canditer_prev(struct canditer *ci); void canditer_reset(struct canditer *ci); -BUN canditer_search(const struct canditer *ci, oid o, bool next); +BUN canditer_search(const struct canditer *ci, oid o, bool next) __attribute__((__pure__)); void canditer_setidx(struct canditer *ci, BUN p); BAT *canditer_slice(const struct canditer *ci, BUN lo, BUN hi); BAT *canditer_slice2(const struct canditer *ci, BUN lo1, BUN hi1, BUN lo2, BUN hi2); @@ -527,7 +527,7 @@ char *dlerror(void); void *dlopen(const char *file, int mode); void *dlsym(void *handle, const char *name); _Noreturn void eb_error(exception_buffer *eb, char *msg, int val); -exception_buffer *eb_init(exception_buffer *eb); +exception_buffer *eb_init(exception_buffer *eb) __attribute__((__access__(write_only, 1))); size_t escapedStr(char *restrict dst, const char *restrict src, size_t dstlen, const char *sep1, const char *sep2, int quote); size_t escapedStrlen(const char *restrict src, const char *sep1, const char *sep2, int quote); ssize_t fltFromStr(const char *src, size_t *len, flt **dst, bool external); @@ -556,7 +556,7 @@ gdk_return log_bat_group_start(logger *l gdk_return log_bat_persists(logger *lg, BAT *b, log_id id); gdk_return log_bat_transient(logger *lg, log_id id); lng log_changes(logger *lg); -gdk_return log_constant(logger *lg, int type, ptr val, log_id id, lng offset, lng cnt); +gdk_return log_constant(logger *lg, int type, const void *val, log_id id, lng offset, lng cnt); logger *log_create(int debug, const char *fn, const char *logdir, int version, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp, void *funcdata); gdk_return log_delta(logger *lg, BAT *uid, BAT *uval, log_id id); void log_destroy(logger *lg); diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c --- a/clients/mapiclient/mclient.c +++ b/clients/mapiclient/mclient.c @@ -1177,10 +1177,16 @@ TESTrenderer(MapiHdl hdl) if (strcmp(s, "-0") == 0) /* normalize -0 */ s = "0"; v = strtod(s, NULL); - for (j = 4; j < 11; j++) { - snprintf(buf, sizeof(buf), "%.*g", j, v); - if (v == strtod(buf, NULL)) - break; + if (v > (double) 999999999999999 || + v < (double) -999999999999999 || + (double) (int) v != v || + snprintf(buf, sizeof(buf), "%.0f", v) <= 0 || + strtod(buf, NULL) != v) { + for (j = 4; j < 11; j++) { + snprintf(buf, sizeof(buf), "%.*g", j, v); + if (v == strtod(buf, NULL)) + break; + } } mnstr_printf(toConsole, "%s", buf); } else if (strcmp(tp, "real") == 0) { @@ -1190,10 +1196,16 @@ TESTrenderer(MapiHdl hdl) if (strcmp(s, "-0") == 0) /* normalize -0 */ _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org