2 Module : Gargantext.Database.Triggers.Nodes
3 Description : Triggers configuration
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
10 Triggers on Nodes table.
14 {-# LANGUAGE QuasiQuotes #-}
15 {-# LANGUAGE NoImplicitPrelude #-}
16 {-# LANGUAGE OverloadedStrings #-}
17 {-# LANGUAGE RankNTypes #-}
19 module Gargantext.Database.Triggers.Nodes
22 import Database.PostgreSQL.Simple.SqlQQ (sql)
23 -- import Database.PostgreSQL.Simple.Types (Values(..), QualifiedIdentifier(..))
24 import Gargantext.Database.Config (nodeTypeId)
25 import Gargantext.Database.Types.Node -- (ListId, CorpusId, NodeId)
26 import Gargantext.Database.Utils (Cmd, execPGSQuery)
27 import Gargantext.Prelude
28 import qualified Database.PostgreSQL.Simple as DPS
31 triggerSearchUpdate :: Cmd err Int64
32 triggerSearchUpdate = execPGSQuery query ( nodeTypeId NodeDocument
33 , nodeTypeId NodeDocument
34 , nodeTypeId NodeContact
39 CREATE OR REPLACE FUNCTION public.search_update()
42 IF new.typename = ? AND new.hyperdata @> '{"language_iso2":"EN"}' THEN
43 new.search := to_tsvector( 'english' , (new.hyperdata ->> 'title') || ' ' || (new.hyperdata ->> 'abstract'));
45 ELSIF new.typename = ? AND new.hyperdata @> '{"language_iso2":"FR"}' THEN
46 new.search := to_tsvector( 'french' , (new.hyperdata ->> 'title') || ' ' || (new.hyperdata ->> 'abstract'));
48 ELSIF new.typename = ? THEN
49 new.search := to_tsvector( 'french' , (new.hyperdata ->> 'prenom')
50 || ' ' || (new.hyperdata ->> 'nom')
51 || ' ' || (new.hyperdata ->> 'fonction')
54 new.search := to_tsvector( 'english' , new.name);
60 ALTER FUNCTION public.search_update() OWNER TO gargantua;
62 CREATE TRIGGER search_update_trigger
63 BEFORE INSERT OR UPDATE
65 EXECUTE PROCEDURE search_update();
67 -- Initialize index with already existing data
68 UPDATE nodes SET hyperdata = hyperdata;