2 Module : Gargantext.Database.Queries
3 Description : Main requests of Node to the database
4 Copyright : (c) CNRS, 2017-Present
5 License : AGPL + CECILL v3
6 Maintainer : team@gargantext.org
7 Stability : experimental
11 {-# OPTIONS_GHC -fno-warn-name-shadowing #-}
12 {-# LANGUAGE TemplateHaskell #-}
13 {-# LANGUAGE FlexibleInstances #-}
14 {-# LANGUAGE DeriveGeneric #-}
15 {-# LANGUAGE MultiParamTypeClasses #-}
16 {-# LANGUAGE FunctionalDependencies #-}
17 {-# LANGUAGE Arrows #-}
18 {-# OPTIONS_GHC -fno-warn-orphans #-}
20 module Gargantext.Database.Queries where
22 import Gargantext.Prelude
23 import Gargantext.Types (Limit, Offset, NodePoly)
24 import Data.Maybe (Maybe, maybe)
25 import Control.Arrow ((>>>))
26 import Control.Applicative ((<*>))
28 -- (Query, limit, offset)
31 type NodeWrite = NodePoly (Maybe (Column PGInt4 ))
34 (Column (Nullable PGInt4 ))
36 (Maybe (Column PGTimestamptz))
38 -- (Maybe (Column PGTSVector))
40 type NodeRead = NodePoly (Column PGInt4 )
43 (Column (Nullable PGInt4 ))
45 (Column PGTimestamptz )
47 -- (Column PGTSVector)
49 join3 :: Query columnsA -> Query columnsB -> Query columnsC
50 -> ((columnsA, columnsB, columnsC) -> Column PGBool)
51 -> Query (columnsA, columnsB, columnsC)
52 join3 q1 q2 q3 cond = ((,,) <$> q1 <*> q2 <*> q3) >>> keepWhen cond
55 --leftJoin3 :: Query columnsL1 -> Query columnsR -> Query columnsL
56 -- -> ((columnsL1, columnsR) -> Column PGBool)
57 -- -> ((columnsL, (columnsL1, nullableColumnsR1)) -> Column PGBool)
58 -- -> Query (columnsL, nullableColumnsR)
59 --leftJoin3 q1 q2 q3 cond12 cond23 = leftJoin q3 (leftJoin q1 q2 cond12) cond23
61 limit' :: Maybe Limit -> Query a -> Query a
62 limit' maybeLimit query = maybe query (\l -> limit l query) maybeLimit
64 offset' :: Maybe Offset -> Query a -> Query a
65 offset' maybeOffset query = maybe query (\o -> offset o query) maybeOffset