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
20 data NodeNodeNgramPoly node1_id node2_id ngram_id score
21 = NodeNodeNgram { nodeNodeNgram_node1_id :: node1_id
22 , nodeNodeNgram_node2_id :: node2_id
23 , nodeNodeNgram_ngram_id :: ngram_id
24 , nodeNodeNgram_score :: score
28 type NodeNodeNgramWrite = NodeNodeNgramPoly (Column PGInt4) (Column PGInt4) (Column PGInt4) (Maybe (Column PGFloat8))
29 type NodeNodeNgramRead = NodeNodeNgramPoly (Column PGInt4) (Column PGInt4) (Column PGInt4) (Column PGFloat8)
32 type NodeNodeNgram = NodeNodeNgramPoly Int Int Int (Maybe Double)
34 $(makeAdaptorAndInstance "pNodeNodeNgram" ''NodeNodeNgramPoly)
35 $(makeLensesWith abbreviatedFields ''NodeNodeNgramPoly)
38 nodeNodeNgramTable :: Table NodeNodeNgramWrite NodeNodeNgramRead
39 nodeNodeNgramTable = Table "nodes_nodes_ngrams" ( pNodeNodeNgram NodeNodeNgram
40 { nodeNodeNgram_node1_id = required "node1_id"
41 , nodeNodeNgram_node2_id = required "node2_id"
42 , nodeNodeNgram_ngram_id = required "ngram_id"
43 , nodeNodeNgram_score = optional "score"
48 queryNodeNodeNgramTable :: Query NodeNodeNgramRead
49 queryNodeNodeNgramTable = queryTable nodeNodeNgramTable
52 -- | not optimized (get all ngrams without filters)
53 nodeNodeNgrams :: PGS.Connection -> IO [NodeNodeNgram]
54 nodeNodeNgrams conn = runQuery conn queryNodeNodeNgramTable
57 instance QueryRunnerColumnDefault PGFloat8 (Maybe Double) where
58 queryRunnerColumnDefault = fieldQueryRunnerColumn