Skip to content

Commit 717bde7

Browse files
committed
Moved raise and cond+ to util
1 parent 8e203f7 commit 717bde7

File tree

9 files changed

+181
-173
lines changed

9 files changed

+181
-173
lines changed

src/datascript/built_ins.cljc

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
(ns datascript.built-ins
22
(:require
33
[clojure.string :as str]
4-
[datascript.db :as db #?(:cljs :refer-macros :clj :refer) [raise]]
5-
[datascript.impl.entity :as de]))
4+
[datascript.db :as db]
5+
[datascript.impl.entity :as de]
6+
[datascript.util :as util]))
67

78
(defn- -differ? [& xs]
89
(let [l (count xs)]
@@ -11,7 +12,7 @@
1112
(defn- -get-else
1213
[db e a else-val]
1314
(when (nil? else-val)
14-
(raise "get-else: nil default value is not supported" {:error :query/where}))
15+
(util/raise "get-else: nil default value is not supported" {:error :query/where}))
1516
(if-some [datom (first (db/-search db [(db/entid db e) a]))]
1617
(:v datom)
1718
else-val))

src/datascript/db.cljc

Lines changed: 47 additions & 85 deletions
Large diffs are not rendered by default.

src/datascript/parser.cljc

Lines changed: 43 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
#?(:cljs (:require-macros [datascript.parser :refer [deftrecord]]))
44
(:require
55
[clojure.set :as set]
6-
[datascript.db :as db #?(:cljs :refer-macros :clj :refer) [raise]]))
6+
[datascript.db :as db]
7+
[datascript.util :as util]))
78

89
;; utils
910

@@ -103,7 +104,7 @@
103104

104105
(defn parse-var-required [form]
105106
(or (parse-variable form)
106-
(raise "Cannot parse var, expected symbol starting with ?, got: " form
107+
(util/raise "Cannot parse var, expected symbol starting with ?, got: " form
107108
{:error :parser/rule-var, :form form})))
108109

109110
(defn parse-src-var [form]
@@ -153,13 +154,13 @@
153154
required* (parse-seq parse-var-required required)
154155
free* (parse-seq parse-var-required rest)]
155156
(when (and (empty? required*) (empty? free*))
156-
(raise "Cannot parse rule-vars, expected [ variable+ | ([ variable+ ] variable*) ]"
157+
(util/raise "Cannot parse rule-vars, expected [ variable+ | ([ variable+ ] variable*) ]"
157158
{:error :parser/rule-vars, :form form}))
158159
(when-not (distinct? (concat required* free*))
159-
(raise "Rule variables should be distinct"
160+
(util/raise "Rule variables should be distinct"
160161
{:error :parser/rule-vars, :form form}))
161162
(RuleVars. required* free*))
162-
(raise "Cannot parse rule-vars, expected [ variable+ | ([ variable+ ] variable*) ]"
163+
(util/raise "Cannot parse rule-vars, expected [ variable+ | ([ variable+ ] variable*) ]"
163164
{:error :parser/rule-vars, :form form})))
164165

165166
(defn flatten-rule-vars [rule-vars]
@@ -196,7 +197,7 @@
196197
(= (second form) '...))
197198
(if-let [sub-bind (parse-binding (first form))]
198199
(with-source (BindColl. sub-bind) form)
199-
(raise "Cannot parse collection binding"
200+
(util/raise "Cannot parse collection binding"
200201
{:error :parser/binding, :form form}))))
201202

202203
(defn parse-tuple-el [form]
@@ -207,7 +208,7 @@
207208
(when-let [sub-bindings (parse-seq parse-tuple-el form)]
208209
(if-not (empty? sub-bindings)
209210
(with-source (BindTuple. sub-bindings) form)
210-
(raise "Tuple binding cannot be empty"
211+
(util/raise "Tuple binding cannot be empty"
211212
{:error :parser/binding, :form form}))))
212213

213214
(defn parse-bind-rel [form]
@@ -222,7 +223,7 @@
222223
(parse-bind-tuple form)
223224
(parse-bind-ignore form)
224225
(parse-bind-scalar form)
225-
(raise "Cannot parse binding, expected (bind-scalar | bind-tuple | bind-coll | bind-rel)"
226+
(util/raise "Cannot parse binding, expected (bind-scalar | bind-tuple | bind-coll | bind-rel)"
226227
{:error :parser/binding, :form form})))
227228

228229

@@ -294,9 +295,9 @@
294295
args* (parse-seq parse-fn-arg args)]
295296
(if (and fn* args*)
296297
(Aggregate. fn* args*)
297-
(raise "Cannot parse custom aggregate call, expect ['aggregate' variable fn-arg+]"
298+
(util/raise "Cannot parse custom aggregate call, expect ['aggregate' variable fn-arg+]"
298299
{:error :parser/find, :fragment form})))
299-
(raise "Cannot parse custom aggregate call, expect ['aggregate' variable fn-arg+]"
300+
(util/raise "Cannot parse custom aggregate call, expect ['aggregate' variable fn-arg+]"
300301
{:error :parser/find, :fragment form}))))
301302

302303
(defn parse-pull-expr [form]
@@ -313,9 +314,9 @@
313314
(parse-constant pattern))]
314315
(if (and src* var* pattern*)
315316
(Pull. src* var* pattern*)
316-
(raise "Cannot parse pull expression, expect ['pull' src-var? variable (constant | variable | plain-symbol)]"
317+
(util/raise "Cannot parse pull expression, expect ['pull' src-var? variable (constant | variable | plain-symbol)]"
317318
{:error :parser/find, :fragment form})))
318-
(raise "Cannot parse pull expression, expect ['pull' src-var? variable (constant | variable | plain-symbol)]"
319+
(util/raise "Cannot parse pull expression, expect ['pull' src-var? variable (constant | variable | plain-symbol)]"
319320
{:error :parser/find, :fragment form}))))
320321

321322
(defn parse-find-elem [form]
@@ -359,7 +360,7 @@
359360
(parse-find-coll form)
360361
(parse-find-scalar form)
361362
(parse-find-tuple form)
362-
(raise "Cannot parse :find, expected: (find-rel | find-coll | find-tuple | find-scalar)"
363+
(util/raise "Cannot parse :find, expected: (find-rel | find-coll | find-tuple | find-scalar)"
363364
{:error :parser/find, :fragment form})))
364365

365366

@@ -384,7 +385,7 @@
384385
(defn parse-with [form]
385386
(or
386387
(parse-seq parse-variable form)
387-
(raise "Cannot parse :with clause, expected [ variable+ ]"
388+
(util/raise "Cannot parse :with clause, expected [ variable+ ]"
388389
{:error :parser/with, :form form})))
389390

390391

@@ -400,7 +401,7 @@
400401
(defn parse-in [form]
401402
(or
402403
(parse-seq parse-in-binding form)
403-
(raise "Cannot parse :in clause, expected (src-var | % | plain-symbol | bind-scalar | bind-tuple | bind-coll | bind-rel)"
404+
(util/raise "Cannot parse :in clause, expected (src-var | % | plain-symbol | bind-scalar | bind-tuple | bind-coll | bind-rel)"
404405
{:error :parser/in, :form form})))
405406

406407

@@ -442,7 +443,7 @@
442443
(when-let [pattern* (parse-seq parse-pattern-el next-form)]
443444
(if-not (empty? pattern*)
444445
(with-source (Pattern. source* pattern*) form)
445-
(raise "Pattern could not be empty"
446+
(util/raise "Pattern could not be empty"
446447
{:error :parser/where, :form form})))))
447448

448449
(defn parse-call [form]
@@ -477,10 +478,10 @@
477478
(when name*
478479
(cond
479480
(empty? args)
480-
(raise "rule-expr requires at least one argument"
481+
(util/raise "rule-expr requires at least one argument"
481482
{:error :parser/where, :form form})
482483
(nil? args*)
483-
(raise "Cannot parse rule-expr arguments, expected [ (variable | constant | '_')+ ]"
484+
(util/raise "Cannot parse rule-expr arguments, expected [ (variable | constant | '_')+ ]"
484485
{:error :parser/where, :form form})
485486
:else
486487
(RuleExpr. source* name* args*)
@@ -508,7 +509,7 @@
508509

509510
(defn- validate-join-vars [required free form]
510511
(when (and (empty? required) (empty? free))
511-
(raise "Join variables should not be empty"
512+
(util/raise "Join variables should not be empty"
512513
{:error :parser/where, :form form})))
513514

514515
(defn- validate-not [clause form]
@@ -523,7 +524,7 @@
523524
(-> (Not. source* (collect-vars-distinct clauses*) clauses*)
524525
(with-source form)
525526
(validate-not form))
526-
(raise "Cannot parse 'not' clause, expected [ src-var? 'not' clause+ ]"
527+
(util/raise "Cannot parse 'not' clause, expected [ src-var? 'not' clause+ ]"
527528
{:error :parser/where, :form form}))))))
528529

529530
(defn parse-not-join [form]
@@ -536,7 +537,7 @@
536537
(-> (Not. source* vars* clauses*)
537538
(with-source form)
538539
(validate-not form))
539-
(raise "Cannot parse 'not-join' clause, expected [ src-var? 'not-join' [variable+] clause+ ]"
540+
(util/raise "Cannot parse 'not-join' clause, expected [ src-var? 'not-join' [variable+] clause+ ]"
540541
{:error :parser/where, :form form})))))))
541542

542543
(defn validate-or [clause form]
@@ -551,7 +552,7 @@
551552
(let [clauses* (parse-clauses (next form))]
552553
(if (not-empty clauses*)
553554
(And. clauses*)
554-
(raise "Cannot parse 'and' clause, expected [ 'and' clause+ ]"
555+
(util/raise "Cannot parse 'and' clause, expected [ 'and' clause+ ]"
555556
{:error :parser/where, :form form})))))
556557

557558
(defn parse-or [form]
@@ -562,7 +563,7 @@
562563
(-> (Or. source* (RuleVars. nil (collect-vars-distinct clauses*)) clauses*)
563564
(with-source form)
564565
(validate-or form))
565-
(raise "Cannot parse 'or' clause, expected [ src-var? 'or' clause+ ]"
566+
(util/raise "Cannot parse 'or' clause, expected [ src-var? 'or' clause+ ]"
566567
{:error :parser/where, :form form}))))))
567568

568569
(defn parse-or-join [form]
@@ -575,7 +576,7 @@
575576
(-> (Or. source* vars* clauses*)
576577
(with-source form)
577578
(validate-or form))
578-
(raise "Cannot parse 'or-join' clause, expected [ src-var? 'or-join' [variable+] clause+ ]"
579+
(util/raise "Cannot parse 'or-join' clause, expected [ src-var? 'or-join' [variable+] clause+ ]"
579580
{:error :parser/where, :form form})))))))
580581

581582

@@ -617,15 +618,15 @@
617618
(parse-fn form)
618619
(parse-rule-expr form)
619620
(parse-pattern form)
620-
(raise "Cannot parse clause, expected (data-pattern | pred-expr | fn-expr | rule-expr | not-clause | not-join-clause | or-clause | or-join-clause)"
621+
(util/raise "Cannot parse clause, expected (data-pattern | pred-expr | fn-expr | rule-expr | not-clause | not-join-clause | or-clause | or-join-clause)"
621622
{:error :parser/where, :form form} )))
622623

623624
(defn parse-clauses [clauses]
624625
(parse-seq parse-clause clauses))
625626

626627
(defn parse-where [form]
627628
(or (parse-clauses form)
628-
(raise "Cannot parse :where clause, expected [clause+]"
629+
(util/raise "Cannot parse :where clause, expected [clause+]"
629630
{:error :parser/where, :form form})))
630631

631632

@@ -642,18 +643,18 @@
642643
(if (sequential? head)
643644
(let [[name & vars] head
644645
name* (or (parse-plain-symbol name)
645-
(raise "Cannot parse rule name, expected plain-symbol"
646+
(util/raise "Cannot parse rule name, expected plain-symbol"
646647
{:error :parser/rule, :form form}))
647648
vars* (parse-rule-vars vars)
648649
clauses* (or (not-empty (parse-clauses clauses))
649-
(raise "Rule branch should have clauses"
650+
(util/raise "Rule branch should have clauses"
650651
{:error :parser/rule, :form form}))]
651652
{:name name*
652653
:vars vars*
653654
:clauses clauses*})
654-
(raise "Cannot parse rule head, expected [rule-name rule-vars], got: " head
655+
(util/raise "Cannot parse rule head, expected [rule-name rule-vars], got: " head
655656
{:error :parser/rule, :form form})))
656-
(raise "Cannot parse rule, expected [rule-head clause+]"
657+
(util/raise "Cannot parse rule, expected [rule-head clause+]"
657658
{:error :parser/rule, :form form})))
658659

659660
(defn validate-arity [name branches]
@@ -662,7 +663,7 @@
662663
(doseq [b (next branches)
663664
:let [vars (:vars b)]]
664665
(when (not= arity0 (rule-vars-arity vars))
665-
(raise "Arity mismatch for rule '" (:symbol name) "': "
666+
(util/raise "Arity mismatch for rule '" (:symbol name) "': "
666667
(flatten-rule-vars vars0) " vs. " (flatten-rule-vars vars)
667668
{:error :parser/rule, :rule name})))))
668669

@@ -711,24 +712,24 @@
711712
(set/union where-vars in-vars))
712713
shared (set/intersection find-vars with-vars)]
713714
(when-not (empty? unknown)
714-
(raise "Query for unknown vars: " (mapv :symbol unknown)
715+
(util/raise "Query for unknown vars: " (mapv :symbol unknown)
715716
{:error :parser/query, :vars unknown, :form form}))
716717
(when-not (empty? shared)
717-
(raise ":find and :with should not use same variables: " (mapv :symbol shared)
718+
(util/raise ":find and :with should not use same variables: " (mapv :symbol shared)
718719
{:error :parser/query, :vars shared, :form form})))
719720

720721
(when-some [return-map (:qreturn-map q)]
721722
(when (instance? FindScalar (:qfind q))
722-
(raise (:type return-map) " does not work with single-scalar :find"
723+
(util/raise (:type return-map) " does not work with single-scalar :find"
723724
{:error :parser/query, :form form}))
724725
(when (instance? FindColl (:qfind q))
725-
(raise (:type return-map) " does not work with collection :find"
726+
(util/raise (:type return-map) " does not work with collection :find"
726727
{:error :parser/query, :form form})))
727728

728729
(when-some [return-symbols (:symbols (:qreturn-map q))]
729730
(let [find-elements (find-elements (:qfind q))]
730731
(when-not (= (count return-symbols) (count find-elements))
731-
(raise "Count of " (:type (:qreturn-map q)) " must match count of :find"
732+
(util/raise "Count of " (:type (:qreturn-map q)) " must match count of :find"
732733
{:error :parser/query
733734
:return-map (cons (:type (:qreturn-map q)) return-symbols)
734735
:find find-elements
@@ -737,7 +738,7 @@
737738
(when (< 1 (->> [(:keys form-map) (:syms form-map) (:strs form-map)]
738739
(filter some?)
739740
(count)))
740-
(raise "Only one of :keys/:syms/:strs must be present"
741+
(util/raise "Only one of :keys/:syms/:strs must be present"
741742
{:error :parser/query, :form form}))
742743

743744
(let [in-vars (collect-vars (:qin q))
@@ -746,33 +747,33 @@
746747
(when-not (and (distinct? in-vars)
747748
(distinct? in-sources)
748749
(distinct? in-rules))
749-
(raise "Vars used in :in should be distinct"
750+
(util/raise "Vars used in :in should be distinct"
750751
{:error :parser/query, :form form})))
751752

752753
(let [with-vars (collect-vars (:qwith q))]
753754
(when-not (distinct? with-vars)
754-
(raise "Vars used in :with should be distinct"
755+
(util/raise "Vars used in :with should be distinct"
755756
{:error :parser/query, :form form})))
756757

757758
(let [in-sources (collect #(instance? SrcVar %) (:qin q) #{})
758759
where-sources (collect #(instance? SrcVar %) (:qwhere q) #{})
759760
unknown (set/difference where-sources in-sources)]
760761
(when-not (empty? unknown)
761-
(raise "Where uses unknown source vars: " (mapv :symbol unknown)
762+
(util/raise "Where uses unknown source vars: " (mapv :symbol unknown)
762763
{:error :parser/query, :vars unknown, :form form})))
763764

764765
(let [rule-exprs (collect #(instance? RuleExpr %) (:qwhere q))
765766
rules-vars (collect #(instance? RulesVar %) (:qin q))]
766767
(when (and (not (empty? rule-exprs))
767768
(empty? rules-vars))
768-
(raise "Missing rules var '%' in :in"
769+
(util/raise "Missing rules var '%' in :in"
769770
{:error :parser/query, :form form}))))
770771

771772
(defn parse-query [q]
772773
(let [qm (cond
773774
(map? q) q
774775
(sequential? q) (query->map q)
775-
:else (raise "Query should be a vector or a map"
776+
:else (util/raise "Query should be a vector or a map"
776777
{:error :parser/query, :form q}))
777778
qwhere (parse-where (:where qm []))
778779
res (map->Query

0 commit comments

Comments
 (0)