Changeset: 409d2e746ca2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/409d2e746ca2
Modified Files:
tools/mserver/mserver5.c
Branch: nested
Log Message:
Merges default
diffs (truncated from 574 to 300 lines):
diff --git a/.hgtags b/.hgtags
--- a/.hgtags
+++ b/.hgtags
@@ -842,3 +842,4 @@ 11a26808ab1bc96546077899924e5c31d7f2553c
ad290be8174693266b1e4eeab06af0266686af38 Mar2025_3
ad290be8174693266b1e4eeab06af0266686af38 Mar2025_release
53b71d71caccc81358785cb852a186500fc95b08 Mar2025_5
+77b1be95dc79fe61215a34b84ed67e7097323977 Mar2025_7
diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -1056,6 +1056,9 @@ rm "${RPM_BUILD_ROOT}"%{_unitdir}/monetd
%endif
%changelog
+* Mon Jun 30 2025 Sjoerd Mullender <[email protected]> - 11.53.7-20250630
+- Rebuilt.
+
* Fri Jun 27 2025 Sjoerd Mullender <[email protected]> - 11.53.5-20250627
- Rebuilt.
- GH#7625: Missing entry in sys.table_types table for new LOCAL TEMPORARY
diff --git a/cmake/monetdb-defines.cmake b/cmake/monetdb-defines.cmake
--- a/cmake/monetdb-defines.cmake
+++ b/cmake/monetdb-defines.cmake
@@ -147,6 +147,17 @@ macro(monetdb_macro_variables)
set(HAVE_RTREE ${RTREE_FOUND})
set(HAVE_OPENSSL ${OPENSSL_FOUND})
+ set(BUILD_TYPE ${CMAKE_BUILD_TYPE})
+ if (${CMAKE_BUILD_TYPE} STREQUAL "Debug")
+ set(EXTRA_C_FLAGS "${CMAKE_C_FLAGS_DEBUG}")
+ elseif (${CMAKE_BUILD_TYPE} STREQUAL "Release")
+ set(EXTRA_C_FLAGS "${CMAKE_C_FLAGS_RELEASE}")
+ elseif (${CMAKE_BUILD_TYPE} STREQUAL "MinSizeRel")
+ set(EXTRA_C_FLAGS "${CMAKE_C_FLAGS_MINSIZEREL}")
+ else (${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo")
+ set(EXTRA_C_FLAGS "${CMAKE_C_FLAGS_RELWITHDEBINFO}")
+ endif ()
+
if(MALLOC_FOUND)
if(${WITH_MALLOC} STREQUAL "jemalloc")
set(WITH_JEMALLOC 1)
diff --git a/cmake/monetdb-functions.cmake b/cmake/monetdb-functions.cmake
--- a/cmake/monetdb-functions.cmake
+++ b/cmake/monetdb-functions.cmake
@@ -111,7 +111,16 @@ function(monetdb_cmake_summary)
message(STATUS "Sphinx: ${SPHINX_FOUND}")
message(STATUS "Semodule: ${SEMODULE_FOUND}")
message(STATUS "Awk: ${AWK_FOUND}")
- message(STATUS "flags: ${CMAKE_C_FLAGS}")
+ message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
+ if (${CMAKE_BUILD_TYPE} STREQUAL "Debug")
+ message(STATUS "Extra C flags: ${CMAKE_C_FLAGS_DEBUG}")
+ elseif (${CMAKE_BUILD_TYPE} STREQUAL "Release")
+ message(STATUS "Extra C flags: ${CMAKE_C_FLAGS_RELEASE}")
+ elseif (${CMAKE_BUILD_TYPE} STREQUAL "MinSizeRel")
+ message(STATUS "Extra C flags: ${CMAKE_C_FLAGS_MINSIZEREL}")
+ else (${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo")
+ message(STATUS "Extra C flags: ${CMAKE_C_FLAGS_RELWITHDEBINFO}")
+ endif ()
message(STATUS "-----------------------------------------")
message(STATUS "")
endfunction()
diff --git a/cmake/monetdb-versions.cmake b/cmake/monetdb-versions.cmake
--- a/cmake/monetdb-versions.cmake
+++ b/cmake/monetdb-versions.cmake
@@ -44,7 +44,7 @@ set(MONETDB_VERSION "${MONETDB_VERSION_M
# common/options and common/utils)
set(GDK_VERSION_MAJOR "30")
set(GDK_VERSION_MINOR "1")
-set(GDK_VERSION_PATCH "0")
+set(GDK_VERSION_PATCH "1")
set(GDK_VERSION
"${GDK_VERSION_MAJOR}.${GDK_VERSION_MINOR}.${GDK_VERSION_PATCH}")
# version of the MAPI library (subdirectory clients/mapilib)
diff --git a/debian/changelog b/debian/changelog
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+monetdb (11.53.7) unstable; urgency=low
+
+ * Rebuilt.
+
+ -- Sjoerd Mullender <[email protected]> Mon, 30 Jun 2025 13:19:20 +0200
+
monetdb (11.53.5) unstable; urgency=low
* Rebuilt.
diff --git a/gdk/gdk_storage.c b/gdk/gdk_storage.c
--- a/gdk/gdk_storage.c
+++ b/gdk/gdk_storage.c
@@ -231,7 +231,14 @@ GDKfdlocate(int farmid, const char *nme,
}
if (strchr(mode, 'w')) {
- flags |= O_WRONLY | O_CREAT | O_TRUNC;
+ flags |= O_WRONLY | O_CREAT;
+ /* HACK ALERT: text files also get truncated but binary
+ * files not! This is because mmap extend depends on
+ * files not getting truncated, and a second hot
+ * snapshot needs to completely overwrite a pre-existing
+ * (from an earlier snapshot) BBP.dir file. */
+ if (strchr(mode, 'b') == NULL)
+ flags |= O_TRUNC;
} else if (!strchr(mode, '+')) {
flags |= O_RDONLY;
} else {
diff --git a/monetdb5/mal/mal_session.c b/monetdb5/mal/mal_session.c
--- a/monetdb5/mal/mal_session.c
+++ b/monetdb5/mal/mal_session.c
@@ -321,8 +321,8 @@ MSscheduleClient(str command, str peer,
cleanUpScheduleClient(c, &command, &msg);
return;
}
- if (!GDKgetenv_isyes(mal_enableflag)
- && strncasecmp("sql", lang, 3) != 0
+ if (strncasecmp("sql", lang, 3) != 0
+ && strncasecmp("msql", lang, 3) != 0
&& strcmp(user, "monetdb") != 0) {
mnstr_printf(fout,
"!only the 'monetdb' user can
use non-sql languages. "
diff --git a/monetdb_config.h.in b/monetdb_config.h.in
--- a/monetdb_config.h.in
+++ b/monetdb_config.h.in
@@ -194,6 +194,9 @@
#cmakedefine HAVE_LIBPY3 1
#cmakedefine HAVE_OPENSSL 1
+#cmakedefine BUILD_TYPE "@BUILD_TYPE@"
+#cmakedefine EXTRA_C_FLAGS "@EXTRA_C_FLAGS@"
+
#cmakedefine WITH_JEMALLOC 1
#cmakedefine WITH_MIMALLOC 1
#cmakedefine WITH_TCMALLOC 1
diff --git
a/sql/test/BugTracker-2025/Tests/7654_non_monetdb_user_remote_table_exec.test.in
b/sql/test/BugTracker-2025/Tests/7654_non_monetdb_user_remote_table_exec.test.in
new file mode 100644
--- /dev/null
+++
b/sql/test/BugTracker-2025/Tests/7654_non_monetdb_user_remote_table_exec.test.in
@@ -0,0 +1,21 @@
+@connection(id=c1, username=monetdb, password=monetdb)
+statement ok
+create user u1 with password 'u1' name 'u1'
+
+@connection(id=c1, username=monetdb, password=monetdb)
+statement ok
+create user u2 with password 'u2' name 'u2'
+
+@connection(id=c2, username=u1, password=u1)
+statement ok
+create table foo as select * from generate_series(0, 1000)
+
+@connection(id=c3, username=u2, password=u2)
+statement ok
+create remote table foo(value smallint) on
'mapi:monetdb://localhost:$MAPIPORT/$TSTDB/u1/foo' with user 'u1' password 'u1'
+
+@connection(id=c3, username=u2, password=u2)
+query I
+select count(*) from foo
+----
+1000
diff --git a/sql/test/BugTracker-2025/Tests/All
b/sql/test/BugTracker-2025/Tests/All
--- a/sql/test/BugTracker-2025/Tests/All
+++ b/sql/test/BugTracker-2025/Tests/All
@@ -15,3 +15,4 @@ 7636_antijoin_crash
7644_antijoin_crash
7645_not_likeselect
7646_leftjoin_crash
+7654_non_monetdb_user_remote_table_exec
diff --git a/sql/test/Tests/selective_snapshot.py
b/sql/test/Tests/selective_snapshot.py
new file mode 100644
--- /dev/null
+++ b/sql/test/Tests/selective_snapshot.py
@@ -0,0 +1,229 @@
+import tarfile
+from MonetDBtesting import process
+import pymonetdb
+import sys
+import shutil
+import os
+import contextlib
+import copy
+
+
+dbfarm = os.getenv('GDK_DBFARM')
+tstdb = os.getenv('TSTDB')
+mydb = tstdb + '_snapx'
+
+
+def log(message):
+ assert '\n' not in message
+ print(f'## {message}', flush=True)
+
+
+def query_one(conn, sql, args=None):
+ with conn.cursor() as c:
+ c.execute(sql, args)
+ return c.fetchone()[0]
+
+
[email protected]
+def runserver():
+ """Run an mserver, optionally clean its database directory afterward
+
+ Returns a connection to the database
+ """
+
+ log('starting server')
+ # why the stdin=PIPE?
+ with process.server(dbname=mydb, mapiport=0, stdin=process.PIPE) as server:
+ port = server.dbport
+ log(f'port={port}')
+
+ def do_connect(): return pymonetdb.connect(
+ mydb, port=port, username='monetdb', password='monetdb')
+
+ with do_connect() as conn:
+ dbpath = query_one(
+ conn, "select value from sys.environment where name =
'gdk_dbpath'")
+ conn.dbpath = dbpath # add additional attributes
+ conn.another_connection = do_connect
+ yield conn
+ log(f'cleaning {dbpath}')
+ shutil.rmtree(dbpath)
+
+
+foo_cols = "i INT PRIMARY KEY, t TEXT"
+foo_data = [(1, 'one'), (2, 'two'), (3, 'three')]
+foo_update = "UPDATE foo SET t = t || '!'"
+foo_data2 = [(i, t + '!') for i, t in foo_data]
+
+bar_cols = "j INT, i INT REFERENCES foo(i)"
+bar_data = [(11, 1), (21, 1), (32, 2)]
+bar_update = "UPDATE bar SET j = j * 10"
+bar_data2 = [(j * 10, i) for j, i in bar_data]
+
+baz_cols = "x TEXT"
+baz_data = [('hello, world',)]
+
+
+def initialize_table(conn, name, cols, data, *, unlogged=False):
+ table = "UNLOGGED TABLE" if unlogged else "TABLE"
+ with conn.cursor() as c:
+ log(f'CREATE {table} {name}')
+ c.execute(f"CREATE {table} {name} ({cols})")
+ placeholders = ','.join(['%s'] * len(data[0]))
+ ins = f"INSERT INTO {name} VALUES ({placeholders})"
+ for row in data:
+ c.execute(ins, row)
+
+
+def verify_table(conn, name, data):
+ log(f'verifying {name} contains {data!r}')
+ with conn.cursor() as c:
+ expected = sorted(copy.deepcopy(data))
+ c.execute(f"SELECT * FROM {name}")
+ actual = sorted(c.fetchall())
+ if actual != expected:
+ raise Exception(
+ f'table {name}: expected {expected!r}, got {actual!r}')
+
+
+def make_snapshot(conn, filename, omit_unlogged, omit_tables):
+ log(f'snapshot {filename!r}: omit_unlogged={omit_unlogged}
omit_tables={omit_tables!r}')
+ try:
+ os.remove(filename)
+ except FileNotFoundError:
+ pass
+ schema_id = query_one(
+ conn, "SELECT id FROM sys.schemas WHERE name = CURRENT_SCHEMA")
+ omit_ids = []
+ for name in omit_tables:
+ id = query_one(conn, "SELECT id FROM sys.tables WHERE name = %s AND
schema_id = %s", [
+ name, schema_id])
+ omit_ids.append(id)
+ with conn.cursor() as c:
+ joined_omit_ids = ','.join(str(id) for id in omit_ids)
+ c.execute("CALL sys.hot_snapshot(%s, true, %s, %s)",
+ (filename, omit_unlogged, joined_omit_ids))
+
+
+def unpack_snapshot(filename):
+ log(f'unpacking snapshot {filename}')
+ with tarfile.open(filename) as tar:
+ try:
+ tar.extraction_filter
+ except AttributeError:
+ # pre 3.12 Python
+ tar.extractall(dbfarm)
+ else:
+ tar.extractall(dbfarm, filter='data')
+
+
+# Create the database and set up some test data.
+# Instantly create a full snapshot.
+# Verify that foreign key constraints are checked.
+with runserver() as conn:
+ initialize_table(conn, 'foo', foo_cols, foo_data)
+ initialize_table(conn, 'bar', bar_cols, bar_data)
+ initialize_table(conn, 'baz', baz_cols, baz_data, unlogged=True)
+ conn.commit()
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]