From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53499) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d779R-0000KZ-6B for guix-patches@gnu.org; Sat, 06 May 2017 17:22:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d779O-0003TL-20 for guix-patches@gnu.org; Sat, 06 May 2017 17:22:05 -0400 Received: from debbugs.gnu.org ([208.118.235.43]:60465) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1d779N-0003TH-Vq for guix-patches@gnu.org; Sat, 06 May 2017 17:22:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1d779N-0004MI-Qz for guix-patches@gnu.org; Sat, 06 May 2017 17:22:01 -0400 Subject: bug#26807: [PATCH] graph: Add Cypher backend. Resent-Message-ID: Received: from eggs.gnu.org ([2001:4830:134:3::10]:53452) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d7795-0000JK-2v for guix-patches@gnu.org; Sat, 06 May 2017 17:21:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d7791-0003Lp-Uk for guix-patches@gnu.org; Sat, 06 May 2017 17:21:43 -0400 Received: from fencepost.gnu.org ([2001:4830:134:3::e]:55159) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d7791-0003L8-R8 for guix-patches@gnu.org; Sat, 06 May 2017 17:21:39 -0400 Received: from [31.21.75.66] (port=50610 helo=antelope) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1d778z-0004N4-1V for guix-patches@gnu.org; Sat, 06 May 2017 17:21:37 -0400 From: Roel Janssen Date: Sat, 06 May 2017 23:21:32 +0200 Message-ID: <87fughk7fn.fsf@gnu.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+kyle=kyleam.com@gnu.org Sender: "Guix-patches" To: 26807@debbugs.gnu.org --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-graph-Add-Cypher-backend.patch >From 0e9c95ef3473fa7066ccd5991b1c14400aaa7076 Mon Sep 17 00:00:00 2001 From: Roel Janssen Date: Sat, 6 May 2017 23:15:03 +0200 Subject: [PATCH] graph: Add Cypher backend. * guix/graph.scm (%cypher-backend): New variable. --- guix/graph.scm | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/guix/graph.scm b/guix/graph.scm index 7af2cd3b8..d7fd5f3e4 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 -- 2.12.2 --=-=-= Content-Type: text/plain Dear Guix, I would like to add another backend to the 'guix graph' command. This backend will return a bunch of queries that can be used to create a graph database for any database engine that uses openCypher (although I only know one engine and it's called neo4j, which should be GPLv3 code). If there was a way to ensure node definitions are written to the output before the edges, I could simplify the queries a bit. But I believe it is quite fast anyway. Thanks! Kind regards, Roel Janssen --=-=-=--