diff options
| author | Akshay Nair <phenax5@gmail.com> | 2026-06-02 22:24:49 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2026-06-02 22:24:49 +0530 |
| commit | 8c62edb87433bd0ac93fdef4585582990513236b (patch) | |
| tree | 4b48ceb0f0def6ec7ce356d7b83b4e1eb3dd86e0 | |
| parent | 49bc31720ab6206980cda95a0a30a44e7f882fcc (diff) | |
| download | sqlite-creative-coding-8c62edb87433bd0ac93fdef4585582990513236b.tar.gz sqlite-creative-coding-8c62edb87433bd0ac93fdef4585582990513236b.zip | |
Add gradient example
| -rw-r--r-- | examples/circle.sql | 25 | ||||
| -rw-r--r-- | examples/gradient.sql | 12 | ||||
| -rwxr-xr-x | image.sh | 4 | ||||
| -rw-r--r-- | justfile | 28 | ||||
| -rw-r--r-- | setup.sql | 45 |
5 files changed, 36 insertions, 78 deletions
diff --git a/examples/circle.sql b/examples/circle.sql deleted file mode 100644 index 73e7118..0000000 --- a/examples/circle.sql +++ /dev/null @@ -1,25 +0,0 @@ -CREATE TEMP TABLE variables(name TEXT PRIMARY KEY, value Text); - -INSERT INTO images (width, height) VALUES (6, 6) RETURNING id; -INSERT INTO variables VALUES ('image_id', last_insert_rowid()); - -WITH RECURSIVE - image_id AS (SELECT value FROM variables WHERE name = 'image_id'), - horizontal(x) AS ( - SELECT width FROM images WHERE id = (SELECT * FROM image_id) - UNION ALL - SELECT x - 1 FROM horizontal - WHERE x > 1 - ), - vertical(y) AS ( - SELECT height FROM images WHERE id = (SELECT * FROM image_id) - UNION ALL - SELECT y - 1 FROM vertical - WHERE y > 1 - ), - pixels_temp(x, y, r, g, b) AS ( - SELECT x, y, 255, 0, 0 FROM vertical, horizontal - ) -INSERT INTO pixels (image_id, x, y, r, g, b) SELECT (SELECT * FROM image_id), x, y, r, g, b FROM pixels_temp; - -DROP TABLE variables; diff --git a/examples/gradient.sql b/examples/gradient.sql new file mode 100644 index 0000000..9aa9010 --- /dev/null +++ b/examples/gradient.sql @@ -0,0 +1,12 @@ +INSERT INTO images (id, width, height) VALUES ('gradient', 200, 200) RETURNING id; + +WITH RECURSIVE + width AS (SELECT width FROM images WHERE id = 'gradient'), + height AS (SELECT height FROM images WHERE id = 'gradient'), + horizontal(x) AS + (SELECT * FROM width UNION ALL SELECT x - 1 FROM horizontal WHERE x > 1), + vertical(y) AS + (SELECT * FROM height UNION ALL SELECT y - 1 FROM vertical WHERE y > 1), + _pixels(x, y, r, g, b) AS + (SELECT x, y, mod(x, 255), mod(y, 255), 100 FROM vertical, horizontal) +INSERT INTO pixels (image_id, x, y, r, g, b) SELECT 'gradient', x, y, r, g, b FROM _pixels; @@ -8,6 +8,6 @@ db() { sqlite3 -list "$DB" "$@"; } image_id="$1" echo "P3" -db "SELECT width, height FROM images WHERE id=$image_id" | awk -F'|' '{ print $1 " " $2 }' +db "SELECT width, height FROM images WHERE id='$image_id'" | awk -F'|' '{ print $1 " " $2 }' echo "255" -db "SELECT r,g,b FROM pixels WHERE image_id=$image_id ORDER BY y ASC, x ASC" | tr '|' ' ' +db "SELECT r,g,b FROM pixels WHERE image_id='$image_id' ORDER BY y ASC, x ASC" | tr '|' ' ' @@ -1,14 +1,24 @@ -setup: setup-db +DB := "fun.db" -run file *args: setup-db - sqlite3 fun.db {{args}} < {{file}} +setup: reset-db -image image_id: - ./image.sh {{image_id}} | magick display -resize 500% - +run file *args: + sqlite3 "{{DB}}" {{args}} < "{{file}}" + +image file *args: + #!/usr/bin/env sh + set -eu + image_id=$(just run "{{file}}" {{args}}) + just show-image "$image_id" + +show-image image_id: + #!/usr/bin/env sh + echo "Displaying $image_id" 1>&2 + ./image.sh {{image_id}} | magick display - repl *args: - rlwrap sqlite3 fun.db {{args}} + rlwrap sqlite3 "{{DB}}" {{args}} -setup-db: - rm fun.db - sqlite3 fun.db < setup.sql +reset-db: + rm "{{DB}}" + sqlite3 "{{DB}}" < setup.sql @@ -1,15 +1,15 @@ PRAGMA foreign_keys = ON; -PRAGMA temp_store = 2; +PRAGMA temp_store = MEMORY; CREATE TABLE images ( - id INTEGER PRIMARY KEY AUTOINCREMENT, + id TEXT PRIMARY KEY, width INTEGER NOT NULL, height INTEGER NOT NULL ); CREATE TABLE pixels ( id INTEGER PRIMARY KEY AUTOINCREMENT, - image_id INTEGER NOT NULL, + image_id TEXT NOT NULL, x INTEGER NOT NULL, y INTEGER NOT NULL, r INTEGER NOT NULL CHECK(r >= 0 AND r <= 255), @@ -18,42 +18,3 @@ CREATE TABLE pixels ( FOREIGN KEY(image_id) REFERENCES images(id), UNIQUE(image_id, x, y) ); - -INSERT INTO images (id, width, height) VALUES (1, 6, 6); - -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 1, 1, 0, 255, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 2, 1, 0, 255, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 3, 1, 0, 255, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 4, 1, 0, 255, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 5, 1, 0, 255, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 6, 1, 0, 255, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 1, 2, 0, 255, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 2, 2, 0, 255, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 3, 2, 0, 255, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 4, 2, 255, 0, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 5, 2, 255, 0, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 6, 2, 255, 0, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 1, 3, 255, 0, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 2, 3, 255, 0, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 3, 3, 255, 0, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 4, 3, 255, 0, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 5, 3, 255, 0, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 6, 3, 255, 0, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 1, 4, 255, 0, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 2, 4, 255, 0, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 3, 4, 255, 0, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 4, 4, 255, 0, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 5, 4, 255, 0, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 6, 4, 255, 0, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 1, 5, 255, 0, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 2, 5, 255, 0, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 3, 5, 255, 0, 0); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 4, 5, 0, 0, 255); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 5, 5, 0, 0, 255); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 6, 5, 0, 0, 255); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 1, 6, 0, 0, 255); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 2, 6, 0, 0, 255); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 3, 6, 0, 0, 255); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 4, 6, 0, 0, 255); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 5, 6, 0, 0, 255); -INSERT INTO pixels (image_id, x, y, r, g, b) VALUES (1, 6, 6, 0, 0, 255); |
