]> Git — Sourcephile - gargantext.git/blob - src/Data/Gargantext/Database/NodeNgramNgram.hs
First commit to start with.
[gargantext.git] / src / Data / Gargantext / Database / NodeNgramNgram.hs
1 {-# LANGUAGE TemplateHaskell #-}
2 {-# LANGUAGE FlexibleInstances #-}
3 {-# LANGUAGE MultiParamTypeClasses #-}
4 {-# LANGUAGE FunctionalDependencies #-}
5 {-# LANGUAGE Arrows #-}
6
7 module Data.Gargantext.Database.NodeNgramNgram where
8
9 import Prelude
10 import Data.Time (UTCTime)
11 import Data.Text (Text)
12 import Data.Maybe (Maybe)
13 import Data.Profunctor.Product.TH (makeAdaptorAndInstance)
14 import Control.Lens.TH (makeLensesWith, abbreviatedFields)
15 import Control.Arrow (returnA)
16 import qualified Database.PostgreSQL.Simple as PGS
17
18 import qualified Opaleye as O
19 import Opaleye (Column, PGBool, PGInt4, PGText, PGTimestamptz, PGFloat8
20 , Table(Table), Query
21 , QueryRunnerColumnDefault, queryRunnerColumnDefault
22 , fieldQueryRunnerColumn
23 , (.==), (.>)
24 )
25
26 import Data.Gargantext.Database.Private (infoGargandb)
27 import Data.Gargantext.Database.Instances
28
29 data NodeNgramNgramPoly node_id ngram1_id ngram2_id weight
30 = NodeNgramNgram { nodeNgramNgram_NodeNgramNgram_NodeId :: node_id
31 , nodeNgramNgram_NodeNgramNgram_Ngram1Id :: ngram1_id
32 , nodeNgramNgram_NodeNgramNgram_Ngram2Id :: ngram2_id
33 , nodeNgramNgram_NodeNgramNgram_Weight :: weight
34 } deriving (Show)
35
36
37 type NodeNgramNgramWrite = NodeNgramNgramPoly (Maybe (Column PGInt4)) (Column PGInt4) (Column PGInt4) (Maybe (Column PGFloat8))
38 type NodeNgramNgramRead = NodeNgramNgramPoly (Column PGInt4) (Column PGInt4) (Column PGInt4) (Column PGFloat8)
39
40
41 type NodeNgramNgram = NodeNgramNgramPoly (Maybe Int) Int Int (Maybe Double)
42
43 $(makeAdaptorAndInstance "pNodeNgramNgram" ''NodeNgramNgramPoly)
44 $(makeLensesWith abbreviatedFields ''NodeNgramNgramPoly)
45
46
47 nodeNgramNgramTable :: O.Table NodeNgramNgramWrite NodeNgramNgramRead
48 nodeNgramNgramTable = O.Table "nodes_ngrams_ngrams" ( pNodeNgramNgram NodeNgramNgram
49 { nodeNgramNgram_NodeNgramNgram_NodeId = O.optional "node_id"
50 , nodeNgramNgram_NodeNgramNgram_Ngram1Id = O.required "ngram1_id"
51 , nodeNgramNgram_NodeNgramNgram_Ngram2Id = O.required "ngram2_id"
52 , nodeNgramNgram_NodeNgramNgram_Weight = O.optional "weight"
53 }
54 )
55
56
57 queryNodeNgramNgramTable :: Query NodeNgramNgramRead
58 queryNodeNgramNgramTable = O.queryTable nodeNgramNgramTable
59
60
61 -- | not optimized (get all ngrams without filters)
62 nodeNgramNgrams :: IO [NodeNgramNgram]
63 nodeNgramNgrams = do
64 conn <- PGS.connect infoGargandb
65 O.runQuery conn queryNodeNgramNgramTable
66