Changeset: 685d904d6957 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/685d904d6957
Modified Files:
        geom/monetdb5/geom.c
        geom/monetdb5/geom_atoms.c
        sql/storage/store.c
Branch: default
Log Message:

Merge with Dec2025 branch.


diffs (truncated from 656 to 300 lines):

diff --git a/geom/monetdb5/geom.c b/geom/monetdb5/geom.c
--- a/geom/monetdb5/geom.c
+++ b/geom/monetdb5/geom.c
@@ -2375,6 +2375,11 @@ geos2wkb(allocator *ma, wkb **geomWKB, s
                return NULL;
 
        assert(wkbLen <= GDK_int_max);
+       if (wkbLen > (size_t) GDK_int_max) {
+               GEOSFree_r(geoshandle, w);
+               GDKerror("geos2wkb: wkb length too large\n");
+               return NULL;
+       }
 
        *geomWKB = ma_alloc(ma, wkb_size(wkbLen));
        //If malloc failed create a NULL wkb
@@ -2554,6 +2559,8 @@ wkbFromBinaryWithBuffer(allocator *ma, w
 
        wkbLength = strLength / 2;
        assert(wkbLength <= GDK_int_max);
+       if (wkbLength > (size_t) GDK_int_max)
+               throw(MAL, "geom.FromBinary", SQLSTATE(38000) "Geos length too 
large");
 
        if (!*geomWKB || *len < wkb_size(wkbLength)) {
                *len = wkb_size(wkbLength);
diff --git a/geom/monetdb5/geom_atoms.c b/geom/monetdb5/geom_atoms.c
--- a/geom/monetdb5/geom_atoms.c
+++ b/geom/monetdb5/geom_atoms.c
@@ -210,9 +210,9 @@ wkbWRITE(const void *A, stream *s, size_
 
        (void) cnt;
        assert(cnt == 1);
-       if (!mnstr_writeInt(s, len))    /* 64bit: check for overflow */
+       if (!mnstr_writeInt(s, len))
                return GDK_FAIL;
-       if (!mnstr_writeInt(s, srid))   /* 64bit: check for overflow */
+       if (!mnstr_writeInt(s, srid))
                return GDK_FAIL;
        if (len > 0 &&          /* 64bit: check for overflow */
            mnstr_write(s, (char *) a->data, len, 1) < 0)
diff --git a/monetdb5/modules/kernel/aggr.c b/monetdb5/modules/kernel/aggr.c
--- a/monetdb5/modules/kernel/aggr.c
+++ b/monetdb5/modules/kernel/aggr.c
@@ -72,19 +72,18 @@ AGGRgrouped_bat_or_val(bat *retval1, bat
                                MT_lock_set(&q->theaplock);
                                qvalue = ((const dbl *) Tloc(q, 0))[0];
                                MT_lock_unset(&q->theaplock);
-                               if (qvalue < 0 || qvalue > 1) {
-                                       BBPunfix(b->batCacheid);
-                                       BBPreclaim(g);
-                                       BBPreclaim(e);
-                                       BBPreclaim(s);
-                                       BBPunfix(q->batCacheid);
-                                       throw(MAL, malfunc,
-                                                 "quantile value of %f is not 
in range [0,1]", qvalue);
-                               }
                        }
                        BBPunfix(q->batCacheid);
                } else {
-                       qvalue = *(quantile_val);
+                       qvalue = *quantile_val;
+               }
+               if (qvalue < 0 || qvalue > 1) {
+                       BBPreclaim(b);
+                       BBPreclaim(g);
+                       BBPreclaim(e);
+                       BBPreclaim(s);
+                       throw(MAL, malfunc,
+                                 "quantile value of %f is not in range [0,1]", 
qvalue);
                }
                bn = (*quantilefunc) (b, g, e, s, tp, qvalue, skip_nils);
        } else if ((*grpfunc2) (&bn, retval2 ? &cnts : NULL, b, g, e, s, tp,
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -6094,8 +6094,6 @@ sql_trans_rename_table(sql_trans *tr, sq
 
        if ((res = table_dup(tr, t, t->s, new_name, &dup, true)))
                return res;
-       if (isGlobal(t))
-               res = cleanup_schema_objects(t, tr);
        return res;
 }
 
diff --git 
a/sql/test/BugTracker-2025/Tests/7691-slow-query-on-allways-false.test 
b/sql/test/BugTracker-2025/Tests/7691-slow-query-on-allways-false.test
--- a/sql/test/BugTracker-2025/Tests/7691-slow-query-on-allways-false.test
+++ b/sql/test/BugTracker-2025/Tests/7691-slow-query-on-allways-false.test
@@ -2,7 +2,7 @@ statement ok
 create table test(value int, name string)
 
 statement ok
-insert into test (select i, cast(i as string) from generate_series(0, 
10000000) i(i))
+insert into test (select i, cast(i as string) from generate_series(0, 100000) 
i(i))
 
 # optimize the base table away !
 query T python .plan.filter
diff --git 
a/sql/test/BugTracker-2026/Tests/7758-truncate-sys-tables-corrupts-db.test 
b/sql/test/BugTracker-2026/Tests/7758-truncate-sys-tables-corrupts-db.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2026/Tests/7758-truncate-sys-tables-corrupts-db.test
@@ -0,0 +1,95 @@
+-- populate the tmp schema system tables first by creating a temp table with 
constraints
+statement ok
+CREATE TEMP TABLE tt7758(id serial, nm VARCHAR(99) NOT NULL UNIQUE CHECK 
(LENGTH(nm) >= 1))
+
+-- Step 1: Truncate tmp.triggers
+query I nosort
+SELECT (COUNT(*) > 0) AS has_rows FROM tmp.triggers
+----
+0
+
+statement error TRUNCATE system tables is not allowed
+TRUNCATE TABLE tmp.triggers
+
+-- Step 2: Truncate tmp.objects
+query I nosort
+SELECT (COUNT(*) > 0) AS has_rows FROM tmp.objects
+----
+1
+
+statement error TRUNCATE system tables is not allowed
+TRUNCATE TABLE tmp.objects
+
+query I nosort
+SELECT (COUNT(*) > 0) AS has_rows FROM tmp.objects
+----
+1
+
+-- Step 3: Truncate tmp.keys
+query I nosort
+SELECT (COUNT(*) > 0) AS has_rows FROM tmp.keys
+----
+1
+
+statement error TRUNCATE system tables is not allowed
+TRUNCATE TABLE tmp.keys
+
+query I nosort
+SELECT (COUNT(*) > 0) AS has_rows FROM tmp.keys
+----
+1
+
+-- Step 4: Truncate tmp.idxs
+query I nosort
+SELECT (COUNT(*) > 0) AS has_rows FROM tmp.idxs
+----
+1
+
+statement error TRUNCATE system tables is not allowed
+TRUNCATE TABLE tmp.idxs
+
+query I nosort
+SELECT (COUNT(*) > 0) AS has_rows FROM tmp.idxs
+----
+1
+
+-- Step 5: This is where the crash occurs
+query I nosort
+SELECT (COUNT(*) > 0) AS has_rows FROM tmp._tables
+----
+1
+
+statement error TRUNCATE system tables is not allowed
+TRUNCATE TABLE tmp._tables
+
+query I nosort
+SELECT (COUNT(*) > 0) AS has_rows FROM tmp._tables
+----
+1
+
+query I nosort
+SELECT (COUNT(*) > 0) AS has_rows FROM tmp._columns
+----
+1
+
+statement error TRUNCATE system tables is not allowed
+TRUNCATE TABLE tmp._columns
+
+query I nosort
+SELECT (COUNT(*) > 0) AS has_rows FROM tmp._columns
+----
+1
+
+statement ok
+DROP TABLE tmp.tt7758
+
+query I nosort
+SELECT (COUNT(*) > 0) AS has_rows FROM tmp._tables
+----
+0
+
+query I nosort
+SELECT (COUNT(*) > 0) AS has_rows FROM tmp._columns
+----
+0
+
diff --git a/sql/test/BugTracker-2026/Tests/7766-assertion-failure.test 
b/sql/test/BugTracker-2026/Tests/7766-assertion-failure.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2026/Tests/7766-assertion-failure.test
@@ -0,0 +1,17 @@
+statement ok
+CREATE TABLE v0 ( v1 FLOAT , v2 FLOAT )
+
+statement ok
+INSERT INTO v0 VALUES ( 33296913.000000 , 46714997.000000 )
+
+statement error 42000!SELECT: cannot use non GROUP BY column 'v1' in query 
results without an aggregate function
+SELECT v1 AS v4 FROM v0 AS v3 GROUP BY v2
+
+-- exp_bin: CRITICAL: Could not find v3.v1
+-- sql/backends/monet5/rel_bin.c:1899: exp_bin: Assertion `s' failed.
+statement error 42000!SELECT: cannot use non GROUP BY column 'v1' in query 
results without an aggregate function
+SELECT MAX ( ( SELECT v1 AS v4 FROM v0 AS v3 GROUP BY v2 ) ) FROM v0
+
+statement ok
+DROP TABLE v0
+
diff --git a/sql/test/BugTracker-2026/Tests/7767-assertion-failure.test 
b/sql/test/BugTracker-2026/Tests/7767-assertion-failure.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2026/Tests/7767-assertion-failure.test
@@ -0,0 +1,13 @@
+statement ok
+CREATE TABLE v0 ( v1 INT PRIMARY KEY , v2 VARCHAR ( 52 ) )
+
+statement error 42000!SELECT: identifier 'v2' unknown
+SELECT v2 AND v1 AND v1
+
+-- sql/backends/monet5/rel_bin.c:4958: rel2bin_select: Assertion 
`sql->session->status == -10' failed.
+statement error 42000!SELECT: identifier 'v2' unknown
+SELECT left ( v1 , -128 ) FROM v0 WHERE v2 IN ( SELECT v2 AND v1 AND v1 )
+
+statement ok
+DROP TABLE v0
+
diff --git a/sql/test/BugTracker-2026/Tests/7769-assertion-failure.test 
b/sql/test/BugTracker-2026/Tests/7769-assertion-failure.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2026/Tests/7769-assertion-failure.test
@@ -0,0 +1,11 @@
+statement ok
+CREATE TABLE v0 ( v1 INT )
+
+-- sql/backends/monet5/sql_rank.c:989: SQLnth_value: Assertion `v->bat' failed.
+query II nosort
+SELECT v1 , NTH_VALUE ( v1 , 82 ) OVER ( RANGE BETWEEN CURRENT ROW AND 
UNBOUNDED FOLLOWING ) AS v5 FROM v0
+----
+
+statement ok
+DROP TABLE v0
+
diff --git a/sql/test/BugTracker-2026/Tests/7770-assertion-failure.test 
b/sql/test/BugTracker-2026/Tests/7770-assertion-failure.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2026/Tests/7770-assertion-failure.test
@@ -0,0 +1,22 @@
+statement ok
+CREATE TABLE v0 ( v1 INT PRIMARY KEY , v2 FLOAT )
+
+statement error 42000!COUNT: aggregate function 'count' not allowed in GROUP 
BY clause
+SELECT v2 GROUP BY COUNT ( v1 NOT BETWEEN 'x' AND v1 ) >= ( 'x' = 'x' AND v1 
BETWEEN -1 AND NULL = v2 >= v2 )
+
+-- sql/server/sql_query.c:163: query_outer_aggregated: Assertion `sq->grouped' 
failed.
+statement error 42000!COUNT: aggregate function 'count' not allowed in GROUP 
BY clause
+SELECT 50 FROM v0 GROUP BY v1 , v2 HAVING ( 67 = 64 AND ( ( SELECT v2 GROUP BY 
COUNT ( v1 NOT BETWEEN 'x' AND v1 ) >= ( 'x' = 'x' AND v1 BETWEEN -1 AND NULL = 
v2 >= v2 ) ) ) = 19 )
+
+-- sql/server/sql_query.c:163: query_outer_aggregated: Assertion `sq->grouped' 
failed.
+statement error 42000!COUNT: aggregate function 'count' not allowed in GROUP 
BY clause
+INSERT INTO v0 VALUES ( 7 , 59 ) , ( 23 , 127 ) , ( 0 , 15585972.000000 ) , ( 
70 , 97506846.000000 )
+ , ( 76 , ( SELECT 50 FROM v0 GROUP BY v1 , v2 HAVING ( 67 = 64 AND ( ( SELECT 
v2 GROUP BY COUNT ( v1 NOT BETWEEN 'x' AND v1 ) >= ( 'x' = 'x' AND v1 BETWEEN 
-1 AND NULL = v2 >= v2 ) ) ) = 19 ) ) )
+
+query IR nosort
+SELECT v1, v2 FROM v0
+----
+
+statement ok
+DROP TABLE v0
+
diff --git a/sql/test/BugTracker-2026/Tests/7771-assertion-failure.test 
b/sql/test/BugTracker-2026/Tests/7771-assertion-failure.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2026/Tests/7771-assertion-failure.test
@@ -0,0 +1,29 @@
+statement ok
+CREATE TABLE v0 ( v1 FLOAT )
+
+statement ok
+INSERT INTO v0 VALUES ( 83386963.000000 )
+
+query I nosort
+SELECT 0 FROM v0 WHERE ( v1 = -128 AND v1 = -1 ) OR ( v1 * ( SELECT -128 FROM 
( SELECT v1 AS v2 , ( 0 < v1 AND v1 < 'x' ) FROM v0 BOOLEAN GROUP BY v1 * 12 , 
v1 ) ) + v1 )
+----
+0
+
+query R nosort
+SELECT v1 FROM v0
+----
+83386963.000
+
+-- sql/backends/monet5/sql_statement.c:4610: stmt_alias_: Assertion `label' 
failed.
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to