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]

Reply via email to