Skip to content

Commit ea690cf

Browse files
committed
Draft of DESC for query planner
Simple planing explanation of the provided query.
1 parent f17613c commit ea690cf

2 files changed

Lines changed: 163 additions & 10 deletions

File tree

bql/planner/planner.go

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -230,19 +230,10 @@ func newQueryPlan(ctx context.Context, store storage.Store, stm *semantic.Statem
230230
if err != nil {
231231
return nil, err
232232
}
233-
var gs []storage.Graph
234-
for _, g := range stm.Graphs() {
235-
ng, err := store.Graph(ctx, g)
236-
if err != nil {
237-
return nil, err
238-
}
239-
gs = append(gs, ng)
240-
}
241233
return &queryPlan{
242234
stm: stm,
243235
store: store,
244236
bndgs: bs,
245-
grfs: gs,
246237
grfsNames: stm.Graphs(),
247238
cls: stm.SortedGraphPatternClauses(),
248239
tbl: t,
@@ -634,6 +625,14 @@ func (p *queryPlan) limit() {
634625

635626
// Execute queries the indicated graphs.
636627
func (p *queryPlan) Execute(ctx context.Context) (*table.Table, error) {
628+
// Collect the graph references.
629+
for _, g := range p.stm.Graphs() {
630+
ng, err := p.store.Graph(ctx, g)
631+
if err != nil {
632+
return nil, err
633+
}
634+
p.grfs = append(p.grfs, ng)
635+
}
637636
// Retrieve the data.
638637
lo := p.stm.GlobalLookupOptions()
639638
if err := p.processGraphPattern(ctx, lo); err != nil {

bql/semantic/semantic.go

Lines changed: 155 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,161 @@ type GraphClause struct {
122122

123123
// String returns a readable representaion of a graph clause.
124124
func (c *GraphClause) String() string {
125-
return "not implemented"
125+
b := bytes.NewBufferString("{ ")
126+
127+
// Subject section.
128+
if c.S != nil {
129+
b.WriteString(c.S.String())
130+
} else {
131+
b.WriteString(c.SBinding)
132+
}
133+
if c.SAlias != "" {
134+
b.WriteString(" AS ")
135+
b.WriteString(c.SAlias)
136+
}
137+
if c.STypeAlias != "" {
138+
b.WriteString(" TYPE ")
139+
b.WriteString(c.STypeAlias)
140+
}
141+
if c.SIDAlias != "" {
142+
b.WriteString(" ID ")
143+
b.WriteString(c.SIDAlias)
144+
}
145+
146+
// Predicate section.
147+
predicate := false
148+
if c.P != nil {
149+
b.WriteString(" ")
150+
b.WriteString(c.P.String())
151+
predicate = true
152+
}
153+
if c.PBinding != "" {
154+
b.WriteString(" ")
155+
b.WriteString(c.PBinding)
156+
}
157+
if c.PID != "" {
158+
b.WriteString(" \"")
159+
b.WriteString(c.PID)
160+
b.WriteString("\"")
161+
}
162+
if !predicate {
163+
if !c.PTemporal {
164+
b.WriteString("@[]")
165+
} else {
166+
b.WriteString("@[")
167+
if c.PAnchorBinding != "" {
168+
b.WriteString(c.PAnchorBinding)
169+
if c.PAnchorAlias != "" {
170+
b.WriteString(" at ")
171+
b.WriteString(c.PAnchorAlias)
172+
}
173+
} else {
174+
if c.PLowerBound != nil {
175+
b.WriteString(c.PLowerBound.String())
176+
} else {
177+
if c.PLowerBoundAlias != "" {
178+
b.WriteString(c.PLowerBoundAlias)
179+
}
180+
}
181+
b.WriteString(",")
182+
if c.PUpperBound != nil {
183+
b.WriteString(c.PUpperBound.String())
184+
} else {
185+
if c.PUpperBoundAlias != "" {
186+
b.WriteString(c.PUpperBoundAlias)
187+
}
188+
}
189+
}
190+
b.WriteString("]")
191+
}
192+
}
193+
194+
if c.PAlias != "" {
195+
b.WriteString(" AS ")
196+
b.WriteString(c.PAlias)
197+
}
198+
if c.PIDAlias != "" {
199+
b.WriteString(" ID ")
200+
b.WriteString(c.PIDAlias)
201+
}
202+
203+
// Object section.
204+
// Node portion.
205+
object := false
206+
if c.O != nil {
207+
b.WriteString(" ")
208+
b.WriteString(c.O.String())
209+
object = true
210+
} else {
211+
b.WriteString(" ")
212+
b.WriteString(c.OBinding)
213+
object = true
214+
}
215+
if c.OAlias != "" {
216+
b.WriteString(" AS ")
217+
b.WriteString(c.OAlias)
218+
}
219+
if c.OTypeAlias != "" {
220+
b.WriteString(" TYPE ")
221+
b.WriteString(c.OTypeAlias)
222+
}
223+
if c.OIDAlias != "" {
224+
b.WriteString(" ID ")
225+
b.WriteString(c.OIDAlias)
226+
}
227+
// Predicate portion.
228+
if !object {
229+
if c.OBinding != "" {
230+
b.WriteString(" ")
231+
b.WriteString(c.OBinding)
232+
}
233+
if c.OID != "" {
234+
b.WriteString(" \"")
235+
b.WriteString(c.OID)
236+
b.WriteString("\"")
237+
}
238+
if !c.OTemporal {
239+
b.WriteString("[]")
240+
} else {
241+
b.WriteString("[")
242+
if c.OAnchorBinding != "" {
243+
b.WriteString(c.OAnchorBinding)
244+
if c.OAnchorAlias != "" {
245+
b.WriteString(" at ")
246+
b.WriteString(c.OAnchorAlias)
247+
}
248+
} else {
249+
if c.OLowerBound != nil {
250+
b.WriteString(c.OLowerBound.String())
251+
} else {
252+
if c.OLowerBoundAlias != "" {
253+
b.WriteString(c.OLowerBoundAlias)
254+
}
255+
}
256+
b.WriteString(",")
257+
if c.OUpperBound != nil {
258+
b.WriteString(c.OUpperBound.String())
259+
} else {
260+
if c.OUpperBoundAlias != "" {
261+
b.WriteString(c.OUpperBoundAlias)
262+
}
263+
}
264+
}
265+
b.WriteString("]")
266+
}
267+
}
268+
269+
if c.OAlias != "" {
270+
b.WriteString(" AS ")
271+
b.WriteString(c.OAlias)
272+
}
273+
if c.OIDAlias != "" {
274+
b.WriteString(" ID ")
275+
b.WriteString(c.OIDAlias)
276+
}
277+
278+
b.WriteString(" }")
279+
return b.String()
126280
}
127281

128282
// Specificity return

0 commit comments

Comments
 (0)