Changeset: 91c07d859ab3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/91c07d859ab3
Modified Files:
sql/backends/monet5/sql_rank.c
sql/server/rel_unnest.c
sql/test/BugTracker-2025/Tests/All
sql/test/BugTracker-2026/Tests/All
Branch: default
Log Message:
Merge with Dec2025 branch.
diffs (truncated from 743 to 300 lines):
diff --git a/sql/backends/monet5/sql_rank.c b/sql/backends/monet5/sql_rank.c
--- a/sql/backends/monet5/sql_rank.c
+++ b/sql/backends/monet5/sql_rank.c
@@ -1785,7 +1785,7 @@ SQLvar_pop(Client cntxt, MalBlkPtr mb, M
}
\
populate_segment_tree(lng, ncount, INIT_AGGREGATE_COUNT,
COMPUTE_LEVEL0_COUNT_FIXED, COMPUTE_LEVELN_COUNT, TPE, NOTHING, NOTHING); \
for (; k < i; k++)
\
- compute_on_segment_tree(lng, start[k] - j, end[k] - j,
INIT_AGGREGATE_COUNT, COMPUTE_LEVELN_COUNT, FINALIZE_AGGREGATE_COUNT, TPE,
NOTHING, NOTHING); \
+ compute_on_segment_tree(lng, start[k] > j ? start[k] -
j : 0, end[k] > j ? end[k] - j : 0, INIT_AGGREGATE_COUNT, COMPUTE_LEVELN_COUNT,
FINALIZE_AGGREGATE_COUNT, TPE, NOTHING, NOTHING); \
j = k;
\
} while (0)
diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -163,9 +163,11 @@ rel_has_freevar(mvc *sql, sql_rel *rel)
(void) sql_error(sql, 10, SQLSTATE(42000) "Query too complex:
running out of stack space");
return 0;
}
-
- if (rel && is_independent(rel->used))
+ if (!rel)
return 0;
+ if (is_independent(rel->used))
+ return 0;
+
int res = 0;
if (is_basetable(rel->op)) {
res = 0;
@@ -177,7 +179,7 @@ rel_has_freevar(mvc *sql, sql_rel *rel)
res = exps_have_freevar(sql, rel->exps) || (rel->l &&
rel_has_freevar(sql, rel->l));
} else if (is_join(rel->op) || is_set(rel->op) || is_semi(rel->op) ||
is_modify(rel->op)) {
res = exps_have_freevar(sql, rel->exps) ||
- rel_has_freevar(sql, rel->l) || rel_has_freevar(sql,
rel->r);
+ (rel->l && rel_has_freevar(sql, rel->l)) || (rel->r &&
rel_has_freevar(sql, rel->r));
} else if (is_munion(rel->op)) {
int v = exps_have_freevar(sql, rel->exps);
list *l = rel->l;
diff --git a/sql/test/BugTracker-2025/Tests/7737-join-order.test
b/sql/test/BugTracker-2025/Tests/7737-join-order.test
--- a/sql/test/BugTracker-2025/Tests/7737-join-order.test
+++ b/sql/test/BugTracker-2025/Tests/7737-join-order.test
@@ -5,7 +5,7 @@ statement ok
create procedure test_populate()
begin
declare rowmax bigint;
- set rowmax = 100000;
+ set rowmax = 10000;
declare rowindex bigint;
set rowindex = 0;
while rowindex < rowmax do
@@ -37,3 +37,30 @@ project (
| ) [ ] [ "sys"."count"() as "%2"."%2" ]
) [ "%2"."%2" ]
+query I
+select count(*) from test_base where item is null or not(item in
('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'))
+----
+100000
+
+-- suggested workaround to put the not next to the 'in'. ie from not(x in
(list)) -> x not in (list)
+query I
+select count(distinct item) from test_base where item is null or not(item in
('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'))
+----
+100000
+
+query T python .plan.filter
+explain select count(*) from test_base where item is null or item not in
('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z')
+----
+project (
+| group by (
+| | select (
+| | | table("sys"."test_base") [ "test_base"."item" ]
+| | ) [ ("test_base"."item") notin (varchar(10) "a", varchar(10) "b",
varchar(10) "c", varchar(10) "d", varchar(10) "e", varchar(10) "f", varchar(10)
"g", varchar(10) "h", varchar(10) "i", varchar(10) "j", varchar(10) "k",
varchar(10) "l", varchar(10) "m", varchar(10) "n", varchar(10) "o", varchar(10)
"p", varchar(10) "q", varchar(10) "r", varchar(10) "s", varchar(10) "t",
varchar(10) "u", varchar(10) "v", varchar(10) "w", varchar(10) "x", varchar(10)
"y", varchar(10) "z") ]
+| ) [ ] [ "sys"."count"() as "%2"."%2" ]
+) [ "%2"."%2" ]
+
+query I
+select count(*) from test_base where item is null or item not in
('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z')
+----
+100000
+
diff --git a/sql/test/BugTracker-2025/Tests/7738-crash.test
b/sql/test/BugTracker-2025/Tests/7738-crash.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2025/Tests/7738-crash.test
@@ -0,0 +1,99 @@
+statement ok
+CREATE TABLE v0 ( v1 STRING )
+
+statement ok
+INSERT INTO v0 VALUES ( 'x' )
+
+statement ok
+INSERT INTO v0 VALUES ( 'x' )
+
+statement ok
+INSERT INTO v0 VALUES ( 'x' )
+
+statement ok
+INSERT INTO v0 VALUES ( 'x' )
+
+statement ok
+INSERT INTO v0 VALUES ( 'x' )
+
+query T rowsort
+SELECT insert ( v1 , 54 , 40 , 'x' ) FROM v0 WHERE v1 = 'x'
+----
+xx
+xx
+xx
+xx
+xx
+
+query T rowsort
+ SELECT * FROM v0 WHERE v1 IN ( SELECT v1 )
+----
+x
+x
+x
+x
+x
+
+query T rowsort
+ SELECT insert ( v1 , -128 , 97 , 'x' ) FROM v0 WHERE v1 = 'x'
+----
+x
+x
+x
+x
+x
+
+query T rowsort
+ SELECT insert ( v1 , -128 , 18 , 'x' ) FROM v0 WHERE v1 = 'x'
+----
+x
+x
+x
+x
+x
+
+statement error 42000!The number of characters for insert function must be non
negative
+ SELECT insert ( v1 , 255 , -128 , 'x' ) FROM v0 WHERE v1 = 'x'
+
+statement error 42000!SELECT: no such window function 'bit_xor'(tinyint,
tinyint)
+ SELECT v1 , v1 , BIT_XOR ( 8 , 0 ) OVER ( ORDER BY v1 ) AS v2 FROM v0
+
+query T rowsort
+ SELECT insert ( 'x' , -32768 , 8 , 'x' ) AS v3
+----
+x
+
+statement error 42000!syntax error, unexpected SELECT in: " select insert ( v1
, -2147483648 , 83 , 'x' ) as v4 from v0 where v1 = ( select v1 from v0 order
by variance ( select"
+ SELECT insert ( v1 , -2147483648 , 83 , 'x' ) AS v4 FROM v0 WHERE v1 = (
SELECT v1 FROM v0 ORDER BY VARIANCE ( SELECT v1 ) DESC LIMIT 25 )
+
+query T rowsort
+ SELECT insert ( v1 , 127 , 22 , 'x' ) FROM ( SELECT v1 FROM v0 WHERE v1 LIKE
'x' ) AS v5
+----
+xx
+xx
+xx
+xx
+xx
+
+statement ok
+ INSERT INTO v0 SELECT insert ( v1 , 7 , 7 , 'x' ) FROM v0
+
+statement error 42000!SELECT: identifier 'v1' unknown
+ SELECT v1 FROM ( SELECT insert ( 'x' , 0 , 16 , 'x' ) AS v7 ) AS v6
+
+query T rowsort
+ SELECT insert ( v1 , 76 , 11 , 'x' ) FROM v0 WHERE v1 LIKE 'x'
+----
+xx
+xx
+xx
+xx
+xx
+
+statement error 42000!SELECT: no such operator 'std'(varchar)
+ SELECT insert ( v1 , 35 , 24 , 'x' ) FROM v0 WHERE STD ( v1 ) > 75
+
+-- cleanup
+statement ok
+DROP TABLE v0
+
diff --git a/sql/test/BugTracker-2025/Tests/7740-crash.test
b/sql/test/BugTracker-2025/Tests/7740-crash.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2025/Tests/7740-crash.test
@@ -0,0 +1,34 @@
+statement ok
+CREATE TABLE v0 ( v1 INT PRIMARY KEY , v2 FLOAT )
+
+statement ok
+ INSERT INTO v0 VALUES ( -1 , -128 ) , ( 22 , 72 ) , ( 62 , 98859564.000000 )
, ( 0 , 26139268.000000 ) , ( 76 , 77221851.000000 )
+
+statement ok
+ UPDATE v0 SET v1 = v2 - -2147483648 WHERE v2 LIKE 'x' AND v1 IN ( SELECT v1
FROM ( SELECT v2 FROM v0 WHERE v2 < 0 UNION SELECT v1 FROM v0 WHERE v1 IS NOT
NULL ) WHERE v1 LIKE 'x' )
+
+statement error 42000!SELECT: identifier 'between' unknown
+ SELECT v2 , PERCENT_RANK ( v1 ) AS v3 FROM v0 WHERE BETWEEN -128 AND
99472945.000000
+
+statement error 42000!SELECT: cannot use non GROUP BY column 'v0.v2' in query
results without an aggregate function
+ SELECT v2 , VAR_POP ( v2 ) AS v4 FROM v0 WHERE v2 IN ( SELECT v2 FROM v0
WHERE v2 > 50 )
+
+statement error 42000!SELECT: no such operator 'bit_and'(int)
+ SELECT NTH_VALUE ( ( SELECT BIT_AND ( v1 ) FROM v0 ) ) AS v5
+
+statement error 42000!syntax error, unexpected COMPARISON in: " select v0 . v1
, v0 . v1 , sum ( v0 . v1 + v0 . v2 ) from v0 a join v0 b on v0 . v2 < >"
+ SELECT v0 . v1 , v0 . v1 , SUM ( v0 . v1 + v0 . v2 ) FROM v0 a JOIN v0 b ON
v0 . v2 < > v0 . v1
+
+statement error 42000!SELECT: no such operator 'lead'(int)
+ SELECT v1 , LEAD ( v1 ) FROM v0 WHERE v2 IS NOT NULL
+
+statement error 42000!SELECT: no such operator 'bit_xor'(int)
+ CREATE TABLE v7 AS SELECT v2 , BIT_XOR ( v1 ) AS v6 FROM v0
+
+statement error 42S02!SELECT: no such table 'v7'
+ SELECT CUME_DIST ( v1 ) OVER ( PARTITION BY v1 ORDER BY v2 , v1 DESC NULLS
FIRST ) FROM v7 WINDOW v8 AS ( )
+
+-- cleanup
+statement ok
+DROP TABLE v0
+
diff --git a/sql/test/BugTracker-2025/Tests/7742-crash.test
b/sql/test/BugTracker-2025/Tests/7742-crash.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2025/Tests/7742-crash.test
@@ -0,0 +1,84 @@
+statement ok
+CREATE TABLE v0 ( v1 BOOLEAN , v2 DOUBLE )
+
+statement error 42000!types boolean(1,0) and double(53,0) are not equal for
column 'v1'
+ WITH RECURSIVE v0 AS ( SELECT v2 , ( v1 ) FROM v0 WHERE v2 > 72 UNION ALL
SELECT v1 , ( v2 ) FROM v0 WHERE v1 > 19 ) INSERT INTO v0 VALUES ( 16 ,
18981070.000000 ) , ( -1 , 48981446.000000 ) , ( 49 , 56166811.000000 ) , ( -1
, NULL ) , ( 80 , 81429797.000000 )
+
+query I rowsort
+ SELECT ( SELECT 11 FROM v0 t1 , v0 t2 JOIN v0 USING ( v1 , v2 ) ) = 'x' FROM
v0
+----
+
+statement ok
+ CREATE TABLE v3 ( v4 INT , v5 FLOAT )
+
+statement ok
+ INSERT INTO v0 VALUES ( 8 , 78482300.000000 ) , ( -32768 , 97463370.000000 )
, ( -128 , 98961168.000000 ) , ( -1 , NULL ) , ( -1 , 96006176.000000 )
+
+query I rowsort
+ SELECT COUNT ( DISTINCT v1 ) FROM v0 WHERE v2 = 58
+----
+0
+
+statement error 42000!SELECT: no such operator 'percent_rank'(double)
+ SELECT PERCENT_RANK ( DISTINCT v2 ) FROM v0 WHERE v2 IN ( -32768 , -128 )
+
+statement ok
+ CREATE TABLE v6 ( v7 DOUBLE )
+
+statement ok
+ INSERT INTO v6 VALUES ( NULL ) , ( 59162491.000000 ) , ( 25001794.000000 ) ,
( 91582435.000000 ) , ( 86978172.000000 )
+
+query R rowsort
+ SELECT STDDEV_POP ( DISTINCT v1 ) FROM v0
+----
+0.000
+
+statement ok
+ CREATE TABLE v8 ( v9 INT , v10 DOUBLE )
+
+statement ok
+ INSERT INTO v3 VALUES ( -1 , 60553450.000000 ) , ( 62 , 38903497.000000 ) , (
-1 , 97088301.000000 ) , ( 3 , 45831651.000000 )
+
+statement error 42000!SELECT: no such operator 'bit_or'(int)
+ SELECT ( SELECT BIT_OR ( DISTINCT v4 ) FROM v3 ) + -128 AS v11
+
+statement error 42000!SELECT: identifier 'v2' unknown
+ SELECT COUNT ( DISTINCT v2 ) FROM ( SELECT v4 FROM v3 WHERE v5 > 28 ) AS v12
+
+statement ok
+ CREATE TABLE v13 ( v14 INT , v15 FLOAT )
+
+statement error 42000!syntax error, unexpected sqlINTEGER, expecting CHECK or
FOREIGN or PRIMARY or UNIQUE in: " create table v16 ( int"
+ CREATE TABLE v16 ( INT v17 FLOAT )
+
+statement error 21S01!INSERT INTO: number of values doesn't match number of
columns of table 'v6'
+ INSERT INTO v6 VALUES ( 0 , 94384304.000000 ) , ( -2147483648 ,
85804154.000000 ) , ( 27 , 82892455.000000 )
+
+statement ok
+ INSERT INTO v8 VALUES ( -1 , 30443821.000000 ) , ( -128 , NULL )
+
+statement error 42000!syntax error, unexpected WHERE in: " select std (
distinct v8 . v17 ) from v3 t1 join v16 t2 where"
+ SELECT STD ( DISTINCT v8 . v17 ) FROM v3 t1 JOIN v16 t2 WHERE v0 . v10 IS NOT
NULL
+
+statement error 42000!SELECT: no such operator 'row_number'(bigint)
+ SELECT ROW_NUMBER ( DISTINCT v14 + 76 ) FROM v13
+
+statement error 42000!syntax error, unexpected SELECT in: " select dense_rank
( select"
+ SELECT DENSE_RANK ( SELECT 24 + v1 % 16 ) FROM ( SELECT VAR_SAMP ( -32768 ,
40 ) AS v19 ) AS v18
+
+-- cleanup
+statement ok
+DROP TABLE v13
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]