![Page 1: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/1.jpg)
An Embedded Query Language in Scala
Amir Shaikhha
School of Computer and Communication Sciences, EPFLTypesafe, Lausanne
Master Thesis, August 2013
1 / 60
![Page 2: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/2.jpg)
Introduction
Outline
1 Introduction
2 Lifted Embedding
3 Direct Embedding
4 Shadow Embedding
5 Evaluation
1 / 60
![Page 3: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/3.jpg)
Introduction
Introduction
Problem StatementWrite the code to access database
2 / 60
![Page 4: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/4.jpg)
Introduction
Introduction
Instead of writing database code in SQL
select c.NAME from COFFEES c where c.ID = 10
Write database code in Scala
for (c <- coffees if c.id == 10) yield c.name
3 / 60
![Page 5: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/5.jpg)
Introduction
Introduction
Instead of writing database code in SQL
select c.NAME from COFFEES c where c.ID = 10
Write database code in Scala
for (c <- coffees if c.id == 10) yield c.name
3 / 60
![Page 6: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/6.jpg)
Introduction
Slick
Scala Language-Integrated Connection Kit
4 / 60
![Page 7: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/7.jpg)
Introduction
SlickArchitecture
5 / 60
![Page 8: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/8.jpg)
Lifted Embedding
Outline
1 Introduction
2 Lifted Embedding
3 Direct Embedding
4 Shadow Embedding
5 Evaluation
5 / 60
![Page 9: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/9.jpg)
Lifted Embedding
Lifted EmbeddingArchitecture
Uses standard ScalaNot Scala-Virtualized
6 / 60
![Page 10: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/10.jpg)
Lifted Embedding
Lifted EmbeddingArchitecture
Uses standard Scala
Not Scala-Virtualized
6 / 60
![Page 11: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/11.jpg)
Lifted Embedding
Lifted EmbeddingArchitecture
Uses standard ScalaNot Scala-Virtualized
6 / 60
![Page 12: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/12.jpg)
Lifted Embedding
Lifted EmbeddingExample
Lifted Embedding Example
Query(Coffees) filter(c => c.id === 10) map(c => c.name)
7 / 60
![Page 13: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/13.jpg)
Lifted Embedding
Lifted EmbeddingExample
Lifted Embedding Example
Query(Coffees) filter(c => c.id === 10) map(c => c.name)
Scala for-comprehension
for (c <- Query(Coffees) if c.id === 10)yield c.name
7 / 60
![Page 14: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/14.jpg)
Lifted Embedding
Lifted EmbeddingExample
Lifted Embedding Example
Query(Coffees) filter(c => c.id === 10) map(c => c.name)
SQL Statement
select c.NAME from COFFEES c where c.ID = 10
7 / 60
![Page 15: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/15.jpg)
Lifted Embedding
Lifted EmbeddingType Information
Query(Coffees) filter(c => c.id === 10) map(c => c.name)
8 / 60
![Page 16: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/16.jpg)
Lifted Embedding
Lifted EmbeddingType Information
Query(Coffees) filter(c => c.id:Rep[Int] === 10:Rep[Int]) map(c => c.name:Rep[String])
8 / 60
![Page 17: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/17.jpg)
Lifted Embedding
Lifted EmbeddingProblem 1
Query(Coffees) filter(c => c.id === 10) map(c => c.name)
How to create Lifted Embedding Table?
9 / 60
![Page 18: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/18.jpg)
Lifted Embedding
Lifted EmbeddingProblem 1
Query(Coffees) filter(c => c.id === 10) map(c => c.name)
How to create Lifted Embedding Table?
9 / 60
![Page 19: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/19.jpg)
Lifted Embedding
Lifted Embedding
object Coffees extends Table[(Int , String , Double ,String , Int)]("COFFEES") {
def id = column[Int]("ID", O.PrimaryKey)def name = column[String ]("NAME")//...
}
Boilerplate!
10 / 60
![Page 20: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/20.jpg)
Lifted Embedding
Lifted Embedding
object Coffees extends Table[(Int , String , Double ,String , Int)]("COFFEES") {
def id = column[Int]("ID", O.PrimaryKey)def name = column[String ]("NAME")//...
}
Boilerplate!
10 / 60
![Page 21: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/21.jpg)
Lifted Embedding
Type Providers
Generate the types
Existing SchemaAnnotated classes
11 / 60
![Page 22: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/22.jpg)
Lifted Embedding
Type Providers
Generate the types out of:Existing Schema
Annotated classes
11 / 60
![Page 23: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/23.jpg)
Lifted Embedding
Type Providers
Generate the types out of:Existing SchemaAnnotated classes
11 / 60
![Page 24: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/24.jpg)
Lifted Embedding
Type ProvidersArchitecture
Type Macros are in macro paradiseCode Generation uses standard Scala
12 / 60
![Page 25: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/25.jpg)
Lifted Embedding
Type ProvidersArchitecture
Type Macros are in macro paradise
Code Generation uses standard Scala
12 / 60
![Page 26: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/26.jpg)
Lifted Embedding
Type ProvidersArchitecture
Type Macros are in macro paradiseCode Generation uses standard Scala
12 / 60
![Page 27: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/27.jpg)
Lifted Embedding
Lifted EmbeddingProblem 2
How to catch the errors?
13 / 60
![Page 28: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/28.jpg)
Lifted Embedding
Lifted EmbeddingType Errors - Good Part
Query(Coffees) map(c => c.id.toDouble)
Compile Error
value toDouble is not a member of scala.slick.lifted.Column[Int]
14 / 60
![Page 29: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/29.jpg)
Lifted Embedding
Lifted EmbeddingType Errors - Good Part
Query(Coffees) map(c => c.id.toDouble)
Compile Error
value toDouble is not a member of scala.slick.lifted.Column[Int]
14 / 60
![Page 30: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/30.jpg)
Lifted Embedding
Lifted EmbeddingType Errors - Bad Part
Query(Coffees) map(c => c.id substring 2)
Compile Error
value substring is not a member of scala.slick.lifted.Column[Int]
15 / 60
![Page 31: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/31.jpg)
Lifted Embedding
Lifted EmbeddingType Errors - Bad Part
Query(Coffees) map(c => c.id substring 2)
Compile Error
value substring is not a member of scala.slick.lifted.Column[Int]
15 / 60
![Page 32: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/32.jpg)
Lifted Embedding
Lifted EmbeddingType Errors - Bad Part
Query(Coffees) map(c => c.id substring 2)
Compile Error
value substring is not a member of scala.slick.lifted.Column[Int]
15 / 60
![Page 33: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/33.jpg)
Lifted Embedding
Lifted EmbeddingType Errors - Even Worse!
Query(Coffees) map (c =>if(c.origin == "Iran")
"Good"else
c.quality)
Compile ErrorDon’t know how to unpack Any to T and pack to Gnot enough arguments for method map: (implicit shape:scala.slick.lifted.Shape[Any,T,G])scala.slick.lifted.Query[G,T].Unspecified value parameter
Scala-Virtualized has not this problem
16 / 60
![Page 34: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/34.jpg)
Lifted Embedding
Lifted EmbeddingType Errors - Even Worse!
Query(Coffees) map (c =>if(c.origin == "Iran")
"Good"else
c.quality)
Compile ErrorDon’t know how to unpack Any to T and pack to Gnot enough arguments for method map: (implicit shape:scala.slick.lifted.Shape[Any,T,G])scala.slick.lifted.Query[G,T].Unspecified value parameter
Scala-Virtualized has not this problem
16 / 60
![Page 35: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/35.jpg)
Lifted Embedding
Lifted EmbeddingType Errors - Even Worse!
Query(Coffees) map (c =>if(c.origin == "Iran")
"Good"else
c.quality)
Compile ErrorDon’t know how to unpack Any to T and pack to Gnot enough arguments for method map: (implicit shape:scala.slick.lifted.Shape[Any,T,G])scala.slick.lifted.Query[G,T].Unspecified value parameter
Scala-Virtualized has not this problem16 / 60
![Page 36: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/36.jpg)
Lifted Embedding
Lifted EmbeddingType Errors
Adapted from http://thumbs.dreamstime.com/z/old-bus-desert-7703223.jpg
17 / 60
![Page 37: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/37.jpg)
Lifted Embedding
Lifted EmbeddingProblem 3
How to have high performance?
18 / 60
![Page 38: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/38.jpg)
Lifted Embedding
Lifted EmbeddingPerformance
19 / 60
![Page 39: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/39.jpg)
Lifted Embedding
Lifted EmbeddingPerformance
19 / 60
![Page 40: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/40.jpg)
Lifted Embedding
Lifted EmbeddingPerformance
Caching invokers
Query templates
20 / 60
![Page 41: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/41.jpg)
Lifted Embedding
Lifted EmbeddingPerformance
Caching invokersQuery templates
20 / 60
![Page 42: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/42.jpg)
Lifted Embedding
Lifted EmbeddingQuery Template
Lifted Embedding Query Template
val getCoffee = for {id <- Parameters[Int]c <- Query(Coffees) if c.id === id
} yield c.name
getCoffee (10)
JDBC Prepared Statement
"select c.NAME from COFFEES c where c.ID = ?"
21 / 60
![Page 43: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/43.jpg)
Lifted Embedding
Lifted EmbeddingQuery Template
Lifted Embedding Query Template
val getCoffee = for {id <- Parameters[Int]c <- Query(Coffees) if c.id === id
} yield c.name
getCoffee (10)
JDBC Prepared Statement
"select c.NAME from COFFEES c where c.ID = ?"
21 / 60
![Page 44: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/44.jpg)
Lifted Embedding
Lifted EmbeddingSummary
Problem 1How to create Lifted Embedding Table?Type Providers
Problem 2How to catch the errors?Comprehensive type errorsNonunderstandable type errors
Problem 3How to have high performance?Caching Invokers and Query TemplatesUser effort needed
22 / 60
![Page 45: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/45.jpg)
Lifted Embedding
Lifted EmbeddingSummary
Problem 1How to create Lifted Embedding Table?
Type Providers
Problem 2How to catch the errors?Comprehensive type errorsNonunderstandable type errors
Problem 3How to have high performance?Caching Invokers and Query TemplatesUser effort needed
22 / 60
![Page 46: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/46.jpg)
Lifted Embedding
Lifted EmbeddingSummary
Problem 1How to create Lifted Embedding Table?Type Providers
Problem 2How to catch the errors?Comprehensive type errorsNonunderstandable type errors
Problem 3How to have high performance?Caching Invokers and Query TemplatesUser effort needed
22 / 60
![Page 47: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/47.jpg)
Lifted Embedding
Lifted EmbeddingSummary
Problem 1How to create Lifted Embedding Table?Type Providers
Problem 2How to catch the errors?
Comprehensive type errorsNonunderstandable type errors
Problem 3How to have high performance?Caching Invokers and Query TemplatesUser effort needed
22 / 60
![Page 48: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/48.jpg)
Lifted Embedding
Lifted EmbeddingSummary
Problem 1How to create Lifted Embedding Table?Type Providers
Problem 2How to catch the errors?Comprehensive type errors
Nonunderstandable type errors
Problem 3How to have high performance?Caching Invokers and Query TemplatesUser effort needed
22 / 60
![Page 49: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/49.jpg)
Lifted Embedding
Lifted EmbeddingSummary
Problem 1How to create Lifted Embedding Table?Type Providers
Problem 2How to catch the errors?Comprehensive type errorsNonunderstandable type errors
Problem 3How to have high performance?Caching Invokers and Query TemplatesUser effort needed
22 / 60
![Page 50: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/50.jpg)
Lifted Embedding
Lifted EmbeddingSummary
Problem 1How to create Lifted Embedding Table?Type Providers
Problem 2How to catch the errors?Comprehensive type errorsNonunderstandable type errors
Problem 3How to have high performance?
Caching Invokers and Query TemplatesUser effort needed
22 / 60
![Page 51: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/51.jpg)
Lifted Embedding
Lifted EmbeddingSummary
Problem 1How to create Lifted Embedding Table?Type Providers
Problem 2How to catch the errors?Comprehensive type errorsNonunderstandable type errors
Problem 3How to have high performance?Caching Invokers and Query Templates
User effort needed
22 / 60
![Page 52: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/52.jpg)
Lifted Embedding
Lifted EmbeddingSummary
Problem 1How to create Lifted Embedding Table?Type Providers
Problem 2How to catch the errors?Comprehensive type errorsNonunderstandable type errors
Problem 3How to have high performance?Caching Invokers and Query TemplatesUser effort needed
22 / 60
![Page 53: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/53.jpg)
Lifted Embedding
Is it possible to have comprehensible type errors?
23 / 60
![Page 54: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/54.jpg)
Direct Embedding
Outline
1 Introduction
2 Lifted Embedding
3 Direct Embedding
4 Shadow Embedding
5 Evaluation
23 / 60
![Page 55: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/55.jpg)
Direct Embedding
Direct Embedding
Query expression to Scala AST (compile-time)Scala AST to Slick AST (run time)Similar to LINQA prototype
24 / 60
![Page 56: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/56.jpg)
Direct Embedding
Direct Embedding
Query expression to Scala AST (compile-time)
Scala AST to Slick AST (run time)Similar to LINQA prototype
24 / 60
![Page 57: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/57.jpg)
Direct Embedding
Direct Embedding
Query expression to Scala AST (compile-time)Scala AST to Slick AST (run time)
Similar to LINQA prototype
24 / 60
![Page 58: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/58.jpg)
Direct Embedding
Direct Embedding
Query expression to Scala AST (compile-time)Scala AST to Slick AST (run time)Similar to LINQ
A prototype
24 / 60
![Page 59: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/59.jpg)
Direct Embedding
Direct Embedding
Query expression to Scala AST (compile-time)Scala AST to Slick AST (run time)Similar to LINQA prototype
24 / 60
![Page 60: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/60.jpg)
Direct Embedding
Direct EmbeddingExample
Direct Embedding Example
Query[Coffee] filter(c => c.id == 10) map(c => c.name)
SQL Statement
select c.NAME from COFFEES c where c.ID = 10
25 / 60
![Page 61: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/61.jpg)
Direct Embedding
Direct EmbeddingExample
Direct Embedding Example
Query[Coffee] filter(c => c.id == 10) map(c => c.name)
SQL Statement
select c.NAME from COFFEES c where c.ID = 10
25 / 60
![Page 62: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/62.jpg)
Direct Embedding
Direct EmbeddingType Information
Query[Coffee] filter(c => c.id == 10) map(c => c.name)
26 / 60
![Page 63: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/63.jpg)
Direct Embedding
Direct EmbeddingType Information
Query[Coffee] filter(c => c.id:Int == 10:Int) map(c => c.name:String)
26 / 60
![Page 64: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/64.jpg)
Direct Embedding
Direct EmbeddingType Errors - Good Part
Query[Coffee] map(c => c.id substring 2)
Compile Errorvalue substring is not a member of Int
27 / 60
![Page 65: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/65.jpg)
Direct Embedding
Direct EmbeddingType Errors - Good Part
Query[Coffee] map(c => c.id substring 2)
Compile Errorvalue substring is not a member of Int
27 / 60
![Page 66: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/66.jpg)
Direct Embedding
Direct EmbeddingType Errors - Good Part
Query[Coffee] map(c => c.id substring 2)
Compile Errorvalue substring is not a member of Int
27 / 60
![Page 67: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/67.jpg)
Direct Embedding
Direct EmbeddingType Errors - Bad Part
Query[Coffee] map(c => c.id.toDouble)
Compiles!Run time error!
28 / 60
![Page 68: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/68.jpg)
Direct Embedding
Direct EmbeddingType Errors - Bad Part
Query[Coffee] map(c => c.id.toDouble)
Compiles!
Run time error!
28 / 60
![Page 69: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/69.jpg)
Direct Embedding
Direct EmbeddingType Errors - Bad Part
Query[Coffee] map(c => c.id.toDouble)
Compiles!Run time error!
28 / 60
![Page 70: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/70.jpg)
Direct Embedding
Direct EmbeddingType Errors
Adapted from http://r32argent.ca/R32%20information_files/VW%20ads/vw_bus.jpg
29 / 60
![Page 71: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/71.jpg)
Direct Embedding
Direct EmbeddingSummary
Problem 2 (recap)
How to catch the errors?
Comprehensible type errorsIncomprehensive type errors
30 / 60
![Page 72: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/72.jpg)
Direct Embedding
Direct EmbeddingSummary
Problem 2 (recap)
How to catch the errors?Comprehensible type errors
Incomprehensive type errors
30 / 60
![Page 73: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/73.jpg)
Direct Embedding
Direct EmbeddingSummary
Problem 2 (recap)
How to catch the errors?Comprehensible type errorsIncomprehensive type errors
30 / 60
![Page 74: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/74.jpg)
Direct Embedding
Is it possible to have comprehensive and comprehensibletype errors at the same time?
31 / 60
![Page 75: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/75.jpg)
Shadow Embedding
Outline
1 Introduction
2 Lifted Embedding
3 Direct Embedding
4 Shadow Embedding
5 Evaluation
31 / 60
![Page 76: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/76.jpg)
Shadow Embedding
Shadow EmbeddingArchitecture
32 / 60
![Page 77: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/77.jpg)
Shadow Embedding
Shadow EmbeddingArchitecture
shadow = shallow + deep
32 / 60
![Page 78: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/78.jpg)
Shadow Embedding
Shadow EmbeddingArchitecture
32 / 60
![Page 79: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/79.jpg)
Shadow Embedding
Shadow EmbeddingArchitecture
32 / 60
![Page 80: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/80.jpg)
Shadow Embedding
Shadow EmbeddingShallow Interface
33 / 60
![Page 81: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/81.jpg)
Shadow Embedding
Shadow EmbeddingShallow Interface
Query interface:
class Query[T] {def map[S](f: T => S): Query[S]def filter(f: T => Boolean): Query[T]def flatMap[S](f: T => Query[S]): Query[S]def groupBy[S](f: T => S): Query[(S, Query[T])]def union(q2: Query[T]): Query[T]def join[S](q2: Query[S]): JoinQuery[T, S]// ...
}
34 / 60
![Page 82: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/82.jpg)
Shadow Embedding
Shadow EmbeddingShallow Interface
Query interface:
class Query[T] {def map[S](f: T => S): Query[S]def filter(f: T => Boolean): Query[T]def flatMap[S](f: T => Query[S]): Query[S]def groupBy[S](f: T => S): Query[(S, Query[T])]def union(q2: Query[T]): Query[T]def join[S](q2: Query[S]): JoinQuery[T, S]// ...
}
34 / 60
![Page 83: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/83.jpg)
Shadow Embedding
Shadow EmbeddingExample
Shallow Embedding Example
stage {Query[Coffee] filter
(c => c.id == 10) map(c => c.name)
}
35 / 60
![Page 84: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/84.jpg)
Shadow Embedding
Shadow EmbeddingType Information
Query[Coffee] filter(c => c.id == 10) map(c => c.name)
36 / 60
![Page 85: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/85.jpg)
Shadow Embedding
Shadow EmbeddingType Information
Query[Coffee] filter(c => c.id:Int == 10:Int) map(c => c.name:String)
36 / 60
![Page 86: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/86.jpg)
Shadow Embedding
Shadow EmbeddingYin-Yang Transformation
37 / 60
![Page 87: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/87.jpg)
Shadow Embedding
Shadow EmbeddingYin-Yang Transformation
Shallow Query
stage {Query (1) filter (x => x == 10)
}
38 / 60
![Page 88: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/88.jpg)
Shadow Embedding
Shadow EmbeddingYin-Yang Transformation
After Language Virtualization
Query (1) filter (x => x __== 10)
38 / 60
![Page 89: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/89.jpg)
Shadow Embedding
Shadow EmbeddingYin-Yang Transformation
After Ascription
Query(1:Int) filter((x:Int) => (x:Int) __== (10:Int))
38 / 60
![Page 90: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/90.jpg)
Shadow Embedding
Shadow EmbeddingYin-Yang Transformation
After Lifting
Query(lift(1):Int) filter((x:Int) => (x:Int) __== (lift(10):Int))
38 / 60
![Page 91: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/91.jpg)
Shadow Embedding
Shadow EmbeddingYin-Yang Transformation
After Type Transformation
Query(lift (1):this.Int) filter((x:this.Int) =>
(x:this.Int) __== (lift (10):this.Int))
38 / 60
![Page 92: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/92.jpg)
Shadow Embedding
Shadow EmbeddingYin-Yang Transformation
After Scope Injection
new ShadowDSLComponent {this.Query(lift (1):this.Int) filter
((x:this.Int) =>(x:this.Int) __== (lift (10):this.Int))
}
38 / 60
![Page 93: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/93.jpg)
Shadow Embedding
Shadow EmbeddingYin-Yang Transformation
Lifted Embedding Query
new ShadowDSLComponent {this.Query(lift (1):this.Int) filter
((x:this.Int) =>(x:this.Int) __== (lift (10):this.Int))
}
38 / 60
![Page 94: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/94.jpg)
Shadow Embedding
Shadow EmbeddingLifted Embedding
39 / 60
![Page 95: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/95.jpg)
Shadow Embedding
Shadow EmbeddingLifted Embedding
No need to convert from Scala AST to Slick AST
Interoperable with Lifted Embedding
40 / 60
![Page 96: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/96.jpg)
Shadow Embedding
Shadow EmbeddingLifted Embedding
No need to convert from Scala AST to Slick ASTInteroperable with Lifted Embedding
40 / 60
![Page 97: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/97.jpg)
Shadow Embedding
Shadow EmbeddingA Problem similar to Problem 1
Problem 1 (recap)
How to create Lifted Embedding Table?
stage {Query[Coffee] map (c => c.id)
}
How to create Shadow Embedding Table?Reuse Type Providers of Lifted Embedding!
41 / 60
![Page 98: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/98.jpg)
Shadow Embedding
Shadow EmbeddingA Problem similar to Problem 1
Problem 1 (recap)
How to create Lifted Embedding Table?
stage {Query[Coffee] map (c => c.id)
}
How to create Shadow Embedding Table?Reuse Type Providers of Lifted Embedding!
41 / 60
![Page 99: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/99.jpg)
Shadow Embedding
Shadow EmbeddingA Problem similar to Problem 1
Problem 1 (recap)
How to create Lifted Embedding Table?
stage {Query[Coffee] map (c => c.id)
}
How to create Shadow Embedding Table?Reuse Type Providers of Lifted Embedding!
41 / 60
![Page 100: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/100.jpg)
Shadow Embedding
Shadow EmbeddingA Problem similar to Problem 1
Problem 1 (recap)
How to create Lifted Embedding Table?
stage {Query[Coffee] map (c => c.id)
}
How to create Shadow Embedding Table?
Reuse Type Providers of Lifted Embedding!
41 / 60
![Page 101: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/101.jpg)
Shadow Embedding
Shadow EmbeddingA Problem similar to Problem 1
Problem 1 (recap)
How to create Lifted Embedding Table?
stage {Query[Coffee] map (c => c.id)
}
How to create Shadow Embedding Table?Reuse Type Providers of Lifted Embedding!
41 / 60
![Page 102: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/102.jpg)
Shadow Embedding
Shadow EmbeddingProblem 2
Problem 2 (recap)
How to catch the errors?
42 / 60
![Page 103: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/103.jpg)
Shadow Embedding
Shadow EmbeddingProblem 2
Problem 2 (recap)
How to catch the errors?
42 / 60
![Page 104: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/104.jpg)
Shadow Embedding
Shadow EmbeddingType Errors - Good Part
stage {Query[Coffee] map
(c => c.id substring 2)}
Compile Errorvalue substring is not a member of Int
43 / 60
![Page 105: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/105.jpg)
Shadow Embedding
Shadow EmbeddingType Errors - Good Part
stage {Query[Coffee] map
(c => c.id substring 2)}
Compile Errorvalue substring is not a member of Int
43 / 60
![Page 106: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/106.jpg)
Shadow Embedding
Shadow EmbeddingType Errors - Good Part
stage {Query[Coffee] map
(c => c.id substring 2)}
Compile Errorvalue substring is not a member of Int
43 / 60
![Page 107: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/107.jpg)
Shadow Embedding
Shadow EmbeddingType Errors - Good Part Again!
stage {Query[Coffee] map
(c => c.id.toDouble)}
Compile Errorin Slick method toDouble is not a member of Int
44 / 60
![Page 108: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/108.jpg)
Shadow Embedding
Shadow EmbeddingType Errors - Good Part Again!
stage {Query[Coffee] map
(c => c.id.toDouble)}
Compile Errorin Slick method toDouble is not a member of Int
44 / 60
![Page 109: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/109.jpg)
Shadow Embedding
Shadow EmbeddingType Errors - Surprise!
stage {Query[Coffee] map (c =>
if(c.origin == "Iran")"Good"
elsec.quality
)}
Compiles and works!
45 / 60
![Page 110: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/110.jpg)
Shadow Embedding
Shadow EmbeddingType Errors - Surprise!
stage {Query[Coffee] map (c =>
if(c.origin == "Iran")"Good"
elsec.quality
)}
Compiles and works!
45 / 60
![Page 111: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/111.jpg)
Shadow Embedding
Shadow EmbeddingType Errors
Adapted from http://www.littlerocktours.com/images/vehicles/buses/109-lg.jpg
46 / 60
![Page 112: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/112.jpg)
Shadow Embedding
Shadow EmbeddingProblem 3
Problem 3 (recap)
How to have high performance?
47 / 60
![Page 113: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/113.jpg)
Shadow Embedding
Shadow EmbeddingProblem 3
Problem 3 (recap)
How to have high performance?
47 / 60
![Page 114: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/114.jpg)
Shadow Embedding
Shadow EmbeddingShadow Interpreter
48 / 60
![Page 115: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/115.jpg)
Shadow Embedding
Shadow EmbeddingShadow Interpreter
49 / 60
![Page 116: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/116.jpg)
Shadow Embedding
Shadow EmbeddingShadow Interpreter
49 / 60
![Page 117: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/117.jpg)
Shadow Embedding
Shadow EmbeddingQuery Template
Shadow Embedding Query Template
def getCoffee(id: Int) = stage {for {
c <- Query[Coffee] if c.id == id} yield c.name
}
getCoffee (10)
JDBC Prepared Statement
"select c.NAME from COFFEES c where c.ID = ?"
50 / 60
![Page 118: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/118.jpg)
Shadow Embedding
Shadow EmbeddingQuery Template
Shadow Embedding Query Template
def getCoffee(id: Int) = stage {for {
c <- Query[Coffee] if c.id == id} yield c.name
}
getCoffee (10)
JDBC Prepared Statement
"select c.NAME from COFFEES c where c.ID = ?"
50 / 60
![Page 119: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/119.jpg)
Shadow Embedding
Shadow EmbeddingQuery Template
Shadow Embedding Query Template
def getCoffee(id: Int) = stage {for {
c <- Query[Coffee] if c.id == id} yield c.name
}
getCoffee (10)
JDBC Prepared Statement
"select c.NAME from COFFEES c where c.ID = ?"
50 / 60
![Page 120: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/120.jpg)
Shadow Embedding
Shadow EmbeddingQuery Template - Shadow vs. Lifted
def getCoffee(id: Int) = stage {for {
c <- Query[Coffee] if c.id == id} yield c.name
}
getCoffee (10)
vs.val getCoffee = for {
id <- Parameters[Int]c <- Query(Coffees) if c.id === id
} yield c.name
getCoffee (10)
51 / 60
![Page 121: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/121.jpg)
Shadow Embedding
Shadow EmbeddingComposability
val query: Query[Coffee] = stage {Query[Coffee] filter (_.origin == "Iran")
}
stage {query map (_.name)
}
52 / 60
![Page 122: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/122.jpg)
Shadow Embedding
Shadow EmbeddingComposability
val query: Query[Coffee] = stage {Query[Coffee] filter (_.origin == "Iran")
}
stage {query map (_.name)
}
52 / 60
![Page 123: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/123.jpg)
Shadow Embedding
Shadow EmbeddingSummary
Problem 1 (recap)
How to create Lifted Embedding Table?Type Providers
Problem 2 (recap)
How to catch the errors?Shallow Interface makes it comprehensibleYin-Yang makes it comprehensive
Problem 3 (recap)
How to have high performance?Shadow Interpreter reduces the user effort
53 / 60
![Page 124: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/124.jpg)
Shadow Embedding
Shadow EmbeddingSummary
Problem 1 (recap)
How to create Lifted Embedding Table?
Type Providers
Problem 2 (recap)
How to catch the errors?Shallow Interface makes it comprehensibleYin-Yang makes it comprehensive
Problem 3 (recap)
How to have high performance?Shadow Interpreter reduces the user effort
53 / 60
![Page 125: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/125.jpg)
Shadow Embedding
Shadow EmbeddingSummary
Problem 1 (recap)
How to create Lifted Embedding Table?Type Providers
Problem 2 (recap)
How to catch the errors?Shallow Interface makes it comprehensibleYin-Yang makes it comprehensive
Problem 3 (recap)
How to have high performance?Shadow Interpreter reduces the user effort
53 / 60
![Page 126: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/126.jpg)
Shadow Embedding
Shadow EmbeddingSummary
Problem 1 (recap)
How to create Lifted Embedding Table?Type Providers
Problem 2 (recap)
How to catch the errors?
Shallow Interface makes it comprehensibleYin-Yang makes it comprehensive
Problem 3 (recap)
How to have high performance?Shadow Interpreter reduces the user effort
53 / 60
![Page 127: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/127.jpg)
Shadow Embedding
Shadow EmbeddingSummary
Problem 1 (recap)
How to create Lifted Embedding Table?Type Providers
Problem 2 (recap)
How to catch the errors?Shallow Interface makes it comprehensible
Yin-Yang makes it comprehensive
Problem 3 (recap)
How to have high performance?Shadow Interpreter reduces the user effort
53 / 60
![Page 128: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/128.jpg)
Shadow Embedding
Shadow EmbeddingSummary
Problem 1 (recap)
How to create Lifted Embedding Table?Type Providers
Problem 2 (recap)
How to catch the errors?Shallow Interface makes it comprehensibleYin-Yang makes it comprehensive
Problem 3 (recap)
How to have high performance?Shadow Interpreter reduces the user effort
53 / 60
![Page 129: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/129.jpg)
Shadow Embedding
Shadow EmbeddingSummary
Problem 1 (recap)
How to create Lifted Embedding Table?Type Providers
Problem 2 (recap)
How to catch the errors?Shallow Interface makes it comprehensibleYin-Yang makes it comprehensive
Problem 3 (recap)
How to have high performance?
Shadow Interpreter reduces the user effort
53 / 60
![Page 130: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/130.jpg)
Shadow Embedding
Shadow EmbeddingSummary
Problem 1 (recap)
How to create Lifted Embedding Table?Type Providers
Problem 2 (recap)
How to catch the errors?Shallow Interface makes it comprehensibleYin-Yang makes it comprehensive
Problem 3 (recap)
How to have high performance?Shadow Interpreter reduces the user effort
53 / 60
![Page 131: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/131.jpg)
Evaluation
Outline
1 Introduction
2 Lifted Embedding
3 Direct Embedding
4 Shadow Embedding
5 Evaluation
53 / 60
![Page 132: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/132.jpg)
Evaluation
Correctness
Several basic tests
All Direct Embedding test suitesImportant Lifted Embedding test suites
54 / 60
![Page 133: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/133.jpg)
Evaluation
Correctness
Several basic testsAll Direct Embedding test suites
Important Lifted Embedding test suites
54 / 60
![Page 134: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/134.jpg)
Evaluation
Correctness
Several basic testsAll Direct Embedding test suitesImportant Lifted Embedding test suites
54 / 60
![Page 135: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/135.jpg)
Evaluation
PerformanceMicrobenchmarking
Shadow Embedding Simple Selection
for (i <- range) {stage {
for (c <- Query[Coffee] if c.id == 1) yield c}
}
55 / 60
![Page 136: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/136.jpg)
Evaluation
PerformanceMicrobenchmarking
55 / 60
![Page 137: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/137.jpg)
Evaluation
PerformanceMicrobenchmarking
Shadow Embedding Parameterized Selection
for (i <- range) {stage {
for (c <- Query[Coffee] if c.id < i) yield c}
}
55 / 60
![Page 138: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/138.jpg)
Evaluation
PerformanceMicrobenchmarking
55 / 60
![Page 139: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/139.jpg)
Evaluation
PerformanceDatabench
50,000 accounts500,000 transactions20% updating80% reading
56 / 60
![Page 140: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/140.jpg)
Evaluation
PerformanceDatabench
57 / 60
![Page 141: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/141.jpg)
Evaluation
Conclusion
User-friendly
Shallow InterfaceType ProvidersComposabilityShadow Interpreter
Comprehensive and comprehensible type errors
Shallow InterfaceYin-Yang
Highly performant
Shadow Interpreter
Interoperable with Lifted Embedding
Reusing Lifted Embedding
Maintainable
Reusing Lifted Embedding
58 / 60
![Page 142: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/142.jpg)
Evaluation
Conclusion
User-friendlyShallow Interface
Type ProvidersComposabilityShadow Interpreter
Comprehensive and comprehensible type errors
Shallow InterfaceYin-Yang
Highly performant
Shadow Interpreter
Interoperable with Lifted Embedding
Reusing Lifted Embedding
Maintainable
Reusing Lifted Embedding
58 / 60
![Page 143: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/143.jpg)
Evaluation
Conclusion
User-friendlyShallow InterfaceType Providers
ComposabilityShadow Interpreter
Comprehensive and comprehensible type errors
Shallow InterfaceYin-Yang
Highly performant
Shadow Interpreter
Interoperable with Lifted Embedding
Reusing Lifted Embedding
Maintainable
Reusing Lifted Embedding
58 / 60
![Page 144: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/144.jpg)
Evaluation
Conclusion
User-friendlyShallow InterfaceType ProvidersComposability
Shadow InterpreterComprehensive and comprehensible type errors
Shallow InterfaceYin-Yang
Highly performant
Shadow Interpreter
Interoperable with Lifted Embedding
Reusing Lifted Embedding
Maintainable
Reusing Lifted Embedding
58 / 60
![Page 145: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/145.jpg)
Evaluation
Conclusion
User-friendlyShallow InterfaceType ProvidersComposabilityShadow Interpreter
Comprehensive and comprehensible type errors
Shallow InterfaceYin-Yang
Highly performant
Shadow Interpreter
Interoperable with Lifted Embedding
Reusing Lifted Embedding
Maintainable
Reusing Lifted Embedding
58 / 60
![Page 146: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/146.jpg)
Evaluation
Conclusion
User-friendlyShallow InterfaceType ProvidersComposabilityShadow Interpreter
Comprehensive and comprehensible type errors
Shallow InterfaceYin-Yang
Highly performant
Shadow Interpreter
Interoperable with Lifted Embedding
Reusing Lifted Embedding
Maintainable
Reusing Lifted Embedding
58 / 60
![Page 147: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/147.jpg)
Evaluation
Conclusion
User-friendlyShallow InterfaceType ProvidersComposabilityShadow Interpreter
Comprehensive and comprehensible type errorsShallow Interface
Yin-YangHighly performant
Shadow Interpreter
Interoperable with Lifted Embedding
Reusing Lifted Embedding
Maintainable
Reusing Lifted Embedding
58 / 60
![Page 148: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/148.jpg)
Evaluation
Conclusion
User-friendlyShallow InterfaceType ProvidersComposabilityShadow Interpreter
Comprehensive and comprehensible type errorsShallow InterfaceYin-Yang
Highly performant
Shadow Interpreter
Interoperable with Lifted Embedding
Reusing Lifted Embedding
Maintainable
Reusing Lifted Embedding
58 / 60
![Page 149: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/149.jpg)
Evaluation
Conclusion
User-friendlyShallow InterfaceType ProvidersComposabilityShadow Interpreter
Comprehensive and comprehensible type errorsShallow InterfaceYin-Yang
Highly performant
Shadow InterpreterInteroperable with Lifted Embedding
Reusing Lifted Embedding
Maintainable
Reusing Lifted Embedding
58 / 60
![Page 150: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/150.jpg)
Evaluation
Conclusion
User-friendlyShallow InterfaceType ProvidersComposabilityShadow Interpreter
Comprehensive and comprehensible type errorsShallow InterfaceYin-Yang
Highly performantShadow Interpreter
Interoperable with Lifted Embedding
Reusing Lifted Embedding
Maintainable
Reusing Lifted Embedding
58 / 60
![Page 151: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/151.jpg)
Evaluation
Conclusion
User-friendlyShallow InterfaceType ProvidersComposabilityShadow Interpreter
Comprehensive and comprehensible type errorsShallow InterfaceYin-Yang
Highly performantShadow Interpreter
Interoperable with Lifted Embedding
Reusing Lifted EmbeddingMaintainable
Reusing Lifted Embedding
58 / 60
![Page 152: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/152.jpg)
Evaluation
Conclusion
User-friendlyShallow InterfaceType ProvidersComposabilityShadow Interpreter
Comprehensive and comprehensible type errorsShallow InterfaceYin-Yang
Highly performantShadow Interpreter
Interoperable with Lifted EmbeddingReusing Lifted Embedding
Maintainable
Reusing Lifted Embedding
58 / 60
![Page 153: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/153.jpg)
Evaluation
Conclusion
User-friendlyShallow InterfaceType ProvidersComposabilityShadow Interpreter
Comprehensive and comprehensible type errorsShallow InterfaceYin-Yang
Highly performantShadow Interpreter
Interoperable with Lifted EmbeddingReusing Lifted Embedding
Maintainable
Reusing Lifted Embedding
58 / 60
![Page 154: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/154.jpg)
Evaluation
Conclusion
User-friendlyShallow InterfaceType ProvidersComposabilityShadow Interpreter
Comprehensive and comprehensible type errorsShallow InterfaceYin-Yang
Highly performantShadow Interpreter
Interoperable with Lifted EmbeddingReusing Lifted Embedding
MaintainableReusing Lifted Embedding
58 / 60
![Page 155: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/155.jpg)
Evaluation
Future Work
Macro annotations
Shadow Programming
Yin-YangType providers
59 / 60
![Page 156: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/156.jpg)
Evaluation
Future Work
Macro annotationsShadow Programming
Yin-YangType providers
59 / 60
![Page 157: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/157.jpg)
Evaluation
Future Work
Macro annotationsShadow Programming
Yin-Yang
Type providers
59 / 60
![Page 158: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/158.jpg)
Evaluation
Future Work
Macro annotationsShadow Programming
Yin-YangType providers
59 / 60
![Page 159: An Embedded Query Language in Scala · An Embedded Query Language in Scala AmirShaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne MasterThesis,August2013](https://reader035.vdocuments.us/reader035/viewer/2022071219/6056470dff6c972ef40544ef/html5/thumbnails/159.jpg)
Evaluation
Thank You
Thank You!
60 / 60