Fundamental Propertjes of the GraphQL Language
Olaf Hartjg
@olafiartjg
Joint work with Jorge Pérez from the Universidad de Chile
Fundamental Propertjes of the GraphQL Language Olaf Hartjg - - PowerPoint PPT Presentation
Fundamental Propertjes of the GraphQL Language Olaf Hartjg @olafiartjg Joint work with Jorge Prez from the Universidad de Chile Olaf Hartjg Fundamental Propertjes of the GraphQL Language 2 Olaf Hartjg Fundamental Propertjes of the
@olafiartjg
Joint work with Jorge Pérez from the Universidad de Chile
2 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
3 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
4 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
5 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
7 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
8 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
9 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
10 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
11 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
Typed nodes
12 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
Typed nodes One special node
13 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
Typed nodes One special node Node properties
14 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
Typed nodes One special node Node properties Edge properties
15 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
Typed nodes One special node Node properties Edge properties
We also formalize the notions of GraphQL schema and schema satisfaction based on this data model
16 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
17 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
friends { name }⟧
u
=
18 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
= friends: [ ]
friends { name }⟧
u
19 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
friends: [ { ⟦ name⟧
v} { ⟦
name⟧
w} ]
=
friends { name }⟧
u
20 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
= friends: [ {name:R2-D2} {name:Han} ]
friends { name }⟧
u
21 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
⟧ hero[episode:EMPIRE] { friends {name} }
22 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
⟧
r
hero[episode:EMPIRE] { friends {name} }
23 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
⟧
r
hero[episode:EMPIRE] { friends {name} }
= hero: { ⟦ friends {name} ⟧
u }
24 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
⟧
r
hero[episode:EMPIRE] { friends {name} }
= hero: { ⟦ friends {name} ⟧
u }
= hero: { friends: [ {name:R2-D2} {name:Han} ] }
Evaluation Problem
26 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
GraphQL query q GraphQL graph G data value d yes no Does d occur in the result of q over G? Does d occur in the result of q over G?
27 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
PSPACE NP P
28 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
PSPACE NP P Relational Algebra SPARQL Conjunctive Queries BGPs (SPARQL)
29 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
PSPACE NP P NL GraphQL Relational Algebra SPARQL Conjunctive Queries BGPs (SPARQL)
Enumeration Problem
31 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
hero { name: Luke friends: [ { name: R2-D2} { name: Han} ] id: 1000 name: Luke friends: [ { id: 2001} { id: 1002} ] } hero[episode: EMPIRE] { name friends { name } id name friends { id } }
Valid query Invalid result
32 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
hero[episode: EMPIRE] { name friends { name } id name friends { id } }
Valid query
hero { name: Luke friends: [ { name: R2-D2 Id: 2001 } { name: Han Id: 1002 } ] id: 1000 }
Fields are collected before answering Correct result
33 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
hero { name: Luke friends: [ { name: R2-D2 Id: 2001 } { name: Han Id: 1002 } ] id: 1000 } hero[episode: EMPIRE] { name friends { name id } id }
Fields are collected before answering Non-redundant query Correct result
34 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
hero[episode: EMPIRE] { name friends {
name } }
Valid query Invalid result
hero { name: Luke friends: [ { name: R2-D2 name: R2-D2 } { id: 1002 name: Han } ] }
35 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
hero[episode: EMPIRE] { name friends {
name } }
Valid query Correct result
hero { name: Luke friends: [ { name: R2-D2 } { id: 1002 name: Han } ] }
36 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
hero[episode: EMPIRE] { name friends {
} }
Valid query Correct result
hero { name: Luke friends: [ { name: R2-D2 } { id: 1002 name: Han } ] }
37 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
hero[episode: EMPIRE] { name friends {
} }
Ground-typed query Correct result
hero { name: Luke friends: [ { name: R2-D2 } { id: 1002 name: Han } ] }
38 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
39 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
hero { friends: [ { name:R2-D2} ] }
Result Size
41 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
2N times
42 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
Owners of first five repos that user “danbri” contributes to, and the owners of first five repos that they contribute to, and so on...
43 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
44 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
size(q, r) = 4 + size(q2 ,u) + size(q3 ,u) q2 q3
45 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
size(q, r) = 4 + size(q2 ,u) + size(q3 ,u) size(q2 ,u) = size(q3 ,u) = q3 q2
46 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
size(q, r) = 4 + size(q2 ,u) + size(q3 ,u) q3 size(q2 ,u) = 4 + size(q4 ,v) size(q3 ,u) = q4 q2
47 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
size(q, r) = 4 + size(q2 ,u) + size(q3 ,u) q3 size(q2 ,u) = 4 + size(q4 ,v) size(q3 ,u) = q5 size(q4 ,v) = 4 + size(q5 ,w) q4 q2
48 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
size(q, r) = 4 + size(q2 ,u) + size(q3 ,u) q3 size(q2 ,u) = 4 + size(q4 ,v) size(q3 ,u) = q5 size(q4 ,v) = 4 + size(q5 ,w) q4 size(q5 ,w) = 3 size(q5) = 3 q2
49 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
size(q, r) = 4 + size(q2 ,u) + size(q3 ,u) q3 size(q2 ,u) = 4 + size(q4 ,v) size(q3 ,u) = q5 size(q4 ,v) = 4 + size(q5 ,w) = 4 + 3 = 7 q4 size(q5 ,w) = 3 size(q4) = 7 size(q5) = 3 q2
50 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
size(q, r) = 4 + size(q2 ,u) + size(q3 ,u) q3 size(q2 ,u) = 4 + size(q4 ,v) = 11 size(q3 ,u) = q5 size(q4 ,v) = 4 + size(q5 ,w) = 4 + 3 = 7 q4 size(q5 ,w) = 3 size(q4) = 7 size(q5) = 3 size(q2) = 11 q2
51 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
size(q, r) = 4 + size(q2 ,u) + size(q3 ,u) q3 size(q2 ,u) = 4 + size(q4 ,v) = 11 size(q3 ,u)= 4 + size(q4 ,v) q5 size(q4 ,v) = 4 + size(q5 ,w) = 4 + 3 = 7 q4 size(q5 ,w) = 3 size(q4) = 7 size(q5) = 3 size(q2) = 11 q4 q2
52 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
size(q, r) = 4 + size(q2 ,u) + size(q3 ,u) q3 size(q2 ,u) = 4 + size(q4 ,v) = 11 size(q3 ,u)= 4 + size(q4 ,v) = 4 + 7 = 11 q5 size(q4 ,v) = 4 + size(q5 ,w) = 4 + 3 = 7 q4 size(q5 ,w) = 3 size(q4) = 7 size(q5) = 3 q4 size(q2) = 11 size(q3) = 11 q2
53 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
size(q, r) = 4 + size(q2 ,u) + size(q3 ,u) = 26 q3 size(q2 ,u) = 4 + size(q4 ,v) = 11 size(q3 ,u)= 4 + size(q4 ,v) = 4 + 7 = 11 q5 size(q4 ,v) = 4 + size(q5 ,w) = 4 + 3 = 7 q4 size(q5 ,w) = 3 size(q4) = 7 size(q5) = 3 size(q2) = 11 size(q3) = 11 q4 q2 11 11
54 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language
56 Olaf Hartjg – Fundamental Propertjes of the GraphQL Language