Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
haskell-gargantext
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
152
Issues
152
List
Board
Labels
Milestones
Merge Requests
9
Merge Requests
9
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
gargantext
haskell-gargantext
Commits
e2897f33
Commit
e2897f33
authored
Aug 02, 2022
by
Przemyslaw Kaminski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[ngrams] implement ngrams term_id to further simplify the patches json
parent
ce533895
Pipeline
#3073
failed with stage
in 72 minutes and 54 seconds
Changes
3
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
41 additions
and
27 deletions
+41
-27
0.0.5.9.1.sql
devops/postgres/upgrade/0.0.5.9.1.sql
+14
-12
Types.hs
src/Gargantext/API/Ngrams/Types.hs
+8
-9
NodeStory.hs
src/Gargantext/Core/NodeStory.hs
+19
-6
No files found.
devops/postgres/upgrade/0.0.5.9.1.sql
View file @
e2897f33
...
...
@@ -2,22 +2,24 @@ create table public.node_story_archive_history (
id
SERIAL
,
node_id
INTEGER
NOT
NULL
,
ngrams_type_id
INTEGER
NOT
NULL
,
ngrams_id
INTEGER
NOT
NULL
,
patch
jsonb
DEFAULT
'{}'
::
jsonb
NOT
NULL
,
PRIMARY
KEY
(
id
),
FOREIGN
KEY
(
node_id
)
REFERENCES
public
.
nodes
(
id
)
ON
DELETE
CASCADE
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_story_archive_history
OWNER
TO
gargantua
;
INSERT
INTO
node_story_archive_history
(
node_id
,
ngrams_type_id
,
patch
)
SELECT
t
.
node_id
,
t
.
ngrams_type_id
,
t
.
patch
FROM
(
WITH
q
AS
(
SELECT
node_id
,
history
.
*
,
row_number
()
over
(
ORDER
BY
node_id
)
AS
sid
FROM
node_stories
,
jsonb_to_recordset
(
archive
->
'history'
)
AS
history
(
"Authors"
jsonb
,
"Institutes"
jsonb
,
"NgramsTerms"
jsonb
,
"Sources"
jsonb
))
--
INSERT INTO node_story_archive_history (node_id, ngrams_type_id, patch) SELECT t.node_id, t.ngrams_type_id, t.patch FROM
--
(
--
WITH q AS (SELECT node_id, history.*, row_number() over (ORDER BY node_id) AS sid
--
FROM node_stories,
--
jsonb_to_recordset(archive->'history') AS history("Authors" jsonb, "Institutes" jsonb, "NgramsTerms" jsonb, "Sources" jsonb))
(
SELECT
node_id
,
sid
,
1
AS
ngrams_type_id
,
"Authors"
AS
patch
FROM
q
WHERE
"Authors"
IS
NOT
NULL
)
UNION
(
SELECT
node_id
,
sid
,
2
AS
ngrams_type_id
,
"Institutes"
AS
patch
FROM
q
WHERE
"Institutes"
IS
NOT
NULL
)
UNION
(
SELECT
node_id
,
sid
,
4
AS
ngrams_type_id
,
"NgramsTerms"
AS
patch
FROM
q
WHERE
"NgramsTerms"
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
)
AS
t
;
--
(SELECT node_id, sid, 1 AS ngrams_type_id, "Authors" AS patch FROM q WHERE "Authors" IS NOT NULL)
--
UNION (SELECT node_id, sid, 2 AS ngrams_type_id, "Institutes" AS patch FROM q WHERE "Institutes" IS NOT NULL)
--
UNION (SELECT node_id, sid, 4 AS ngrams_type_id, "NgramsTerms" AS patch FROM q WHERE "NgramsTerms" 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
--
) AS t;
src/Gargantext/API/Ngrams/Types.hs
View file @
e2897f33
...
...
@@ -125,19 +125,14 @@ instance (ToJSONKey a, ToSchema a) => ToSchema (MSet a) where
------------------------------------------------------------------------
newtype
NgramsTerm
=
NgramsTerm
{
unNgramsTerm
::
Text
}
deriving
(
Ord
,
Eq
,
Show
,
Generic
,
ToJSONKey
,
ToJSON
,
FromJSON
,
Semigroup
,
Arbitrary
,
Serialise
,
ToSchema
,
Hashable
,
NFData
)
instance
IsHashable
NgramsTerm
where
hash
(
NgramsTerm
t
)
=
hash
t
instance
Monoid
NgramsTerm
where
mempty
=
NgramsTerm
""
instance
FromJSONKey
NgramsTerm
where
fromJSONKey
=
FromJSONKeyTextParser
$
\
t
->
pure
$
NgramsTerm
$
strip
t
instance
IsString
NgramsTerm
where
fromString
s
=
NgramsTerm
$
pack
s
instance
FromField
NgramsTerm
where
fromField
field
mb
=
do
...
...
@@ -148,6 +143,9 @@ instance FromField NgramsTerm
$
List
.
intercalate
" "
[
"cannot parse hyperdata for JSON: "
,
show
v
]
instance
ToField
NgramsTerm
where
toField
(
NgramsTerm
n
)
=
toField
n
data
RootParent
=
RootParent
{
_rp_root
::
NgramsTerm
...
...
@@ -449,13 +447,16 @@ instance ToSchema NgramsPatch where
,
(
"old"
,
nreSch
)
,
(
"new"
,
nreSch
)
]
instance
Arbitrary
NgramsPatch
where
arbitrary
=
frequency
[
(
9
,
NgramsPatch
<$>
arbitrary
<*>
(
replace
<$>
arbitrary
<*>
arbitrary
))
,
(
1
,
NgramsReplace
<$>
arbitrary
<*>
arbitrary
)
]
instance
Serialise
NgramsPatch
instance
FromField
NgramsPatch
where
fromField
=
fromJSONField
instance
ToField
NgramsPatch
where
toField
=
toJSONField
instance
Serialise
(
Replace
ListType
)
instance
Serialise
ListType
...
...
@@ -513,7 +514,6 @@ instance Action (PairPatch (PatchMSet NgramsTerm) (Replace ListType)) NgramsRepo
instance
Applicable
NgramsPatch
(
Maybe
NgramsRepoElement
)
where
applicable
p
=
applicable
(
p
^.
_NgramsPatch
)
instance
Action
NgramsPatch
(
Maybe
NgramsRepoElement
)
where
act
p
=
act
(
p
^.
_NgramsPatch
)
...
...
@@ -756,4 +756,3 @@ instance ToSchema UpdateTableNgramsCharts where
------------------------------------------------------------------------
type
NgramsList
=
(
Map
TableNgrams
.
NgramsType
(
Versioned
NgramsTableMap
))
src/Gargantext/Core/NodeStory.hs
View file @
e2897f33
...
...
@@ -89,7 +89,7 @@ import Control.Monad.Reader
import
Data.Aeson
hiding
((
.=
),
decode
)
import
Data.ByteString.Char8
(
hPutStrLn
)
import
Data.Map.Strict
(
Map
)
import
Data.Maybe
(
mapMaybe
)
import
Data.Maybe
(
catMaybes
,
mapMaybe
)
import
Data.Monoid
import
Data.Pool
(
Pool
,
withResource
)
import
Data.Semigroup
...
...
@@ -294,21 +294,34 @@ nodeStorySelect = selectTable nodeStoryTable
getNodeArchiveHistory
::
Pool
PGS
.
Connection
->
NodeId
->
IO
[
NgramsStatePatch'
]
getNodeArchiveHistory
pool
nodeId
=
do
as
<-
runPGSQuery
pool
query
(
nodeId
,
True
)
let
asTuples
=
mapMaybe
(
\
(
ngrams_type_id
,
patch
)
->
(
\
ntId
->
(
ntId
,
patch
))
<$>
(
TableNgrams
.
fromNgramsTypeId
ngrams_type_id
))
as
pure
$
(
\
(
ntId
,
patch
)
->
fst
$
PM
.
singleton
ntId
patch
)
<$>
asTuples
let
asTuples
=
mapMaybe
(
\
(
ngrams_type_id
,
ngrams
,
patch
)
->
(
\
ntId
->
(
ntId
,
ngrams
,
patch
))
<$>
(
TableNgrams
.
fromNgramsTypeId
ngrams_type_id
))
as
pure
$
(
\
(
ntId
,
terms
,
patch
)
->
fst
$
PM
.
singleton
ntId
(
NgramsTablePatch
$
fst
$
PM
.
singleton
terms
patch
)
)
<$>
asTuples
where
query
::
PGS
.
Query
query
=
[
sql
|
SELECT ngrams_type_id, patch FROM node_story_archive_history WHERE node_id = ? AND ?
|]
query
=
[
sql
|
SELECT ngrams_type_id, terms, patch
FROM node_story_archive_history
JOIN ngrams ON ngrams.id = ngrams_id
WHERE node_id = ? AND ?
|]
insertNodeArchiveHistory
::
Pool
PGS
.
Connection
->
NodeId
->
[
NgramsStatePatch'
]
->
IO
()
insertNodeArchiveHistory
_
_
[]
=
pure
()
insertNodeArchiveHistory
pool
nodeId
(
h
:
hs
)
=
do
_
<-
runPGSExecuteMany
pool
query
$
(
\
(
nType
,
patch
)
->
(
nodeId
,
TableNgrams
.
ngramsTypeId
nType
,
patch
))
<$>
(
PM
.
toList
h
)
let
tuples
=
mconcat
$
(
\
(
nType
,
(
NgramsTablePatch
patch
))
->
(
\
(
term
,
p
)
->
(
nodeId
,
TableNgrams
.
ngramsTypeId
nType
,
term
,
p
))
<$>
PM
.
toList
patch
)
<$>
PM
.
toList
h
::
[(
NodeId
,
TableNgrams
.
NgramsTypeId
,
NgramsTerm
,
NgramsPatch
)]
tuplesM
<-
mapM
(
\
(
nId
,
nTypeId
,
term
,
patch
)
->
do
ngrams
<-
runPGSQuery
pool
ngramsQuery
(
term
,
True
)
pure
$
(
\
(
PGS
.
Only
termId
)
->
(
nId
,
nTypeId
,
termId
,
term
,
patch
))
<$>
(
headMay
ngrams
)
)
tuples
::
IO
[
Maybe
(
NodeId
,
TableNgrams
.
NgramsTypeId
,
Int
,
NgramsTerm
,
NgramsPatch
)]
_
<-
runPGSExecuteMany
pool
query
$
((
\
(
nId
,
nTypeId
,
termId
,
_term
,
patch
)
->
(
nId
,
nTypeId
,
termId
,
patch
))
<$>
(
catMaybes
tuplesM
))
_
<-
insertNodeArchiveHistory
pool
nodeId
hs
pure
()
where
ngramsQuery
::
PGS
.
Query
ngramsQuery
=
[
sql
|
SELECT id FROM ngrams WHERE terms = ? AND ?
|]
query
::
PGS
.
Query
query
=
[
sql
|
INSERT INTO node_story_archive_history(node_id, ngrams_type_id,
patch) VALUES (
?, ?, ?)
|]
query
=
[
sql
|
INSERT INTO node_story_archive_history(node_id, ngrams_type_id,
ngrams_id, patch) VALUES (?,
?, ?, ?)
|]
getNodeStory
::
Pool
PGS
.
Connection
->
NodeId
->
IO
NodeListStory
getNodeStory
pool
(
NodeId
nodeId
)
=
do
...
...
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