MCPcopy Index your code
hub / github.com/dosco/graphjin / writeSelectFields

Function writeSelectFields

core/database_join.go:367–396  ·  view source on GitHub ↗

writeSelectFields writes the field list for a Select, recursing into children.

(buf *bytes.Buffer, sel *qcode.Select, selects []qcode.Select)

Source from the content-addressed store, hash-verified

365
366// writeSelectFields writes the field list for a Select, recursing into children.
367func writeSelectFields(buf *bytes.Buffer, sel *qcode.Select, selects []qcode.Select) {
368 first := true
369 for _, f := range sel.Fields {
370 if !first {
371 buf.WriteString(" ")
372 }
373 first = false
374 buf.WriteString(f.FieldName)
375 }
376
377 // Recurse into child selects (nested relationships within the same target DB)
378 for _, cid := range sel.Children {
379 csel := &selects[cid]
380 // Skip independent cross-database join children. When the parent is
381 // already a database-join select, its children are passthrough fields for
382 // the target database subquery and must be preserved.
383 if sel.SkipRender != qcode.SkipTypeDatabaseJoin &&
384 (csel.SkipRender == qcode.SkipTypeDatabaseJoin || csel.SkipRender == qcode.SkipTypeRemote) {
385 continue
386 }
387 if !first {
388 buf.WriteString(" ")
389 }
390 first = false
391 buf.WriteString(csel.FieldName)
392 buf.WriteString(" { ")
393 writeSelectFields(buf, csel, selects)
394 buf.WriteString(" }")
395 }
396}
397
398// databaseJoinFieldIds finds fields that require cross-database joins.
399func (s *gstate) databaseJoinFieldIds() ([][]byte, map[string]*qcode.Select, error) {

Calls 1

WriteStringMethod · 0.65