1 {-# LANGUAGE TemplateHaskell #-}
2 {-# LANGUAGE FlexibleInstances #-}
3 {-# LANGUAGE MultiParamTypeClasses #-}
4 {-# LANGUAGE FunctionalDependencies #-}
5 {-# LANGUAGE Arrows #-}
6 {-# OPTIONS_GHC -fno-warn-orphans #-}
9 module Gargantext.Database.NodeNodeNgram where
12 import Data.Maybe (Maybe)
13 import Data.Profunctor.Product.TH (makeAdaptorAndInstance)
14 import Control.Lens.TH (makeLensesWith, abbreviatedFields)
15 import qualified Database.PostgreSQL.Simple as PGS
19 import Gargantext.Database.Private (infoGargandb)
21 data NodeNodeNgramPoly node1_id node2_id ngram_id score
22 = NodeNodeNgram { nodeNodeNgram_node1_id :: node1_id
23 , nodeNodeNgram_node2_id :: node2_id
24 , nodeNodeNgram_ngram_id :: ngram_id
25 , nodeNodeNgram_score :: score
29 type NodeNodeNgramWrite = NodeNodeNgramPoly (Column PGInt4) (Column PGInt4) (Column PGInt4) (Maybe (Column PGFloat8))
30 type NodeNodeNgramRead = NodeNodeNgramPoly (Column PGInt4) (Column PGInt4) (Column PGInt4) (Column PGFloat8)
33 type NodeNodeNgram = NodeNodeNgramPoly Int Int Int (Maybe Double)
35 $(makeAdaptorAndInstance "pNodeNodeNgram" ''NodeNodeNgramPoly)
36 $(makeLensesWith abbreviatedFields ''NodeNodeNgramPoly)
39 nodeNodeNgramTable :: Table NodeNodeNgramWrite NodeNodeNgramRead
40 nodeNodeNgramTable = Table "nodes_nodes_ngrams" ( pNodeNodeNgram NodeNodeNgram
41 { nodeNodeNgram_node1_id = required "node1_id"
42 , nodeNodeNgram_node2_id = required "node2_id"
43 , nodeNodeNgram_ngram_id = required "ngram_id"
44 , nodeNodeNgram_score = optional "score"
49 queryNodeNodeNgramTable :: Query NodeNodeNgramRead
50 queryNodeNodeNgramTable = queryTable nodeNodeNgramTable
53 -- | not optimized (get all ngrams without filters)
54 nodeNodeNgrams :: IO [NodeNodeNgram]
56 conn <- PGS.connect infoGargandb
57 runQuery conn queryNodeNodeNgramTable
60 instance QueryRunnerColumnDefault PGFloat8 (Maybe Double) where
61 queryRunnerColumnDefault = fieldQueryRunnerColumn