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
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
Grégoire Locqueville
haskell-gargantext
Commits
589c5aa4
Commit
589c5aa4
authored
Aug 02, 2024
by
Grégoire Locqueville
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Made command to copy subtree
parent
d32a73f6
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
64 additions
and
6 deletions
+64
-6
Node.hs
src/Gargantext/Database/Admin/Types/Node.hs
+6
-2
Node.hs
src/Gargantext/Database/Query/Table/Node.hs
+58
-4
No files found.
src/Gargantext/Database/Admin/Types/Node.hs
View file @
589c5aa4
...
...
@@ -37,6 +37,7 @@ import Data.TreeDiff
import
Database.PostgreSQL.Simple.FromField
(
FromField
,
fromField
,
fromJSONField
)
import
Database.PostgreSQL.Simple.ToField
(
ToField
,
toField
,
toJSONField
)
import
Database.PostgreSQL.Simple.ToRow
(
ToRow
,
toRow
)
import
Database.PostgreSQL.Simple.FromRow
(
FromRow
,
fromRow
,
field
)
import
Fmt
(
Buildable
(
..
)
)
import
Gargantext.Core.Utils.Prefix
(
unPrefix
,
unPrefixSwagger
,
wellNamedSchema
)
import
Gargantext.Database.Schema.Context
...
...
@@ -267,10 +268,13 @@ instance ToField NodeId where
toField
(
UnsafeMkNodeId
n
)
=
toField
n
instance
ToRow
NodeId
where
toRow
(
UnsafeMkNodeId
i
)
=
[
toField
i
]
instance
FromRow
NodeId
where
fromRow
=
UnsafeMkNodeId
<$>
field
instance
FromField
NodeId
where
fromField
f
ie
ld
mdata
=
do
n
<-
UnsafeMkNodeId
<$>
fromField
f
ie
ld
mdata
fromField
fld
mdata
=
do
n
<-
UnsafeMkNodeId
<$>
fromField
fld
mdata
if
isPositive
n
then
pure
n
else
mzero
...
...
src/Gargantext/Database/Query/Table/Node.hs
View file @
589c5aa4
...
...
@@ -433,10 +433,64 @@ getListsWithParentId n = runOpaQuery $ selectNodesWith' n (Just NodeList)
------------------------------------------------------------------------
copyNode
::
(
HasNodeError
err
)
=>
NodeId
->
DBCmd
err
Int64
copyNode
nodeIdToCopy
=
do
nodeToCopy
<-
getNode
nodeIdToCopy
_
-- INSERT INTO public.nodes (hash_id, typename, user_id, parent_id, name, date, hyperdata)
-- SELECT 'tutu', typename, user_id, 97, name, date, hyperdata FROM public.nodes WHERE id = 165;
copyNodeSingle
::
NodeId
->
NodeId
->
DBCmd
err
NodeId
copyNodeSingle
idToCopy
newParentId
=
do
newNodes
<-
runPGSQuery
[
sql
|
INSERT INTO public.nodes (typename, user_id, parent_id, name, date, hyperdata)
SELECT typename, user_id, ?, name, date, hyperdata FROM public.nodes WHERE id = ?
RETURNING id;
|]
(
newParentId
,
idToCopy
)
case
newNodes
of
[
newNode
]
->
return
newNode
_
->
panicTrace
"Error"
-- TODO specify error
-- TODO Enforce a maximal depth level?
-- TODO Use SQL builtin recursivity?
copyNodeRecursive
::
NodeId
->
NodeId
->
DBCmd
err
NodeId
copyNodeRecursive
idToCopy
newParentId
=
do
copiedNode
<-
copyNodeSingle
idToCopy
newParentId
children
<-
getChildren'
idToCopy
for_
children
$
\
child
->
copyNodeRecursive
child
copiedNode
return
copiedNode
-- TODO delete this and replace calls to it by calls to getChildren
getChildren'
::
NodeId
->
DBCmd
err
[
NodeId
]
getChildren'
nodeId
=
runPGSQuery
[
sql
|
SELECT id FROM public.nodes WHERE parent_id = ?;
|]
nodeId
-- INSERT INTO public.nodes (typename, user_id, parent_id, name, date, hyperdata)
-- SELECT typename, user_id, 137, name, date, hyperdata FROM public.nodes WHERE id = 165
-- RETURNING id;
--
-- SELECT id FROM public.nodes WHERE parent_id = 137;
-- digest(CONCAT(?, NEW.typename, NEW.name, NEW.id, NEW.hyperdata), 'sha256')
-- copyNode :: (HasNodeError err) => NodeId -> DBCmd err Int64
-- copyNode nodeIdToCopy = mkCmd $ \connection -> proc
-- runSelect
-- TODO
-- [ ] Performer la substitution
-- [ ] Gérer le hash_id
-- nodeToCopy <- getNode nodeIdToCopy constant
-- _ -- return nodeToCopy
-- where
-- valueToHyperdata v = case fromJSON v of
-- Success a -> pure a
-- Error _err -> returnError ConversionFailed field
-- $ DL.unwords [ "cannot parse hyperdata for JSON: "
-- , show v
-- ]
-- nodeExists :: (HasNodeError err) => NodeId -> DBCmd err Bool
-- nodeExists nId = (== [PGS.Only True])
...
...
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