diff --git a/devdocs/todo.txt b/devdocs/todo.txt index 19cbd493..233b1769 100644 --- a/devdocs/todo.txt +++ b/devdocs/todo.txt @@ -16,44 +16,39 @@ https://www.postgresqltutorial.com/plpgsql-loop-statements/ -- DROP PROCEDURE public.pdoindex(text[], bigint, integer, boolean); -CREATE OR REPLACE PROCEDURE public.pdoindex( - words text[], - objectid bigint, - objecttype integer, - isupdate boolean DEFAULT false) +CREATE OR REPLACE PROCEDURE public.aydosearchindex( + wordlist text[], + ayobjectid bigint, + ayobjecttype integer) LANGUAGE 'plpgsql' AS $BODY$DECLARE s text; wordid bigint; BEGIN - IF objectid=0 THEN - RAISE EXCEPTION 'Bad object id --> %', objectid; + IF ayobjectid=0 THEN + RAISE EXCEPTION 'Bad object id --> %', ayobjectid; END IF; - IF objecttype=0 THEN - RAISE EXCEPTION 'Bad object type --> %', objecttype; + IF ayobjecttype=0 THEN + RAISE EXCEPTION 'Bad object type --> %', ayobjecttype; END IF; - --- insert into asearchdictionary (word) values('{0}') on conflict (word) do update set word=excluded.word returning * --- iterate text in loop -FOREACH s IN ARRAY words +delete from asearchkey where objectid=ayobjectid and objecttype=ayobjecttype; + +FOREACH s IN ARRAY wordlist LOOP insert into asearchdictionary (word) values(s) on conflict (word) do update set word=excluded.word returning id into wordid; - insert into asearchkey (wordid,objectid,objecttype) values(wordid,objectid,objecttype); - --RAISE info 'word is %', s; - --RAISE info 'word id is %', wordid; + insert into asearchkey (wordid,objectid,objecttype) values(wordid,ayobjectid,ayobjecttype); END LOOP; END; $BODY$; - +------ +call aydosearchindex(ARRAY['sun','mon','tue','wed','thu','fri','sat'],3,3) ------- -ALTER FUNCTION public.doindex(text[], bigint, integer, boolean) - OWNER TO postgres; todo: Search confirm indexes are actually being used diff --git a/server/AyaNova/util/AySchema.cs b/server/AyaNova/util/AySchema.cs index 404274c0..bca48b5b 100644 --- a/server/AyaNova/util/AySchema.cs +++ b/server/AyaNova/util/AySchema.cs @@ -172,6 +172,36 @@ namespace AyaNova.Util //search does a lot of hits on searchkey looking for the wordid and optionally objecttype await ExecQueryAsync("CREATE INDEX asearchkey_wordid_otype_idx ON asearchkey (wordid, objecttype);"); + //Search indexing stored procedure + await ExecQueryAsync(@"CREATE OR REPLACE PROCEDURE public.aydosearchindex( + wordlist text[], + ayobjectid bigint, + ayobjecttype integer) +LANGUAGE 'plpgsql' + +AS $BODY$DECLARE + s text; + wordid bigint; +BEGIN + IF ayobjectid=0 THEN + RAISE EXCEPTION 'Bad object id --> %', ayobjectid; + END IF; + + IF ayobjecttype=0 THEN + RAISE EXCEPTION 'Bad object type --> %', ayobjecttype; + END IF; + + +delete from asearchkey where objectid=ayobjectid and objecttype=ayobjecttype; + +FOREACH s IN ARRAY wordlist + LOOP + insert into asearchdictionary (word) values(s) on conflict (word) do update set word=excluded.word returning id into wordid; + insert into asearchkey (wordid,objectid,objecttype) values(wordid,ayobjectid,ayobjecttype); + END LOOP; +END; +$BODY$;"); + //create translation text tables await ExecQueryAsync("CREATE TABLE atranslation (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(255) not null, stock bool, cjkindex bool default false)"); //LOOKAT: I don't think this is doing anything: