Details
-
Bug
-
Status: Closed (View Workflow)
-
Critical
-
Resolution: Fixed
-
10.2(EOL), 10.3(EOL)
-
None
Description
Based on the article from https://elephantdolphin.blogspot.com/2018/11/common-table-expressions-shocking.html
WITH RECURSIVE x(i) AS ( |
SELECT CAST(0 AS DECIMAL(13, 10)) |
UNION ALL |
SELECT i + 1 |
FROM x |
WHERE i < 101 |
),
|
Z(Ix, Iy, Cx, Cy, X, Y, I) AS ( |
SELECT Ix, Iy, X, Y, X, Y, 0 |
FROM (SELECT CAST(-2.2 + 0.031 * i AS DECIMAL(13, 10)) AS X, |
i AS Ix FROM x) AS xgen |
CROSS JOIN ( |
SELECT CAST(-1.5 + 0.031 * i AS DECIMAL(13, 10)) AS Y, |
i AS iY FROM x |
) AS ygen |
UNION ALL |
SELECT Ix, Iy, Cx, Cy, |
CAST(X * X - Y * Y + Cx AS DECIMAL(13, 10)) AS X, |
CAST(Y * X * 2 + Cy AS DECIMAL(13, 10)), I + 1 |
FROM Z |
WHERE X * X + Y * Y < 16.0 |
AND I < 27 |
),
|
Zt (Ix, Iy, I) AS ( |
SELECT Ix, Iy, MAX(I) AS I |
FROM Z |
GROUP BY Iy, Ix |
ORDER BY Iy, Ix |
)
|
SELECT GROUP_CONCAT( |
SUBSTRING( |
' .,,,-----++++%%%%@@@@#### ', |
GREATEST(I, 1),
|
1
|
) ORDER BY Ix SEPARATOR '' |
) AS 'Mandelbrot Set' |
FROM Zt |
GROUP BY Iy |
ORDER BY Iy; |
The problem is with UNION vs UNION ALL:
MariaDB [test]> WITH RECURSIVE
|
-> x AS (SELECT 0 as k UNION SELECT k + 1 FROM x WHERE k < 1),
|
-> z AS
|
-> ( SELECT k1 AS cx, k2 AS cy, k1, k2
|
-> FROM (SELECT k as k1 FROM x) x1 JOIN (SELECT k as k2 FROM x) y1
|
-> UNION
|
-> SELECT 1,1,1,1 FROM z)
|
-> SELECT * FROM z;
|
+------+------+------+------+
|
| cx | cy | k1 | k2 |
|
+------+------+------+------+
|
| 0 | 0 | 0 | 0 |
|
| 1 | 0 | 1 | 0 |
|
| 0 | 1 | 0 | 1 |
|
| 1 | 1 | 1 | 1 |
|
+------+------+------+------+
|
4 rows in set (0.000 sec)
|
|
################################################
|
|
MariaDB [test]> WITH RECURSIVE
|
-> x AS (SELECT 0 as k UNION ALL SELECT k + 1 FROM x WHERE k < 1),
|
-> z AS
|
-> ( SELECT k1 AS cx, k2 AS cy, k1, k2
|
-> FROM (SELECT k AS k1 FROM x) x1 JOIN (SELECT k AS k2 FROM x) y1
|
-> UNION
|
-> SELECT 1,1,1,1 FROM z)
|
-> SELECT * FROM z;
|
|
^CCtrl-C -- query killed. Continuing normally.
|
ERROR 1317 (70100): Query execution was interrupted
|
MariaDB [test]> WITH RECURSIVE x(i) AS (
|
-> SELECT CAST(0 AS DECIMAL(13, 10))
|
-> UNION
|
-> SELECT i + 1
|
-> FROM x
|
-> WHERE i < 101
|
-> ),
|
-> Z(Ix, Iy, Cx, Cy, X, Y, I) AS (
|
-> SELECT Ix, Iy, X, Y, X, Y, 0
|
-> FROM (SELECT CAST(-2.2 + 0.031 * i AS DECIMAL(13, 10)) AS X,
|
-> i AS Ix FROM x) AS xgen
|
-> CROSS JOIN (
|
-> SELECT CAST(-1.5 + 0.031 * i AS DECIMAL(13, 10)) AS Y,
|
-> i AS iY FROM x
|
-> ) AS ygen
|
-> UNION ALL
|
-> SELECT Ix, Iy, Cx, Cy,
|
-> CAST(X * X - Y * Y + Cx AS DECIMAL(13, 10)) AS X,
|
-> CAST(Y * X * 2 + Cy AS DECIMAL(13, 10)), I + 1
|
-> FROM Z
|
-> WHERE X * X + Y * Y < 16.0
|
-> AND I < 27
|
-> ),
|
-> Zt (Ix, Iy, I) AS (
|
-> SELECT Ix, Iy, MAX(I) AS I
|
-> FROM Z
|
-> GROUP BY Iy, Ix
|
-> ORDER BY Iy, Ix
|
-> )
|
-> SELECT GROUP_CONCAT(
|
-> SUBSTRING(
|
-> ' .,,,-----++++%%%%@@@@#### ',
|
-> GREATEST(I, 1),
|
-> 1
|
-> ) ORDER BY Ix SEPARATOR ''
|
-> ) AS 'Mandelbrot Set'
|
-> FROM Zt
|
-> GROUP BY Iy
|
-> ORDER BY Iy;
|
+--------------------------------------------------------------------------------------------------------+
|
| Mandelbrot Set |
|
+--------------------------------------------------------------------------------------------------------+
|
| .................................................................................... |
|
| ....................................................................................... |
|
| ......................................................................................... |
|
| ........................................................................................... |
|
| ....................................................,,,,,,,,,................................. |
|
| ................................................,,,,,,,,,,,,,,,,,,............................. |
|
| ..............................................,,,,,,,,,,,,,,,,,,,,,,,,.......................... |
|
| ............................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,........................ |
|
| ..........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,...................... |
|
| .........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.................... |
|
| ........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,................... |
|
| .......................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,................. |
|
| .......................................,,,,,,,,,,,,,,,,,,,,,,,,--,,,,,,,,,,,,,,,,,,,,................ |
|
| ......................................,,,,,,,,,,,,,,,,,,,,,,,,,,-+--,,,,,,,,,,,,,,,,,,,............... |
|
| ....................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----,,,,,,,,,,,,,,,,,,,.............. |
|
| ...................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,--- -----,,,,,,,,,,,,,,,,,............. |
|
| .................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---++--++,,,,,,,,,,,,,,,,,,............ |
|
| ................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----%++---,,,,,,,,,,,,,,,,,............ |
|
| ..............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----+%----,,,,,,,,,,,,,,,,,,........... |
|
| .............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----- %%+----,,,,,,,,,,,,,,,,,,.......... |
|
| ...........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---%-+% ----,,,,,,,,,,,,,,,,,,,......... |
|
| ..........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---+ +## %+%---,,,,,,,,,,,,,,,,,,......... |
|
| ........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----# # +---,,,,,,,,,,,,,,,,,,........ |
|
| .......................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-------% %-----,,,,,,,,,,,,,,,,,........ |
|
| .....................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------+ ------,,,,,,,,,,,,,,,,,....... |
|
| ....................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----------+@ +-----------,,,,,,,,,,,,....... |
|
| ..................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----@-------++ ++-----------,,,,,,,,,,,,...... |
|
| .................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--+@% ---+ +@%%@ %%+@+@%------+-,,,,,,,,,,,...... |
|
| ................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---- # ++% % @-----++--,,,,,,,,,,,..... |
|
| ..............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----+ % %%++ %+%@-,,,,,,,,,,,..... |
|
| .............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----+# #% ++-,,,,,,,,,,,,.... |
|
| ............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,------+ @---,,,,,,,,,,,,.... |
|
| ..........,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-------++% ---,,,,,,,,,,,,.... |
|
| .........,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--------+ + %+---,,,,,,,,,,,,,... |
|
| ........,,,,,,,,,,,,,,,,,,,,,--------------------@ +----,,,,,,,,,,,,... |
|
| .......,,,,,,,,,,,,,,,,,,,,,,- +-----------------+ ----,,,,,,,,,,,,... |
|
| .......,,,,,,,,,,,,,,,,,,,,,--++------+---------+% +++--,,,,,,,,,,,,.. |
|
| ......,,,,,,,,,,,,,,,,,,,,,,--%+-----++--------- #+-,,,,,,,,,,,,.. |
|
| .....,,,,,,,,,,,,,,,,,,,,,,----#%++--+@ -+-----+% --,,,,,,,,,,,,.. |
|
| .....,,,,,,,,,,,,,,,,,,,,,,-----+## ++@ + +----% +--,,,,,,,,,,,,,.. |
|
| ....,,,,,,,,,,,,,,,,,,,,,,------+@ @ @@++++# +--,,,,,,,,,,,,,.. |
|
| ....,,,,,,,,,,,,,,,,,,,,,-------% #++% -,,,,,,,,,,,,,.. |
|
| ...,,,,,,,,,,,,,,,,,,,,,------++%# %%@ %-,,,,,,,,,,,,,,. |
|
| ...,,,,,,,,,,,,,,,,,,,--------+ % +--,,,,,,,,,,,,,,. |
|
| ...,,,,,,,,,,,,,,,,,,-----+--++@ # --,,,,,,,,,,,,,,. |
|
| ..,,,,,,,,,,,,,,,,,-------%+++% @--,,,,,,,,,,,,,,,. |
|
| ..,,,,,,,,,,,-------------+ @#@ ---,,,,,,,,,,,,,,,. |
|
| ..,,,,,,,,,---@--------@-+% +---,,,,,,,,,,,,,,,. |
|
| ..,,,,,------- +-++++-+%%% +----,,,,,,,,,,,,,,,. |
|
| ..,,,,,,------%--------++% +----,,,,,,,,,,,,,,,. |
|
| ..,,,,,,,,,,--+----------++# ---,,,,,,,,,,,,,,,. |
|
| ..,,,,,,,,,,,,------------+@@@% +--,,,,,,,,,,,,,,,. |
|
| ..,,,,,,,,,,,,,,,,,------- +++% %--,,,,,,,,,,,,,,,. |
|
| ...,,,,,,,,,,,,,,,,,,---------+@ @ --,,,,,,,,,,,,,,. |
|
| ...,,,,,,,,,,,,,,,,,,,,------- # %@ +--,,,,,,,,,,,,,,. |
|
| ...,,,,,,,,,,,,,,,,,,,,,-------++@ %+ %-,,,,,,,,,,,,,,. |
|
| ....,,,,,,,,,,,,,,,,,,,,,------- %++% %-,,,,,,,,,,,,,.. |
|
| ....,,,,,,,,,,,,,,,,,,,,,,------+# %# #@ ++++ +--,,,,,,,,,,,,,.. |
|
| .....,,,,,,,,,,,,,,,,,,,,,,-----+ %%++% +@+----+ +--,,,,,,,,,,,,,.. |
|
| .....,,,,,,,,,,,,,,,,,,,,,,,---%+++--+#+--------% #--,,,,,,,,,,,,.. |
|
| ......,,,,,,,,,,,,,,,,,,,,,,--++-----%%--------- @#--,,,,,,,,,,,,.. |
|
| .......,,,,,,,,,,,,,,,,,,,,,---------------------+@ +-++,,,,,,,,,,,,... |
|
| ........,,,,,,,,,,,,,,,,,,,,,--------------------+ ----,,,,,,,,,,,,... |
|
| .........,,,,,,,,,,,,,,,,,,,,----,,,------------- #+----,,,,,,,,,,,,... |
|
| ..........,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-------+ + +---,,,,,,,,,,,,,... |
|
| ...........,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--------+%# #---,,,,,,,,,,,,.... |
|
| ............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,------+# @ @---,,,,,,,,,,,,.... |
|
| .............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----+# + @--,,,,,,,,,,,,.... |
|
| ..............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---+% %+@ %+-+ +++%-,,,,,,,,,,,..... |
|
| ................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----% %@++ # % -----++-,,,,,,,,,,,,..... |
|
| .................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-- ++ ---+ + +%@ %++++++------%-,,,,,,,,,,,...... |
|
| ...................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---- -------++ +------------,,,,,,,,,,,,...... |
|
| ....................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----------+% +--------,,,,,,,,,,,,,,,....... |
|
| ......................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--------+# -----,,,,,,,,,,,,,,,,,,....... |
|
| .......................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-------+ #----,,,,,,,,,,,,,,,,,,........ |
|
| .........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----+% %#---,,,,,,,,,,,,,,,,,,,........ |
|
| ..........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---+%+%@ %+%%--,,,,,,,,,,,,,,,,,,......... |
|
| ............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---+-+% %----,,,,,,,,,,,,,,,,,,.......... |
|
| .............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----+%@+---,,,,,,,,,,,,,,,,,,,.......... |
|
| ...............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----+%----,,,,,,,,,,,,,,,,,,........... |
|
| ................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----%+ +--,,,,,,,,,,,,,,,,,............ |
|
| ..................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---++----,,,,,,,,,,,,,,,,,............. |
|
| ...................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,---@-----,,,,,,,,,,,,,,,,,............. |
|
| .....................................,,,,,,,,,,,,,,,,,,,,,,,,,,,-----,,,,,,,,,,,,,,,,,,,.............. |
|
| .....................................,,,,,,,,,,,,,,,,,,,,,,,,,,--%,,,,,,,,,,,,,,,,,,,,............... |
|
| .......................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,................. |
|
| ........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.................. |
|
| ........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,................... |
|
| .........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.................... |
|
| ..........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,...................... |
|
| ............................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,........................ |
|
| .............................................,,,,,,,,,,,,,,,,,,,,,,,,.......................... |
|
| ................................................,,,,,,,,,,,,,,,,,............................. |
|
| .....................................................,,,,.................................... |
|
| ........................................................................................... |
|
| ......................................................................................... |
|
| ...................................................................................... |
|
| .................................................................................... |
|
| ................................................................................. |
|
| .............................................................................. |
|
| ........................................................................... |
|
| ........................................................................ |
|
+--------------------------------------------------------------------------------------------------------+
|
102 rows in set (0.378 sec)
|
|
Attachments
Issue Links
- duplicates
-
MDEV-17629 Recursive CTE performance
-
- Closed
-
- links to
Activity
Field | Original Value | New Value |
---|---|---|
Status | Open [ 1 ] | Confirmed [ 10101 ] |
Assignee | Igor Babaev [ igor ] |
Assignee | Igor Babaev [ igor ] | Vicentiu Ciorbaru [ cvicentiu ] |
Link |
This issue duplicates |
Priority | Major [ 3 ] | Critical [ 2 ] |
Remote Link | This issue links to "https://elephantdolphin.blogspot.com/2018/11/common-table-expressions-shocking.html (Web Link)" [ 28617 ] |
Description |
Based on the article from https://elephantdolphin.blogspot.com/2018/11/common-table-expressions-shocking.html
{code:sql} WITH RECURSIVE x(i) AS (SELECT CAST(0 AS DECIMAL(13, 10)) UNION ALL SELECT i + 1 FROM x WHERE i < 2), Z AS (SELECT Ix, Iy, X as Cx, Y as Cy, X, Y, 0 as I FROM (SELECT CAST(-2.2 + 0.031 * i AS DECIMAL(13, 10)) AS X, i AS Ix FROM x) AS xgen JOIN (SELECT CAST(-1.5 + 0.031 * i AS DECIMAL(13, 10)) AS Y, i AS iY FROM x) AS ygen UNION ALL SELECT Ix, Iy, Cx, Cy, CAST(X * X - Y * Y + Cx AS DECIMAL(13, 10)) AS X, CAST(Y * X * 2 + Cy AS DECIMAL(13, 10)), I + 1 FROM Z WHERE X * X + Y * Y < 16.0 AND I < 27 ) select * from Z; # and the original one WITH RECURSIVE x(i) AS ( SELECT CAST(0 AS DECIMAL(13, 10)) UNION ALL SELECT i + 1 FROM x WHERE i < 101 ), Z(Ix, Iy, Cx, Cy, X, Y, I) AS ( SELECT Ix, Iy, X, Y, X, Y, 0 FROM (SELECT CAST(-2.2 + 0.031 * i AS DECIMAL(13, 10)) AS X, i AS Ix FROM x) AS xgen CROSS JOIN ( SELECT CAST(-1.5 + 0.031 * i AS DECIMAL(13, 10)) AS Y, i AS iY FROM x ) AS ygen UNION ALL SELECT Ix, Iy, Cx, Cy, CAST(X * X - Y * Y + Cx AS DECIMAL(13, 10)) AS X, CAST(Y * X * 2 + Cy AS DECIMAL(13, 10)), I + 1 FROM Z WHERE X * X + Y * Y < 16.0 AND I < 27 ), Zt (Ix, Iy, I) AS ( SELECT Ix, Iy, MAX(I) AS I FROM Z GROUP BY Iy, Ix ORDER BY Iy, Ix ) SELECT GROUP_CONCAT( SUBSTRING( ' .,,,-----++++%%%%@@@@#### ', GREATEST(I, 1), 1 ) ORDER BY Ix SEPARATOR '' ) AS 'Mandelbrot Set' FROM Zt GROUP BY Iy ORDER BY Iy; {code} {noformat} +------+-----------------+------------+------+---------------+------+---------+------+------+----------+------------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +------+-----------------+------------+------+---------------+------+---------+------+------+----------+------------------------------------+ | 1 | PRIMARY | <derived4> | ALL | NULL | NULL | NULL | NULL | 4 | 100.00 | | | 4 | DERIVED | <derived2> | ALL | NULL | NULL | NULL | NULL | 2 | 100.00 | | | 4 | DERIVED | <derived2> | ALL | NULL | NULL | NULL | NULL | 2 | 100.00 | Using join buffer (flat, BNL join) | | 2 | DERIVED | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | No tables used | | 3 | RECURSIVE UNION | <derived2> | ALL | NULL | NULL | NULL | NULL | 2 | 100.00 | Using where | | NULL | UNION RESULT | <union2,3> | ALL | NULL | NULL | NULL | NULL | NULL | NULL | | | 7 | RECURSIVE UNION | <derived4> | ALL | NULL | NULL | NULL | NULL | 4 | 100.00 | Using where | | NULL | UNION RESULT | <union4,7> | ALL | NULL | NULL | NULL | NULL | NULL | NULL | | +------+-----------------+------------+------+---------------+------+---------+------+------+----------+------------------------------------+ 8 rows in set, 1 warning (0.000 sec) Note (Code 1003): with recursive x as (/* select#2 */ select cast(0 as decimal(13,10)) AS `i` union all /* select#3 */ select `x`.`i` + 1 AS `i + 1` from `x` where `x`.`i` < 2), Z as (/* select#4 */ select `x`.`i` AS `Ix`,`x`.`i` AS `iY`,cast(-2.2 + 0.031 * `x`.`i` as decimal(13,10)) AS `Cx`,cast(-1.5 + 0.031 * `x`.`i` as decimal(13,10)) AS `Cy`,cast(-2.2 + 0.031 * `x`.`i` as decimal(13,10)) AS `X`,cast(-1.5 + 0.031 * `x`.`i` as decimal(13,10)) AS `Y`,0 AS `I` from `x` join `x` union all /* select#7 */ select `Z`.`Ix` AS `Ix`,`Z`.`iY` AS `Iy`,`Z`.`Cx` AS `Cx`,`Z`.`Cy` AS `Cy`,cast(`Z`.`X` * `Z`.`X` - `Z`.`Y` * `Z`.`Y` + `Z`.`Cx` as decimal(13,10)) AS `X`,cast(`Z`.`Y` * `Z`.`X` * 2 + `Z`.`Cy` as decimal(13,10)) AS `CAST(Y * X * 2 + Cy AS DECIMAL(13, 10))`,`Z`.`I` + 1 AS `I + 1` from `Z` where `Z`.`X` * `Z`.`X` + `Z`.`Y` * `Z`.`Y` < 16.0 and `Z`.`I` < 27)/* select#1 */ select `Z`.`Ix` AS `Ix`,`Z`.`iY` AS `iY`,`Z`.`Cx` AS `Cx`,`Z`.`Cy` AS `Cy`,`Z`.`X` AS `X`,`Z`.`Y` AS `Y`,`Z`.`I` AS `I` from `Z` {noformat} If I make table X as a separate table, not a recursive cte, then query works as expected. {noformat} MariaDB [test]> create table x as -> WITH RECURSIVE K(i) AS ( -> SELECT CAST(0 AS DECIMAL(13, 10)) -> UNION ALL -> SELECT i + 1 -> FROM K -> WHERE i < 101 -> )select * from K; Query OK, 102 rows affected (0.102 sec) Records: 102 Duplicates: 0 Warnings: 0 MariaDB [test]> WITH RECURSIVE -> Z(Ix, Iy, Cx, Cy, X, Y, I) AS ( -> SELECT Ix, Iy, X, Y, X, Y, 0 -> FROM (SELECT CAST(-2.2 + 0.031 * i AS DECIMAL(13, 10)) AS X, -> i AS Ix FROM x) AS xgen -> CROSS JOIN ( -> SELECT CAST(-1.5 + 0.031 * i AS DECIMAL(13, 10)) AS Y, -> i AS iY FROM x -> ) AS ygen -> UNION ALL -> SELECT Ix, Iy, Cx, Cy, -> CAST(X * X - Y * Y + Cx AS DECIMAL(13, 10)) AS X, -> CAST(Y * X * 2 + Cy AS DECIMAL(13, 10)), I + 1 -> FROM Z -> WHERE X * X + Y * Y < 16.0 -> AND I < 27 -> ), -> Zt (Ix, Iy, I) AS ( -> SELECT Ix, Iy, MAX(I) AS I -> FROM Z -> GROUP BY Iy, Ix -> ORDER BY Iy, Ix -> ) -> SELECT GROUP_CONCAT( -> SUBSTRING( -> ' .,,,-----++++%%%%@@@@#### ', -> GREATEST(I, 1), -> 1 -> ) ORDER BY Ix SEPARATOR '' -> ) AS 'Mandelbrot Set' -> FROM Zt -> GROUP BY Iy -> ORDER BY Iy; +--------------------------------------------------------------------------------------------------------+ | Mandelbrot Set | +--------------------------------------------------------------------------------------------------------+ | .................................................................................... | | ....................................................................................... | | ......................................................................................... | | ........................................................................................... | | ....................................................,,,,,,,,,................................. | | ................................................,,,,,,,,,,,,,,,,,,............................. | | ..............................................,,,,,,,,,,,,,,,,,,,,,,,,.......................... | | ............................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,........................ | | ..........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,...................... | | .........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.................... | | ........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,................... | | .......................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,................. | | .......................................,,,,,,,,,,,,,,,,,,,,,,,,--,,,,,,,,,,,,,,,,,,,,................ | | ......................................,,,,,,,,,,,,,,,,,,,,,,,,,,-+--,,,,,,,,,,,,,,,,,,,............... | | ....................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----,,,,,,,,,,,,,,,,,,,.............. | | ...................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,--- -----,,,,,,,,,,,,,,,,,............. | | .................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---++--++,,,,,,,,,,,,,,,,,,............ | | ................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----%++---,,,,,,,,,,,,,,,,,............ | | ..............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----+%----,,,,,,,,,,,,,,,,,,........... | | .............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----- %%+----,,,,,,,,,,,,,,,,,,.......... | | ...........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---%-+% ----,,,,,,,,,,,,,,,,,,,......... | | ..........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---+ +## %+%---,,,,,,,,,,,,,,,,,,......... | | ........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----# # +---,,,,,,,,,,,,,,,,,,........ | | .......................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-------% %-----,,,,,,,,,,,,,,,,,........ | | .....................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------+ ------,,,,,,,,,,,,,,,,,....... | | ....................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----------+@ +-----------,,,,,,,,,,,,....... | | ..................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----@-------++ ++-----------,,,,,,,,,,,,...... | | .................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--+@% ---+ +@%%@ %%+@+@%------+-,,,,,,,,,,,...... | | ................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---- # ++% % @-----++--,,,,,,,,,,,..... | | ..............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----+ % %%++ %+%@-,,,,,,,,,,,..... | | .............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----+# #% ++-,,,,,,,,,,,,.... | | ............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,------+ @---,,,,,,,,,,,,.... | | ..........,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-------++% ---,,,,,,,,,,,,.... | | .........,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--------+ + %+---,,,,,,,,,,,,,... | | ........,,,,,,,,,,,,,,,,,,,,,--------------------@ +----,,,,,,,,,,,,... | | .......,,,,,,,,,,,,,,,,,,,,,,- +-----------------+ ----,,,,,,,,,,,,... | | .......,,,,,,,,,,,,,,,,,,,,,--++------+---------+% +++--,,,,,,,,,,,,.. | | ......,,,,,,,,,,,,,,,,,,,,,,--%+-----++--------- #+-,,,,,,,,,,,,.. | | .....,,,,,,,,,,,,,,,,,,,,,,----#%++--+@ -+-----+% --,,,,,,,,,,,,.. | | .....,,,,,,,,,,,,,,,,,,,,,,-----+## ++@ + +----% +--,,,,,,,,,,,,,.. | | ....,,,,,,,,,,,,,,,,,,,,,,------+@ @ @@++++# +--,,,,,,,,,,,,,.. | | ....,,,,,,,,,,,,,,,,,,,,,-------% #++% -,,,,,,,,,,,,,.. | | ...,,,,,,,,,,,,,,,,,,,,,------++%# %%@ %-,,,,,,,,,,,,,,. | | ...,,,,,,,,,,,,,,,,,,,--------+ % +--,,,,,,,,,,,,,,. | | ...,,,,,,,,,,,,,,,,,,-----+--++@ # --,,,,,,,,,,,,,,. | | ..,,,,,,,,,,,,,,,,,-------%+++% @--,,,,,,,,,,,,,,,. | | ..,,,,,,,,,,,-------------+ @#@ ---,,,,,,,,,,,,,,,. | | ..,,,,,,,,,---@--------@-+% +---,,,,,,,,,,,,,,,. | | ..,,,,,------- +-++++-+%%% +----,,,,,,,,,,,,,,,. | | ..,,,,,,------%--------++% +----,,,,,,,,,,,,,,,. | | ..,,,,,,,,,,--+----------++# ---,,,,,,,,,,,,,,,. | | ..,,,,,,,,,,,,------------+@@@% +--,,,,,,,,,,,,,,,. | | ..,,,,,,,,,,,,,,,,,------- +++% %--,,,,,,,,,,,,,,,. | | ...,,,,,,,,,,,,,,,,,,---------+@ @ --,,,,,,,,,,,,,,. | | ...,,,,,,,,,,,,,,,,,,,,------- # %@ +--,,,,,,,,,,,,,,. | | ...,,,,,,,,,,,,,,,,,,,,,-------++@ %+ %-,,,,,,,,,,,,,,. | | ....,,,,,,,,,,,,,,,,,,,,,------- %++% %-,,,,,,,,,,,,,.. | | ....,,,,,,,,,,,,,,,,,,,,,,------+# %# #@ ++++ +--,,,,,,,,,,,,,.. | | .....,,,,,,,,,,,,,,,,,,,,,,-----+ %%++% +@+----+ +--,,,,,,,,,,,,,.. | | .....,,,,,,,,,,,,,,,,,,,,,,,---%+++--+#+--------% #--,,,,,,,,,,,,.. | | ......,,,,,,,,,,,,,,,,,,,,,,--++-----%%--------- @#--,,,,,,,,,,,,.. | | .......,,,,,,,,,,,,,,,,,,,,,---------------------+@ +-++,,,,,,,,,,,,... | | ........,,,,,,,,,,,,,,,,,,,,,--------------------+ ----,,,,,,,,,,,,... | | .........,,,,,,,,,,,,,,,,,,,,----,,,------------- #+----,,,,,,,,,,,,... | | ..........,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-------+ + +---,,,,,,,,,,,,,... | | ...........,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--------+%# #---,,,,,,,,,,,,.... | | ............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,------+# @ @---,,,,,,,,,,,,.... | | .............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----+# + @--,,,,,,,,,,,,.... | | ..............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---+% %+@ %+-+ +++%-,,,,,,,,,,,..... | | ................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----% %@++ # % -----++-,,,,,,,,,,,,..... | | .................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-- ++ ---+ + +%@ %++++++------%-,,,,,,,,,,,...... | | ...................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---- -------++ +------------,,,,,,,,,,,,...... | | ....................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----------+% +--------,,,,,,,,,,,,,,,....... | | ......................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--------+# -----,,,,,,,,,,,,,,,,,,....... | | .......................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-------+ #----,,,,,,,,,,,,,,,,,,........ | | .........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----+% %#---,,,,,,,,,,,,,,,,,,,........ | | ..........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---+%+%@ %+%%--,,,,,,,,,,,,,,,,,,......... | | ............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---+-+% %----,,,,,,,,,,,,,,,,,,.......... | | .............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----+%@+---,,,,,,,,,,,,,,,,,,,.......... | | ...............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----+%----,,,,,,,,,,,,,,,,,,........... | | ................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----%+ +--,,,,,,,,,,,,,,,,,............ | | ..................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---++----,,,,,,,,,,,,,,,,,............. | | ...................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,---@-----,,,,,,,,,,,,,,,,,............. | | .....................................,,,,,,,,,,,,,,,,,,,,,,,,,,,-----,,,,,,,,,,,,,,,,,,,.............. | | .....................................,,,,,,,,,,,,,,,,,,,,,,,,,,--%,,,,,,,,,,,,,,,,,,,,............... | | .......................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,................. | | ........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.................. | | ........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,................... | | .........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.................... | | ..........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,...................... | | ............................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,........................ | | .............................................,,,,,,,,,,,,,,,,,,,,,,,,.......................... | | ................................................,,,,,,,,,,,,,,,,,............................. | | .....................................................,,,,.................................... | | ........................................................................................... | | ......................................................................................... | | ...................................................................................... | | .................................................................................... | | ................................................................................. | | .............................................................................. | | ........................................................................... | | ........................................................................ | +--------------------------------------------------------------------------------------------------------+ 102 rows in set (0.371 sec) {noformat} |
Based on the article from https://elephantdolphin.blogspot.com/2018/11/common-table-expressions-shocking.html
{code:sql} WITH RECURSIVE x(i) AS (SELECT CAST(0 AS DECIMAL(13, 10)) UNION ALL SELECT i + 1 FROM x WHERE i < 2), Z AS (SELECT Ix, Iy, X as Cx, Y as Cy, X, Y, 0 as I FROM (SELECT CAST(-2.2 + 0.031 * i AS DECIMAL(13, 10)) AS X, i AS Ix FROM x) AS xgen JOIN (SELECT CAST(-1.5 + 0.031 * i AS DECIMAL(13, 10)) AS Y, i AS iY FROM x) AS ygen UNION ALL SELECT Ix, Iy, Cx, Cy, CAST(X * X - Y * Y + Cx AS DECIMAL(13, 10)) AS X, CAST(Y * X * 2 + Cy AS DECIMAL(13, 10)), I + 1 FROM Z WHERE X * X + Y * Y < 16.0 AND I < 27 ) select * from Z; # and the original one WITH RECURSIVE x(i) AS ( SELECT CAST(0 AS DECIMAL(13, 10)) UNION ALL SELECT i + 1 FROM x WHERE i < 101 ), Z(Ix, Iy, Cx, Cy, X, Y, I) AS ( SELECT Ix, Iy, X, Y, X, Y, 0 FROM (SELECT CAST(-2.2 + 0.031 * i AS DECIMAL(13, 10)) AS X, i AS Ix FROM x) AS xgen CROSS JOIN ( SELECT CAST(-1.5 + 0.031 * i AS DECIMAL(13, 10)) AS Y, i AS iY FROM x ) AS ygen UNION ALL SELECT Ix, Iy, Cx, Cy, CAST(X * X - Y * Y + Cx AS DECIMAL(13, 10)) AS X, CAST(Y * X * 2 + Cy AS DECIMAL(13, 10)), I + 1 FROM Z WHERE X * X + Y * Y < 16.0 AND I < 27 ), Zt (Ix, Iy, I) AS ( SELECT Ix, Iy, MAX(I) AS I FROM Z GROUP BY Iy, Ix ORDER BY Iy, Ix ) SELECT GROUP_CONCAT( SUBSTRING( ' .,,,-----++++%%%%@@@@#### ', GREATEST(I, 1), 1 ) ORDER BY Ix SEPARATOR '' ) AS 'Mandelbrot Set' FROM Zt GROUP BY Iy ORDER BY Iy; {code} {noformat} +------+-----------------+------------+------+---------------+------+---------+------+------+----------+------------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +------+-----------------+------------+------+---------------+------+---------+------+------+----------+------------------------------------+ | 1 | PRIMARY | <derived4> | ALL | NULL | NULL | NULL | NULL | 4 | 100.00 | | | 4 | DERIVED | <derived2> | ALL | NULL | NULL | NULL | NULL | 2 | 100.00 | | | 4 | DERIVED | <derived2> | ALL | NULL | NULL | NULL | NULL | 2 | 100.00 | Using join buffer (flat, BNL join) | | 2 | DERIVED | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | No tables used | | 3 | RECURSIVE UNION | <derived2> | ALL | NULL | NULL | NULL | NULL | 2 | 100.00 | Using where | | NULL | UNION RESULT | <union2,3> | ALL | NULL | NULL | NULL | NULL | NULL | NULL | | | 7 | RECURSIVE UNION | <derived4> | ALL | NULL | NULL | NULL | NULL | 4 | 100.00 | Using where | | NULL | UNION RESULT | <union4,7> | ALL | NULL | NULL | NULL | NULL | NULL | NULL | | +------+-----------------+------------+------+---------------+------+---------+------+------+----------+------------------------------------+ 8 rows in set, 1 warning (0.000 sec) Note (Code 1003): with recursive x as (/* select#2 */ select cast(0 as decimal(13,10)) AS `i` union all /* select#3 */ select `x`.`i` + 1 AS `i + 1` from `x` where `x`.`i` < 2), Z as (/* select#4 */ select `x`.`i` AS `Ix`,`x`.`i` AS `iY`,cast(-2.2 + 0.031 * `x`.`i` as decimal(13,10)) AS `Cx`,cast(-1.5 + 0.031 * `x`.`i` as decimal(13,10)) AS `Cy`,cast(-2.2 + 0.031 * `x`.`i` as decimal(13,10)) AS `X`,cast(-1.5 + 0.031 * `x`.`i` as decimal(13,10)) AS `Y`,0 AS `I` from `x` join `x` union all /* select#7 */ select `Z`.`Ix` AS `Ix`,`Z`.`iY` AS `Iy`,`Z`.`Cx` AS `Cx`,`Z`.`Cy` AS `Cy`,cast(`Z`.`X` * `Z`.`X` - `Z`.`Y` * `Z`.`Y` + `Z`.`Cx` as decimal(13,10)) AS `X`,cast(`Z`.`Y` * `Z`.`X` * 2 + `Z`.`Cy` as decimal(13,10)) AS `CAST(Y * X * 2 + Cy AS DECIMAL(13, 10))`,`Z`.`I` + 1 AS `I + 1` from `Z` where `Z`.`X` * `Z`.`X` + `Z`.`Y` * `Z`.`Y` < 16.0 and `Z`.`I` < 27)/* select#1 */ select `Z`.`Ix` AS `Ix`,`Z`.`iY` AS `iY`,`Z`.`Cx` AS `Cx`,`Z`.`Cy` AS `Cy`,`Z`.`X` AS `X`,`Z`.`Y` AS `Y`,`Z`.`I` AS `I` from `Z` {noformat} The problem is with UNION vs UNION ALL: {noformat} MariaDB [test]> WITH RECURSIVE -> x AS (SELECT 0 as k UNION SELECT k + 1 FROM x WHERE k < 1), -> z AS -> ( SELECT k1 AS cx, k2 AS cy, k1, k2 -> FROM (SELECT k as k1 FROM x) x1 JOIN (SELECT k as k2 FROM x) y1 -> UNION -> SELECT 1,1,1,1 FROM z) -> SELECT * FROM z; +------+------+------+------+ | cx | cy | k1 | k2 | +------+------+------+------+ | 0 | 0 | 0 | 0 | | 1 | 0 | 1 | 0 | | 0 | 1 | 0 | 1 | | 1 | 1 | 1 | 1 | +------+------+------+------+ 4 rows in set (0.000 sec) ################################################ MariaDB [test]> WITH RECURSIVE -> x AS (SELECT 0 as k UNION ALL SELECT k + 1 FROM x WHERE k < 1), -> z AS -> ( SELECT k1 AS cx, k2 AS cy, k1, k2 -> FROM (SELECT k AS k1 FROM x) x1 JOIN (SELECT k AS k2 FROM x) y1 -> UNION -> SELECT 1,1,1,1 FROM z) -> SELECT * FROM z; ^CCtrl-C -- query killed. Continuing normally. ERROR 1317 (70100): Query execution was interrupted {noformat} {noformat} MariaDB [test]> WITH RECURSIVE x(i) AS ( -> SELECT CAST(0 AS DECIMAL(13, 10)) -> UNION -> SELECT i + 1 -> FROM x -> WHERE i < 101 -> ), -> Z(Ix, Iy, Cx, Cy, X, Y, I) AS ( -> SELECT Ix, Iy, X, Y, X, Y, 0 -> FROM (SELECT CAST(-2.2 + 0.031 * i AS DECIMAL(13, 10)) AS X, -> i AS Ix FROM x) AS xgen -> CROSS JOIN ( -> SELECT CAST(-1.5 + 0.031 * i AS DECIMAL(13, 10)) AS Y, -> i AS iY FROM x -> ) AS ygen -> UNION ALL -> SELECT Ix, Iy, Cx, Cy, -> CAST(X * X - Y * Y + Cx AS DECIMAL(13, 10)) AS X, -> CAST(Y * X * 2 + Cy AS DECIMAL(13, 10)), I + 1 -> FROM Z -> WHERE X * X + Y * Y < 16.0 -> AND I < 27 -> ), -> Zt (Ix, Iy, I) AS ( -> SELECT Ix, Iy, MAX(I) AS I -> FROM Z -> GROUP BY Iy, Ix -> ORDER BY Iy, Ix -> ) -> SELECT GROUP_CONCAT( -> SUBSTRING( -> ' .,,,-----++++%%%%@@@@#### ', -> GREATEST(I, 1), -> 1 -> ) ORDER BY Ix SEPARATOR '' -> ) AS 'Mandelbrot Set' -> FROM Zt -> GROUP BY Iy -> ORDER BY Iy; +--------------------------------------------------------------------------------------------------------+ | Mandelbrot Set | +--------------------------------------------------------------------------------------------------------+ | .................................................................................... | | ....................................................................................... | | ......................................................................................... | | ........................................................................................... | | ....................................................,,,,,,,,,................................. | | ................................................,,,,,,,,,,,,,,,,,,............................. | | ..............................................,,,,,,,,,,,,,,,,,,,,,,,,.......................... | | ............................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,........................ | | ..........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,...................... | | .........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.................... | | ........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,................... | | .......................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,................. | | .......................................,,,,,,,,,,,,,,,,,,,,,,,,--,,,,,,,,,,,,,,,,,,,,................ | | ......................................,,,,,,,,,,,,,,,,,,,,,,,,,,-+--,,,,,,,,,,,,,,,,,,,............... | | ....................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----,,,,,,,,,,,,,,,,,,,.............. | | ...................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,--- -----,,,,,,,,,,,,,,,,,............. | | .................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---++--++,,,,,,,,,,,,,,,,,,............ | | ................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----%++---,,,,,,,,,,,,,,,,,............ | | ..............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----+%----,,,,,,,,,,,,,,,,,,........... | | .............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----- %%+----,,,,,,,,,,,,,,,,,,.......... | | ...........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---%-+% ----,,,,,,,,,,,,,,,,,,,......... | | ..........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---+ +## %+%---,,,,,,,,,,,,,,,,,,......... | | ........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----# # +---,,,,,,,,,,,,,,,,,,........ | | .......................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-------% %-----,,,,,,,,,,,,,,,,,........ | | .....................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------+ ------,,,,,,,,,,,,,,,,,....... | | ....................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----------+@ +-----------,,,,,,,,,,,,....... | | ..................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----@-------++ ++-----------,,,,,,,,,,,,...... | | .................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--+@% ---+ +@%%@ %%+@+@%------+-,,,,,,,,,,,...... | | ................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---- # ++% % @-----++--,,,,,,,,,,,..... | | ..............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----+ % %%++ %+%@-,,,,,,,,,,,..... | | .............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----+# #% ++-,,,,,,,,,,,,.... | | ............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,------+ @---,,,,,,,,,,,,.... | | ..........,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-------++% ---,,,,,,,,,,,,.... | | .........,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--------+ + %+---,,,,,,,,,,,,,... | | ........,,,,,,,,,,,,,,,,,,,,,--------------------@ +----,,,,,,,,,,,,... | | .......,,,,,,,,,,,,,,,,,,,,,,- +-----------------+ ----,,,,,,,,,,,,... | | .......,,,,,,,,,,,,,,,,,,,,,--++------+---------+% +++--,,,,,,,,,,,,.. | | ......,,,,,,,,,,,,,,,,,,,,,,--%+-----++--------- #+-,,,,,,,,,,,,.. | | .....,,,,,,,,,,,,,,,,,,,,,,----#%++--+@ -+-----+% --,,,,,,,,,,,,.. | | .....,,,,,,,,,,,,,,,,,,,,,,-----+## ++@ + +----% +--,,,,,,,,,,,,,.. | | ....,,,,,,,,,,,,,,,,,,,,,,------+@ @ @@++++# +--,,,,,,,,,,,,,.. | | ....,,,,,,,,,,,,,,,,,,,,,-------% #++% -,,,,,,,,,,,,,.. | | ...,,,,,,,,,,,,,,,,,,,,,------++%# %%@ %-,,,,,,,,,,,,,,. | | ...,,,,,,,,,,,,,,,,,,,--------+ % +--,,,,,,,,,,,,,,. | | ...,,,,,,,,,,,,,,,,,,-----+--++@ # --,,,,,,,,,,,,,,. | | ..,,,,,,,,,,,,,,,,,-------%+++% @--,,,,,,,,,,,,,,,. | | ..,,,,,,,,,,,-------------+ @#@ ---,,,,,,,,,,,,,,,. | | ..,,,,,,,,,---@--------@-+% +---,,,,,,,,,,,,,,,. | | ..,,,,,------- +-++++-+%%% +----,,,,,,,,,,,,,,,. | | ..,,,,,,------%--------++% +----,,,,,,,,,,,,,,,. | | ..,,,,,,,,,,--+----------++# ---,,,,,,,,,,,,,,,. | | ..,,,,,,,,,,,,------------+@@@% +--,,,,,,,,,,,,,,,. | | ..,,,,,,,,,,,,,,,,,------- +++% %--,,,,,,,,,,,,,,,. | | ...,,,,,,,,,,,,,,,,,,---------+@ @ --,,,,,,,,,,,,,,. | | ...,,,,,,,,,,,,,,,,,,,,------- # %@ +--,,,,,,,,,,,,,,. | | ...,,,,,,,,,,,,,,,,,,,,,-------++@ %+ %-,,,,,,,,,,,,,,. | | ....,,,,,,,,,,,,,,,,,,,,,------- %++% %-,,,,,,,,,,,,,.. | | ....,,,,,,,,,,,,,,,,,,,,,,------+# %# #@ ++++ +--,,,,,,,,,,,,,.. | | .....,,,,,,,,,,,,,,,,,,,,,,-----+ %%++% +@+----+ +--,,,,,,,,,,,,,.. | | .....,,,,,,,,,,,,,,,,,,,,,,,---%+++--+#+--------% #--,,,,,,,,,,,,.. | | ......,,,,,,,,,,,,,,,,,,,,,,--++-----%%--------- @#--,,,,,,,,,,,,.. | | .......,,,,,,,,,,,,,,,,,,,,,---------------------+@ +-++,,,,,,,,,,,,... | | ........,,,,,,,,,,,,,,,,,,,,,--------------------+ ----,,,,,,,,,,,,... | | .........,,,,,,,,,,,,,,,,,,,,----,,,------------- #+----,,,,,,,,,,,,... | | ..........,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-------+ + +---,,,,,,,,,,,,,... | | ...........,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--------+%# #---,,,,,,,,,,,,.... | | ............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,------+# @ @---,,,,,,,,,,,,.... | | .............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----+# + @--,,,,,,,,,,,,.... | | ..............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---+% %+@ %+-+ +++%-,,,,,,,,,,,..... | | ................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----% %@++ # % -----++-,,,,,,,,,,,,..... | | .................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-- ++ ---+ + +%@ %++++++------%-,,,,,,,,,,,...... | | ...................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---- -------++ +------------,,,,,,,,,,,,...... | | ....................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----------+% +--------,,,,,,,,,,,,,,,....... | | ......................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--------+# -----,,,,,,,,,,,,,,,,,,....... | | .......................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-------+ #----,,,,,,,,,,,,,,,,,,........ | | .........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----+% %#---,,,,,,,,,,,,,,,,,,,........ | | ..........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---+%+%@ %+%%--,,,,,,,,,,,,,,,,,,......... | | ............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---+-+% %----,,,,,,,,,,,,,,,,,,.......... | | .............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----+%@+---,,,,,,,,,,,,,,,,,,,.......... | | ...............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----+%----,,,,,,,,,,,,,,,,,,........... | | ................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----%+ +--,,,,,,,,,,,,,,,,,............ | | ..................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---++----,,,,,,,,,,,,,,,,,............. | | ...................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,---@-----,,,,,,,,,,,,,,,,,............. | | .....................................,,,,,,,,,,,,,,,,,,,,,,,,,,,-----,,,,,,,,,,,,,,,,,,,.............. | | .....................................,,,,,,,,,,,,,,,,,,,,,,,,,,--%,,,,,,,,,,,,,,,,,,,,............... | | .......................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,................. | | ........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.................. | | ........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,................... | | .........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.................... | | ..........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,...................... | | ............................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,........................ | | .............................................,,,,,,,,,,,,,,,,,,,,,,,,.......................... | | ................................................,,,,,,,,,,,,,,,,,............................. | | .....................................................,,,,.................................... | | ........................................................................................... | | ......................................................................................... | | ...................................................................................... | | .................................................................................... | | ................................................................................. | | .............................................................................. | | ........................................................................... | | ........................................................................ | +--------------------------------------------------------------------------------------------------------+ 102 rows in set (0.378 sec) {noformat} |
Assignee | Vicentiu Ciorbaru [ cvicentiu ] | Igor Babaev [ igor ] |
Description |
Based on the article from https://elephantdolphin.blogspot.com/2018/11/common-table-expressions-shocking.html
{code:sql} WITH RECURSIVE x(i) AS (SELECT CAST(0 AS DECIMAL(13, 10)) UNION ALL SELECT i + 1 FROM x WHERE i < 2), Z AS (SELECT Ix, Iy, X as Cx, Y as Cy, X, Y, 0 as I FROM (SELECT CAST(-2.2 + 0.031 * i AS DECIMAL(13, 10)) AS X, i AS Ix FROM x) AS xgen JOIN (SELECT CAST(-1.5 + 0.031 * i AS DECIMAL(13, 10)) AS Y, i AS iY FROM x) AS ygen UNION ALL SELECT Ix, Iy, Cx, Cy, CAST(X * X - Y * Y + Cx AS DECIMAL(13, 10)) AS X, CAST(Y * X * 2 + Cy AS DECIMAL(13, 10)), I + 1 FROM Z WHERE X * X + Y * Y < 16.0 AND I < 27 ) select * from Z; # and the original one WITH RECURSIVE x(i) AS ( SELECT CAST(0 AS DECIMAL(13, 10)) UNION ALL SELECT i + 1 FROM x WHERE i < 101 ), Z(Ix, Iy, Cx, Cy, X, Y, I) AS ( SELECT Ix, Iy, X, Y, X, Y, 0 FROM (SELECT CAST(-2.2 + 0.031 * i AS DECIMAL(13, 10)) AS X, i AS Ix FROM x) AS xgen CROSS JOIN ( SELECT CAST(-1.5 + 0.031 * i AS DECIMAL(13, 10)) AS Y, i AS iY FROM x ) AS ygen UNION ALL SELECT Ix, Iy, Cx, Cy, CAST(X * X - Y * Y + Cx AS DECIMAL(13, 10)) AS X, CAST(Y * X * 2 + Cy AS DECIMAL(13, 10)), I + 1 FROM Z WHERE X * X + Y * Y < 16.0 AND I < 27 ), Zt (Ix, Iy, I) AS ( SELECT Ix, Iy, MAX(I) AS I FROM Z GROUP BY Iy, Ix ORDER BY Iy, Ix ) SELECT GROUP_CONCAT( SUBSTRING( ' .,,,-----++++%%%%@@@@#### ', GREATEST(I, 1), 1 ) ORDER BY Ix SEPARATOR '' ) AS 'Mandelbrot Set' FROM Zt GROUP BY Iy ORDER BY Iy; {code} {noformat} +------+-----------------+------------+------+---------------+------+---------+------+------+----------+------------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +------+-----------------+------------+------+---------------+------+---------+------+------+----------+------------------------------------+ | 1 | PRIMARY | <derived4> | ALL | NULL | NULL | NULL | NULL | 4 | 100.00 | | | 4 | DERIVED | <derived2> | ALL | NULL | NULL | NULL | NULL | 2 | 100.00 | | | 4 | DERIVED | <derived2> | ALL | NULL | NULL | NULL | NULL | 2 | 100.00 | Using join buffer (flat, BNL join) | | 2 | DERIVED | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | No tables used | | 3 | RECURSIVE UNION | <derived2> | ALL | NULL | NULL | NULL | NULL | 2 | 100.00 | Using where | | NULL | UNION RESULT | <union2,3> | ALL | NULL | NULL | NULL | NULL | NULL | NULL | | | 7 | RECURSIVE UNION | <derived4> | ALL | NULL | NULL | NULL | NULL | 4 | 100.00 | Using where | | NULL | UNION RESULT | <union4,7> | ALL | NULL | NULL | NULL | NULL | NULL | NULL | | +------+-----------------+------------+------+---------------+------+---------+------+------+----------+------------------------------------+ 8 rows in set, 1 warning (0.000 sec) Note (Code 1003): with recursive x as (/* select#2 */ select cast(0 as decimal(13,10)) AS `i` union all /* select#3 */ select `x`.`i` + 1 AS `i + 1` from `x` where `x`.`i` < 2), Z as (/* select#4 */ select `x`.`i` AS `Ix`,`x`.`i` AS `iY`,cast(-2.2 + 0.031 * `x`.`i` as decimal(13,10)) AS `Cx`,cast(-1.5 + 0.031 * `x`.`i` as decimal(13,10)) AS `Cy`,cast(-2.2 + 0.031 * `x`.`i` as decimal(13,10)) AS `X`,cast(-1.5 + 0.031 * `x`.`i` as decimal(13,10)) AS `Y`,0 AS `I` from `x` join `x` union all /* select#7 */ select `Z`.`Ix` AS `Ix`,`Z`.`iY` AS `Iy`,`Z`.`Cx` AS `Cx`,`Z`.`Cy` AS `Cy`,cast(`Z`.`X` * `Z`.`X` - `Z`.`Y` * `Z`.`Y` + `Z`.`Cx` as decimal(13,10)) AS `X`,cast(`Z`.`Y` * `Z`.`X` * 2 + `Z`.`Cy` as decimal(13,10)) AS `CAST(Y * X * 2 + Cy AS DECIMAL(13, 10))`,`Z`.`I` + 1 AS `I + 1` from `Z` where `Z`.`X` * `Z`.`X` + `Z`.`Y` * `Z`.`Y` < 16.0 and `Z`.`I` < 27)/* select#1 */ select `Z`.`Ix` AS `Ix`,`Z`.`iY` AS `iY`,`Z`.`Cx` AS `Cx`,`Z`.`Cy` AS `Cy`,`Z`.`X` AS `X`,`Z`.`Y` AS `Y`,`Z`.`I` AS `I` from `Z` {noformat} The problem is with UNION vs UNION ALL: {noformat} MariaDB [test]> WITH RECURSIVE -> x AS (SELECT 0 as k UNION SELECT k + 1 FROM x WHERE k < 1), -> z AS -> ( SELECT k1 AS cx, k2 AS cy, k1, k2 -> FROM (SELECT k as k1 FROM x) x1 JOIN (SELECT k as k2 FROM x) y1 -> UNION -> SELECT 1,1,1,1 FROM z) -> SELECT * FROM z; +------+------+------+------+ | cx | cy | k1 | k2 | +------+------+------+------+ | 0 | 0 | 0 | 0 | | 1 | 0 | 1 | 0 | | 0 | 1 | 0 | 1 | | 1 | 1 | 1 | 1 | +------+------+------+------+ 4 rows in set (0.000 sec) ################################################ MariaDB [test]> WITH RECURSIVE -> x AS (SELECT 0 as k UNION ALL SELECT k + 1 FROM x WHERE k < 1), -> z AS -> ( SELECT k1 AS cx, k2 AS cy, k1, k2 -> FROM (SELECT k AS k1 FROM x) x1 JOIN (SELECT k AS k2 FROM x) y1 -> UNION -> SELECT 1,1,1,1 FROM z) -> SELECT * FROM z; ^CCtrl-C -- query killed. Continuing normally. ERROR 1317 (70100): Query execution was interrupted {noformat} {noformat} MariaDB [test]> WITH RECURSIVE x(i) AS ( -> SELECT CAST(0 AS DECIMAL(13, 10)) -> UNION -> SELECT i + 1 -> FROM x -> WHERE i < 101 -> ), -> Z(Ix, Iy, Cx, Cy, X, Y, I) AS ( -> SELECT Ix, Iy, X, Y, X, Y, 0 -> FROM (SELECT CAST(-2.2 + 0.031 * i AS DECIMAL(13, 10)) AS X, -> i AS Ix FROM x) AS xgen -> CROSS JOIN ( -> SELECT CAST(-1.5 + 0.031 * i AS DECIMAL(13, 10)) AS Y, -> i AS iY FROM x -> ) AS ygen -> UNION ALL -> SELECT Ix, Iy, Cx, Cy, -> CAST(X * X - Y * Y + Cx AS DECIMAL(13, 10)) AS X, -> CAST(Y * X * 2 + Cy AS DECIMAL(13, 10)), I + 1 -> FROM Z -> WHERE X * X + Y * Y < 16.0 -> AND I < 27 -> ), -> Zt (Ix, Iy, I) AS ( -> SELECT Ix, Iy, MAX(I) AS I -> FROM Z -> GROUP BY Iy, Ix -> ORDER BY Iy, Ix -> ) -> SELECT GROUP_CONCAT( -> SUBSTRING( -> ' .,,,-----++++%%%%@@@@#### ', -> GREATEST(I, 1), -> 1 -> ) ORDER BY Ix SEPARATOR '' -> ) AS 'Mandelbrot Set' -> FROM Zt -> GROUP BY Iy -> ORDER BY Iy; +--------------------------------------------------------------------------------------------------------+ | Mandelbrot Set | +--------------------------------------------------------------------------------------------------------+ | .................................................................................... | | ....................................................................................... | | ......................................................................................... | | ........................................................................................... | | ....................................................,,,,,,,,,................................. | | ................................................,,,,,,,,,,,,,,,,,,............................. | | ..............................................,,,,,,,,,,,,,,,,,,,,,,,,.......................... | | ............................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,........................ | | ..........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,...................... | | .........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.................... | | ........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,................... | | .......................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,................. | | .......................................,,,,,,,,,,,,,,,,,,,,,,,,--,,,,,,,,,,,,,,,,,,,,................ | | ......................................,,,,,,,,,,,,,,,,,,,,,,,,,,-+--,,,,,,,,,,,,,,,,,,,............... | | ....................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----,,,,,,,,,,,,,,,,,,,.............. | | ...................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,--- -----,,,,,,,,,,,,,,,,,............. | | .................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---++--++,,,,,,,,,,,,,,,,,,............ | | ................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----%++---,,,,,,,,,,,,,,,,,............ | | ..............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----+%----,,,,,,,,,,,,,,,,,,........... | | .............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----- %%+----,,,,,,,,,,,,,,,,,,.......... | | ...........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---%-+% ----,,,,,,,,,,,,,,,,,,,......... | | ..........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---+ +## %+%---,,,,,,,,,,,,,,,,,,......... | | ........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----# # +---,,,,,,,,,,,,,,,,,,........ | | .......................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-------% %-----,,,,,,,,,,,,,,,,,........ | | .....................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------+ ------,,,,,,,,,,,,,,,,,....... | | ....................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----------+@ +-----------,,,,,,,,,,,,....... | | ..................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----@-------++ ++-----------,,,,,,,,,,,,...... | | .................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--+@% ---+ +@%%@ %%+@+@%------+-,,,,,,,,,,,...... | | ................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---- # ++% % @-----++--,,,,,,,,,,,..... | | ..............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----+ % %%++ %+%@-,,,,,,,,,,,..... | | .............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----+# #% ++-,,,,,,,,,,,,.... | | ............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,------+ @---,,,,,,,,,,,,.... | | ..........,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-------++% ---,,,,,,,,,,,,.... | | .........,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--------+ + %+---,,,,,,,,,,,,,... | | ........,,,,,,,,,,,,,,,,,,,,,--------------------@ +----,,,,,,,,,,,,... | | .......,,,,,,,,,,,,,,,,,,,,,,- +-----------------+ ----,,,,,,,,,,,,... | | .......,,,,,,,,,,,,,,,,,,,,,--++------+---------+% +++--,,,,,,,,,,,,.. | | ......,,,,,,,,,,,,,,,,,,,,,,--%+-----++--------- #+-,,,,,,,,,,,,.. | | .....,,,,,,,,,,,,,,,,,,,,,,----#%++--+@ -+-----+% --,,,,,,,,,,,,.. | | .....,,,,,,,,,,,,,,,,,,,,,,-----+## ++@ + +----% +--,,,,,,,,,,,,,.. | | ....,,,,,,,,,,,,,,,,,,,,,,------+@ @ @@++++# +--,,,,,,,,,,,,,.. | | ....,,,,,,,,,,,,,,,,,,,,,-------% #++% -,,,,,,,,,,,,,.. | | ...,,,,,,,,,,,,,,,,,,,,,------++%# %%@ %-,,,,,,,,,,,,,,. | | ...,,,,,,,,,,,,,,,,,,,--------+ % +--,,,,,,,,,,,,,,. | | ...,,,,,,,,,,,,,,,,,,-----+--++@ # --,,,,,,,,,,,,,,. | | ..,,,,,,,,,,,,,,,,,-------%+++% @--,,,,,,,,,,,,,,,. | | ..,,,,,,,,,,,-------------+ @#@ ---,,,,,,,,,,,,,,,. | | ..,,,,,,,,,---@--------@-+% +---,,,,,,,,,,,,,,,. | | ..,,,,,------- +-++++-+%%% +----,,,,,,,,,,,,,,,. | | ..,,,,,,------%--------++% +----,,,,,,,,,,,,,,,. | | ..,,,,,,,,,,--+----------++# ---,,,,,,,,,,,,,,,. | | ..,,,,,,,,,,,,------------+@@@% +--,,,,,,,,,,,,,,,. | | ..,,,,,,,,,,,,,,,,,------- +++% %--,,,,,,,,,,,,,,,. | | ...,,,,,,,,,,,,,,,,,,---------+@ @ --,,,,,,,,,,,,,,. | | ...,,,,,,,,,,,,,,,,,,,,------- # %@ +--,,,,,,,,,,,,,,. | | ...,,,,,,,,,,,,,,,,,,,,,-------++@ %+ %-,,,,,,,,,,,,,,. | | ....,,,,,,,,,,,,,,,,,,,,,------- %++% %-,,,,,,,,,,,,,.. | | ....,,,,,,,,,,,,,,,,,,,,,,------+# %# #@ ++++ +--,,,,,,,,,,,,,.. | | .....,,,,,,,,,,,,,,,,,,,,,,-----+ %%++% +@+----+ +--,,,,,,,,,,,,,.. | | .....,,,,,,,,,,,,,,,,,,,,,,,---%+++--+#+--------% #--,,,,,,,,,,,,.. | | ......,,,,,,,,,,,,,,,,,,,,,,--++-----%%--------- @#--,,,,,,,,,,,,.. | | .......,,,,,,,,,,,,,,,,,,,,,---------------------+@ +-++,,,,,,,,,,,,... | | ........,,,,,,,,,,,,,,,,,,,,,--------------------+ ----,,,,,,,,,,,,... | | .........,,,,,,,,,,,,,,,,,,,,----,,,------------- #+----,,,,,,,,,,,,... | | ..........,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-------+ + +---,,,,,,,,,,,,,... | | ...........,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--------+%# #---,,,,,,,,,,,,.... | | ............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,------+# @ @---,,,,,,,,,,,,.... | | .............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----+# + @--,,,,,,,,,,,,.... | | ..............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---+% %+@ %+-+ +++%-,,,,,,,,,,,..... | | ................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----% %@++ # % -----++-,,,,,,,,,,,,..... | | .................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-- ++ ---+ + +%@ %++++++------%-,,,,,,,,,,,...... | | ...................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---- -------++ +------------,,,,,,,,,,,,...... | | ....................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----------+% +--------,,,,,,,,,,,,,,,....... | | ......................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--------+# -----,,,,,,,,,,,,,,,,,,....... | | .......................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-------+ #----,,,,,,,,,,,,,,,,,,........ | | .........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----+% %#---,,,,,,,,,,,,,,,,,,,........ | | ..........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---+%+%@ %+%%--,,,,,,,,,,,,,,,,,,......... | | ............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---+-+% %----,,,,,,,,,,,,,,,,,,.......... | | .............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----+%@+---,,,,,,,,,,,,,,,,,,,.......... | | ...............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----+%----,,,,,,,,,,,,,,,,,,........... | | ................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----%+ +--,,,,,,,,,,,,,,,,,............ | | ..................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---++----,,,,,,,,,,,,,,,,,............. | | ...................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,---@-----,,,,,,,,,,,,,,,,,............. | | .....................................,,,,,,,,,,,,,,,,,,,,,,,,,,,-----,,,,,,,,,,,,,,,,,,,.............. | | .....................................,,,,,,,,,,,,,,,,,,,,,,,,,,--%,,,,,,,,,,,,,,,,,,,,............... | | .......................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,................. | | ........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.................. | | ........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,................... | | .........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.................... | | ..........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,...................... | | ............................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,........................ | | .............................................,,,,,,,,,,,,,,,,,,,,,,,,.......................... | | ................................................,,,,,,,,,,,,,,,,,............................. | | .....................................................,,,,.................................... | | ........................................................................................... | | ......................................................................................... | | ...................................................................................... | | .................................................................................... | | ................................................................................. | | .............................................................................. | | ........................................................................... | | ........................................................................ | +--------------------------------------------------------------------------------------------------------+ 102 rows in set (0.378 sec) {noformat} |
Based on the article from https://elephantdolphin.blogspot.com/2018/11/common-table-expressions-shocking.html
{code:sql} WITH RECURSIVE x(i) AS ( SELECT CAST(0 AS DECIMAL(13, 10)) UNION ALL SELECT i + 1 FROM x WHERE i < 101 ), Z(Ix, Iy, Cx, Cy, X, Y, I) AS ( SELECT Ix, Iy, X, Y, X, Y, 0 FROM (SELECT CAST(-2.2 + 0.031 * i AS DECIMAL(13, 10)) AS X, i AS Ix FROM x) AS xgen CROSS JOIN ( SELECT CAST(-1.5 + 0.031 * i AS DECIMAL(13, 10)) AS Y, i AS iY FROM x ) AS ygen UNION ALL SELECT Ix, Iy, Cx, Cy, CAST(X * X - Y * Y + Cx AS DECIMAL(13, 10)) AS X, CAST(Y * X * 2 + Cy AS DECIMAL(13, 10)), I + 1 FROM Z WHERE X * X + Y * Y < 16.0 AND I < 27 ), Zt (Ix, Iy, I) AS ( SELECT Ix, Iy, MAX(I) AS I FROM Z GROUP BY Iy, Ix ORDER BY Iy, Ix ) SELECT GROUP_CONCAT( SUBSTRING( ' .,,,-----++++%%%%@@@@#### ', GREATEST(I, 1), 1 ) ORDER BY Ix SEPARATOR '' ) AS 'Mandelbrot Set' FROM Zt GROUP BY Iy ORDER BY Iy; {code} The problem is with UNION vs UNION ALL: {noformat} MariaDB [test]> WITH RECURSIVE -> x AS (SELECT 0 as k UNION SELECT k + 1 FROM x WHERE k < 1), -> z AS -> ( SELECT k1 AS cx, k2 AS cy, k1, k2 -> FROM (SELECT k as k1 FROM x) x1 JOIN (SELECT k as k2 FROM x) y1 -> UNION -> SELECT 1,1,1,1 FROM z) -> SELECT * FROM z; +------+------+------+------+ | cx | cy | k1 | k2 | +------+------+------+------+ | 0 | 0 | 0 | 0 | | 1 | 0 | 1 | 0 | | 0 | 1 | 0 | 1 | | 1 | 1 | 1 | 1 | +------+------+------+------+ 4 rows in set (0.000 sec) ################################################ MariaDB [test]> WITH RECURSIVE -> x AS (SELECT 0 as k UNION ALL SELECT k + 1 FROM x WHERE k < 1), -> z AS -> ( SELECT k1 AS cx, k2 AS cy, k1, k2 -> FROM (SELECT k AS k1 FROM x) x1 JOIN (SELECT k AS k2 FROM x) y1 -> UNION -> SELECT 1,1,1,1 FROM z) -> SELECT * FROM z; ^CCtrl-C -- query killed. Continuing normally. ERROR 1317 (70100): Query execution was interrupted {noformat} {noformat} MariaDB [test]> WITH RECURSIVE x(i) AS ( -> SELECT CAST(0 AS DECIMAL(13, 10)) -> UNION -> SELECT i + 1 -> FROM x -> WHERE i < 101 -> ), -> Z(Ix, Iy, Cx, Cy, X, Y, I) AS ( -> SELECT Ix, Iy, X, Y, X, Y, 0 -> FROM (SELECT CAST(-2.2 + 0.031 * i AS DECIMAL(13, 10)) AS X, -> i AS Ix FROM x) AS xgen -> CROSS JOIN ( -> SELECT CAST(-1.5 + 0.031 * i AS DECIMAL(13, 10)) AS Y, -> i AS iY FROM x -> ) AS ygen -> UNION ALL -> SELECT Ix, Iy, Cx, Cy, -> CAST(X * X - Y * Y + Cx AS DECIMAL(13, 10)) AS X, -> CAST(Y * X * 2 + Cy AS DECIMAL(13, 10)), I + 1 -> FROM Z -> WHERE X * X + Y * Y < 16.0 -> AND I < 27 -> ), -> Zt (Ix, Iy, I) AS ( -> SELECT Ix, Iy, MAX(I) AS I -> FROM Z -> GROUP BY Iy, Ix -> ORDER BY Iy, Ix -> ) -> SELECT GROUP_CONCAT( -> SUBSTRING( -> ' .,,,-----++++%%%%@@@@#### ', -> GREATEST(I, 1), -> 1 -> ) ORDER BY Ix SEPARATOR '' -> ) AS 'Mandelbrot Set' -> FROM Zt -> GROUP BY Iy -> ORDER BY Iy; +--------------------------------------------------------------------------------------------------------+ | Mandelbrot Set | +--------------------------------------------------------------------------------------------------------+ | .................................................................................... | | ....................................................................................... | | ......................................................................................... | | ........................................................................................... | | ....................................................,,,,,,,,,................................. | | ................................................,,,,,,,,,,,,,,,,,,............................. | | ..............................................,,,,,,,,,,,,,,,,,,,,,,,,.......................... | | ............................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,........................ | | ..........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,...................... | | .........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.................... | | ........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,................... | | .......................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,................. | | .......................................,,,,,,,,,,,,,,,,,,,,,,,,--,,,,,,,,,,,,,,,,,,,,................ | | ......................................,,,,,,,,,,,,,,,,,,,,,,,,,,-+--,,,,,,,,,,,,,,,,,,,............... | | ....................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----,,,,,,,,,,,,,,,,,,,.............. | | ...................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,--- -----,,,,,,,,,,,,,,,,,............. | | .................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---++--++,,,,,,,,,,,,,,,,,,............ | | ................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----%++---,,,,,,,,,,,,,,,,,............ | | ..............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----+%----,,,,,,,,,,,,,,,,,,........... | | .............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----- %%+----,,,,,,,,,,,,,,,,,,.......... | | ...........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---%-+% ----,,,,,,,,,,,,,,,,,,,......... | | ..........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---+ +## %+%---,,,,,,,,,,,,,,,,,,......... | | ........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----# # +---,,,,,,,,,,,,,,,,,,........ | | .......................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-------% %-----,,,,,,,,,,,,,,,,,........ | | .....................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------+ ------,,,,,,,,,,,,,,,,,....... | | ....................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----------+@ +-----------,,,,,,,,,,,,....... | | ..................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----@-------++ ++-----------,,,,,,,,,,,,...... | | .................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--+@% ---+ +@%%@ %%+@+@%------+-,,,,,,,,,,,...... | | ................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---- # ++% % @-----++--,,,,,,,,,,,..... | | ..............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----+ % %%++ %+%@-,,,,,,,,,,,..... | | .............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----+# #% ++-,,,,,,,,,,,,.... | | ............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,------+ @---,,,,,,,,,,,,.... | | ..........,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-------++% ---,,,,,,,,,,,,.... | | .........,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--------+ + %+---,,,,,,,,,,,,,... | | ........,,,,,,,,,,,,,,,,,,,,,--------------------@ +----,,,,,,,,,,,,... | | .......,,,,,,,,,,,,,,,,,,,,,,- +-----------------+ ----,,,,,,,,,,,,... | | .......,,,,,,,,,,,,,,,,,,,,,--++------+---------+% +++--,,,,,,,,,,,,.. | | ......,,,,,,,,,,,,,,,,,,,,,,--%+-----++--------- #+-,,,,,,,,,,,,.. | | .....,,,,,,,,,,,,,,,,,,,,,,----#%++--+@ -+-----+% --,,,,,,,,,,,,.. | | .....,,,,,,,,,,,,,,,,,,,,,,-----+## ++@ + +----% +--,,,,,,,,,,,,,.. | | ....,,,,,,,,,,,,,,,,,,,,,,------+@ @ @@++++# +--,,,,,,,,,,,,,.. | | ....,,,,,,,,,,,,,,,,,,,,,-------% #++% -,,,,,,,,,,,,,.. | | ...,,,,,,,,,,,,,,,,,,,,,------++%# %%@ %-,,,,,,,,,,,,,,. | | ...,,,,,,,,,,,,,,,,,,,--------+ % +--,,,,,,,,,,,,,,. | | ...,,,,,,,,,,,,,,,,,,-----+--++@ # --,,,,,,,,,,,,,,. | | ..,,,,,,,,,,,,,,,,,-------%+++% @--,,,,,,,,,,,,,,,. | | ..,,,,,,,,,,,-------------+ @#@ ---,,,,,,,,,,,,,,,. | | ..,,,,,,,,,---@--------@-+% +---,,,,,,,,,,,,,,,. | | ..,,,,,------- +-++++-+%%% +----,,,,,,,,,,,,,,,. | | ..,,,,,,------%--------++% +----,,,,,,,,,,,,,,,. | | ..,,,,,,,,,,--+----------++# ---,,,,,,,,,,,,,,,. | | ..,,,,,,,,,,,,------------+@@@% +--,,,,,,,,,,,,,,,. | | ..,,,,,,,,,,,,,,,,,------- +++% %--,,,,,,,,,,,,,,,. | | ...,,,,,,,,,,,,,,,,,,---------+@ @ --,,,,,,,,,,,,,,. | | ...,,,,,,,,,,,,,,,,,,,,------- # %@ +--,,,,,,,,,,,,,,. | | ...,,,,,,,,,,,,,,,,,,,,,-------++@ %+ %-,,,,,,,,,,,,,,. | | ....,,,,,,,,,,,,,,,,,,,,,------- %++% %-,,,,,,,,,,,,,.. | | ....,,,,,,,,,,,,,,,,,,,,,,------+# %# #@ ++++ +--,,,,,,,,,,,,,.. | | .....,,,,,,,,,,,,,,,,,,,,,,-----+ %%++% +@+----+ +--,,,,,,,,,,,,,.. | | .....,,,,,,,,,,,,,,,,,,,,,,,---%+++--+#+--------% #--,,,,,,,,,,,,.. | | ......,,,,,,,,,,,,,,,,,,,,,,--++-----%%--------- @#--,,,,,,,,,,,,.. | | .......,,,,,,,,,,,,,,,,,,,,,---------------------+@ +-++,,,,,,,,,,,,... | | ........,,,,,,,,,,,,,,,,,,,,,--------------------+ ----,,,,,,,,,,,,... | | .........,,,,,,,,,,,,,,,,,,,,----,,,------------- #+----,,,,,,,,,,,,... | | ..........,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-------+ + +---,,,,,,,,,,,,,... | | ...........,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--------+%# #---,,,,,,,,,,,,.... | | ............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,------+# @ @---,,,,,,,,,,,,.... | | .............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----+# + @--,,,,,,,,,,,,.... | | ..............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---+% %+@ %+-+ +++%-,,,,,,,,,,,..... | | ................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----% %@++ # % -----++-,,,,,,,,,,,,..... | | .................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-- ++ ---+ + +%@ %++++++------%-,,,,,,,,,,,...... | | ...................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---- -------++ +------------,,,,,,,,,,,,...... | | ....................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----------+% +--------,,,,,,,,,,,,,,,....... | | ......................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--------+# -----,,,,,,,,,,,,,,,,,,....... | | .......................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-------+ #----,,,,,,,,,,,,,,,,,,........ | | .........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----+% %#---,,,,,,,,,,,,,,,,,,,........ | | ..........................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---+%+%@ %+%%--,,,,,,,,,,,,,,,,,,......... | | ............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---+-+% %----,,,,,,,,,,,,,,,,,,.......... | | .............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----+%@+---,,,,,,,,,,,,,,,,,,,.......... | | ...............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----+%----,,,,,,,,,,,,,,,,,,........... | | ................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,-----%+ +--,,,,,,,,,,,,,,,,,............ | | ..................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---++----,,,,,,,,,,,,,,,,,............. | | ...................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,---@-----,,,,,,,,,,,,,,,,,............. | | .....................................,,,,,,,,,,,,,,,,,,,,,,,,,,,-----,,,,,,,,,,,,,,,,,,,.............. | | .....................................,,,,,,,,,,,,,,,,,,,,,,,,,,--%,,,,,,,,,,,,,,,,,,,,............... | | .......................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,................. | | ........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.................. | | ........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,................... | | .........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.................... | | ..........................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,...................... | | ............................................,,,,,,,,,,,,,,,,,,,,,,,,,,,,........................ | | .............................................,,,,,,,,,,,,,,,,,,,,,,,,.......................... | | ................................................,,,,,,,,,,,,,,,,,............................. | | .....................................................,,,,.................................... | | ........................................................................................... | | ......................................................................................... | | ...................................................................................... | | .................................................................................... | | ................................................................................. | | .............................................................................. | | ........................................................................... | | ........................................................................ | +--------------------------------------------------------------------------------------------------------+ 102 rows in set (0.378 sec) {noformat} |
Status | Confirmed [ 10101 ] | In Progress [ 3 ] |
Fix Version/s | 10.2.19 [ 23207 ] | |
Fix Version/s | 10.2 [ 14601 ] | |
Fix Version/s | 10.3 [ 22126 ] | |
Resolution | Fixed [ 1 ] | |
Status | In Progress [ 3 ] | Closed [ 6 ] |
Workflow | MariaDB v3 [ 90473 ] | MariaDB v4 [ 155163 ] |