From 3de3e03ab3f4a0d95adbbd0fbdf58391a50ce4c3 Mon Sep 17 00:00:00 2001 From: Bernd Bestel Date: Sun, 21 Oct 2018 15:02:52 +0200 Subject: [PATCH] Created database logic for nested recipes (references #77) --- migrations/0043.sql | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 migrations/0043.sql diff --git a/migrations/0043.sql b/migrations/0043.sql new file mode 100644 index 00000000..795ce707 --- /dev/null +++ b/migrations/0043.sql @@ -0,0 +1,25 @@ +CREATE TABLE recipes_nestings ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, + recipe_id INTEGER NOT NULL, + includes_recipe_id INTEGER NOT NULL, + row_created_timestamp DATETIME DEFAULT (datetime('now', 'localtime')), + + UNIQUE(recipe_id, includes_recipe_id) +); + +CREATE VIEW recipes_nestings_resolved +AS +WITH RECURSIVE r1(recipe_id, includes_recipe_id) +AS ( + SELECT id, id + FROM recipes + + UNION ALL + + SELECT rn.recipe_id, r1.includes_recipe_id + FROM recipes_nestings rn, r1 r1 + WHERE rn.includes_recipe_id = r1.recipe_id + LIMIT 100 -- This is just a safety limit to prevent infinite loops due to infinite nested recipes +) +SELECT * +FROM r1;