abstract class Molecule_2[Obj, I1, I2] extends InputMolecule
Shared interfaces of input molecules awaiting 2 inputs.
// Input molecule awaiting 2 inputs for `profession` and `age` val profAge = m(Person.name.profession_(?).age_(?)) for { // Sample data set _ <- Person.name.profession.age insert List( ("Ann", "doctor", 37), ("Ben", "teacher", 37), ("Joe", "teacher", 32), ("Liz", "teacher", 28) ) // A. Pairs of input ................................. // One pair as params _ <- profAge("doctor", 37).get.map(_ ==> List("Ann")) // One or more pairs _ <- profAge(("doctor", 37)).get.map(_ ==> List("Ann")) _ <- profAge(("doctor", 37), ("teacher", 37)).get.map(_.sorted ==> List("Ann", "Ben")) // One or more logical pairs // [pair-expression] or [pair-expression] or ... _ <- profAge(("doctor" and 37) or ("teacher" and 32)).get.map(_.sorted ==> List("Ann", "Joe")) _ <- profAge(Seq(("doctor", 37), ("teacher", 37))).get.map(_.sorted ==> List("Ann", "Ben")) // List of pairs _ <- profAge(Seq(("doctor", 37))).get.map(_ ==> List("Ann")) // B. 2 groups of input, one for each input attribute ................................. // Two expressions // [profession-expression] and [age-expression] _ <- profAge("doctor" and 37).get.map(_ ==> List("Ann")) _ <- profAge(("doctor" or "teacher") and 37).get.map(_.sorted ==> List("Ann", "Ben")) _ <- profAge(("doctor" or "teacher") and (32 or 28)).get.map(_.sorted ==> List("Joe", "Liz")) // Two Lists _ <- profAge(Seq("doctor"), Seq(37)).get.map(_ ==> List("Ann")) _ <- profAge(Seq("doctor", "teacher"), Seq(37)).get.map(_.sorted ==> List("Ann", "Ben")) _ <- profAge(Seq("teacher"), Seq(37, 32)).get.map(_.sorted ==> List("Ben", "Joe")) _ <- profAge(Seq("doctor", "teacher"), Seq(37, 32)).get.map(_.sorted ==> List("Ann", "Ben", "Joe")) } yield ()
- I1
Type of input matching first attribute with
?marker (profession: String)- I2
Type of input matching second attribute with
?marker (age: Int)
- Source
- Molecule_2.scala
- Grouped
- Alphabetic
- By Inheritance
- Molecule_2
- InputMolecule
- Molecule
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Abstract Value Members
-
abstract
def
apply(in1: Seq[I1], in2: Seq[I2])(implicit conn: Future[Conn]): Molecule
Resolve input molecule by applying 2 Seq of values, one for each input attribute
Resolve input molecule by applying 2 Seq of values, one for each input attribute
// Input molecule awaiting 2 inputs for profession and age val profAge = m(Person.name.profession_(?).age_(?)) for { // Sample data set Person.name.profession.age insert List( ("Ann", "doctor", 37), ("Ben", "teacher", 37), ("Joe", "teacher", 32), ("Liz", "teacher", 28) ) // Apply 2 Seq of values, each matching one of the input attributes _ <- profAge(Seq("doctor"), Seq(37)).get.map(_ ==> List("Ann")) _ <- profAge(Seq("doctor", "teacher"), Seq(37, 32)).get.map(_.sorted ==> List("Ann", "Ben", "Joe")) // Number of arguments in each Seq don't have to match but can be asymmetric _ <- profAge(Seq("doctor", "teacher"), Seq(37)).get.map(_.sorted ==> List("Ann", "Ben")) _ <- profAge(Seq("teacher"), Seq(37, 32)).get.map(_.sorted ==> List("Ben", "Joe")) } yield ()
- in1
Seq of values matching first input attribute (professions: Seq[String])
- in2
Seq of values matching second input attribute (ages: Seq[Int])
- conn
Implicit Conn in scope
- returns
Resolved molecule that can be queried
-
abstract
def
apply(and: And2[I1, I2])(implicit conn: Future[Conn]): Molecule
Resolve input molecule by applying 2 expressions, one for each input attribute
Resolve input molecule by applying 2 expressions, one for each input attribute
// Input molecule awaiting 2 inputs for `profession` and `age` val profAge = m(Person.name.profession_(?).age_(?)) for { // Sample data set Person.name.profession.age insert List( ("Ann", "doctor", 37), ("Ben", "teacher", 37), ("Joe", "teacher", 32), ("Liz", "teacher", 28) ) // Apply 2 expressions, one for each input attribute // [profession-expression] and [age-expression] _ <- profAge("doctor" and 37).get.map(_ ==> List("Ann")) _ <- profAge(("doctor" or "teacher") and 37).get.map(_.sorted ==> List("Ann", "Ben")) _ <- profAge(("doctor" or "teacher") and (32 or 28)).get.map(_.sorted ==> List("Joe", "Liz")) } yield ()
- and
First input expr
andsecond input expr- conn
Implicit Conn in scope
- returns
Resolved molecule that can be queried
-
abstract
def
apply(ins: Seq[(I1, I2)])(implicit conn: Future[Conn]): Molecule
Resolve input molecule by applying Seq of value pairs
Resolve input molecule by applying Seq of value pairs
// Input molecule awaiting 2 inputs for `profession` and `age` val profAge = m(Person.name.profession_(?).age_(?)) for { // Sample data set Person.name.profession.age insert List( ("Ann", "doctor", 37), ("Ben", "teacher", 37), ("Joe", "teacher", 32), ("Liz", "teacher", 28) ) // Apply Seq of one or more value pairs, each matching both input attributes _ <- profAge(Seq(("doctor", 37))).get.map(_ ==> List("Ann")) _ <- profAge(Seq(("doctor", 37), ("teacher", 37))).get.map(_.sorted ==> List("Ann", "Ben")) } yield ()
- ins
Seq of value pairs, each matching both input attributes
- conn
Implicit Conn in scope
- returns
Resolved molecule that can be queried
-
abstract
def
apply(tpl: (I1, I2), tpls: (I1, I2)*)(implicit conn: Future[Conn]): Molecule
Resolve input molecule by applying one or more value pairs
Resolve input molecule by applying one or more value pairs
// Input molecule awaiting 2 inputs for `profession` and `age` val profAge = m(Person.name.profession_(?).age_(?)) for { // Sample data set Person.name.profession.age insert List( ("Ann", "doctor", 37), ("Ben", "teacher", 37), ("Joe", "teacher", 32), ("Liz", "teacher", 28) ) // Apply one or more value pairs, each matching both input attributes _ <- profAge(("doctor", 37)).get.map(_ ==> List("Ann")) _ <- profAge(("doctor", 37), ("teacher", 37)).get.map(_.sorted ==> List("Ann", "Ben")) } yield ()
- tpl
First pair of values matching both input attributes
- tpls
Optional more pairs of values matching both input attributes
- conn
Implicit Conn in scope
- returns
Resolved molecule that can be queried
-
abstract
def
apply(or: Or2[I1, I2])(implicit conn: Future[Conn]): Molecule
Resolve input molecule by applying one or more pairs of expressions, each matching both input attributes
Resolve input molecule by applying one or more pairs of expressions, each matching both input attributes
// Input molecule awaiting 2 inputs for `profession` and `age` val profAge = m(Person.name.profession_(?).age_(?)) for { // Sample data set Person.name.profession.age insert List( ("Ann", "doctor", 37), ("Ben", "teacher", 37), ("Joe", "teacher", 32), ("Liz", "teacher", 28) ) // Apply two or more pair expressions, each matching both input attributes // [profession/age-expression] or [profession/age-expression] or ... _ <- profAge("doctor" and 37).get.map(_.sorted ==> List("Ann")) _ <- profAge(("doctor" and 37) or ("teacher" and 32)).get.map(_.sorted ==> List("Ann", "Joe")) } yield ()
- or
Two or more pair-wise expressions separated by
or- conn
Implicit Conn in scope
- returns
Resolved molecule that can be queried
-
abstract
def
apply(i1: I1, i2: I2)(implicit conn: Future[Conn]): Molecule
Resolve input molecule by applying 2 input values as individual args
Resolve input molecule by applying 2 input values as individual args
// Input molecule awaiting 2 inputs for `profession` and `age` val profAge = m(Person.name.profession_(?).age_(?)) for { // Sample data set Person.name.profession.age insert List( ("Ann", "doctor", 37), ("Ben", "teacher", 37), ("Joe", "teacher", 32), ("Liz", "teacher", 28) ) // Apply 2 input values _ <- profAge("doctor", 37).get.map(_ ==> List("Ann")) } yield ()
- i1
Input value matching first input attribute (profession: String)
- i2
Input value matching second input attribute (age: Int)
- conn
Implicit Conn in scope
- returns
Resolved molecule that can be queried
-
abstract
val
isJsPlatform: Boolean
- Definition Classes
- InputMolecule
Concrete Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
_datalog: String
Datalog query.
Datalog query.
Molecule transforms custom boilerplate DSL constructs to Datomic queries in 3 steps:
Custom DSL molecule --> Model --> Query --> Datalog query- Definition Classes
- InputMolecule → Molecule
-
def
_inputThrowable: Option[Throwable]
- Definition Classes
- InputMolecule → Molecule
-
def
_model: Model
Internal Model representation of a molecule.
Internal Model representation of a molecule.
Molecule transforms custom boilerplate DSL constructs to Datomic queries in 3 steps:
Custom DSL molecule --> Model --> Query --> Datalog query- Definition Classes
- InputMolecule → Molecule
-
def
_query: Query
Internal Query representation of molecule.
-
def
addNilClause(clauses: Seq[Clause], e: Var, kw: KW, v0: Var): Seq[Clause]
- Attributes
- protected
- Definition Classes
- InputMolecule
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
bindSeqs(query: Query, inputRaw1: Seq[I1], inputRaw2: Seq[I2]): Either[Throwable, Query]
- Attributes
- protected
-
def
bindValues(query: Query, inputTuples: Seq[(I1, I2)]): Either[Throwable, Query]
- Attributes
- protected
-
def
cardinality(nsFull: String, attr: String): Int
- Attributes
- protected
- Definition Classes
- InputMolecule
-
def
clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
def
dataClause(e: String, kw: KW, enumPrefix: Option[String], arg: Any, i: Int): Seq[Clause]
- Attributes
- protected
- Definition Classes
- InputMolecule
-
def
deepNil(args: Seq[Any]): Boolean
- Attributes
- protected
- Definition Classes
- InputMolecule
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
isExpression(nsFull: String, attr: String): Boolean
- Attributes
- protected
- Definition Classes
- InputMolecule
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
def
isTacit(nsFull: String, attr: String): Boolean
- Attributes
- protected
- Definition Classes
- InputMolecule
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
def
resolveAnd2(and2: And2[I1, I2]): Either[Throwable, (Seq[I1], Seq[I2])]
- Attributes
- protected
-
def
resolveInput(query: Query, ph: Placeholder, inputs: Seq[Any], ruleName: String = "rule1", unifyRule: Boolean = false): Query
- Attributes
- protected
- Definition Classes
- InputMolecule
-
def
resolveOr[I1](or: Or[I1]): Either[Throwable, Seq[I1]]
- Attributes
- protected
- Definition Classes
- InputMolecule
-
def
resolveOr2(or: Or2[I1, I2]): Either[Throwable, Seq[(I1, I2)]]
- Attributes
- protected
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
def
valueClauses[TT](e: String, kw: KW, enumPrefix: Option[String], tpe: String, args: TT): Seq[Clause]
- Attributes
- protected
- Definition Classes
- InputMolecule
-
def
varsAndPrefixes(query: Query): Seq[(Var, String)]
- Attributes
- protected
- Definition Classes
- InputMolecule
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()

Documentation/API for the Molecule library - a meta DSL for the Datomic database.
scalamolecule.org | Github | Forum