X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/ac35af3aef24ba0b644f85b0fe98492e9065af1d..HEAD:/tools/word.pg.sql diff --git a/tools/word.pg.sql b/tools/word.pg.sql index 6647370..9f972dc 100644 --- a/tools/word.pg.sql +++ b/tools/word.pg.sql @@ -4,7 +4,7 @@ CREATE TABLE login ( email text, fullname text, editlang text[], - id serial NOT NULL PRIMARY KEY + id integer NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY ); CREATE TABLE word ( @@ -24,7 +24,7 @@ CREATE TABLE word ( creator integer REFERENCES login (id), created timestamptz DEFAULT now(), updated timestamptz, - id serial NOT NULL PRIMARY KEY + id integer NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY ); COMMENT ON COLUMN word.form IS 'preferred textual representation'; @@ -49,19 +49,11 @@ CREATE TABLE kind ( creator integer REFERENCES login (id), created timestamptz DEFAULT now(), updated timestamptz, - id serial NOT NULL PRIMARY KEY + id integer NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY ); 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( - coalesce($1.ref, $1.id), ':', - $1.prio, CASE WHEN $1.cover THEN 'c' ELSE '' END, ':', - array_to_string($1.form || $1.alt, '/') - ); -$$ LANGUAGE SQL IMMUTABLE; - CREATE OR REPLACE VIEW _word_ref AS SELECT r.form, r.alt, r.lang, @@ -81,18 +73,19 @@ CREATE OR REPLACE VIEW _word_ref AS CREATE OR REPLACE VIEW _word_tree AS WITH RECURSIVE r AS ( - SELECT w.ref, w.lang, w.cat, w.grade, NULL::int trans + SELECT w.ref, w.lang, w.cat, w.grade, w.form, NULL::int trans FROM _word_ref w UNION ALL SELECT r.ref, r.lang, w.cat, CASE WHEN w.lang=r.lang OR t.lang=r.lang THEN r.grade ELSE w.grade END, + CASE WHEN w.lang=r.lang OR t.lang=r.lang THEN r.form ELSE w.form END, CASE WHEN w.lang=r.lang OR t.lang=r.lang THEN w.id END FROM r JOIN word w ON w.id = r.cat LEFT JOIN word t ON w.id = t.ref AND t.lang = r.lang WHERE r.trans IS NULL ) - SELECT ref, lang, trans cat, grade FROM r WHERE trans IS NOT NULL - ORDER BY cat, grade, ref; + SELECT ref, lang, trans cat, grade, form FROM r WHERE trans IS NOT NULL + ORDER BY cat, grade, form, ref; CREATE OR REPLACE VIEW _word AS SELECT @@ -101,10 +94,3 @@ CREATE OR REPLACE VIEW _word AS w.* FROM _word_ref w ; - -CREATE OR REPLACE VIEW _cat_words AS - SELECT exportform(word.*) form, sub.*, word.lang, word.ref - FROM word RIGHT JOIN ( - SELECT cat id, array_agg(exportform(word.*) ORDER BY grade, form) forms - FROM word WHERE ref IS NULL GROUP BY cat - ) sub USING (id);