From 337422ae16ad61ee778c44c6a9cc6fb9372eabe3 Mon Sep 17 00:00:00 2001 From: Josha von Gizycki Date: Mon, 4 Jan 2021 16:03:33 +0100 Subject: [PATCH 1/4] upgrade to neo4j v4 and inmemory connection need to rework all queries to $ syntax --- project.clj | 18 ++++++++---------- src/wanijo/infrastructure/neo4j.clj | 13 ++++++++----- src/wanijo/infrastructure/repl.clj | 11 ++++++++--- src/wanijo/instance/routes.clj | 8 ++++---- src/wanijo/user/db.clj | 17 ++++++++++++++++- 5 files changed, 44 insertions(+), 23 deletions(-) diff --git a/project.clj b/project.clj index 1abd4aa..b2fe02d 100644 --- a/project.clj +++ b/project.clj @@ -7,12 +7,12 @@ :dependencies [;;clojure core [org.clojure/clojure "1.10.1"] - [nrepl "0.7.0"] + [nrepl "0.8.3"] ;; static site - [compojure "1.6.1"] + [compojure "1.6.2"] [ring/ring-defaults "0.3.2"] - [ring/ring-jetty-adapter "1.8.0" + [ring/ring-jetty-adapter "1.8.2" :exclusions [ring/ring-core ring/ring-codec commons-io @@ -24,20 +24,18 @@ ;; compojure uses old transitive dependencies of ring ;; specifiy them here explicitly so newer versions ;; will be used - [ring/ring-core "1.8.0"] + [ring/ring-core "1.8.2"] [ring/ring-codec "1.1.2"] ;; neo4j - [gorillalabs/neo4j-clj "2.0.1" - :exclusions [org.bouncycastle/bcprov-jdk15on - org.bouncycastle/bcpkix-jdk15on - com.github.ben-manes.caffeine/caffeine]] + [gorillalabs/neo4j-clj "4.1.0"] + [org.neo4j.test/neo4j-harness "4.0.0"] ;; additional server side libs - [buddy/buddy-hashers "1.4.0" + [buddy/buddy-hashers "1.7.0" :exclusions [commons-codec]] [clj-time "0.15.2"] - [markdown-clj "1.10.1"] + [markdown-clj "1.10.5"] [dorothy "0.0.7"]] :profiles {:dev {:plugins [;; neo4j db diff --git a/src/wanijo/infrastructure/neo4j.clj b/src/wanijo/infrastructure/neo4j.clj index 77103f8..fd4b58a 100644 --- a/src/wanijo/infrastructure/neo4j.clj +++ b/src/wanijo/infrastructure/neo4j.clj @@ -1,11 +1,13 @@ (ns wanijo.infrastructure.neo4j (:require [neo4j-clj.core :as db] + [neo4j-clj.in-memory :as db-inm] [wanijo.infrastructure.devmode :as devmode] [clj-time.format :as time-format] [clj-time.local :as time-local] [clojure.spec.alpha :as spec] [clojure.string :as cljs]) - (:import (java.util UUID))) + (:import (java.util UUID) + (java.net URI))) (spec/def ::date-str #(re-matches #"\d{4}\d{2}\d{2}T\d{2}\d{2}\d{2}\.\d{3}Z" %)) @@ -29,7 +31,7 @@ (create-conn! port host user pass))) ([port host user pass] (db/connect - (str "bolt://" host ":" port) + (URI. (str "bolt://" host ":" port)) user pass))) @@ -42,6 +44,9 @@ ([port host user pass] (reset! conn (create-conn! port host user pass)))) +(defn in-memory-conn! [] + (reset! conn (db-inm/create-in-memory-connection))) + (defmacro defquery [& args] `(db/defquery ~@args)) (defn uuid [] @@ -57,9 +62,7 @@ (cljs/join \newline))) (defn exec-query! [qry params] - (let [live-conn (if (nil? @conn) - (reset-conn!) - @conn)] + (let [live-conn (or @conn (reset-conn!))] (with-open [session (db/get-session live-conn)] (devmode/send-to-bar (str (butiful-query qry) diff --git a/src/wanijo/infrastructure/repl.clj b/src/wanijo/infrastructure/repl.clj index 9888461..ea42587 100644 --- a/src/wanijo/infrastructure/repl.clj +++ b/src/wanijo/infrastructure/repl.clj @@ -5,9 +5,9 @@ (neo4j/defquery create-user "CREATE (n:user) - SET n.ident = {ident} - SET n.pw = {pw} - SET n.uuid = {uuid}") + SET n.ident = $ident + SET n.pw = $pw + SET n.uuid = $uuid") (defn create-user! [ident pw] (neo4j/exec-query! @@ -114,8 +114,13 @@ (main/start-server-dev!) (println "Started server at http://localhost:8080")) +(defn setup-in-memory! [] + (neo4j/in-memory-conn!) + (create-user! "admin" "admin")) + (comment (dev-server!) + (setup-in-memory!) (neo4j/reset-conn! "7688" "mokoscha" neo4j/standard-user diff --git a/src/wanijo/instance/routes.clj b/src/wanijo/instance/routes.clj index 367fb1f..53295f2 100644 --- a/src/wanijo/instance/routes.clj +++ b/src/wanijo/instance/routes.clj @@ -140,10 +140,10 @@ (let [names (-> req :params :name) instances (-> req :params :instances) source-uuid (-> req :params :source-uuid)] - (clojure.pprint/pprint names) - (clojure.pprint/pprint instances) - (clojure.pprint/pprint source-uuid) - (clojure.pprint/pprint +; (clojure.pprint/pprint names) +; (clojure.pprint/pprint instances) +; (clojure.pprint/pprint source-uuid) +#_ (clojure.pprint/pprint (map (fn [[target-schema target-instances]] {:link-name (get names target-schema) :instances target-instances}) diff --git a/src/wanijo/user/db.clj b/src/wanijo/user/db.clj index c5a728e..229bc9e 100644 --- a/src/wanijo/user/db.clj +++ b/src/wanijo/user/db.clj @@ -1,6 +1,7 @@ (ns wanijo.user.db (:require [clojure.spec.alpha :as spec] - [wanijo.infrastructure.neo4j :as neo4j])) + [wanijo.infrastructure.neo4j :as neo4j] + [neo4j-clj.core :as db])) (spec/def ::ident (spec/and string? not-empty)) @@ -24,6 +25,20 @@ first :n)) +(comment + (macroexpand '(db/defquery test-find-user + "MATCH (u:user) WHERE u.ident = {ident} RETURN u")) + (macroexpand '(neo4j/defquery + find-user + "MATCH (n:user) WHERE n.ident = {ident} RETURN n")) + + (require '[neo4j-clj.core :as db]) + (db/defquery test-find-user + "MATCH (u:user) WHERE u.ident = {ident} RETURN u") + (with-open [s (db/get-session @neo4j/conn)] + (test-find-user s {:ident "admin"})) + (neo4j/exec-query! test-find-user {:ident "admin"})) + (neo4j/defquery all "MATCH (u:user) From 1f42aad23e6cbd8bdebaa33677a7b32fec1b4e49 Mon Sep 17 00:00:00 2001 From: Josha von Gizycki Date: Mon, 4 Jan 2021 16:56:13 +0100 Subject: [PATCH 2/4] replace old param syntax --- .gitignore | 1 + src/wanijo/infrastructure/repl.clj | 4 +-- src/wanijo/link/db.clj | 12 ++++---- src/wanijo/schema/db.clj | 48 +++++++++++++++--------------- src/wanijo/user/db.clj | 11 ++++--- src/wanijo/visualisation/db.clj | 2 +- 6 files changed, 39 insertions(+), 39 deletions(-) diff --git a/.gitignore b/.gitignore index e84b3bc..0903fd2 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ resources/public/js/out .rebel_readline_history /elm-stuff *.*~ +*#* diff --git a/src/wanijo/infrastructure/repl.clj b/src/wanijo/infrastructure/repl.clj index ea42587..040fa19 100644 --- a/src/wanijo/infrastructure/repl.clj +++ b/src/wanijo/infrastructure/repl.clj @@ -19,13 +19,13 @@ (neo4j/defquery init-config "MERGE (c:dbconfig) ON CREATE SET - c.installed_at = {now}, + c.installed_at = $now, c.db_version = 0, c.last_migration = ''") (neo4j/defquery merge-config "MATCH (c:dbconfig) - SET c.last_migration = {now}, + SET c.last_migration = $now, c.db_version = {version}") (neo4j/defquery config diff --git a/src/wanijo/link/db.clj b/src/wanijo/link/db.clj index 9b5ca2a..3f73841 100644 --- a/src/wanijo/link/db.clj +++ b/src/wanijo/link/db.clj @@ -9,13 +9,13 @@ ::name])) (neo4j/defquery create - "MATCH (i:instance {uuid:{from}}), - (t:instance {uuid:{target}}) + "MATCH (i:instance {uuid: $from}), + (t:instance {uuid: $target}) CREATE (i)-[l:link]->(t) - SET l.created_at = {created_at}, - l.name = {name}, - l.created_by = {by}, - l.uuid = {uuid}") + SET l.created_at = $created_at, + l.name = $name, + l.created_by = $by, + l.uuid = $uuid") (defn create! [{:keys [from name to by]}] (let [tuples (map (fn [target-uuid] [create diff --git a/src/wanijo/schema/db.clj b/src/wanijo/schema/db.clj index ebe793d..2dbf976 100644 --- a/src/wanijo/schema/db.clj +++ b/src/wanijo/schema/db.clj @@ -24,11 +24,11 @@ (neo4j/defquery create-new "MATCH (u:user) - WHERE u.uuid = {u_uuid} + WHERE u.uuid = $u_uuid CREATE (s:schema)-[:created_by]->(u) - SET s.name = {name} - SET s.uuid = {s_uuid} - SET s.created_at = {created_at} + SET s.name = $name + SET s.uuid = $s_uuid + SET s.created_at = $created_at RETURN s") (defn create-new! [schema-name user-uuid] (->> @@ -43,7 +43,7 @@ (neo4j/defquery find-by-uuid "MATCH (s:schema) - WHERE s.uuid = {uuid} + WHERE s.uuid = $uuid OPTIONAL MATCH (s)<-[:of]-(a:attribute) WHERE a.required = 1 @@ -60,13 +60,13 @@ :req-attrs (map :a result))))) (neo4j/defquery schema-permissions - "MATCH (s:schema {uuid:{schema_uuid}}) + "MATCH (s:schema {uuid: $schema_uuid}) RETURN - EXISTS((:user {uuid:{user_uuid}}) - -[:permission {type:{type}}]- + EXISTS((:user {uuid: $user_uuid}) + -[:permission {type: $type}]- (s)) AS user_has_permission, NOT EXISTS((:user) - -[:permission {type:{type}}]- + -[:permission {type: $type}]- (s)) AS is_public") (defn has-user-permission? [perm-type schema-uuid user-uuid] (let [perms (first @@ -82,7 +82,7 @@ (neo4j/defquery accessible-schemas "MATCH (s:schema), - (u:user {uuid:{user_uuid}}) + (u:user {uuid: $user_uuid}) WHERE EXISTS((u)-[:permission {type:'read'}]->(s)) OR NOT EXISTS((:user)-[:permission {type:'read'}]->(s)) WITH s @@ -100,7 +100,7 @@ {:user_uuid user-uuid}))) (neo4j/defquery delete - "MATCH (s:schema {uuid:{uuid}}) + "MATCH (s:schema {uuid: $uuid}) WITH s OPTIONAL MATCH (s)--(a:attribute)-[cb:created_by]-(:user) DELETE cb, a @@ -114,8 +114,8 @@ (neo4j/defquery edit "MATCH (s:schema) - WHERE s.uuid = {uuid} - SET s.name = {name}") + WHERE s.uuid = $uuid + SET s.name = $name") (defn edit! [schema] (neo4j/exec-query! edit @@ -123,7 +123,7 @@ (neo4j/defquery assigned-users "MATCH (s:schema)-[p:permission]-(u:user) - WHERE s.uuid = {uuid} + WHERE s.uuid = $uuid RETURN u, p ORDER BY u.ident") (defn assigned-users! [uuid] @@ -133,7 +133,7 @@ (neo4j/defquery assigned-schemas "MATCH (s1:schema)-[p:permission]-(s2:schema) - WHERE s1.uuid = {uuid} + WHERE s1.uuid = $uuid RETURN s2 ORDER BY s2.name") (defn assigned-schemas! [uuid] @@ -157,14 +157,14 @@ (neo4j/defquery remove-assignments "MATCH (s:schema)-[c:permission]-(:user) - WHERE s.uuid = {uuid} - AND c.type = {permtype} + WHERE s.uuid = $uuid + AND c.type = $permtype DELETE c") (neo4j/defquery create-assignments "MATCH (s:schema), (u:user) - WHERE s.uuid = {uuid} - AND u.uuid IN {users} - CREATE (s)<-[:permission{type:{permtype}}]-(u)") + WHERE s.uuid = $uuid + AND u.uuid IN $users + CREATE (s)<-[:permission{type: $permtype}]-(u)") (defn assign-users! [uuid users permission] (neo4j/exec-queries! [remove-assignments @@ -177,12 +177,12 @@ (neo4j/defquery remove-schema-assignments "MATCH (s1:schema)-[p:permission]-(s2:schema) - WHERE s1.uuid = {uuid} + WHERE s1.uuid = $uuid DELETE p") (neo4j/defquery create-schema-assignments "MATCH (s1:schema), (s2:schema) - WHERE s1.uuid = {uuid} - AND s2.uuid IN {schemas} + WHERE s1.uuid = $uuid + AND s2.uuid IN $schemas CREATE (s1)-[:permission]->(s2)") (defn assign-schemas! [uuid schemas] (neo4j/exec-queries! @@ -192,7 +192,7 @@ {:uuid uuid :schemas schemas}])) (neo4j/defquery find-by-instance - "MATCH (i:instance {uuid:{uuid}})-[:of]->(s:schema) + "MATCH (i:instance {uuid: $uuid})-[:of]->(s:schema) RETURN s") (defn find-by-instance! [uuid] (-> find-by-instance diff --git a/src/wanijo/user/db.clj b/src/wanijo/user/db.clj index 229bc9e..31b6338 100644 --- a/src/wanijo/user/db.clj +++ b/src/wanijo/user/db.clj @@ -1,7 +1,6 @@ (ns wanijo.user.db (:require [clojure.spec.alpha :as spec] - [wanijo.infrastructure.neo4j :as neo4j] - [neo4j-clj.core :as db])) + [wanijo.infrastructure.neo4j :as neo4j])) (spec/def ::ident (spec/and string? not-empty)) @@ -14,7 +13,7 @@ (neo4j/defquery find-user "MATCH (n:user) - WHERE n.ident = {ident} + WHERE n.ident = $ident RETURN n") (defn find! [ident] @@ -27,14 +26,14 @@ (comment (macroexpand '(db/defquery test-find-user - "MATCH (u:user) WHERE u.ident = {ident} RETURN u")) + "MATCH (u:user) WHERE u.ident = $ident RETURN u")) (macroexpand '(neo4j/defquery find-user - "MATCH (n:user) WHERE n.ident = {ident} RETURN n")) + "MATCH (n:user) WHERE n.ident = $ident RETURN n")) (require '[neo4j-clj.core :as db]) (db/defquery test-find-user - "MATCH (u:user) WHERE u.ident = {ident} RETURN u") + "MATCH (u:user) WHERE u.ident = $ident RETURN u") (with-open [s (db/get-session @neo4j/conn)] (test-find-user s {:ident "admin"})) (neo4j/exec-query! test-find-user {:ident "admin"})) diff --git a/src/wanijo/visualisation/db.clj b/src/wanijo/visualisation/db.clj index ccf0cfd..1418108 100644 --- a/src/wanijo/visualisation/db.clj +++ b/src/wanijo/visualisation/db.clj @@ -27,7 +27,7 @@ (neo4j/defquery search "MATCH (i:instance) - WHERE i.name =~ {term} + WHERE i.name =~ $term RETURN i LIMIT 10") (defn enrich-links [instance] From 72def1be2adc3be80342cfed0d4a8e651973d348 Mon Sep 17 00:00:00 2001 From: Josha von Gizycki Date: Mon, 4 Jan 2021 16:57:28 +0100 Subject: [PATCH 3/4] change parameter syntax --- src/wanijo/attribute/db.clj | 34 ++++++++--------- src/wanijo/instance/db.clj | 74 ++++++++++++++++++------------------- src/wanijo/tag/db.clj | 16 ++++---- 3 files changed, 62 insertions(+), 62 deletions(-) diff --git a/src/wanijo/attribute/db.clj b/src/wanijo/attribute/db.clj index 9b43faa..8d30796 100644 --- a/src/wanijo/attribute/db.clj +++ b/src/wanijo/attribute/db.clj @@ -3,7 +3,7 @@ (neo4j/defquery findy-by-schema "MATCH (a:attribute)-->(s:schema) - WHERE s.uuid = {uuid} + WHERE s.uuid = $uuid RETURN a ORDER BY a.name") (defn find-by-schema! [schema-uuid] @@ -14,8 +14,8 @@ (neo4j/defquery with-name-in-schema "MATCH (a:attribute)-[:of]->(s:schema) - WHERE a.name = {name} - AND s.uuid = {schema_uuid} + WHERE a.name = $name + AND s.uuid = $schema_uuid RETURN a") (defn with-name-in-schema! [matching-name schema-uuid] (-> (neo4j/exec-query! with-name-in-schema @@ -25,16 +25,16 @@ :a)) (neo4j/defquery create-new - "MATCH (s:schema {uuid:{schema_uuid}}), - (u:user {uuid:{user_uuid}}) + "MATCH (s:schema {uuid: $schema_uuid}), + (u:user {uuid: $user_uuid}) CREATE (a:attribute) CREATE (a)-[:created_by]->(u) CREATE (a)-[:of]->(s) - SET a.type = {type} - SET a.name = {name} - SET a.uuid = {attribute_uuid} - SET a.required = {required} - SET a.created_at = {created_at}") + SET a.type = $type + SET a.name = $name + SET a.uuid = $attribute_uuid + SET a.required = $required + SET a.created_at = $created_at") (defn create-new! [attr schema-uuid user-uuid] (neo4j/exec-query! create-new @@ -46,10 +46,10 @@ (neo4j/defquery edit "MATCH (a:attribute) - WHERE a.uuid = {uuid} - SET a.type = {type} - SET a.name = {name} - SET a.required = {required}") + WHERE a.uuid = $uuid + SET a.type = $type + SET a.name = $name + SET a.required = $required") (defn edit! [attr] (neo4j/exec-query! edit @@ -57,7 +57,7 @@ (neo4j/defquery delete-by-uuid "MATCH (a:attribute)-[c]-() - WHERE a.uuid = {uuid} + WHERE a.uuid = $uuid DELETE c, a") (defn delete-by-uuid! [uuid] (neo4j/exec-query! @@ -65,7 +65,7 @@ {:uuid uuid})) (neo4j/defquery required - "MATCH (a:attribute)-[:of]->(s:schema {uuid:{schema_uuid}}) + "MATCH (a:attribute)-[:of]->(s:schema {uuid: $schema_uuid}) WHERE a.required = 1 RETURN a ORDER BY a.name") @@ -84,7 +84,7 @@ first)) (neo4j/defquery find-by-instance - "MATCH (i:instance {uuid:{instance_uuid}}), + "MATCH (i:instance {uuid: $instance_uuid}), (i)-[:of]->(s:schema), (a:attribute)-[:of]->(s) RETURN a diff --git a/src/wanijo/instance/db.clj b/src/wanijo/instance/db.clj index f9ba9bf..f09af34 100644 --- a/src/wanijo/instance/db.clj +++ b/src/wanijo/instance/db.clj @@ -6,7 +6,7 @@ (neo4j/defquery findy-by-schema "MATCH (i:instance)-[:of]->(s:schema) - WHERE s.uuid = {uuid} + WHERE s.uuid = $uuid OPTIONAL MATCH (i)-[:tagged_with]->(t:tag) OPTIONAL MATCH @@ -34,21 +34,21 @@ (sort-by :name))) (neo4j/defquery create-instance - "MATCH (s:schema {uuid:{schema_uuid}}), - (u:user {uuid:{user_uuid}}) - CREATE (i:instance {uuid:{uuid}})-[:of]->(s), + "MATCH (s:schema {uuid: $schema_uuid}), + (u:user {uuid: $user_uuid}) + CREATE (i:instance {uuid: $uuid})-[:of]->(s), (i)-[:created_by]->(u) - SET i.name = {name}, - i.created_at = {created_at}, - i.updated_at = {created_at}") + SET i.name = $name, + i.created_at = $created_at, + i.updated_at = $created_at") (neo4j/defquery create-property - "MATCH (i:instance {uuid:{uuid}}), - (a:attribute {uuid:{attr_uuid}}) - CREATE (p:property {uuid:{prop_uuid}})-[:of]->(i), + "MATCH (i:instance {uuid: $uuid}), + (a:attribute {uuid: $attr_uuid}) + CREATE (p:property {uuid: $prop_uuid})-[:of]->(i), (p)-[:of]->(a) - SET p.value = {value}, - p.created_at = {created_at}, - p.updated_at = {updated_at}") + SET p.value = $value, + p.created_at = $created_at, + p.updated_at = $updated_at") (defn create! [user-uuid schema-uuid {:keys [name properties]}] @@ -73,7 +73,7 @@ prop-tuples)))) (neo4j/defquery find-by-uuid - "MATCH (i:instance {uuid:{uuid}})-[:of]->(s:schema) + "MATCH (i:instance {uuid: $uuid})-[:of]->(s:schema) RETURN i, s") (defn find-by-uuid! [uuid] {:post [(spec/assert ::domain-instance/instance-with-schema %)]} @@ -85,7 +85,7 @@ first)) (neo4j/defquery find-properties - "MATCH (i:instance {uuid:{uuid}}), + "MATCH (i:instance {uuid: $uuid}), (p:property)-[:of]->(i), (p)-[:of]->(a:attribute) RETURN p, a @@ -98,19 +98,19 @@ {:uuid uuid}))) (neo4j/defquery edit-instance - "MATCH (i:instance {uuid:{uuid}}) - SET i.name = {name}, - i.updated_at = {updated_at}") + "MATCH (i:instance {uuid: $uuid}) + SET i.name = $name, + i.updated_at = $updated_at") (neo4j/defquery edit-property - "MATCH (i:instance {uuid:{instance_uuid}}), - (a:attribute {uuid:{attribute_uuid}}) - MERGE (p:property {uuid:{uuid}})-[:of]->(i) + "MATCH (i:instance {uuid: $instance_uuid}), + (a:attribute {uuid: $attribute_uuid}) + MERGE (p:property {uuid: $uuid})-[:of]->(i) MERGE (p)-[:of]->(a) - ON CREATE SET p.created_at = {now}, - p.updated_at = {now}, - p.value = {value} - ON MATCH SET p.updated_at = {now}, - p.value = {value}") + ON CREATE SET p.created_at = $now, + p.updated_at = $now, + p.value = $value + ON MATCH SET p.updated_at = $now, + p.value = $value") (defn instance->prop-tuples [instance] {:post [(spec/assert ::domain-instance/prop-tuple %)]} (map (fn [prop] @@ -135,7 +135,7 @@ prop-tuples)))) (neo4j/defquery delete - "MATCH (i:instance {uuid:{uuid}}), + "MATCH (i:instance {uuid: $uuid}), (i)-[ic:of]->(s:schema), (i)-[cb:created_by]->(:user) OPTIONAL MATCH @@ -164,7 +164,7 @@ #(-> % direction :created_at))))) (neo4j/defquery outgoing-links - "MATCH (inst:instance {uuid:{uuid}}), + "MATCH (inst:instance {uuid: $uuid}), (inst)-[link:link]->(target:instance), (target)-[:of]->(schema:schema) OPTIONAL MATCH @@ -175,7 +175,7 @@ (group-by-link-and-assoc-tags uuid outgoing-links :target)) (neo4j/defquery incoming-links - "MATCH (inst:instance {uuid:{uuid}}), + "MATCH (inst:instance {uuid: $uuid}), (inst)<-[link:link]-(source:instance), (source)-[:of]->(schema:schema) OPTIONAL MATCH @@ -199,8 +199,8 @@ (db-tag/tags-by-instance! uuid))) (neo4j/defquery is-starred - "MATCH (u:user {uuid:{user_uuid}}), - (i:instance {uuid:{uuid}}) + "MATCH (u:user {uuid: $user_uuid}), + (i:instance {uuid: $uuid}) RETURN EXISTS((i)-[:starred_by]->(u)) AS starred") (defn is-starred! [uuid user-uuid] (-> (neo4j/exec-query! is-starred @@ -210,11 +210,11 @@ :starred)) (neo4j/defquery mark-starred - "MATCH (i:instance {uuid:{uuid}}), - (u:user {uuid:{user_uuid}}) + "MATCH (i:instance {uuid: $uuid}), + (u:user {uuid: $user_uuid}) MERGE (i)-[s:starred_by]->(u) ON CREATE - SET s.created_at = {now}") + SET s.created_at = $now") (defn mark-starred! [uuid user-uuid] (neo4j/exec-query! mark-starred {:uuid uuid @@ -222,9 +222,9 @@ :now (neo4j/now-str)})) (neo4j/defquery remove-starred - "MATCH (:instance {uuid:{uuid}}) + "MATCH (:instance {uuid: $uuid}) -[s:starred_by]-> - (:user {uuid:{user_uuid}}) + (:user {uuid: $user_uuid}) DELETE s") (defn remove-starred! [uuid user-uuid] (neo4j/exec-query! remove-starred @@ -232,7 +232,7 @@ :user_uuid user-uuid})) (neo4j/defquery starred-by-user - "MATCH (u:user {uuid:{user_uuid}}) + "MATCH (u:user {uuid: $user_uuid}) <-[s:starred_by]- (i:instance) RETURN i, s diff --git a/src/wanijo/tag/db.clj b/src/wanijo/tag/db.clj index e26a1ee..cef3bd8 100644 --- a/src/wanijo/tag/db.clj +++ b/src/wanijo/tag/db.clj @@ -12,7 +12,7 @@ ::name])) (neo4j/defquery tags-by-instance - "MATCH (i:instance {uuid:{uuid}})-[:tagged_with]->(t:tag) + "MATCH (i:instance {uuid: $uuid})-[:tagged_with]->(t:tag) RETURN t ORDER BY t.name") (defn tags-by-instance! [instance-uuid] @@ -22,11 +22,11 @@ {:uuid instance-uuid}))) (neo4j/defquery merge-tag - "MATCH (i:instance {uuid:{instance_uuid}}), - (u:user {uuid:{user_uuid}}) - MERGE (t:tag {name:{name}})-[:created_by]->(u) - ON CREATE SET t.uuid = {uuid}, - t.created_at = {now} + "MATCH (i:instance {uuid: $instance_uuid}), + (u:user {uuid: $user_uuid}) + MERGE (t:tag {name: $name})-[:created_by]->(u) + ON CREATE SET t.uuid = $uuid, + t.created_at = $now MERGE (i)-[:tagged_with]->(t)") (spec/def ::merge-tag-tuple (spec/keys :req-un [::specs/instance_uuid @@ -59,9 +59,9 @@ (merge-tag-tuples tags instance-uuid user-uuid))) (neo4j/defquery remove-tag - "MATCH (i:instance {uuid:{instance_uuid}}) + "MATCH (i:instance {uuid: $instance_uuid}) -[c:tagged_with]-> - (t:tag {uuid:{uuid}}) + (t:tag {uuid: $uuid}) DELETE c") (defn remove-tag! [uuid instance-uuid] (neo4j/exec-query! remove-tag From df136ba247c1281f3a7b505fb011822ed87866f6 Mon Sep 17 00:00:00 2001 From: Josha von Gizycki Date: Wed, 6 Jan 2021 14:50:30 +0100 Subject: [PATCH 4/4] update dependencies, fix neo4j-clj-problems, fix $-syntax --- project.clj | 20 ++++++++++++++------ src/wanijo/infrastructure/neo4j.clj | 7 ++++++- src/wanijo/schema/db.clj | 2 +- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/project.clj b/project.clj index b2fe02d..1974219 100644 --- a/project.clj +++ b/project.clj @@ -29,19 +29,27 @@ ;; neo4j [gorillalabs/neo4j-clj "4.1.0"] - [org.neo4j.test/neo4j-harness "4.0.0"] + [org.neo4j.test/neo4j-harness "4.2.1" + :exclusions + [com.fasterxml.jackson.core/jackson-core + commons-codec]] ;; additional server side libs [buddy/buddy-hashers "1.7.0" - :exclusions [commons-codec]] + :exclusions + [com.fasterxml.jackson.dataformat/jackson-dataformat-smile + com.fasterxml.jackson.dataformat/jackson-dataformat-cbor + com.fasterxml.jackson.core/jackson-core + org.bouncycastle/bcprov-jdk15on + org.bouncycastle/bcpkix-jdk15on + commons-codec + cheshire + tigris]] [clj-time "0.15.2"] [markdown-clj "1.10.5"] [dorothy "0.0.7"]] - :profiles {:dev {:plugins [;; neo4j db - [joshavg/lein-neo4j "0.5.0"] - - ;; web stuff + :profiles {:dev {:plugins [;; web stuff [lein-less "1.7.5"] ;; code quality diff --git a/src/wanijo/infrastructure/neo4j.clj b/src/wanijo/infrastructure/neo4j.clj index fd4b58a..fdac842 100644 --- a/src/wanijo/infrastructure/neo4j.clj +++ b/src/wanijo/infrastructure/neo4j.clj @@ -68,7 +68,12 @@ (str (butiful-query qry) "
---Params---
" params)) - (qry session params)))) + ;; neo4j-clj returns lazy lists, but when we leave with-open, + ;; the ResultSet (?) is already closed, so the list cannot + ;; be processed + ;; doall to the rescue to force the list to be evaluated + ;; eagerly + (doall (qry session params))))) (spec/def ::tuple-query-list (spec/coll-of diff --git a/src/wanijo/schema/db.clj b/src/wanijo/schema/db.clj index 2dbf976..86e8b34 100644 --- a/src/wanijo/schema/db.clj +++ b/src/wanijo/schema/db.clj @@ -5,7 +5,7 @@ (neo4j/defquery all-created-by "MATCH (s:schema)-[:created_by]->(u:user) - WHERE u.uuid = {uuid} + WHERE u.uuid = $uuid RETURN s ORDER BY s.name") (defn all-created-by! [user-uuid]