Changeset: 3c16959d1103 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/3c16959d1103
Modified Files:
sql/backends/monet5/sql_gencode.c
sql/test/BugTracker-2026/Tests/All
Branch: default
Log Message:
Merge with Dec2025 branch.
diffs (truncated from 760 to 300 lines):
diff --git a/monetdb5/mal/mal_dataflow.c b/monetdb5/mal/mal_dataflow.c
--- a/monetdb5/mal/mal_dataflow.c
+++ b/monetdb5/mal/mal_dataflow.c
@@ -265,10 +265,10 @@ DFLOWworker(void *T)
if (t->flag == WAITING) {
/* wait until we are allowed to start working */
MT_sema_down(&t->s);
- t->flag = RUNNING;
if (ATOMIC_GET(&exiting)) {
break;
}
+ t->flag = RUNNING;
}
assert(t->flag == RUNNING);
cntxt = ATOMIC_PTR_GET(&t->cntxt);
diff --git a/sql/backends/monet5/sql_gencode.c
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -981,7 +981,7 @@ backend_dumpstmt_body(backend *be, MalBl
InstrPtr q, querylog = NULL;
int old_mv = be->mvc_var;
MalBlkPtr old_mb = be->mb;
- char *cq_query = NULL, *buf = NULL;
+ char *buf = NULL;
assert(mb->ma);
/* Always keep the SQL query around for monitoring */
@@ -997,18 +997,20 @@ backend_dumpstmt_body(backend *be, MalBl
setVarType(mb, getArg(q, 0), TYPE_void);
if (r->flag == ddl_psm && r->exps
&& exps_have_func(r->exps) && r->exps->cnt == 1) {
- sql_func *f = r->exps->h->data;
- cq *cq = qc_find(m->qc, f->base.id);
- cq_query = cq ? cq->f->query : NULL;
- if (cq_query) {
- size_t buf_sz = 2 + strlen(query) +
strlen(cq_query);
+ sql_func *f =
((sql_subfunc*)((sql_exp*)r->exps->h->data)->f)->func;
+ if (f->query && f->type == F_PROC && f->imp && f->imp
== f->base.name) {
+ size_t buf_sz = 2 + strlen(query) +
strlen(f->query);
buf = ma_alloc(mb->ma, buf_sz * sizeof(char));
if (buf == NULL) {
sql_error(m, 10, SQLSTATE(HY013)
MAL_MALLOC_FAIL);
return -1;
}
- snprintf(buf, buf_sz, "%.*s %s",
(int)strlen(query) - 1, query, cq_query);
+ size_t qend = strlen(query) - 1;
+ while (query[qend] == ';' || isspace((uint8_t)
query[qend]))
+ qend--;
+ snprintf(buf, buf_sz, "%.*s %s", (int) qend+1,
query, f->query);
query = buf;
+ be->client->query = ma_strdup(m->sa, buf);
}
}
q = pushStr(mb, q, query);
diff --git a/sql/test/BugTracker-2024/Tests/7573-strcpy_len-crash.test
b/sql/test/BugTracker-2024/Tests/7573-strcpy_len-crash.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2024/Tests/7573-strcpy_len-crash.test
@@ -0,0 +1,23 @@
+statement ok
+DROP TABLE IF EXISTS t0 CASCADE
+
+statement ok
+CREATE TABLE t0(c1 INTEGER)
+
+statement ok
+INSERT INTO t0(c1) VALUES (-296623006)
+
+statement ok
+INSERT INTO t0(c1) VALUES (NULL)
+
+statement ok
+INSERT INTO t0(c1) VALUES (-1566205920)
+
+query I rowsort
+SELECT * FROM t0 WHERE (NOT (((- 9223372036854775807))>((CASE t0.c1 WHEN t0.c1
THEN -1 END )))) UNION ALL SELECT * FROM t0 WHERE (NOT (NOT (((-
9223372036854775807))>((CASE t0.c1 WHEN t0.c1 THEN -1 END )))))
+----
+-1566205920
+-296623006
+
+statement ok
+DROP TABLE t0
diff --git a/sql/test/BugTracker-2024/Tests/All
b/sql/test/BugTracker-2024/Tests/All
--- a/sql/test/BugTracker-2024/Tests/All
+++ b/sql/test/BugTracker-2024/Tests/All
@@ -88,6 +88,7 @@ function_return_issue
7563-is-distinct-from
7572-max-length-changes
7570-timestamp-str
+7573-strcpy_len-crash
7574-startswith-bug
7580-date-diff
7582-ddl-exists
diff --git a/sql/test/BugTracker-2026/Tests/7894-subquery-where-not-bug.test
b/sql/test/BugTracker-2026/Tests/7894-subquery-where-not-bug.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2026/Tests/7894-subquery-where-not-bug.test
@@ -0,0 +1,172 @@
+statement ok
+CREATE SCHEMA test7894
+
+statement ok
+SET SCHEMA test7894
+
+statement ok
+CREATE TABLE users (
+ id INT,
+ username VARCHAR(100),
+ email VARCHAR(255),
+ age INT,
+ status VARCHAR(20),
+ created_at TIMESTAMP,
+ score DOUBLE
+)
+
+statement ok
+CREATE TABLE comments (
+ id INT,
+ post_id INT,
+ user_id INT,
+ content VARCHAR(1000),
+ is_spam INT,
+ created_at TIMESTAMP
+)
+
+statement ok
+CREATE TABLE orders (
+ id INT,
+ user_id INT,
+ amount DOUBLE,
+ status VARCHAR(20),
+ created_at TIMESTAMP
+)
+
+statement ok
+INSERT INTO users VALUES
+(1, 'alice', '[email protected]', 20, 'active', '2022-01-01 10:00:00', 88.5),
+(2, 'bob', '[email protected]', 30, 'active', '2022-01-02 11:00:00', 92.3),
+(3, 'carol', NULL, NULL, 'banned','2022-01-03 12:00:00', NULL),
+(4, 'dave', '[email protected]', 45, 'active', '2022-01-04 13:00:00', 65.2),
+(5, NULL, '[email protected]', 18, 'inactive','2022-01-05 14:00:00', 70.0)
+
+statement ok
+INSERT INTO comments VALUES
+(1, 1, 2, 'Nice post', 0, '2022-01-20 10:00:00'),
+(2, 1, 3, 'Spam here', 1, '2022-01-21 11:00:00'),
+(3, 2, 1, 'Thanks', 0, '2022-01-22 12:00:00'),
+(4, 4, 5, NULL, 0, '2022-01-23 13:00:00')
+
+statement ok
+INSERT INTO orders VALUES
+(1, 1, 100.00, 'paid', '2022-02-01 09:00:00'),
+(2, 1, 200.50, 'shipped', '2022-02-02 10:00:00'),
+(3, 2, NULL, 'failed', '2022-02-03 11:00:00'),
+(4, 3, 50.00, 'paid', '2022-02-04 12:00:00'),
+(5, 5, 999.99, 'paid', '2022-02-05 13:00:00')
+
+query I nosort
+select count(*)
+from
+ (select ref_0.user_id as c3
+ from
+ comments as ref_0
+ where lpad('o', ref_0.id) <> 'kye') as subq_0
+ right join users as ref_2
+ on (ref_2.id < subq_0.c3)
+----
+8
+
+query I nosort
+select count(*)
+from
+ (select ref_0.user_id as c3
+ from
+ comments as ref_0
+ where lpad('o', ref_0.id) <> 'kye') as subq_0
+ right join users as ref_2
+ on (ref_2.id < subq_0.c3)
+where ((false AND case when ref_2.score is NULL then case when 84.68 !=
sys.ms_round(
+ (select stddev_pop(id) from orders),
+ ref_2.id,
+ 0) then true else false end
+ else false end
+ ))
+----
+0
+
+query I nosort
+select count(*)
+from
+ (select ref_0.user_id as c3
+ from
+ comments as ref_0
+ where lpad('o', ref_0.id) <> 'kye') as subq_0
+ right join users as ref_2
+ on (ref_2.id < subq_0.c3)
+where (not (false AND case when ref_2.score is NULL then case when 84.68 !=
sys.ms_round(
+ (select stddev_pop(id) from orders),
+ ref_2.id,
+ 0) then true else false end
+ else false end
+ ))
+----
+8
+
+query I nosort
+select (
+select count(*)
+from
+ (select ref_0.user_id as c3
+ from
+ comments as ref_0
+ where lpad('o', ref_0.id) <> 'kye') as subq_0
+ right join users as ref_2
+ on (ref_2.id < subq_0.c3)
+where (false AND case when ref_2.score is NULL then case when 84.68 !=
sys.ms_round(
+ (select stddev_pop(id) from orders),
+ ref_2.id,
+ 0) then true else false end
+ else false end
+ )
+) + (
+select count(*)
+from
+ (select ref_0.user_id as c3
+ from
+ comments as ref_0
+ where lpad('o', ref_0.id) <> 'kye') as subq_0
+ right join users as ref_2
+ on (ref_2.id < subq_0.c3)
+where (not (false AND case when ref_2.score is NULL then case when 84.68 !=
sys.ms_round(
+ (select stddev_pop(id) from orders),
+ ref_2.id,
+ 0) then true else false end
+ else false end
+ ))
+) + (
+select count(*)
+from
+ (select ref_0.user_id as c3
+ from
+ comments as ref_0
+ where lpad('o', ref_0.id) <> 'kye') as subq_0
+ right join users as ref_2
+ on (ref_2.id < subq_0.c3)
+where ((false AND case when ref_2.score is NULL then case when 84.68 !=
sys.ms_round(
+ (select stddev_pop(id) from orders),
+ ref_2.id,
+ 0) then true else false end
+ else false end
+ ) is null)
+)
+----
+8
+
+statement ok
+DROP TABLE orders
+
+statement ok
+DROP TABLE comments
+
+statement ok
+DROP TABLE users
+
+statement ok
+SET SCHEMA sys
+
+statement ok
+DROP SCHEMA test7894
+
diff --git a/sql/test/BugTracker-2026/Tests/7895-subquery-where-not-bug.test
b/sql/test/BugTracker-2026/Tests/7895-subquery-where-not-bug.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2026/Tests/7895-subquery-where-not-bug.test
@@ -0,0 +1,63 @@
+statement ok
+CREATE TABLE orders (
+ id INT,
+ user_id INT,
+ amount DOUBLE,
+ status VARCHAR(20),
+ created_at TIMESTAMP
+)
+
+statement ok
+INSERT INTO orders VALUES
+(1, 1, 100.00, 'paid', '2022-02-01 09:00:00'),
+(2, 1, 200.50, 'shipped', '2022-02-02 10:00:00'),
+(3, 2, NULL, 'failed', '2022-02-03 11:00:00'),
+(4, 3, 50.00, 'paid', '2022-02-04 12:00:00'),
+(5, 5, 999.99, 'paid', '2022-02-05 13:00:00')
+
+query I nosort
+select count(*)
+from
+ orders as ref_0
+----
+5
+
+query I nosort
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]