2012-09-16 27 views

Respuesta

7

Usted debe ser capaz de obtener una lista de todas las particiones de la base de datos mediante la búsqueda de todas las entidades asociadas a la entidad :db.part/db a través del atributo :db.install/partition:

(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)) 

Nota

La versión actual de Datomic (compilación 0.8.3524) tiene un inconveniente tal que :db.part/tx y :db.part/user (dos de las tres particiones incorporadas) se tratan especialmente y no están realmente asociados con :db.part/db a través de :db.install/partition, por lo que el resultado de la función de consulta anterior no incluirá los dos.

Este problema is going to be addressed en una de las versiones futuras de Datomic. Mientras tanto, debe ocuparse de incluir :db.part/tx y :db.part/user en el conjunto de resultados usted mismo.

1

primera método - el uso de consulta

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

segundo método - desde el objeto db

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

El segundo método devuelve secuencia de datomic.db.Partition objetos que puede ser útil si queremos obtener información adicional sobre la partición.

Ambos métodos tienen error/incoherencia conocido: no devuelven: db.part/tx y: particiones incorporadas de db.part/user.

Cuestiones relacionadas