Packages

  • package root

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

    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.

    Definition Classes
    root
  • package core
    Definition Classes
    molecule
  • 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
    core
  • trait AttrExpressions extends AnyRef

    Attribute expression markers and methods.

    Attribute expression markers and methods.

    Person.age(42)                           // equality
    Person.name.contains("John")             // fulltext search
    Person.age.!=(42)                        // negation (or `not`)
    Person.age.<(42)                         // comparison (< > <= >=)
    Person.age().get                         // match non-asserted datoms (null) in query
    Person(benId).age().update               // apply empty value to retract value(s) in updates
    Person.hobbies.assert("golf")            // assert card-many value(s)
    Person.hobbies.replace("golf", "diving") // replace card-many attribute value(s)
    Person.hobbies.retract("golf")           // retract card-many attribute value(s)
    Person.tags.k("en")                      // match values of map attributes by key
    Person.name(?)                           // initiate input molecules awaiting input at runtime
    Person.name(unify)                       // Unify attributes in self-joins
    Definition Classes
    expression
  • 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
  • Values

trait Values extends AnyRef

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

Value Members

  1. def !=(value: T, moreValues: T*): Ns with Attr

    Match negated value(s) of filtered map attribute.

    Match negated value(s) of filtered map attribute.

    Greeting.id.strMap insert List(
      (1, Map("en" -> "Hi there", "da" -> "Hejsa")),
      (2, Map("en" -> "Oh, Hi", "da" -> "Hilser", "fr" -> "Bonjour", "it" -> "Bon giorno")),
      (3, Map("en" -> "Hello", "da" -> "Hej")),
      (4, Map("da" -> "Hej"))
    )
    
    // Apply key filter only
    Greeting.id.strMap_.k("en").get === List(1, 2, 3)
    
    // Apply additional negation value filter
    Greeting.id.strMap_.k("en").!=("Hello").get === List(1, 2)
    Greeting.id.strMap.k("en").!=("Hello").get === List(
      (1, Map("en" -> "Hi there")),
      (2, Map("en" -> "Oh, Hi"))
    )
    
    // Apply multiple negation value filters (OR semantics)
    Greeting.id.strMap_.k("en").!=("Hello", "Hi there").get === List(2)
    
    // Same as
    Greeting.id.strMap_.k("en").not("Hello", "Hi there").get === List(2)
    value

    Filter value

    moreValues

    Optional additional filter values

    returns

    Filtered molecule

  2. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  3. final def ##: Int
    Definition Classes
    AnyRef → Any
  4. def <(upper: T): Ns with Attr

    Match values of filtered map attribute less than upper value.

    Match values of filtered map attribute less than upper value.

    Greeting.id.strMap insert List(
      (1, Map("en" -> "Hi there", "da" -> "Hejsa")),
      (2, Map("en" -> "Oh, Hi", "da" -> "Hilser", "fr" -> "Bonjour", "it" -> "Bon giorno")),
      (3, Map("en" -> "Hello", "da" -> "Hej")),
      (4, Map("da" -> "Hej"))
    )
    
    // Apply key filter only
    Greeting.id.strMap_.k("en").get === List(1, 2, 3)
    
    // Apply additional less-than value filter
    Greeting.id.strMap_.k("en").<("Hi").get === List(3)
    Greeting.id.strMap.k("en").<("Hi").get === List(
      (3, Map("en" -> "Hello"))
    )
    upper

    Upper value

    returns

    Filtered molecule

  5. def <=(upper: T): Ns with Attr

    Match values of filtered map attribute less than or equal to upper value.

    Match values of filtered map attribute less than or equal to upper value.

    Greeting.id.strMap insert List(
      (1, Map("en" -> "Hi there", "da" -> "Hejsa")),
      (2, Map("en" -> "Oh, Hi", "da" -> "Hilser", "fr" -> "Bonjour", "it" -> "Bon giorno")),
      (3, Map("en" -> "Hello", "da" -> "Hej")),
      (4, Map("da" -> "Hej"))
    )
    
    // Apply key filter only
    Greeting.id.strMap_.k("en").get === List(1, 2, 3)
    
    // Apply additional less-than-or-equal-to value filter
    Greeting.id.strMap_.k("en").<=("Hi").get === List(1, 3)
    Greeting.id.strMap.k("en").<=("Hi").get === List(
      (1, Map("en" -> "Hi there")),
      (3, Map("en" -> "Hello"))
    )
    upper

    Upper value

    returns

    Filtered molecule

  6. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  7. def >(lower: T): Ns with Attr

    Match values of filtered map attribute bigger than lower value.

    Match values of filtered map attribute bigger than lower value.

    Greeting.id.strMap insert List(
      (1, Map("en" -> "Hi there", "da" -> "Hejsa")),
      (2, Map("en" -> "Oh, Hi", "da" -> "Hilser", "fr" -> "Bonjour", "it" -> "Bon giorno")),
      (3, Map("en" -> "Hello", "da" -> "Hej")),
      (4, Map("da" -> "Hej"))
    )
    
    // Apply key filter only
    Greeting.id.strMap_.k("en").get === List(1, 2, 3)
    
    // Apply additional bigger-than value filter
    Greeting.id.strMap_.k("en").>("Hi").get === List(2)
    Greeting.id.strMap.k("en").>("Hi").get === List(
      (2, Map("en" -> "Oh, Hi"))
    )
    lower

    Lower value

    returns

    Filtered molecule

  8. def >=(lower: T): Ns with Attr

    Match values of filtered map attribute bigger than or equal to lower value.

    Match values of filtered map attribute bigger than or equal to lower value.

    Greeting.id.strMap insert List(
      (1, Map("en" -> "Hi there", "da" -> "Hejsa")),
      (2, Map("en" -> "Oh, Hi", "da" -> "Hilser", "fr" -> "Bonjour", "it" -> "Bon giorno")),
      (3, Map("en" -> "Hello", "da" -> "Hej")),
      (4, Map("da" -> "Hej"))
    )
    
    // Apply key filter only
    Greeting.id.strMap_.k("en").get === List(1, 2, 3)
    
    // Apply additional bigger-than-or-equal-to value filter
    Greeting.id.strMap_.k("en").>=("Hi").get === List(1, 2)
    Greeting.id.strMap.k("en").>=("Hi").get === List(
      (1, Map("en" -> "Hi there")),
      (2, Map("en" -> "Oh, Hi"))
    )
    lower

    Lower value

    returns

    Filtered molecule

  9. def apply(or: Or[T]): Ns with Attr

    Match OR expression of value(s) of filtered map attribute.

    Match OR expression of value(s) of filtered map attribute.

    Greeting.id.strMap insert List(
      (1, Map("en" -> "Hi there", "da" -> "Hejsa")),
      (2, Map("en" -> "Oh, Hi", "da" -> "Hilser", "fr" -> "Bonjour", "it" -> "Bon giorno")),
      (3, Map("en" -> "Hello", "da" -> "Hej")),
      (4, Map("da" -> "Hej"))
    )
    
    // Apply key filter only
    Greeting.id.strMap_.k("da").get === List(1, 2, 3, 4)
    
    // Apply additional value filters as OR expression
    Greeting.id.strMap_.k("da")("Hej" or "Hejsa").get === List(1, 3, 4)
    Greeting.id.strMap_.k("da")("Hej" or "Hejsa" or "Hilser").get === List(1, 2, 3, 4)
    or

    OR expression of filtering values

    returns

    Filtered molecule

  10. def apply(values: Iterable[T]): Ns with Attr

    Match Iterable of value(s) of filtered map attribute.

    Match Iterable of value(s) of filtered map attribute.

    Greeting.id.strMap insert List(
      (1, Map("en" -> "Hi there", "da" -> "Hejsa")),
      (2, Map("en" -> "Oh, Hi", "da" -> "Hilser", "fr" -> "Bonjour", "it" -> "Bon giorno")),
      (3, Map("en" -> "Hello", "da" -> "Hej")),
      (4, Map("da" -> "Hej"))
    )
    
    // Apply key filter only
    Greeting.id.strMap_.k("da").get === List(1, 2, 3, 4)
    
    // Apply Seq of additional value filters (OR semantics)
    Greeting.id.strMap_.k("da")(Seq("Hej", "Hejsa")).get === List(1, 3, 4)
    values

    Iterable of filtering value(s)

    returns

    Filtered molecule

  11. def apply(value: T, moreValues: T*): Ns with Attr

    Match value(s) of filtered map attribute.

    Match value(s) of filtered map attribute.

    Greeting.id.strMap insert List(
      (1, Map("en" -> "Hi there", "da" -> "Hejsa")),
      (2, Map("en" -> "Oh, Hi", "da" -> "Hilser", "fr" -> "Bonjour", "it" -> "Bon giorno")),
      (3, Map("en" -> "Hello", "da" -> "Hej")),
      (4, Map("da" -> "Hej"))
    )
    
    // Apply key filter only
    Greeting.id.strMap_.k("da").get === List(1, 2, 3, 4)
    
    // Apply additional value filter
    Greeting.id.strMap_.k("da")("Hej").get === List(3, 4)
    
    // Apply additional value filters as OR expression
    Greeting.id.strMap_.k("da")("Hej", "Hejsa").get === List(1, 3, 4)
    value

    Filtering value

    moreValues

    Optional additional filtering values

    returns

    Filtered molecule

  12. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  13. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.CloneNotSupportedException]) @native()
  14. def contains(word: T): Ns with Attr

    Match word values of filtered String map attribute.

    Match word values of filtered String map attribute.

    Fulltext searches are case-insensitive and only searches for whole words.

    Greeting.id.strMap insert List(
      (1, Map("en" -> "Hi there", "da" -> "Hejsa")),
      (2, Map("en" -> "Oh, Hi", "da" -> "Hilser", "fr" -> "Bonjour", "it" -> "Bon giorno")),
      (3, Map("en" -> "Hello", "da" -> "Hej")),
      (4, Map("da" -> "Hej"))
    )
    
    // Apply key filter only
    Greeting.id.strMap_.k("en").get === List(1, 2, 3)
    
    // Apply additional less-than-or-equal-to value filter
    Greeting.id.strMap_.k("en").contains("Hi").get === List(1, 2)
    Greeting.id.strMap.k("en").contains("Hi").get === List(
      (1, Map("en" -> "Hi there")),
      (2, Map("en" -> "Oh, Hi"))
    )
    
    // Regex can be used
    Greeting.id.strMap_.k("en").contains("Hi|Hello").get === List(1, 2, 3)
    word

    Search word or regex

    returns

    Filtered molecule

    Note

    Fulltext search is constrained by several defaults (which cannot be altered): searches are case insensitive, remove apostrophe or apostrophe and s sequences, and filter out the following common English stop words: "a", "an", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"

  15. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  16. def equals(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef → Any
  17. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.Throwable])
  18. final def getClass(): Class[_ <: AnyRef]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  19. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  20. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  21. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  22. def not(value: T, moreValues: T*): Ns with Attr

    Match negated value(s) of filtered map attribute.

    Match negated value(s) of filtered map attribute.

    Greeting.id.strMap insert List(
      (1, Map("en" -> "Hi there", "da" -> "Hejsa")),
      (2, Map("en" -> "Oh, Hi", "da" -> "Hilser", "fr" -> "Bonjour", "it" -> "Bon giorno")),
      (3, Map("en" -> "Hello", "da" -> "Hej")),
      (4, Map("da" -> "Hej"))
    )
    
    // Apply key filter only
    Greeting.id.strMap_.k("en").get === List(1, 2, 3)
    
    // Apply additional negation value filter
    Greeting.id.strMap_.k("en").not("Hello").get === List(1, 2)
    Greeting.id.strMap.k("en").not("Hello").get === List(
      (1, Map("en" -> "Hi there")),
      (2, Map("en" -> "Oh, Hi"))
    )
    
    // Apply multiple negation value filters (OR semantics)
    Greeting.id.strMap_.k("en").not("Hello", "Hi there").get === List(2)
    
    // Same as
    Greeting.id.strMap_.k("en").!=("Hello", "Hi there").get === List(2)
    value

    Filter value

    moreValues

    Optional additional filter values

    returns

    Filtered molecule

  23. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  24. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  25. final def synchronized[T0](arg0: => T0): T0
    Definition Classes
    AnyRef
  26. def toString(): String
    Definition Classes
    AnyRef → Any
  27. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  28. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  29. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException]) @native()

Inherited from AnyRef

Inherited from Any

Ungrouped