keys: wide padded key style on windows >1440x996 px
[sheet.git] / tools / word.pg.sql
index d18a99cb4b3172f464f5302832957e910ba9a678..4e5aca6d12a9017e21372e5b3d2b860cd9916af3 100644 (file)
@@ -13,14 +13,16 @@ CREATE TABLE word (
        lang       text        NOT NULL DEFAULT 'en',
        cat        integer              REFERENCES word (id),
        ref        integer              REFERENCES word (id),
        lang       text        NOT NULL DEFAULT 'en',
        cat        integer              REFERENCES word (id),
        ref        integer              REFERENCES word (id),
-       prio       smallint    NOT NULL DEFAULT '1',
+       prio       smallint             DEFAULT '1'
+                                       CHECK (prio >= 0 OR ref IS NOT NULL),
        grade      integer,
        cover      boolean     NOT NULL DEFAULT FALSE,
        grade      integer,
        cover      boolean     NOT NULL DEFAULT FALSE,
-       source     text,
-       thumb      text[],
+       image      jsonb                CHECK (image->>'source' ~ '^https?://'
+                                          AND jsonb_typeof(image->'convert') = 'array'),
        wptitle    text,
        wptitle    text,
-       created    timestamptz          DEFAULT now(),
+       story      text,
        creator    integer              REFERENCES login (id),
        creator    integer              REFERENCES login (id),
+       created    timestamptz          DEFAULT now(),
        updated    timestamptz,
        id         serial      NOT NULL PRIMARY KEY
 );
        updated    timestamptz,
        id         serial      NOT NULL PRIMARY KEY
 );
@@ -28,24 +30,54 @@ CREATE TABLE word (
 COMMENT ON COLUMN word.form       IS 'preferred textual representation';
 COMMENT ON COLUMN word.alt        IS 'alternate forms with equivalent meaning';
 COMMENT ON COLUMN word.lang       IS 'ISO 639 language code matching wikipedia subdomain';
 COMMENT ON COLUMN word.form       IS 'preferred textual representation';
 COMMENT ON COLUMN word.alt        IS 'alternate forms with equivalent meaning';
 COMMENT ON COLUMN word.lang       IS 'ISO 639 language code matching wikipedia subdomain';
-COMMENT ON COLUMN word.cat        IS 'hierarchical classification';
+COMMENT ON COLUMN word.cat        IS 'primary hierarchical classification';
 COMMENT ON COLUMN word.ref        IS 'reference to equivalent en translation';
 COMMENT ON COLUMN word.prio       IS 'difficulty level or importance; lower values have precedence';
 COMMENT ON COLUMN word.grade      IS 'ascending hierarchical order, preceding default alphabetical';
 COMMENT ON COLUMN word.cover      IS 'highlight if selected';
 COMMENT ON COLUMN word.ref        IS 'reference to equivalent en translation';
 COMMENT ON COLUMN word.prio       IS 'difficulty level or importance; lower values have precedence';
 COMMENT ON COLUMN word.grade      IS 'ascending hierarchical order, preceding default alphabetical';
 COMMENT ON COLUMN word.cover      IS 'highlight if selected';
-COMMENT ON COLUMN word.source     IS 'URI of downloaded image';
-COMMENT ON COLUMN word.thumb      IS 'ImageMagick convert options to create thumbnail from source image';
+COMMENT ON COLUMN word.image      IS 'metadata of illustrations, including downloaded URI and ImageMagick convert options';
 COMMENT ON COLUMN word.wptitle    IS 'reference Wikipedia article';
 COMMENT ON COLUMN word.wptitle    IS 'reference Wikipedia article';
+COMMENT ON COLUMN word.story      IS 'paragraph defining or describing the entity, wikipedia intro';
 COMMENT ON COLUMN word.updated    IS 'last significant change';
 COMMENT ON COLUMN word.creator    IS 'user responsible for initial submit';
 
 COMMENT ON COLUMN word.updated    IS 'last significant change';
 COMMENT ON COLUMN word.creator    IS 'user responsible for initial submit';
 
+CREATE TABLE kind (
+       word       integer     NOT NULL REFERENCES word (id),
+       cat        integer     NOT NULL REFERENCES word (id),
+                                       UNIQUE (word, cat),
+       truth      smallint    NOT NULL DEFAULT '50',
+       creator    integer              REFERENCES login (id),
+       created    timestamptz          DEFAULT now(),
+       updated    timestamptz,
+       id         serial      NOT NULL PRIMARY KEY
+);
+
+COMMENT ON COLUMN kind.truth      IS 'link validity ranging from 0 (never) to 100 (always)';
+
 CREATE OR REPLACE FUNCTION exportform(word) RETURNS text AS $$
        SELECT concat(
 CREATE OR REPLACE FUNCTION exportform(word) RETURNS text AS $$
        SELECT concat(
-               $1.prio || CASE WHEN $1.cover THEN 'c' ELSE '' END || ':',
+               $1.id, ':',
+               $1.prio, CASE WHEN $1.cover THEN 'c' ELSE '' END, ':',
                array_to_string($1.form || $1.alt, '/')
        );
 $$ LANGUAGE SQL IMMUTABLE;
 
                array_to_string($1.form || $1.alt, '/')
        );
 $$ LANGUAGE SQL IMMUTABLE;
 
+CREATE OR REPLACE VIEW _word_ref AS
+       SELECT
+               r.form, r.alt, r.lang,
+               coalesce(r.cat,     w.cat    ) cat, --TODO translate w?
+               coalesce(r.ref,     r.id     ) "ref",
+               coalesce(r.prio,    w.prio   ) prio,
+               coalesce(r.grade,   w.grade  ) grade,
+               coalesce(r.cover,   w.cover  ) cover,
+               coalesce(r.image,   w.image  ) image,
+               coalesce(r.wptitle, w.wptitle) wptitle,
+               coalesce(r.story,   w.story  ) story,
+               r.creator, r.created, r.updated,
+               CASE WHEN r.image IS NULL THEN w.id ELSE r.id END id -- image id
+       FROM word r
+       LEFT JOIN word w ON w.id = r.ref;
+
 CREATE OR REPLACE VIEW _cat_words AS
        SELECT exportform(word.*) form, sub.*, word.lang, word.ref
        FROM word RIGHT JOIN (
 CREATE OR REPLACE VIEW _cat_words AS
        SELECT exportform(word.*) form, sub.*, word.lang, word.ref
        FROM word RIGHT JOIN (