diff options
author | Roel Janssen <roel@gnu.org> | 2017-05-11 16:17:49 +0200 |
---|---|---|
committer | Roel Janssen <roel@gnu.org> | 2017-05-11 16:17:49 +0200 |
commit | 5899fafbfefcd7682aec8f2caaaad3add678a3c4 (patch) | |
tree | b2d4ceca726fbb5adf348bcb951833e08727584f | |
parent | 70cb7610ca7de51da6ad7f84ff3c02258ec4e95f (diff) | |
download | guix-5899fafbfefcd7682aec8f2caaaad3add678a3c4.tar guix-5899fafbfefcd7682aec8f2caaaad3add678a3c4.tar.gz |
graph: Add Cypher backend.
* guix/graph.scm (%cypher-backend): New variable.
* doc/guix.texi: Add documentation for the Cypher backend of 'guix graph'.
-rw-r--r-- | doc/guix.texi | 4 | ||||
-rw-r--r-- | guix/graph.scm | 32 |
2 files changed, 34 insertions, 2 deletions
diff --git a/doc/guix.texi b/doc/guix.texi index 81aa957c6d..a5b787510b 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -6197,7 +6197,9 @@ provides a visual representation of the DAG. By default, @uref{http://www.graphviz.org/, Graphviz}, so its output can be passed directly to the @command{dot} command of Graphviz. It can also emit an HTML page with embedded JavaScript code to display a ``chord diagram'' -in a Web browser, using the @uref{https://d3js.org/, d3.js} library. +in a Web browser, using the @uref{https://d3js.org/, d3.js} library, or +emit Cypher queries to construct a graph in a graph database supporting +the @uref{http://www.opencypher.org/, openCypher} query language. The general syntax is: @example diff --git a/guix/graph.scm b/guix/graph.scm index 7af2cd3b80..d7fd5f3e4b 100644 --- a/guix/graph.scm +++ b/guix/graph.scm @@ -229,6 +229,35 @@ nodeArray.push(nodes[\"~a\"]);~%" emit-d3js-prologue emit-d3js-epilogue emit-d3js-node emit-d3js-edge)) + + +;;; +;;; Cypher export. +;;; + +(define (emit-cypher-prologue name port) + (format port "")) + +(define (emit-cypher-epilogue port) + (format port "")) + +(define (emit-cypher-node id label port) + (format port "MERGE (p:Package { id: ~s }) SET p.name = ~s;~%" + id label )) + +(define (emit-cypher-edge id1 id2 port) + (format port "MERGE (a:Package { id: ~s });~%" id1) + (format port "MERGE (b:Package { id: ~s });~%" id2) + (format port "MATCH (a:Package { id: ~s }), (b:Package { id: ~s }) CREATE UNIQUE (a)-[:NEEDS]->(b);~%" + id1 id2)) + +(define %cypher-backend + (graph-backend "cypher" + "Generate Cypher queries." + emit-cypher-prologue emit-cypher-epilogue + emit-cypher-node emit-cypher-edge)) + + ;;; ;;; Shared. @@ -236,7 +265,8 @@ nodeArray.push(nodes[\"~a\"]);~%" (define %graph-backends (list %graphviz-backend - %d3js-backend)) + %d3js-backend + %cypher-backend)) (define* (export-graph sinks port #:key |