Skip to content

Commit

Permalink
Schema keywords namespaced on a par with Datomic schema
Browse files Browse the repository at this point in the history
  • Loading branch information
tonsky committed May 2, 2014
1 parent fd8edf2 commit 93add0c
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 17 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

- Transactor functions via `:db.fn/call`
- Vanilla JS API bindings
- Schema keywords namespaced on a par with Datomic schema

# 0.1.3

Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ Also check out this blog post about [how DataScript fits into the current webdev

;; Implicit join, multi-valued attribute

(let [schema {:aka {:cardinality :many}}
(let [schema {:aka {:db/cardinality :db.cardinality/many}}
conn (d/create-conn schema)]
(d/transact! conn [ { :db/id -1
:name "Maksim"
Expand Down Expand Up @@ -124,7 +124,7 @@ The following features are supported:
* Database as a value: each DB is an immutable value. New DBs are created on top of old ones, but old ones stay perfectly valid too
* Triple store model
* EA and AV indexes
* Multi-valued attributes via `:cardinality :many`
* Multi-valued attributes via `:db/cardinality :db.cardinality/many`
* Database “mutations” via `transact!`
* Callback-based analogue to txReportQueue via `listen!`

Expand Down Expand Up @@ -162,7 +162,7 @@ Expected soon:
* DataScript is built totally from scratch and is not related by any means to the popular Clojure database Datomic
* Runs in a browser
* Simplified schema, not queryable
* No need to declare attributes except for `:cardinality` `:many`
* No need to declare attributes except for `:db/cardinality` `:db.cardinality/many`
* Any value can be used as entity id, attribute or value. It’s better if they are immutable and fast to compare
* No `db/ident` attributes, keywords are _literally_ attribute values, no integer id behind them
* AV index for all datoms
Expand Down
4 changes: 2 additions & 2 deletions src/datascript.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
(defrecord TxReport [db-before db-after tx-data tempids])

(defn multival? [db attr]
(= (get-in db [:schema attr :cardinality]) :many))
(= (get-in db [:schema attr :db/cardinality]) :db.cardinality/many))

(defn- match-tuple [tuple pattern]
(every? true?
Expand Down Expand Up @@ -94,7 +94,7 @@
(let [tx (inc (.-max-tx db))]
(case op
:db/add
(if (= :many (get-in db [:schema a :cardinality]))
(if (= :db.cardinality/many (get-in db [:schema a :db/cardinality]))
(when (empty? (-search db [e a v]))
[(->Datom e a v tx true)])
(if-let [old-datom (first (-search db [e a]))]
Expand Down
10 changes: 6 additions & 4 deletions test/js/js.html
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,12 @@
</script>


<script src="../../web/out/goog/base.js" type="text/javascript"></script>
<!-- <script src="../../web/out/goog/base.js" type="text/javascript"></script>
<script src="../../web/datascript.js" type="text/javascript"></script>
<script type="text/javascript">goog.require("datascript.js");</script>

-->
<script src="../../web/datascript-0.1.4.min.js" type="text/javascript"></script>

<script type="text/javascript">
var d = datascript.js;

Expand All @@ -84,7 +86,7 @@
}

function test_schema() {
var schema = {"aka": {":cardinality": ":many"}};
var schema = {"aka": {":db/cardinality": ":db.cardinality/many"}};
var db = d.with_datoms(d.empty_db(schema),
[[":db/add", -1, "name", "Ivan"],
[":db/add", -1, "aka", "X"],
Expand Down Expand Up @@ -113,7 +115,7 @@
}

function test_entity() {
var schema = {"aka": {":cardinality": ":many"}};
var schema = {"aka": {":db/cardinality": ":db.cardinality/many"}};
var db = d.with_datoms(d.empty_db(schema),
[{":db/id": -1,
"name": "Ivan",
Expand Down
16 changes: 8 additions & 8 deletions test/test/datascript.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@


(deftest test-with
(let [db (-> (d/empty-db {:aka { :cardinality :many }})
(let [db (-> (d/empty-db {:aka { :db/cardinality :db.cardinality/many }})
(d/with [[:db/add 1 :name "Ivan"]])
(d/with [[:db/add 1 :name "Petr"]])
(d/with [[:db/add 1 :aka "Devil"]])
Expand Down Expand Up @@ -42,7 +42,7 @@
#{["Petr"]}))))))

(deftest test-retract-fns
(let [db (-> (d/empty-db {:aka { :cardinality :many }})
(let [db (-> (d/empty-db {:aka { :db/cardinality :db.cardinality/many }})
(d/with [ { :db/id 1, :name "Ivan", :age 15, :aka ["X" "Y" "Z"] }
{ :db/id 2, :name "Petr", :age 37 } ]))]
(let [db (d/with db [ [:db.fn/retractEntity 1] ])]
Expand Down Expand Up @@ -71,7 +71,7 @@


(deftest test-transact!
(let [conn (d/create-conn {:aka { :cardinality :many }})]
(let [conn (d/create-conn {:aka { :db/cardinality :db.cardinality/many }})]
(d/transact! conn [[:db/add 1 :name "Ivan"]])
(d/transact! conn [[:db/add 1 :name "Petr"]])
(d/transact! conn [[:db/add 1 :aka "Devil"]])
Expand All @@ -85,7 +85,7 @@
#{["Devil"] ["Tupen"]}))))

(deftest test-db-fn
(let [conn (d/create-conn {:aka { :cardinality :many }})
(let [conn (d/create-conn {:aka { :db/cardinality :db.cardinality/many }})
inc-age (fn [db name]
(if-let [[eid age] (first (d/q '{:find [?e ?age]
:in [$ ?name]
Expand Down Expand Up @@ -131,7 +131,7 @@
[3 "Sergey" 30 (+ d/tx0 2)]}))))

(deftest test-entity
(let [conn (d/create-conn {:aka {:cardinality :many}})
(let [conn (d/create-conn {:aka {:db/cardinality :db.cardinality/many}})
p1 {:db/id 1, :name "Ivan", :age 19, :aka ["X" "Y"]}
p2 {:db/id 2, :name "Ivan", :sex "male", :aka ["Z"]}
t1 (d/transact! conn [p1 p2])]
Expand Down Expand Up @@ -164,8 +164,8 @@


(deftest test-explode
(let [conn (d/create-conn { :aka { :cardinality :many }
:also { :cardinality :many} })]
(let [conn (d/create-conn { :aka { :db/cardinality :db.cardinality/many }
:also { :db/cardinality :db.cardinality/many} })]
(d/transact! conn [{:db/id -1
:name "Ivan"
:age 16
Expand Down Expand Up @@ -211,7 +211,7 @@


(deftest test-q-many
(let [db (-> (d/empty-db {:aka {:cardinality :many}})
(let [db (-> (d/empty-db {:aka {:db/cardinality :db.cardinality/many}})
(d/with [ [:db/add 1 :name "Ivan"]
[:db/add 1 :aka "ivolga"]
[:db/add 1 :aka "pi"]
Expand Down

0 comments on commit 93add0c

Please sign in to comment.