an embedded query language in scala · an embedded query language in scala amirshaikhha school of...

159
An Embedded Query Language in Scala Amir Shaikhha School of Computer and Communication Sciences, EPFL Typesafe, Lausanne Master Thesis, August 2013 1 / 60

Upload: others

Post on 17-Oct-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Evaluation

Thank You

Thank You!

60 / 60