cruxで任意の時間時点での状態をクエリする
例:
cstap社が2017/1/1にTamachiからGotandaに移転
cstap社が2019/07/01をもってtoyokumoに社名変更
を以下のようにvalid time付きでsubmitすることで表現する
code:clojure
(crux/submit-tx
system
[[:crux.tx/put
{:crux.db/id :clojure.company/toyokumo
:name "cstap"
:address "Tamachi"}
[:crux.tx/put
{:crux.db/id :clojure.company/toyokumo
:name "cstap"
:address "Gotanda"}
[:crux.tx/put
{:crux.db/id :clojure.company/toyokumo
:name "toyokumo"
:address "Gotanda"}
crux.api/dbにvalid timeを渡すと、そのvalid time時点でのdbが得られるので、それに対してクエリを行うと過去の状態が分かる
code:clojure
(crux/entity (crux/db system #inst "2016-05-01") :clojure.company/toyokumo) => {:crux.db/id :clojure.company/toyokumo,
:name "cstap",
:address "Tamachi"}
(crux/entity (crux/db system #inst "2017-01-01") :clojure.company/toyokumo) => {:crux.db/id :clojure.company/toyokumo,
:name "cstap",
:address "Gotanda"}
(crux/entity (crux/db system #inst "2019-07-01") :clojure.company/toyokumo) => {:crux.db/id :clojure.company/toyokumo,
:name "toyokumo",
:address "Gotanda"}