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]