Commit 6cacf848 authored by Alexandre Delanoë's avatar Alexandre Delanoë

Merge remote-tracking branch 'origin/dev-ngrams-table' into dev

parents 60e0b101 fd0699d9
...@@ -44,7 +44,7 @@ import qualified Data.Set as Set ...@@ -44,7 +44,7 @@ import qualified Data.Set as Set
import Data.Map.Strict (Map) import Data.Map.Strict (Map)
--import qualified Data.Set as Set --import qualified Data.Set as Set
import Control.Lens (makeLenses, Prism', prism', (^..), (.~), (#), to, withIndex, folded, ifolded) import Control.Lens (makeLenses, Prism', prism', (^..), (.~), (#), to, withIndex, folded, ifolded)
import Control.Monad (guard, void) import Control.Monad (guard)
import Control.Monad.Error.Class (MonadError, throwError) import Control.Monad.Error.Class (MonadError, throwError)
import Data.Aeson import Data.Aeson
import Data.Aeson.TH (deriveJSON) import Data.Aeson.TH (deriveJSON)
...@@ -297,7 +297,7 @@ tableNgramsPatch :: (HasNgramError err, HasNodeError err) ...@@ -297,7 +297,7 @@ tableNgramsPatch :: (HasNgramError err, HasNodeError err)
tableNgramsPatch corpusId maybeList (Versioned version patch) = do tableNgramsPatch corpusId maybeList (Versioned version patch) = do
when (version /= 1) $ ngramError UnsupportedVersion when (version /= 1) $ ngramError UnsupportedVersion
listId <- maybe (defaultList corpusId) pure maybeList listId <- maybe (defaultList corpusId) pure maybeList
void $ updateNodeNgrams $ NodeNgramsUpdate updateNodeNgrams $ NodeNgramsUpdate
{ _nnu_lists_update = mkListsUpdate listId patch { _nnu_lists_update = mkListsUpdate listId patch
, _nnu_rem_children = mkChildrenGroups listId _rem patch , _nnu_rem_children = mkChildrenGroups listId _rem patch
, _nnu_add_children = mkChildrenGroups listId _add patch , _nnu_add_children = mkChildrenGroups listId _add patch
......
...@@ -32,11 +32,12 @@ module Gargantext.Database.Schema.NodeNgram where ...@@ -32,11 +32,12 @@ module Gargantext.Database.Schema.NodeNgram where
import Data.Text (Text) import Data.Text (Text)
import Control.Lens.TH (makeLensesWith, abbreviatedFields) import Control.Lens.TH (makeLensesWith, abbreviatedFields)
import Control.Monad (void)
import Data.Profunctor.Product.TH (makeAdaptorAndInstance) import Data.Profunctor.Product.TH (makeAdaptorAndInstance)
import Database.PostgreSQL.Simple.Types (Values(..), QualifiedIdentifier(..)) import Database.PostgreSQL.Simple.Types (Values(..), QualifiedIdentifier(..))
import Database.PostgreSQL.Simple.SqlQQ (sql) import Database.PostgreSQL.Simple.SqlQQ (sql)
import Gargantext.Core.Types.Main (ListId, ListTypeId) import Gargantext.Core.Types.Main (ListId, ListTypeId)
import Gargantext.Database.Utils (mkCmd, Cmd, runPGSQuery) import Gargantext.Database.Utils (mkCmd, Cmd, execPGSQuery)
import Gargantext.Database.Schema.NodeNgramsNgrams import Gargantext.Database.Schema.NodeNgramsNgrams
import Gargantext.Prelude import Gargantext.Prelude
import Opaleye import Opaleye
...@@ -115,10 +116,9 @@ insertNodeNgramW nns = ...@@ -115,10 +116,9 @@ insertNodeNgramW nns =
type NgramsText = Text type NgramsText = Text
updateNodeNgrams' :: [(ListId, NgramsText, ListTypeId)] -> Cmd err [Int] updateNodeNgrams' :: [(ListId, NgramsText, ListTypeId)] -> Cmd err ()
updateNodeNgrams' [] = pure [] updateNodeNgrams' [] = pure ()
updateNodeNgrams' input = map (\(PGS.Only a) -> a) <$> updateNodeNgrams' input = void $ execPGSQuery updateQuery (PGS.Only $ Values fields input)
runPGSQuery updateQuery (PGS.Only $ Values fields $ input)
where where
fields = map (\t-> QualifiedIdentifier Nothing t) ["int4","text","int4"] fields = map (\t-> QualifiedIdentifier Nothing t) ["int4","text","int4"]
updateQuery = [sql| UPDATE nodes_ngrams as old SET updateQuery = [sql| UPDATE nodes_ngrams as old SET
...@@ -126,8 +126,7 @@ updateNodeNgrams' input = map (\(PGS.Only a) -> a) <$> ...@@ -126,8 +126,7 @@ updateNodeNgrams' input = map (\(PGS.Only a) -> a) <$>
from (?) as new(node_id,terms,typeList) from (?) as new(node_id,terms,typeList)
JOIN ngrams ON ngrams.terms = new.terms JOIN ngrams ON ngrams.terms = new.terms
WHERE old.node_id = new.node_id WHERE old.node_id = new.node_id
AND old.ngram_id = ngrams.id AND old.ngram_id = ngrams.id;
RETURNING old.ngram_id;
|] |]
data NodeNgramsUpdate = NodeNgramsUpdate data NodeNgramsUpdate = NodeNgramsUpdate
...@@ -137,9 +136,8 @@ data NodeNgramsUpdate = NodeNgramsUpdate ...@@ -137,9 +136,8 @@ data NodeNgramsUpdate = NodeNgramsUpdate
} }
-- TODO wrap these updates in a transaction. -- TODO wrap these updates in a transaction.
updateNodeNgrams :: NodeNgramsUpdate -> Cmd err [Int] updateNodeNgrams :: NodeNgramsUpdate -> Cmd err ()
updateNodeNgrams nnu = do updateNodeNgrams nnu = do
xs <- updateNodeNgrams' $ _nnu_lists_update nnu updateNodeNgrams' $ _nnu_lists_update nnu
ys <- ngramsGroup Del $ _nnu_rem_children nnu ngramsGroup Del $ _nnu_rem_children nnu
zs <- ngramsGroup Add $ _nnu_add_children nnu ngramsGroup Add $ _nnu_add_children nnu
pure $ xs <> ys <> zs
...@@ -34,13 +34,14 @@ module Gargantext.Database.Schema.NodeNgramsNgrams ...@@ -34,13 +34,14 @@ module Gargantext.Database.Schema.NodeNgramsNgrams
import Control.Lens (view) import Control.Lens (view)
import Control.Lens.TH (makeLensesWith, abbreviatedFields) import Control.Lens.TH (makeLensesWith, abbreviatedFields)
import Control.Monad (void)
import Control.Monad.IO.Class (liftIO) import Control.Monad.IO.Class (liftIO)
import Data.Text (Text) import Data.Text (Text)
import Data.Maybe (Maybe) import Data.Maybe (Maybe)
import Data.Profunctor.Product.TH (makeAdaptorAndInstance) import Data.Profunctor.Product.TH (makeAdaptorAndInstance)
import Database.PostgreSQL.Simple.SqlQQ (sql) import Database.PostgreSQL.Simple.SqlQQ (sql)
import Database.PostgreSQL.Simple.Types (Values(..), QualifiedIdentifier(..)) import Database.PostgreSQL.Simple.Types (Values(..), QualifiedIdentifier(..))
import Gargantext.Database.Utils (Cmd, runOpaQuery, runPGSQuery, connection) import Gargantext.Database.Utils (Cmd, runOpaQuery, execPGSQuery, connection)
import Gargantext.Core.Types.Main (ListId) import Gargantext.Core.Types.Main (ListId)
import Gargantext.Prelude import Gargantext.Prelude
import Opaleye import Opaleye
...@@ -126,8 +127,8 @@ type NgramsChild = Text ...@@ -126,8 +127,8 @@ type NgramsChild = Text
ngramsGroup :: Action -> [(ListId, NgramsParent, NgramsChild, Maybe Double)] ngramsGroup :: Action -> [(ListId, NgramsParent, NgramsChild, Maybe Double)]
-> Cmd err [Int] -> Cmd err ()
ngramsGroup _ [] = pure [] ngramsGroup _ [] = pure ()
ngramsGroup action ngs = runNodeNgramsNgrams q ngs ngramsGroup action ngs = runNodeNgramsNgrams q ngs
where where
q = case action of q = case action of
...@@ -135,12 +136,12 @@ ngramsGroup action ngs = runNodeNgramsNgrams q ngs ...@@ -135,12 +136,12 @@ ngramsGroup action ngs = runNodeNgramsNgrams q ngs
Add -> queryInsertNodeNgramsNgrams Add -> queryInsertNodeNgramsNgrams
runNodeNgramsNgrams :: PGS.Query -> [(ListId, NgramsParent, NgramsChild, Maybe Double)] -> Cmd err [Int] runNodeNgramsNgrams :: PGS.Query -> [(ListId, NgramsParent, NgramsChild, Maybe Double)] -> Cmd err ()
runNodeNgramsNgrams q ngs = map (\(PGS.Only a) -> a) <$> runPGSQuery q (PGS.Only $ Values fields ngs' ) runNodeNgramsNgrams q ngs = void $ execPGSQuery q (PGS.Only $ Values fields ngs')
where where
ngs' = map (\(n,ng1,ng2,w) -> (n,ng1,ng2,maybe 0 identity w)) ngs ngs' = map (\(n,ng1,ng2,w) -> (n,ng1,ng2,maybe 0 identity w)) ngs
fields = map (\t -> QualifiedIdentifier Nothing t) fields = map (\t -> QualifiedIdentifier Nothing t)
["int4","text","text","real"] ["int4","text","text","float8"]
-------------------------------------------------------------------- --------------------------------------------------------------------
-- TODO: on conflict update weight -- TODO: on conflict update weight
......
...@@ -91,6 +91,9 @@ formatPGSQuery q a = mkCmd $ \conn -> PGS.formatQuery conn q a ...@@ -91,6 +91,9 @@ formatPGSQuery q a = mkCmd $ \conn -> PGS.formatQuery conn q a
runPGSQuery :: (PGS.ToRow a, PGS.FromRow b) => PGS.Query -> a -> Cmd err [b] runPGSQuery :: (PGS.ToRow a, PGS.FromRow b) => PGS.Query -> a -> Cmd err [b]
runPGSQuery q a = mkCmd $ \conn -> PGS.query conn q a runPGSQuery q a = mkCmd $ \conn -> PGS.query conn q a
execPGSQuery :: PGS.ToRow a => PGS.Query -> a -> Cmd err Int64
execPGSQuery q a = mkCmd $ \conn -> PGS.execute conn q a
------------------------------------------------------------------------ ------------------------------------------------------------------------
databaseParameters :: FilePath -> IO PGS.ConnectInfo databaseParameters :: FilePath -> IO PGS.ConnectInfo
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment