Dec2025 (11.55)

The Dec2025 documentation can be found here.

Dec2025-SP2 Bugfix “Release” (11.55.5)

  • Suppress error messages in merovingian.log when incoming connections are closed by the client before any I/O takes place. Service health monitoring tools tend to do this periodically to check if MonetDB is still up.

Bug Fixes

  • 7728: MonetDB server (Mar2025-SP2-release) crashes at strCmp

  • 7770: Assertion failure in query_outer_aggregated with aggregated scalar subquery in INSERT VALUES

  • 7788: mserver crash: rel_order_by raising assertion is_project(rel->op) fail

  • 7789: mserver crash : rel_bin.c exp_bin: Assertion `0’ failed.

  • 7790: mserver5 crash: rel_bin rel2bin_insert Assertion `!n && !m’ failed

  • 7791: mserver5 crash : rel_bin.c Assertion `sql->session->status == -10’ failed.

  • 7792: Mserver crash:rel_bin.c stmt *rel2bin_join: Assertion `sql->session->status == -10’ failed

  • 7793: mserver crash:rel2bin_semijoin Assertion `sql->session->status == -10’ failed.

  • 7794: mserver crash: rel_bin rel2bin_groupby Assertion `sql->session->status == -10'

  • 7795: mserver crash: rel2bin_project Assertion `sql->session->status == -10’ failed.

  • 7796: mserver crash : stmt_alias_ Assertion `label’ failed.

  • 7797: monetdb crash :rel_exp.c rel_find_exp_and_corresponding_rel_ Assertion `e->nid’ failed.

  • 7800: mserver crash: rel_used_projections Assertion `e->nid && exps_bind_nid(exps, e->nid)’ failed

  • 7801: mserver crash:exp_rel_visitor Assertion `e’ failed.

  • 7813: Top N not pushed down to Remote Tables in Merge Table (v11.53.15)

  • 7815: Server SIGSEGV in ALGmarkselect triggered by CAST·WHEN NOT NULL·UNION SELECT DISTINCT feature intersection

  • 7816: table returning function with split_part() and generate_series() crashes server when called multiple times

  • 7818: Server crash in GDKanalytical_covariance_samp triggered by NULL-argument statistical window functions combined with divide-by-zero frame bounds and empty UNION range

  • 7820: MonetDB server crashes with “unexpected end of file” on SELECT with scalar subquery and EXISTS referencing system tables

  • 7826: Monetdb server crash on SELECT with nested derived tables, EXISTS subquery with LIMIT, and complex boolean predicates on system catalog tables

  • 7832: Server crash in rel_push_select_down (SQL optimizer) triggered by row-value comparison warm-up sequence and rank() OVER (PARTITION BY mixed-type literals)

  • 7833: Bug Report — Server crash in rel_push_select_down (SQL optimizer) triggered by RANK() OVER in HAVING NOT x < ANY (aggregate comparison) with multi-column MAX/MIN SELECT

  • 7834: Server crash in rel_push_select_down (SQL optimizer) triggered by doubly-nested recursive CTE inside STDDEV_POP(NULLIF(...)) with CUBE GROUP BY and correlated NOT IN subquery

  • 7835: Server crash in rel_push_select_down (SQL optimizer) triggered by NULLIF(recursive_CTE, NULL) inside HAVING with GROUP BY CUBE and triple-UNION source

  • 7836: MonetDB server crash on SELECT with CASE WHEN containing nested EXISTS, LATERAL subquery with LIMIT, and complex boolean predicates on system catalog tables

  • 7837: MonetDB server crash on SELECT with nested CASE WHEN, correlated EXISTS subqueries, LATERAL join with LIMIT/OFFSET, and complex constant-folded predicates

  • 7838: MonetDB server crash on SELECT with nested joins, EXISTS subquery with scalar aggregates, and OR in ON conditions

  • 7839: TCP health check floods merovingian log with errors

  • 7840: MonetDB server crash during optimization of SELECT with nested LATERAL and multiple scalar aggregate subqueries

  • 7841: Server crash in rel_push_select_down (SQL optimizer) triggered by nested recursive CTE inside STDDEV_POP(NULLIF(...)) with CUBE grouping and BETWEEN on md5(NULL)

  • 7842: Server crash in rel_push_select_down (SQL optimizer) triggered by max() OVER in UNION with GROUP BY CUBE and deeply nested recursive CTE in NOT IN HAVING predicate

  • 7843: Server crash during signal handling (vscanf/psiginfo) triggered by multi-statement sequence with rank() OVER (PARTITION BY mixed-type literals) after simple comparison warm-up

  • 7844: Server crash in _rel_aggr (aggregate relation builder) triggered by SUM(DISTINCT) after multi-statement escape-character comparison sequence and CREATE/DROP TABLE

  • 7845: Server crash in bin_find_smallest_column

  • 7846: Server crash in do_covariance_and_correlation

  • 7847: MonetDB server crash during SELECT with nested EXISTS, CASE expression, and correlated subquery referencing derived table columns

  • 7848: MonetDB server crash during SELECT with LATERAL subquery, nested CASE expressions, and scalar subqueries

  • 7849: MonetDB server crash during SELECT with nested EXISTS, mixed JOIN types, and correlated derived-table subquery

  • 7850: MonetDB server crash during SELECT with LATERAL subquery, mixed JOIN types, and nested CASE expressions

  • 7851: MonetDB server crash during MERGE with deeply nested LATERAL subqueries and correlated EXISTS predicates

  • 7852: Server crash in exp_bin (expression code generation) triggered by row-value comparison warm-up sequence and COUNT(*) OVER (ROWS BETWEEN CASE ... PRECEDING AND CURRENT ROW) with complex NOT IN subquery

  • 7853: Server crash in exp_bin (expression code generation) triggered by 5 IN (subquery) AND 6 IN (subquery) with HAVING containing recursive CTE

  • 7854: Server crash in exp_freevar during rel_unnest_dependent (deep recursion) triggered by doubly-nested recursive CTE with ltrim(rtrim(sql_min(...))) seed and deeply correlated NOT IN subquery with SUM(DISTINCT CAST(NULL IN (...) AS INTEGER))

  • 7855: Server crash in exp_has_freevar

  • 7856: Server crash in exp_match

  • 7857: Server crash in exp_rel_visitor

  • 7859: Server crash in getModule

  • 7862: Server crash in rel_crossproduct

  • 7865: Server crash in rel_get_statistics_

  • 7867: Server crash in rel_optimize_projections_

  • 7870: Server crash in rel_set_type

  • 7872: Server crash in rel_unnest_simplify

  • 7873: MonetDB crash with deeply nested LATERAL and EXISTS queries

  • 7874: MonetDB crash on SELECT with nested LATERAL subqueries, multi-level JOINs, and correlated EXISTS predicates

  • 7875: MonetDB server crash during SELECT with multiple LATERAL subqueries, complex JOIN conditions, and nested CASE expressions

  • 7876: MonetDB server crash during SELECT with RIGHT JOIN, EXISTS subquery, and complex constant-folded expressions

  • 7877: MonetDB crash with nested RIGHT JOINs, correlated EXISTS subqueries, and constant-based join predicates

  • 7878: MonetDB crash with minimal LATERAL subquery and nested CASE in WHERE

  • 7880: MonetDB crash (SIGSEGV) on query with nested LATERAL subqueries and CASE expression, no direct reason reported by mserver5

  • 7882: Incorrect optimization of LATERAL subquery with DISTINCT and outer reference leading to wrong results or planner error

  • 7883: MonetDB crash (SIGSEGV) on query with RIGHT JOIN and Subquery, no direct reason reported by mserver5

  • 7884: MonetDB crash (SIGSEGV) on query with Lateral subquery and a redundant always-true predicate, no direct reason reported by mserver5

  • 7886: LOCAL TEMPORARY VIEW not visible via CTE

  • 7888: MonetDB produces different results for two logically equivalent UPDATE statements. The mutated statement differs from the original only by adding a dead boolean branch inside the predicate: AND 1 = 0

  • 7889: MonetDB produces different results for two DELETE statements whose EXISTS subqueries should be equivalent in this test case.

  • 7890: Wrong result for semantically equivalent INSERT … SELECT … WHERE EXISTS(…) with UNION / EXCEPT / INTERSECT

Dec2025-SP1 Bugfix “Release” (11.55.3)

Bug Fixes

  • 7690: CASE operator inside aggregate function error

  • 7691: Slow execution of a query with a constantly false WHERE-condition

  • 7726: MonetDB server (Mar2025-SP2-release) crashes at ALGgroupby

  • 7759: PCRE replace referencing non-existing capture groups fails with “Could not allocate space”

  • 7760: Unexpectedly high resource and time usage when using IN (SELECT table_name.column_name FROM table_name GROUP BY 1) subquery

  • 7765: CREATE LOCAL TEMPORARY VIEW leaves orphan dependencies behind

  • 7766: Assertion failure in exp_bin when using scalar subquery with GROUP BY inside aggregate

  • 7767: Assertion failure (sql->session->status == -10) in rel2bin_select caused by malformed IN (SELECT …) expression

  • 7768: Simple single table query returns wrong results

  • 7769: Crash in NTH_VALUE window function with RANGE frame

  • 7771: Assertion failure in stmt_alias_ with scalar subquery in INSERT VALUES

  • 7772: msqldump does not dump UNLOGGED TABLE definitions

  • 7773: msqldump generates invalid SQL CREATE TABLE definitions for tables with multiple CHECK constraints

  • 7775: heap-buffer-overflow in monetdb causing monetdb crash

  • 7780: PLAN performance explosion with CTEs, nested CASE, wide column counts

  • 7782: system view sys.roles does not list implicitly created roles

  • 7783: Duplicate rows returned when selecting on composite primary key after delete/re-insert

  • 7785: Recursive CTE with UNION ALL may cause infinite loop / non-terminating execution

  • 7786: DROP TABLE fails with HY013 “Could not allocate memory” after ALTER TABLE RENAME

  • 7787: mserver crash: SQLrun: Assertion `!*m->errstr’ sql_execute.c

  • 7798: running mserver5 under valgrind does not initialize SQL interface.

  • 7799: server crashes when an error is detected during initialization

  • 7803: sever crash at rel_dce_refs

  • 7804: server crash (assertion failure) when querying: sys.querylog_catalog order by id desc

  • 7805: ORDER BY ALL queries return data in reserve order

  • 7806: Casting to decimal without precision and scale assumes wrong defaults

  • 7808: BLOBs longer then 2 GiB cause a server crash

  • 7810: You can have DATE string, but you cannot have GEOMETRY string to cast a string constant

  • 7811: SELECT ‘x’ - ‘x’; gives weird error message.

  • 7812: MONETDB HEAP BUFFER OVERFLOW

Dec2025 Feature Release (11.55.1)

  • Extended MonetDB’s memory allocator framework from the SQL layer to all layers of the database server. The main features of the allocator framework include i) efficient processing of large numbers of memory allocation calls, and ii) efficient management of memory to avoid fragmentation. This update also enables fine-grained configuration and monitoring of memory usage per thread, query, etc.

  • This server is no longer compatible with the MonetDB Stethoscope.

  • Changed the way complex AND and OR expressions are handled. The new expression tree uses 2 new cmp flag (cmp_con/cmp_dis), both expressions hold lists of expressions. This structure reduces the need for stack space, allowing way larger expressions trees to be handled.

ODBC Driver

  • Corrected SQLColAttribute() and SQLGetDescField() for when FieldIdentifier is SQL_DESC_LITERAL_PREFIX or SQL_DESC_LITERAL_SUFFIX. They will now return the correct literal prefix or suffix string instead of an empty string depending on the datatype of the column.

MonetDB Common

  • log_tflush function, when flushnow flag is true, now passes bitmap array that indicates which bat id’s need to be sync’ed to disk, instead of passing NULL which would trigger a sync of the full catalog. If new bats are added to the catalog, they will be sync’ed always (see maxupdated flag).

MonetDB5 Server

  • We no longer persist querylog results. If you want to keep the data, make a copy into an SQL table.

  • The default_fast and minimal_fast optimizer pipelines have been removed. The default_pipe and minimal_pipe optimizers now use the “fast” path always.

  • The type “pcre” has been removed. There was no way to create a value of the type, and there was only one function that used a value of the type. That function (pcre.index) has also been removed.

SQL Frontend

  • New implementation for the CONTAINS filter function for string data types using a much faster algorithm based on the knowledge of the bigram occurrences of the to-be-filtered column.

  • Add functions to_hex(int) and to_hex(bigint). They return the unsigned hexadecimal string representation of their argument.

  • COPY BINARY has been optimized to be much faster when many string columns are involved.

  • The performance of COPY BINARY of blob column has also been improved.

  • The performance of COPY BINARY ON CLIENT has been much improved. It used to be much slower than ON SERVER, now it’s only a little slower.

  • The file format for COPY BINARY strings has been extended. If the same string occurs multiple times, later occurrences can refer back to earlier occurrences instead of including another copy of the string. This improves both file size and processing time.

  • A new example tool ‘backrefencode’ has been added that can introduce these back references or remove them again.

  • Experimental support for compressed ON CLIENT transfers has been added. If you write ON ‘algo’ CLIENT, with algo=lz4/gz/xz/b2, the server compresses downloaded data and decompresses uploaded data server-side using the given algorithm. It is up to the user to ensure that the uploaded data has indeed been compressed. This is not always easy because many clients automatically compress or decompress data when the file name contains .gz, .lz4, etc., which would lead to double compression and decompression.

  • Implemented aggregates sha1, sha224, sha256, sha384, sha512, and ripemd160 which calculate a checksum (digest) over a column of strings. It only makes sense to use these with an ordering, as SELECT sha256(name ORDER BY id) FROM table, since the ordering in which the values are fed into the digest algorithm is important and cannot otherwise be guaranteed.

  • EXPLAIN now supports a BEFORE/AFTER LOGICAL UNNEST/LOGICAL REWRITE/PHYSICAL clause to indicate which phase of query compilation to show. A plain EXPLAIN is equivalent to EXPLAIN AFTER REWRITE, which is what PLAN used to do. The old EXPLAIN is now EXPLAIN PHYSICAL. LOGICAL REWRITE also supports specifying two positive values, rewriter index number and optimizer loop cycle stop counter. SHOW DETAILS includes more information about properties, rewriters number of changes and time spent.

  • The PLAN keyword has been removed.

  • The TRACE prefix for SQL queries now no longer produces two result sets. Before, the first result set was the result of the query, and the second result set was timing information of the query execution. This second result set is no longer produced. Instead, use the (already existing) function sys.tracelog() or the view sys.tracelog to retrieve this information. As before, the table that is produced by the function/view is reset whenever a new TRACE prefixed query is executed.

  • Removed table returning function sys.optimizer_stats().

  • There are new types “inet4” and “inet6” which can hold respectively IPv4 and IPv6 internet addresses without CIDR network mask information. Netmask information can be held in a separate column if they are needed. The 0 address (0.0.0.0 and ::) are used as NULL value and can therefore not be used as addresses. Bitwise operations (AND, OR, XOR, NOT) are supported on the addresses, and there are various functions to check whether an address is contained in a (sub)net (where an extra CIDR netmask column is also needed).

  • Added the possibility to specify IF NOT EXISTS for the following CREATE statements: CREATE SEQUENCE IF NOT EXISTS seq_name … CREATE USER IF NOT EXISTS user_name … CREATE ROLE IF NOT EXISTS role_name … CREATE TYPE IF NOT EXISTS type_name … CREATE INDEX IF NOT EXISTS index_name ON … CREATE IMPRINTS INDEX IF NOT EXISTS index_name ON … CREATE ORDERED INDEX IF NOT EXISTS index_name ON … With IF NOT EXISTS specified these CREATE statements will not return an error when an object with the same name already exists. See doc: https://www.monetdb.org/documentation/user-guide/sql-manual/data-definition/

  • Added the possibility to specify IF EXISTS for the following DROP statements: DROP SEQUENCE IF EXISTS seq_name … DROP USER IF EXISTS user_name DROP ROLE IF EXISTS role_name DROP TYPE IF EXISTS type_name … DROP INDEX IF EXISTS index_name With IF EXISTS specified these statements will not return an error when the object does not exists. See doc: https://www.monetdb.org/documentation/user-guide/sql-manual/data-definition/drop-statement/

  • Added the possibility to specify IF EXISTS for two ALTER statements: ALTER SEQUENCE IF EXISTS seq_name … ALTER USER IF EXISTS user_name … With IF EXISTS specified these statements will not return an error when the object does not exists. See doc: https://www.monetdb.org/documentation/user-guide/sql-manual/data-definition/sequence-definition/ and https://www.monetdb.org/documentation/user-guide/sql-manual/data-definition/privileges/

  • It is now possible to change the type of a column by using a statement like ALTER TABLE t ALTER COLUMN c type;. The content of the column is converted to the new type using code similar to CAST(c AS type). If the conversion fails, the column type isn’t changed.

  • With COPY INTO, the USING DELIMITERS, DECIMAL, ESCAPE, NULL, BEST EFFORT and FWF clauses can now be given in any order. If a clause occurs multiple times, the last instance wins.

Bug Fixes

  • 7635: Unexpected Inner Join Crash

  • 7645: Unexpected Internal Error in Inner Join

  • 7651: Incorrect Anti Join Result

  • 7652: Incorrect Anti Join Result related to optimization

  • 7653: Incorrect Inner Join Result

  • 7667: MonetDB Mar2025-SP1 crashes at rel_selects with a circular view

  • 7677: Misleading error message “Could not allocate space”

  • 7694: Unexpected execution result

  • 7695: Unexpected execution result

  • 7696: Unexpected execution result

  • 7697: Unexpected execution result

  • 7698: Unexpected Right Join Result

  • 7701: Add possibility to set MAX_WORKERS to NO MAX_WORKERS in ALTER USER

  • 7703: Unexpected Left Join Result

  • 7705: Unexpected Anti Join Result

  • 7707: Unexpected Right Join Result

  • 7708: Unexpected Join Result

  • 7709: Monetdb crash when using field fcuntion

  • 7711: Unexpected Crash

  • 7712: Unexpected Out of Memory

  • 7713: Monetdb crashes when using group by

  • 7714: Monetdb crash when creating table using window function

  • 7715: Unexpected Anti Join Result

  • 7716: Unexpected Anti Join Result

  • 7717: a crash when executing sql

  • 7719: a crash using select

  • 7720: MonetDB server (Mar2025-SP2-release) crashes at stmt_cond

  • 7722: MonetDB server (Mar2025-SP2-release) crashes at rel_with_query

  • 7725: MonetDB server (Mar2025-SP2-release) crashes at bin_find_smallest_column

  • 7727: MonetDB server (Mar2025-SP2-release) crashes at exp_ref

  • 7739: Unexpected Crash in Left Join

  • 7741: crash in MonetDB

  • 7745: Unexpected Execution Results

  • 7748: MonetDB server crashes with “unexpected end of file” on UPDATE … RETURNING with EXISTS subquery

  • 7751: Continuation of Bug #7737

  • 7752: Internal error when executing a simple SQL query: TypeException:user.main[29]:‘mat.packIncrement’ undefined in: X_39:any := mat.packIncrement(X_37:bat[:lng], X_38:bat[:bte]);

  • 7753: mserver5.exe crashes when executing a simple query

  • 7763: MALexception throw in query with EXISTS and NULL