2 Module : Gargantext.Database.Node.Document.Add
3 Description : Importing context of texts (documents)
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
10 Add Documents/Contact to a Corpus/Annuaire.
13 ------------------------------------------------------------------------
14 {-# LANGUAGE DeriveDataTypeable #-}
15 {-# LANGUAGE DeriveGeneric #-}
16 {-# LANGUAGE FlexibleInstances #-}
17 {-# LANGUAGE NoImplicitPrelude #-}
18 {-# LANGUAGE OverloadedStrings #-}
19 {-# LANGUAGE QuasiQuotes #-}
20 {-# LANGUAGE RankNTypes #-}
21 {-# LANGUAGE TypeSynonymInstances #-}
22 ------------------------------------------------------------------------
23 module Gargantext.Database.Node.Document.Add where
26 import Data.ByteString.Internal (ByteString)
27 import Data.Typeable (Typeable)
28 import Database.PostgreSQL.Simple (Query, Only(..))
29 import Database.PostgreSQL.Simple.SqlQQ
30 import Database.PostgreSQL.Simple.ToField (toField)
31 import Database.PostgreSQL.Simple.ToRow (ToRow(..))
32 import Database.PostgreSQL.Simple.Types (Values(..), QualifiedIdentifier(..))
34 import Data.Text (Text)
36 import Gargantext.Database.Utils (Cmd, runPGSQuery, formatPGSQuery)
37 import Gargantext.Database.Types.Node
38 import Gargantext.Prelude
40 import GHC.Generics (Generic)
41 ---------------------------------------------------------------------------
44 add :: ParentId -> [NodeId] -> Cmd err [Only Int]
45 add pId ns = runPGSQuery queryAdd (Only $ Values fields inputData)
47 fields = map (\t-> QualifiedIdentifier Nothing t) inputSqlTypes
48 inputData = prepare pId ns
50 add_debug :: ParentId -> [NodeId] -> Cmd err ByteString
51 add_debug pId ns = formatPGSQuery queryAdd (Only $ Values fields inputData)
53 fields = map (\t-> QualifiedIdentifier Nothing t) inputSqlTypes
54 inputData = prepare pId ns
58 -- | Input Tables: types of the tables
59 inputSqlTypes :: [Text]
60 inputSqlTypes = ["int4","int4","bool","bool"]
62 -- | SQL query to add documents
63 -- TODO return id of added documents only
66 WITH input_rows(node1_id,node2_id, favorite, delete) AS (?)
67 INSERT INTO nodes_nodes (node1_id, node2_id, favorite, delete)
68 SELECT * FROM input_rows
69 ON CONFLICT (node1_id, node2_id) DO NOTHING -- on unique index
74 prepare :: ParentId -> [NodeId] -> [InputData]
75 prepare pId ns = map (\nId -> InputData pId nId False False) ns
77 ------------------------------------------------------------------------
81 data InputData = InputData { inNode1_id :: NodeId
82 , inNode2_id :: NodeId
85 } deriving (Show, Generic, Typeable)
87 instance ToRow InputData where
88 toRow inputData = [ toField (inNode1_id inputData)
89 , toField (inNode2_id inputData)
90 , toField (inNode_fav inputData)
91 , toField (inNode_del inputData)