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 expression

    Attribute expressions and operations.

    Attribute expressions and operations.

    Refine attribute matches with various attribute expressions:

    Person.age(42)                           // equality
    Person.name.contains("John")             // fulltext search
    Person.age.!=(42)                        // negation (or `not`)
    Person.age.<(42)                         // comparison (< > <= >=)
    Person.name("John" or "Jonas")           // OR-logic
    Person.age()                             // apply empty value to retract value(s) in updates
    Person.hobbies.assert("golf")               // add value(s) to card-many attributes
    Person.hobbies.retract("golf")            // retract value(s) of card-many attributes
    Person.hobbies.replace("golf", "diving") // replace value(s) of card-many attributes
    Person.tags.k("en")                      // match values of map attributes by key
    Person.age(Nil)                          // match non-asserted datoms (null)
    Person.name(?)                           // initiate input molecules awaiting input at runtime
    Person.name(unify)                       // Unify attributes in self-joins

    Apply aggregate keywords to aggregate attribute value(s):

    // Aggregates on any attribute type
    Person.age(count).get.head         === 3   // count of asserted `age` attribute values
    Person.age(countDistinct).get.head === 3   // count of asserted distinct `age` attribute values
    Person.age(max).get.head           === 38  // maximum `age` value (using `compare`)
    Person.age(min).get.head           === 5   // maximum `age` value (using `compare`)
    Person.age(rand).get.head          === 25  // single random `age` value
    Person.age(sample).get.head        === 27  // single sample `age` value (when single value, same as random)
    
    // Aggregates on any attribute type, returning multiple values
    Person.age(distinct).get.head  === Vector(5, 7, 38)  // distinct `age` values
    Person.age(max(2)).get.head    === Vector(38, 7)     // 2 maximum `age` values
    Person.age(min(2)).get.head    === Vector(5, 7)      // 2 minimum `age` values
    Person.age(rand(2)).get.head   === Stream(5, ?)      // 2 random `age` values (values can re-occur)
    Person.age(sample(2)).get.head === Vector(7, 38)     // 2 sample `age` values
    
    // Aggregates on number attributes
    Person.age(sum).get.head      === 50               // sum of all `age` numbers
    Person.age(avg).get.head      === 16.66666667      // average of all `age` numbers
    Person.age(median).get.head   === 7                // median of all `age` numbers
    Person.age(stddev).get.head   === 15.107025591499  // standard deviation of all `age` numbers
    Person.age(variance).get.head === 228.2222222222   // variance of all `age` numbers
    Definition Classes
    molecule
    See also

    Manual: expressions | aggregates | input molecules

    Tests: expressions

  • AggregateKeywords
  • AggregateKeywordsSchema
  • AttrExpressions
  • LogicImplicits

object AttrExpressions extends AttrExpressions

Source
AttrExpressions.scala
Linear Supertypes
AttrExpressions, AnyRef, Any
Content Hierarchy
Ordering
  1. Grouped
  2. Alphabetic
  3. By Inheritance
Inherited
  1. AttrExpressions
  2. AttrExpressions
  3. AnyRef
  4. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Type Members

  1. trait ? extends AnyRef

    Turn molecule into input molecule awaiting input.

    Turn molecule into input molecule awaiting input.

    Apply input marker ? to attribute to turn molecule into an 'input molecule'.

    At runtime the input molecule expects input for the attribute in place of the ? marker.

    // Input molecule created at compile time.
    val ageOfPersons = m(Person.name_(?).age) // awaiting name of type String
    
    // At runtime, "Ben" is applied as input replacing the `?` placeholder and we can get the age.
    ageOfPersons("Ben").get === List(42)
    Definition Classes
    AttrExpressions
    Note

    Data can only be retrieved from input molecules once they have been resolved with input.
    Input molecule queries are cached and optimized by Datomic.

  2. type ?? = ?
    Definition Classes
    AttrExpressions
  3. trait AttrExpr[Ns, T] extends AnyRef

    Expression methods common for all attributes.

    Expression methods common for all attributes.

    Definition Classes
    AttrExpressions
  4. trait FulltextExpr[Ns, In] extends AnyRef

    Expression methods of String attributes with fulltext search.

    Expression methods of String attributes with fulltext search.

    Definition Classes
    AttrExpressions
  5. trait ManyAttrExpr[Ns, Add, OldNew, Rem] extends AnyRef

    Value update methods for card-many attributes.

    Value update methods for card-many attributes.

    Definition Classes
    AttrExpressions
  6. trait ManyExpr[Ns, In, T] extends ValueAttrExpr[Ns, In, T] with ManyAttrExpr[Ns, T, (T, T), T]

    Expression methods of card-many attributes.

    Expression methods of card-many attributes.

    Definition Classes
    AttrExpressions
  7. trait MapAttrExpr[Ns, In, T] extends ValueAttrExpr[Ns, In, T] with ManyAttrExpr[Ns, (String, T), (String, T), String]

    Expression methods of map attributes.

    Expression methods of map attributes.

    Definition Classes
    AttrExpressions
  8. trait OneExpr[Ns, In, T] extends ValueAttrExpr[Ns, In, T]

    Expression methods of card-one attributes.

    Expression methods of card-one attributes.

    Definition Classes
    AttrExpressions
  9. trait OptionalExpr[Ns, T] extends AnyRef

    Expression methods of optional attributes.

    Expression methods of optional attributes.

    Definition Classes
    AttrExpressions
  10. trait ValueAttrExpr[Ns, In, T] extends AttrExpr[Ns, T]

    Expression methods of value attributes.

    Expression methods of value attributes.

    Definition Classes
    AttrExpressions
  11. trait unify extends AnyRef

    Unify attribute value in self-join.

    Unify attribute value in self-join.

    Apply unify marker to attribute to unify its value with previous values of the same attribute in the molecule in a self-join.

    m(Person.age.name.Beverages * Beverage.name.rating) insert List(
        (23, "Joe", List(("Coffee", 3), ("Cola", 2), ("Pepsi", 3))),
        (25, "Ben", List(("Coffee", 2), ("Tea", 3))),
        (23, "Liz", List(("Coffee", 1), ("Tea", 3), ("Pepsi", 1))))
    
    // What beverages do pairs of 23- AND 25-year-olds like in common?
    // Drink name is unified - Joe and Ben both drink coffee, etc..
    Person.age_(23).name.Beverages.name._Ns.Self
          .age_(25).name.Beverages.name_(unify).get.sorted === List(
      ("Joe", "Coffee", "Ben"),
      ("Liz", "Coffee", "Ben"),
      ("Liz", "Tea", "Ben")
    )
    Definition Classes
    AttrExpressions

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[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.CloneNotSupportedException]) @native()
  6. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  7. def equals(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef → Any
  8. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.Throwable])
  9. final def getClass(): Class[_ <: AnyRef]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  10. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  11. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  12. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  13. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  14. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  15. final def synchronized[T0](arg0: => T0): T0
    Definition Classes
    AnyRef
  16. def toString(): String
    Definition Classes
    AnyRef → Any
  17. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  18. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  19. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException]) @native()

Inherited from AttrExpressions

Inherited from AnyRef

Inherited from Any

Attribute markers

Markers applied to attributes that change the semantics of the attribute/molecule.

Ungrouped