CREATE TABLE IF NOT EXISTS resources( id TEXT NOT NULL PRIMARY KEY, parent TEXT REFERENCES resources (id), name TEXT NOT NULL, dir BOOLEAN NOT NULL CHECK ("dir" IN (0, 1)), created DATETIME, modified DATETIME, deleted BOOLEAN NOT NULL DEFAULT 0 CHECK ("deleted" IN (0, 1)), content_size INTEGER NOT NULL DEFAULT 0, content_sha256 TEXT NOT NULL DEFAULT '', content_type TEXT NOT NULL DEFAULT '', permissions TEXT, publinks TEXT, last_refresh DATETIME ); parents: WITH RECURSIVE parents(id, parent, name, permissions) AS ( SELECT id, parent, name, permissions FROM resources WHERE id = :id UNION ALL SELECT r.id, r.parent, r.name, r.permissions FROM resources r JOIN parents p ON r.id = p.parent ) SELECT * from parents;