KeywordsStable

molecule.boilerplate.api.KeywordsStable

Keywords to mark aggregate expressions on and unifications of attributes.

// Aggregates on any attribute type
Person.age(count).get.map(_.head ==> 3)         // count of asserted `age` attribute values
Person.age(countDistinct).get.map(_.head ==> 3) // count of asserted distinct `age` attribute values
Person.age(max).get.map(_.head ==> 38)          // maximum `age` value (using `compare`)
Person.age(min).get.map(_.head ==> 5)           // maximum `age` value (using `compare`)
Person.age(sample).get.map(_.head ==> 27)       // single sample `age` value

// Aggregates on any attribute type, returning multiple values
Person.age(distinct).get.map(_.head ==> Vector(5, 7, 38)) // distinct `age` values
Person.age(max(2)).get.map(_.head ==> Vector(38, 7))      // 2 maximum `age` values
Person.age(min(2)).get.map(_.head ==> Vector(5, 7))       // 2 minimum `age` values
Person.age(sample(2)).get.map(_.head ==> Vector(7, 38))   // 2 sample `age` values

// Aggregates on number attributes
Person.age(sum).get.map(_.head ==> 50)                  // sum of all `age` numbers
Person.age(avg).get.map(_.head ==> 16.66666667)         // average of all `age` numbers
Person.age(median).get.map(_.head ==> 7)                // median of all `age` numbers
Person.age(stddev).get.map(_.head ==> 15.107025591499)  // standard deviation of all `age` numbers
Person.age(variance).get.map(_.head ==> 228.2222222222) // variance of all `age` numbers

Attributes

Source
Keywords.scala
Graph
Supertypes
class Object
trait Matchable
class Any
Known subtypes
object Keywords.type

Members list

Grouped members

Aggregate keywords

Keywords applied to attributes that return aggregated value(s).

trait count extends AggrCoalesce, AggrInt

Count of attribute values.

Apply count keyword to attribute to return count of attribute values of entities matching the molecule.

Count of attribute values.

Apply count keyword to attribute to return count of attribute values of entities matching the molecule.

for {
 _ <- Person.firstName.lastName.age insert List(
   ("Ben", "Hayday", 42),
   ("Liz", "Taylor", 34),
   ("Liz", "Swifty", 34),
   ("Liz", "Mooray", 25)
 )
 _ <- Person.firstName.age(count).get.map(_ ==> List(
   ("Ben", 1),
   ("Liz", 3) // 34, 34, 25
 ))
} yield ()

Attributes

Returns

Int

Source
Keywords.scala
Supertypes
trait AggrInt
trait AggrCoalesce
trait AggrKw
trait Kw
class Object
trait Matchable
class Any
Show all
Known subtypes
object count.type
trait countDistinct extends AggrCoalesce

Count of distinct attribute values.

Apply countDistinct keyword to attribute to return count of distinct attribute values of entities matching the molecule.

Count of distinct attribute values.

Apply countDistinct keyword to attribute to return count of distinct attribute values of entities matching the molecule.

for {
 _ <- Person.firstName.lastName.age insert List(
   ("Ben", "Hayday", 42),
   ("Liz", "Taylor", 34),
   ("Liz", "Swifty", 34),
   ("Liz", "Mooray", 25)
 )
 _ <- Person.firstName.age(countDistinct).get.map(_ ==> List(
   ("Ben", 1),
   ("Liz", 2) // 34, 25
 ))
} yield ()

Attributes

Returns

Int

Source
Keywords.scala
Supertypes
trait AggrCoalesce
trait AggrKw
trait Kw
class Object
trait Matchable
class Any
Show all
Known subtypes
object countDistinct.type
trait distinct extends AggrKw

Distinct attribute values.

Apply distinct keyword to attribute to return Vector of distinct attribute values of entities matching the molecule.

Distinct attribute values.

Apply distinct keyword to attribute to return Vector of distinct attribute values of entities matching the molecule.

for {
 _ <- Person.firstName.lastName.age insert List(
   ("Ben", "Hayday", 42),
   ("Liz", "Taylor", 34),
   ("Liz", "Swifty", 34),
   ("Liz", "Mooray", 25)
 )
 _ <- Person.firstName.age(distinct) insert List(
   ("Ben", 42),
   ("Liz", Vector(34, 25)) // only single 34 returned
 )
} yield ()

Attributes

Returns

List[attribute-type]

Source
Keywords.scala
Supertypes
trait AggrKw
trait Kw
class Object
trait Matchable
class Any
Known subtypes
object distinct.type
trait max extends AggrKw

Maximum attribute value(s).

Apply max keyword to attribute to return the maximum attribute value of entities matching the molecule.

Maximum attribute value(s).

Apply max keyword to attribute to return the maximum attribute value of entities matching the molecule.

for {
 _ <- Person.age.insert(25, 34, 37, 42, 70)
 _ <- Person.age(max).get.map(_.head ==> 70)
} yield ()

Apply max(n) to return Vector of the n biggest values.

Person.age(max(3)).get.map(_.head ==> Vector(37, 42, 70))

Attributes

Note

max/max(n) supports all value types (via comparators).
max(n) Can at most return the number of values that match.

Source
Keywords.scala
Supertypes
trait AggrKw
trait Kw
class Object
trait Matchable
class Any
Known subtypes
object max.type
trait min extends AggrKw

Minimum attribute value(s).

Apply min keyword to attribute to return the minimum attribute value of entities matching the molecule.

Minimum attribute value(s).

Apply min keyword to attribute to return the minimum attribute value of entities matching the molecule.

for {
 _ <- Person.age.insert(25, 34, 37, 42, 70)
 _ <- Person.age(min).get.map(_.head ==> 25)
} yield ()

Apply min(n) to return Vector of the n smallest values.

Person.age(min(3)).get.map(_.head ==> Vector(25, 34, 37))

Attributes

Note

min/min(n) supports all value types (via comparators).
min(n) Can at most return the number of values that match.

Source
Keywords.scala
Supertypes
trait AggrKw
trait Kw
class Object
trait Matchable
class Any
Known subtypes
object min.type
trait sample extends AggrKw

Sample attribute value(s).

Apply sample keyword to attribute to return a single sample (random) attribute value of entities matching the molecule.

Sample attribute value(s).

Apply sample keyword to attribute to return a single sample (random) attribute value of entities matching the molecule.

for {
 _ <- Person.age.insert(25, 34, 37, 42, 70)
 _ <- Person.age(sample).get.map(_.head ==> 42) // or other..
} yield ()

Apply sample(n) to return Vector of up to n distinct sample values.

Person.age(sample(3)).get.map(_.head ==> Vector(70, 25, 37)) // or other..

Attributes

Note

Can at most return the number of values that match.

Source
Keywords.scala
Supertypes
trait AggrKw
trait Kw
class Object
trait Matchable
class Any
Known subtypes
object sample.type

Number aggregation keywords

Keywords applied to number attributes that return aggregated value(s).

trait avg extends AggrCoalesce

Average of attribute values.

Apply avg keyword to attribute to return average of attribute values of entities matching the molecule.

Average of attribute values.

Apply avg keyword to attribute to return average of attribute values of entities matching the molecule.

for {
 _ <- Match.sKeywords.insert(1, 2, 4)
 _ <- Match.score(avg).get.map(_.head ==> 2.3333333333333335) // (1 + 2 + 4) / 3
} yield ()

Attributes

Returns

Double

Source
Keywords.scala
Supertypes
trait AggrCoalesce
trait AggrKw
trait Kw
class Object
trait Matchable
class Any
Show all
Known subtypes
object avg.type
trait median extends AggrCoalesce

Median of attribute values.

Apply median keyword to attribute to return median of attribute values of entities matching the molecule.

Median of attribute values.

Apply median keyword to attribute to return median of attribute values of entities matching the molecule.

for {
 _ <- Match.sKeywords.insert(1, 2, 4)
 _ <- Match.score(median).get.map(_.head ==> 2)
} yield ()

OBS: When it comes to an even number of values, Datomic has a special implementation of median that is different from the one described on the Wiki entry on the median function.

Datomic calculates the median of even number of values as the average of the two middle numbers rounded down to nearest whole number

for {
 _ <- Match.sKeywords.insert(1, 2, 3, 4)
 _ <- Match.score(median).get.map(_.head ==> 2) // (2 + 3) / 2 = 2.5 rounded down to 2
} yield ()

With decimal numbers this can go wrong:

for {
 _ <- Match.sKeywords.insert(1.0, 2.5, 2.5, 3.0)
 _ <- Match.score(median).get.map(_.head ==> 2) // (2.5 + 2.5) / 2 = 2.5 rounded down to 2 (This is wrong and bug report has been filed)
} yield ()

Attributes

Returns

Value of Attribute type

Source
Keywords.scala
Supertypes
trait AggrCoalesce
trait AggrKw
trait Kw
class Object
trait Matchable
class Any
Show all
Known subtypes
object median.type
trait stddev extends AggrCoalesce

Variance of attribute values.

Apply stddev keyword to attribute to return variance of attribute values of entities matching the molecule.

Variance of attribute values.

Apply stddev keyword to attribute to return variance of attribute values of entities matching the molecule.

for {
 _ <- Match.sKeywords.insert(1, 2, 4)
 _ <- Match.score(stddev).get.map(_.head ==> 1.247219128924647)
} yield ()

Attributes

Returns

Double

Source
Keywords.scala
Supertypes
trait AggrCoalesce
trait AggrKw
trait Kw
class Object
trait Matchable
class Any
Show all
Known subtypes
object stddev.type
trait sum extends AggrCoalesce

Sum of attribute values.

Apply sum keyword to attribute to return sum of attribute values of entities matching the molecule.

Sum of attribute values.

Apply sum keyword to attribute to return sum of attribute values of entities matching the molecule.

for {
 _ <- Match.sKeywords.insert(1, 2, 4)
 _ <- Match.score(sum).get.map(_.head ==> 7)
} yield ()

Attributes

Returns

Value of Attribute type

Source
Keywords.scala
Supertypes
trait AggrCoalesce
trait AggrKw
trait Kw
class Object
trait Matchable
class Any
Show all
Known subtypes
object sum.type
trait variance extends AggrCoalesce

Variance of attribute values.

Apply variance keyword to attribute to return variance of attribute values of entities matching the molecule.

Variance of attribute values.

Apply variance keyword to attribute to return variance of attribute values of entities matching the molecule.

for {
 _ <- Match.sKeywords.insert(1, 2, 4)
 _ <- Match.score(variance).get.map(_.head ==> 1.5555555555555556)
} yield ()

Attributes

Returns

Double

Source
Keywords.scala
Supertypes
trait AggrCoalesce
trait AggrKw
trait Kw
class Object
trait Matchable
class Any
Show all
Known subtypes
object variance.type

attrMarker

trait unify extends Kw

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.

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.

for {
 _ <- 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.map(_.sorted ==> List(
   ("Joe", "Coffee", "Ben"),
   ("Liz", "Coffee", "Ben"),
   ("Liz", "Tea", "Ben")
 ))
} yield ()

Attributes

Source
Keywords.scala
Supertypes
trait Kw
class Object
trait Matchable
class Any
Known subtypes
object unify.type

Type members

Classlikes

trait AggrCoalesce extends AggrKw

Attributes

Source
Keywords.scala
Supertypes
trait AggrKw
trait Kw
class Object
trait Matchable
class Any
Known subtypes
trait avg
object avg.type
trait count
object count.type
object countDistinct.type
trait median
object median.type
trait stddev
object stddev.type
trait sum
object sum.type
trait variance
object variance.type
Show all
trait AggrInt extends AggrKw

Attributes

Source
Keywords.scala
Supertypes
trait AggrKw
trait Kw
class Object
trait Matchable
class Any
Known subtypes
trait count
object count.type
trait AggrKw extends Kw

Attributes

Source
Keywords.scala
Supertypes
trait Kw
class Object
trait Matchable
class Any
Known subtypes
trait AggrCoalesce
trait avg
object avg.type
trait count
object count.type
object countDistinct.type
trait median
object median.type
trait stddev
object stddev.type
trait sum
object sum.type
trait variance
object variance.type
trait AggrInt
trait distinct
object distinct.type
trait max
object max.type
trait min
object min.type
trait sample
object sample.type
Show all
trait Kw

Attributes

Source
Keywords.scala
Supertypes
class Object
trait Matchable
class Any
Known subtypes
trait AggrKw
trait AggrCoalesce
trait avg
object avg.type
trait count
object count.type
object countDistinct.type
trait median
object median.type
trait stddev
object stddev.type
trait sum
object sum.type
trait variance
object variance.type
trait AggrInt
trait distinct
object distinct.type
trait max
object max.type
trait min
object min.type
trait sample
object sample.type
class maxs
class mins
class samples
trait unify
object unify.type
trait v1
object v1.type
Show all
trait bi

Attributes

Source
Keywords.scala
Supertypes
class Object
trait Matchable
class Any
Known subtypes
object bi.type
case class maxs(n: Int) extends Kw

Attributes

Source
Keywords.scala
Supertypes
trait Serializable
trait Product
trait Equals
trait Kw
class Object
trait Matchable
class Any
Show all
case class mins(n: Int) extends Kw

Attributes

Source
Keywords.scala
Supertypes
trait Serializable
trait Product
trait Equals
trait Kw
class Object
trait Matchable
class Any
Show all
case class samples(n: Int) extends Kw

Attributes

Source
Keywords.scala
Supertypes
trait Serializable
trait Product
trait Equals
trait Kw
class Object
trait Matchable
class Any
Show all
trait v1 extends Kw

Attributes

Source
Keywords.scala
Supertypes
trait Kw
class Object
trait Matchable
class Any
Known subtypes
object v1.type