WITH RECURSIVE
    -- Grid of points for which the Mandelbrot set will be approximated
    xaxis(x) as (VALUES(-2.0) UNION ALL SELECT x+0.05 FROM xaxis WHERE x < 1.2),
    yaxis(y) as (VALUES(-1.0) UNION ALL SELECT y+0.10 FROM yaxis WHERE y < 1.0),

    -- Mandelbrot iterations
    m(iter, cx, cy, x, y) AS (
        SELECT 0, x, y, 0.0, 0.0 FROM xaxis, yaxis
        UNION ALL
        SELECT iter + 1, cx, cy, x*x - y*y + cx, x*y*(x+y) + cy FROM m
        WHERE (x*x + y*y) < 4.0 AND iter < 28

    ),

    m2(iter, cx, cy) AS (
        SELECT max(iter), cx, cy FROM m GROUP BY cx, cy
    ),

    -- ASCII representation line per line
    a(t) AS (
        SELECT group_concat(substr(' .+*#', 1 + min(iter/7, 4), 1), '')
        FROM m2 GROUP BY cy
    )

-- All lines
SELECT group_concat(rtrim(t), x'0a') FROM a;