Changeset: 0bec5a69db2c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/0bec5a69db2c
Branch: ustr
Log Message:
Merge with default branch.
diffs (40 lines):
diff --git a/sql/test/BugTracker-2026/Tests/7862-rel_has_freevar-crash.test
b/sql/test/BugTracker-2026/Tests/7862-rel_has_freevar-crash.test
--- a/sql/test/BugTracker-2026/Tests/7862-rel_has_freevar-crash.test
+++ b/sql/test/BugTracker-2026/Tests/7862-rel_has_freevar-crash.test
@@ -14,13 +14,32 @@ NULL
0
-- Segmentation fault. in rel_has_freevar (sql=0x7f0a081844e0, rel=0x0) at
sql/server/rel_unnest.c:170 if (is_basetable(rel->op)) { -- cause of seg
fault: rel=0x0
+-- Adapted version of the query to reduce execution time of test from 6.3 secs
to 0.7 secs.
+-- This is done by removing the 'SELECT 10 AS x UNION ' part from the first
FROM clause.
+-- When using EXPLAIN SHOW DETAILS it shows the original query creates a
crossproduct on the virtual table 10 times, so internally computes 7^10 =
282475249 rows (282 million).
+-- By reducing the initial virtual table with one row it now computes 6^10 =
60466176 rows (60 million), which apparently executes much faster, without
changing the complex logic.
query II rowsort
+-- EXPLAIN SHOW DETAILS
SELECT x , CASE WHEN x > 12 THEN 1 ELSE 0 END AS x
- FROM ( SELECT 10 AS x UNION SELECT 11 AS x GROUP BY CUBE ( x , x ) UNION
SELECT 12 AS x UNION SELECT 13 AS x )
- WHERE x IN ( WITH RECURSIVE x ( row_number ) AS ( SELECT 1 UNION SELECT x + 1
FROM x WHERE x < 20 ) SELECT x AS x FROM x WHERE x NOT IN ( 8 , 12 , CAST(
0.000000 AS FLOAT ) , 24 , 32 ) OR x = 512 GROUP BY x HAVING NOT x < ANY ( CASE
WHEN NULLIF ( ( WITH RECURSIVE x ( x ) AS ( SELECT 1 UNION SELECT x + 1 FROM (
WITH RECURSIVE x ( x ) AS ( SELECT CASE WHEN x < - 13 * - ( 0 ) + 39 * - (
SELECT 1 ) + 0.100000 + 0.100000 THEN CAST( -0 AS DOUBLE ) END UNION SELECT
ROUND ( 70 , 2 ) FROM x ) SELECT * FROM ( SELECT 9 AS x FROM x ) WHERE x NOT IN
( 8 ) ) WHERE x < 8 ) SELECT - COUNT ( * ) FROM x AS x WHERE NOT ( - x )
BETWEEN - x AND NULL ) , NULL ) IS NULL THEN 1 ELSE 0 END AND 6 IN ( SELECT MAX
( x ) , x < -1234567 , MAX ( x ) , MIN ( x ) , MAX ( x ) , MIN ( x ) ORDER BY 1
, 2 LIMIT 0 OFFSET 0 ) ) )
+-- FROM ( SELECT 10 AS x UNION SELECT 11 AS x GROUP BY CUBE ( x , x ) UNION
SELECT 12 AS x UNION SELECT 13 AS x ) -- original FROM clause
+ FROM ( SELECT 11 AS x GROUP BY CUBE ( x , x ) UNION SELECT 12 AS x UNION
SELECT 13 AS x ) -- changed FROM clause to reduce execution time
+ WHERE x IN (
+ WITH RECURSIVE x ( row_number ) AS ( SELECT 1 UNION SELECT x + 1 FROM x
WHERE x < 20 )
+ SELECT x AS x FROM x
+ WHERE x NOT IN ( 8 , 12 , CAST( 0.000000 AS FLOAT ) , 24 , 32 )
+ OR x = 512
+ GROUP BY x
+ HAVING NOT x < ANY ( CASE WHEN NULLIF ( (
+ WITH RECURSIVE x ( x ) AS ( SELECT 1 UNION SELECT x
+ 1 FROM (
+ WITH RECURSIVE x ( x )
AS ( SELECT CASE WHEN x < - 13 * - ( 0 ) + 39 * - ( SELECT 1 ) + 0.100000 +
0.100000 THEN CAST( -0 AS DOUBLE ) END
+
UNION SELECT ROUND ( 70 , 2 ) FROM x )
+
SELECT * FROM ( SELECT 9 AS x FROM x ) WHERE x NOT IN ( 8 ) )
+ WHERE x < 8 )
+ SELECT - COUNT ( * ) FROM x AS x
+ WHERE NOT ( - x ) BETWEEN - x AND NULL ) , NULL )
IS NULL
+ THEN 1 ELSE 0 END
+ AND 6 IN ( SELECT MAX ( x ) , x < -1234567 , MAX (
x ) , MIN ( x ) , MAX ( x ) , MIN ( x ) ORDER BY 1 , 2 LIMIT 0 OFFSET 0 ) ) )
----
-10
-0
11
0
12
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]