2012-09-16 11 views

Antwort

7

Sie sollten in der Lage sein, eine Liste aller Partitionen in der Datenbank für alle Einrichtungen, die von der Suche zu erhalten, die mit der :db.part/db Entität über das :db.install/partition Attribut:

(ns myns 
    (:require [datomic.api :as d])) 

(defn get-partitions [db] 
    (d/q '[:find ?ident :where [:db.part/db :db.install/partition ?p] 
          [?p :db/ident ?ident]] 
     db)) 

Hinweis

Die aktuelle Version von Datomic (Build 0.8.3524) hat einen Mangel, so dass :db.part/tx und :db.part/user (zwei der drei integrierten Partitionen) speziell behandelt werden und nicht tatsächlich :db.part/db über 0 zugeordnet sind, so dass das Ergebnis der obigen Abfragefunktion die beiden nicht enthält.

Dieses Problem is going to be addressed in einer der zukünftigen Builds von Datomic. In der Zwischenzeit sollten Sie selbst darauf achten, :db.part/tx und :db.part/user in das Ergebnisset aufzunehmen.

1

1. Methode - mit Hilfe von Abfrage

=> (q '[:find ?i :where 
     [:db.part/db :db.install/partition ?p] [?p :db/ident ?i]] 
    (db conn)) 

2. Methode - von db Objekt

(filter #(instance? datomic.db.Partition %) (:elements (db conn))) 

Die zweite Methode gibt Sequenz von datomic.db.Partition Objekte, die sein kann, nützlich, wenn wir zusätzliche Informationen über die Partition erhalten möchten.

Beide Methoden haben Fehler/Inkonsistenz bekannt: sie nicht zurück: db.part/tx und: db.part/user Einbau-Partitionen.

Verwandte Themen