Packages

  • package root

    Documentation/API for the Molecule library - a meta DSL for the Datomic database.

    Manual | scalamolecule.org | Github | Forum

    Definition Classes
    root
  • package molecule

    Molecule library - a Scala meta-DSL for the Datomic database.

    Molecule library - a Scala meta-DSL for the Datomic database.

    See api package for various api imports to start using Molecule.

    Sub-packages

    api Molecule API.
    ast Internal Molecule ASTs.
    boilerplate Internal interfaces for auto-generated DSL boilerplate code.
    composition    Builder methods to compose molecules.
    exceptions Exceptions thrown by Molecule.
    expression Attribute expressions and operations.
    facade Molecule facades to Datomic.
    factory Implicit macro methods `m` to instantiate molecules from custom DSL molecule constructs.
    input Input molecules awaiting input.
    macros Internal macros generating molecule code from custom DSL molecule constructs.
    generic Interfaces to generic information about datoms and Datomic database.
    ops Internal operational helpers for transforming DSL to molecule.
    schema Schema definition DSL.
    transform Internal transformers from DSL to Model/Query/Transaction.
    util Internal Java database functions for Datomic.

    Definition Classes
    root
  • package api

    Public interface to be imported to use Molecule.

    Public interface to be imported to use Molecule.

    To make the Molecule macro materializations as fast as possible we try to import as few macro implicits as possible. If your application code build molecules with at the most 10 attributes, then you can do the following import to start using Molecule:

    import molecule.api.out10._

    out means "output molecule" , and 10 the maximum arity or number of attributes of your molecules.

    If you use input molecules awaiting an input then you can add inX where X is how many inputs (1, 2 or 3) you will use, for instance:

    import molecule.api.in2_out10._

    This way we keep the implicit macro def lookups to a minimum and compilation speed as fast as possible.

    Arities can be changed anytime you like. But not to a lower arity than that of the molecules you use in scope of the import.

    Definition Classes
    molecule
  • package exception
    Definition Classes
    api
  • package get

    Synchronous getter methods to retrieve data from Datomic.

    Synchronous getter methods to retrieve data from Datomic.

    The Datomic On-Prem(ises) server model provides a Peer that returns data synchronously. The Peer which lives in application memory caches data aggressively and for data fitting in memory latency can be extremely low and queries return very fast. And even when access to disk is needed, clever branching is used. Memcached is also an option.

    The Datomic Cloud model data returns data asynchronously. If Datomic creates a Java API for the Cloud model, Molecule could relatively easy adapt to this model too. In the meanwhile, Future-wrapped methods in this package can be used.

    Molecule has 5 groups of synchronous getters, each returning data in various formats:

    • GetArray - fastest retrieved typed data set. Can be traversed with a fast while loop
    • GetIterable - for lazily traversing row by row
    • GetJson - data formatted as Json string
    • GetList - default getter returning Lists of tuples. Convenient typed data, suitable for smaller data sets
    • GetRaw - fastest retrieved raw un-typed data from Datomic

    Getters in each of the 5 groups come with 5 time-dependent variations:

    • get [current data]
    • getAsOf
    • getSince
    • getWith
    • getHistory

    Each time variation has various overloads taking different parameters (see each group for more info).

    Definition Classes
    api
    See also

    equivalent asynchronous getters in the getAsync package.

  • package getAsync

    Asynchronous getter methods to retrieve data from Datomic.

    Asynchronous getter methods to retrieve data from Datomic.

    For convenience, all synchronous getter methods from the get package are here wrapped in Futures.

    The Datomic On-Prem(ises) server model provides a Peer that returns data synchronously. The Peer which lives in application memory caches data aggressively and for data fitting in memory latency can be extremely low and queries return very fast. And even when access to disk is needed, clever branching is used. Memcached is also an option.

    The Datomic Cloud model data returns data asynchronously. If Datomic creates a Java API for the Cloud model, Molecule could relatively easy adapt to this model too. In the meanwhile, Future-wrapped methods in this package can be used.

    Molecule has 5 groups of asynchronous getters, each returning Futures of data in various formats:

    • GetAsyncArray - fastest retrieved typed data set. Can be traversed with a fast while loop
    • GetAsyncIterable - for lazily traversing row by row
    • GetAsyncJson - data formatted as Json string
    • GetAsyncList - default getter returning Lists of tuples. Convenient typed data, suitable for smaller data sets
    • GetAsyncRaw - fastest retrieved raw un-typed data from Datomic

    Getters in each of the 5 groups come with 5 time-dependent variations:

    • getAsync [current data]
    • getAsyncAsOf
    • getAsyncSince
    • getAsyncWith
    • getAsyncHistory

    Each time variation has various overloads taking different parameters (see each group for more info).

    Definition Classes
    api
    See also

    equivalent synchronous getters in the get package.

  • Entity
  • EntityOps
  • Molecule
  • OptionalMapOps
  • ShowDebug
  • TxMethods
  • core
  • in1_out1
  • in1_out10
  • in1_out11
  • in1_out12
  • in1_out13
  • in1_out14
  • in1_out15
  • in1_out16
  • in1_out17
  • in1_out18
  • in1_out19
  • in1_out2
  • in1_out20
  • in1_out21
  • in1_out22
  • in1_out3
  • in1_out4
  • in1_out5
  • in1_out6
  • in1_out7
  • in1_out8
  • in1_out9
  • in2_out1
  • in2_out10
  • in2_out11
  • in2_out12
  • in2_out13
  • in2_out14
  • in2_out15
  • in2_out16
  • in2_out17
  • in2_out18
  • in2_out19
  • in2_out2
  • in2_out20
  • in2_out21
  • in2_out22
  • in2_out3
  • in2_out4
  • in2_out5
  • in2_out6
  • in2_out7
  • in2_out8
  • in2_out9
  • in3_out1
  • in3_out10
  • in3_out11
  • in3_out12
  • in3_out13
  • in3_out14
  • in3_out15
  • in3_out16
  • in3_out17
  • in3_out18
  • in3_out19
  • in3_out2
  • in3_out20
  • in3_out21
  • in3_out22
  • in3_out3
  • in3_out4
  • in3_out5
  • in3_out6
  • in3_out7
  • in3_out8
  • in3_out9
  • out1
  • out10
  • out11
  • out12
  • out13
  • out14
  • out15
  • out16
  • out17
  • out18
  • out19
  • out2
  • out20
  • out21
  • out22
  • out3
  • out4
  • out5
  • out6
  • out7
  • out8
  • out9
t

molecule.api

EntityOps

trait EntityOps extends AnyRef

Operations on multiple entities.

Source
EntityOps.scala
Linear Supertypes
AnyRef, Any
Type Hierarchy
Ordering
  1. Grouped
  2. Alphabetic
  3. By Inheritance
Inherited
  1. EntityOps
  2. AnyRef
  3. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  5. def clone(): AnyRef
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @native() @throws( ... )
  6. def debugRetract(eids: Iterable[Long], txMetaDataMolecules: MoleculeBase*)(implicit conn: Conn): Unit

    Debug retracting multiple entities with optional transaction meta data.

    Debug retracting multiple entities with optional transaction meta data.

    Without affecting the database, a multiple entity retract action can be debugged by adding a 'D' (for 'Debug') to the retract method.

    Here we debug a possible retraction of two comment entities with transaction meta data asserting that the retraction was done by Ben Goodman:

    debugRetract(Seq(commentEid1, commentEid2), MetaData.user("Ben Goodman"))

    This will print debugging info about the retraction to output (without affecting the database):

    ## 1 ## molecule.Datomic.debugRetract
    ===================================================================================================================
    1      Model(
      1      TxMetaData(
        1      Atom(metaData,user,String,1,Eq(List(Ben Goodman)),None,List(),List())))
    ------------------------------------------------
    2      List(
      1      :db/add     'tx                             :MetaData/user     Values(Eq(List(Ben Goodman)),None)   Card(1))
    ------------------------------------------------
    3      List(
      1      List(
        1      :db.fn/retractEntity   17592186045445
        2      :db.fn/retractEntity   17592186045446
        3      :db/add   #db/id[:db.part/tx -1000097]    :MetaData/user     b                                    Card(1)))
    ===================================================================================================================
    eids

    Iterable of entity ids of type Long

    txMetaDataMolecules

    Zero or more transaction meta data molecules

    conn

    Implicit Conn value in scope

    returns

    Unit (prints to output)

  7. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  8. def equals(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  9. def finalize(): Unit
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  10. final def getClass(): Class[_]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  11. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  12. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  13. implicit final def long2Entity(id: Long)(implicit conn: Conn): Entity

    Long -> Entity api implicit.

    Long -> Entity api implicit.

    Convenience implicit to allow calling Entity methods directly on entity Long value.

    // Get entity id of Ben
    val benId = Person.e.name_("Ben").get.head
    
    // Retract Ben entity directly on his entity id
    benId.retract
    id

    Entity id of type Long

    conn

    Implicit Conn value in scope

  14. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  15. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  16. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  17. def retract(eids: Iterable[Long], txMetaDataMolecules: MoleculeBase*)(implicit conn: Conn): TxReport

    Retract multiple entities with optional transaction meta data.

    Retract multiple entities with optional transaction meta data.

    0 or more transaction meta data molecules can be asserted together with a retraction of entities.

    Here we retract two comment entities with transaction meta data asserting that the retraction was done by Ben Goodman:

    retract(Seq(commentEid1, commentEid2), MetaData.user("Ben Goodman"))

    We can then later see what comments Ben Goodman retracted (op_(false)):

    Comment.e.text.op_(false).Tx(MetaData.user_("Ben Goodman")).getHistory === List(
      (commentEid1, "I like this"),
      (commentEid2, "I hate this")
    )
    eids

    Iterable of entity ids of type Long

    txMetaDataMolecules

    Zero or more transaction meta data molecules

    conn

    Implicit Conn value in scope

    returns

    TxReport with result of retract

    See also

    Manual | Test

  18. def retractAsync(eids: Iterable[Long], txMetaDataMolecules: MoleculeBase*)(implicit conn: Conn, ec: ExecutionContext): Future[TxReport]

    Asynchronously retract multiple entities with optional transaction meta data.

    Asynchronously retract multiple entities with optional transaction meta data.

    0 or more transaction meta data molecules can be asserted together with a retraction of entities.

    Here we asynchronously retract two comment entities with transaction meta data asserting that the retraction was done by Ben Goodman:

    retractAsync(Seq(commentEid1, commentEid2), MetaData.user("Ben Goodman"))

    We can then later see what comments Ben Goodman retracted (op_(false)):

    Comment.e.text.op_(false).Tx(MetaData.user_("Ben Goodman")).getHistory === List(
      (commentEid1, "I like this"),
      (commentEid2, "I hate this")
    )
    eids

    Iterable of entity ids of type Long

    txMetaDataMolecules

    Zero or more transaction meta data molecules

    conn

    Implicit Conn value in scope

    returns

    TxReport with result of retract

    See also

    Manual | Test

  19. final def synchronized[T0](arg0: ⇒ T0): T0
    Definition Classes
    AnyRef
  20. def toString(): String
    Definition Classes
    AnyRef → Any
  21. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  22. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  23. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @throws( ... )

Inherited from AnyRef

Inherited from Any

Entity operations

Ungrouped