Incremental Checking of OCL Constraints through SQL queries

27
Incremental Checking of OCL Constraints through SQL queries Xavier Oriol and Ernest Teniente {xoriol,teniente}@essi.upc.edu

description

Incremental Checking of OCL Constraints through SQL queries. Xavier Oriol and Ernest Teniente {xoriol,teniente}@essi.upc.edu. Motivation. IsSentTo. 1. receiver. {disjoint, complete}. Group. User. Message. Pair. ConversationGroup. phone: String state: String lastConnect : Date. - PowerPoint PPT Presentation

Transcript of Incremental Checking of OCL Constraints through SQL queries

Page 1: Incremental Checking of OCL  Constraints  through SQL queries

Incremental Checking ofOCL Constraints through 

SQL queries

Xavier Oriol and Ernest Teniente{xoriol,teniente}@essi.upc.edu

Page 2: Incremental Checking of OCL  Constraints  through SQL queries

Motivation

1

creationT: Date

Group phone: Stringstate: StringlastConnect: Date

User

body: StringcreationT: Date

MessageMember

Owner

Sendsgroup user

owned owner

*

*

2..*

1

1 *

sender msg

IsSentTo1

*msg

receiver

ConversationGroup

Pair

{disjoint, complete}

2

*IsFormedBy

Page 3: Incremental Checking of OCL  Constraints  through SQL queries

Motivation

2

ConversationGroup

Pair

creationT: Date

Group phone: Stringstate: StringlastConnect: Date

User

body: StringcreationT: Date

Message

{disjoint, complete}

Member

Owner

Sends

IsSentTo

group user

owned owner

*

*

2..*

1

1 *

1

*

sender msg

msg

receiver

2

*IsFormedBy

context User inv MemberOfOwned:self.group->includesAll(self.owned)

Page 4: Incremental Checking of OCL  Constraints  through SQL queries

Motivation

3

ConversationGroup

Pair

creationT: Date

Group phone: Stringstate: StringlastConnect: Date

User

body: StringcreationT: Date

Message

{disjoint, complete}

Member

Owner

Sends

IsSentTo

group user

owned owner

*

*

2..*

1

1 *

1

*

sender msg

msg

receiver

2

*IsFormedBy

context User inv MemberOfOwned:self.group->includesAll(self.owned)

context Group inv MessagesAfterCreation:self.msg->forAll(e| e.creationT > self.creationT)

Page 5: Incremental Checking of OCL  Constraints  through SQL queries

Motivation

3

context User inv MemberOfOwned:self.group->includesAll(self.owned)

context Group inv MessagesAfterCreation:self.msg->forAll(e| e.creationT > self.creationT)

Page 6: Incremental Checking of OCL  Constraints  through SQL queries

Motivation

4

How can we check OCL constraints?context User inv MemberOfOwned:self.group->includesAll(self.owned)

context Group inv MessagesAfterCreation:self.msg->forAll(e| e.creationT > self.creationT)

Translating OCL constraints to SQL queriesIdea: Query for the instances violating the constraint

SELECT *FROM Group JOIN IsSentTo JOIN MessageWHERE Group.createT >= Message.creationT

Page 7: Incremental Checking of OCL  Constraints  through SQL queries

Motivation

5

There are some automatic OCL to SQL translators:

• OCL2SQL from OCLDresden

• MySQL4OCL

None of them is incremental

Page 8: Incremental Checking of OCL  Constraints  through SQL queries

Motivation

6

ConversationGroup

Pair

creationT: DateGroup phone: String

state: StringlastConn: Date

User

body: StringcreationT: Date

Message

{disjoint, complete}

Member

Owner

Sends

IsSentTo

group user

owned owner

*

*

2..*

11 *

1

*

sender msg

msg

receiver

2* IsFormedBy SELECT *

FROM Group JOIN IsSentTo JOIN MessageWHERE Group.createT <= Message.creationT

SELECT *FROM Owner EXCEPT Member

Hello!

We need to compute the whole queries again

DATA INSERT INTO Messages VALUES(‘Hello!’, ...)

Page 9: Incremental Checking of OCL  Constraints  through SQL queries

Our approach

Translate OCL constraints into incremental SQL queries

Goal

7

Page 10: Incremental Checking of OCL  Constraints  through SQL queries

Our approach

8

IncrementalOnly check the potentially violated constraints

Only check for the new updated values

context User inv MemberOfOwned:self.group->includesAll(self.owned)

context Group inv MessagesAfterCreation:self.msg->forAll(e| e.creationT > self.creationT)

Hello!

New Message

Only check whether the new message “Hello!” has been created after the receiver’s group creation

Page 11: Incremental Checking of OCL  Constraints  through SQL queries

Our approach

Translate OCL constraints into EDCsand EDCs to incremental SQL queries

Our approach

7

Page 12: Incremental Checking of OCL  Constraints  through SQL queries

Our approach

9

Translate OCL into EDCsAn EDC is a logic rule that tells when a data updatemay cause the violation of some integrity constraint

context User inv MemberOfOwned:self.group->includesAll(self.owned)

¬Owner(u, g) ∧ ins_Owner(u, g) ∧ ¬Member(u, g) ∧ ¬ins_Member(u,g) → ⏊¬Owner(u, g) ins_Owner(u, g) Member(u, g) del_Member(u,g) ∧ ∧ ∧ → ⏊ Owner(u, g) ¬del_Owner(u, g) Member(u, g) del_Member(u,g) ∧ ∧ ∧ → ⏊

Page 13: Incremental Checking of OCL  Constraints  through SQL queries

Our approach

10

Translate EDCs into SQLIdea: Join the columns of the bound variables

ins_Owner(u, g) ¬Owner(u, g) ∧ ∧ Member(u, g) ∧ del_Member(u,g) → ⏊

SELECT *FROM ins_Owner

ANTI JOIN Owner ON (user, group)JOIN Member ON (user, group) JOIN del_Member ON (user, group)

Page 14: Incremental Checking of OCL  Constraints  through SQL queries

Our approach

10

SELECT *FROM ins_Owner

ANTI JOIN Owner ON (user, group)JOIN Member ON (user, group) JOIN del_Member ON (user, group)

Translate EDCs into SQL

Page 15: Incremental Checking of OCL  Constraints  through SQL queries

Our approach

11

SELECT *FROM ins_Owner

ANTI JOIN Owner ON (user, group)JOIN Member ON (user, group) JOIN del_Member ON (user, group)

The translation never uses subqueriesDBMS query planners can fully optimize the query

Hello!

New Message

|| ins_Owner || = 0Query returns

empty set practicallyin constant time

context User inv MemberOfOwned:self.group->includesAll(self.owned)Translate EDCs into SQL

Page 16: Incremental Checking of OCL  Constraints  through SQL queries

Our approach

12

SELECT *FROM Group

ANTI JOIN del_Group ON (group)JOIN ins_SendsTo ON (group) ANTI JOIN SendsTo ON (group)JOIN ins_Message ON (message)ANTI JOIN Message ON (message)

WHERE Group.creationT >= ins_Message.creationT

Hello!

New Message

|| ins_Message || = 1Query only looks for

data joining the unique new message

Translate EDCs into SQLcontext Group inv MssgsAfterCreation:self.msg->forAll(e| e.cT > self.cT)

Page 17: Incremental Checking of OCL  Constraints  through SQL queries

Our approach

13

Some experiments

N = 5.000 N = 50.000 N = 500.000 N = 5.000.000

MySQL4OCL 0,60 s 2,06 s 17,0 s 223 s

OCL2SQL 0,11 s 0,17 s 0,51 s 42,15 s

Our Approach 0,09 s 0,09 s 0,10 s 0,10 s

MySQL4OCL 1,94 s 15,0 s 126 s > 1 h

OCL2SQL 0,11 s 0,25 s 1,72 s > 1h

Our Approach 0,09 s 0,09 s 0,24 s 1,63 s

N = #Messages N/10 = #UsersN/100 = #ins_Messages

MemberOfOwned

MsgsAfterCreation

Page 18: Incremental Checking of OCL  Constraints  through SQL queries

Our approach

13

Some experiments

N = 5.000 N = 50.000 N = 500.000 N = 5.000.000

MySQL4OCL 0,60 s 2,06 s 17,0 s 223 s

OCL2SQL 0,11 s 0,17 s 0,51 s 42,15 s

Our Approach 0,09 s 0,09 s 0,10 s 0,10 s

MySQL4OCL 1,94 s 15,0 s 126 s > 1 h

OCL2SQL 0,11 s 0,25 s 1,72 s > 1h

Our Approach 0,09 s 0,09 s 0,24 s 1,63 s

MemberOfOwned

MsgsAfterCreation

N = #Messages N/10 = #UsersN/100 = #ins_Messages

Page 19: Incremental Checking of OCL  Constraints  through SQL queries

Our approach

13

Some experiments

N = 5.000 N = 50.000 N = 500.000 N = 5.000.000

MySQL4OCL 0,60 s 2,06 s 17,0 s 223 s

OCL2SQL 0,11 s 0,17 s 0,51 s 42,15 s

Our Approach 0,09 s 0,09 s 0,10 s 0,10 s

MySQL4OCL 1,94 s 15,0 s 126 s > 1 h

OCL2SQL 0,11 s 0,25 s 1,72 s > 1h

Our Approach 0,09 s 0,09 s 0,24 s 1,63 s

MemberOfOwned

MsgsAfterCreation

N = #Messages N/10 = #UsersN/100 = #ins_Messages

Page 20: Incremental Checking of OCL  Constraints  through SQL queries

Our approach

13

Some experiments

N = 5.000 N = 50.000 N = 500.000 N = 5.000.000

MySQL4OCL 0,60 s 2,06 s 17,0 s 223 s

OCL2SQL 0,11 s 0,17 s 0,51 s 42,15 s

Our Approach 0,09 s 0,09 s 0,10 s 0,10 s

MySQL4OCL 1,94 s 15,0 s 126 s > 1 h

OCL2SQL 0,11 s 0,25 s 1,72 s > 1h

Our Approach 0,09 s 0,09 s 0,24 s 1,63 s

MemberOfOwned

MsgsAfterCreation

N = #Messages N/10 = #UsersN/100 = #ins_Messages

Page 21: Incremental Checking of OCL  Constraints  through SQL queries

Our approach

13

Some experiments

N = 5.000 N = 50.000 N = 500.000 N = 5.000.000

MySQL4OCL 0,60 s 2,06 s 17,0 s 223 s

OCL2SQL 0,11 s 0,17 s 0,51 s 42,15 s

Our Approach 0,09 s 0,09 s 0,10 s 0,10 s

MySQL4OCL 1,94 s 15,0 s 126 s > 1 h

OCL2SQL 0,11 s 0,25 s 1,72 s > 1h

Our Approach 0,09 s 0,09 s 0,24 s 1,63 s

MemberOfOwned

MsgsAfterCreation

N = #Messages N/10 = #UsersN/100 = #ins_Messages

Page 22: Incremental Checking of OCL  Constraints  through SQL queries

Our approach

13

Some experiments

N = 5.000 N = 50.000 N = 500.000 N = 5.000.000

MySQL4OCL 0,60 s 2,06 s 17,0 s 223 s

OCL2SQL 0,11 s 0,17 s 0,51 s 42,15 s

Our Approach 0,09 s 0,09 s 0,10 s 0,10 s

MySQL4OCL 1,94 s 15,0 s 126 s > 1 h

OCL2SQL 0,11 s 0,25 s 1,72 s > 1h

Our Approach 0,09 s 0,09 s 0,24 s 1,63 s

MemberOfOwned

MsgsAfterCreation

N = #Messages N/10 = #UsersN/100 = #ins_Messages

Page 23: Incremental Checking of OCL  Constraints  through SQL queries

Our approach

13

Some experiments

N = 5.000 N = 50.000 N = 500.000 N = 5.000.000

MySQL4OCL 0,60 s 2,06 s 17,0 s 223 s

OCL2SQL 0,11 s 0,17 s 0,51 s 42,15 s

Our Approach 0,09 s 0,09 s 0,10 s 0,10 s

MySQL4OCL 1,94 s 15,0 s 126 s > 1 h

OCL2SQL 0,11 s 0,25 s 1,72 s > 1h

Our Approach 0,09 s 0,09 s 0,24 s 1,63 s

MemberOfOwned

MsgsAfterCreation

N = #Messages N/10 = #UsersN/100 = #ins_Messages

Page 24: Incremental Checking of OCL  Constraints  through SQL queries

Our approach

13

Some experiments

N = 5.000 N = 50.000 N = 500.000 N = 5.000.000

MySQL4OCL 0,60 s 2,06 s 17,0 s 223 s

OCL2SQL 0,11 s 0,17 s 0,51 s 42,15 s

Our Approach 0,09 s 0,09 s 0,10 s 0,10 s

MySQL4OCL 1,94 s 15,0 s 126 s > 1 h

OCL2SQL 0,11 s 0,25 s 1,72 s > 1h

Our Approach 0,09 s 0,09 s 0,24 s 1,63 s

MemberOfOwned

MsgsAfterCreation

N = #Messages N/10 = #UsersN/100 = #ins_Messages

Page 25: Incremental Checking of OCL  Constraints  through SQL queries

14

ConclusionsWe translate OCL into incremental SQL

Translate from OCL to EDCsTranslate from EDCs to SQL

Our translation is incremental When an update is performed:

Only constraints that might be violated are checkedOnly for the rellevant values

Future WorkEnhance the subset of OCL translatable to EDCsUse triggers to avoid auxiliar tables

Page 26: Incremental Checking of OCL  Constraints  through SQL queries

Thank you Questions?

Page 27: Incremental Checking of OCL  Constraints  through SQL queries

Incremental Checking ofOCL Constraints through 

SQL queries

Xavier Oriol and Ernest Teniente{xoriol,teniente}@essi.upc.edu