|
| 1 | +CREATE MIGRATION m1xzy4deu3w7kduilieoiydxysopymo7skj4sftggjen4vi3og6kaq |
| 2 | + ONTO m1ydhle3dwjru34saeiidf5dyepbesugdwttrvnsyxhezpme5bfqga |
| 3 | +{ |
| 4 | + CREATE MODULE Scripture IF NOT EXISTS; |
| 5 | + CREATE TYPE Scripture::Collection { |
| 6 | + CREATE REQUIRED PROPERTY label: std::str { |
| 7 | + SET readonly := true; |
| 8 | + }; |
| 9 | + }; |
| 10 | + CREATE TYPE Scripture::VerseRange { |
| 11 | + CREATE REQUIRED PROPERTY label: std::str { |
| 12 | + SET readonly := true; |
| 13 | + }; |
| 14 | + }; |
| 15 | + ALTER TYPE Scripture::Collection { |
| 16 | + CREATE MULTI LINK verses: Scripture::VerseRange { |
| 17 | + ON SOURCE DELETE DELETE TARGET IF ORPHAN; |
| 18 | + SET readonly := true; |
| 19 | + }; |
| 20 | + }; |
| 21 | + CREATE TYPE Scripture::Verse { |
| 22 | + CREATE REQUIRED PROPERTY verseId: std::int16 { |
| 23 | + SET readonly := true; |
| 24 | + CREATE CONSTRAINT std::max_value(31101); |
| 25 | + CREATE CONSTRAINT std::min_value(0); |
| 26 | + }; |
| 27 | + CREATE REQUIRED PROPERTY book: std::str { |
| 28 | + SET readonly := true; |
| 29 | + }; |
| 30 | + CREATE REQUIRED PROPERTY chapter: std::int16 { |
| 31 | + SET readonly := true; |
| 32 | + CREATE CONSTRAINT std::max_value(150); |
| 33 | + CREATE CONSTRAINT std::min_value(1); |
| 34 | + }; |
| 35 | + CREATE REQUIRED PROPERTY verse: std::int16 { |
| 36 | + SET readonly := true; |
| 37 | + CREATE CONSTRAINT std::max_value(176); |
| 38 | + CREATE CONSTRAINT std::min_value(1); |
| 39 | + }; |
| 40 | + CREATE PROPERTY label := (((((.book ++ ' ') ++ <std::str>.chapter) ++ ':') ++ <std::str>.verse)); |
| 41 | + }; |
| 42 | + ALTER TYPE Scripture::VerseRange { |
| 43 | + CREATE REQUIRED LINK `end`: Scripture::Verse { |
| 44 | + ON SOURCE DELETE DELETE TARGET IF ORPHAN; |
| 45 | + SET readonly := true; |
| 46 | + }; |
| 47 | + CREATE REQUIRED LINK `start`: Scripture::Verse { |
| 48 | + ON SOURCE DELETE DELETE TARGET IF ORPHAN; |
| 49 | + SET readonly := true; |
| 50 | + }; |
| 51 | + CREATE PROPERTY ids := (std::range(<std::int32>.`start`.verseId, <std::int32>.`end`.verseId, inc_upper := true)); |
| 52 | + }; |
| 53 | + ALTER TYPE Scripture::Collection { |
| 54 | + CREATE PROPERTY ids := (std::multirange(std::array_agg(.verses.ids))); |
| 55 | + }; |
| 56 | + ALTER TYPE default::Producible { |
| 57 | + CREATE LINK scripture: Scripture::Collection { |
| 58 | + ON SOURCE DELETE DELETE TARGET IF ORPHAN; |
| 59 | + }; |
| 60 | + CREATE TRIGGER denyEmptyScriptureCollection |
| 61 | + AFTER UPDATE, INSERT |
| 62 | + FOR EACH DO (std::assert(EXISTS (__new__.scripture.verses), message := '`Producible.scripture` should have a `Scripture::Collection` with verses or be null/empty-set')); |
| 63 | + }; |
| 64 | + ALTER TYPE default::Producible { |
| 65 | + DROP PROPERTY scriptureReferences; |
| 66 | + }; |
| 67 | +}; |
0 commit comments