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 )
31 (Maybe (Column PGFloat8))
33 type NodeNodeNgramRead = NodeNodeNgramPoly (Column PGInt4 )
38 type NodeNodeNgramReadNull = NodeNodeNgramPoly (Column (Nullable PGInt4 ))
39 (Column (Nullable PGInt4 ))
40 (Column (Nullable PGInt4 ))
41 (Column (Nullable PGFloat8))
43 type NodeNodeNgram = NodeNodeNgramPoly Int
49 $(makeAdaptorAndInstance "pNodeNodeNgram" ''NodeNodeNgramPoly)
50 $(makeLensesWith abbreviatedFields ''NodeNodeNgramPoly)
52 nodeNodeNgramTable :: Table NodeNodeNgramWrite NodeNodeNgramRead
53 nodeNodeNgramTable = Table "nodes_nodes_ngrams"
54 ( pNodeNodeNgram NodeNodeNgram
55 { nodeNodeNgram_node1_id = required "node1_id"
56 , nodeNodeNgram_node2_id = required "node2_id"
57 , nodeNodeNgram_ngram_id = required "ngram_id"
58 , nodeNodeNgram_score = optional "score"
63 queryNodeNodeNgramTable :: Query NodeNodeNgramRead
64 queryNodeNodeNgramTable = queryTable nodeNodeNgramTable
66 -- | not optimized (get all ngrams without filters)
67 nodeNodeNgrams :: PGS.Connection -> IO [NodeNodeNgram]
68 nodeNodeNgrams conn = runQuery conn queryNodeNodeNgramTable
70 instance QueryRunnerColumnDefault PGFloat8 (Maybe Double) where
71 queryRunnerColumnDefault = fieldQueryRunnerColumn