The Mar2025 documentation can be found here.
There is a new shared library called libmutils that contains some utility functions that are used by several programs.
Hot snapshot: allow member files larger than 64 GiB. By member files we mean the files inside the resulting .tar file, not the tar file itself. Huge member files are written using a GNU tar extension to the original tar format, which doesn’t support more than 8 GiB.
Removed function bat.attach since it wasn’t used.
Removed the MAL type “identifier” and supporting functions. There has never been an SQL interface to this type.
Removed the MAL type “color” and supporting functions. There has never been an SQL interface to this type.
Added scalar functions: dayname(d date) and monthname(d date) returns varchar(10).
ranking window functions are now optimized into topn’s For the grouped case we added the missing grouped/heap based topn implementation.
Added support for reading external data in a generic way via table returning function: proto_loader(string uri). The uri string value must start with the scheme name, ending with : character. Supported schemes are: monetdb: and odbc:. The monetdb scheme allows you to connect to a remote MonetDB server and retrieve the data of a specific table or view in a specific schema. The uri syntax: monetdb://[<host>[:<port>]]/<database>/<schema>/<table> Example:
SELECT * FROM proto_loader('monetdb://127.0.0.1:50000/demo_db/sys/tables');
The odbc scheme allows you to connect to any ODBC data source via an ODBC driver and retrieve the data of a supplied query. The uri syntax:
odbc:{{DSN|FILEDSN}=<data source name>|DRIVER=<path_to_driver>};
[<ODBC connection parameters>;]QUERY=<SQL query>
For ODBC you normally configure a data source first. This is done using the ODBC administrator (on windows: odbcad32.exe, on linux: odbcinst). Once a data source for a specific ODBC driver has been setup using a unique name, you can reference it as: DSN=my_bigdata; or FILE_DSN=/home/usernm/dsns/my_bigdata.dsn; If you do not want to setup a data source, you can use DRIVER=…; to specify the ODBC driver program to use. However this also means you have to specify all the required connection parameters yourself, such as UID=…;PWD=…;DATABASE=…; etc. The QUERY=<SQL query> part is mandatory and must be specified at the end of the uri string, after the optional ODBC connection parameters. Examples:
SELECT * FROM proto_loader(
'odbc:DSN=Postgres;UID=claude;PWD=monet;QUERY=SELECT * FROM customers');
SELECT * FROM proto_loader('odbc:DRIVER=/usr/lib64/libsqlite3odbc.so;
Database=/home/martin/sqlite3/chinook.db;QUERY=SELECT * FROM customers');
Note that the ‘odbc:’ scheme is experimental and not enabled by default. To enable it, the MonetDB server has to be started with argument: --loadmodule odbc_loader
Extended the constant aggregate optimizer in order to eliminate aggregates with constant arguments whenever possible.
REMOTE TABLES and REPLICA TABLES now fully support the monetdb:// and monetdbs:// URL’s introduced in Aug2024. Any mapi:monetdb:// URL’s are normalized to the new style.
Add function sa_msettings_create() to allocate an msettings object using the arena allocator.
Unused helper function mapiuri_database() has been removed from rel_remote.h.
Added support for aggregates which order within the group such as quantile and which potentially order within the group such as group_concat. The ordering for such operators in now handled once in the relational plan. For this the create function statements can now have an optional order specification, using the keywords ‘ORDERED’ and ‘WITH ORDER’.
Added support for recursive CTE’s.
The SQL parser was cleaned up. This resulted in some keywords being used more strictly. If any of these keywords are to be used as column names, they have to be quoted using double quotes: AS, TABLE, COLUMN, DISTINCT, EXEC, EXECUTE.
Introduce the RETURNING clause for INSERT, UPDATE and DELETE statements. Specifying a RETURNING clause causes the SQL statement to return the modified records which can be queried using SELECT like expressions in the RETURNING clause. Aggregate functions are allowed. This is a common non-standard SQL extension. Examples:
INSERT INTO foo values (1,10), (-1,-10) RETURNING i+2*j AS bar
returns: 21 -21;
UPDATE foo SET i = -i WHERE i > 0 RETURNING sum(j), count(j)
returns: -60|3
Introduce division_min_scale SQL environment variable for specifying minimum scale of the division result. The default value is 3.
7101: Feature request: nextafter() in SQL
7159: CREATE LOCAL TEMPORARY VIEW
7331: Support RETURNING clause
7578: explain result in Mal is truncated in large UDFs and their input bats is not shown
7609: Upgrade 11.49.11 to 11.51.7 issues
7611: Not possible to create table with multiple composite UNIQUE NULLS NOT DISTINCT constraints
7614: Filter function creates a cartesian product when used with a view
7615: Filter function creates a cartesian product when used with a view (2)
7616: Filter function disappears
7618: Tables loose their columns
7619: Resource leak in prepared statements
7621: crash on aggregate with case statement
7622: In PREPARE queries with many parameters, information about parameters is truncated when sent to client.
7623: Database crashed when using UPDATE xxx SET xxx RETURNING xx