aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--examples/circle.sql25
-rw-r--r--examples/gradient.sql12
-rwxr-xr-ximage.sh4
-rw-r--r--justfile28
-rw-r--r--setup.sql45
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;
diff --git a/image.sh b/image.sh
index b697688..80dba42 100755
--- a/image.sh
+++ b/image.sh
@@ -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 '|' ' '
diff --git a/justfile b/justfile
index 11043e7..b67c6f8 100644
--- a/justfile
+++ b/justfile
@@ -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
diff --git a/setup.sql b/setup.sql
index 254beaa..d5d8ce2 100644
--- a/setup.sql
+++ b/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);