Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
H
haskell-gargantext
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Przemyslaw Kaminski
haskell-gargantext
Commits
a2788ade
Commit
a2788ade
authored
Aug 30, 2022
by
Przemyslaw Kaminski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[nodeStory] optimize node_stories table
Read in backend works now, insert and upsert not yet.
parent
f43b4bb1
Changes
13
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
295 additions
and
174 deletions
+295
-174
0.0.6.1.sql
devops/postgres/upgrade/0.0.6.1.sql
+58
-0
0.0.6.sql
devops/postgres/upgrade/0.0.6.sql
+0
-1
gargantext.cabal
gargantext.cabal
+0
-1
Ngrams.hs
src/Gargantext/API/Ngrams.hs
+1
-0
Tools.hs
src/Gargantext/API/Ngrams/Tools.hs
+2
-2
Types.hs
src/Gargantext/API/Ngrams/Types.hs
+7
-19
NodeStory.hs
src/Gargantext/Core/NodeStory.hs
+157
-83
Metrics.hs
src/Gargantext/Database/Action/Metrics.hs
+6
-9
Config.hs
src/Gargantext/Database/Admin/Config.hs
+0
-1
Node.hs
src/Gargantext/Database/Admin/Types/Node.hs
+16
-18
Ngrams.hs
src/Gargantext/Database/Query/Table/Ngrams.hs
+0
-1
Node.hs
src/Gargantext/Database/Query/Table/Node.hs
+14
-13
Ngrams.hs
src/Gargantext/Database/Schema/Ngrams.hs
+34
-26
No files found.
devops/postgres/upgrade/0.0.6.1.sql
0 → 100644
View file @
a2788ade
-- we will migrate data here
-- rename old table and create a new one
ALTER
TABLE
public
.
node_stories
RENAME
TO
node_stories_old
;
CREATE
TABLE
public
.
node_stories
(
id
SERIAL
,
node_id
INTEGER
NOT
NULL
,
version
INTEGER
NOT
NULL
,
ngrams_type_id
INTEGER
NOT
NULL
,
ngrams_id
INTEGER
NOT
NULL
,
--children TEXT[],
ngrams_repo_element
jsonb
DEFAULT
'{}'
::
jsonb
NOT
NULL
,
PRIMARY
KEY
(
id
),
FOREIGN
KEY
(
node_id
)
REFERENCES
public
.
nodes
(
id
)
ON
DELETE
CASCADE
,
FOREIGN
KEY
(
ngrams_id
)
REFERENCES
public
.
ngrams
(
id
)
ON
DELETE
CASCADE
);
ALTER
TABLE
public
.
node_stories
OWNER
TO
gargantua
;
CREATE
UNIQUE
INDEX
ON
public
.
node_stories
USING
btree
(
node_id
,
ngrams_type_id
,
ngrams_id
);
-- Authors (ngrams_type_id = 1), see G.D.S.Ngrams.hs -> ngramsTypeId
INSERT
INTO
public
.
node_stories
(
node_id
,
version
,
ngrams_type_id
,
ngrams_id
,
ngrams_repo_element
)
SELECT
node_id
,
(
archive
->
'version'
)::
int
,
1
,
ngrams
.
id
,
j
.
value
FROM
node_stories_old
CROSS
JOIN
jsonb_each
(
archive
->
'state'
->
'Authors'
)
AS
j
JOIN
ngrams
ON
terms
=
j
.
key
;
-- we will leave children for later, small steps
-- INSERT INTO public.node_stories
-- (node_id, version, ngrams_type_id, ngrams_id, children, ngrams_repo_element)
-- SELECT node_id, (archive->'version')::int, 1, ngrams.id, c.children, (j.value - 'children')
-- FROM node_stories_old
-- CROSS JOIN jsonb_each(archive->'state'->'Authors') AS j
-- CROSS JOIN LATERAL (SELECT array_agg(d.elem) AS children FROM jsonb_array_elements_text(j.value->'children') AS d(elem)) AS c
-- JOIN ngrams ON terms = j.key;
-- Institutes (ngrams_type_id = 2)
INSERT
INTO
public
.
node_stories
(
node_id
,
version
,
ngrams_type_id
,
ngrams_id
,
ngrams_repo_element
)
SELECT
node_id
,
(
archive
->
'version'
)::
int
,
2
,
ngrams
.
id
,
j
.
value
FROM
node_stories_old
CROSS
JOIN
jsonb_each
(
archive
->
'state'
->
'Institutes'
)
AS
j
JOIN
ngrams
ON
terms
=
j
.
key
;
-- Sources (ngrams_type_id = 3)
INSERT
INTO
public
.
node_stories
(
node_id
,
version
,
ngrams_type_id
,
ngrams_id
,
ngrams_repo_element
)
SELECT
node_id
,
(
archive
->
'version'
)::
int
,
3
,
ngrams
.
id
,
j
.
value
FROM
node_stories_old
CROSS
JOIN
jsonb_each
(
archive
->
'state'
->
'Sources'
)
AS
j
JOIN
ngrams
ON
terms
=
j
.
key
;
-- NgramsTerms (ngrams_type_id = 4)
INSERT
INTO
public
.
node_stories
(
node_id
,
version
,
ngrams_type_id
,
ngrams_id
,
ngrams_repo_element
)
SELECT
node_id
,
(
archive
->
'version'
)::
int
,
4
,
ngrams
.
id
,
j
.
value
FROM
node_stories_old
CROSS
JOIN
jsonb_each
(
archive
->
'state'
->
'NgramsTerms'
)
AS
j
JOIN
ngrams
ON
terms
=
j
.
key
;
devops/postgres/upgrade/0.0.6.sql
View file @
a2788ade
...
@@ -36,4 +36,3 @@ ALTER TABLE public.node_story_archive_history OWNER TO gargantua;
...
@@ -36,4 +36,3 @@ ALTER TABLE public.node_story_archive_history OWNER TO gargantua;
-- UNION (SELECT node_id, sid, 3 AS ngrams_type_id, "Sources" AS patch FROM q WHERE "Sources" IS NOT NULL)
-- UNION (SELECT node_id, sid, 3 AS ngrams_type_id, "Sources" AS patch FROM q WHERE "Sources" IS NOT NULL)
-- ORDER BY node_id, ngrams_type_id, sid
-- ORDER BY node_id, ngrams_type_id, sid
-- ) AS t;
-- ) AS t;
gargantext.cabal
View file @
a2788ade
...
@@ -96,7 +96,6 @@ library
...
@@ -96,7 +96,6 @@ library
Gargantext.Core.Viz.Phylo.SynchronicClustering
Gargantext.Core.Viz.Phylo.SynchronicClustering
Gargantext.Core.Viz.Types
Gargantext.Core.Viz.Types
other-modules:
other-modules:
ConcurrentTest
Gargantext.API.Admin.Auth
Gargantext.API.Admin.Auth
Gargantext.API.Admin.FrontEnd
Gargantext.API.Admin.FrontEnd
Gargantext.API.Admin.Orchestrator
Gargantext.API.Admin.Orchestrator
...
...
src/Gargantext/API/Ngrams.hs
View file @
a2788ade
...
@@ -29,6 +29,7 @@ module Gargantext.API.Ngrams
...
@@ -29,6 +29,7 @@ module Gargantext.API.Ngrams
,
TableNgramsApiPut
,
TableNgramsApiPut
,
getTableNgrams
,
getTableNgrams
,
getTableNgramsCorpus
,
setListNgrams
,
setListNgrams
--, rmListNgrams TODO fix before exporting
--, rmListNgrams TODO fix before exporting
,
apiNgramsTableCorpus
,
apiNgramsTableCorpus
...
...
src/Gargantext/API/Ngrams/Tools.hs
View file @
a2788ade
...
@@ -22,6 +22,7 @@ import Data.Hashable (Hashable)
...
@@ -22,6 +22,7 @@ import Data.Hashable (Hashable)
import
Data.Set
(
Set
)
import
Data.Set
(
Set
)
import
Data.Validity
import
Data.Validity
import
Gargantext.API.Ngrams.Types
import
Gargantext.API.Ngrams.Types
import
Gargantext.Core.NodeStory
import
Gargantext.Core.Types
(
ListType
(
..
),
NodeId
,
NodeType
(
..
),
ListId
)
import
Gargantext.Core.Types
(
ListType
(
..
),
NodeId
,
NodeType
(
..
),
ListId
)
import
Gargantext.Database.Prelude
(
CmdM
,
HasConnectionPool
(
..
))
import
Gargantext.Database.Prelude
(
CmdM
,
HasConnectionPool
(
..
))
import
Gargantext.Database.Schema.Ngrams
(
NgramsType
)
import
Gargantext.Database.Schema.Ngrams
(
NgramsType
)
...
@@ -29,7 +30,6 @@ import Gargantext.Prelude
...
@@ -29,7 +30,6 @@ import Gargantext.Prelude
import
qualified
Data.HashMap.Strict
as
HM
import
qualified
Data.HashMap.Strict
as
HM
import
qualified
Data.Map.Strict
as
Map
import
qualified
Data.Map.Strict
as
Map
import
qualified
Data.Set
as
Set
import
qualified
Data.Set
as
Set
import
Gargantext.Core.NodeStory
import
qualified
Gargantext.Core.NodeStoryFile
as
NSF
import
qualified
Gargantext.Core.NodeStoryFile
as
NSF
...
@@ -209,7 +209,7 @@ migrateFromDirToDb = do
...
@@ -209,7 +209,7 @@ migrateFromDirToDb = do
_
<-
mapM
(
\
(
nId
,
a
)
->
do
_
<-
mapM
(
\
(
nId
,
a
)
->
do
n
<-
liftBase
$
nodeExists
pool
nId
n
<-
liftBase
$
nodeExists
pool
nId
case
n
of
case
n
of
False
->
pure
0
False
->
pure
()
True
->
liftBase
$
upsertNodeArchive
pool
nId
a
True
->
liftBase
$
upsertNodeArchive
pool
nId
a
)
$
Map
.
toList
nls
)
$
Map
.
toList
nls
--
_
<-
nodeStoryIncs
(
Just
$
NodeStory
nls
)
listIds
--
_
<-
nodeStoryIncs
(
Just
$
NodeStory
nls
)
listIds
...
...
src/Gargantext/API/Ngrams/Types.hs
View file @
a2788ade
...
@@ -28,7 +28,7 @@ import Data.String (IsString, fromString)
...
@@ -28,7 +28,7 @@ import Data.String (IsString, fromString)
import
Data.Swagger
hiding
(
version
,
patch
)
import
Data.Swagger
hiding
(
version
,
patch
)
import
Data.Text
(
Text
,
pack
,
strip
)
import
Data.Text
(
Text
,
pack
,
strip
)
import
Data.Validity
import
Data.Validity
import
Database.PostgreSQL.Simple.FromField
(
FromField
,
fromField
,
fromJSONField
,
ResultError
(
ConversionFailed
),
returnError
)
import
Database.PostgreSQL.Simple.FromField
(
FromField
,
fromField
,
fromJSONField
)
import
Database.PostgreSQL.Simple.ToField
(
ToField
,
toJSONField
,
toField
)
import
Database.PostgreSQL.Simple.ToField
(
ToField
,
toJSONField
,
toField
)
import
GHC.Generics
(
Generic
)
import
GHC.Generics
(
Generic
)
import
Gargantext.Core.Text
(
size
)
import
Gargantext.Core.Text
(
size
)
...
@@ -44,7 +44,6 @@ import Servant.Job.Utils (jsonOptions)
...
@@ -44,7 +44,6 @@ import Servant.Job.Utils (jsonOptions)
import
Test.QuickCheck
(
elements
,
frequency
)
import
Test.QuickCheck
(
elements
,
frequency
)
import
Test.QuickCheck.Arbitrary
(
Arbitrary
,
arbitrary
)
import
Test.QuickCheck.Arbitrary
(
Arbitrary
,
arbitrary
)
import
qualified
Data.HashMap.Strict.InsOrd
as
InsOrdHashMap
import
qualified
Data.HashMap.Strict.InsOrd
as
InsOrdHashMap
import
qualified
Data.List
as
List
import
qualified
Data.Map.Strict
as
Map
import
qualified
Data.Map.Strict
as
Map
import
qualified
Data.Map.Strict.Patch
as
PM
import
qualified
Data.Map.Strict.Patch
as
PM
import
qualified
Data.Set
as
Set
import
qualified
Data.Set
as
Set
...
@@ -124,7 +123,7 @@ instance (ToJSONKey a, ToSchema a) => ToSchema (MSet a) where
...
@@ -124,7 +123,7 @@ instance (ToJSONKey a, ToSchema a) => ToSchema (MSet a) where
------------------------------------------------------------------------
------------------------------------------------------------------------
newtype
NgramsTerm
=
NgramsTerm
{
unNgramsTerm
::
Text
}
newtype
NgramsTerm
=
NgramsTerm
{
unNgramsTerm
::
Text
}
deriving
(
Ord
,
Eq
,
Show
,
Generic
,
ToJSONKey
,
ToJSON
,
FromJSON
,
Semigroup
,
Arbitrary
,
Serialise
,
ToSchema
,
Hashable
,
NFData
)
deriving
(
Ord
,
Eq
,
Show
,
Generic
,
ToJSONKey
,
ToJSON
,
FromJSON
,
Semigroup
,
Arbitrary
,
Serialise
,
ToSchema
,
Hashable
,
NFData
,
FromField
,
ToField
)
instance
IsHashable
NgramsTerm
where
instance
IsHashable
NgramsTerm
where
hash
(
NgramsTerm
t
)
=
hash
t
hash
(
NgramsTerm
t
)
=
hash
t
instance
Monoid
NgramsTerm
where
instance
Monoid
NgramsTerm
where
...
@@ -133,18 +132,6 @@ instance FromJSONKey NgramsTerm where
...
@@ -133,18 +132,6 @@ instance FromJSONKey NgramsTerm where
fromJSONKey
=
FromJSONKeyTextParser
$
\
t
->
pure
$
NgramsTerm
$
strip
t
fromJSONKey
=
FromJSONKeyTextParser
$
\
t
->
pure
$
NgramsTerm
$
strip
t
instance
IsString
NgramsTerm
where
instance
IsString
NgramsTerm
where
fromString
s
=
NgramsTerm
$
pack
s
fromString
s
=
NgramsTerm
$
pack
s
instance
FromField
NgramsTerm
where
fromField
field
mb
=
do
v
<-
fromField
field
mb
case
fromJSON
v
of
Success
a
->
pure
$
NgramsTerm
$
strip
a
Error
_err
->
returnError
ConversionFailed
field
$
List
.
intercalate
" "
[
"cannot parse hyperdata for JSON: "
,
show
v
]
instance
ToField
NgramsTerm
where
toField
(
NgramsTerm
n
)
=
toField
n
data
RootParent
=
RootParent
data
RootParent
=
RootParent
...
@@ -164,19 +151,20 @@ data NgramsRepoElement = NgramsRepoElement
...
@@ -164,19 +151,20 @@ data NgramsRepoElement = NgramsRepoElement
,
_nre_children
::
!
(
MSet
NgramsTerm
)
,
_nre_children
::
!
(
MSet
NgramsTerm
)
}
}
deriving
(
Ord
,
Eq
,
Show
,
Generic
)
deriving
(
Ord
,
Eq
,
Show
,
Generic
)
deriveJSON
(
unPrefix
"_nre_"
)
''
N
gramsRepoElement
deriveJSON
(
unPrefix
"_nre_"
)
''
N
gramsRepoElement
-- TODO
-- TODO
-- if ngrams & not size => size
-- if ngrams & not size => size
-- drop occurrences
-- drop occurrences
makeLenses
''
N
gramsRepoElement
makeLenses
''
N
gramsRepoElement
instance
ToSchema
NgramsRepoElement
where
instance
ToSchema
NgramsRepoElement
where
declareNamedSchema
=
genericDeclareNamedSchema
(
unPrefixSwagger
"_nre_"
)
declareNamedSchema
=
genericDeclareNamedSchema
(
unPrefixSwagger
"_nre_"
)
instance
Serialise
NgramsRepoElement
instance
FromField
NgramsRepoElement
where
fromField
=
fromJSONField
instance
ToField
NgramsRepoElement
where
toField
=
toJSONField
instance
Serialise
(
MSet
NgramsTerm
)
instance
Serialise
(
MSet
NgramsTerm
)
instance
Serialise
NgramsRepoElement
data
NgramsElement
=
data
NgramsElement
=
NgramsElement
{
_ne_ngrams
::
NgramsTerm
NgramsElement
{
_ne_ngrams
::
NgramsTerm
...
...
src/Gargantext/Core/NodeStory.hs
View file @
a2788ade
This diff is collapsed.
Click to expand it.
src/Gargantext/Database/Action/Metrics.hs
View file @
a2788ade
...
@@ -27,7 +27,7 @@ import Gargantext.API.Ngrams.Tools (filterListWithRoot, groupNodesByNgrams, Diag
...
@@ -27,7 +27,7 @@ import Gargantext.API.Ngrams.Tools (filterListWithRoot, groupNodesByNgrams, Diag
import
Gargantext.Database.Prelude
(
runPGSQuery
{-, formatPGSQuery-}
)
import
Gargantext.Database.Prelude
(
runPGSQuery
{-, formatPGSQuery-}
)
import
Gargantext.API.Ngrams.Types
(
TabType
(
..
),
ngramsTypeFromTabType
,
NgramsTerm
(
..
))
import
Gargantext.API.Ngrams.Types
(
TabType
(
..
),
ngramsTypeFromTabType
,
NgramsTerm
(
..
))
import
Gargantext.Core.Mail.Types
(
HasMail
)
import
Gargantext.Core.Mail.Types
(
HasMail
)
import
Gargantext.Core.NodeStory
import
Gargantext.Core.NodeStory
hiding
(
runPGSQuery
)
import
Gargantext.Core.Text.Metrics
(
scored
,
Scored
(
..
),
{-localMetrics, toScored-}
)
import
Gargantext.Core.Text.Metrics
(
scored
,
Scored
(
..
),
{-localMetrics, toScored-}
)
import
Database.PostgreSQL.Simple.ToField
(
toField
,
Action
{-, ToField-}
)
import
Database.PostgreSQL.Simple.ToField
(
toField
,
Action
{-, ToField-}
)
import
Gargantext.Core.Types
(
ListType
(
..
),
Limit
,
NodeType
(
..
),
ContextId
)
import
Gargantext.Core.Types
(
ListType
(
..
),
Limit
,
NodeType
(
..
),
ContextId
)
...
@@ -243,6 +243,3 @@ getNgrams lId tabType = do
...
@@ -243,6 +243,3 @@ getNgrams lId tabType = do
take'
::
Maybe
Int
->
[
a
]
->
[
a
]
take'
::
Maybe
Int
->
[
a
]
->
[
a
]
take'
Nothing
xs
=
xs
take'
Nothing
xs
=
xs
take'
(
Just
n
)
xs
=
take
n
xs
take'
(
Just
n
)
xs
=
take
n
xs
src/Gargantext/Database/Admin/Config.hs
View file @
a2788ade
...
@@ -113,4 +113,3 @@ nodeTypes = [ (n, toDBid n) | n <- allNodeTypes ]
...
@@ -113,4 +113,3 @@ nodeTypes = [ (n, toDBid n) | n <- allNodeTypes ]
fromNodeTypeId
::
NodeTypeId
->
NodeType
fromNodeTypeId
::
NodeTypeId
->
NodeType
fromNodeTypeId
tId
=
fromMaybe
(
panic
$
pack
$
"Type Id "
<>
show
tId
<>
" does not exist"
)
fromNodeTypeId
tId
=
fromMaybe
(
panic
$
pack
$
"Type Id "
<>
show
tId
<>
" does not exist"
)
(
lookup
tId
nodeTypeInv
)
(
lookup
tId
nodeTypeInv
)
src/Gargantext/Database/Admin/Types/Node.hs
View file @
a2788ade
...
@@ -30,8 +30,8 @@ import Data.Morpheus.Types (GQLType)
...
@@ -30,8 +30,8 @@ import Data.Morpheus.Types (GQLType)
import
Data.Swagger
import
Data.Swagger
import
Data.Text
(
Text
,
unpack
,
pack
)
import
Data.Text
(
Text
,
unpack
,
pack
)
import
Data.Time
(
UTCTime
)
import
Data.Time
(
UTCTime
)
import
Database.PostgreSQL.Simple.FromField
(
FromField
,
fromField
)
import
Database.PostgreSQL.Simple.FromField
(
FromField
,
fromField
,
fromJSONField
)
import
Database.PostgreSQL.Simple.ToField
(
ToField
,
toField
)
import
Database.PostgreSQL.Simple.ToField
(
ToField
,
toField
,
toJSONField
)
import
GHC.Generics
(
Generic
)
import
GHC.Generics
(
Generic
)
import
Gargantext.Core.Utils.Prefix
(
unPrefix
,
unPrefixSwagger
,
wellNamedSchema
)
import
Gargantext.Core.Utils.Prefix
(
unPrefix
,
unPrefixSwagger
,
wellNamedSchema
)
import
Gargantext.Database.Schema.Context
import
Gargantext.Database.Schema.Context
...
@@ -357,6 +357,20 @@ data NodeType = NodeUser
...
@@ -357,6 +357,20 @@ data NodeType = NodeUser
deriving
(
Show
,
Read
,
Eq
,
Generic
,
Bounded
,
Enum
)
deriving
(
Show
,
Read
,
Eq
,
Generic
,
Bounded
,
Enum
)
instance
GQLType
NodeType
instance
GQLType
NodeType
instance
FromJSON
NodeType
instance
ToJSON
NodeType
instance
FromHttpApiData
NodeType
where
parseUrlPiece
=
Right
.
read
.
unpack
instance
ToHttpApiData
NodeType
where
toUrlPiece
=
pack
.
show
instance
ToParamSchema
NodeType
instance
ToSchema
NodeType
instance
Arbitrary
NodeType
where
arbitrary
=
elements
allNodeTypes
instance
FromField
NodeType
where
fromField
=
fromJSONField
instance
ToField
NodeType
where
toField
=
toJSONField
allNodeTypes
::
[
NodeType
]
allNodeTypes
::
[
NodeType
]
...
@@ -394,21 +408,6 @@ defaultName NodeFrameNotebook = "Code"
...
@@ -394,21 +408,6 @@ defaultName NodeFrameNotebook = "Code"
defaultName
NodeFile
=
"File"
defaultName
NodeFile
=
"File"
instance
FromJSON
NodeType
instance
ToJSON
NodeType
instance
FromHttpApiData
NodeType
where
parseUrlPiece
=
Right
.
read
.
unpack
instance
ToHttpApiData
NodeType
where
toUrlPiece
=
pack
.
show
instance
ToParamSchema
NodeType
instance
ToSchema
NodeType
instance
Arbitrary
NodeType
where
arbitrary
=
elements
allNodeTypes
------------------------------------------------------------------------
------------------------------------------------------------------------
-- Instances
-- Instances
...
@@ -451,4 +450,3 @@ instance DefaultFromField SqlText (Maybe Hash)
...
@@ -451,4 +450,3 @@ instance DefaultFromField SqlText (Maybe Hash)
context2node
::
Context
a
->
Node
a
context2node
::
Context
a
->
Node
a
context2node
(
Context
ci
ch
ct
cu
cp
cn
cd
chy
)
=
Node
ci
ch
ct
cu
cp
cn
cd
chy
context2node
(
Context
ci
ch
ct
cu
cp
cn
cd
chy
)
=
Node
ci
ch
ct
cu
cp
cn
cd
chy
src/Gargantext/Database/Query/Table/Ngrams.hs
View file @
a2788ade
...
@@ -132,4 +132,3 @@ selectNgramsId' ns = runPGSQuery querySelectNgramsId ( PGS.Only
...
@@ -132,4 +132,3 @@ selectNgramsId' ns = runPGSQuery querySelectNgramsId ( PGS.Only
JOIN input_rows ir ON ir.terms = n.terms
JOIN input_rows ir ON ir.terms = n.terms
GROUP BY n.terms, n.id
GROUP BY n.terms, n.id
|]
|]
src/Gargantext/Database/Query/Table/Node.hs
View file @
a2788ade
...
@@ -26,7 +26,6 @@ import Control.Lens (set, view)
...
@@ -26,7 +26,6 @@ import Control.Lens (set, view)
import
Data.Aeson
import
Data.Aeson
import
Data.Maybe
(
fromMaybe
)
import
Data.Maybe
(
fromMaybe
)
import
Data.Text
(
Text
)
import
Data.Text
(
Text
)
import
qualified
Database.PostgreSQL.Simple
as
DPS
import
Database.PostgreSQL.Simple.SqlQQ
(
sql
)
import
Database.PostgreSQL.Simple.SqlQQ
(
sql
)
import
Opaleye
hiding
(
FromField
)
import
Opaleye
hiding
(
FromField
)
import
Prelude
hiding
(
null
,
id
,
map
,
sum
)
import
Prelude
hiding
(
null
,
id
,
map
,
sum
)
...
@@ -41,6 +40,9 @@ import Gargantext.Database.Query.Table.Node.Error
...
@@ -41,6 +40,9 @@ import Gargantext.Database.Query.Table.Node.Error
import
Gargantext.Database.Schema.Node
import
Gargantext.Database.Schema.Node
import
Gargantext.Prelude
hiding
(
sum
,
head
)
import
Gargantext.Prelude
hiding
(
sum
,
head
)
import
qualified
Database.PostgreSQL.Simple
as
PGS
queryNodeSearchTable
::
Select
NodeSearchRead
queryNodeSearchTable
::
Select
NodeSearchRead
queryNodeSearchTable
=
selectTable
nodeTableSearch
queryNodeSearchTable
=
selectTable
nodeTableSearch
...
@@ -123,7 +125,7 @@ getClosestParentIdByType :: HasDBid NodeType
...
@@ -123,7 +125,7 @@ getClosestParentIdByType :: HasDBid NodeType
->
NodeType
->
NodeType
->
Cmd
err
(
Maybe
NodeId
)
->
Cmd
err
(
Maybe
NodeId
)
getClosestParentIdByType
nId
nType
=
do
getClosestParentIdByType
nId
nType
=
do
result
<-
runPGSQuery
query
(
nId
,
0
::
Int
)
result
<-
runPGSQuery
query
(
PGS
.
Only
nId
)
case
result
of
case
result
of
[(
NodeId
parentId
,
pTypename
)]
->
do
[(
NodeId
parentId
,
pTypename
)]
->
do
if
toDBid
nType
==
pTypename
then
if
toDBid
nType
==
pTypename
then
...
@@ -132,12 +134,12 @@ getClosestParentIdByType nId nType = do
...
@@ -132,12 +134,12 @@ getClosestParentIdByType nId nType = do
getClosestParentIdByType
(
NodeId
parentId
)
nType
getClosestParentIdByType
(
NodeId
parentId
)
nType
_
->
pure
Nothing
_
->
pure
Nothing
where
where
query
::
DP
S
.
Query
query
::
PG
S
.
Query
query
=
[
sql
|
query
=
[
sql
|
SELECT n2.id, n2.typename
SELECT n2.id, n2.typename
FROM nodes n1
FROM nodes n1
JOIN nodes n2 ON n1.parent_id = n2.id
JOIN nodes n2 ON n1.parent_id = n2.id
WHERE n1.id = ?
AND 0 = ?
;
WHERE n1.id = ?;
|]
|]
-- | Similar to `getClosestParentIdByType` but includes current node
-- | Similar to `getClosestParentIdByType` but includes current node
...
@@ -147,7 +149,7 @@ getClosestParentIdByType' :: HasDBid NodeType
...
@@ -147,7 +149,7 @@ getClosestParentIdByType' :: HasDBid NodeType
->
NodeType
->
NodeType
->
Cmd
err
(
Maybe
NodeId
)
->
Cmd
err
(
Maybe
NodeId
)
getClosestParentIdByType'
nId
nType
=
do
getClosestParentIdByType'
nId
nType
=
do
result
<-
runPGSQuery
query
(
nId
,
0
::
Int
)
result
<-
runPGSQuery
query
(
PGS
.
Only
nId
)
case
result
of
case
result
of
[(
NodeId
id
,
pTypename
)]
->
do
[(
NodeId
id
,
pTypename
)]
->
do
if
toDBid
nType
==
pTypename
then
if
toDBid
nType
==
pTypename
then
...
@@ -156,11 +158,11 @@ getClosestParentIdByType' nId nType = do
...
@@ -156,11 +158,11 @@ getClosestParentIdByType' nId nType = do
getClosestParentIdByType
nId
nType
getClosestParentIdByType
nId
nType
_
->
pure
Nothing
_
->
pure
Nothing
where
where
query
::
DP
S
.
Query
query
::
PG
S
.
Query
query
=
[
sql
|
query
=
[
sql
|
SELECT n.id, n.typename
SELECT n.id, n.typename
FROM nodes n
FROM nodes n
WHERE n.id = ?
AND 0 = ?
;
WHERE n.id = ?;
|]
|]
-- | Given a node id, find all it's children (no matter how deep) of
-- | Given a node id, find all it's children (no matter how deep) of
...
@@ -170,15 +172,15 @@ getChildrenByType :: HasDBid NodeType
...
@@ -170,15 +172,15 @@ getChildrenByType :: HasDBid NodeType
->
NodeType
->
NodeType
->
Cmd
err
[
NodeId
]
->
Cmd
err
[
NodeId
]
getChildrenByType
nId
nType
=
do
getChildrenByType
nId
nType
=
do
result
<-
runPGSQuery
query
(
nId
,
0
::
Int
)
result
<-
runPGSQuery
query
(
PGS
.
Only
nId
)
children_lst
<-
mapM
(
\
(
id
,
_
)
->
getChildrenByType
id
nType
)
result
children_lst
<-
mapM
(
\
(
id
,
_
)
->
getChildrenByType
id
nType
)
result
pure
$
concat
$
[
fst
<$>
filter
(
\
(
_
,
pTypename
)
->
pTypename
==
toDBid
nType
)
result
]
++
children_lst
pure
$
concat
$
[
fst
<$>
filter
(
\
(
_
,
pTypename
)
->
pTypename
==
toDBid
nType
)
result
]
++
children_lst
where
where
query
::
DP
S
.
Query
query
::
PG
S
.
Query
query
=
[
sql
|
query
=
[
sql
|
SELECT n.id, n.typename
SELECT n.id, n.typename
FROM nodes n
FROM nodes n
WHERE n.parent_id = ?
AND 0 = ?
;
WHERE n.parent_id = ?;
|]
|]
------------------------------------------------------------------------
------------------------------------------------------------------------
...
@@ -231,8 +233,8 @@ selectNodesIdWithType nt = proc () -> do
...
@@ -231,8 +233,8 @@ selectNodesIdWithType nt = proc () -> do
------------------------------------------------------------------------
------------------------------------------------------------------------
nodeExists
::
(
HasNodeError
err
)
=>
NodeId
->
Cmd
err
Bool
nodeExists
::
(
HasNodeError
err
)
=>
NodeId
->
Cmd
err
Bool
nodeExists
nId
=
(
==
[
DP
S
.
Only
True
])
nodeExists
nId
=
(
==
[
PG
S
.
Only
True
])
<$>
runPGSQuery
[
sql
|
SELECT true FROM nodes WHERE id = ?
AND ?
|]
(
nId
,
True
)
<$>
runPGSQuery
[
sql
|
SELECT true FROM nodes WHERE id = ?
|]
(
PGS
.
Only
nId
)
getNode
::
HasNodeError
err
=>
NodeId
->
Cmd
err
(
Node
Value
)
getNode
::
HasNodeError
err
=>
NodeId
->
Cmd
err
(
Node
Value
)
getNode
nId
=
do
getNode
nId
=
do
...
@@ -397,4 +399,3 @@ defaultListMaybe cId = headMay <$> map (view node_id ) <$> getListsWithParentId
...
@@ -397,4 +399,3 @@ defaultListMaybe cId = headMay <$> map (view node_id ) <$> getListsWithParentId
getListsWithParentId
::
HasDBid
NodeType
=>
NodeId
->
Cmd
err
[
Node
HyperdataList
]
getListsWithParentId
::
HasDBid
NodeType
=>
NodeId
->
Cmd
err
[
Node
HyperdataList
]
getListsWithParentId
n
=
runOpaQuery
$
selectNodesWith'
n
(
Just
NodeList
)
getListsWithParentId
n
=
runOpaQuery
$
selectNodesWith'
n
(
Just
NodeList
)
src/Gargantext/Database/Schema/Ngrams.hs
View file @
a2788ade
...
@@ -20,25 +20,27 @@ Ngrams connection to the Database.
...
@@ -20,25 +20,27 @@ Ngrams connection to the Database.
module
Gargantext.Database.Schema.Ngrams
module
Gargantext.Database.Schema.Ngrams
where
where
import
Data.Maybe
(
fromMaybe
)
import
Data.HashMap.Strict
(
HashMap
)
import
Data.Hashable
(
Hashable
)
import
Codec.Serialise
(
Serialise
())
import
Codec.Serialise
(
Serialise
())
import
Control.Lens
(
over
)
import
Control.Lens
(
over
)
import
Control.Monad
(
mzero
)
import
Control.Monad
(
mzero
)
import
Data.Maybe
(
fromMaybe
)
import
Data.HashMap.Strict
(
HashMap
)
import
Data.Hashable
(
Hashable
)
import
Data.Aeson
import
Data.Aeson
import
Data.Aeson.Types
(
toJSONKeyText
)
import
Data.Aeson.Types
(
toJSONKeyText
)
import
Data.Map
(
fromList
,
lookup
)
import
Data.Map
(
fromList
,
lookup
)
import
Database.PostgreSQL.Simple.FromField
(
returnError
,
ResultError
(
..
))
import
Data.Text
(
Text
,
splitOn
,
pack
,
strip
)
import
Data.Text
(
Text
,
splitOn
,
pack
,
strip
)
import
Gargantext.Core.Types
(
TODO
(
..
),
Typed
(
..
))
import
Gargantext.Core.Types
(
TODO
(
..
),
Typed
(
..
))
import
Gargantext.Prelude
import
Gargantext.Prelude
import
Servant
(
FromHttpApiData
(
..
),
Proxy
(
..
),
ToHttpApiData
(
..
))
import
Servant
(
FromHttpApiData
(
..
),
Proxy
(
..
),
ToHttpApiData
(
..
))
import
Text.Read
(
read
)
import
Gargantext.Core
(
HasDBid
(
..
))
import
Gargantext.Core
(
HasDBid
(
..
))
import
Gargantext.Database.Types
import
Gargantext.Database.Types
import
Gargantext.Database.Schema.Prelude
import
Gargantext.Database.Schema.Prelude
import
qualified
Database.PostgreSQL.Simple
as
PGS
import
Text.Read
(
read
)
import
qualified
Data.ByteString.Char8
as
B
import
qualified
Data.HashMap.Strict
as
HashMap
import
qualified
Data.HashMap.Strict
as
HashMap
import
qualified
Database.PostgreSQL.Simple
as
PGS
type
NgramsId
=
Int
type
NgramsId
=
Int
...
@@ -82,8 +84,34 @@ ngramsTable = Table "ngrams" (pNgramsDb NgramsDB { _ngrams_id = optionalTable
...
@@ -82,8 +84,34 @@ ngramsTable = Table "ngrams" (pNgramsDb NgramsDB { _ngrams_id = optionalTable
-- ngrams in text fields of documents has Terms Type (i.e. either title or abstract)
-- ngrams in text fields of documents has Terms Type (i.e. either title or abstract)
data
NgramsType
=
Authors
|
Institutes
|
Sources
|
NgramsTerms
data
NgramsType
=
Authors
|
Institutes
|
Sources
|
NgramsTerms
deriving
(
Eq
,
Show
,
Read
,
Ord
,
Enum
,
Bounded
,
Generic
)
deriving
(
Eq
,
Show
,
Read
,
Ord
,
Enum
,
Bounded
,
Generic
)
instance
Serialise
NgramsType
instance
Serialise
NgramsType
instance
FromJSON
NgramsType
instance
FromJSONKey
NgramsType
where
fromJSONKey
=
FromJSONKeyTextParser
(
parseJSON
.
String
)
instance
ToJSON
NgramsType
instance
ToJSONKey
NgramsType
where
toJSONKey
=
toJSONKeyText
(
pack
.
show
)
instance
FromHttpApiData
NgramsType
where
parseUrlPiece
n
=
pure
$
(
read
.
cs
)
n
instance
ToHttpApiData
NgramsType
where
toUrlPiece
=
pack
.
show
instance
ToParamSchema
NgramsType
where
toParamSchema
_
=
toParamSchema
(
Proxy
::
Proxy
TODO
)
-- map NgramsType to its assigned id
instance
FromField
NgramsType
where
fromField
fld
mdata
=
case
B
.
unpack
`
fmap
`
mdata
of
Nothing
->
returnError
UnexpectedNull
fld
""
Just
dat
->
do
n
<-
fromField
fld
mdata
if
(
n
::
Int
)
>
0
then
case
fromNgramsTypeId
(
NgramsTypeId
n
)
of
Nothing
->
returnError
ConversionFailed
fld
dat
Just
nt
->
pure
nt
else
returnError
ConversionFailed
fld
dat
instance
ToField
NgramsType
where
toField
nt
=
toField
$
ngramsTypeId
nt
ngramsTypes
::
[
NgramsType
]
ngramsTypes
::
[
NgramsType
]
...
@@ -96,33 +124,13 @@ instance ToSchema NgramsType
...
@@ -96,33 +124,13 @@ instance ToSchema NgramsType
newtype
NgramsTypeId
=
NgramsTypeId
Int
newtype
NgramsTypeId
=
NgramsTypeId
Int
deriving
(
Eq
,
Show
,
Ord
,
Num
)
deriving
(
Eq
,
Show
,
Ord
,
Num
)
instance
ToField
NgramsTypeId
where
instance
ToField
NgramsTypeId
where
toField
(
NgramsTypeId
n
)
=
toField
n
toField
(
NgramsTypeId
n
)
=
toField
n
instance
FromField
NgramsTypeId
where
instance
FromField
NgramsTypeId
where
fromField
fld
mdata
=
do
fromField
fld
mdata
=
do
n
<-
fromField
fld
mdata
n
<-
fromField
fld
mdata
if
(
n
::
Int
)
>
0
then
return
$
NgramsTypeId
n
if
(
n
::
Int
)
>
0
then
return
$
NgramsTypeId
n
else
mzero
else
mzero
instance
FromJSON
NgramsType
instance
FromJSONKey
NgramsType
where
fromJSONKey
=
FromJSONKeyTextParser
(
parseJSON
.
String
)
instance
ToJSON
NgramsType
instance
ToJSONKey
NgramsType
where
toJSONKey
=
toJSONKeyText
(
pack
.
show
)
instance
FromHttpApiData
NgramsType
where
parseUrlPiece
n
=
pure
$
(
read
.
cs
)
n
instance
ToHttpApiData
NgramsType
where
toUrlPiece
=
pack
.
show
instance
ToParamSchema
NgramsType
where
toParamSchema
_
=
toParamSchema
(
Proxy
::
Proxy
TODO
)
instance
DefaultFromField
(
Nullable
SqlInt4
)
NgramsTypeId
instance
DefaultFromField
(
Nullable
SqlInt4
)
NgramsTypeId
where
where
defaultFromField
=
fromPGSFromField
defaultFromField
=
fromPGSFromField
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment