From 495e5a737e30651ba7281d58013b2252a891bd9f Mon Sep 17 00:00:00 2001 From: Richard Newman Date: Tue, 30 Aug 2016 12:44:12 -0700 Subject: [PATCH] Review comment: check that Datalog vars don't have a namespace. And fix the only test that uses syntax-quote, which namespace-qualifies bare symbols. --- src/datomish/util.cljc | 20 ++++++++++++-------- test/datomish/query_test.cljc | 10 +++++----- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/datomish/util.cljc b/src/datomish/util.cljc index 8677c2ce..027f1d84 100644 --- a/src/datomish/util.cljc +++ b/src/datomish/util.cljc @@ -30,21 +30,25 @@ ~expr (cond-let ~@rest))))) +(defn ensure-datalog-var [x] + (or (and (symbol? x) + (nil? (namespace x)) + (str/starts-with? (name x) "?")) + (throw (ex-info (str x " is not a Datalog var.") {})))) + (defn var->sql-type-var "Turns '?xyz into :_xyz_type_tag." [x] - (if (and (symbol? x) - (str/starts-with? (name x) "?")) - (keyword (str "_" (subs (name x) 1) "_type_tag")) - (throw (ex-info (str x " is not a Datalog var.") {})))) + (and + (ensure-datalog-var x) + (keyword (str "_" (subs (name x) 1) "_type_tag")))) (defn var->sql-var "Turns '?xyz into :xyz." [x] - (if (and (symbol? x) - (str/starts-with? (name x) "?")) - (keyword (subs (name x) 1)) - (throw (ex-info (str x " is not a Datalog var.") {})))) + (and + (ensure-datalog-var x) + (keyword (subs (name x) 1)))) (defn aggregate->sql-var "Turns (:max 'column) into :%max.column." diff --git a/test/datomish/query_test.cljc b/test/datomish/query_test.cljc index 11730ba6..cd93d777 100644 --- a/test/datomish/query_test.cljc +++ b/test/datomish/query_test.cljc @@ -46,11 +46,11 @@ (let [{tx1 :tx} ( ?tx ~tx0)] - [(!= ?a ~(d/entid (d/db conn) :db/txInstant))] ;; TODO: map ident->entid for values. - ] {})) + [:find '?e '?a '?v '?tx :in '$ :where + '[?e ?a ?v ?tx] + [(list '> '?tx tx0)] + [(list '!= '?a (d/entid (d/db conn) :db/txInstant))] ;; TODO: map ident->entid for values. + ] {})) [[101 (d/entid (d/db conn) :x) 505 tx1]]))) ;; TODO: map entid->ident on egress. (finally (